diff --git a/DEPS.bzl b/DEPS.bzl index e2830653aedab..1e8925c7d518c 100644 --- a/DEPS.bzl +++ b/DEPS.bzl @@ -5152,13 +5152,13 @@ def go_deps(): name = "com_github_mattn_go_runewidth", build_file_proto_mode = "disable_global", importpath = "github.com/mattn/go-runewidth", - sha256 = "d97c4f0667a14957569c932a8e2488f1c43757b4dcce313897aa001f07d149b0", - strip_prefix = "github.com/mattn/go-runewidth@v0.0.15", + sha256 = "179d2d900c76ee3560fbeda60d0237a3be6acb734d0cb7423b55e5ccb0cedbca", + strip_prefix = "github.com/mattn/go-runewidth@v0.0.16", urls = [ - "http://bazel-cache.pingcap.net:8080/gomod/github.com/mattn/go-runewidth/com_github_mattn_go_runewidth-v0.0.15.zip", - "http://ats.apps.svc/gomod/github.com/mattn/go-runewidth/com_github_mattn_go_runewidth-v0.0.15.zip", - "https://cache.hawkingrei.com/gomod/github.com/mattn/go-runewidth/com_github_mattn_go_runewidth-v0.0.15.zip", - "https://storage.googleapis.com/pingcapmirror/gomod/github.com/mattn/go-runewidth/com_github_mattn_go_runewidth-v0.0.15.zip", + "http://bazel-cache.pingcap.net:8080/gomod/github.com/mattn/go-runewidth/com_github_mattn_go_runewidth-v0.0.16.zip", + "http://ats.apps.svc/gomod/github.com/mattn/go-runewidth/com_github_mattn_go_runewidth-v0.0.16.zip", + "https://cache.hawkingrei.com/gomod/github.com/mattn/go-runewidth/com_github_mattn_go_runewidth-v0.0.16.zip", + "https://storage.googleapis.com/pingcapmirror/gomod/github.com/mattn/go-runewidth/com_github_mattn_go_runewidth-v0.0.16.zip", ], ) go_repository( @@ -5204,13 +5204,13 @@ def go_deps(): name = "com_github_mgechev_revive", build_file_proto_mode = "disable_global", importpath = "github.com/mgechev/revive", - sha256 = "bebbe64597e76c9d7219de964b05d3f0659e4a31344d9dff2b5ec3fad50f7e3a", - strip_prefix = "github.com/mgechev/revive@v1.3.7", + sha256 = "ea4607d0ce69fb36f74a9a8c0e525c15ad85bc88ee65fb16a8ab356e788f9ff5", + strip_prefix = "github.com/mgechev/revive@v1.3.10-0.20240809190117-a638ed6e2499", urls = [ - "http://bazel-cache.pingcap.net:8080/gomod/github.com/mgechev/revive/com_github_mgechev_revive-v1.3.7.zip", - "http://ats.apps.svc/gomod/github.com/mgechev/revive/com_github_mgechev_revive-v1.3.7.zip", - "https://cache.hawkingrei.com/gomod/github.com/mgechev/revive/com_github_mgechev_revive-v1.3.7.zip", - "https://storage.googleapis.com/pingcapmirror/gomod/github.com/mgechev/revive/com_github_mgechev_revive-v1.3.7.zip", + "http://bazel-cache.pingcap.net:8080/gomod/github.com/mgechev/revive/com_github_mgechev_revive-v1.3.10-0.20240809190117-a638ed6e2499.zip", + "http://ats.apps.svc/gomod/github.com/mgechev/revive/com_github_mgechev_revive-v1.3.10-0.20240809190117-a638ed6e2499.zip", + "https://cache.hawkingrei.com/gomod/github.com/mgechev/revive/com_github_mgechev_revive-v1.3.10-0.20240809190117-a638ed6e2499.zip", + "https://storage.googleapis.com/pingcapmirror/gomod/github.com/mgechev/revive/com_github_mgechev_revive-v1.3.10-0.20240809190117-a638ed6e2499.zip", ], ) go_repository( @@ -5867,13 +5867,13 @@ def go_deps(): name = "com_github_petermattis_goid", build_file_proto_mode = "disable_global", importpath = "github.com/petermattis/goid", - sha256 = "c85422e507367742d767fb4102d312f959feec26c11122f91a0e5e73948740f7", - strip_prefix = "github.com/petermattis/goid@v0.0.0-20231207134359-e60b3f734c67", + sha256 = "3f47ab8e5713c36ec5b4295956a5ef012a192bc19198ae1b6591408c061e97ab", + strip_prefix = "github.com/petermattis/goid@v0.0.0-20240813172612-4fcff4a6cae7", urls = [ - "http://bazel-cache.pingcap.net:8080/gomod/github.com/petermattis/goid/com_github_petermattis_goid-v0.0.0-20231207134359-e60b3f734c67.zip", - "http://ats.apps.svc/gomod/github.com/petermattis/goid/com_github_petermattis_goid-v0.0.0-20231207134359-e60b3f734c67.zip", - "https://cache.hawkingrei.com/gomod/github.com/petermattis/goid/com_github_petermattis_goid-v0.0.0-20231207134359-e60b3f734c67.zip", - "https://storage.googleapis.com/pingcapmirror/gomod/github.com/petermattis/goid/com_github_petermattis_goid-v0.0.0-20231207134359-e60b3f734c67.zip", + "http://bazel-cache.pingcap.net:8080/gomod/github.com/petermattis/goid/com_github_petermattis_goid-v0.0.0-20240813172612-4fcff4a6cae7.zip", + "http://ats.apps.svc/gomod/github.com/petermattis/goid/com_github_petermattis_goid-v0.0.0-20240813172612-4fcff4a6cae7.zip", + "https://cache.hawkingrei.com/gomod/github.com/petermattis/goid/com_github_petermattis_goid-v0.0.0-20240813172612-4fcff4a6cae7.zip", + "https://storage.googleapis.com/pingcapmirror/gomod/github.com/petermattis/goid/com_github_petermattis_goid-v0.0.0-20240813172612-4fcff4a6cae7.zip", ], ) go_repository( @@ -6010,13 +6010,13 @@ def go_deps(): name = "com_github_pingcap_kvproto", build_file_proto_mode = "disable_global", importpath = "github.com/pingcap/kvproto", - sha256 = "9c11f4c5354534ac08526d61d180bf873786fef9089b1f018fc7365350839207", - strip_prefix = "github.com/pingcap/kvproto@v0.0.0-20240620063548-118a4cab53e4", + sha256 = "b1af34db24f2650cd2a687fa9c58bd746eb3ca76e08afe5dbe2ac569ce54b597", + strip_prefix = "github.com/pingcap/kvproto@v0.0.0-20240716095229-5f7ffec83ea7", urls = [ - "http://bazel-cache.pingcap.net:8080/gomod/github.com/pingcap/kvproto/com_github_pingcap_kvproto-v0.0.0-20240620063548-118a4cab53e4.zip", - "http://ats.apps.svc/gomod/github.com/pingcap/kvproto/com_github_pingcap_kvproto-v0.0.0-20240620063548-118a4cab53e4.zip", - "https://cache.hawkingrei.com/gomod/github.com/pingcap/kvproto/com_github_pingcap_kvproto-v0.0.0-20240620063548-118a4cab53e4.zip", - "https://storage.googleapis.com/pingcapmirror/gomod/github.com/pingcap/kvproto/com_github_pingcap_kvproto-v0.0.0-20240620063548-118a4cab53e4.zip", + "http://bazel-cache.pingcap.net:8080/gomod/github.com/pingcap/kvproto/com_github_pingcap_kvproto-v0.0.0-20240716095229-5f7ffec83ea7.zip", + "http://ats.apps.svc/gomod/github.com/pingcap/kvproto/com_github_pingcap_kvproto-v0.0.0-20240716095229-5f7ffec83ea7.zip", + "https://cache.hawkingrei.com/gomod/github.com/pingcap/kvproto/com_github_pingcap_kvproto-v0.0.0-20240716095229-5f7ffec83ea7.zip", + "https://storage.googleapis.com/pingcapmirror/gomod/github.com/pingcap/kvproto/com_github_pingcap_kvproto-v0.0.0-20240716095229-5f7ffec83ea7.zip", ], ) go_repository( @@ -6049,13 +6049,13 @@ def go_deps(): name = "com_github_pingcap_tipb", build_file_proto_mode = "disable_global", importpath = "github.com/pingcap/tipb", - sha256 = "42c365f3f99d2577fe29c89d433894b2d0d69b054248bb3bafbced33332933e3", - strip_prefix = "github.com/pingcap/tipb@v0.0.0-20240318032315-55a7867ddd50", + sha256 = "6e910c9689f1a81bad2ae55be1746d456c317d696ff2687390d3fb30f7d05c6d", + strip_prefix = "github.com/pingcap/tipb@v0.0.0-20240703084358-e46e4632bd2b", urls = [ - "http://bazel-cache.pingcap.net:8080/gomod/github.com/pingcap/tipb/com_github_pingcap_tipb-v0.0.0-20240318032315-55a7867ddd50.zip", - "http://ats.apps.svc/gomod/github.com/pingcap/tipb/com_github_pingcap_tipb-v0.0.0-20240318032315-55a7867ddd50.zip", - "https://cache.hawkingrei.com/gomod/github.com/pingcap/tipb/com_github_pingcap_tipb-v0.0.0-20240318032315-55a7867ddd50.zip", - "https://storage.googleapis.com/pingcapmirror/gomod/github.com/pingcap/tipb/com_github_pingcap_tipb-v0.0.0-20240318032315-55a7867ddd50.zip", + "http://bazel-cache.pingcap.net:8080/gomod/github.com/pingcap/tipb/com_github_pingcap_tipb-v0.0.0-20240703084358-e46e4632bd2b.zip", + "http://ats.apps.svc/gomod/github.com/pingcap/tipb/com_github_pingcap_tipb-v0.0.0-20240703084358-e46e4632bd2b.zip", + "https://cache.hawkingrei.com/gomod/github.com/pingcap/tipb/com_github_pingcap_tipb-v0.0.0-20240703084358-e46e4632bd2b.zip", + "https://storage.googleapis.com/pingcapmirror/gomod/github.com/pingcap/tipb/com_github_pingcap_tipb-v0.0.0-20240703084358-e46e4632bd2b.zip", ], ) go_repository( @@ -6413,13 +6413,13 @@ def go_deps(): name = "com_github_rivo_uniseg", build_file_proto_mode = "disable_global", importpath = "github.com/rivo/uniseg", - sha256 = "eca600065be5a1ead37478e645ad07d70dadaf4f06f681827d81158316538b23", - strip_prefix = "github.com/rivo/uniseg@v0.4.6", + sha256 = "b995e4aa0cc1e5779cc61138ac925cb8c1e963e40c80e4b93ee8553812ebb792", + strip_prefix = "github.com/rivo/uniseg@v0.4.7", urls = [ - "http://bazel-cache.pingcap.net:8080/gomod/github.com/rivo/uniseg/com_github_rivo_uniseg-v0.4.6.zip", - "http://ats.apps.svc/gomod/github.com/rivo/uniseg/com_github_rivo_uniseg-v0.4.6.zip", - "https://cache.hawkingrei.com/gomod/github.com/rivo/uniseg/com_github_rivo_uniseg-v0.4.6.zip", - "https://storage.googleapis.com/pingcapmirror/gomod/github.com/rivo/uniseg/com_github_rivo_uniseg-v0.4.6.zip", + "http://bazel-cache.pingcap.net:8080/gomod/github.com/rivo/uniseg/com_github_rivo_uniseg-v0.4.7.zip", + "http://ats.apps.svc/gomod/github.com/rivo/uniseg/com_github_rivo_uniseg-v0.4.7.zip", + "https://cache.hawkingrei.com/gomod/github.com/rivo/uniseg/com_github_rivo_uniseg-v0.4.7.zip", + "https://storage.googleapis.com/pingcapmirror/gomod/github.com/rivo/uniseg/com_github_rivo_uniseg-v0.4.7.zip", ], ) go_repository( @@ -6569,13 +6569,13 @@ def go_deps(): name = "com_github_sasha_s_go_deadlock", build_file_proto_mode = "disable_global", importpath = "github.com/sasha-s/go-deadlock", - sha256 = "82eaa020f254a21d5025b6cae9a908315ffa382f941ef228431c10177b9657d4", - strip_prefix = "github.com/sasha-s/go-deadlock@v0.3.1", + sha256 = "b927f67dd9a6dc183bac7249c019775e689aee67dc52bfa53354137139d722a1", + strip_prefix = "github.com/sasha-s/go-deadlock@v0.3.5", urls = [ - "http://bazel-cache.pingcap.net:8080/gomod/github.com/sasha-s/go-deadlock/com_github_sasha_s_go_deadlock-v0.3.1.zip", - "http://ats.apps.svc/gomod/github.com/sasha-s/go-deadlock/com_github_sasha_s_go_deadlock-v0.3.1.zip", - "https://cache.hawkingrei.com/gomod/github.com/sasha-s/go-deadlock/com_github_sasha_s_go_deadlock-v0.3.1.zip", - "https://storage.googleapis.com/pingcapmirror/gomod/github.com/sasha-s/go-deadlock/com_github_sasha_s_go_deadlock-v0.3.1.zip", + "http://bazel-cache.pingcap.net:8080/gomod/github.com/sasha-s/go-deadlock/com_github_sasha_s_go_deadlock-v0.3.5.zip", + "http://ats.apps.svc/gomod/github.com/sasha-s/go-deadlock/com_github_sasha_s_go_deadlock-v0.3.5.zip", + "https://cache.hawkingrei.com/gomod/github.com/sasha-s/go-deadlock/com_github_sasha_s_go_deadlock-v0.3.5.zip", + "https://storage.googleapis.com/pingcapmirror/gomod/github.com/sasha-s/go-deadlock/com_github_sasha_s_go_deadlock-v0.3.5.zip", ], ) go_repository( @@ -7206,26 +7206,26 @@ def go_deps(): name = "com_github_tikv_client_go_v2", build_file_proto_mode = "disable_global", importpath = "github.com/tikv/client-go/v2", - sha256 = "0093081c01fd5119490fb4145f770eb8a90da6c4e0e02708dae7b1fe24668cb2", - strip_prefix = "github.com/tikv/client-go/v2@v2.0.8-0.20240703095801-d73cc1ed6503", + sha256 = "cbaceaa4bbd945e24be9ccbb2af622baeb7542facedb7538f483d116d82f72ff", + strip_prefix = "github.com/tikv/client-go/v2@v2.0.8-0.20240815020919-c810ed88fb02", urls = [ - "http://bazel-cache.pingcap.net:8080/gomod/github.com/tikv/client-go/v2/com_github_tikv_client_go_v2-v2.0.8-0.20240703095801-d73cc1ed6503.zip", - "http://ats.apps.svc/gomod/github.com/tikv/client-go/v2/com_github_tikv_client_go_v2-v2.0.8-0.20240703095801-d73cc1ed6503.zip", - "https://cache.hawkingrei.com/gomod/github.com/tikv/client-go/v2/com_github_tikv_client_go_v2-v2.0.8-0.20240703095801-d73cc1ed6503.zip", - "https://storage.googleapis.com/pingcapmirror/gomod/github.com/tikv/client-go/v2/com_github_tikv_client_go_v2-v2.0.8-0.20240703095801-d73cc1ed6503.zip", + "http://bazel-cache.pingcap.net:8080/gomod/github.com/tikv/client-go/v2/com_github_tikv_client_go_v2-v2.0.8-0.20240815020919-c810ed88fb02.zip", + "http://ats.apps.svc/gomod/github.com/tikv/client-go/v2/com_github_tikv_client_go_v2-v2.0.8-0.20240815020919-c810ed88fb02.zip", + "https://cache.hawkingrei.com/gomod/github.com/tikv/client-go/v2/com_github_tikv_client_go_v2-v2.0.8-0.20240815020919-c810ed88fb02.zip", + "https://storage.googleapis.com/pingcapmirror/gomod/github.com/tikv/client-go/v2/com_github_tikv_client_go_v2-v2.0.8-0.20240815020919-c810ed88fb02.zip", ], ) go_repository( name = "com_github_tikv_pd_client", build_file_proto_mode = "disable_global", importpath = "github.com/tikv/pd/client", - sha256 = "166b1edc9991d64fb62b480c1d29b8430bfbd590c20c2290f0d3b68bce3059c0", - strip_prefix = "github.com/tikv/pd/client@v0.0.0-20240717053728-5ec6af403019", + sha256 = "bb4aa99260c2d1b22054d539cb37c18ce276c96b1b7c4a8f14ac4cbcda829654", + strip_prefix = "github.com/tikv/pd/client@v0.0.0-20240805092608-838ee7983b78", urls = [ - "http://bazel-cache.pingcap.net:8080/gomod/github.com/tikv/pd/client/com_github_tikv_pd_client-v0.0.0-20240717053728-5ec6af403019.zip", - "http://ats.apps.svc/gomod/github.com/tikv/pd/client/com_github_tikv_pd_client-v0.0.0-20240717053728-5ec6af403019.zip", - "https://cache.hawkingrei.com/gomod/github.com/tikv/pd/client/com_github_tikv_pd_client-v0.0.0-20240717053728-5ec6af403019.zip", - "https://storage.googleapis.com/pingcapmirror/gomod/github.com/tikv/pd/client/com_github_tikv_pd_client-v0.0.0-20240717053728-5ec6af403019.zip", + "http://bazel-cache.pingcap.net:8080/gomod/github.com/tikv/pd/client/com_github_tikv_pd_client-v0.0.0-20240805092608-838ee7983b78.zip", + "http://ats.apps.svc/gomod/github.com/tikv/pd/client/com_github_tikv_pd_client-v0.0.0-20240805092608-838ee7983b78.zip", + "https://cache.hawkingrei.com/gomod/github.com/tikv/pd/client/com_github_tikv_pd_client-v0.0.0-20240805092608-838ee7983b78.zip", + "https://storage.googleapis.com/pingcapmirror/gomod/github.com/tikv/pd/client/com_github_tikv_pd_client-v0.0.0-20240805092608-838ee7983b78.zip", ], ) go_repository( @@ -10300,13 +10300,13 @@ def go_deps(): name = "org_golang_x_crypto", build_file_proto_mode = "disable_global", importpath = "golang.org/x/crypto", - sha256 = "5cd21f5fcb21845389eed13ad39186f57c86db70f3cc6cf8a4904633f07d1bdb", - strip_prefix = "golang.org/x/crypto@v0.25.0", + sha256 = "ec96acfe28be3ff2fb14201c5f51132f0e24c7d0d6f3201a8aa69c84f989d014", + strip_prefix = "golang.org/x/crypto@v0.26.0", urls = [ - "http://bazel-cache.pingcap.net:8080/gomod/golang.org/x/crypto/org_golang_x_crypto-v0.25.0.zip", - "http://ats.apps.svc/gomod/golang.org/x/crypto/org_golang_x_crypto-v0.25.0.zip", - "https://cache.hawkingrei.com/gomod/golang.org/x/crypto/org_golang_x_crypto-v0.25.0.zip", - "https://storage.googleapis.com/pingcapmirror/gomod/golang.org/x/crypto/org_golang_x_crypto-v0.25.0.zip", + "http://bazel-cache.pingcap.net:8080/gomod/golang.org/x/crypto/org_golang_x_crypto-v0.26.0.zip", + "http://ats.apps.svc/gomod/golang.org/x/crypto/org_golang_x_crypto-v0.26.0.zip", + "https://cache.hawkingrei.com/gomod/golang.org/x/crypto/org_golang_x_crypto-v0.26.0.zip", + "https://storage.googleapis.com/pingcapmirror/gomod/golang.org/x/crypto/org_golang_x_crypto-v0.26.0.zip", ], ) go_repository( @@ -10378,26 +10378,26 @@ def go_deps(): name = "org_golang_x_mod", build_file_proto_mode = "disable_global", importpath = "golang.org/x/mod", - sha256 = "9c64a3efda43c92014675361b2620de1f2815d59875a379f0b3361018e5bdf59", - strip_prefix = "golang.org/x/mod@v0.18.0", + sha256 = "3c3528c39639b7cd699c121c100ddb71ab49f94bff257a4a3935e3ae9e8571fc", + strip_prefix = "golang.org/x/mod@v0.20.0", urls = [ - "http://bazel-cache.pingcap.net:8080/gomod/golang.org/x/mod/org_golang_x_mod-v0.18.0.zip", - "http://ats.apps.svc/gomod/golang.org/x/mod/org_golang_x_mod-v0.18.0.zip", - "https://cache.hawkingrei.com/gomod/golang.org/x/mod/org_golang_x_mod-v0.18.0.zip", - "https://storage.googleapis.com/pingcapmirror/gomod/golang.org/x/mod/org_golang_x_mod-v0.18.0.zip", + "http://bazel-cache.pingcap.net:8080/gomod/golang.org/x/mod/org_golang_x_mod-v0.20.0.zip", + "http://ats.apps.svc/gomod/golang.org/x/mod/org_golang_x_mod-v0.20.0.zip", + "https://cache.hawkingrei.com/gomod/golang.org/x/mod/org_golang_x_mod-v0.20.0.zip", + "https://storage.googleapis.com/pingcapmirror/gomod/golang.org/x/mod/org_golang_x_mod-v0.20.0.zip", ], ) go_repository( name = "org_golang_x_net", build_file_proto_mode = "disable_global", importpath = "golang.org/x/net", - sha256 = "0adf4068f2b9d2b2852288b77caf1f76dac61f960e691e7544191de9bfa36406", - strip_prefix = "golang.org/x/net@v0.27.0", + sha256 = "c6f7bde4bb418d1f5ee5dc437d09ce9f10743ddba043cdca82eb57ddeb18d6da", + strip_prefix = "golang.org/x/net@v0.28.0", urls = [ - "http://bazel-cache.pingcap.net:8080/gomod/golang.org/x/net/org_golang_x_net-v0.27.0.zip", - "http://ats.apps.svc/gomod/golang.org/x/net/org_golang_x_net-v0.27.0.zip", - "https://cache.hawkingrei.com/gomod/golang.org/x/net/org_golang_x_net-v0.27.0.zip", - "https://storage.googleapis.com/pingcapmirror/gomod/golang.org/x/net/org_golang_x_net-v0.27.0.zip", + "http://bazel-cache.pingcap.net:8080/gomod/golang.org/x/net/org_golang_x_net-v0.28.0.zip", + "http://ats.apps.svc/gomod/golang.org/x/net/org_golang_x_net-v0.28.0.zip", + "https://cache.hawkingrei.com/gomod/golang.org/x/net/org_golang_x_net-v0.28.0.zip", + "https://storage.googleapis.com/pingcapmirror/gomod/golang.org/x/net/org_golang_x_net-v0.28.0.zip", ], ) go_repository( @@ -10430,26 +10430,26 @@ def go_deps(): name = "org_golang_x_sync", build_file_proto_mode = "disable_global", importpath = "golang.org/x/sync", - sha256 = "20b01085240e661bffc7f59383f21b90f112d669784220c6e59c801243216d22", - strip_prefix = "golang.org/x/sync@v0.7.0", + sha256 = "c79473c265ca571d389bf64fa1e7b2d8999b4ab3eb7af5e3bc185644783a1087", + strip_prefix = "golang.org/x/sync@v0.8.0", urls = [ - "http://bazel-cache.pingcap.net:8080/gomod/golang.org/x/sync/org_golang_x_sync-v0.7.0.zip", - "http://ats.apps.svc/gomod/golang.org/x/sync/org_golang_x_sync-v0.7.0.zip", - "https://cache.hawkingrei.com/gomod/golang.org/x/sync/org_golang_x_sync-v0.7.0.zip", - "https://storage.googleapis.com/pingcapmirror/gomod/golang.org/x/sync/org_golang_x_sync-v0.7.0.zip", + "http://bazel-cache.pingcap.net:8080/gomod/golang.org/x/sync/org_golang_x_sync-v0.8.0.zip", + "http://ats.apps.svc/gomod/golang.org/x/sync/org_golang_x_sync-v0.8.0.zip", + "https://cache.hawkingrei.com/gomod/golang.org/x/sync/org_golang_x_sync-v0.8.0.zip", + "https://storage.googleapis.com/pingcapmirror/gomod/golang.org/x/sync/org_golang_x_sync-v0.8.0.zip", ], ) go_repository( name = "org_golang_x_sys", build_file_proto_mode = "disable_global", importpath = "golang.org/x/sys", - sha256 = "2434299f530b049a5c8121d6465751ce58bd62f939afde34c442f79c88e9033c", - strip_prefix = "golang.org/x/sys@v0.22.0", + sha256 = "fbc83ddb0aee236ee85c0f8294e7c9b6f79d28794d22e7d0957fcd64ca252960", + strip_prefix = "golang.org/x/sys@v0.24.0", urls = [ - "http://bazel-cache.pingcap.net:8080/gomod/golang.org/x/sys/org_golang_x_sys-v0.22.0.zip", - "http://ats.apps.svc/gomod/golang.org/x/sys/org_golang_x_sys-v0.22.0.zip", - "https://cache.hawkingrei.com/gomod/golang.org/x/sys/org_golang_x_sys-v0.22.0.zip", - "https://storage.googleapis.com/pingcapmirror/gomod/golang.org/x/sys/org_golang_x_sys-v0.22.0.zip", + "http://bazel-cache.pingcap.net:8080/gomod/golang.org/x/sys/org_golang_x_sys-v0.24.0.zip", + "http://ats.apps.svc/gomod/golang.org/x/sys/org_golang_x_sys-v0.24.0.zip", + "https://cache.hawkingrei.com/gomod/golang.org/x/sys/org_golang_x_sys-v0.24.0.zip", + "https://storage.googleapis.com/pingcapmirror/gomod/golang.org/x/sys/org_golang_x_sys-v0.24.0.zip", ], ) go_repository( @@ -10469,26 +10469,26 @@ def go_deps(): name = "org_golang_x_term", build_file_proto_mode = "disable_global", importpath = "golang.org/x/term", - sha256 = "0766e30db0cea597a7c87ad6a829df2a538939dc65b5ca65791dfd6e4f1244b4", - strip_prefix = "golang.org/x/term@v0.22.0", + sha256 = "2597a62b487b952c11c89b2001551af1fe1d29c484388ec1c3f5e3be7ff58ba5", + strip_prefix = "golang.org/x/term@v0.23.0", urls = [ - "http://bazel-cache.pingcap.net:8080/gomod/golang.org/x/term/org_golang_x_term-v0.22.0.zip", - "http://ats.apps.svc/gomod/golang.org/x/term/org_golang_x_term-v0.22.0.zip", - "https://cache.hawkingrei.com/gomod/golang.org/x/term/org_golang_x_term-v0.22.0.zip", - "https://storage.googleapis.com/pingcapmirror/gomod/golang.org/x/term/org_golang_x_term-v0.22.0.zip", + "http://bazel-cache.pingcap.net:8080/gomod/golang.org/x/term/org_golang_x_term-v0.23.0.zip", + "http://ats.apps.svc/gomod/golang.org/x/term/org_golang_x_term-v0.23.0.zip", + "https://cache.hawkingrei.com/gomod/golang.org/x/term/org_golang_x_term-v0.23.0.zip", + "https://storage.googleapis.com/pingcapmirror/gomod/golang.org/x/term/org_golang_x_term-v0.23.0.zip", ], ) go_repository( name = "org_golang_x_text", build_file_proto_mode = "disable_global", importpath = "golang.org/x/text", - sha256 = "9b7c0575c894224bc7f85dfa2efb0ef93d7d54ae962cd95c8de90cecb407de94", - strip_prefix = "golang.org/x/text@v0.16.0", + sha256 = "48464f2ab2f988ca8b7b0a9d098e3664224c3b128629b5a9cc08025ee4a7e4ec", + strip_prefix = "golang.org/x/text@v0.17.0", urls = [ - "http://bazel-cache.pingcap.net:8080/gomod/golang.org/x/text/org_golang_x_text-v0.16.0.zip", - "http://ats.apps.svc/gomod/golang.org/x/text/org_golang_x_text-v0.16.0.zip", - "https://cache.hawkingrei.com/gomod/golang.org/x/text/org_golang_x_text-v0.16.0.zip", - "https://storage.googleapis.com/pingcapmirror/gomod/golang.org/x/text/org_golang_x_text-v0.16.0.zip", + "http://bazel-cache.pingcap.net:8080/gomod/golang.org/x/text/org_golang_x_text-v0.17.0.zip", + "http://ats.apps.svc/gomod/golang.org/x/text/org_golang_x_text-v0.17.0.zip", + "https://cache.hawkingrei.com/gomod/golang.org/x/text/org_golang_x_text-v0.17.0.zip", + "https://storage.googleapis.com/pingcapmirror/gomod/golang.org/x/text/org_golang_x_text-v0.17.0.zip", ], ) go_repository( @@ -10508,13 +10508,13 @@ def go_deps(): name = "org_golang_x_tools", build_file_proto_mode = "disable_global", importpath = "golang.org/x/tools", - sha256 = "6c12cd419d997290febb441698d0e52cab5a71be959ac7c4dd023f86b2d01d1e", - strip_prefix = "golang.org/x/tools@v0.22.0", + sha256 = "92607be1cacf4647fd31b19ee64b1a7c198178f1005c75371e38e7b08fb138e7", + strip_prefix = "golang.org/x/tools@v0.24.0", urls = [ - "http://bazel-cache.pingcap.net:8080/gomod/golang.org/x/tools/org_golang_x_tools-v0.22.0.zip", - "http://ats.apps.svc/gomod/golang.org/x/tools/org_golang_x_tools-v0.22.0.zip", - "https://cache.hawkingrei.com/gomod/golang.org/x/tools/org_golang_x_tools-v0.22.0.zip", - "https://storage.googleapis.com/pingcapmirror/gomod/golang.org/x/tools/org_golang_x_tools-v0.22.0.zip", + "http://bazel-cache.pingcap.net:8080/gomod/golang.org/x/tools/org_golang_x_tools-v0.24.0.zip", + "http://ats.apps.svc/gomod/golang.org/x/tools/org_golang_x_tools-v0.24.0.zip", + "https://cache.hawkingrei.com/gomod/golang.org/x/tools/org_golang_x_tools-v0.24.0.zip", + "https://storage.googleapis.com/pingcapmirror/gomod/golang.org/x/tools/org_golang_x_tools-v0.24.0.zip", ], ) go_repository( diff --git a/Makefile b/Makefile index 511c605092d43..03446f5104da1 100644 --- a/Makefile +++ b/Makefile @@ -627,7 +627,7 @@ bazel_coverage_test: failpoint-enable bazel_ci_simple_prepare bazel_build: mkdir -p bin bazel $(BAZEL_GLOBAL_CONFIG) build $(BAZEL_CMD_CONFIG) \ - //... --//build:with_nogo_flag=$(NOGO_FLAG) + //... --//build:with_nogo_flag=$(NOGO_FLAG) --subcommands bazel $(BAZEL_GLOBAL_CONFIG) build $(BAZEL_CMD_CONFIG) \ //cmd/importer:importer //cmd/tidb-server:tidb-server //cmd/tidb-server:tidb-server-check --//build:with_nogo_flag=$(NOGO_FLAG) cp bazel-out/k8-fastbuild/bin/cmd/tidb-server/tidb-server_/tidb-server ./bin diff --git a/OWNERS b/OWNERS index 609be7f7022b3..724a54404e7a0 100644 --- a/OWNERS +++ b/OWNERS @@ -43,7 +43,6 @@ approvers: - guo-shaoge - hanfei1991 - hawkingrei - - hi-rustin - hicqu - holys - hongyunyan @@ -80,6 +79,7 @@ approvers: - qw4990 - rebelice - Reminiscent + - Rustin170506 - sdojjy - shenli - siddontang diff --git a/WORKSPACE b/WORKSPACE index f237626eda481..f5d1790d7c8c6 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -12,9 +12,9 @@ http_archive( http_archive( name = "bazel_features", - sha256 = "d7787da289a7fb497352211ad200ec9f698822a9e0757a4976fd9f713ff372b3", - strip_prefix = "bazel_features-1.9.1", - url = "https://github.com/bazel-contrib/bazel_features/releases/download/v1.9.1/bazel_features-v1.9.1.tar.gz", + sha256 = "ba1282c1aa1d1fffdcf994ab32131d7c7551a9bc960fbf05f42d55a1b930cbfb", + strip_prefix = "bazel_features-1.15.0", + url = "https://github.com/bazel-contrib/bazel_features/releases/download/v1.15.0/bazel_features-v1.15.0.tar.gz", ) load("@bazel_features//:deps.bzl", "bazel_features_deps") @@ -48,12 +48,11 @@ http_archive( http_archive( name = "bazel_gazelle", - sha256 = "d76bf7a60fd8b050444090dfa2837a4eaf9829e1165618ee35dceca5cbdf58d5", + sha256 = "8ad77552825b078a10ad960bec6ef77d2ff8ec70faef2fd038db713f410f5d87", urls = [ - "http://bazel-cache.pingcap.net:8080/bazelbuild/bazel-gazelle/releases/download/v0.37.0/bazel-gazelle-v0.37.0.tar.gz", - "https://mirror.bazel.build/github.com/bazelbuild/bazel-gazelle/releases/download/v0.37.0/bazel-gazelle-v0.37.0.tar.gz", - "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.37.0/bazel-gazelle-v0.37.0.tar.gz", - "http://ats.apps.svc/bazelbuild/bazel-gazelle/releases/download/v0.37.0/bazel-gazelle-v0.37.0.tar.gz", + "http://bazel-cache.pingcap.net:8080/bazelbuild/bazel-gazelle/releases/download/v0.38.0/bazel-gazelle-v0.38.0.tar.gz", + "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.38.0/bazel-gazelle-v0.38.0.tar.gz", + "http://ats.apps.svc/bazelbuild/bazel-gazelle/releases/download/v0.38.0/bazel-gazelle-v0.38.0.tar.gz", ], ) @@ -86,7 +85,7 @@ go_download_sdk( "https://mirrors.aliyun.com/golang/{}", "https://dl.google.com/go/{}", ], - version = "1.21.12", + version = "1.21.13", ) go_register_toolchains( diff --git a/br/cmd/br/BUILD.bazel b/br/cmd/br/BUILD.bazel index c6b4e1d646e11..b82ecbd2bc8dc 100644 --- a/br/cmd/br/BUILD.bazel +++ b/br/cmd/br/BUILD.bazel @@ -37,9 +37,11 @@ go_library( "//pkg/util", "//pkg/util/gctuner", "//pkg/util/logutil", + "//pkg/util/mathutil", "//pkg/util/memory", "//pkg/util/metricsutil", "//pkg/util/redact", + "//pkg/util/size", "@com_github_gogo_protobuf//proto", "@com_github_pingcap_errors//:errors", "@com_github_pingcap_kvproto//pkg/brpb", @@ -63,5 +65,8 @@ go_test( srcs = ["main_test.go"], embed = [":br_lib"], flaky = True, - deps = ["@org_uber_go_goleak//:goleak"], + deps = [ + "@com_github_stretchr_testify//require", + "@org_uber_go_goleak//:goleak", + ], ) diff --git a/br/cmd/br/cmd.go b/br/cmd/br/cmd.go index df0395fa1d719..02939c78b4676 100644 --- a/br/cmd/br/cmd.go +++ b/br/cmd/br/cmd.go @@ -5,8 +5,10 @@ package main import ( "context" "fmt" + "math" "os" "path/filepath" + "runtime/debug" "sync" "sync/atomic" "time" @@ -21,9 +23,12 @@ import ( "github.com/pingcap/tidb/pkg/config" tidbutils "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/logutil" + "github.com/pingcap/tidb/pkg/util/mathutil" "github.com/pingcap/tidb/pkg/util/memory" "github.com/pingcap/tidb/pkg/util/redact" + "github.com/pingcap/tidb/pkg/util/size" "github.com/spf13/cobra" + "go.uber.org/zap" ) var ( @@ -107,6 +112,25 @@ func AddFlags(cmd *cobra.Command) { _ = cmd.PersistentFlags().MarkHidden(FlagRedactLog) } +const quarterGiB uint64 = 256 * size.MB +const halfGiB uint64 = 512 * size.MB +const fourGiB uint64 = 4 * size.GB + +func calculateMemoryLimit(memleft uint64) uint64 { + // memreserved = f(memleft) = 512MB * memleft / (memleft + 4GB) + // * f(0) = 0 + // * f(4GB) = 256MB + // * f(+inf) -> 512MB + memreserved := halfGiB / (1 + fourGiB/(memleft|1)) + // 0 memused memtotal-memreserved memtotal + // +--------+--------------------+----------------+ + // ^ br mem upper limit + // +--------------------^ + // GOMEMLIMIT range + memlimit := memleft - memreserved + return memlimit +} + // Init initializes BR cli. func Init(cmd *cobra.Command) (err error) { initOnce.Do(func() { @@ -162,6 +186,34 @@ func Init(cmd *cobra.Command) (err error) { } log.ReplaceGlobals(lg, p) memory.InitMemoryHook() + if debug.SetMemoryLimit(-1) == math.MaxInt64 { + memtotal, e := memory.MemTotal() + if e != nil { + err = e + return + } + memused, e := memory.MemUsed() + if e != nil { + err = e + return + } + if memused >= memtotal { + log.Warn("failed to obtain memory size, skip setting memory limit", + zap.Uint64("memused", memused), zap.Uint64("memtotal", memtotal)) + } else { + memleft := memtotal - memused + memlimit := calculateMemoryLimit(memleft) + // BR command needs 256 MiB at least, if the left memory is less than 256 MiB, + // the memory limit cannot limit anyway and then finally OOM. + memlimit = mathutil.Max(memlimit, quarterGiB) + log.Info("calculate the rest memory", + zap.Uint64("memtotal", memtotal), zap.Uint64("memused", memused), zap.Uint64("memlimit", memlimit)) + // No need to set memory limit because the left memory is sufficient. + if memlimit < uint64(math.MaxInt64) { + debug.SetMemoryLimit(int64(memlimit)) + } + } + } redactLog, e := cmd.Flags().GetBool(FlagRedactLog) if e != nil { diff --git a/br/cmd/br/main_test.go b/br/cmd/br/main_test.go index 5fa5b1439a2ec..bdd6f7282ee62 100644 --- a/br/cmd/br/main_test.go +++ b/br/cmd/br/main_test.go @@ -21,6 +21,7 @@ import ( "strings" "testing" + "github.com/stretchr/testify/require" "go.uber.org/goleak" ) @@ -75,3 +76,18 @@ func TestRunMain(*testing.T) { <-waitCh } + +func TestCalculateMemoryLimit(t *testing.T) { + // f(0 Byte) = 0 Byte + require.Equal(t, uint64(0), calculateMemoryLimit(0)) + // f(100 KB) = 87.5 KB + require.Equal(t, uint64(89600), calculateMemoryLimit(100*1024)) + // f(100 MB) = 87.5 MB + require.Equal(t, uint64(91763188), calculateMemoryLimit(100*1024*1024)) + // f(3.99 GB) = 3.74 GB + require.Equal(t, uint64(4026531839), calculateMemoryLimit(4*1024*1024*1024-1)) + // f(4 GB) = 3.5 GB + require.Equal(t, uint64(3758096384), calculateMemoryLimit(4*1024*1024*1024)) + // f(32 GB) = 31.5 GB + require.Equal(t, uint64(33822867456), calculateMemoryLimit(32*1024*1024*1024)) +} diff --git a/br/pkg/backup/BUILD.bazel b/br/pkg/backup/BUILD.bazel index 29ee9a06a654a..7b49957ca7c6b 100644 --- a/br/pkg/backup/BUILD.bazel +++ b/br/pkg/backup/BUILD.bazel @@ -63,11 +63,12 @@ go_test( "client_test.go", "main_test.go", "schema_test.go", + "store_test.go", ], embed = [":backup"], flaky = True, race = "on", - shard_count = 12, + shard_count = 14, deps = [ "//br/pkg/conn", "//br/pkg/gluetidb/mock", @@ -92,6 +93,7 @@ go_test( "@com_github_tikv_client_go_v2//testutils", "@com_github_tikv_pd_client//:client", "@io_opencensus_go//stats/view", + "@org_golang_google_grpc//:grpc", "@org_uber_go_goleak//:goleak", ], ) diff --git a/br/pkg/backup/client.go b/br/pkg/backup/client.go index 2040edaf7ab25..636afdaf24700 100644 --- a/br/pkg/backup/client.go +++ b/br/pkg/backup/client.go @@ -1233,9 +1233,9 @@ func (bc *Client) OnBackupResponse( return txnlock.NewLock(lockErr), nil } } - res := errContext.HandleIgnorableError(errPb, storeID) + res := utils.HandleBackupError(errPb, storeID, errContext) switch res.Strategy { - case utils.GiveUpStrategy: + case utils.StrategyGiveUp: errMsg := res.Reason if len(errMsg) <= 0 { errMsg = errPb.Msg diff --git a/br/pkg/backup/store.go b/br/pkg/backup/store.go index 02f7166193918..0015efa0681d0 100644 --- a/br/pkg/backup/store.go +++ b/br/pkg/backup/store.go @@ -6,6 +6,7 @@ import ( "context" "io" "os" + "sync" "time" "github.com/pingcap/errors" @@ -57,12 +58,73 @@ func (r ResponseAndStore) GetStoreID() uint64 { return r.StoreID } +// timeoutRecv cancel the context if `Refresh()` is not called within the specified time `timeout`. +type timeoutRecv struct { + wg sync.WaitGroup + parentCtx context.Context + cancel context.CancelCauseFunc + + refresh chan struct{} +} + +// Refresh the timeout ticker +func (trecv *timeoutRecv) Refresh() { + select { + case <-trecv.parentCtx.Done(): + case trecv.refresh <- struct{}{}: + } +} + +// Stop the timeout ticker +func (trecv *timeoutRecv) Stop() { + close(trecv.refresh) + trecv.wg.Wait() +} + +var TimeoutOneResponse = time.Hour + +func (trecv *timeoutRecv) loop(timeout time.Duration) { + defer trecv.wg.Done() + ticker := time.NewTicker(timeout) + defer ticker.Stop() + for { + ticker.Reset(timeout) + select { + case <-trecv.parentCtx.Done(): + return + case _, ok := <-trecv.refresh: + if !ok { + return + } + case <-ticker.C: + log.Warn("receive a backup response timeout") + trecv.cancel(errors.Errorf("receive a backup response timeout")) + } + } +} + +func StartTimeoutRecv(ctx context.Context, timeout time.Duration) (context.Context, *timeoutRecv) { + cctx, cancel := context.WithCancelCause(ctx) + trecv := &timeoutRecv{ + parentCtx: ctx, + cancel: cancel, + refresh: make(chan struct{}), + } + trecv.wg.Add(1) + go trecv.loop(timeout) + return cctx, trecv +} + func doSendBackup( - ctx context.Context, + pctx context.Context, client backuppb.BackupClient, req backuppb.BackupRequest, respFn func(*backuppb.BackupResponse) error, ) error { + // Backup might be stuck on GRPC `waitonHeader`, so start a timeout ticker to + // terminate the backup if it does not receive any new response for a long time. + ctx, timerecv := StartTimeoutRecv(pctx, TimeoutOneResponse) + defer timerecv.Stop() failpoint.Inject("hint-backup-start", func(v failpoint.Value) { logutil.CL(ctx).Info("failpoint hint-backup-start injected, " + "process will notify the shell.") @@ -107,6 +169,7 @@ func doSendBackup( for { resp, err := bCli.Recv() + timerecv.Refresh() if err != nil { if errors.Cause(err) == io.EOF { // nolint:errorlint logutil.CL(ctx).Debug("backup streaming finish", diff --git a/br/pkg/backup/store_test.go b/br/pkg/backup/store_test.go new file mode 100644 index 0000000000000..9ad928f01a635 --- /dev/null +++ b/br/pkg/backup/store_test.go @@ -0,0 +1,98 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package backup + +import ( + "context" + "io" + "testing" + "time" + + backuppb "github.com/pingcap/kvproto/pkg/brpb" + "github.com/stretchr/testify/require" + "google.golang.org/grpc" +) + +type MockBackupClient struct { + backuppb.BackupClient + + recvFunc func(context.Context) (*backuppb.BackupResponse, error) +} + +func (mbc *MockBackupClient) Backup(ctx context.Context, _ *backuppb.BackupRequest, _ ...grpc.CallOption) (backuppb.Backup_BackupClient, error) { + return &MockBackupBackupClient{ctx: ctx, recvFunc: mbc.recvFunc}, nil +} + +type MockBackupBackupClient struct { + backuppb.Backup_BackupClient + + ctx context.Context + recvFunc func(context.Context) (*backuppb.BackupResponse, error) +} + +func (mbbc *MockBackupBackupClient) CloseSend() error { + return nil +} + +func (mbbc *MockBackupBackupClient) Recv() (*backuppb.BackupResponse, error) { + if mbbc.recvFunc != nil { + return mbbc.recvFunc(mbbc.ctx) + } + return &backuppb.BackupResponse{}, nil +} + +func TestTimeoutRecv(t *testing.T) { + ctx := context.Background() + TimeoutOneResponse = time.Millisecond * 800 + // Just Timeout Once + { + err := doSendBackup(ctx, &MockBackupClient{ + recvFunc: func(ctx context.Context) (*backuppb.BackupResponse, error) { + time.Sleep(time.Second) + require.Error(t, ctx.Err()) + return nil, io.EOF + }, + }, backuppb.BackupRequest{}, func(br *backuppb.BackupResponse) error { return nil }) + require.NoError(t, err) + } + + // Timeout Not At First + { + count := 0 + err := doSendBackup(ctx, &MockBackupClient{ + recvFunc: func(ctx context.Context) (*backuppb.BackupResponse, error) { + require.NoError(t, ctx.Err()) + if count == 15 { + time.Sleep(time.Second) + require.Error(t, ctx.Err()) + return nil, io.EOF + } + count += 1 + time.Sleep(time.Millisecond * 80) + return &backuppb.BackupResponse{}, nil + }, + }, backuppb.BackupRequest{}, func(br *backuppb.BackupResponse) error { return nil }) + require.NoError(t, err) + } +} + +func TestTimeoutRecvCancel(t *testing.T) { + ctx := context.Background() + cctx, cancel := context.WithCancel(ctx) + + _, trecv := StartTimeoutRecv(cctx, time.Hour) + cancel() + trecv.wg.Wait() +} diff --git a/br/pkg/checkpoint/checkpoint.go b/br/pkg/checkpoint/checkpoint.go index 1d9f309843b88..4b397a60e5eeb 100644 --- a/br/pkg/checkpoint/checkpoint.go +++ b/br/pkg/checkpoint/checkpoint.go @@ -43,7 +43,7 @@ import ( "golang.org/x/sync/errgroup" ) -const CheckpointDir = "/checkpoints" +const CheckpointDir = "checkpoints" type flushPosition struct { CheckpointDataDir string diff --git a/br/pkg/errors/errors.go b/br/pkg/errors/errors.go index 1b78a861fa668..3bd2ab776ccb3 100644 --- a/br/pkg/errors/errors.go +++ b/br/pkg/errors/errors.go @@ -70,6 +70,7 @@ var ( ErrRestoreIncompatibleSys = errors.Normalize("incompatible system table", errors.RFCCodeText("BR:Restore:ErrRestoreIncompatibleSys")) ErrUnsupportedSystemTable = errors.Normalize("the system table isn't supported for restoring yet", errors.RFCCodeText("BR:Restore:ErrUnsupportedSysTable")) ErrDatabasesAlreadyExisted = errors.Normalize("databases already existed in restored cluster", errors.RFCCodeText("BR:Restore:ErrDatabasesAlreadyExisted")) + ErrTablesAlreadyExisted = errors.Normalize("tables already existed in restored cluster", errors.RFCCodeText("BR:Restore:ErrTablesAlreadyExisted")) // ErrStreamLogTaskExist is the error when stream log task already exists, because of supporting single task currently. ErrStreamLogTaskExist = errors.Normalize("stream task already exists", errors.RFCCodeText("BR:Stream:ErrStreamLogTaskExist")) diff --git a/br/pkg/glue/glue.go b/br/pkg/glue/glue.go index 5d5f611fa39e6..1895ee092cc78 100644 --- a/br/pkg/glue/glue.go +++ b/br/pkg/glue/glue.go @@ -13,6 +13,13 @@ import ( pd "github.com/tikv/pd/client" ) +type GlueClient int + +const ( + ClientCLP GlueClient = iota + ClientSql +) + // Glue is an abstraction of TiDB function calls used in BR. type Glue interface { GetDomain(store kv.Storage) (*domain.Domain, error) @@ -36,6 +43,9 @@ type Glue interface { // we can close domain as soon as possible. // and we must reuse the exists session and don't close it in SQL backup job. UseOneShotSession(store kv.Storage, closeDomain bool, fn func(se Session) error) error + + // GetClient returns the client type of the glue + GetClient() GlueClient } // Session is an abstraction of the session.Session interface. diff --git a/br/pkg/gluetidb/BUILD.bazel b/br/pkg/gluetidb/BUILD.bazel index b639da451010d..baebdba642728 100644 --- a/br/pkg/gluetidb/BUILD.bazel +++ b/br/pkg/gluetidb/BUILD.bazel @@ -34,6 +34,7 @@ go_test( deps = [ "//br/pkg/glue", "//pkg/parser/model", + "//pkg/session", "//pkg/testkit", "//pkg/types", "@com_github_stretchr_testify//require", diff --git a/br/pkg/gluetidb/glue.go b/br/pkg/gluetidb/glue.go index 69971a52bd0d8..7963c14b0f5bb 100644 --- a/br/pkg/gluetidb/glue.go +++ b/br/pkg/gluetidb/glue.go @@ -4,6 +4,7 @@ package gluetidb import ( "context" + "sync" "time" "github.com/pingcap/errors" @@ -40,14 +41,17 @@ func New() Glue { conf.Log.EnableSlowLog.Store(false) conf.TiKVClient.CoprReqTimeout = 1800 * time.Second }) - return Glue{} + return Glue{ + startDomainMu: &sync.Mutex{}, + } } // Glue is an implementation of glue.Glue using a new TiDB session. type Glue struct { glue.StdIOGlue - tikvGlue gluetikv.Glue + tikvGlue gluetikv.Glue + startDomainMu *sync.Mutex } type tidbSession struct { @@ -55,13 +59,13 @@ type tidbSession struct { } // GetDomain implements glue.Glue. -func (Glue) GetDomain(store kv.Storage) (*domain.Domain, error) { +func (g Glue) GetDomain(store kv.Storage) (*domain.Domain, error) { existDom, _ := session.GetDomain(nil) - initStatsSe, err := session.CreateSession(store) + initStatsSe, err := g.createTypesSession(store) if err != nil { return nil, errors.Trace(err) } - se, err := session.CreateSession(store) + se, err := g.createTypesSession(store) if err != nil { return nil, errors.Trace(err) } @@ -84,8 +88,8 @@ func (Glue) GetDomain(store kv.Storage) (*domain.Domain, error) { } // CreateSession implements glue.Glue. -func (Glue) CreateSession(store kv.Storage) (glue.Session, error) { - se, err := session.CreateSession(store) +func (g Glue) CreateSession(store kv.Storage) (glue.Session, error) { + se, err := g.createTypesSession(store) if err != nil { return nil, errors.Trace(err) } @@ -95,6 +99,27 @@ func (Glue) CreateSession(store kv.Storage) (glue.Session, error) { return tiSession, nil } +func (g Glue) startDomainAsNeeded(store kv.Storage) error { + g.startDomainMu.Lock() + defer g.startDomainMu.Unlock() + existDom, _ := session.GetDomain(nil) + if existDom != nil { + return nil + } + dom, err := session.GetDomain(store) + if err != nil { + return err + } + return dom.Start() +} + +func (g Glue) createTypesSession(store kv.Storage) (sessiontypes.Session, error) { + if err := g.startDomainAsNeeded(store); err != nil { + return nil, errors.Trace(err) + } + return session.CreateSession(store) +} + // Open implements glue.Glue. func (g Glue) Open(path string, option pd.SecurityOption) (kv.Storage, error) { return g.tikvGlue.Open(path, option) @@ -122,7 +147,7 @@ func (g Glue) GetVersion() string { // UseOneShotSession implements glue.Glue. func (g Glue) UseOneShotSession(store kv.Storage, closeDomain bool, fn func(glue.Session) error) error { - se, err := session.CreateSession(store) + se, err := g.createTypesSession(store) if err != nil { return errors.Trace(err) } @@ -133,7 +158,7 @@ func (g Glue) UseOneShotSession(store kv.Storage, closeDomain bool, fn func(glue se.Close() log.Info("one shot session closed") }() - // dom will be created during session.CreateSession. + // dom will be created during create session. dom, err := session.GetDomain(store) if err != nil { return errors.Trace(err) @@ -158,6 +183,10 @@ func (g Glue) UseOneShotSession(store kv.Storage, closeDomain bool, fn func(glue return nil } +func (Glue) GetClient() glue.GlueClient { + return glue.ClientCLP +} + // GetSessionCtx implements glue.Glue func (gs *tidbSession) GetSessionCtx() sessionctx.Context { return gs.se diff --git a/br/pkg/gluetidb/glue_test.go b/br/pkg/gluetidb/glue_test.go index 1813a7b357b16..5c7eb6a0cb598 100644 --- a/br/pkg/gluetidb/glue_test.go +++ b/br/pkg/gluetidb/glue_test.go @@ -20,6 +20,7 @@ import ( "github.com/pingcap/tidb/br/pkg/glue" "github.com/pingcap/tidb/pkg/parser/model" + "github.com/pingcap/tidb/pkg/session" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/types" "github.com/stretchr/testify/require" @@ -27,14 +28,29 @@ import ( func TestTheSessionIsoation(t *testing.T) { req := require.New(t) - store := testkit.CreateMockStore(t) + store, dom := session.CreateStoreAndBootstrap(t) ctx := context.Background() - g := Glue{} - session, err := g.CreateSession(store) + // we want to test glue start domain explicitly, so close it first. + dom.Close() + g := New() + glueSe, err := g.CreateSession(store) req.NoError(err) + t.Cleanup(func() { + existDom, _ := session.GetDomain(nil) + if existDom != nil { + existDom.Close() + } + }) + + require.NoError(t, glueSe.CreateDatabase(ctx, &model.DBInfo{ + Name: model.NewCIStr("test_db"), + })) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test_db") + tk.MustExec("create table t(id int)") - req.NoError(session.ExecuteInternal(ctx, "use test;")) + req.NoError(glueSe.ExecuteInternal(ctx, "use test;")) infos := []*model.TableInfo{} infos = append(infos, &model.TableInfo{ Name: model.NewCIStr("tables_1"), @@ -75,12 +91,12 @@ func TestTheSessionIsoation(t *testing.T) { }, } for _, pinfo := range polices { - before := session.(*tidbSession).se.GetInfoSchema().SchemaMetaVersion() - req.NoError(session.CreatePlacementPolicy(ctx, pinfo)) - after := session.(*tidbSession).se.GetInfoSchema().SchemaMetaVersion() + before := glueSe.(*tidbSession).se.GetInfoSchema().SchemaMetaVersion() + req.NoError(glueSe.CreatePlacementPolicy(ctx, pinfo)) + after := glueSe.(*tidbSession).se.GetInfoSchema().SchemaMetaVersion() req.Greater(after, before) } - req.NoError(session.(glue.BatchCreateTableSession).CreateTables(ctx, map[string][]*model.TableInfo{ + req.NoError(glueSe.(glue.BatchCreateTableSession).CreateTables(ctx, map[string][]*model.TableInfo{ "test": infos, })) } diff --git a/br/pkg/gluetidb/mock/mock.go b/br/pkg/gluetidb/mock/mock.go index 42cbd4a814657..dc54f48ebda3a 100644 --- a/br/pkg/gluetidb/mock/mock.go +++ b/br/pkg/gluetidb/mock/mock.go @@ -159,3 +159,7 @@ func (m *MockGlue) UseOneShotSession(store kv.Storage, closeDomain bool, fn func } return fn(glueSession) } + +func (*MockGlue) GetClient() glue.GlueClient { + return glue.ClientCLP +} diff --git a/br/pkg/gluetikv/glue.go b/br/pkg/gluetikv/glue.go index ad3ae045f478f..2fd990e92d2a5 100644 --- a/br/pkg/gluetikv/glue.go +++ b/br/pkg/gluetikv/glue.go @@ -73,3 +73,7 @@ func (Glue) GetVersion() string { func (g Glue) UseOneShotSession(store kv.Storage, closeDomain bool, fn func(glue.Session) error) error { return nil } + +func (Glue) GetClient() glue.GlueClient { + return glue.ClientCLP +} diff --git a/br/pkg/metautil/load_test.go b/br/pkg/metautil/load_test.go index ef885f3bcbf26..9a1f19ebdd92a 100644 --- a/br/pkg/metautil/load_test.go +++ b/br/pkg/metautil/load_test.go @@ -55,9 +55,9 @@ func TestLoadBackupMeta(t *testing.T) { mockDB := model.DBInfo{ ID: 1, Name: dbName, - Tables: []*model.TableInfo{ - mockTbl, - }, + } + mockDB.Deprecated.Tables = []*model.TableInfo{ + mockTbl, } dbBytes, err := json.Marshal(mockDB) require.NoError(t, err) @@ -140,9 +140,9 @@ func TestLoadBackupMetaPartionTable(t *testing.T) { mockDB := model.DBInfo{ ID: 1, Name: dbName, - Tables: []*model.TableInfo{ - mockTbl, - }, + } + mockDB.Deprecated.Tables = []*model.TableInfo{ + mockTbl, } dbBytes, err := json.Marshal(mockDB) require.NoError(t, err) @@ -249,9 +249,9 @@ func buildBenchmarkBackupmeta(b *testing.B, dbName string, tableCount, fileCount mockDB := model.DBInfo{ ID: 1, Name: model.NewCIStr(dbName), - Tables: []*model.TableInfo{ - mockTbl, - }, + } + mockDB.Deprecated.Tables = []*model.TableInfo{ + mockTbl, } dbBytes, err := json.Marshal(mockDB) require.NoError(b, err) diff --git a/br/pkg/mock/mock_cluster.go b/br/pkg/mock/mock_cluster.go index 6aa97498bee4f..d749b5db58fa0 100644 --- a/br/pkg/mock/mock_cluster.go +++ b/br/pkg/mock/mock_cluster.go @@ -72,7 +72,6 @@ func NewCluster() (*Cluster, error) { } cluster.Storage = storage - session.SetSchemaLease(0) session.DisableStats4Test() dom, err := session.BootstrapSession(storage) if err != nil { diff --git a/br/pkg/restore/ingestrec/ingest_recorder_test.go b/br/pkg/restore/ingestrec/ingest_recorder_test.go index 56d655a01416a..b6473f724cdbe 100644 --- a/br/pkg/restore/ingestrec/ingest_recorder_test.go +++ b/br/pkg/restore/ingestrec/ingest_recorder_test.go @@ -162,7 +162,7 @@ func TestAddIngestRecorder(t *testing.T) { }, State: model.StatePublic, } - err = m.CreateTableOrView(1, dbInfo.Name.L, tblInfo) + err = m.CreateTableOrView(1, tblInfo) require.NoError(t, err) }) dom, err := session.GetDomain(store) @@ -357,7 +357,7 @@ func TestIndexesKind(t *testing.T) { }, State: model.StatePublic, } - err = m.CreateTableOrView(1, dbInfo.Name.L, tblInfo) + err = m.CreateTableOrView(1, tblInfo) require.NoError(t, err) }) dom, err := session.GetDomain(store) @@ -454,7 +454,7 @@ func TestRewriteTableID(t *testing.T) { }, State: model.StatePublic, } - err = m.CreateTableOrView(1, dbInfo.Name.L, tblInfo) + err = m.CreateTableOrView(1, tblInfo) require.NoError(t, err) }) dom, err := session.GetDomain(store) diff --git a/br/pkg/restore/log_client/client.go b/br/pkg/restore/log_client/client.go index 9e11baf74bec2..52f15354d8e83 100644 --- a/br/pkg/restore/log_client/client.go +++ b/br/pkg/restore/log_client/client.go @@ -20,6 +20,7 @@ import ( "crypto/tls" "fmt" "math" + "os" "slices" "strconv" "strings" @@ -637,15 +638,71 @@ type FullBackupStorageConfig struct { type InitSchemaConfig struct { // required - IsNewTask bool - HasFullRestore bool - TableFilter filter.Filter + IsNewTask bool + TableFilter filter.Filter // optional TiFlashRecorder *tiflashrec.TiFlashRecorder FullBackupStorage *FullBackupStorageConfig } +const UnsafePITRLogRestoreStartBeforeAnyUpstreamUserDDL = "UNSAFE_PITR_LOG_RESTORE_START_BEFORE_ANY_UPSTREAM_USER_DDL" + +func (rc *LogClient) generateDBReplacesFromFullBackupStorage( + ctx context.Context, + cfg *InitSchemaConfig, +) (map[stream.UpstreamID]*stream.DBReplace, error) { + dbReplaces := make(map[stream.UpstreamID]*stream.DBReplace) + if cfg.FullBackupStorage == nil { + envVal, ok := os.LookupEnv(UnsafePITRLogRestoreStartBeforeAnyUpstreamUserDDL) + if ok && len(envVal) > 0 { + log.Info(fmt.Sprintf("the environment variable %s is active, skip loading the base schemas.", UnsafePITRLogRestoreStartBeforeAnyUpstreamUserDDL)) + return dbReplaces, nil + } + return nil, errors.Errorf("miss upstream table information at `start-ts`(%d) but the full backup path is not specified", rc.startTS) + } + s, err := storage.New(ctx, cfg.FullBackupStorage.Backend, cfg.FullBackupStorage.Opts) + if err != nil { + return nil, errors.Trace(err) + } + fullBackupTables, err := initFullBackupTables(ctx, s, cfg.TableFilter) + if err != nil { + return nil, errors.Trace(err) + } + for _, t := range fullBackupTables { + dbName, _ := utils.GetSysDBCIStrName(t.DB.Name) + newDBInfo, exist := rc.dom.InfoSchema().SchemaByName(dbName) + if !exist { + log.Info("db not existed", zap.String("dbname", dbName.String())) + continue + } + + dbReplace, exist := dbReplaces[t.DB.ID] + if !exist { + dbReplace = stream.NewDBReplace(t.DB.Name.O, newDBInfo.ID) + dbReplaces[t.DB.ID] = dbReplace + } + + if t.Info == nil { + // If the db is empty, skip it. + continue + } + newTableInfo, err := restore.GetTableSchema(rc.GetDomain(), dbName, t.Info.Name) + if err != nil { + log.Info("table not existed", zap.String("tablename", dbName.String()+"."+t.Info.Name.String())) + continue + } + + dbReplace.TableMap[t.Info.ID] = &stream.TableReplace{ + Name: newTableInfo.Name.O, + TableID: newTableInfo.ID, + PartitionMap: restoreutils.GetPartitionIDMap(newTableInfo, t.Info), + IndexMap: restoreutils.GetIndexIDMap(newTableInfo, t.Info), + } + } + return dbReplaces, nil +} + // InitSchemasReplaceForDDL gets schemas information Mapping from old schemas to new schemas. // It is used to rewrite meta kv-event. func (rc *LogClient) InitSchemasReplaceForDDL( @@ -658,7 +715,7 @@ func (rc *LogClient) InitSchemasReplaceForDDL( // the id map doesn't need to construct only when it is not the first execution needConstructIdMap bool - dbReplaces = make(map[stream.UpstreamID]*stream.DBReplace) + dbReplaces map[stream.UpstreamID]*stream.DBReplace ) // not new task, load schemas map from external storage @@ -673,7 +730,7 @@ func (rc *LogClient) InitSchemasReplaceForDDL( // a new task, but without full snapshot restore, tries to load // schemas map whose `restore-ts`` is the task's `start-ts`. - if len(dbMaps) <= 0 && !cfg.HasFullRestore { + if len(dbMaps) <= 0 && cfg.FullBackupStorage == nil { log.Info("try to load pitr id maps of the previous task", zap.Uint64("start-ts", rc.startTS)) needConstructIdMap = true dbMaps, err = rc.initSchemasMap(ctx, rc.GetClusterID(ctx), rc.startTS) @@ -695,45 +752,10 @@ func (rc *LogClient) InitSchemasReplaceForDDL( if len(dbMaps) <= 0 { log.Info("no id maps, build the table replaces from cluster and full backup schemas") needConstructIdMap = true - s, err := storage.New(ctx, cfg.FullBackupStorage.Backend, cfg.FullBackupStorage.Opts) + dbReplaces, err = rc.generateDBReplacesFromFullBackupStorage(ctx, cfg) if err != nil { return nil, errors.Trace(err) } - fullBackupTables, err := initFullBackupTables(ctx, s, cfg.TableFilter) - if err != nil { - return nil, errors.Trace(err) - } - for _, t := range fullBackupTables { - dbName, _ := utils.GetSysDBCIStrName(t.DB.Name) - newDBInfo, exist := rc.dom.InfoSchema().SchemaByName(dbName) - if !exist { - log.Info("db not existed", zap.String("dbname", dbName.String())) - continue - } - - dbReplace, exist := dbReplaces[t.DB.ID] - if !exist { - dbReplace = stream.NewDBReplace(t.DB.Name.O, newDBInfo.ID) - dbReplaces[t.DB.ID] = dbReplace - } - - if t.Info == nil { - // If the db is empty, skip it. - continue - } - newTableInfo, err := restore.GetTableSchema(rc.GetDomain(), dbName, t.Info.Name) - if err != nil { - log.Info("table not existed", zap.String("tablename", dbName.String()+"."+t.Info.Name.String())) - continue - } - - dbReplace.TableMap[t.Info.ID] = &stream.TableReplace{ - Name: newTableInfo.Name.O, - TableID: newTableInfo.ID, - PartitionMap: restoreutils.GetPartitionIDMap(newTableInfo, t.Info), - IndexMap: restoreutils.GetIndexIDMap(newTableInfo, t.Info), - } - } } else { dbReplaces = stream.FromSchemaMaps(dbMaps) } @@ -1555,7 +1577,7 @@ func (rc *LogClient) FailpointDoChecksumForLogRestore( reidRules[downstreamID] = upstreamID } for upstreamID, downstreamID := range idrules { - newTable, ok := infoSchema.TableByID(downstreamID) + newTable, ok := infoSchema.TableByID(ctx, downstreamID) if !ok { // a dropped table continue diff --git a/br/pkg/restore/snap_client/client.go b/br/pkg/restore/snap_client/client.go index 061fad6388016..783687da1e164 100644 --- a/br/pkg/restore/snap_client/client.go +++ b/br/pkg/restore/snap_client/client.go @@ -672,12 +672,43 @@ func (rc *SnapClient) getRebasedTables() map[restore.UniqueTableName]bool { return rc.rebasedTablesMap } +// CreateTables create tables, and generate their information. +// this function will use workers as the same number of sessionPool, +// leave sessionPool nil to send DDLs sequential. +func (rc *SnapClient) CreateTables( + ctx context.Context, + tables []*metautil.Table, + newTS uint64, +) ([]*CreatedTable, error) { + log.Info("start create tables", zap.Int("total count", len(tables))) + rc.generateRebasedTables(tables) + + // try to restore tables in batch + if rc.batchDdlSize > minBatchDdlSize && len(rc.dbPool) > 0 { + tables, err := rc.createTablesBatch(ctx, tables, newTS) + if err == nil { + return tables, nil + } else if !utils.FallBack2CreateTable(err) { + return nil, errors.Trace(err) + } + // fall back to old create table (sequential create table) + log.Info("fall back to the sequential create table") + } + + // restore tables in db pool + if len(rc.dbPool) > 0 { + return rc.createTablesSingle(ctx, rc.dbPool, tables, newTS) + } + // restore tables in one db + return rc.createTablesSingle(ctx, []*tidallocdb.DB{rc.db}, tables, newTS) +} + func (rc *SnapClient) createTables( ctx context.Context, db *tidallocdb.DB, tables []*metautil.Table, newTS uint64, -) ([]CreatedTable, error) { +) ([]*CreatedTable, error) { log.Info("client to create tables") if rc.IsSkipCreateSQL() { log.Info("skip create table and alter autoIncID") @@ -687,7 +718,7 @@ func (rc *SnapClient) createTables( return nil, errors.Trace(err) } } - cts := make([]CreatedTable, 0, len(tables)) + cts := make([]*CreatedTable, 0, len(tables)) for _, table := range tables { newTableInfo, err := restore.GetTableSchema(rc.dom, table.DB.Name, table.Info.Name) if err != nil { @@ -701,7 +732,7 @@ func (rc *SnapClient) createTables( newTableInfo.IsCommonHandle) } rules := restoreutils.GetRewriteRules(newTableInfo, table.Info, newTS, true) - ct := CreatedTable{ + ct := &CreatedTable{ RewriteRule: rules, Table: newTableInfo, OldTable: table, @@ -712,11 +743,17 @@ func (rc *SnapClient) createTables( return cts, nil } -func (rc *SnapClient) createTablesInWorkerPool(ctx context.Context, tables []*metautil.Table, newTS uint64, outCh chan<- CreatedTable) error { +func (rc *SnapClient) createTablesBatch(ctx context.Context, tables []*metautil.Table, newTS uint64) ([]*CreatedTable, error) { eg, ectx := errgroup.WithContext(ctx) rater := logutil.TraceRateOver(logutil.MetricTableCreatedCounter) workers := tidbutil.NewWorkerPool(uint(len(rc.dbPool)), "Create Tables Worker") numOfTables := len(tables) + createdTables := struct { + sync.Mutex + tables []*CreatedTable + }{ + tables: make([]*CreatedTable, 0, len(tables)), + } for lastSent := 0; lastSent < numOfTables; lastSent += int(rc.batchDdlSize) { end := min(lastSent+int(rc.batchDdlSize), len(tables)) @@ -735,21 +772,19 @@ func (rc *SnapClient) createTablesInWorkerPool(ctx context.Context, tables []*me log.Error("create tables fail", zap.Error(err)) return err } - for _, ct := range cts { - log.Debug("table created and send to next", - zap.Int("output chan size", len(outCh)), - zap.Stringer("table", ct.OldTable.Info.Name), - zap.Stringer("database", ct.OldTable.DB.Name)) - outCh <- ct - rater.Inc() - rater.L().Info("table created", - zap.Stringer("table", ct.OldTable.Info.Name), - zap.Stringer("database", ct.OldTable.DB.Name)) - } + rater.Add(float64(len(cts))) + rater.L().Info("tables created", zap.Int("num", len(cts))) + createdTables.Lock() + createdTables.tables = append(createdTables.tables, cts...) + createdTables.Unlock() return err }) } - return eg.Wait() + if err := eg.Wait(); err != nil { + return nil, errors.Trace(err) + } + + return createdTables.tables, nil } func (rc *SnapClient) createTable( @@ -757,28 +792,28 @@ func (rc *SnapClient) createTable( db *tidallocdb.DB, table *metautil.Table, newTS uint64, -) (CreatedTable, error) { +) (*CreatedTable, error) { if rc.IsSkipCreateSQL() { log.Info("skip create table and alter autoIncID", zap.Stringer("table", table.Info.Name)) } else { err := db.CreateTable(ctx, table, rc.getRebasedTables(), rc.supportPolicy, rc.policyMap) if err != nil { - return CreatedTable{}, errors.Trace(err) + return nil, errors.Trace(err) } } newTableInfo, err := restore.GetTableSchema(rc.dom, table.DB.Name, table.Info.Name) if err != nil { - return CreatedTable{}, errors.Trace(err) + return nil, errors.Trace(err) } if newTableInfo.IsCommonHandle != table.Info.IsCommonHandle { - return CreatedTable{}, errors.Annotatef(berrors.ErrRestoreModeMismatch, + return nil, errors.Annotatef(berrors.ErrRestoreModeMismatch, "Clustered index option mismatch. Restored cluster's @@tidb_enable_clustered_index should be %v (backup table = %v, created table = %v).", restore.TransferBoolToValue(table.Info.IsCommonHandle), table.Info.IsCommonHandle, newTableInfo.IsCommonHandle) } rules := restoreutils.GetRewriteRules(newTableInfo, table.Info, newTS, true) - et := CreatedTable{ + et := &CreatedTable{ RewriteRule: rules, Table: newTableInfo, OldTable: table, @@ -786,30 +821,49 @@ func (rc *SnapClient) createTable( return et, nil } -func (rc *SnapClient) createTablesWithSoleDB(ctx context.Context, - createOneTable func(ctx context.Context, db *tidallocdb.DB, t *metautil.Table) error, - tables []*metautil.Table) error { - for _, t := range tables { - if err := createOneTable(ctx, rc.db, t); err != nil { - return errors.Trace(err) - } - } - return nil -} - -func (rc *SnapClient) createTablesWithDBPool(ctx context.Context, - createOneTable func(ctx context.Context, db *tidallocdb.DB, t *metautil.Table) error, - tables []*metautil.Table) error { +func (rc *SnapClient) createTablesSingle( + ctx context.Context, + dbPool []*tidallocdb.DB, + tables []*metautil.Table, + newTS uint64, +) ([]*CreatedTable, error) { eg, ectx := errgroup.WithContext(ctx) - workers := tidbutil.NewWorkerPool(uint(len(rc.dbPool)), "DDL workers") - for _, t := range tables { - table := t + workers := tidbutil.NewWorkerPool(uint(len(dbPool)), "DDL workers") + rater := logutil.TraceRateOver(logutil.MetricTableCreatedCounter) + createdTables := struct { + sync.Mutex + tables []*CreatedTable + }{ + tables: make([]*CreatedTable, 0, len(tables)), + } + for _, tbl := range tables { + table := tbl workers.ApplyWithIDInErrorGroup(eg, func(id uint64) error { - db := rc.dbPool[id%uint64(len(rc.dbPool))] - return createOneTable(ectx, db, table) + db := dbPool[id%uint64(len(dbPool))] + rt, err := rc.createTable(ectx, db, table, newTS) + if err != nil { + log.Error("create table failed", + zap.Error(err), + zap.Stringer("db", table.DB.Name), + zap.Stringer("table", table.Info.Name)) + return errors.Trace(err) + } + rater.Inc() + rater.L().Info("table created", + zap.Stringer("table", table.Info.Name), + zap.Stringer("database", table.DB.Name)) + + createdTables.Lock() + createdTables.tables = append(createdTables.tables, rt) + createdTables.Unlock() + return nil }) } - return eg.Wait() + if err := eg.Wait(); err != nil { + return nil, errors.Trace(err) + } + + return createdTables.tables, nil } // InitFullClusterRestore init fullClusterRestore and set SkipGrantTable as needed diff --git a/br/pkg/restore/snap_client/client_test.go b/br/pkg/restore/snap_client/client_test.go index 12b91b4937556..b43324d9fca64 100644 --- a/br/pkg/restore/snap_client/client_test.go +++ b/br/pkg/restore/snap_client/client_test.go @@ -77,7 +77,7 @@ func TestCreateTables(t *testing.T) { }, } } - rules, newTables, err := client.CreateTables(m.Domain, tables, 0) + rules, newTables, err := client.CreateTablesTest(m.Domain, tables, 0) require.NoError(t, err) // make sure tables and newTables have same order for i, tbl := range tables { @@ -191,7 +191,7 @@ func TestCheckTargetClusterFreshWithTable(t *testing.T) { Collate: "utf8mb4_bin", }, } - _, _, err = client.CreateTables(cluster.Domain, []*metautil.Table{table}, 0) + _, _, err = client.CreateTablesTest(cluster.Domain, []*metautil.Table{table}, 0) require.NoError(t, err) require.True(t, berrors.ErrRestoreNotFreshCluster.Equal(client.CheckTargetClusterFresh(ctx))) diff --git a/br/pkg/restore/snap_client/export_test.go b/br/pkg/restore/snap_client/export_test.go index c519fd0421200..3240ee1f77662 100644 --- a/br/pkg/restore/snap_client/export_test.go +++ b/br/pkg/restore/snap_client/export_test.go @@ -55,7 +55,7 @@ func MockCallSetSpeedLimit(ctx context.Context, fakeImportClient importclient.Im } // CreateTables creates multiple tables, and returns their rewrite rules. -func (rc *SnapClient) CreateTables( +func (rc *SnapClient) CreateTablesTest( dom *domain.Domain, tables []*metautil.Table, newTS uint64, @@ -65,28 +65,22 @@ func (rc *SnapClient) CreateTables( Data: make([]*import_sstpb.RewriteRule, 0), } newTables := make([]*model.TableInfo, 0, len(tables)) - errCh := make(chan error, 1) tbMapping := map[string]int{} for i, t := range tables { tbMapping[t.Info.Name.String()] = i } - dataCh := rc.GoCreateTables(context.TODO(), tables, newTS, errCh) - for et := range dataCh { - rules := et.RewriteRule + createdTables, err := rc.CreateTables(context.TODO(), tables, newTS) + if err != nil { + return nil, nil, err + } + for _, table := range createdTables { + rules := table.RewriteRule rewriteRules.Data = append(rewriteRules.Data, rules.Data...) - newTables = append(newTables, et.Table) + newTables = append(newTables, table.Table) } // Let's ensure that it won't break the original order. slices.SortFunc(newTables, func(i, j *model.TableInfo) int { return cmp.Compare(tbMapping[i.Name.String()], tbMapping[j.Name.String()]) }) - - select { - case err, ok := <-errCh: - if ok { - return nil, nil, errors.Trace(err) - } - default: - } return rewriteRules, newTables, nil } diff --git a/br/pkg/restore/snap_client/pipeline_items.go b/br/pkg/restore/snap_client/pipeline_items.go index 79f47d3a9c71c..55c7cb4d44e54 100644 --- a/br/pkg/restore/snap_client/pipeline_items.go +++ b/br/pkg/restore/snap_client/pipeline_items.go @@ -16,23 +16,19 @@ package snapclient import ( "context" - "sort" "sync" "time" - "github.com/opentracing/opentracing-go" "github.com/pingcap/errors" backuppb "github.com/pingcap/kvproto/pkg/brpb" "github.com/pingcap/log" "github.com/pingcap/tidb/br/pkg/glue" "github.com/pingcap/tidb/br/pkg/logutil" "github.com/pingcap/tidb/br/pkg/metautil" - tidallocdb "github.com/pingcap/tidb/br/pkg/restore/internal/prealloc_db" restoreutils "github.com/pingcap/tidb/br/pkg/restore/utils" "github.com/pingcap/tidb/br/pkg/rtree" "github.com/pingcap/tidb/br/pkg/storage" "github.com/pingcap/tidb/br/pkg/summary" - "github.com/pingcap/tidb/br/pkg/utils" "github.com/pingcap/tidb/pkg/domain/infosync" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/parser/model" @@ -390,112 +386,6 @@ func concurrentHandleTablesCh( } } -// GoCreateTables create tables, and generate their information. -// this function will use workers as the same number of sessionPool, -// leave sessionPool nil to send DDLs sequential. -func (rc *SnapClient) GoCreateTables( - ctx context.Context, - tables []*metautil.Table, - newTS uint64, - errCh chan<- error, -) <-chan CreatedTable { - // Could we have a smaller size of tables? - log.Info("start create tables") - - rc.generateRebasedTables(tables) - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("Client.GoCreateTables", opentracing.ChildOf(span.Context())) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) - } - outCh := make(chan CreatedTable, len(tables)) - rater := logutil.TraceRateOver(logutil.MetricTableCreatedCounter) - - var err error - - if rc.batchDdlSize > minBatchDdlSize && len(rc.dbPool) > 0 { - err = rc.createTablesInWorkerPool(ctx, tables, newTS, outCh) - if err == nil { - defer log.Debug("all tables are created") - close(outCh) - return outCh - } else if !utils.FallBack2CreateTable(err) { - errCh <- err - close(outCh) - return outCh - } - // fall back to old create table (sequential create table) - log.Info("fall back to the sequential create table") - } - - createOneTable := func(c context.Context, db *tidallocdb.DB, t *metautil.Table) error { - select { - case <-c.Done(): - return c.Err() - default: - } - rt, err := rc.createTable(c, db, t, newTS) - if err != nil { - log.Error("create table failed", - zap.Error(err), - zap.Stringer("db", t.DB.Name), - zap.Stringer("table", t.Info.Name)) - return errors.Trace(err) - } - log.Debug("table created and send to next", - zap.Int("output chan size", len(outCh)), - zap.Stringer("table", t.Info.Name), - zap.Stringer("database", t.DB.Name)) - outCh <- rt - rater.Inc() - rater.L().Info("table created", - zap.Stringer("table", t.Info.Name), - zap.Stringer("database", t.DB.Name)) - return nil - } - go func() { - defer close(outCh) - defer log.Debug("all tables are created") - var err error - if len(rc.dbPool) > 0 { - err = rc.createTablesWithDBPool(ctx, createOneTable, tables) - } else { - err = rc.createTablesWithSoleDB(ctx, createOneTable, tables) - } - if err != nil { - errCh <- err - } - }() - - return outCh -} - -func (rc *SnapClient) GoBlockCreateTablesPipeline(ctx context.Context, sz int, inCh <-chan CreatedTable) <-chan CreatedTable { - outCh := make(chan CreatedTable, sz) - - go func() { - defer close(outCh) - cachedTables := make([]CreatedTable, 0, sz) - for tbl := range inCh { - cachedTables = append(cachedTables, tbl) - } - - sort.Slice(cachedTables, func(a, b int) bool { - return cachedTables[a].Table.ID < cachedTables[b].Table.ID - }) - - for _, tbl := range cachedTables { - select { - case <-ctx.Done(): - return - default: - outCh <- tbl - } - } - }() - return outCh -} - // GoValidateFileRanges validate files by a stream of tables and yields // tables with range. func (rc *SnapClient) GoValidateFileRanges( diff --git a/br/pkg/restore/tiflashrec/tiflash_recorder.go b/br/pkg/restore/tiflashrec/tiflash_recorder.go index 692e3b6a82511..8add1bb8f3849 100644 --- a/br/pkg/restore/tiflashrec/tiflash_recorder.go +++ b/br/pkg/restore/tiflashrec/tiflash_recorder.go @@ -16,6 +16,7 @@ package tiflashrec import ( "bytes" + "context" "fmt" "github.com/pingcap/log" @@ -90,7 +91,7 @@ func (r *TiFlashRecorder) Rewrite(oldID int64, newID int64) { func (r *TiFlashRecorder) GenerateResetAlterTableDDLs(info infoschema.InfoSchema) []string { items := make([]string, 0, len(r.items)) r.Iterate(func(id int64, replica model.TiFlashReplicaInfo) { - table, ok := info.TableByID(id) + table, ok := info.TableByID(context.Background(), id) if !ok { log.Warn("Table do not exist, skipping", zap.Int64("id", id)) return @@ -130,7 +131,7 @@ func (r *TiFlashRecorder) GenerateResetAlterTableDDLs(info infoschema.InfoSchema func (r *TiFlashRecorder) GenerateAlterTableDDLs(info infoschema.InfoSchema) []string { items := make([]string, 0, len(r.items)) r.Iterate(func(id int64, replica model.TiFlashReplicaInfo) { - table, ok := info.TableByID(id) + table, ok := info.TableByID(context.Background(), id) if !ok { log.Warn("Table do not exist, skipping", zap.Int64("id", id)) return diff --git a/br/pkg/task/config_test.go b/br/pkg/task/config_test.go index 6a86b43dc24c2..3090570046644 100644 --- a/br/pkg/task/config_test.go +++ b/br/pkg/task/config_test.go @@ -232,10 +232,10 @@ func mockReadSchemasFromBackupMeta(t *testing.T, db2Tables map[string][]string) } mockDB := model.DBInfo{ - ID: dbID, - Name: dbName, - Tables: mockTblList, + ID: dbID, + Name: dbName, } + mockDB.Deprecated.Tables = mockTblList dbID++ dbBytes, err := json.Marshal(mockDB) require.NoError(t, err) diff --git a/br/pkg/task/restore.go b/br/pkg/task/restore.go index 8bc6383be78b6..f1ff4391634af 100644 --- a/br/pkg/task/restore.go +++ b/br/pkg/task/restore.go @@ -7,6 +7,7 @@ import ( "context" "fmt" "slices" + "sort" "strings" "time" @@ -34,10 +35,10 @@ import ( "github.com/pingcap/tidb/br/pkg/version" "github.com/pingcap/tidb/pkg/config" "github.com/pingcap/tidb/pkg/domain" + "github.com/pingcap/tidb/pkg/infoschema" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/tablecodec" - "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/collate" "github.com/pingcap/tidb/pkg/util/engine" "github.com/pingcap/tidb/pkg/util/mathutil" @@ -101,7 +102,6 @@ const ( defaultBatchFlushInterval = 16 * time.Second defaultFlagDdlBatchSize = 128 resetSpeedLimitRetryTimes = 3 - maxRestoreBatchSizeLimit = 10240 ) const ( @@ -179,6 +179,7 @@ func DefineRestoreCommonFlags(flags *pflag.FlagSet) { _ = flags.MarkHidden(FlagStatsConcurrency) _ = flags.MarkHidden(FlagBatchFlushInterval) _ = flags.MarkHidden(FlagDdlBatchSize) + _ = flags.MarkHidden(flagUseFSR) } // ParseFromFlags parses the config from the flag set. @@ -910,6 +911,11 @@ func runRestore(c context.Context, g glue.Glue, cmdName string, cfg *RestoreConf if cfg.WithSysTable { client.InitFullClusterRestore(cfg.ExplicitFilter) } + } else if checkpointFirstRun && cfg.CheckRequirements { + if err := checkTableExistence(ctx, mgr, tables, g); err != nil { + schedulersRemovable = true + return errors.Trace(err) + } } if client.IsFullClusterRestore() && client.HasBackedUpSysDB() { @@ -1047,7 +1053,10 @@ func runRestore(c context.Context, g glue.Glue, cmdName string, cfg *RestoreConf // We make bigger errCh so we won't block on multi-part failed. errCh := make(chan error, 32) - tableStream := client.GoCreateTables(ctx, tables, newTS, errCh) + createdTables, err := client.CreateTables(ctx, tables, newTS) + if err != nil { + return errors.Trace(err) + } if len(files) == 0 { log.Info("no files, empty databases and tables are restored") @@ -1067,30 +1076,25 @@ func runRestore(c context.Context, g glue.Glue, cmdName string, cfg *RestoreConf } // Hijack the tableStream and rewrite the rewrite rules. - tableStream = util.ChanMap(tableStream, func(t snapclient.CreatedTable) snapclient.CreatedTable { + for _, createdTable := range createdTables { // Set the keyspace info for the checksum requests - t.RewriteRule.OldKeyspace = oldKeyspace - t.RewriteRule.NewKeyspace = newKeyspace + createdTable.RewriteRule.OldKeyspace = oldKeyspace + createdTable.RewriteRule.NewKeyspace = newKeyspace - for _, rule := range t.RewriteRule.Data { + for _, rule := range createdTable.RewriteRule.Data { rule.OldKeyPrefix = append(append([]byte{}, oldKeyspace...), rule.OldKeyPrefix...) rule.NewKeyPrefix = codec.EncodeKey(rule.NewKeyPrefix) } - return t - }) + } } if cfg.tiflashRecorder != nil { - tableStream = util.ChanMap(tableStream, func(t snapclient.CreatedTable) snapclient.CreatedTable { - if cfg.tiflashRecorder != nil { - cfg.tiflashRecorder.Rewrite(t.OldTable.Info.ID, t.Table.ID) - } - return t - }) + for _, createdTable := range createdTables { + cfg.tiflashRecorder.Rewrite(createdTable.OldTable.Info.ID, createdTable.Table.ID) + } } - // Block on creating tables before restore starts. since create table is no longer a heavy operation any more. - tableStream = client.GoBlockCreateTablesPipeline(ctx, maxRestoreBatchSizeLimit, tableStream) + tableStream := afterTableCreatedCh(ctx, createdTables) tableFileMap := MapTableToFiles(files) log.Debug("mapped table to files", zap.Any("result map", tableFileMap)) @@ -1315,6 +1319,10 @@ func checkDiskSpace(ctx context.Context, mgr *conn.Mgr, files []*backuppb.File, } return base * uint64(ratio*10) / 10 } + + // The preserve rate for tikv is quite accurate, while rate for tiflash is a + // number calculated from tpcc testing with variable data sizes. 1.4 is a + // relative conservative value. tikvUsage := preserve(EstimateTikvUsage(files, maxReplica, tikvCnt), 1.1) tiflashUsage := preserve(EstimateTiflashUsage(tables, tiflashCnt), 1.4) log.Info("preserved disk space", zap.Uint64("tikv", tikvUsage), zap.Uint64("tiflash", tiflashUsage)) @@ -1358,6 +1366,28 @@ func Exhaust(ec <-chan error) []error { } } +func checkTableExistence(ctx context.Context, mgr *conn.Mgr, tables []*metautil.Table, g glue.Glue) error { + // Tasks from br clp client use other checks to validate + if g.GetClient() != glue.ClientSql { + return nil + } + message := "table already exists: " + allUnique := true + for _, table := range tables { + _, err := mgr.GetDomain().InfoSchema().TableByName(ctx, table.DB.Name, table.Info.Name) + if err == nil { + message += fmt.Sprintf("%s.%s ", table.DB.Name, table.Info.Name) + allUnique = false + } else if !infoschema.ErrTableNotExists.Equal(err) { + return errors.Trace(err) + } + } + if !allUnique { + return errors.Annotate(berrors.ErrTablesAlreadyExisted, message) + } + return nil +} + // EstimateRangeSize estimates the total range count by file. func EstimateRangeSize(files []*backuppb.File) int { result := 0 @@ -1711,3 +1741,25 @@ func checkIsInActions(action model.ActionType, actions map[model.ActionType]stru _, ok := actions[action] return ok } + +func afterTableCreatedCh(ctx context.Context, createdTables []*snapclient.CreatedTable) <-chan snapclient.CreatedTable { + outCh := make(chan snapclient.CreatedTable) + + go func() { + defer close(outCh) + + sort.Slice(createdTables, func(a, b int) bool { + return createdTables[a].Table.ID < createdTables[b].Table.ID + }) + + for _, createdTable := range createdTables { + select { + case <-ctx.Done(): + return + default: + outCh <- *createdTable + } + } + }() + return outCh +} diff --git a/br/pkg/task/stream.go b/br/pkg/task/stream.go index 5ec178a4ceeff..29e3177df7e0c 100644 --- a/br/pkg/task/stream.go +++ b/br/pkg/task/stream.go @@ -435,18 +435,6 @@ func (s *streamMgr) backupFullSchemas(ctx context.Context) error { m.ClusterVersion = clusterVersion }) - schemas := backup.NewBackupSchemas(func(storage kv.Storage, fn func(*model.DBInfo, *model.TableInfo)) error { - return backup.BuildFullSchema(storage, s.cfg.StartTS, func(dbInfo *model.DBInfo, tableInfo *model.TableInfo) { - fn(dbInfo, tableInfo) - }) - }, 0) - - err = schemas.BackupSchemas(ctx, metaWriter, nil, s.mgr.GetStorage(), nil, - s.cfg.StartTS, backup.DefaultSchemaConcurrency, 0, true, nil) - if err != nil { - return errors.Trace(err) - } - if err = metaWriter.FlushBackupMeta(ctx); err != nil { return errors.Trace(err) } @@ -1364,7 +1352,6 @@ func restoreStream( // get the schemas ID replace information. schemasReplace, err := client.InitSchemasReplaceForDDL(ctx, &logclient.InitSchemaConfig{ IsNewTask: newTask, - HasFullRestore: len(cfg.FullBackupStorage) > 0, TableFilter: cfg.TableFilter, TiFlashRecorder: cfg.tiflashRecorder, FullBackupStorage: fullBackupStorage, @@ -1686,13 +1673,11 @@ func getFullBackupTS( func parseFullBackupTablesStorage( cfg *RestoreConfig, ) (*logclient.FullBackupStorageConfig, error) { - var storageName string - if len(cfg.FullBackupStorage) > 0 { - storageName = cfg.FullBackupStorage - } else { - storageName = cfg.Storage + if len(cfg.FullBackupStorage) == 0 { + log.Info("the full backup path is not specified, so BR will try to get id maps") + return nil, nil } - u, err := storage.ParseBackend(storageName, &cfg.BackendOptions) + u, err := storage.ParseBackend(cfg.FullBackupStorage, &cfg.BackendOptions) if err != nil { return nil, errors.Trace(err) } diff --git a/br/pkg/utils/BUILD.bazel b/br/pkg/utils/BUILD.bazel index 1b0272f37d956..e00548ccabca0 100644 --- a/br/pkg/utils/BUILD.bazel +++ b/br/pkg/utils/BUILD.bazel @@ -7,10 +7,10 @@ go_library( "db.go", "dyn_pprof_other.go", "dyn_pprof_unix.go", + "error_handling.go", "json.go", "key.go", "misc.go", - "permission.go", "pointer.go", "pprof.go", "progress.go", @@ -55,6 +55,7 @@ go_library( "@org_golang_google_grpc//credentials/insecure", "@org_golang_google_grpc//keepalive", "@org_golang_google_grpc//status", + "@org_golang_x_term//:term", "@org_uber_go_atomic//:atomic", "@org_uber_go_multierr//:multierr", "@org_uber_go_zap//:zap", @@ -68,6 +69,7 @@ go_test( srcs = [ "backoff_test.go", "db_test.go", + "error_handling_test.go", "json_test.go", "key_test.go", "main_test.go", diff --git a/br/pkg/utils/backoff.go b/br/pkg/utils/backoff.go index b9ce6dcb0b5d6..385ed4319a06a 100644 --- a/br/pkg/utils/backoff.go +++ b/br/pkg/utils/backoff.go @@ -172,8 +172,8 @@ func (bo *importerBackoffer) NextBackoff(err error) time.Duration { // we don't care storeID here. errs := multierr.Errors(err) lastErr := errs[len(errs)-1] - res := bo.errContext.HandleErrorMsg(lastErr.Error(), 0) - if res.Strategy == RetryStrategy { + res := HandleUnknownBackupError(lastErr.Error(), 0, bo.errContext) + if res.Strategy == StrategyRetry { bo.delayTime = 2 * bo.delayTime bo.attempt-- } else { diff --git a/br/pkg/utils/error_handling.go b/br/pkg/utils/error_handling.go new file mode 100644 index 0000000000000..6c6c84a2a1884 --- /dev/null +++ b/br/pkg/utils/error_handling.go @@ -0,0 +1,196 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package utils + +import ( + "fmt" + "strings" + "sync" + + backuppb "github.com/pingcap/kvproto/pkg/brpb" + "github.com/pingcap/log" + "go.uber.org/zap" +) + +// UNSAFE! TODO: remove and map them to error types +var retryableErrorMsg = []string{ + "server closed", + "connection refused", + "connection reset by peer", + "channel closed", + "error trying to connect", + "connection closed before message completed", + "body write aborted", + "error during dispatch", + "put object timeout", + "timeout after", + "internalerror", + "not read from or written to within the timeout period", + "requesttimeout", + "invalidpart", + "end of file before message length reached", +} + +// non-retryable error messages +// UNSAFE! TODO: remove and map them to error types +const ( + ioMsg = "io" + notFoundMsg = "notfound" + permissionDeniedMsg = "permissiondenied" +) + +// error messages +const ( + unreachableRetryMsg = "unreachable retry" + retryOnKvErrorMsg = "retry on kv error" + retryOnRegionErrorMsg = "retry on region error" + clusterIdMismatchMsg = "cluster id mismatch" + unknownErrorMsg = "unknown error" + contextCancelledMsg = "context canceled" + retryOnUnknownErrorMsg = "unknown error, retry it for a few times" + noRetryOnUnknownErrorMsg = "unknown error, retried too many times, give up" + retryableStorageErrorMsg = "retryable storage error" +) + +type ErrorHandlingResult struct { + Strategy ErrorHandlingStrategy + Reason string +} + +type ErrorHandlingStrategy int + +const ( + // StrategyRetry error can be retried but will consume the backoff attempt quota. + StrategyRetry ErrorHandlingStrategy = iota + // StrategyGiveUp means unrecoverable error happened and the BR should exit + // for example: + // 1. permission not valid. + // 2. data not found. + // 3. retry too many times + StrategyGiveUp + // StrategyUnknown for StrategyUnknown error + StrategyUnknown +) + +type ErrorContext struct { + mu sync.Mutex + // encounter times for one context on a store + // we may use this value to determine the retry policy + encounterTimes map[uint64]int + // unknown error retry limitation. + // encounter many times error makes Retry to GiveUp. + encounterTimesLimitation int + description string +} + +func NewErrorContext(scenario string, limitation int) *ErrorContext { + return &ErrorContext{ + description: scenario, + encounterTimes: make(map[uint64]int), + encounterTimesLimitation: limitation, + } +} + +func NewDefaultContext() *ErrorContext { + return &ErrorContext{ + description: "default", + encounterTimes: make(map[uint64]int), + encounterTimesLimitation: 1, + } +} + +func HandleBackupError(err *backuppb.Error, storeId uint64, ec *ErrorContext) ErrorHandlingResult { + if err == nil { + return ErrorHandlingResult{StrategyRetry, unreachableRetryMsg} + } + res := handleBackupProtoError(err) + // try the best effort handle unknown error based on their error message + if res.Strategy == StrategyUnknown && len(err.Msg) != 0 { + return HandleUnknownBackupError(err.Msg, storeId, ec) + } + return res +} + +func handleBackupProtoError(e *backuppb.Error) ErrorHandlingResult { + switch e.Detail.(type) { + case *backuppb.Error_KvError: + return ErrorHandlingResult{StrategyRetry, retryOnKvErrorMsg} + case *backuppb.Error_RegionError: + return ErrorHandlingResult{StrategyRetry, retryOnRegionErrorMsg} + case *backuppb.Error_ClusterIdError: + return ErrorHandlingResult{StrategyGiveUp, clusterIdMismatchMsg} + } + return ErrorHandlingResult{StrategyUnknown, unknownErrorMsg} +} + +// HandleUnknownBackupError UNSAFE! TODO: remove this method and map all the current unknown errors to error types +func HandleUnknownBackupError(msg string, uuid uint64, ec *ErrorContext) ErrorHandlingResult { + // UNSAFE! TODO: use meaningful error code instead of unstructured message to find failed to write error. + logger := log.L().With(zap.String("description", ec.description)) + if messageIsNotFoundStorageError(msg) { + reason := fmt.Sprintf("File or directory not found on TiKV Node (store id: %v). "+ + "workaround: please ensure br and tikv nodes share a same storage and the user of br and tikv has same uid.", + uuid) + return ErrorHandlingResult{StrategyGiveUp, reason} + } + if messageIsPermissionDeniedStorageError(msg) { + reason := fmt.Sprintf("I/O permission denied error occurs on TiKV Node(store id: %v). "+ + "workaround: please ensure tikv has permission to read from & write to the storage.", + uuid) + return ErrorHandlingResult{StrategyGiveUp, reason} + } + msgLower := strings.ToLower(msg) + if strings.Contains(msgLower, contextCancelledMsg) { + return ErrorHandlingResult{StrategyGiveUp, contextCancelledMsg} + } + + if MessageIsRetryableStorageError(msg) { + logger.Warn(retryableStorageErrorMsg, zap.String("error", msg)) + return ErrorHandlingResult{StrategyRetry, retryableStorageErrorMsg} + } + + // retry enough on same store + ec.mu.Lock() + defer ec.mu.Unlock() + ec.encounterTimes[uuid]++ + if ec.encounterTimes[uuid] <= ec.encounterTimesLimitation { + return ErrorHandlingResult{StrategyRetry, retryOnUnknownErrorMsg} + } + return ErrorHandlingResult{StrategyGiveUp, noRetryOnUnknownErrorMsg} +} + +// messageIsNotFoundStorageError checks whether the message returning from TiKV is "NotFound" storage I/O error +func messageIsNotFoundStorageError(msg string) bool { + msgLower := strings.ToLower(msg) + return strings.Contains(msgLower, ioMsg) && strings.Contains(msgLower, notFoundMsg) +} + +// MessageIsPermissionDeniedStorageError checks whether the message returning from TiKV is "PermissionDenied" storage I/O error +func messageIsPermissionDeniedStorageError(msg string) bool { + msgLower := strings.ToLower(msg) + return strings.Contains(msgLower, permissionDeniedMsg) +} + +// MessageIsRetryableStorageError checks whether the message returning from TiKV is retryable ExternalStorageError. +func MessageIsRetryableStorageError(msg string) bool { + msgLower := strings.ToLower(msg) + // UNSAFE! TODO: Add a error type for retryable connection error. + for _, errStr := range retryableErrorMsg { + if strings.Contains(msgLower, errStr) { + return true + } + } + return false +} diff --git a/br/pkg/utils/error_handling_test.go b/br/pkg/utils/error_handling_test.go new file mode 100644 index 0000000000000..6b82983843560 --- /dev/null +++ b/br/pkg/utils/error_handling_test.go @@ -0,0 +1,70 @@ +package utils + +import ( + "testing" + + backuppb "github.com/pingcap/kvproto/pkg/brpb" + "github.com/pingcap/kvproto/pkg/errorpb" + "github.com/stretchr/testify/require" +) + +func TestHandleError(t *testing.T) { + ec := NewErrorContext("test", 3) + // Test case 1: Error is nil + result := HandleBackupError(nil, 123, ec) + require.Equal(t, ErrorHandlingResult{Strategy: StrategyRetry, Reason: unreachableRetryMsg}, result) + + // Test case 2: Error is KvError and can be ignored + kvError := &backuppb.Error_KvError{} + result = HandleBackupError(&backuppb.Error{Detail: kvError}, 123, ec) + require.Equal(t, ErrorHandlingResult{Strategy: StrategyRetry, Reason: retryOnKvErrorMsg}, result) + + // Test case 3: Error is RegionError and can be ignored + regionError := &backuppb.Error_RegionError{ + RegionError: &errorpb.Error{NotLeader: &errorpb.NotLeader{RegionId: 1}}} + result = HandleBackupError(&backuppb.Error{Detail: regionError}, 123, ec) + require.Equal(t, ErrorHandlingResult{Strategy: StrategyRetry, Reason: retryOnRegionErrorMsg}, result) + + // Test case 4: Error is ClusterIdError + clusterIdError := &backuppb.Error_ClusterIdError{} + result = HandleBackupError(&backuppb.Error{Detail: clusterIdError}, 123, ec) + require.Equal(t, ErrorHandlingResult{Strategy: StrategyGiveUp, Reason: clusterIdMismatchMsg}, result) +} + +func TestHandleErrorMsg(t *testing.T) { + ec := NewErrorContext("test", 3) + + // Test messageIsNotFoundStorageError + msg := "IO: files Notfound error" + uuid := uint64(456) + expectedReason := "File or directory not found on TiKV Node (store id: 456). workaround: please ensure br and tikv nodes share a same storage and the user of br and tikv has same uid." + expectedResult := ErrorHandlingResult{Strategy: StrategyGiveUp, Reason: expectedReason} + actualResult := HandleUnknownBackupError(msg, uuid, ec) + require.Equal(t, expectedResult, actualResult) + + // Test messageIsPermissionDeniedStorageError + msg = "I/O permissiondenied error occurs on TiKV Node(store id: 456)." + expectedReason = "I/O permission denied error occurs on TiKV Node(store id: 456). workaround: please ensure tikv has permission to read from & write to the storage." + expectedResult = ErrorHandlingResult{Strategy: StrategyGiveUp, Reason: expectedReason} + actualResult = HandleUnknownBackupError(msg, uuid, ec) + require.Equal(t, expectedResult, actualResult) + + // Test MessageIsRetryableStorageError + msg = "server closed" + expectedResult = ErrorHandlingResult{Strategy: StrategyRetry, Reason: retryableStorageErrorMsg} + actualResult = HandleUnknownBackupError(msg, uuid, ec) + require.Equal(t, expectedResult, actualResult) + + // Test unknown error + msg = "unknown error" + expectedResult = ErrorHandlingResult{Strategy: StrategyRetry, Reason: retryOnUnknownErrorMsg} + actualResult = HandleUnknownBackupError(msg, uuid, ec) + require.Equal(t, expectedResult, actualResult) + + // Test retry too many times + _ = HandleUnknownBackupError(msg, uuid, ec) + _ = HandleUnknownBackupError(msg, uuid, ec) + expectedResult = ErrorHandlingResult{Strategy: StrategyGiveUp, Reason: noRetryOnUnknownErrorMsg} + actualResult = HandleUnknownBackupError(msg, uuid, ec) + require.Equal(t, expectedResult, actualResult) +} diff --git a/br/pkg/utils/permission.go b/br/pkg/utils/permission.go deleted file mode 100644 index 3c0795db11c47..0000000000000 --- a/br/pkg/utils/permission.go +++ /dev/null @@ -1,20 +0,0 @@ -package utils - -import "strings" - -var ( - ioNotFoundMsg = "notfound" - permissionDeniedMsg = "permissiondenied" -) - -// messageIsNotFoundStorageError checks whether the message returning from TiKV is "NotFound" storage I/O error -func messageIsNotFoundStorageError(msg string) bool { - msgLower := strings.ToLower(msg) - return strings.Contains(msgLower, "io") && strings.Contains(msgLower, ioNotFoundMsg) -} - -// MessageIsPermissionDeniedStorageError checks whether the message returning from TiKV is "PermissionDenied" storage I/O error -func messageIsPermissionDeniedStorageError(msg string) bool { - msgLower := strings.ToLower(msg) - return strings.Contains(msgLower, permissionDeniedMsg) -} diff --git a/br/pkg/utils/progress.go b/br/pkg/utils/progress.go index 5792677d90633..ba8e86a0dbcfe 100644 --- a/br/pkg/utils/progress.go +++ b/br/pkg/utils/progress.go @@ -6,6 +6,7 @@ import ( "context" "encoding/json" "io" + "os" "sync" "sync/atomic" "time" @@ -14,6 +15,7 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/log" "go.uber.org/zap" + "golang.org/x/term" ) type logFunc func(msg string, fields ...zap.Field) @@ -74,14 +76,27 @@ func (pp *ProgressPrinter) Close() { } } +// getTerminalOutput try to use os.Stderr as terminal output +func getTerminalOutput() io.Writer { + output := os.Stdout + if term.IsTerminal(int(output.Fd())) { + return output + } + return nil +} + // goPrintProgress starts a gorouinte and prints progress. func (pp *ProgressPrinter) goPrintProgress( ctx context.Context, logFuncImpl logFunc, testWriter io.Writer, // Only for tests ) { + var terminalOutput io.Writer + if !pp.redirectLog && testWriter == nil { + terminalOutput = getTerminalOutput() + } bar := pb.New64(pp.total) - if pp.redirectLog || testWriter != nil { + if terminalOutput == nil { tmpl := `{"P":"{{percent .}}","C":"{{counters . }}","E":"{{etime .}}","R":"{{rtime .}}","S":"{{speed .}}"}` bar.SetTemplateString(tmpl) bar.SetRefreshRate(2 * time.Minute) @@ -98,6 +113,7 @@ func (pp *ProgressPrinter) goPrintProgress( tmpl := `{{string . "barName" | green}} {{ bar . "<" "-" (cycle . "-" "\\" "|" "/" ) "." ">"}} {{percent .}}` bar.SetTemplateString(tmpl) bar.Set("barName", pp.name) + bar.SetWriter(terminalOutput) } if testWriter != nil { bar.SetWriter(testWriter) diff --git a/br/pkg/utils/retry.go b/br/pkg/utils/retry.go index 2efe37a8e8dff..6671f16b7842e 100644 --- a/br/pkg/utils/retry.go +++ b/br/pkg/utils/retry.go @@ -5,14 +5,11 @@ package utils import ( "context" stderrs "errors" - "fmt" - "strings" "sync" "time" "github.com/google/uuid" "github.com/pingcap/errors" - backuppb "github.com/pingcap/kvproto/pkg/brpb" "github.com/pingcap/log" tmysql "github.com/pingcap/tidb/pkg/errno" "github.com/pingcap/tidb/pkg/parser/terror" @@ -22,175 +19,6 @@ import ( "go.uber.org/zap" ) -var retryableServerError = []string{ - "server closed", - "connection refused", - "connection reset by peer", - "channel closed", - "error trying to connect", - "connection closed before message completed", - "body write aborted", - "error during dispatch", - "put object timeout", - "timeout after", - "internalerror", - "not read from or written to within the timeout period", - "requesttimeout", - "invalidpart", - "end of file before message length reached", -} - -type ErrorResult struct { - Strategy ErrorStrategy - Reason string -} - -type ErrorStrategy int - -const ( - // This type can be retry but consume the backoffer attempts. - RetryStrategy ErrorStrategy = iota - // This type means unrecoverable error and the whole progress should exits - // for example: - // 1. permission not valid. - // 2. data has not found. - // 3. retry too many times - GiveUpStrategy - // This type represents Unknown error - UnknownStrategy -) - -type ErrorContext struct { - mu sync.Mutex - // encounter times for one context on a store - // we may use this value to determine the retry policy - encounterTimes map[uint64]int - // unknown error retry limitation. - // encouter many times error makes Retry to GiveUp. - encounterTimesLimitation int - // whether in backup or restore - scenario string -} - -func NewErrorContext(scenario string, limitation int) *ErrorContext { - return &ErrorContext{ - scenario: scenario, - encounterTimes: make(map[uint64]int), - encounterTimesLimitation: limitation, - } -} - -func NewDefaultContext() *ErrorContext { - return &ErrorContext{ - scenario: "default", - encounterTimes: make(map[uint64]int), - encounterTimesLimitation: 1, - } -} - -func (ec *ErrorContext) HandleError(err *backuppb.Error, uuid uint64) ErrorResult { - if err == nil { - return ErrorResult{RetryStrategy, "unreachable retry"} - } - res := ec.handleErrorPb(err, uuid) - // try the best effort to save progress from error here - if res.Strategy == UnknownStrategy && len(err.Msg) != 0 { - return ec.HandleErrorMsg(err.Msg, uuid) - } - return res -} - -func (ec *ErrorContext) HandleIgnorableError(err *backuppb.Error, uuid uint64) ErrorResult { - if err == nil { - return ErrorResult{RetryStrategy, "unreachable retry"} - } - res := ec.handleIgnorableErrorPb(err, uuid) - // try the best effort to save progress from error here - if res.Strategy == UnknownStrategy && len(err.Msg) != 0 { - return ec.HandleErrorMsg(err.Msg, uuid) - } - return res -} - -func (ec *ErrorContext) HandleErrorMsg(msg string, uuid uint64) ErrorResult { - // UNSAFE! TODO: use meaningful error code instead of unstructured message to find failed to write error. - logger := log.L().With(zap.String("scenario", ec.scenario)) - if messageIsNotFoundStorageError(msg) { - reason := fmt.Sprintf("File or directory not found on TiKV Node (store id: %v). "+ - "work around:please ensure br and tikv nodes share a same storage and the user of br and tikv has same uid.", - uuid) - return ErrorResult{GiveUpStrategy, reason} - } - if messageIsPermissionDeniedStorageError(msg) { - reason := fmt.Sprintf("I/O permission denied error occurs on TiKV Node(store id: %v). "+ - "work around:please ensure tikv has permission to read from & write to the storage.", - uuid) - return ErrorResult{GiveUpStrategy, reason} - } - msgLower := strings.ToLower(msg) - if strings.Contains(msgLower, "context canceled") { - return ErrorResult{GiveUpStrategy, "context canceled, give up"} - } - - if MessageIsRetryableStorageError(msg) { - logger.Warn("occur storage error", zap.String("error", msg)) - return ErrorResult{RetryStrategy, "retrable error"} - } - // retry enough on same store - ec.mu.Lock() - defer ec.mu.Unlock() - ec.encounterTimes[uuid]++ - if ec.encounterTimes[uuid] <= ec.encounterTimesLimitation { - return ErrorResult{RetryStrategy, "unknown error, retry it for few times"} - } - return ErrorResult{GiveUpStrategy, "unknown error and retry too many times, give up"} -} - -func (ec *ErrorContext) handleIgnorableErrorPb(e *backuppb.Error, uuid uint64) ErrorResult { - switch e.Detail.(type) { - case *backuppb.Error_KvError: - return ErrorResult{RetryStrategy, "retry outside because the error can be ignored"} - case *backuppb.Error_RegionError: - return ErrorResult{RetryStrategy, "retry outside because the error can be ignored"} - case *backuppb.Error_ClusterIdError: - return ErrorResult{GiveUpStrategy, "cluster ID mismatch"} - } - return ErrorResult{UnknownStrategy, "unreachable code"} -} - -func (ec *ErrorContext) handleErrorPb(e *backuppb.Error, uuid uint64) ErrorResult { - logger := log.L().With(zap.String("scenario", ec.scenario)) - switch v := e.Detail.(type) { - case *backuppb.Error_KvError: - // should not meet error other than KeyLocked. - return ErrorResult{GiveUpStrategy, "unknown kv error"} - - case *backuppb.Error_RegionError: - regionErr := v.RegionError - // Ignore following errors. - if !(regionErr.EpochNotMatch != nil || - regionErr.NotLeader != nil || - regionErr.RegionNotFound != nil || - regionErr.ServerIsBusy != nil || - regionErr.StaleCommand != nil || - regionErr.StoreNotMatch != nil || - regionErr.ReadIndexNotReady != nil || - regionErr.ProposalInMergingMode != nil) { - logger.Error("unexpect region error", zap.Reflect("RegionError", regionErr)) - return ErrorResult{GiveUpStrategy, "unknown kv error"} - } - logger.Warn("occur region error", - zap.Reflect("RegionError", regionErr), - zap.Uint64("uuid", uuid)) - return ErrorResult{RetryStrategy, "retrable error"} - - case *backuppb.Error_ClusterIdError: - logger.Error("occur cluster ID error", zap.Reflect("error", v), zap.Uint64("uuid", uuid)) - return ErrorResult{GiveUpStrategy, "cluster ID mismatch"} - } - return ErrorResult{UnknownStrategy, "unreachable code"} -} - // RetryableFunc presents a retryable operation. type RetryableFunc func() error @@ -281,18 +109,6 @@ func WithRetryReturnLastErr( return lastErr } -// MessageIsRetryableStorageError checks whether the message returning from TiKV is retryable ExternalStorageError. -func MessageIsRetryableStorageError(msg string) bool { - msgLower := strings.ToLower(msg) - // UNSAFE! TODO: Add a error type for retryable connection error. - for _, errStr := range retryableServerError { - if strings.Contains(msgLower, errStr) { - return true - } - } - return false -} - func FallBack2CreateTable(err error) bool { switch nerr := errors.Cause(err).(type) { case *terror.Error: diff --git a/br/pkg/utils/retry_test.go b/br/pkg/utils/retry_test.go index 605b59fadd8b8..c2afe35f47741 100644 --- a/br/pkg/utils/retry_test.go +++ b/br/pkg/utils/retry_test.go @@ -9,8 +9,6 @@ import ( "time" "github.com/pingcap/errors" - backuppb "github.com/pingcap/kvproto/pkg/brpb" - "github.com/pingcap/kvproto/pkg/errorpb" berrors "github.com/pingcap/tidb/br/pkg/errors" "github.com/pingcap/tidb/br/pkg/utils" "github.com/stretchr/testify/require" @@ -73,74 +71,3 @@ func TestFailNowIf(t *testing.T) { assert.Equal(time.Duration(0), bo.NextBackoff(annotatedErr)) assert.Equal(0, bo.Attempt()) } - -func TestHandleError(t *testing.T) { - ec := utils.NewErrorContext("test", 3) - // Test case 1: Error is nil - result := ec.HandleError(nil, 123) - require.Equal(t, utils.ErrorResult{utils.RetryStrategy, "unreachable retry"}, result) - - // Test case 2: Error is KvError and can be ignored - kvError := &backuppb.Error_KvError{} - result = ec.HandleIgnorableError(&backuppb.Error{Detail: kvError}, 123) - require.Equal(t, utils.ErrorResult{utils.RetryStrategy, "retry outside because the error can be ignored"}, result) - - // Test case 3: Error is KvError and cannot be ignored - result = ec.HandleError(&backuppb.Error{Detail: kvError}, 123) - require.Equal(t, utils.ErrorResult{utils.GiveUpStrategy, "unknown kv error"}, result) - - // Test case 4: Error is RegionError and can be ignored - regionError := &backuppb.Error_RegionError{ - RegionError: &errorpb.Error{NotLeader: &errorpb.NotLeader{RegionId: 1}}} - result = ec.HandleIgnorableError(&backuppb.Error{Detail: regionError}, 123) - require.Equal(t, utils.ErrorResult{utils.RetryStrategy, "retry outside because the error can be ignored"}, result) - - // Test case 5: Error is RegionError and cannot be ignored - regionError = &backuppb.Error_RegionError{ - RegionError: &errorpb.Error{DiskFull: &errorpb.DiskFull{}}} - result = ec.HandleError(&backuppb.Error{Detail: regionError}, 123) - require.Equal(t, utils.ErrorResult{utils.GiveUpStrategy, "unknown kv error"}, result) - - // Test case 6: Error is ClusterIdError - clusterIdError := &backuppb.Error_ClusterIdError{} - result = ec.HandleError(&backuppb.Error{Detail: clusterIdError}, 123) - require.Equal(t, utils.ErrorResult{utils.GiveUpStrategy, "cluster ID mismatch"}, result) -} - -func TestHandleErrorMsg(t *testing.T) { - ec := utils.NewErrorContext("test", 3) - - // Test messageIsNotFoundStorageError - msg := "IO: files Notfound error" - uuid := uint64(456) - expectedReason := "File or directory not found on TiKV Node (store id: 456). work around:please ensure br and tikv nodes share a same storage and the user of br and tikv has same uid." - expectedResult := utils.ErrorResult{utils.GiveUpStrategy, expectedReason} - actualResult := ec.HandleErrorMsg(msg, uuid) - require.Equal(t, expectedResult, actualResult) - - // Test messageIsPermissionDeniedStorageError - msg = "I/O permissiondenied error occurs on TiKV Node(store id: 456)." - expectedReason = "I/O permission denied error occurs on TiKV Node(store id: 456). work around:please ensure tikv has permission to read from & write to the storage." - expectedResult = utils.ErrorResult{utils.GiveUpStrategy, expectedReason} - actualResult = ec.HandleErrorMsg(msg, uuid) - require.Equal(t, expectedResult, actualResult) - - // Test MessageIsRetryableStorageError - msg = "server closed" - expectedResult = utils.ErrorResult{utils.RetryStrategy, "retrable error"} - actualResult = ec.HandleErrorMsg(msg, uuid) - require.Equal(t, expectedResult, actualResult) - - // Test unknown error - msg = "unknown error" - expectedResult = utils.ErrorResult{utils.RetryStrategy, "unknown error, retry it for few times"} - actualResult = ec.HandleErrorMsg(msg, uuid) - require.Equal(t, expectedResult, actualResult) - - // Test retry too many times - _ = ec.HandleErrorMsg(msg, uuid) - _ = ec.HandleErrorMsg(msg, uuid) - expectedResult = utils.ErrorResult{utils.GiveUpStrategy, "unknown error and retry too many times, give up"} - actualResult = ec.HandleErrorMsg(msg, uuid) - require.Equal(t, expectedResult, actualResult) -} diff --git a/br/tests/config/pd.toml b/br/tests/config/pd.toml index a0ff1422f2577..3adbcc89b320a 100644 --- a/br/tests/config/pd.toml +++ b/br/tests/config/pd.toml @@ -1,6 +1,3 @@ -lease = 360 -tso-save-interval = "360s" - [replication] enable-placement-rules = true diff --git a/build/image/base b/build/image/base index b6a333a5c0f7c..de477e68b6095 100644 --- a/build/image/base +++ b/build/image/base @@ -17,7 +17,7 @@ FROM hub.pingcap.net/jenkins/centos7_jenkins USER root WORKDIR /root -ENV GOLANG_VERSION 1.21.12 +ENV GOLANG_VERSION 1.21.13 ENV GOLANG_DOWNLOAD_URL https://dl.google.com/go/go$GOLANG_VERSION.linux-amd64.tar.gz ENV GOLANG_DOWNLOAD_SHA256 b3075ae1ce5dab85f89bc7905d1632de23ca196bd8336afd93fa97434cfa55ae ENV GOPATH /go diff --git a/build/image/parser_test b/build/image/parser_test index e3590b044333c..6acd458b58efc 100644 --- a/build/image/parser_test +++ b/build/image/parser_test @@ -14,7 +14,7 @@ FROM rockylinux:9 -ENV GOLANG_VERSION 1.21.12 +ENV GOLANG_VERSION 1.21.13 ENV ARCH amd64 ENV GOLANG_DOWNLOAD_URL https://dl.google.com/go/go$GOLANG_VERSION.linux-$ARCH.tar.gz ENV GOPATH /home/prow/go diff --git a/build/linter/allrevive/BUILD.bazel b/build/linter/allrevive/BUILD.bazel index b13604af6eef3..6e5ab459f3c5f 100644 --- a/build/linter/allrevive/BUILD.bazel +++ b/build/linter/allrevive/BUILD.bazel @@ -7,6 +7,7 @@ go_library( visibility = ["//visibility:public"], deps = [ "//build/linter/util", + "@com_github_hashicorp_go_version//:go-version", "@com_github_mgechev_revive//config", "@com_github_mgechev_revive//lint", "@com_github_mgechev_revive//rule", diff --git a/build/linter/allrevive/analyzer.go b/build/linter/allrevive/analyzer.go index 704ff7bfa184b..6edb07c4acdc9 100644 --- a/build/linter/allrevive/analyzer.go +++ b/build/linter/allrevive/analyzer.go @@ -16,10 +16,10 @@ package allrevive import ( "encoding/json" - "fmt" "go/token" "os" + goversion "github.com/hashicorp/go-version" "github.com/mgechev/revive/config" "github.com/mgechev/revive/lint" "github.com/mgechev/revive/rule" @@ -127,9 +127,13 @@ func run(pass *analysis.Pass) (any, error) { files = append(files, pass.Fset.PositionFor(file.Pos(), false).Filename) } packages := [][]string{files} - + gv, err := goversion.NewVersion("1.21") + if err != nil { + panic(err) + } revive := lint.New(os.ReadFile, 1024) conf := lint.Config{ + GoVersion: gv, IgnoreGeneratedHeader: false, Confidence: 0.8, Severity: "error", @@ -188,12 +192,12 @@ func run(pass *analysis.Pass) (any, error) { } for i := range results { res := &results[i] - text := fmt.Sprintf("%s: %s", res.RuleName, res.Failure.Failure) fileContent, tf, err := util.ReadFile(pass.Fset, res.Position.Start.Filename) if err != nil { panic(err) } - pass.Reportf(token.Pos(tf.Base()+util.FindOffset(string(fileContent), res.Position.Start.Line, res.Position.Start.Column)), text) + pass.Reportf(token.Pos(tf.Base()+util.FindOffset(string(fileContent), res.Position.Start.Line, res.Position.Start.Column)), + "%s: %s", res.RuleName, res.Failure.Failure) } return nil, nil } diff --git a/build/linter/gosec/analysis.go b/build/linter/gosec/analysis.go index df6fd7e054b4b..f49b185c923c2 100644 --- a/build/linter/gosec/analysis.go +++ b/build/linter/gosec/analysis.go @@ -83,7 +83,6 @@ func run(pass *analysis.Pass) (any, error) { if err != nil { panic(err) } - text := fmt.Sprintf("[%s] %s: %s", Name, i.RuleID, i.What) // TODO: use severity and confidence var r *result.Range line, err := strconv.Atoi(i.Line) if err != nil { @@ -93,8 +92,8 @@ func run(pass *analysis.Pass) (any, error) { } line = r.From } - - pass.Reportf(token.Pos(tf.Base()+util.FindOffset(string(fileContent), line, 1)), text) + pass.Reportf(token.Pos(tf.Base()+util.FindOffset(string(fileContent), line, 1)), + "[%s] %s: %s", Name, i.RuleID, i.What) // TODO: use severity and confidence } return nil, nil diff --git a/build/linter/misspell/analyzer.go b/build/linter/misspell/analyzer.go index 5246d82d527ff..ad50fd437d0a0 100644 --- a/build/linter/misspell/analyzer.go +++ b/build/linter/misspell/analyzer.go @@ -84,8 +84,8 @@ func runOnFile(fileName string, r *misspell.Replacer, pass *analysis.Pass) error // tool uses r.Replace by default. _, diffs := r.Replace(string(fileContent)) for _, diff := range diffs { - text := fmt.Sprintf("[%s] `%s` is a misspelling of `%s`", Name, diff.Original, diff.Corrected) - pass.Reportf(token.Pos(tf.Base()+util.FindOffset(string(fileContent), diff.Line, diff.Column)), text) + pass.Reportf(token.Pos(tf.Base()+util.FindOffset(string(fileContent), diff.Line, diff.Column)), + "[%s] `%s` is a misspelling of `%s`", Name, diff.Original, diff.Corrected) } return nil } diff --git a/build/linter/revive/BUILD.bazel b/build/linter/revive/BUILD.bazel index 922f493b7160c..6493822598212 100644 --- a/build/linter/revive/BUILD.bazel +++ b/build/linter/revive/BUILD.bazel @@ -7,6 +7,7 @@ go_library( visibility = ["//visibility:public"], deps = [ "//build/linter/util", + "@com_github_hashicorp_go_version//:go-version", "@com_github_mgechev_revive//config", "@com_github_mgechev_revive//lint", "@com_github_mgechev_revive//rule", diff --git a/build/linter/revive/analyzer.go b/build/linter/revive/analyzer.go index 5a853872da8e1..d81a2cf6a4462 100644 --- a/build/linter/revive/analyzer.go +++ b/build/linter/revive/analyzer.go @@ -16,10 +16,10 @@ package revive import ( "encoding/json" - "fmt" "go/token" "os" + goversion "github.com/hashicorp/go-version" "github.com/mgechev/revive/config" "github.com/mgechev/revive/lint" "github.com/mgechev/revive/rule" @@ -96,9 +96,13 @@ func run(pass *analysis.Pass) (any, error) { files = append(files, pass.Fset.PositionFor(file.Pos(), false).Filename) } packages := [][]string{files} - + gv, err := goversion.NewVersion("1.21") + if err != nil { + panic(err) + } revive := lint.New(os.ReadFile, 1024) conf := lint.Config{ + GoVersion: gv, IgnoreGeneratedHeader: false, Confidence: 0.8, Severity: "error", @@ -156,12 +160,12 @@ func run(pass *analysis.Pass) (any, error) { } for i := range results { res := &results[i] - text := fmt.Sprintf("%s: %s", res.RuleName, res.Failure.Failure) fileContent, tf, err := util.ReadFile(pass.Fset, res.Position.Start.Filename) if err != nil { panic(err) } - pass.Reportf(token.Pos(tf.Base()+util.FindOffset(string(fileContent), res.Position.Start.Line, res.Position.Start.Column)), text) + pass.Reportf(token.Pos(tf.Base()+util.FindOffset(string(fileContent), res.Position.Start.Line, res.Position.Start.Column)), + "%s: %s", res.RuleName, res.Failure.Failure) } return nil, nil } diff --git a/build/nogo_config.json b/build/nogo_config.json index 898b4ba746849..1722910174b33 100644 --- a/build/nogo_config.json +++ b/build/nogo_config.json @@ -81,7 +81,9 @@ "exclude_files": { "pkg/parser/parser.go": "parser/parser.go code", "external/": "no need to vet third party code", - ".*_generated\\.go$": "ignore generated code" + ".*_generated\\.go$": "ignore generated code", + "pkg/planner/core/plan_clone_generator.go": "ignore plan_clone_generator code", + "pkg/util/dbterror/ddl_terror.go": "ignore ddl_terror code" } }, "unreachable": { diff --git a/cmd/tidb-server/main.go b/cmd/tidb-server/main.go index e2fec3206ce12..61f0854e3d056 100644 --- a/cmd/tidb-server/main.go +++ b/cmd/tidb-server/main.go @@ -749,8 +749,15 @@ func setGlobalVars() { util.SetGOGC(cfg.Performance.GOGC) - ddlLeaseDuration := parseDuration(cfg.Lease) - session.SetSchemaLease(ddlLeaseDuration) + schemaLeaseDuration := parseDuration(cfg.Lease) + if schemaLeaseDuration <= 0 { + // previous version allow set schema lease to 0, and mainly used on + // uni-store and for test, to be compatible we set it to default value here. + log.Warn("schema lease is invalid, use default value", + zap.String("lease", schemaLeaseDuration.String())) + schemaLeaseDuration = config.DefSchemaLease + } + session.SetSchemaLease(schemaLeaseDuration) statsLeaseDuration := parseDuration(cfg.Performance.StatsLease) session.SetStatsLease(statsLeaseDuration) planReplayerGCLease := parseDuration(cfg.Performance.PlanReplayerGCLease) diff --git a/docs/design/2022-01-04-integer-shard-index.md b/docs/design/2022-01-04-integer-shard-index.md index 5ee835d8e8c93..f56280f42d6e5 100644 --- a/docs/design/2022-01-04-integer-shard-index.md +++ b/docs/design/2022-01-04-integer-shard-index.md @@ -115,7 +115,7 @@ The entry point to add the `tidb_shard` expression is the function as bellow. We func (ds *DataSource) PredicatePushDown(predicates []expression.Expression, opt *logicalOptimizeOp) ([]expression.Expression, LogicalPlan) { predicates = expression.PropagateConstant(ds.ctx, predicates) - predicates = DeleteTrueExprs(ds, predicates) + predicates = constraint.DeleteTrueExprs(ds, predicates) // Add tidb_shard() prefix to the condtion for shard index in some scenarios // TODO: remove it to the place building logical plan predicates = ds.AddPrefix4ShardIndexes(ds.ctx, predicates) diff --git a/docs/design/2023-08-24-background-tasks-control.md b/docs/design/2023-08-24-background-tasks-control.md index 2bee2437c8703..c163c68d46968 100644 --- a/docs/design/2023-08-24-background-tasks-control.md +++ b/docs/design/2023-08-24-background-tasks-control.md @@ -8,7 +8,7 @@ Resource control is used to solve some problems of resource usage under data consolidation. We can currently control some normal query tasks by means of RU limiter and scheduling. But it's not an adaptation for some background or bulk import/export tasks very well. -Due to the implementation restriction, resource control can't be applied for some tasks such as BR and TiDB Lightning. And for some long-running tasks such as DDL or background auto-analyze, it's also hard to control the resource usage becase it's not easy to select a proper RU settrings for these kind of jobs. +Due to the implementation restriction, resource control can't be applied for some tasks such as BR and TiDB Lightning. And for some long-running tasks such as DDL or background auto-analyze, it's also hard to control the resource usage because it's not easy to select a proper RU settings for these kind of jobs. ## Design Goals @@ -35,7 +35,7 @@ CREATE/ALTER RESOURCE GROUP rg1 [ BACKGROUND = ( TASK_TYPES = "br,analyze" ) ]; ``` -Currently, we only support set the task types that should be controlled in the background manner. We may extend this interface to include more setttings such as task priority in the future. +Currently, we only support set the task types that should be controlled in the background manner. We may extend this interface to include more settings such as task priority in the future. If a resource group's background setting is not set, we automatically apply the `default` resource group's settings to this group. @@ -55,7 +55,7 @@ In order to control the background tasks' resource usage, we plan to add an extr ![background-control.png](imgs/background-control.png) -- Control the resource usage of all background tasks by the Resource Limiter: The rate limit is dynamically adjusted to the value via the formula TiKVTotalRUCapcity - sum(RUCostRateOfForgroundTasks), with a fine-grained adjusting duration, we can ensure the foreground tasks' RU is always enough(or near the system's maximum if the foreground requirement reaches the maximum quota), so the background tasks' impact on foreground tasks should be very low; on the other hand, when the foreground resource consumption is low, the controller should increase the limit threshold, so background jobs can take advantage of the remaining resources. +- Control the resource usage of all background tasks by the Resource Limiter: The rate limit is dynamically adjusted to the value via the formula TiKVTotalRUCapacity - sum(RUCostRateOfForegroundTasks), with a fine-grained adjusting duration, we can ensure the foreground tasks' RU is always enough(or near the system's maximum if the foreground requirement reaches the maximum quota), so the background tasks' impact on foreground tasks should be very low; on the other hand, when the foreground resource consumption is low, the controller should increase the limit threshold, so background jobs can take advantage of the remaining resources. - The local resource manager will statics RU consumption of background jobs via the Resource Limiter: We will do statistics and report the resource consumption to the global resource manager. In the first stage, we only do statistics globally but control it locally. - Feedback mechanism: It's better to give feedback on how fast the limiter layer executes tasks on tikv to the upper layer like tidb, so that the upper layer task framework can adjust the number of tasks. @@ -134,7 +134,7 @@ impl Future for LimitedFuture { In our implementation, we integrate this rate limiter in the following components so it can cover most use cases: -- Coprocessor. All SQL read requests are handled via the coprocessor component, this can ensure all read reuqests are covered. +- Coprocessor. All SQL read requests are handled via the coprocessor component, this can ensure all read requests are covered. - Txn Scheduler. The write requests in tikv are handled via multiple threadpools via a pipeline manner, to make things simple, we only apply the rate limiter in the first phase, that is, the txn scheduler worker pool. Though this is not ideal, the result is acceptable in our benchmark. We may enhance this mechanism in the future. - Backup. We apply the rate limiter in backup kv scan and sst upload procedure. - SST Service. Most sst relate operations are handled via the sst service. This ensure BR, TiDB Lightning and DDL(fast mode) can be controlled. diff --git a/docs/tidb_http_api.md b/docs/tidb_http_api.md index 0ad3eb1c77169..4de2901c3925d 100644 --- a/docs/tidb_http_api.md +++ b/docs/tidb_http_api.md @@ -13,7 +13,10 @@ { "connections": 0, "git_hash": "f572e33854e1c0f942f031e9656d0004f99995c6", - "version": "5.7.25-TiDB-v2.1.0-rc.3-355-gf572e3385-dirty" + "version": "5.7.25-TiDB-v2.1.0-rc.3-355-gf572e3385-dirty", + "status":{ + "init_stats_percentage":100 + } } ``` diff --git a/dumpling/export/BUILD.bazel b/dumpling/export/BUILD.bazel index e817a54df5ddc..3bbbff08eeba5 100644 --- a/dumpling/export/BUILD.bazel +++ b/dumpling/export/BUILD.bazel @@ -35,6 +35,7 @@ go_library( "//dumpling/log", "//pkg/config", "//pkg/errno", + "//pkg/infoschema/context", "//pkg/parser", "//pkg/parser/ast", "//pkg/parser/format", diff --git a/dumpling/export/dump.go b/dumpling/export/dump.go index 36964ea5e1cc8..0d94c814eaa77 100644 --- a/dumpling/export/dump.go +++ b/dumpling/export/dump.go @@ -30,6 +30,7 @@ import ( "github.com/pingcap/tidb/dumpling/cli" tcontext "github.com/pingcap/tidb/dumpling/context" "github.com/pingcap/tidb/dumpling/log" + infoschema "github.com/pingcap/tidb/pkg/infoschema/context" "github.com/pingcap/tidb/pkg/parser" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/format" @@ -1635,7 +1636,7 @@ func (d *Dumper) renewSelectTableRegionFuncForLowerTiDB(tctx *tcontext.Context) return errors.Trace(err) } tikvHelper := &helper.Helper{} - tableInfos := tikvHelper.GetRegionsTableInfo(regionsInfo, dbInfos) + tableInfos := tikvHelper.GetRegionsTableInfo(regionsInfo, infoschema.DBInfoAsInfoSchema(dbInfos), nil) tableInfoMap := make(map[string]map[string][]int64, len(conf.Tables)) for _, region := range regionsInfo.Regions { diff --git a/dumpling/export/sql.go b/dumpling/export/sql.go index 0918be1640629..690ef65fe054f 100644 --- a/dumpling/export/sql.go +++ b/dumpling/export/sql.go @@ -1548,10 +1548,9 @@ func GetDBInfo(db *sql.Conn, tables map[string]map[string]struct{}) ([]*model.DB } last := len(schemas) - 1 if last < 0 || schemas[last].Name.O != tableSchema { - schemas = append(schemas, &model.DBInfo{ - Name: model.CIStr{O: tableSchema}, - Tables: make([]*model.TableInfo, 0, len(tables[tableSchema])), - }) + dbInfo := &model.DBInfo{Name: model.CIStr{O: tableSchema}} + dbInfo.Deprecated.Tables = make([]*model.TableInfo, 0, len(tables[tableSchema])) + schemas = append(schemas, dbInfo) last++ } var partition *model.PartitionInfo @@ -1566,7 +1565,7 @@ func GetDBInfo(db *sql.Conn, tables map[string]map[string]struct{}) ([]*model.DB } } } - schemas[last].Tables = append(schemas[last].Tables, &model.TableInfo{ + schemas[last].Deprecated.Tables = append(schemas[last].Deprecated.Tables, &model.TableInfo{ ID: tidbTableID, Name: model.CIStr{O: tableName}, Partition: partition, diff --git a/errors.toml b/errors.toml index b97bde0ae5c53..9c02f10d6ac04 100644 --- a/errors.toml +++ b/errors.toml @@ -291,6 +291,11 @@ error = ''' failed to write and ingest ''' +["BR:Restore:ErrTablesAlreadyExisted"] +error = ''' +tables already existed in restored cluster +''' + ["BR:Restore:ErrUnsupportedSysTable"] error = ''' the system table isn't supported for restoring yet @@ -1551,6 +1556,11 @@ error = ''' The operation is not allowed while the bdr role of this cluster is set to %s. ''' +["ddl:8264"] +error = ''' +Global Index is needed for index '%-.192s', since the unique index is not including all partitioning columns, and GLOBAL is not given as IndexOption +''' + ["domain:8027"] error = ''' Information schema is out of date: schema failed to update in 1 lease, please make sure TiDB can connect to TiKV diff --git a/go.mod b/go.mod index fd3d5e21a7347..bad2430076094 100644 --- a/go.mod +++ b/go.mod @@ -73,7 +73,7 @@ require ( github.com/ks3sdklib/aws-sdk-go v1.2.9 github.com/kyoh86/exportloopref v0.1.11 github.com/lestrrat-go/jwx/v2 v2.0.21 - github.com/mgechev/revive v1.3.7 + github.com/mgechev/revive v1.3.10-0.20240809190117-a638ed6e2499 github.com/ngaut/pools v0.0.0-20180318154953-b7bc8c42aac7 github.com/ngaut/sync2 v0.0.0-20141008032647-7a24ed77b2ef github.com/nishanths/predeclared v0.2.2 @@ -85,18 +85,18 @@ require ( github.com/pingcap/errors v0.11.5-0.20240318064555-6bd07397691f github.com/pingcap/failpoint v0.0.0-20240527053858-9b3b6e34194a github.com/pingcap/fn v1.0.0 - github.com/pingcap/kvproto v0.0.0-20240620063548-118a4cab53e4 + github.com/pingcap/kvproto v0.0.0-20240716095229-5f7ffec83ea7 github.com/pingcap/log v1.1.1-0.20240314023424-862ccc32f18d github.com/pingcap/sysutil v1.0.1-0.20240311050922-ae81ee01f3a5 github.com/pingcap/tidb/pkg/parser v0.0.0-20211011031125-9b13dc409c5e - github.com/pingcap/tipb v0.0.0-20240318032315-55a7867ddd50 + github.com/pingcap/tipb v0.0.0-20240703084358-e46e4632bd2b github.com/prometheus/client_golang v1.19.1 github.com/prometheus/client_model v0.6.1 github.com/prometheus/common v0.55.0 github.com/prometheus/prometheus v0.50.1 github.com/qri-io/jsonschema v0.2.1 github.com/robfig/cron/v3 v3.0.1 - github.com/sasha-s/go-deadlock v0.3.1 + github.com/sasha-s/go-deadlock v0.3.5 github.com/shirou/gopsutil/v3 v3.24.4 github.com/shurcooL/httpgzip v0.0.0-20190720172056-320755c1c1b0 github.com/soheilhy/cmux v0.1.5 @@ -108,8 +108,8 @@ require ( github.com/tdakkota/asciicheck v0.2.0 github.com/tiancaiamao/appdash v0.0.0-20181126055449-889f96f722a2 github.com/tidwall/btree v1.7.0 - github.com/tikv/client-go/v2 v2.0.8-0.20240703095801-d73cc1ed6503 - github.com/tikv/pd/client v0.0.0-20240717053728-5ec6af403019 + github.com/tikv/client-go/v2 v2.0.8-0.20240815020919-c810ed88fb02 + github.com/tikv/pd/client v0.0.0-20240805092608-838ee7983b78 github.com/timakin/bodyclose v0.0.0-20240125160201-f835fa56326a github.com/twmb/murmur3 v1.1.6 github.com/uber/jaeger-client-go v2.22.1+incompatible @@ -130,14 +130,14 @@ require ( go.uber.org/multierr v1.11.0 go.uber.org/zap v1.27.0 golang.org/x/exp v0.0.0-20240404231335-c0f41cb1a7a0 - golang.org/x/net v0.27.0 + golang.org/x/net v0.28.0 golang.org/x/oauth2 v0.21.0 - golang.org/x/sync v0.7.0 - golang.org/x/sys v0.22.0 - golang.org/x/term v0.22.0 - golang.org/x/text v0.16.0 + golang.org/x/sync v0.8.0 + golang.org/x/sys v0.24.0 + golang.org/x/term v0.23.0 + golang.org/x/text v0.17.0 golang.org/x/time v0.5.0 - golang.org/x/tools v0.22.0 + golang.org/x/tools v0.24.0 google.golang.org/api v0.169.0 google.golang.org/grpc v1.63.2 gopkg.in/yaml.v2 v2.4.0 @@ -256,7 +256,7 @@ require ( github.com/lufia/plan9stats v0.0.0-20230326075908-cb1d2100619a // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-runewidth v0.0.15 // indirect + github.com/mattn/go-runewidth v0.0.16 // indirect github.com/mitchellh/copystructure v1.0.0 // indirect github.com/mitchellh/reflectwalk v1.0.1 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -264,7 +264,7 @@ require ( github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 // indirect github.com/ncw/directio v1.0.5 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect - github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67 // indirect + github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 // indirect github.com/pierrec/lz4 v2.6.1+incompatible // indirect github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 // indirect github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect @@ -275,7 +275,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect - github.com/rivo/uniseg v0.4.6 // indirect + github.com/rivo/uniseg v0.4.7 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 // indirect github.com/segmentio/asm v1.2.0 // indirect @@ -307,9 +307,9 @@ require ( go.opentelemetry.io/otel/sdk v1.24.0 // indirect go.opentelemetry.io/otel/trace v1.24.0 // indirect go.opentelemetry.io/proto/otlp v1.1.0 // indirect - golang.org/x/crypto v0.25.0 // indirect + golang.org/x/crypto v0.26.0 // indirect golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f // indirect - golang.org/x/mod v0.18.0 // indirect + golang.org/x/mod v0.20.0 // indirect golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 // indirect diff --git a/go.sum b/go.sum index 80be4c4c85157..66783129fda56 100644 --- a/go.sum +++ b/go.sum @@ -612,12 +612,12 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= -github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mgechev/revive v1.3.7 h1:502QY0vQGe9KtYJ9FpxMz9rL+Fc/P13CI5POL4uHCcE= -github.com/mgechev/revive v1.3.7/go.mod h1:RJ16jUbF0OWC3co/+XTxmFNgEpUPwnnA0BRllX2aDNA= +github.com/mgechev/revive v1.3.10-0.20240809190117-a638ed6e2499 h1:Z5grv/SOpby7XE79XWha4cxWPD+JDRNlHPmCDv8Tnyc= +github.com/mgechev/revive v1.3.10-0.20240809190117-a638ed6e2499/go.mod h1:h3Q6QRohivg9tHOnLeyGcIO2jca7suy65iOdlFLvisw= github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 h1:AMFGa4R4MiIpspGNG7Z948v4n35fFGB3RR3G/ry4FWs= github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 h1:+n/aFZefKZp7spd8DFdX7uMikMLXX4oubIzJF4kv/wI= @@ -674,9 +674,8 @@ github.com/otiai10/mint v1.3.1 h1:BCmzIS3n71sGfHB5NMNDB3lHYPz8fWSkCAErHed//qc= github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/pborman/getopt v0.0.0-20180729010549-6fdd0a2c7117/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67 h1:jik8PHtAIsPlCRJjJzl4udgEf7hawInF9texMeO2jrU= -github.com/petermattis/goid v0.0.0-20231207134359-e60b3f734c67/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 h1:Dx7Ovyv/SFnMFw3fD4oEoeorXc6saIiQ23LrGLth0Gw= +github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 h1:JhzVVoYvbOACxoUmOs6V/G4D5nPVUW73rKvXxP4XUJc= github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= @@ -701,16 +700,16 @@ github.com/pingcap/fn v1.0.0/go.mod h1:u9WZ1ZiOD1RpNhcI42RucFh/lBuzTu6rw88a+oF2Z github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 h1:surzm05a8C9dN8dIUmo4Be2+pMRb6f55i+UIYrluu2E= github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989/go.mod h1:O17XtbryoCJhkKGbT62+L2OlrniwqiGLSqrmdHCMzZw= github.com/pingcap/kvproto v0.0.0-20191211054548-3c6b38ea5107/go.mod h1:WWLmULLO7l8IOcQG+t+ItJ3fEcrL5FxF0Wu+HrMy26w= -github.com/pingcap/kvproto v0.0.0-20240620063548-118a4cab53e4 h1:6aIKNB2YGAec4IUDLw6G2eDECiGiufZcgEbZSCELBx0= -github.com/pingcap/kvproto v0.0.0-20240620063548-118a4cab53e4/go.mod h1:rXxWk2UnwfUhLXha1jxRWPADw9eMZGWEWCg92Tgmb/8= +github.com/pingcap/kvproto v0.0.0-20240716095229-5f7ffec83ea7 h1:V9XS3FQ/P6u+kFaoSyY5DBswIA774BMpIOLDBMrpxKc= +github.com/pingcap/kvproto v0.0.0-20240716095229-5f7ffec83ea7/go.mod h1:rXxWk2UnwfUhLXha1jxRWPADw9eMZGWEWCg92Tgmb/8= github.com/pingcap/log v0.0.0-20210625125904-98ed8e2eb1c7/go.mod h1:8AanEdAHATuRurdGxZXBz0At+9avep+ub7U1AGYLIMM= github.com/pingcap/log v1.1.0/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4= github.com/pingcap/log v1.1.1-0.20240314023424-862ccc32f18d h1:y3EueKVfVykdpTyfUnQGqft0ud+xVFuCdp1XkVL0X1E= github.com/pingcap/log v1.1.1-0.20240314023424-862ccc32f18d/go.mod h1:ORfBOFp1eteu2odzsyaxI+b8TzJwgjwyQcGhI+9SfEA= github.com/pingcap/sysutil v1.0.1-0.20240311050922-ae81ee01f3a5 h1:T4pXRhBflzDeAhmOQHNPRRogMYxP13V7BkYw3ZsoSfE= github.com/pingcap/sysutil v1.0.1-0.20240311050922-ae81ee01f3a5/go.mod h1:rlimy0GcTvjiJqvD5mXTRr8O2eNZPBrcUgiWVYp9530= -github.com/pingcap/tipb v0.0.0-20240318032315-55a7867ddd50 h1:fVNBE06Rjec+EIHaYAKAHa/bIt5lnu3Zh9O6kV7ZAdg= -github.com/pingcap/tipb v0.0.0-20240318032315-55a7867ddd50/go.mod h1:A7mrd7WHBl1o63LE2bIBGEJMTNWXqhgmYiOvMLxozfs= +github.com/pingcap/tipb v0.0.0-20240703084358-e46e4632bd2b h1:tySAGYw21A3Xa8CcA9jBTfrgAB3+KQWyqyW7fUyokzk= +github.com/pingcap/tipb v0.0.0-20240703084358-e46e4632bd2b/go.mod h1:A7mrd7WHBl1o63LE2bIBGEJMTNWXqhgmYiOvMLxozfs= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= @@ -756,8 +755,8 @@ github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94 github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.6 h1:Sovz9sDSwbOz9tgUy8JpT+KgCkPYJEN/oYzlJiYTNLg= -github.com/rivo/uniseg v0.4.6/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= @@ -772,8 +771,8 @@ github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfF github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 h1:GHRpF1pTW19a8tTFrMLUcfWwyC0pnifVo2ClaLq+hP8= github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5PCi+MFsC7HjREoAz1BU+Mq60+05gifQSsHSDG/8= -github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= -github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= +github.com/sasha-s/go-deadlock v0.3.5 h1:tNCOEEDG6tBqrNDOX35j/7hL5FcFViG6awUGROb2NsU= +github.com/sasha-s/go-deadlock v0.3.5/go.mod h1:bugP6EGbdGYObIlx7pUZtWqlvo8k9H6vCBBsiChJQ5U= github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys= github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= @@ -857,10 +856,10 @@ github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a h1:J/YdBZ46WKpXsxsW github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a/go.mod h1:h4xBhSNtOeEosLJ4P7JyKXX7Cabg7AVkWCK5gV2vOrM= github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= -github.com/tikv/client-go/v2 v2.0.8-0.20240703095801-d73cc1ed6503 h1:0mUlg3+dA5LvwKs1U6i/ID/8RsYgLVLGyM8fSBMb630= -github.com/tikv/client-go/v2 v2.0.8-0.20240703095801-d73cc1ed6503/go.mod h1:4HDOAx8OXAJPtqhCZ03IhChXgaFs4B3+vSrPWmiPxjg= -github.com/tikv/pd/client v0.0.0-20240717053728-5ec6af403019 h1:7VoatJKzIrsjepOaXQjpAcgxQrx2QBAI4HuZ0wFdinA= -github.com/tikv/pd/client v0.0.0-20240717053728-5ec6af403019/go.mod h1:QeMzXKDOW+GbbE+ckcVPBVS6vX3//QB99dXU+niYRq0= +github.com/tikv/client-go/v2 v2.0.8-0.20240815020919-c810ed88fb02 h1:XKZTb6ZyosZSkvOlmROlhGVHlGHEa3FmIip86cRI1TY= +github.com/tikv/client-go/v2 v2.0.8-0.20240815020919-c810ed88fb02/go.mod h1:4HDOAx8OXAJPtqhCZ03IhChXgaFs4B3+vSrPWmiPxjg= +github.com/tikv/pd/client v0.0.0-20240805092608-838ee7983b78 h1:PtW+yTvs9eGTMblulaCHmJ5OtifuE4SJXCACCtkd6ko= +github.com/tikv/pd/client v0.0.0-20240805092608-838ee7983b78/go.mod h1:TxrJRY949Vl14Lmarx6hTNP/HEDYzn4dP0KmjdzQ59w= github.com/timakin/bodyclose v0.0.0-20240125160201-f835fa56326a h1:A6uKudFIfAEpoPdaal3aSqGxBzLyU8TqyXImLwo6dIo= github.com/timakin/bodyclose v0.0.0-20240125160201-f835fa56326a/go.mod h1:mkjARE7Yr8qU23YcGMSALbIxTQ9r9QBVahQOBRfU460= github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs= @@ -1001,8 +1000,8 @@ golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= -golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= +golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= +golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1062,8 +1061,8 @@ golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= -golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0= +golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1112,8 +1111,8 @@ golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= -golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= +golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= +golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1136,8 +1135,8 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180816055513-1c9583448a9c/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1203,8 +1202,8 @@ golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= -golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= +golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1214,8 +1213,8 @@ golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= -golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk= -golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= +golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU= +golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1229,8 +1228,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= +golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1302,8 +1301,8 @@ golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg= -golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= -golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= +golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= +golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/lightning/pkg/importer/BUILD.bazel b/lightning/pkg/importer/BUILD.bazel index 83797e95530cb..af898abb2ca62 100644 --- a/lightning/pkg/importer/BUILD.bazel +++ b/lightning/pkg/importer/BUILD.bazel @@ -95,7 +95,6 @@ go_library( "@org_golang_google_grpc//:grpc", "@org_golang_google_grpc//codes", "@org_golang_google_grpc//status", - "@org_golang_x_exp//maps", "@org_golang_x_sync//errgroup", "@org_uber_go_atomic//:atomic", "@org_uber_go_multierr//:multierr", diff --git a/lightning/pkg/importer/get_pre_info.go b/lightning/pkg/importer/get_pre_info.go index 5e34c6bf36186..9d5dbf6979d73 100644 --- a/lightning/pkg/importer/get_pre_info.go +++ b/lightning/pkg/importer/get_pre_info.go @@ -20,6 +20,7 @@ import ( "database/sql" "fmt" "io" + "maps" "strings" mysql_sql_driver "github.com/go-sql-driver/mysql" @@ -52,7 +53,6 @@ import ( "github.com/pingcap/tidb/pkg/util/mock" pdhttp "github.com/tikv/pd/client/http" "go.uber.org/zap" - "golang.org/x/exp/maps" ) // compressionRatio is the tikv/tiflash's compression ratio diff --git a/lightning/pkg/importer/import.go b/lightning/pkg/importer/import.go index 04218f2f1102e..dfb441afdc8dc 100644 --- a/lightning/pkg/importer/import.go +++ b/lightning/pkg/importer/import.go @@ -640,8 +640,10 @@ func (rc *Controller) initCheckpoint(ctx context.Context) error { log.FromContext(ctx).Warn("exit triggered", zap.String("failpoint", "InitializeCheckpointExit")) os.Exit(0) }) - if err := rc.loadDesiredTableInfos(ctx); err != nil { - return err + if rc.cfg.TikvImporter.AddIndexBySQL { + if err := rc.loadDesiredTableInfos(ctx); err != nil { + return err + } } rc.checkpointsWg.Add(1) // checkpointsWg will be done in `rc.listenCheckpointUpdates` diff --git a/lightning/pkg/importer/meta_manager.go b/lightning/pkg/importer/meta_manager.go index 188ecb9987507..d4fe9523b08e4 100644 --- a/lightning/pkg/importer/meta_manager.go +++ b/lightning/pkg/importer/meta_manager.go @@ -185,7 +185,7 @@ func (m *dbTableMetaMgr) AllocTableRowIDs(ctx context.Context, rawRowIDMax int64 //nolint: errcheck defer conn.Close() exec := &common.SQLWithRetry{ - DB: m.session, + DB: conn, Logger: m.tr.logger, } var newRowIDBase, newRowIDMax int64 @@ -391,7 +391,7 @@ func (m *dbTableMetaMgr) CheckAndUpdateLocalChecksum(ctx context.Context, checks //nolint: errcheck defer conn.Close() exec := &common.SQLWithRetry{ - DB: m.session, + DB: conn, Logger: m.tr.logger, } err = exec.Exec(ctx, "enable pessimistic transaction", "SET SESSION tidb_txn_mode = 'pessimistic';") @@ -664,7 +664,7 @@ func (m *dbTaskMetaMgr) CheckTasksExclusively(ctx context.Context, action func(t //nolint: errcheck defer conn.Close() exec := &common.SQLWithRetry{ - DB: m.session, + DB: conn, Logger: log.FromContext(ctx), } err = exec.Exec(ctx, "enable pessimistic transaction", "SET SESSION tidb_txn_mode = 'pessimistic';") @@ -735,7 +735,7 @@ func (m *dbTaskMetaMgr) CheckAndPausePdSchedulers(ctx context.Context) (pdutil.U //nolint: errcheck defer conn.Close() exec := &common.SQLWithRetry{ - DB: m.session, + DB: conn, Logger: log.FromContext(ctx), } err = exec.Exec(ctx, "enable pessimistic transaction", "SET SESSION tidb_txn_mode = 'pessimistic';") @@ -875,7 +875,7 @@ func (m *dbTaskMetaMgr) CheckAndFinishRestore(ctx context.Context, finished bool //nolint: errcheck defer conn.Close() exec := &common.SQLWithRetry{ - DB: m.session, + DB: conn, Logger: log.FromContext(ctx), } err = exec.Exec(ctx, "enable pessimistic transaction", "SET SESSION tidb_txn_mode = 'pessimistic';") diff --git a/lightning/pkg/importer/meta_manager_test.go b/lightning/pkg/importer/meta_manager_test.go index e0a571eb537e4..8146d64c8c83a 100644 --- a/lightning/pkg/importer/meta_manager_test.go +++ b/lightning/pkg/importer/meta_manager_test.go @@ -81,7 +81,7 @@ func newTableRestore(t *testing.T, if err := m.CreateDatabase(&model.DBInfo{ID: dbInfo.ID}); err != nil && !errors.ErrorEqual(err, meta.ErrDBExists) { return err } - return m.CreateTableOrView(dbInfo.ID, db, ti.Core) + return m.CreateTableOrView(dbInfo.ID, ti.Core) }) require.NoError(t, err) diff --git a/lightning/pkg/importer/precheck_impl.go b/lightning/pkg/importer/precheck_impl.go index 3327813e701fa..d36afc0254978 100644 --- a/lightning/pkg/importer/precheck_impl.go +++ b/lightning/pkg/importer/precheck_impl.go @@ -1296,7 +1296,7 @@ func checkFieldCompatibility( values []types.Datum, logger log.Logger, ) bool { - se := kv.NewSessionCtx(&encode.SessionOptions{ + se := kv.NewSession(&encode.SessionOptions{ SQLMode: mysql.ModeStrictTransTables, }, logger) for i, col := range tbl.Columns { @@ -1307,7 +1307,7 @@ func checkFieldCompatibility( if i >= len(values) { break } - _, err := table.CastValue(se, values[i], col, true, false) + _, err := table.CastColumnValue(se.GetExprCtx(), values[i], col, true, false) if err != nil { logger.Error("field value is not consistent with column type", zap.String("value", values[i].GetString()), zap.Any("column_info", col), zap.Error(err)) diff --git a/lightning/tests/config/pd.toml b/lightning/tests/config/pd.toml index bc9f064451512..2557813034e9b 100644 --- a/lightning/tests/config/pd.toml +++ b/lightning/tests/config/pd.toml @@ -1,6 +1,3 @@ -lease = 360 -tso-save-interval = "360s" - [replication] enable-placement-rules = true diff --git a/lightning/tests/lightning_add_index/config2-file.toml b/lightning/tests/lightning_add_index/config2-file.toml new file mode 100644 index 0000000000000..6c470b3cc531b --- /dev/null +++ b/lightning/tests/lightning_add_index/config2-file.toml @@ -0,0 +1,8 @@ +[checkpoint] +enable = true +driver = "file" +dsn = "/tmp/add-index-by-sql-checkpoint.pb" + +[tikv-importer] +backend = 'local' +add-index-by-sql = true diff --git a/lightning/tests/lightning_add_index/config2.toml b/lightning/tests/lightning_add_index/config2-mysql.toml similarity index 100% rename from lightning/tests/lightning_add_index/config2.toml rename to lightning/tests/lightning_add_index/config2-mysql.toml diff --git a/lightning/tests/lightning_add_index/run.sh b/lightning/tests/lightning_add_index/run.sh index d82b74b2a52b1..6f3fba046abeb 100644 --- a/lightning/tests/lightning_add_index/run.sh +++ b/lightning/tests/lightning_add_index/run.sh @@ -29,7 +29,7 @@ non_pk_auto_inc_kvs=$(run_sql "ADMIN CHECKSUM TABLE add_index.non_pk_auto_inc;" non_pk_auto_inc_cksum=$(run_sql "ADMIN CHECKSUM TABLE add_index.non_pk_auto_inc;" | grep "Checksum_crc64_xor" | awk '{print $2}') run_sql "DROP DATABASE add_index;" -run_lightning --config "$CUR/config2.toml" --log-file "$LOG_FILE2" +run_lightning --config "$CUR/config2-mysql.toml" --log-file "$LOG_FILE2" actual_multi_indexes_kvs=$(run_sql "ADMIN CHECKSUM TABLE add_index.multi_indexes;" | grep "Total_kvs" | awk '{print $2}') actual_multi_indexes_cksum=$(run_sql "ADMIN CHECKSUM TABLE add_index.multi_indexes;" | grep "Checksum_crc64_xor" | awk '{print $2}') actual_non_pk_auto_inc_kvs=$(run_sql "ADMIN CHECKSUM TABLE add_index.non_pk_auto_inc;" | grep "Total_kvs" | awk '{print $2}') @@ -82,18 +82,24 @@ grep -Fq "ALTER TABLE \`add_index\`.\`non_pk_auto_inc\` DROP PRIMARY KEY" "$LOG_ grep -Fq "ALTER TABLE \`add_index\`.\`non_pk_auto_inc\` ADD PRIMARY KEY (\`pk\`)" "$LOG_FILE2" # 3. Check for recovering from checkpoint -export GO_FAILPOINTS="github.com/pingcap/tidb/lightning/pkg/importer/AddIndexCrash=return()" -run_sql "DROP DATABASE add_index;" -run_lightning --enable-checkpoint=1 --config "$CUR/config2.toml" --log-file "$LOG_FILE2" -grep -Fq "task canceled" "$LOG_FILE2" - -unset GO_FAILPOINTS -run_lightning --enable-checkpoint=1 --config "$CUR/config2.toml" --log-file "$LOG_FILE2" -actual_multi_indexes_kvs=$(run_sql "ADMIN CHECKSUM TABLE add_index.multi_indexes;" | grep "Total_kvs" | awk '{print $2}') -actual_multi_indexes_cksum=$(run_sql "ADMIN CHECKSUM TABLE add_index.multi_indexes;" | grep "Checksum_crc64_xor" | awk '{print $2}') -actual_non_pk_auto_inc_kvs=$(run_sql "ADMIN CHECKSUM TABLE add_index.non_pk_auto_inc;" | grep "Total_kvs" | awk '{print $2}') -actual_non_pk_auto_inc_cksum=$(run_sql "ADMIN CHECKSUM TABLE add_index.non_pk_auto_inc;" | grep "Checksum_crc64_xor" | awk '{print $2}') - -set -x -[ "$multi_indexes_kvs" == "$actual_multi_indexes_kvs" ] && [ "$multi_indexes_cksum" == "$actual_multi_indexes_cksum" ] -[ "$non_pk_auto_inc_kvs" == "$actual_non_pk_auto_inc_kvs" ] && [ "$non_pk_auto_inc_cksum" == "$actual_non_pk_auto_inc_cksum" ] +function recover_from_checkpoint() { + tp=$1 + export GO_FAILPOINTS="github.com/pingcap/tidb/lightning/pkg/importer/AddIndexCrash=return()" + run_sql "DROP DATABASE add_index;" + rm -rf /tmp/add-index-by-sql-checkpoint.pb + run_lightning --enable-checkpoint=1 --config "$CUR/config2-$tp.toml" --log-file "$LOG_FILE2" + grep -Fq "task canceled" "$LOG_FILE2" + + unset GO_FAILPOINTS + run_lightning --enable-checkpoint=1 --config "$CUR/config2-$tp.toml" --log-file "$LOG_FILE2" + actual_multi_indexes_kvs=$(run_sql "ADMIN CHECKSUM TABLE add_index.multi_indexes;" | grep "Total_kvs" | awk '{print $2}') + actual_multi_indexes_cksum=$(run_sql "ADMIN CHECKSUM TABLE add_index.multi_indexes;" | grep "Checksum_crc64_xor" | awk '{print $2}') + actual_non_pk_auto_inc_kvs=$(run_sql "ADMIN CHECKSUM TABLE add_index.non_pk_auto_inc;" | grep "Total_kvs" | awk '{print $2}') + actual_non_pk_auto_inc_cksum=$(run_sql "ADMIN CHECKSUM TABLE add_index.non_pk_auto_inc;" | grep "Checksum_crc64_xor" | awk '{print $2}') + + set -x + [ "$multi_indexes_kvs" == "$actual_multi_indexes_kvs" ] && [ "$multi_indexes_cksum" == "$actual_multi_indexes_cksum" ] + [ "$non_pk_auto_inc_kvs" == "$actual_non_pk_auto_inc_kvs" ] && [ "$non_pk_auto_inc_cksum" == "$actual_non_pk_auto_inc_cksum" ] +} +recover_from_checkpoint file +recover_from_checkpoint mysql diff --git a/lightning/tests/lightning_distributed_import/run.sh b/lightning/tests/lightning_distributed_import/run.sh index d376d009c9f30..d331f756f1353 100644 --- a/lightning/tests/lightning_distributed_import/run.sh +++ b/lightning/tests/lightning_distributed_import/run.sh @@ -22,12 +22,15 @@ LOG_FILE1="$TEST_DIR/lightning-distributed-import1.log" LOG_FILE2="$TEST_DIR/lightning-distributed-import2.log" # let lightning run a bit slow to avoid some table in the first lightning finish too fast. -export GO_FAILPOINTS="github.com/pingcap/tidb/lightning/pkg/importer/SlowDownImport=sleep(250)" +export GO_FAILPOINTS="github.com/pingcap/tidb/lightning/pkg/importer/SlowDownImport=sleep(2500)" run_lightning --backend local --sorted-kv-dir "$TEST_DIR/lightning_distributed_import.sorted1" \ -d "$CUR/data1" --log-file "$LOG_FILE1" --config "$CUR/config.toml" & pid1="$!" +# sleep 1 second to avoid both lightning starting at the same time and have same ID. +sleep 1 + run_lightning --backend local --sorted-kv-dir "$TEST_DIR/lightning_distributed_import.sorted2" \ -d "$CUR/data2" --log-file "$LOG_FILE2" --config "$CUR/config.toml" & pid2="$!" diff --git a/lightning/tests/lightning_pd_leader_switch/run.sh b/lightning/tests/lightning_pd_leader_switch/run.sh index 67035c6056d70..d2c8f38165bc8 100644 --- a/lightning/tests/lightning_pd_leader_switch/run.sh +++ b/lightning/tests/lightning_pd_leader_switch/run.sh @@ -20,6 +20,7 @@ set -eu cur=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) . $UTILS_DIR/run_services +echo "will start pd2" pd-server --join "https://$PD_ADDR" \ --client-urls "https://${PD_ADDR}2" \ --peer-urls "https://${PD_PEER_ADDR}2" \ @@ -29,8 +30,9 @@ pd-server --join "https://$PD_ADDR" \ --config $PD_CONFIG & # strange that new PD can't join too quickly -sleep 10 +sleep 20 +echo "will start pd3" pd-server --join "https://$PD_ADDR" \ --client-urls "https://${PD_ADDR}3" \ --peer-urls "https://${PD_PEER_ADDR}3" \ diff --git a/lightning/tests/run_group_lightning_tests.sh b/lightning/tests/run_group_lightning_tests.sh index 639828d55931e..2c7d8b563be8c 100755 --- a/lightning/tests/run_group_lightning_tests.sh +++ b/lightning/tests/run_group_lightning_tests.sh @@ -42,7 +42,7 @@ groups=( ["G05"]='lightning_fail_fast lightning_fail_fast_on_nonretry_err lightning_file_routing lightning_foreign_key lightning_gcs lightning_generated_columns lightning_ignore_columns lightning_import_compress lightning_incremental lightning_issue_282 lightning_issue_40657 lightning_issue_410 lightning_issue_519 lightning_local_backend lightning_max_incr' ["G06"]='lightning_max_random lightning_multi_valued_index lightning_new_collation lightning_no_schema lightning_parquet lightning_partition_incremental lightning_partitioned-table lightning_record_network lightning_reload_cert lightning_restore lightning_routes lightning_routes_panic lightning_row-format-v2 lightning_s3' ["G07"]='lightning_shard_rowid lightning_source_linkfile lightning_sqlmode lightning_tidb_duplicate_data lightning_tidb_rowid lightning_tiflash lightning_tikv_multi_rocksdb lightning_too_many_columns lightning_tool_135' - ["G08"]='lightning_tool_1420 lightning_tool_1472 lightning_tool_241 lightning_ttl lightning_unused_config_keys lightning_various_types lightning_view lightning_write_batch lightning_write_limit lightning_pd_leader_switch lightning_add_index lightning_alter_random lightning_auto_columns' + ["G08"]='lightning_pd_leader_switch lightning_tool_1420 lightning_tool_1472 lightning_tool_241 lightning_ttl lightning_unused_config_keys lightning_various_types lightning_view lightning_write_batch lightning_write_limit lightning_add_index lightning_alter_random lightning_auto_columns' ) # Get other lightning cases not in groups, to avoid missing any case diff --git a/pkg/bindinfo/BUILD.bazel b/pkg/bindinfo/BUILD.bazel index 0f56829622c43..5732b1a6f82d4 100644 --- a/pkg/bindinfo/BUILD.bazel +++ b/pkg/bindinfo/BUILD.bazel @@ -29,6 +29,7 @@ go_library( "//pkg/sessionctx/variable", "//pkg/types", "//pkg/types/parser_driver", + "//pkg/util", "//pkg/util/chunk", "//pkg/util/hack", "//pkg/util/hint", @@ -41,7 +42,6 @@ go_library( "//pkg/util/stmtsummary/v2:stmtsummary", "//pkg/util/stringutil", "//pkg/util/table-filter", - "@com_github_ngaut_pools//:pools", "@com_github_pingcap_errors//:errors", "@com_github_pingcap_failpoint//:failpoint", "@org_golang_x_sync//singleflight", diff --git a/pkg/bindinfo/capture.go b/pkg/bindinfo/capture.go index e1f7fc8dc3681..d98e5c563b470 100644 --- a/pkg/bindinfo/capture.go +++ b/pkg/bindinfo/capture.go @@ -194,7 +194,7 @@ func (h *globalBindingHandle) CaptureBaselines() { SQLDigest: digest.String(), } // We don't need to pass the `sctx` because the BindSQL has been validated already. - err = h.CreateGlobalBinding(nil, binding) + err = h.CreateGlobalBinding(nil, []*Binding{&binding}) if err != nil { logutil.BindLogger().Debug("create bind record failed in baseline capture", zap.String("SQL", bindableStmt.Query), zap.Error(err)) } diff --git a/pkg/bindinfo/capture_test.go b/pkg/bindinfo/capture_test.go index d9ea79524a01d..dfda50c3d12ed 100644 --- a/pkg/bindinfo/capture_test.go +++ b/pkg/bindinfo/capture_test.go @@ -418,7 +418,7 @@ func TestUpdateSubqueryCapture(t *testing.T) { tk.MustExec("admin capture bindings") rows := tk.MustQuery("show global bindings").Rows() require.Len(t, rows, 1) - bindSQL := "UPDATE /*+ hash_join(@`upd_1` `test`.`t1`), use_index(@`upd_1` `test`.`t1` `idx_b`), no_order_index(@`upd_1` `test`.`t1` `idx_b`), use_index(@`sel_1` `test`.`t2` ), use_index(@`sel_2` `test`.`t2` )*/ `test`.`t1` SET `b`=1 WHERE `b` = 2 AND (`a` IN (SELECT `a` FROM `test`.`t2` WHERE `b` = 1) OR `c` IN (SELECT `a` FROM `test`.`t2` WHERE `b` = 1))" + bindSQL := "UPDATE /*+ hash_join(`test`.`t2`@`sel_2`), hash_join(`test`.`t1`), use_index(@`upd_1` `test`.`t1` `idx_b`), no_order_index(@`upd_1` `test`.`t1` `idx_b`), use_index(@`sel_1` `test`.`t2` ), use_index(@`sel_2` `test`.`t2` )*/ `test`.`t1` SET `b`=1 WHERE `b` = 2 AND (`a` IN (SELECT `a` FROM `test`.`t2` WHERE `b` = 1) OR `c` IN (SELECT `a` FROM `test`.`t2` WHERE `b` = 1))" originSQL := "UPDATE `test`.`t1` SET `b`=1 WHERE `b` = 2 AND (`a` IN (SELECT `a` FROM `test`.`t2` WHERE `b` = 1) OR `c` IN (SELECT `a` FROM `test`.`t2` WHERE `b` = 1))" require.Equal(t, bindSQL, rows[0][1]) tk.MustExec(originSQL) diff --git a/pkg/bindinfo/global_handle.go b/pkg/bindinfo/global_handle.go index ec3b39c2def3e..a9dff9b5701ca 100644 --- a/pkg/bindinfo/global_handle.go +++ b/pkg/bindinfo/global_handle.go @@ -35,6 +35,7 @@ import ( "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/types" driver "github.com/pingcap/tidb/pkg/types/parser_driver" + "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/chunk" "github.com/pingcap/tidb/pkg/util/hint" utilparser "github.com/pingcap/tidb/pkg/util/parser" @@ -54,10 +55,10 @@ type GlobalBindingHandle interface { // CreateGlobalBinding creates a Bindings to the storage and the cache. // It replaces all the exists bindings for the same normalized SQL. - CreateGlobalBinding(sctx sessionctx.Context, binding Binding) (err error) + CreateGlobalBinding(sctx sessionctx.Context, bindings []*Binding) (err error) // DropGlobalBinding drop Bindings to the storage and Bindings int the cache. - DropGlobalBinding(sqlDigest string) (deletedRows uint64, err error) + DropGlobalBinding(sqlDigests []string) (deletedRows uint64, err error) // SetGlobalBindingStatus set a Bindings's status to the storage and bind cache. SetGlobalBindingStatus(newStatus, sqlDigest string) (ok bool, err error) @@ -109,7 +110,7 @@ type GlobalBindingHandle interface { // globalBindingHandle is used to handle all global sql bind operations. type globalBindingHandle struct { - sPool SessionPool + sPool util.SessionPool fuzzyBindingCache atomic.Value @@ -149,7 +150,7 @@ const ( ) // NewGlobalBindingHandle creates a new GlobalBindingHandle. -func NewGlobalBindingHandle(sPool SessionPool) GlobalBindingHandle { +func NewGlobalBindingHandle(sPool util.SessionPool) GlobalBindingHandle { handle := &globalBindingHandle{sPool: sPool} handle.Reset() return handle @@ -255,9 +256,11 @@ func (h *globalBindingHandle) LoadFromStorageToCache(fullLoad bool) (err error) // CreateGlobalBinding creates a Bindings to the storage and the cache. // It replaces all the exists bindings for the same normalized SQL. -func (h *globalBindingHandle) CreateGlobalBinding(sctx sessionctx.Context, binding Binding) (err error) { - if err := prepareHints(sctx, &binding); err != nil { - return err +func (h *globalBindingHandle) CreateGlobalBinding(sctx sessionctx.Context, bindings []*Binding) (err error) { + for _, binding := range bindings { + if err := prepareHints(sctx, binding); err != nil { + return err + } } defer func() { if err == nil { @@ -271,63 +274,90 @@ func (h *globalBindingHandle) CreateGlobalBinding(sctx sessionctx.Context, bindi return err } - now := types.NewTime(types.FromGoTime(time.Now()), mysql.TypeTimestamp, 3) - - updateTs := now.String() - _, err = exec(sctx, `UPDATE mysql.bind_info SET status = %?, update_time = %? WHERE original_sql = %? AND update_time < %?`, - deleted, updateTs, binding.OriginalSQL, updateTs) - if err != nil { - return err - } + for i, binding := range bindings { + now := types.NewTime(types.FromGoTime(time.Now()), mysql.TypeTimestamp, 3) + + updateTs := now.String() + _, err = exec( + sctx, + `UPDATE mysql.bind_info SET status = %?, update_time = %? WHERE original_sql = %? AND update_time < %?`, + deleted, + updateTs, + binding.OriginalSQL, + updateTs, + ) + if err != nil { + return err + } - binding.CreateTime = now - binding.UpdateTime = now - - // Insert the Bindings to the storage. - _, err = exec(sctx, `INSERT INTO mysql.bind_info VALUES (%?,%?, %?, %?, %?, %?, %?, %?, %?, %?, %?)`, - binding.OriginalSQL, - binding.BindSQL, - strings.ToLower(binding.Db), - binding.Status, - binding.CreateTime.String(), - binding.UpdateTime.String(), - binding.Charset, - binding.Collation, - binding.Source, - binding.SQLDigest, - binding.PlanDigest, - ) - if err != nil { - return err + binding.CreateTime = now + binding.UpdateTime = now + + // Insert the Bindings to the storage. + _, err = exec( + sctx, + `INSERT INTO mysql.bind_info VALUES (%?,%?, %?, %?, %?, %?, %?, %?, %?, %?, %?)`, + binding.OriginalSQL, + binding.BindSQL, + strings.ToLower(binding.Db), + binding.Status, + binding.CreateTime.String(), + binding.UpdateTime.String(), + binding.Charset, + binding.Collation, + binding.Source, + binding.SQLDigest, + binding.PlanDigest, + ) + failpoint.Inject("CreateGlobalBindingNthFail", func(val failpoint.Value) { + n := val.(int) + if n == i { + err = errors.NewNoStackError("An injected error") + } + }) + if err != nil { + return err + } } return nil }) } // dropGlobalBinding drops a Bindings to the storage and Bindings int the cache. -func (h *globalBindingHandle) dropGlobalBinding(sqlDigest string) (deletedRows uint64, err error) { - err = h.callWithSCtx(false, func(sctx sessionctx.Context) error { +func (h *globalBindingHandle) dropGlobalBinding(sqlDigests []string) (deletedRows uint64, err error) { + err = h.callWithSCtx(true, func(sctx sessionctx.Context) error { // Lock mysql.bind_info to synchronize with CreateBinding / AddBinding / DropBinding on other tidb instances. if err = lockBindInfoTable(sctx); err != nil { return err } - updateTs := types.NewTime(types.FromGoTime(time.Now()), mysql.TypeTimestamp, 3).String() - - _, err = exec(sctx, `UPDATE mysql.bind_info SET status = %?, update_time = %? WHERE sql_digest = %? AND update_time < %? AND status != %?`, - deleted, updateTs, sqlDigest, updateTs, deleted) - if err != nil { - return err + for _, sqlDigest := range sqlDigests { + updateTs := types.NewTime(types.FromGoTime(time.Now()), mysql.TypeTimestamp, 3).String() + _, err = exec( + sctx, + `UPDATE mysql.bind_info SET status = %?, update_time = %? WHERE sql_digest = %? AND update_time < %? AND status != %?`, + deleted, + updateTs, + sqlDigest, + updateTs, + deleted, + ) + if err != nil { + return err + } + deletedRows += sctx.GetSessionVars().StmtCtx.AffectedRows() } - deletedRows = sctx.GetSessionVars().StmtCtx.AffectedRows() return nil }) + if err != nil { + deletedRows = 0 + } return } // DropGlobalBinding drop Bindings to the storage and Bindings int the cache. -func (h *globalBindingHandle) DropGlobalBinding(sqlDigest string) (deletedRows uint64, err error) { - if sqlDigest == "" { +func (h *globalBindingHandle) DropGlobalBinding(sqlDigests []string) (deletedRows uint64, err error) { + if len(sqlDigests) == 0 { return 0, errors.New("sql digest is empty") } defer func() { @@ -335,7 +365,7 @@ func (h *globalBindingHandle) DropGlobalBinding(sqlDigest string) (deletedRows u err = h.LoadFromStorageToCache(false) } }() - return h.dropGlobalBinding(sqlDigest) + return h.dropGlobalBinding(sqlDigests) } // SetGlobalBindingStatus set a Bindings's status to the storage and bind cache. @@ -451,7 +481,7 @@ func (h *globalBindingHandle) DropInvalidGlobalBinding() { invalidBindings := h.invalidBindings.getAll() h.invalidBindings.reset() for _, invalidBinding := range invalidBindings { - if _, err := h.dropGlobalBinding(invalidBinding.SQLDigest); err != nil { + if _, err := h.dropGlobalBinding([]string{invalidBinding.SQLDigest}); err != nil { logutil.BindLogger().Debug("flush bind record failed", zap.Error(err)) } } diff --git a/pkg/bindinfo/global_handle_test.go b/pkg/bindinfo/global_handle_test.go index 3325e9be37898..2d11516cb84f8 100644 --- a/pkg/bindinfo/global_handle_test.go +++ b/pkg/bindinfo/global_handle_test.go @@ -609,5 +609,6 @@ func (p *mockSessionPool) Get() (pools.Resource, error) { return p.se, nil } -func (p *mockSessionPool) Put(pools.Resource) { -} +func (p *mockSessionPool) Put(pools.Resource) {} + +func (p *mockSessionPool) Close() {} diff --git a/pkg/bindinfo/session_handle.go b/pkg/bindinfo/session_handle.go index 45e19adc64173..770b372fb4ef1 100644 --- a/pkg/bindinfo/session_handle.go +++ b/pkg/bindinfo/session_handle.go @@ -17,6 +17,7 @@ package bindinfo import ( "context" "encoding/json" + "slices" "strings" "time" @@ -35,10 +36,10 @@ import ( // SessionBindingHandle is used to handle all session sql bind operations. type SessionBindingHandle interface { // CreateSessionBinding creates a binding to the cache. - CreateSessionBinding(sctx sessionctx.Context, binding Binding) (err error) + CreateSessionBinding(sctx sessionctx.Context, bindings []*Binding) (err error) // DropSessionBinding drops a binding by the sql digest. - DropSessionBinding(sqlDigest string) error + DropSessionBinding(sqlDigests []string) error // MatchSessionBinding returns the matched binding for this statement. MatchSessionBinding(sctx sessionctx.Context, fuzzyDigest string, tableNames []*ast.TableName) (matchedBinding Binding, isMatched bool) @@ -75,26 +76,36 @@ func (h *sessionBindingHandle) appendSessionBinding(sqlDigest string, meta Bindi // CreateSessionBinding creates a Bindings to the cache. // It replaces all the exists bindings for the same normalized SQL. -func (h *sessionBindingHandle) CreateSessionBinding(sctx sessionctx.Context, binding Binding) (err error) { - if err := prepareHints(sctx, &binding); err != nil { - return err +func (h *sessionBindingHandle) CreateSessionBinding(sctx sessionctx.Context, bindings []*Binding) (err error) { + for _, binding := range bindings { + if err := prepareHints(sctx, binding); err != nil { + return err + } + } + for _, binding := range bindings { + binding.Db = strings.ToLower(binding.Db) + now := types.NewTime( + types.FromGoTime(time.Now().In(sctx.GetSessionVars().StmtCtx.TimeZone())), + mysql.TypeTimestamp, + 3, + ) + binding.CreateTime = now + binding.UpdateTime = now + + // update the BindMeta to the cache. + h.appendSessionBinding(parser.DigestNormalized(binding.OriginalSQL).String(), []Binding{*binding}) } - binding.Db = strings.ToLower(binding.Db) - now := types.NewTime(types.FromGoTime(time.Now().In(sctx.GetSessionVars().StmtCtx.TimeZone())), mysql.TypeTimestamp, 3) - binding.CreateTime = now - binding.UpdateTime = now - - // update the BindMeta to the cache. - h.appendSessionBinding(parser.DigestNormalized(binding.OriginalSQL).String(), []Binding{binding}) return nil } // DropSessionBinding drop Bindings in the cache. -func (h *sessionBindingHandle) DropSessionBinding(sqlDigest string) error { - if sqlDigest == "" { +func (h *sessionBindingHandle) DropSessionBinding(sqlDigests []string) error { + if slices.Contains(sqlDigests, "") { return errors.New("sql digest is empty") } - h.ch.RemoveBinding(sqlDigest) + for _, sqlDigest := range sqlDigests { + h.ch.RemoveBinding(sqlDigest) + } return nil } diff --git a/pkg/bindinfo/tests/BUILD.bazel b/pkg/bindinfo/tests/BUILD.bazel index e28e02aceb44d..0629e045c6169 100644 --- a/pkg/bindinfo/tests/BUILD.bazel +++ b/pkg/bindinfo/tests/BUILD.bazel @@ -9,7 +9,7 @@ go_test( ], flaky = True, race = "on", - shard_count = 18, + shard_count = 19, deps = [ "//pkg/bindinfo", "//pkg/bindinfo/internal", diff --git a/pkg/bindinfo/tests/bind_test.go b/pkg/bindinfo/tests/bind_test.go index 53f6346db9367..9dd948861bb3c 100644 --- a/pkg/bindinfo/tests/bind_test.go +++ b/pkg/bindinfo/tests/bind_test.go @@ -17,7 +17,9 @@ package tests import ( "context" "fmt" + "math/rand" "strconv" + "strings" "testing" "github.com/pingcap/tidb/pkg/bindinfo" @@ -893,12 +895,42 @@ func removeAllBindings(tk *testkit.TestKit, global bool) { scope = "global" } res := showBinding(tk, fmt.Sprintf("show %v bindings", scope)) + digests := make([]string, 0, len(res)) for _, r := range res { if r[4] == "builtin" { continue } - tk.MustExec(fmt.Sprintf("drop %v binding for sql digest '%v'", scope, r[5])) + digests = append(digests, r[5].(string)) } + if len(digests) == 0 { + return + } + // test DROP BINDING FOR SQL DIGEST can handle empty strings correctly + digests = append(digests, "", "", "") + // randomly split digests into 4 groups using random number + // shuffle the slice + rand.Shuffle(len(digests), func(i, j int) { + digests[i], digests[j] = digests[j], digests[i] + }) + split := make([][]string, 4) + for i, d := range digests { + split[i%4] = append(split[i%4], d) + } + // group 0: wrap with ' then connect by , + var g0 string + for _, d := range split[0] { + g0 += "'" + d + "'," + } + // group 1: connect by , and set into a user variable + tk.MustExec(fmt.Sprintf("set @a = '%v'", strings.Join(split[1], ","))) + g1 := "@a," + var g2 string + for _, d := range split[2] { + g2 += "'" + d + "'," + } + // group 2: connect by , and put into a normal string + g3 := "'" + strings.Join(split[3], ",") + "'" + tk.MustExec(fmt.Sprintf("drop %v binding for sql digest %s %s %s %s", scope, g0, g1, g2, g3)) tk.MustQuery(fmt.Sprintf("show %v bindings", scope)).Check(testkit.Rows()) // empty } @@ -1107,3 +1139,31 @@ func TestFuzzyBindingHintsWithSourceReturning(t *testing.T) { } } } + +func TestBatchDropBindings(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec(`use test`) + tk.MustExec(`create table t1 (a int, b int, c int, d int, key(a), key(b), key(c), key(d))`) + tk.MustExec(`create table t2 (a int, b int, c int, d int, key(a), key(b), key(c), key(d))`) + tk.MustExec(`create table t3 (a int, b int, c int, d int, key(a), key(b), key(c), key(d))`) + tk.MustExec(`create global binding for select * from t1 using select /*+ use_index(t1, a) */ * from t1`) + tk.MustExec(`create global binding for select * from t1 where b < 1 using select /*+ use_index(t1,b) */ * from t1 where b < 1`) + tk.MustExec(`create global binding for select * from t1 where c < 1 using select /*+ use_index(t1,c) */ * from t1 where c < 1`) + tk.MustExec(`create global binding for select * from t1 join t2 on t1.a = t2.a using select /*+ hash_join(t1) */ * from t1 join t2 on t1.a = t2.a`) + tk.MustExec(`create global binding for select * from t1 join t2 on t1.a = t2.a join t3 on t2.b = t3.b where t1.a = 1 using select /*+ leading(t3,t2,t1) */ * from t1 join t2 on t1.a = t2.a join t3 on t2.b = t3.b where t1.a = 1`) + tk.MustExec(`create global binding for select * from t1 where a in (select sum(b) from t2) using select /*+ agg_to_cop(@sel_2) */ * from t1 where a in (select sum(b) from t2)`) + tk.MustExec(`create global binding for select * from t2 where a = 1 and b = 2 and c = 3 using select * from t2 ignore index (b) where a = 1 and b = 2 and c = 3`) + tk.MustExec(`create global binding for select * from t2 where a = 1 and b = 2 and c = 3 using select * from t2 use index (b) where a = 1 and b = 2 and c = 3`) + + tk.MustExec(`create session binding for select * from t1 using select /*+ use_index(t1, a) */ * from t1`) + tk.MustExec(`create session binding for select * from t1 where b < 1 using select /*+ use_index(t1, b) */ * from t1 where b < 1`) + tk.MustExec(`create session binding for select * from t1 where c < 1 using select /*+ use_index(t1, c) */ * from t1 where c < 1`) + tk.MustExec(`create session binding for select * from t1 join t2 on t1.a = t2.a using select /*+ hash_join( t1) */ * from t1 join t2 on t1.a = t2.a`) + tk.MustExec(`create session binding for select * from t1 join t2 on t1.a = t2.a join t3 on t2.b = t3.b where t1. a = 1 using select /*+ leading(t3,t2,t1) */ * from t1 join t2 on t1.a = t2.a join t3 on t2.b = t3.b where t1.a = 1`) + tk.MustExec(`create session binding for select * from t1 where a in (select sum( b) from t2) using select /*+ agg_to_cop(@sel_2) */ * from t1 where a in (select sum(b) from t2)`) + tk.MustExec(`create session binding for select * from t2 where a = 1 and b = 2 and c = 3 using select * from t2 ignore index (b) where a = 1 and b = 2 and c = 3`) + tk.MustExec(`create session binding for select * from t2 where a = 1 and b = 2 and c = 3 using select * from t2 use index (b) where a = 1 and b = 2 and c = 3`) + removeAllBindings(tk, true) + removeAllBindings(tk, false) +} diff --git a/pkg/bindinfo/util.go b/pkg/bindinfo/util.go index f3278f95a46df..b48d73911126d 100644 --- a/pkg/bindinfo/util.go +++ b/pkg/bindinfo/util.go @@ -17,7 +17,6 @@ package bindinfo import ( "context" - "github.com/ngaut/pools" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/sessionctx" @@ -37,9 +36,3 @@ func execRows(sctx sessionctx.Context, sql string, args ...any) (rows []chunk.Ro return sqlExec.ExecRestrictedSQL(kv.WithInternalSourceType(context.Background(), kv.InternalTxnBindInfo), []sqlexec.OptionFuncAlias{sqlexec.ExecOptionUseCurSession}, sql, args...) } - -// SessionPool is used to recycle sessionctx. -type SessionPool interface { - Get() (pools.Resource, error) - Put(pools.Resource) -} diff --git a/pkg/config/config.go b/pkg/config/config.go index 3534f06b0a2e6..1fbec8af7b27d 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -98,7 +98,8 @@ const ( // EnvVarKeyspaceName is the system env name for keyspace name. EnvVarKeyspaceName = "KEYSPACE_NAME" // MaxTokenLimit is the max token limit value. - MaxTokenLimit = 1024 * 1024 + MaxTokenLimit = 1024 * 1024 + DefSchemaLease = 45 * time.Second ) // Valid config maps @@ -716,15 +717,16 @@ type Performance struct { MemProfileInterval string `toml:"-" json:"-"` // Deprecated: this config will not have any effect - IndexUsageSyncLease string `toml:"index-usage-sync-lease" json:"index-usage-sync-lease"` - PlanReplayerGCLease string `toml:"plan-replayer-gc-lease" json:"plan-replayer-gc-lease"` - GOGC int `toml:"gogc" json:"gogc"` - EnforceMPP bool `toml:"enforce-mpp" json:"enforce-mpp"` - StatsLoadConcurrency int `toml:"stats-load-concurrency" json:"stats-load-concurrency"` - StatsLoadQueueSize uint `toml:"stats-load-queue-size" json:"stats-load-queue-size"` - AnalyzePartitionConcurrencyQuota uint `toml:"analyze-partition-concurrency-quota" json:"analyze-partition-concurrency-quota"` - PlanReplayerDumpWorkerConcurrency uint `toml:"plan-replayer-dump-worker-concurrency" json:"plan-replayer-dump-worker-concurrency"` - EnableStatsCacheMemQuota bool `toml:"enable-stats-cache-mem-quota" json:"enable-stats-cache-mem-quota"` + IndexUsageSyncLease string `toml:"index-usage-sync-lease" json:"index-usage-sync-lease"` + PlanReplayerGCLease string `toml:"plan-replayer-gc-lease" json:"plan-replayer-gc-lease"` + GOGC int `toml:"gogc" json:"gogc"` + EnforceMPP bool `toml:"enforce-mpp" json:"enforce-mpp"` + StatsLoadConcurrency int `toml:"stats-load-concurrency" json:"stats-load-concurrency"` + StatsLoadQueueSize uint `toml:"stats-load-queue-size" json:"stats-load-queue-size"` + // Deprecated: this config has been deprecated. It has no effect. + AnalyzePartitionConcurrencyQuota uint `toml:"analyze-partition-concurrency-quota" json:"analyze-partition-concurrency-quota"` + PlanReplayerDumpWorkerConcurrency uint `toml:"plan-replayer-dump-worker-concurrency" json:"plan-replayer-dump-worker-concurrency"` + EnableStatsCacheMemQuota bool `toml:"enable-stats-cache-mem-quota" json:"enable-stats-cache-mem-quota"` // The following items are deprecated. We need to keep them here temporarily // to support the upgrade process. They can be removed in future. @@ -912,7 +914,7 @@ var defaultConf = Config{ Path: "/tmp/tidb", RunDDL: true, SplitTable: true, - Lease: "45s", + Lease: DefSchemaLease.String(), TokenLimit: 1000, OOMUseTmpStorage: true, TempDir: DefTempDir, diff --git a/pkg/ddl/BUILD.bazel b/pkg/ddl/BUILD.bazel index 4f2e674ea5e68..39650b0c76155 100644 --- a/pkg/ddl/BUILD.bazel +++ b/pkg/ddl/BUILD.bazel @@ -11,6 +11,7 @@ package_group( go_library( name = "ddl", srcs = [ + "add_column.go", "backfilling.go", "backfilling_clean_s3.go", "backfilling_dist_executor.go", @@ -21,17 +22,16 @@ go_library( "backfilling_read_index.go", "backfilling_scheduler.go", "bdr.go", - "callback.go", "cluster.go", "column.go", "constant.go", "constraint.go", + "create_table.go", "ddl.go", "ddl_algorithm.go", "ddl_history.go", "ddl_running_jobs.go", "ddl_tiflash_api.go", - "ddl_worker.go", "ddl_workerpool.go", "delete_range.go", "delete_range_util.go", @@ -43,8 +43,11 @@ go_library( "index.go", "index_cop.go", "index_merge_tmp.go", - "job_table.go", + "job_scheduler.go", + "job_submitter.go", + "job_worker.go", "mock.go", + "modify_column.go", "multi_schema_change.go", "options.go", "partition.go", @@ -75,8 +78,9 @@ go_library( "//pkg/ddl/logutil", "//pkg/ddl/placement", "//pkg/ddl/resourcegroup", + "//pkg/ddl/schemaver", + "//pkg/ddl/serverstate", "//pkg/ddl/session", - "//pkg/ddl/syncer", "//pkg/ddl/systable", "//pkg/ddl/util", "//pkg/distsql", @@ -176,7 +180,6 @@ go_library( "@com_github_pingcap_kvproto//pkg/errorpb", "@com_github_pingcap_kvproto//pkg/kvrpcpb", "@com_github_pingcap_kvproto//pkg/metapb", - "@com_github_pingcap_log//:log", "@com_github_pingcap_tipb//go-tipb", "@com_github_prometheus_client_golang//prometheus", "@com_github_tikv_client_go_v2//error", @@ -189,7 +192,6 @@ go_library( "@com_github_tikv_pd_client//:client", "@com_github_tikv_pd_client//http", "@io_etcd_go_etcd_client_v3//:client", - "@io_etcd_go_etcd_client_v3//concurrency", "@org_golang_x_sync//errgroup", "@org_uber_go_atomic//:atomic", "@org_uber_go_zap//:zap", @@ -224,8 +226,8 @@ go_test( "ddl_history_test.go", "ddl_running_jobs_test.go", "ddl_test.go", - "ddl_worker_test.go", "ddl_workerpool_test.go", + "executor_nokit_test.go", "executor_test.go", "export_test.go", "fail_test.go", @@ -236,7 +238,8 @@ go_test( "index_test.go", "integration_test.go", "job_scheduler_test.go", - "job_table_test.go", + "job_scheduler_testkit_test.go", + "job_worker_test.go", "main_test.go", "modify_column_test.go", "multi_schema_change_test.go", @@ -272,14 +275,14 @@ go_test( "//pkg/ddl/mock", "//pkg/ddl/placement", "//pkg/ddl/schematracker", + "//pkg/ddl/serverstate", "//pkg/ddl/session", - "//pkg/ddl/syncer", "//pkg/ddl/testutil", "//pkg/ddl/util", - "//pkg/ddl/util/callback", "//pkg/disttask/framework/proto", "//pkg/disttask/framework/scheduler", "//pkg/disttask/framework/storage", + "//pkg/disttask/operator", "//pkg/domain", "//pkg/domain/infosync", "//pkg/errctx", diff --git a/pkg/ddl/add_column.go b/pkg/ddl/add_column.go new file mode 100644 index 0000000000000..7b55caf5160ca --- /dev/null +++ b/pkg/ddl/add_column.go @@ -0,0 +1,1294 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package ddl + +import ( + "fmt" + "strconv" + "strings" + "time" + "unicode/utf8" + + "github.com/pingcap/errors" + "github.com/pingcap/failpoint" + "github.com/pingcap/tidb/pkg/config" + "github.com/pingcap/tidb/pkg/ddl/logutil" + "github.com/pingcap/tidb/pkg/errctx" + "github.com/pingcap/tidb/pkg/expression" + exprctx "github.com/pingcap/tidb/pkg/expression/context" + "github.com/pingcap/tidb/pkg/infoschema" + "github.com/pingcap/tidb/pkg/meta" + "github.com/pingcap/tidb/pkg/meta/autoid" + "github.com/pingcap/tidb/pkg/parser/ast" + "github.com/pingcap/tidb/pkg/parser/charset" + "github.com/pingcap/tidb/pkg/parser/format" + "github.com/pingcap/tidb/pkg/parser/model" + "github.com/pingcap/tidb/pkg/parser/mysql" + "github.com/pingcap/tidb/pkg/parser/terror" + field_types "github.com/pingcap/tidb/pkg/parser/types" + "github.com/pingcap/tidb/pkg/sessionctx" + "github.com/pingcap/tidb/pkg/sessionctx/variable" + statsutil "github.com/pingcap/tidb/pkg/statistics/handle/util" + "github.com/pingcap/tidb/pkg/table" + "github.com/pingcap/tidb/pkg/types" + driver "github.com/pingcap/tidb/pkg/types/parser_driver" + "github.com/pingcap/tidb/pkg/util/collate" + "github.com/pingcap/tidb/pkg/util/dbterror" + "github.com/pingcap/tidb/pkg/util/hack" + "go.uber.org/zap" +) + +func onAddColumn(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, err error) { + // Handle the rolling back job. + if job.IsRollingback() { + ver, err = onDropColumn(jobCtx, t, job) + if err != nil { + return ver, errors.Trace(err) + } + return ver, nil + } + + failpoint.Inject("errorBeforeDecodeArgs", func(val failpoint.Value) { + //nolint:forcetypeassert + if val.(bool) { + failpoint.Return(ver, errors.New("occur an error before decode args")) + } + }) + + tblInfo, columnInfo, colFromArgs, pos, ifNotExists, err := checkAddColumn(t, job) + if err != nil { + if ifNotExists && infoschema.ErrColumnExists.Equal(err) { + job.Warning = toTError(err) + job.State = model.JobStateDone + return ver, nil + } + return ver, errors.Trace(err) + } + if columnInfo == nil { + columnInfo = InitAndAddColumnToTable(tblInfo, colFromArgs) + logutil.DDLLogger().Info("run add column job", zap.Stringer("job", job), zap.Reflect("columnInfo", *columnInfo)) + if err = checkAddColumnTooManyColumns(len(tblInfo.Columns)); err != nil { + job.State = model.JobStateCancelled + return ver, errors.Trace(err) + } + } + + originalState := columnInfo.State + switch columnInfo.State { + case model.StateNone: + // none -> delete only + columnInfo.State = model.StateDeleteOnly + ver, err = updateVersionAndTableInfoWithCheck(jobCtx, t, job, tblInfo, originalState != columnInfo.State) + if err != nil { + return ver, errors.Trace(err) + } + job.SchemaState = model.StateDeleteOnly + case model.StateDeleteOnly: + // delete only -> write only + columnInfo.State = model.StateWriteOnly + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, originalState != columnInfo.State) + if err != nil { + return ver, errors.Trace(err) + } + // Update the job state when all affairs done. + job.SchemaState = model.StateWriteOnly + case model.StateWriteOnly: + // write only -> reorganization + columnInfo.State = model.StateWriteReorganization + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, originalState != columnInfo.State) + if err != nil { + return ver, errors.Trace(err) + } + // Update the job state when all affairs done. + job.SchemaState = model.StateWriteReorganization + job.MarkNonRevertible() + case model.StateWriteReorganization: + // reorganization -> public + // Adjust table column offset. + failpoint.InjectCall("onAddColumnStateWriteReorg") + offset, err := LocateOffsetToMove(columnInfo.Offset, pos, tblInfo) + if err != nil { + return ver, errors.Trace(err) + } + tblInfo.MoveColumnInfo(columnInfo.Offset, offset) + columnInfo.State = model.StatePublic + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, originalState != columnInfo.State) + if err != nil { + return ver, errors.Trace(err) + } + + // Finish this job. + job.FinishTableJob(model.JobStateDone, model.StatePublic, ver, tblInfo) + addColumnEvent := statsutil.NewAddColumnEvent( + job.SchemaID, + tblInfo, + []*model.ColumnInfo{columnInfo}, + ) + asyncNotifyEvent(jobCtx, addColumnEvent) + default: + err = dbterror.ErrInvalidDDLState.GenWithStackByArgs("column", columnInfo.State) + } + + return ver, errors.Trace(err) +} + +func checkAndCreateNewColumn(ctx sessionctx.Context, ti ast.Ident, schema *model.DBInfo, spec *ast.AlterTableSpec, t table.Table, specNewColumn *ast.ColumnDef) (*table.Column, error) { + err := checkUnsupportedColumnConstraint(specNewColumn, ti) + if err != nil { + return nil, errors.Trace(err) + } + + colName := specNewColumn.Name.Name.O + // Check whether added column has existed. + col := table.FindCol(t.Cols(), colName) + if col != nil { + err = infoschema.ErrColumnExists.GenWithStackByArgs(colName) + if spec.IfNotExists { + ctx.GetSessionVars().StmtCtx.AppendNote(err) + return nil, nil + } + return nil, err + } + if err = checkColumnAttributes(colName, specNewColumn.Tp); err != nil { + return nil, errors.Trace(err) + } + if utf8.RuneCountInString(colName) > mysql.MaxColumnNameLength { + return nil, dbterror.ErrTooLongIdent.GenWithStackByArgs(colName) + } + + return CreateNewColumn(ctx, schema, spec, t, specNewColumn) +} + +func checkUnsupportedColumnConstraint(col *ast.ColumnDef, ti ast.Ident) error { + for _, constraint := range col.Options { + switch constraint.Tp { + case ast.ColumnOptionAutoIncrement: + return dbterror.ErrUnsupportedAddColumn.GenWithStack("unsupported add column '%s' constraint AUTO_INCREMENT when altering '%s.%s'", col.Name, ti.Schema, ti.Name) + case ast.ColumnOptionPrimaryKey: + return dbterror.ErrUnsupportedAddColumn.GenWithStack("unsupported add column '%s' constraint PRIMARY KEY when altering '%s.%s'", col.Name, ti.Schema, ti.Name) + case ast.ColumnOptionUniqKey: + return dbterror.ErrUnsupportedAddColumn.GenWithStack("unsupported add column '%s' constraint UNIQUE KEY when altering '%s.%s'", col.Name, ti.Schema, ti.Name) + case ast.ColumnOptionAutoRandom: + errMsg := fmt.Sprintf(autoid.AutoRandomAlterAddColumn, col.Name, ti.Schema, ti.Name) + return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(errMsg) + } + } + + return nil +} + +// CreateNewColumn creates a new column according to the column information. +func CreateNewColumn(ctx sessionctx.Context, schema *model.DBInfo, spec *ast.AlterTableSpec, t table.Table, specNewColumn *ast.ColumnDef) (*table.Column, error) { + // If new column is a generated column, do validation. + // NOTE: we do check whether the column refers other generated + // columns occurring later in a table, but we don't handle the col offset. + for _, option := range specNewColumn.Options { + if option.Tp == ast.ColumnOptionGenerated { + if err := checkIllegalFn4Generated(specNewColumn.Name.Name.L, typeColumn, option.Expr); err != nil { + return nil, errors.Trace(err) + } + + if option.Stored { + return nil, dbterror.ErrUnsupportedOnGeneratedColumn.GenWithStackByArgs("Adding generated stored column through ALTER TABLE") + } + + _, dependColNames, err := findDependedColumnNames(schema.Name, t.Meta().Name, specNewColumn) + if err != nil { + return nil, errors.Trace(err) + } + if !ctx.GetSessionVars().EnableAutoIncrementInGenerated { + if err := checkAutoIncrementRef(specNewColumn.Name.Name.L, dependColNames, t.Meta()); err != nil { + return nil, errors.Trace(err) + } + } + duplicateColNames := make(map[string]struct{}, len(dependColNames)) + for k := range dependColNames { + duplicateColNames[k] = struct{}{} + } + cols := t.Cols() + + if err := checkDependedColExist(dependColNames, cols); err != nil { + return nil, errors.Trace(err) + } + + if err := verifyColumnGenerationSingle(duplicateColNames, cols, spec.Position); err != nil { + return nil, errors.Trace(err) + } + } + // Specially, since sequence has been supported, if a newly added column has a + // sequence nextval function as it's default value option, it won't fill the + // known rows with specific sequence next value under current add column logic. + // More explanation can refer: TestSequenceDefaultLogic's comment in sequence_test.go + if option.Tp == ast.ColumnOptionDefaultValue { + if f, ok := option.Expr.(*ast.FuncCallExpr); ok { + switch f.FnName.L { + case ast.NextVal: + if _, err := getSequenceDefaultValue(option); err != nil { + return nil, errors.Trace(err) + } + return nil, errors.Trace(dbterror.ErrAddColumnWithSequenceAsDefault.GenWithStackByArgs(specNewColumn.Name.Name.O)) + case ast.Rand, ast.UUID, ast.UUIDToBin, ast.Replace, ast.Upper: + return nil, errors.Trace(dbterror.ErrBinlogUnsafeSystemFunction.GenWithStackByArgs()) + } + } + } + } + + tableCharset, tableCollate, err := ResolveCharsetCollation(ctx.GetSessionVars(), + ast.CharsetOpt{Chs: t.Meta().Charset, Col: t.Meta().Collate}, + ast.CharsetOpt{Chs: schema.Charset, Col: schema.Collate}, + ) + if err != nil { + return nil, errors.Trace(err) + } + // Ignore table constraints now, they will be checked later. + // We use length(t.Cols()) as the default offset firstly, we will change the column's offset later. + col, _, err := buildColumnAndConstraint( + ctx, + len(t.Cols()), + specNewColumn, + nil, + tableCharset, + tableCollate, + ) + if err != nil { + return nil, errors.Trace(err) + } + + originDefVal, err := generateOriginDefaultValue(col.ToInfo(), ctx) + if err != nil { + return nil, errors.Trace(err) + } + + err = col.SetOriginDefaultValue(originDefVal) + return col, err +} + +// buildColumnAndConstraint builds table.Column and ast.Constraint from the parameters. +// outPriKeyConstraint is the primary key constraint out of column definition. For example: +// `create table t1 (id int , age int, primary key(id));` +func buildColumnAndConstraint( + ctx sessionctx.Context, + offset int, + colDef *ast.ColumnDef, + outPriKeyConstraint *ast.Constraint, + tblCharset string, + tblCollate string, +) (*table.Column, []*ast.Constraint, error) { + if colName := colDef.Name.Name.L; colName == model.ExtraHandleName.L { + return nil, nil, dbterror.ErrWrongColumnName.GenWithStackByArgs(colName) + } + + // specifiedCollate refers to the last collate specified in colDef.Options. + chs, coll, err := getCharsetAndCollateInColumnDef(ctx.GetSessionVars(), colDef) + if err != nil { + return nil, nil, errors.Trace(err) + } + chs, coll, err = ResolveCharsetCollation(ctx.GetSessionVars(), + ast.CharsetOpt{Chs: chs, Col: coll}, + ast.CharsetOpt{Chs: tblCharset, Col: tblCollate}, + ) + chs, coll = OverwriteCollationWithBinaryFlag(ctx.GetSessionVars(), colDef, chs, coll) + if err != nil { + return nil, nil, errors.Trace(err) + } + + if err := setCharsetCollationFlenDecimal(colDef.Tp, colDef.Name.Name.O, chs, coll, ctx.GetSessionVars()); err != nil { + return nil, nil, errors.Trace(err) + } + decodeEnumSetBinaryLiteralToUTF8(colDef.Tp, chs) + col, cts, err := columnDefToCol(ctx, offset, colDef, outPriKeyConstraint) + if err != nil { + return nil, nil, errors.Trace(err) + } + return col, cts, nil +} + +// getCharsetAndCollateInColumnDef will iterate collate in the options, validate it by checking the charset +// of column definition. If there's no collate in the option, the default collate of column's charset will be used. +func getCharsetAndCollateInColumnDef(sessVars *variable.SessionVars, def *ast.ColumnDef) (chs, coll string, err error) { + chs = def.Tp.GetCharset() + coll = def.Tp.GetCollate() + if chs != "" && coll == "" { + if coll, err = GetDefaultCollation(sessVars, chs); err != nil { + return "", "", errors.Trace(err) + } + } + for _, opt := range def.Options { + if opt.Tp == ast.ColumnOptionCollate { + info, err := collate.GetCollationByName(opt.StrValue) + if err != nil { + return "", "", errors.Trace(err) + } + if chs == "" { + chs = info.CharsetName + } else if chs != info.CharsetName { + return "", "", dbterror.ErrCollationCharsetMismatch.GenWithStackByArgs(info.Name, chs) + } + coll = info.Name + } + } + return +} + +// OverwriteCollationWithBinaryFlag is used to handle the case like +// +// CREATE TABLE t (a VARCHAR(255) BINARY) CHARSET utf8 COLLATE utf8_general_ci; +// +// The 'BINARY' sets the column collation to *_bin according to the table charset. +func OverwriteCollationWithBinaryFlag(sessVars *variable.SessionVars, colDef *ast.ColumnDef, chs, coll string) (newChs string, newColl string) { + ignoreBinFlag := colDef.Tp.GetCharset() != "" && (colDef.Tp.GetCollate() != "" || containsColumnOption(colDef, ast.ColumnOptionCollate)) + if ignoreBinFlag { + return chs, coll + } + needOverwriteBinColl := types.IsString(colDef.Tp.GetType()) && mysql.HasBinaryFlag(colDef.Tp.GetFlag()) + if needOverwriteBinColl { + newColl, err := GetDefaultCollation(sessVars, chs) + if err != nil { + return chs, coll + } + return chs, newColl + } + return chs, coll +} + +func setCharsetCollationFlenDecimal(tp *types.FieldType, colName, colCharset, colCollate string, sessVars *variable.SessionVars) error { + var err error + if typesNeedCharset(tp.GetType()) { + tp.SetCharset(colCharset) + tp.SetCollate(colCollate) + } else { + tp.SetCharset(charset.CharsetBin) + tp.SetCollate(charset.CharsetBin) + } + + // Use default value for flen or decimal when they are unspecified. + defaultFlen, defaultDecimal := mysql.GetDefaultFieldLengthAndDecimal(tp.GetType()) + if tp.GetDecimal() == types.UnspecifiedLength { + tp.SetDecimal(defaultDecimal) + } + if tp.GetFlen() == types.UnspecifiedLength { + tp.SetFlen(defaultFlen) + if mysql.HasUnsignedFlag(tp.GetFlag()) && tp.GetType() != mysql.TypeLonglong && mysql.IsIntegerType(tp.GetType()) { + // Issue #4684: the flen of unsigned integer(except bigint) is 1 digit shorter than signed integer + // because it has no prefix "+" or "-" character. + tp.SetFlen(tp.GetFlen() - 1) + } + } else { + // Adjust the field type for blob/text types if the flen is set. + if err = adjustBlobTypesFlen(tp, colCharset); err != nil { + return err + } + } + return checkTooBigFieldLengthAndTryAutoConvert(tp, colName, sessVars) +} + +func decodeEnumSetBinaryLiteralToUTF8(tp *types.FieldType, chs string) { + if tp.GetType() != mysql.TypeEnum && tp.GetType() != mysql.TypeSet { + return + } + enc := charset.FindEncoding(chs) + for i, elem := range tp.GetElems() { + if !tp.GetElemIsBinaryLit(i) { + continue + } + s, err := enc.Transform(nil, hack.Slice(elem), charset.OpDecodeReplace) + if err != nil { + logutil.DDLLogger().Warn("decode enum binary literal to utf-8 failed", zap.Error(err)) + } + tp.SetElem(i, string(hack.String(s))) + } + tp.CleanElemIsBinaryLit() +} + +func typesNeedCharset(tp byte) bool { + switch tp { + case mysql.TypeString, mysql.TypeVarchar, mysql.TypeVarString, + mysql.TypeBlob, mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob, + mysql.TypeEnum, mysql.TypeSet: + return true + } + return false +} + +// checkTooBigFieldLengthAndTryAutoConvert will check whether the field length is too big +// in non-strict mode and varchar column. If it is, will try to adjust to blob or text, see issue #30328 +func checkTooBigFieldLengthAndTryAutoConvert(tp *types.FieldType, colName string, sessVars *variable.SessionVars) error { + if sessVars != nil && !sessVars.SQLMode.HasStrictMode() && tp.GetType() == mysql.TypeVarchar { + err := types.IsVarcharTooBigFieldLength(tp.GetFlen(), colName, tp.GetCharset()) + if err != nil && terror.ErrorEqual(types.ErrTooBigFieldLength, err) { + tp.SetType(mysql.TypeBlob) + if err = adjustBlobTypesFlen(tp, tp.GetCharset()); err != nil { + return err + } + if tp.GetCharset() == charset.CharsetBin { + sessVars.StmtCtx.AppendWarning(dbterror.ErrAutoConvert.FastGenByArgs(colName, "VARBINARY", "BLOB")) + } else { + sessVars.StmtCtx.AppendWarning(dbterror.ErrAutoConvert.FastGenByArgs(colName, "VARCHAR", "TEXT")) + } + } + } + return nil +} + +// columnDefToCol converts ColumnDef to Col and TableConstraints. +// outPriKeyConstraint is the primary key constraint out of column definition. such as: create table t1 (id int , age int, primary key(id)); +func columnDefToCol(ctx sessionctx.Context, offset int, colDef *ast.ColumnDef, outPriKeyConstraint *ast.Constraint) (*table.Column, []*ast.Constraint, error) { + var constraints = make([]*ast.Constraint, 0) + col := table.ToColumn(&model.ColumnInfo{ + Offset: offset, + Name: colDef.Name.Name, + FieldType: *colDef.Tp, + // TODO: remove this version field after there is no old version. + Version: model.CurrLatestColumnInfoVersion, + }) + + if !isExplicitTimeStamp() { + // Check and set TimestampFlag, OnUpdateNowFlag and NotNullFlag. + if col.GetType() == mysql.TypeTimestamp { + col.AddFlag(mysql.TimestampFlag | mysql.OnUpdateNowFlag | mysql.NotNullFlag) + } + } + var err error + setOnUpdateNow := false + hasDefaultValue := false + hasNullFlag := false + if colDef.Options != nil { + length := types.UnspecifiedLength + + keys := []*ast.IndexPartSpecification{ + { + Column: colDef.Name, + Length: length, + }, + } + + var sb strings.Builder + restoreFlags := format.RestoreStringSingleQuotes | format.RestoreKeyWordLowercase | format.RestoreNameBackQuotes | + format.RestoreSpacesAroundBinaryOperation | format.RestoreWithoutSchemaName | format.RestoreWithoutTableName + restoreCtx := format.NewRestoreCtx(restoreFlags, &sb) + + for _, v := range colDef.Options { + switch v.Tp { + case ast.ColumnOptionNotNull: + col.AddFlag(mysql.NotNullFlag) + case ast.ColumnOptionNull: + col.DelFlag(mysql.NotNullFlag) + removeOnUpdateNowFlag(col) + hasNullFlag = true + case ast.ColumnOptionAutoIncrement: + col.AddFlag(mysql.AutoIncrementFlag | mysql.NotNullFlag) + case ast.ColumnOptionPrimaryKey: + // Check PriKeyFlag first to avoid extra duplicate constraints. + if col.GetFlag()&mysql.PriKeyFlag == 0 { + constraint := &ast.Constraint{Tp: ast.ConstraintPrimaryKey, Keys: keys, + Option: &ast.IndexOption{PrimaryKeyTp: v.PrimaryKeyTp}} + if v.StrValue == "Global" { + constraint.Option.Global = true + } + constraints = append(constraints, constraint) + col.AddFlag(mysql.PriKeyFlag) + // Add NotNullFlag early so that processColumnFlags() can see it. + col.AddFlag(mysql.NotNullFlag) + } + case ast.ColumnOptionUniqKey: + // Check UniqueFlag first to avoid extra duplicate constraints. + if col.GetFlag()&mysql.UniqueFlag == 0 { + constraint := &ast.Constraint{Tp: ast.ConstraintUniqKey, Keys: keys} + if v.StrValue == "Global" { + constraint.Option = &ast.IndexOption{Global: true} + } + constraints = append(constraints, constraint) + col.AddFlag(mysql.UniqueKeyFlag) + } + case ast.ColumnOptionDefaultValue: + hasDefaultValue, err = SetDefaultValue(ctx, col, v) + if err != nil { + return nil, nil, errors.Trace(err) + } + removeOnUpdateNowFlag(col) + case ast.ColumnOptionOnUpdate: + // TODO: Support other time functions. + if !(col.GetType() == mysql.TypeTimestamp || col.GetType() == mysql.TypeDatetime) { + return nil, nil, dbterror.ErrInvalidOnUpdate.GenWithStackByArgs(col.Name) + } + if !expression.IsValidCurrentTimestampExpr(v.Expr, colDef.Tp) { + return nil, nil, dbterror.ErrInvalidOnUpdate.GenWithStackByArgs(col.Name) + } + col.AddFlag(mysql.OnUpdateNowFlag) + setOnUpdateNow = true + case ast.ColumnOptionComment: + err := setColumnComment(ctx, col, v) + if err != nil { + return nil, nil, errors.Trace(err) + } + case ast.ColumnOptionGenerated: + sb.Reset() + err = v.Expr.Restore(restoreCtx) + if err != nil { + return nil, nil, errors.Trace(err) + } + col.GeneratedExprString = sb.String() + col.GeneratedStored = v.Stored + _, dependColNames, err := findDependedColumnNames(model.NewCIStr(""), model.NewCIStr(""), colDef) + if err != nil { + return nil, nil, errors.Trace(err) + } + col.Dependences = dependColNames + case ast.ColumnOptionCollate: + if field_types.HasCharset(colDef.Tp) { + col.FieldType.SetCollate(v.StrValue) + } + case ast.ColumnOptionFulltext: + ctx.GetSessionVars().StmtCtx.AppendWarning(dbterror.ErrTableCantHandleFt.FastGenByArgs()) + case ast.ColumnOptionCheck: + if !variable.EnableCheckConstraint.Load() { + ctx.GetSessionVars().StmtCtx.AppendWarning(errCheckConstraintIsOff) + } else { + // Check the column CHECK constraint dependency lazily, after fill all the name. + // Extract column constraint from column option. + constraint := &ast.Constraint{ + Tp: ast.ConstraintCheck, + Expr: v.Expr, + Enforced: v.Enforced, + Name: v.ConstraintName, + InColumn: true, + InColumnName: colDef.Name.Name.O, + } + constraints = append(constraints, constraint) + } + } + } + } + + if err = processAndCheckDefaultValueAndColumn(ctx, col, outPriKeyConstraint, hasDefaultValue, setOnUpdateNow, hasNullFlag); err != nil { + return nil, nil, errors.Trace(err) + } + return col, constraints, nil +} + +// isExplicitTimeStamp is used to check if explicit_defaults_for_timestamp is on or off. +// Check out this link for more details. +// https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_explicit_defaults_for_timestamp +func isExplicitTimeStamp() bool { + // TODO: implement the behavior as MySQL when explicit_defaults_for_timestamp = off, then this function could return false. + return true +} + +// SetDefaultValue sets the default value of the column. +func SetDefaultValue(ctx sessionctx.Context, col *table.Column, option *ast.ColumnOption) (hasDefaultValue bool, err error) { + var value any + var isSeqExpr bool + value, isSeqExpr, err = getDefaultValue( + exprctx.CtxWithHandleTruncateErrLevel(ctx.GetExprCtx(), errctx.LevelError), + col, option, + ) + if err != nil { + return false, errors.Trace(err) + } + if isSeqExpr { + if err := checkSequenceDefaultValue(col); err != nil { + return false, errors.Trace(err) + } + col.DefaultIsExpr = isSeqExpr + } + + // When the default value is expression, we skip check and convert. + if !col.DefaultIsExpr { + if hasDefaultValue, value, err = checkColumnDefaultValue(ctx.GetExprCtx(), col, value); err != nil { + return hasDefaultValue, errors.Trace(err) + } + value, err = convertTimestampDefaultValToUTC(ctx, value, col) + if err != nil { + return hasDefaultValue, errors.Trace(err) + } + } else { + hasDefaultValue = true + } + err = setDefaultValueWithBinaryPadding(col, value) + if err != nil { + return hasDefaultValue, errors.Trace(err) + } + return hasDefaultValue, nil +} + +// getFuncCallDefaultValue gets the default column value of function-call expression. +func getFuncCallDefaultValue(col *table.Column, option *ast.ColumnOption, expr *ast.FuncCallExpr) (any, bool, error) { + switch expr.FnName.L { + case ast.CurrentTimestamp, ast.CurrentDate: // CURRENT_TIMESTAMP() and CURRENT_DATE() + tp, fsp := col.FieldType.GetType(), col.FieldType.GetDecimal() + if tp == mysql.TypeTimestamp || tp == mysql.TypeDatetime { + defaultFsp := 0 + if len(expr.Args) == 1 { + if val := expr.Args[0].(*driver.ValueExpr); val != nil { + defaultFsp = int(val.GetInt64()) + } + } + if defaultFsp != fsp { + return nil, false, dbterror.ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) + } + } + return nil, false, nil + case ast.NextVal: + // handle default next value of sequence. (keep the expr string) + str, err := getSequenceDefaultValue(option) + if err != nil { + return nil, false, errors.Trace(err) + } + return str, true, nil + case ast.Rand, ast.UUID, ast.UUIDToBin: // RAND(), UUID() and UUID_TO_BIN() + if err := expression.VerifyArgsWrapper(expr.FnName.L, len(expr.Args)); err != nil { + return nil, false, errors.Trace(err) + } + str, err := restoreFuncCall(expr) + if err != nil { + return nil, false, errors.Trace(err) + } + col.DefaultIsExpr = true + return str, false, nil + case ast.DateFormat: // DATE_FORMAT() + if err := expression.VerifyArgsWrapper(expr.FnName.L, len(expr.Args)); err != nil { + return nil, false, errors.Trace(err) + } + // Support DATE_FORMAT(NOW(),'%Y-%m'), DATE_FORMAT(NOW(),'%Y-%m-%d'), + // DATE_FORMAT(NOW(),'%Y-%m-%d %H.%i.%s'), DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s'). + nowFunc, ok := expr.Args[0].(*ast.FuncCallExpr) + if ok && nowFunc.FnName.L == ast.Now { + if err := expression.VerifyArgsWrapper(nowFunc.FnName.L, len(nowFunc.Args)); err != nil { + return nil, false, errors.Trace(err) + } + valExpr, isValue := expr.Args[1].(ast.ValueExpr) + if !isValue || (valExpr.GetString() != "%Y-%m" && valExpr.GetString() != "%Y-%m-%d" && + valExpr.GetString() != "%Y-%m-%d %H.%i.%s" && valExpr.GetString() != "%Y-%m-%d %H:%i:%s") { + return nil, false, dbterror.ErrDefValGeneratedNamedFunctionIsNotAllowed.GenWithStackByArgs(col.Name.String(), valExpr) + } + str, err := restoreFuncCall(expr) + if err != nil { + return nil, false, errors.Trace(err) + } + col.DefaultIsExpr = true + return str, false, nil + } + return nil, false, dbterror.ErrDefValGeneratedNamedFunctionIsNotAllowed.GenWithStackByArgs(col.Name.String(), + fmt.Sprintf("%s with disallowed args", expr.FnName.String())) + case ast.Replace: + if err := expression.VerifyArgsWrapper(expr.FnName.L, len(expr.Args)); err != nil { + return nil, false, errors.Trace(err) + } + funcCall := expr.Args[0] + // Support REPLACE(CONVERT(UPPER(UUID()) USING UTF8MB4), '-', '')) + if convertFunc, ok := funcCall.(*ast.FuncCallExpr); ok && convertFunc.FnName.L == ast.Convert { + if err := expression.VerifyArgsWrapper(convertFunc.FnName.L, len(convertFunc.Args)); err != nil { + return nil, false, errors.Trace(err) + } + funcCall = convertFunc.Args[0] + } + // Support REPLACE(UPPER(UUID()), '-', ''). + if upperFunc, ok := funcCall.(*ast.FuncCallExpr); ok && upperFunc.FnName.L == ast.Upper { + if err := expression.VerifyArgsWrapper(upperFunc.FnName.L, len(upperFunc.Args)); err != nil { + return nil, false, errors.Trace(err) + } + if uuidFunc, ok := upperFunc.Args[0].(*ast.FuncCallExpr); ok && uuidFunc.FnName.L == ast.UUID { + if err := expression.VerifyArgsWrapper(uuidFunc.FnName.L, len(uuidFunc.Args)); err != nil { + return nil, false, errors.Trace(err) + } + str, err := restoreFuncCall(expr) + if err != nil { + return nil, false, errors.Trace(err) + } + col.DefaultIsExpr = true + return str, false, nil + } + } + return nil, false, dbterror.ErrDefValGeneratedNamedFunctionIsNotAllowed.GenWithStackByArgs(col.Name.String(), + fmt.Sprintf("%s with disallowed args", expr.FnName.String())) + case ast.Upper: + if err := expression.VerifyArgsWrapper(expr.FnName.L, len(expr.Args)); err != nil { + return nil, false, errors.Trace(err) + } + // Support UPPER(SUBSTRING_INDEX(USER(), '@', 1)). + if substringIndexFunc, ok := expr.Args[0].(*ast.FuncCallExpr); ok && substringIndexFunc.FnName.L == ast.SubstringIndex { + if err := expression.VerifyArgsWrapper(substringIndexFunc.FnName.L, len(substringIndexFunc.Args)); err != nil { + return nil, false, errors.Trace(err) + } + if userFunc, ok := substringIndexFunc.Args[0].(*ast.FuncCallExpr); ok && userFunc.FnName.L == ast.User { + if err := expression.VerifyArgsWrapper(userFunc.FnName.L, len(userFunc.Args)); err != nil { + return nil, false, errors.Trace(err) + } + valExpr, isValue := substringIndexFunc.Args[1].(ast.ValueExpr) + if !isValue || valExpr.GetString() != "@" { + return nil, false, dbterror.ErrDefValGeneratedNamedFunctionIsNotAllowed.GenWithStackByArgs(col.Name.String(), valExpr) + } + str, err := restoreFuncCall(expr) + if err != nil { + return nil, false, errors.Trace(err) + } + col.DefaultIsExpr = true + return str, false, nil + } + } + return nil, false, dbterror.ErrDefValGeneratedNamedFunctionIsNotAllowed.GenWithStackByArgs(col.Name.String(), + fmt.Sprintf("%s with disallowed args", expr.FnName.String())) + case ast.StrToDate: // STR_TO_DATE() + if err := expression.VerifyArgsWrapper(expr.FnName.L, len(expr.Args)); err != nil { + return nil, false, errors.Trace(err) + } + // Support STR_TO_DATE('1980-01-01', '%Y-%m-%d'). + if _, ok1 := expr.Args[0].(ast.ValueExpr); ok1 { + if _, ok2 := expr.Args[1].(ast.ValueExpr); ok2 { + str, err := restoreFuncCall(expr) + if err != nil { + return nil, false, errors.Trace(err) + } + col.DefaultIsExpr = true + return str, false, nil + } + } + return nil, false, dbterror.ErrDefValGeneratedNamedFunctionIsNotAllowed.GenWithStackByArgs(col.Name.String(), + fmt.Sprintf("%s with disallowed args", expr.FnName.String())) + case ast.JSONObject, ast.JSONArray, ast.JSONQuote: // JSON_OBJECT(), JSON_ARRAY(), JSON_QUOTE() + if err := expression.VerifyArgsWrapper(expr.FnName.L, len(expr.Args)); err != nil { + return nil, false, errors.Trace(err) + } + str, err := restoreFuncCall(expr) + if err != nil { + return nil, false, errors.Trace(err) + } + col.DefaultIsExpr = true + return str, false, nil + + default: + return nil, false, dbterror.ErrDefValGeneratedNamedFunctionIsNotAllowed.GenWithStackByArgs(col.Name.String(), expr.FnName.String()) + } +} + +// getDefaultValue will get the default value for column. +// 1: get the expr restored string for the column which uses sequence next value as default value. +// 2: get specific default value for the other column. +func getDefaultValue(ctx exprctx.BuildContext, col *table.Column, option *ast.ColumnOption) (any, bool, error) { + // handle default value with function call + tp, fsp := col.FieldType.GetType(), col.FieldType.GetDecimal() + if x, ok := option.Expr.(*ast.FuncCallExpr); ok { + val, isSeqExpr, err := getFuncCallDefaultValue(col, option, x) + if val != nil || isSeqExpr || err != nil { + return val, isSeqExpr, err + } + // If the function call is ast.CurrentTimestamp, it needs to be continuously processed. + } + + if tp == mysql.TypeTimestamp || tp == mysql.TypeDatetime || tp == mysql.TypeDate { + vd, err := expression.GetTimeValue(ctx, option.Expr, tp, fsp, nil) + value := vd.GetValue() + if err != nil { + return nil, false, dbterror.ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) + } + + // Value is nil means `default null`. + if value == nil { + return nil, false, nil + } + + // If value is types.Time, convert it to string. + if vv, ok := value.(types.Time); ok { + return vv.String(), false, nil + } + + return value, false, nil + } + + // evaluate the non-function-call expr to a certain value. + v, err := expression.EvalSimpleAst(ctx, option.Expr) + if err != nil { + return nil, false, errors.Trace(err) + } + + if v.IsNull() { + return nil, false, nil + } + + if v.Kind() == types.KindBinaryLiteral || v.Kind() == types.KindMysqlBit { + if types.IsTypeBlob(tp) || tp == mysql.TypeJSON || tp == mysql.TypeTiDBVectorFloat32 { + // BLOB/TEXT/JSON column cannot have a default value. + // Skip the unnecessary decode procedure. + return v.GetString(), false, err + } + if tp == mysql.TypeBit || tp == mysql.TypeString || tp == mysql.TypeVarchar || + tp == mysql.TypeVarString || tp == mysql.TypeEnum || tp == mysql.TypeSet { + // For BinaryLiteral or bit fields, we decode the default value to utf8 string. + str, err := v.GetBinaryStringDecoded(types.StrictFlags, col.GetCharset()) + if err != nil { + // Overwrite the decoding error with invalid default value error. + err = dbterror.ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) + } + return str, false, err + } + // For other kind of fields (e.g. INT), we supply its integer as string value. + value, err := v.GetBinaryLiteral().ToInt(ctx.GetEvalCtx().TypeCtx()) + if err != nil { + return nil, false, err + } + return strconv.FormatUint(value, 10), false, nil + } + + switch tp { + case mysql.TypeSet: + val, err := getSetDefaultValue(v, col) + return val, false, err + case mysql.TypeEnum: + val, err := getEnumDefaultValue(v, col) + return val, false, err + case mysql.TypeDuration, mysql.TypeDate: + if v, err = v.ConvertTo(ctx.GetEvalCtx().TypeCtx(), &col.FieldType); err != nil { + return "", false, errors.Trace(err) + } + case mysql.TypeBit: + if v.Kind() == types.KindInt64 || v.Kind() == types.KindUint64 { + // For BIT fields, convert int into BinaryLiteral. + return types.NewBinaryLiteralFromUint(v.GetUint64(), -1).ToString(), false, nil + } + case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong, mysql.TypeFloat, mysql.TypeDouble: + // For these types, convert it to standard format firstly. + // like integer fields, convert it into integer string literals. like convert "1.25" into "1" and "2.8" into "3". + // if raise a error, we will use original expression. We will handle it in check phase + if temp, err := v.ConvertTo(ctx.GetEvalCtx().TypeCtx(), &col.FieldType); err == nil { + v = temp + } + } + + val, err := v.ToString() + return val, false, err +} + +func getSequenceDefaultValue(c *ast.ColumnOption) (expr string, err error) { + var sb strings.Builder + restoreFlags := format.RestoreStringSingleQuotes | format.RestoreKeyWordLowercase | format.RestoreNameBackQuotes | + format.RestoreSpacesAroundBinaryOperation + restoreCtx := format.NewRestoreCtx(restoreFlags, &sb) + if err := c.Expr.Restore(restoreCtx); err != nil { + return "", err + } + return sb.String(), nil +} + +func setDefaultValueWithBinaryPadding(col *table.Column, value any) error { + err := col.SetDefaultValue(value) + if err != nil { + return err + } + // https://dev.mysql.com/doc/refman/8.0/en/binary-varbinary.html + // Set the default value for binary type should append the paddings. + if value != nil { + if col.GetType() == mysql.TypeString && types.IsBinaryStr(&col.FieldType) && len(value.(string)) < col.GetFlen() { + padding := make([]byte, col.GetFlen()-len(value.(string))) + col.DefaultValue = string(append([]byte(col.DefaultValue.(string)), padding...)) + } + } + return nil +} + +func setColumnComment(ctx sessionctx.Context, col *table.Column, option *ast.ColumnOption) error { + value, err := expression.EvalSimpleAst(ctx.GetExprCtx(), option.Expr) + if err != nil { + return errors.Trace(err) + } + if col.Comment, err = value.ToString(); err != nil { + return errors.Trace(err) + } + + sessionVars := ctx.GetSessionVars() + col.Comment, err = validateCommentLength(sessionVars.StmtCtx.ErrCtx(), sessionVars.SQLMode, col.Name.L, &col.Comment, dbterror.ErrTooLongFieldComment) + return errors.Trace(err) +} + +func processAndCheckDefaultValueAndColumn(ctx sessionctx.Context, col *table.Column, + outPriKeyConstraint *ast.Constraint, hasDefaultValue, setOnUpdateNow, hasNullFlag bool) error { + processDefaultValue(col, hasDefaultValue, setOnUpdateNow) + processColumnFlags(col) + + err := checkPriKeyConstraint(col, hasDefaultValue, hasNullFlag, outPriKeyConstraint) + if err != nil { + return errors.Trace(err) + } + if err = checkColumnValueConstraint(col, col.GetCollate()); err != nil { + return errors.Trace(err) + } + if err = checkDefaultValue(ctx.GetExprCtx(), col, hasDefaultValue); err != nil { + return errors.Trace(err) + } + if err = checkColumnFieldLength(col); err != nil { + return errors.Trace(err) + } + return nil +} + +func restoreFuncCall(expr *ast.FuncCallExpr) (string, error) { + var sb strings.Builder + restoreFlags := format.RestoreStringSingleQuotes | format.RestoreKeyWordLowercase | format.RestoreNameBackQuotes | + format.RestoreSpacesAroundBinaryOperation + restoreCtx := format.NewRestoreCtx(restoreFlags, &sb) + if err := expr.Restore(restoreCtx); err != nil { + return "", err + } + return sb.String(), nil +} + +// getSetDefaultValue gets the default value for the set type. See https://dev.mysql.com/doc/refman/5.7/en/set.html. +func getSetDefaultValue(v types.Datum, col *table.Column) (string, error) { + if v.Kind() == types.KindInt64 { + setCnt := len(col.GetElems()) + maxLimit := int64(1< maxLimit { + return "", dbterror.ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) + } + setVal, err := types.ParseSetValue(col.GetElems(), uint64(val)) + if err != nil { + return "", errors.Trace(err) + } + v.SetMysqlSet(setVal, col.GetCollate()) + return v.ToString() + } + + str, err := v.ToString() + if err != nil { + return "", errors.Trace(err) + } + if str == "" { + return str, nil + } + setVal, err := types.ParseSetName(col.GetElems(), str, col.GetCollate()) + if err != nil { + return "", dbterror.ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) + } + v.SetMysqlSet(setVal, col.GetCollate()) + + return v.ToString() +} + +// getEnumDefaultValue gets the default value for the enum type. See https://dev.mysql.com/doc/refman/5.7/en/enum.html. +func getEnumDefaultValue(v types.Datum, col *table.Column) (string, error) { + if v.Kind() == types.KindInt64 { + val := v.GetInt64() + if val < 1 || val > int64(len(col.GetElems())) { + return "", dbterror.ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) + } + enumVal, err := types.ParseEnumValue(col.GetElems(), uint64(val)) + if err != nil { + return "", errors.Trace(err) + } + v.SetMysqlEnum(enumVal, col.GetCollate()) + return v.ToString() + } + str, err := v.ToString() + if err != nil { + return "", errors.Trace(err) + } + // Ref: https://dev.mysql.com/doc/refman/8.0/en/enum.html + // Trailing spaces are automatically deleted from ENUM member values in the table definition when a table is created. + str = strings.TrimRight(str, " ") + enumVal, err := types.ParseEnumName(col.GetElems(), str, col.GetCollate()) + if err != nil { + return "", dbterror.ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) + } + v.SetMysqlEnum(enumVal, col.GetCollate()) + + return v.ToString() +} + +func removeOnUpdateNowFlag(c *table.Column) { + // For timestamp Col, if it is set null or default value, + // OnUpdateNowFlag should be removed. + if mysql.HasTimestampFlag(c.GetFlag()) { + c.DelFlag(mysql.OnUpdateNowFlag) + } +} + +func processDefaultValue(c *table.Column, hasDefaultValue bool, setOnUpdateNow bool) { + setTimestampDefaultValue(c, hasDefaultValue, setOnUpdateNow) + + setYearDefaultValue(c, hasDefaultValue) + + // Set `NoDefaultValueFlag` if this field doesn't have a default value and + // it is `not null` and not an `AUTO_INCREMENT` field or `TIMESTAMP` field. + setNoDefaultValueFlag(c, hasDefaultValue) +} + +func setYearDefaultValue(c *table.Column, hasDefaultValue bool) { + if hasDefaultValue { + return + } + + if c.GetType() == mysql.TypeYear && mysql.HasNotNullFlag(c.GetFlag()) { + if err := c.SetDefaultValue("0000"); err != nil { + logutil.DDLLogger().Error("set default value failed", zap.Error(err)) + } + } +} + +func setTimestampDefaultValue(c *table.Column, hasDefaultValue bool, setOnUpdateNow bool) { + if hasDefaultValue { + return + } + + // For timestamp Col, if is not set default value or not set null, use current timestamp. + if mysql.HasTimestampFlag(c.GetFlag()) && mysql.HasNotNullFlag(c.GetFlag()) { + if setOnUpdateNow { + if err := c.SetDefaultValue(types.ZeroDatetimeStr); err != nil { + logutil.DDLLogger().Error("set default value failed", zap.Error(err)) + } + } else { + if err := c.SetDefaultValue(strings.ToUpper(ast.CurrentTimestamp)); err != nil { + logutil.DDLLogger().Error("set default value failed", zap.Error(err)) + } + } + } +} + +func setNoDefaultValueFlag(c *table.Column, hasDefaultValue bool) { + if hasDefaultValue { + return + } + + if !mysql.HasNotNullFlag(c.GetFlag()) { + return + } + + // Check if it is an `AUTO_INCREMENT` field or `TIMESTAMP` field. + if !mysql.HasAutoIncrementFlag(c.GetFlag()) && !mysql.HasTimestampFlag(c.GetFlag()) { + c.AddFlag(mysql.NoDefaultValueFlag) + } +} + +func checkDefaultValue(ctx exprctx.BuildContext, c *table.Column, hasDefaultValue bool) (err error) { + if !hasDefaultValue { + return nil + } + + if c.GetDefaultValue() != nil { + if c.DefaultIsExpr { + if mysql.HasAutoIncrementFlag(c.GetFlag()) { + return types.ErrInvalidDefault.GenWithStackByArgs(c.Name) + } + return nil + } + _, err = table.GetColDefaultValue( + exprctx.CtxWithHandleTruncateErrLevel(ctx, errctx.LevelError), + c.ToInfo(), + ) + if err != nil { + return types.ErrInvalidDefault.GenWithStackByArgs(c.Name) + } + return nil + } + // Primary key default null is invalid. + if mysql.HasPriKeyFlag(c.GetFlag()) { + return dbterror.ErrPrimaryCantHaveNull + } + + // Set not null but default null is invalid. + if mysql.HasNotNullFlag(c.GetFlag()) { + return types.ErrInvalidDefault.GenWithStackByArgs(c.Name) + } + + return nil +} + +func checkColumnFieldLength(col *table.Column) error { + if col.GetType() == mysql.TypeVarchar { + if err := types.IsVarcharTooBigFieldLength(col.GetFlen(), col.Name.O, col.GetCharset()); err != nil { + return errors.Trace(err) + } + } + + return nil +} + +// checkPriKeyConstraint check all parts of a PRIMARY KEY must be NOT NULL +func checkPriKeyConstraint(col *table.Column, hasDefaultValue, hasNullFlag bool, outPriKeyConstraint *ast.Constraint) error { + // Primary key should not be null. + if mysql.HasPriKeyFlag(col.GetFlag()) && hasDefaultValue && col.GetDefaultValue() == nil { + return types.ErrInvalidDefault.GenWithStackByArgs(col.Name) + } + // Set primary key flag for outer primary key constraint. + // Such as: create table t1 (id int , age int, primary key(id)) + if !mysql.HasPriKeyFlag(col.GetFlag()) && outPriKeyConstraint != nil { + for _, key := range outPriKeyConstraint.Keys { + if key.Expr == nil && key.Column.Name.L != col.Name.L { + continue + } + col.AddFlag(mysql.PriKeyFlag) + break + } + } + // Primary key should not be null. + if mysql.HasPriKeyFlag(col.GetFlag()) && hasNullFlag { + return dbterror.ErrPrimaryCantHaveNull + } + return nil +} + +func checkColumnValueConstraint(col *table.Column, collation string) error { + if col.GetType() != mysql.TypeEnum && col.GetType() != mysql.TypeSet { + return nil + } + valueMap := make(map[string]bool, len(col.GetElems())) + ctor := collate.GetCollator(collation) + enumLengthLimit := config.GetGlobalConfig().EnableEnumLengthLimit + desc, err := charset.GetCharsetInfo(col.GetCharset()) + if err != nil { + return errors.Trace(err) + } + for i := range col.GetElems() { + val := string(ctor.Key(col.GetElems()[i])) + // According to MySQL 8.0 Refman: + // The maximum supported length of an individual ENUM element is M <= 255 and (M x w) <= 1020, + // where M is the element literal length and w is the number of bytes required for the maximum-length character in the character set. + // See https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html for more details. + if enumLengthLimit && (len(val) > 255 || len(val)*desc.Maxlen > 1020) { + return dbterror.ErrTooLongValueForType.GenWithStackByArgs(col.Name) + } + if _, ok := valueMap[val]; ok { + tpStr := "ENUM" + if col.GetType() == mysql.TypeSet { + tpStr = "SET" + } + return types.ErrDuplicatedValueInType.GenWithStackByArgs(col.Name, col.GetElems()[i], tpStr) + } + valueMap[val] = true + } + return nil +} + +// checkColumnDefaultValue checks the default value of the column. +// In non-strict SQL mode, if the default value of the column is an empty string, the default value can be ignored. +// In strict SQL mode, TEXT/BLOB/JSON can't have not null default values. +// In NO_ZERO_DATE SQL mode, TIMESTAMP/DATE/DATETIME type can't have zero date like '0000-00-00' or '0000-00-00 00:00:00'. +func checkColumnDefaultValue(ctx exprctx.BuildContext, col *table.Column, value any) (bool, any, error) { + hasDefaultValue := true + if value != nil && (col.GetType() == mysql.TypeJSON || + col.GetType() == mysql.TypeTinyBlob || col.GetType() == mysql.TypeMediumBlob || + col.GetType() == mysql.TypeLongBlob || col.GetType() == mysql.TypeBlob) { + // In non-strict SQL mode. + if !ctx.GetEvalCtx().SQLMode().HasStrictMode() && value == "" { + if col.GetType() == mysql.TypeBlob || col.GetType() == mysql.TypeLongBlob { + // The TEXT/BLOB default value can be ignored. + hasDefaultValue = false + } + // In non-strict SQL mode, if the column type is json and the default value is null, it is initialized to an empty array. + if col.GetType() == mysql.TypeJSON { + value = `null` + } + ctx.GetEvalCtx().AppendWarning(dbterror.ErrBlobCantHaveDefault.FastGenByArgs(col.Name.O)) + return hasDefaultValue, value, nil + } + // In strict SQL mode or default value is not an empty string. + return hasDefaultValue, value, dbterror.ErrBlobCantHaveDefault.GenWithStackByArgs(col.Name.O) + } + if value != nil && ctx.GetEvalCtx().SQLMode().HasNoZeroDateMode() && + ctx.GetEvalCtx().SQLMode().HasStrictMode() && types.IsTypeTime(col.GetType()) { + if vv, ok := value.(string); ok { + timeValue, err := expression.GetTimeValue(ctx, vv, col.GetType(), col.GetDecimal(), nil) + if err != nil { + return hasDefaultValue, value, errors.Trace(err) + } + if timeValue.GetMysqlTime().CoreTime() == types.ZeroCoreTime { + return hasDefaultValue, value, types.ErrInvalidDefault.GenWithStackByArgs(col.Name.O) + } + } + } + return hasDefaultValue, value, nil +} + +func checkSequenceDefaultValue(col *table.Column) error { + if mysql.IsIntegerType(col.GetType()) { + return nil + } + return dbterror.ErrColumnTypeUnsupportedNextValue.GenWithStackByArgs(col.ColumnInfo.Name.O) +} + +func convertTimestampDefaultValToUTC(ctx sessionctx.Context, defaultVal any, col *table.Column) (any, error) { + if defaultVal == nil || col.GetType() != mysql.TypeTimestamp { + return defaultVal, nil + } + if vv, ok := defaultVal.(string); ok { + if vv != types.ZeroDatetimeStr && !strings.EqualFold(vv, ast.CurrentTimestamp) { + t, err := types.ParseTime(ctx.GetSessionVars().StmtCtx.TypeCtx(), vv, col.GetType(), col.GetDecimal()) + if err != nil { + return defaultVal, errors.Trace(err) + } + err = t.ConvertTimeZone(ctx.GetSessionVars().Location(), time.UTC) + if err != nil { + return defaultVal, errors.Trace(err) + } + defaultVal = t.String() + } + } + return defaultVal, nil +} + +// processColumnFlags is used by columnDefToCol and processColumnOptions. It is intended to unify behaviors on `create/add` and `modify/change` statements. Check tidb#issue#19342. +func processColumnFlags(col *table.Column) { + if col.FieldType.EvalType().IsStringKind() { + if col.GetCharset() == charset.CharsetBin { + col.AddFlag(mysql.BinaryFlag) + } else { + col.DelFlag(mysql.BinaryFlag) + } + } + if col.GetType() == mysql.TypeBit { + // For BIT field, it's charset is binary but does not have binary flag. + col.DelFlag(mysql.BinaryFlag) + col.AddFlag(mysql.UnsignedFlag) + } + if col.GetType() == mysql.TypeYear { + // For Year field, it's charset is binary but does not have binary flag. + col.DelFlag(mysql.BinaryFlag) + col.AddFlag(mysql.ZerofillFlag) + } + + // If you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to the column. + // See https://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html for more details. + // But some types like bit and year, won't show its unsigned flag in `show create table`. + if mysql.HasZerofillFlag(col.GetFlag()) { + col.AddFlag(mysql.UnsignedFlag) + } +} + +func adjustBlobTypesFlen(tp *types.FieldType, colCharset string) error { + cs, err := charset.GetCharsetInfo(colCharset) + // when we meet the unsupported charset, we do not adjust. + if err != nil { + return err + } + l := tp.GetFlen() * cs.Maxlen + if tp.GetType() == mysql.TypeBlob { + if l <= tinyBlobMaxLength { + logutil.DDLLogger().Info(fmt.Sprintf("Automatically convert BLOB(%d) to TINYBLOB", tp.GetFlen())) + tp.SetFlen(tinyBlobMaxLength) + tp.SetType(mysql.TypeTinyBlob) + } else if l <= blobMaxLength { + tp.SetFlen(blobMaxLength) + } else if l <= mediumBlobMaxLength { + logutil.DDLLogger().Info(fmt.Sprintf("Automatically convert BLOB(%d) to MEDIUMBLOB", tp.GetFlen())) + tp.SetFlen(mediumBlobMaxLength) + tp.SetType(mysql.TypeMediumBlob) + } else if l <= longBlobMaxLength { + logutil.DDLLogger().Info(fmt.Sprintf("Automatically convert BLOB(%d) to LONGBLOB", tp.GetFlen())) + tp.SetFlen(longBlobMaxLength) + tp.SetType(mysql.TypeLongBlob) + } + } + return nil +} diff --git a/pkg/ddl/backfilling.go b/pkg/ddl/backfilling.go index 6e11fd7e5eb59..49fa029d7e59a 100644 --- a/pkg/ddl/backfilling.go +++ b/pkg/ddl/backfilling.go @@ -162,13 +162,13 @@ type backfillCtx struct { schemaName string table table.Table batchCnt int - jobContext *JobContext + jobContext *ReorgContext metricCounter prometheus.Counter } func newBackfillCtx(id int, rInfo *reorgInfo, - schemaName string, tbl table.Table, jobCtx *JobContext, label string, isDistributed bool) (*backfillCtx, error) { - sessCtx, err := newSessCtx(rInfo.d.store, rInfo.ReorgMeta) + schemaName string, tbl table.Table, jobCtx *ReorgContext, label string, isDistributed bool) (*backfillCtx, error) { + sessCtx, err := newSessCtx(rInfo.jobCtx.store, rInfo.ReorgMeta) if err != nil { return nil, err } @@ -178,9 +178,10 @@ func newBackfillCtx(id int, rInfo *reorgInfo, } exprCtx := sessCtx.GetExprCtx() + batchCnt := rInfo.ReorgMeta.GetBatchSizeOrDefault(int(variable.GetDDLReorgBatchSize())) return &backfillCtx{ id: id, - ddlCtx: rInfo.d, + ddlCtx: rInfo.jobCtx.oldDDLCtx, sessCtx: sessCtx, warnings: sessCtx.GetSessionVars().StmtCtx.WarnHandler, exprCtx: exprCtx, @@ -188,7 +189,7 @@ func newBackfillCtx(id int, rInfo *reorgInfo, loc: exprCtx.GetEvalCtx().Location(), schemaName: schemaName, table: tbl, - batchCnt: int(variable.GetDDLReorgBatchSize()), + batchCnt: batchCnt, jobContext: jobCtx, metricCounter: metrics.BackfillTotalCounter.WithLabelValues( metrics.GenerateReorgLabel(label, schemaName, tbl.Meta().Name.String())), @@ -415,7 +416,8 @@ func (w *backfillWorker) run(d *ddlCtx, bf backfiller, job *model.Job) { }) // Change the batch size dynamically. - w.GetCtx().batchCnt = int(variable.GetDDLReorgBatchSize()) + newBatchCnt := job.ReorgMeta.GetBatchSizeOrDefault(int(variable.GetDDLReorgBatchSize())) + w.GetCtx().batchCnt = newBatchCnt result := w.handleBackfillTask(d, task, bf) w.sendResult(result) @@ -450,6 +452,11 @@ func loadTableRanges( zap.Int64("physicalTableID", t.GetPhysicalID())) return []kv.KeyRange{{StartKey: startKey, EndKey: endKey}}, nil } + failpoint.Inject("setLimitForLoadTableRanges", func(val failpoint.Value) { + if v, ok := val.(int); ok { + limit = v + } + }) rc := s.GetRegionCache() maxSleep := 10000 // ms @@ -464,6 +471,12 @@ func loadTableRanges( if err != nil { return false, errors.Trace(err) } + var mockErr bool + failpoint.InjectCall("beforeLoadRangeFromPD", &mockErr) + if mockErr { + return false, kv.ErrTxnRetryable + } + ranges = make([]kv.KeyRange, 0, len(rs)) for _, r := range rs { ranges = append(ranges, kv.KeyRange{StartKey: r.StartKey(), EndKey: r.EndKey()}) @@ -568,7 +581,7 @@ func getActualEndKey( // backfill worker can't catch up, we shrink the end key to the actual written key for now. jobCtx := reorgInfo.NewJobContext() - actualEndKey, err := GetRangeEndKey(jobCtx, reorgInfo.d.store, job.Priority, t.RecordPrefix(), rangeStart, rangeEnd) + actualEndKey, err := GetRangeEndKey(jobCtx, reorgInfo.jobCtx.store, job.Priority, t.RecordPrefix(), rangeStart, rangeEnd) if err != nil { logutil.DDLLogger().Info("get backfill range task, get reverse key failed", zap.Error(err)) return rangeEnd @@ -634,12 +647,7 @@ func makeupDecodeColMap(dbName model.CIStr, t table.Table) (map[int64]decoder.Co return decodeColMap, nil } -var backfillTaskChanSize = 128 - -// SetBackfillTaskChanSizeForTest is only used for test. -func SetBackfillTaskChanSizeForTest(n int) { - backfillTaskChanSize = n -} +const backfillTaskChanSize = 128 func (dc *ddlCtx) runAddIndexInLocalIngestMode( ctx context.Context, @@ -675,8 +683,9 @@ func (dc *ddlCtx) runAddIndexInLocalIngestMode( //nolint: forcetypeassert discovery := dc.store.(tikv.Storage).GetRegionCache().PDClient().GetServiceDiscovery() + importConc := job.ReorgMeta.GetConcurrencyOrDefault(int(variable.GetDDLReorgWorkerCounter())) bcCtx, err := ingest.LitBackCtxMgr.Register( - ctx, job.ID, hasUnique, dc.etcdCli, discovery, job.ReorgMeta.ResourceGroupName) + ctx, job.ID, hasUnique, dc.etcdCli, discovery, job.ReorgMeta.ResourceGroupName, importConc) if err != nil { return errors.Trace(err) } @@ -705,16 +714,15 @@ func (dc *ddlCtx) runAddIndexInLocalIngestMode( bcCtx.AttachCheckpointManager(cpMgr) } - reorgCtx := dc.getReorgCtx(reorgInfo.Job.ID) + reorgCtx := dc.getReorgCtx(job.ID) rowCntListener := &localRowCntListener{ prevPhysicalRowCnt: reorgCtx.getRowCount(), - reorgCtx: dc.getReorgCtx(reorgInfo.Job.ID), + reorgCtx: reorgCtx, counter: metrics.BackfillTotalCounter.WithLabelValues( metrics.GenerateReorgLabel("add_idx_rate", job.SchemaName, job.TableName)), } avgRowSize := estimateTableRowSize(ctx, dc.store, sctx.GetRestrictedSQLExecutor(), t) - concurrency := int(variable.GetDDLReorgWorkerCounter()) engines, err := bcCtx.Register(indexIDs, uniques, t) if err != nil { @@ -724,7 +732,6 @@ func (dc *ddlCtx) runAddIndexInLocalIngestMode( zap.Int64s("index IDs", indexIDs)) return errors.Trace(err) } - pipe, err := NewAddIndexIngestPipeline( opCtx, dc.store, @@ -738,7 +745,7 @@ func (dc *ddlCtx) runAddIndexInLocalIngestMode( reorgInfo.EndKey, job.ReorgMeta, avgRowSize, - concurrency, + importConc, cpMgr, rowCntListener, ) @@ -782,12 +789,17 @@ type localRowCntListener struct { // prevPhysicalRowCnt records the row count from previous physical tables (partitions). prevPhysicalRowCnt int64 // curPhysicalRowCnt records the row count of current physical table. - curPhysicalRowCnt int64 + curPhysicalRowCnt struct { + cnt int64 + mu sync.Mutex + } } func (s *localRowCntListener) Written(rowCnt int) { - s.curPhysicalRowCnt += int64(rowCnt) - s.reorgCtx.setRowCount(s.prevPhysicalRowCnt + s.curPhysicalRowCnt) + s.curPhysicalRowCnt.mu.Lock() + s.curPhysicalRowCnt.cnt += int64(rowCnt) + s.reorgCtx.setRowCount(s.prevPhysicalRowCnt + s.curPhysicalRowCnt.cnt) + s.curPhysicalRowCnt.mu.Unlock() s.counter.Add(float64(rowCnt)) } @@ -970,7 +982,7 @@ func injectCheckBackfillWorkerNum(curWorkerSize int, isMergeWorker bool) error { // recordIterFunc is used for low-level record iteration. type recordIterFunc func(h kv.Handle, rowKey kv.Key, rawRecord []byte) (more bool, err error) -func iterateSnapshotKeys(ctx *JobContext, store kv.Storage, priority int, keyPrefix kv.Key, version uint64, +func iterateSnapshotKeys(ctx *ReorgContext, store kv.Storage, priority int, keyPrefix kv.Key, version uint64, startKey kv.Key, endKey kv.Key, fn recordIterFunc) error { isRecord := tablecodec.IsRecordKey(keyPrefix.Next()) var firstKey kv.Key @@ -1035,7 +1047,7 @@ func iterateSnapshotKeys(ctx *JobContext, store kv.Storage, priority int, keyPre } // GetRangeEndKey gets the actual end key for the range of [startKey, endKey). -func GetRangeEndKey(ctx *JobContext, store kv.Storage, priority int, keyPrefix kv.Key, startKey, endKey kv.Key) (kv.Key, error) { +func GetRangeEndKey(ctx *ReorgContext, store kv.Storage, priority int, keyPrefix kv.Key, startKey, endKey kv.Key) (kv.Key, error) { snap := store.GetSnapshot(kv.MaxVersion) snap.SetOption(kv.Priority, priority) if tagger := ctx.getResourceGroupTaggerForTopSQL(); tagger != nil { diff --git a/pkg/ddl/backfilling_dist_executor.go b/pkg/ddl/backfilling_dist_executor.go index c099c99750410..b635ddd83608c 100644 --- a/pkg/ddl/backfilling_dist_executor.go +++ b/pkg/ddl/backfilling_dist_executor.go @@ -28,6 +28,7 @@ import ( "github.com/pingcap/tidb/pkg/lightning/common" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/terror" + "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/table" "github.com/pingcap/tidb/pkg/util/dbterror" "github.com/tikv/client-go/v2/tikv" @@ -147,7 +148,14 @@ func (s *backfillDistExecutor) getBackendCtx() (ingest.BackendCtx, error) { ddlObj := s.d discovery := ddlObj.store.(tikv.Storage).GetRegionCache().PDClient().GetServiceDiscovery() - return ingest.LitBackCtxMgr.Register(s.BaseTaskExecutor.Ctx(), job.ID, hasUnique, ddlObj.etcdCli, discovery, job.ReorgMeta.ResourceGroupName) + return ingest.LitBackCtxMgr.Register( + s.BaseTaskExecutor.Ctx(), + job.ID, hasUnique, + ddlObj.etcdCli, + discovery, + job.ReorgMeta.ResourceGroupName, + job.ReorgMeta.GetConcurrencyOrDefault(int(variable.GetDDLReorgWorkerCounter())), + ) } func hasUniqueIndex(job *model.Job) (bool, error) { diff --git a/pkg/ddl/backfilling_dist_scheduler.go b/pkg/ddl/backfilling_dist_scheduler.go index 55abe4225da12..e73a7bb1122f3 100644 --- a/pkg/ddl/backfilling_dist_scheduler.go +++ b/pkg/ddl/backfilling_dist_scheduler.go @@ -257,7 +257,7 @@ func generateNonPartitionPlan( return nil, errors.Trace(err) } - startKey, endKey, err := getTableRange(d.jobContext(job.ID, job.ReorgMeta), d.ddlCtx, tbl.(table.PhysicalTable), ver.Ver, job.Priority) + startKey, endKey, err := getTableRange(d.jobContext(job.ID, job.ReorgMeta), d.store, tbl.(table.PhysicalTable), ver.Ver, job.Priority) if startKey == nil && endKey == nil { // Empty table. return nil, nil @@ -294,7 +294,7 @@ func generateNonPartitionPlan( return true, nil } - regionBatch := calculateRegionBatch(len(recordRegionMetas), instanceCnt, !useCloud) + regionBatch := CalculateRegionBatch(len(recordRegionMetas), instanceCnt, !useCloud) for i := 0; i < len(recordRegionMetas); i += regionBatch { end := i + regionBatch @@ -329,7 +329,8 @@ func generateNonPartitionPlan( return subTaskMetas, nil } -func calculateRegionBatch(totalRegionCnt int, instanceCnt int, useLocalDisk bool) int { +// CalculateRegionBatch is exported for test. +func CalculateRegionBatch(totalRegionCnt int, instanceCnt int, useLocalDisk bool) int { failpoint.Inject("mockRegionBatch", func(val failpoint.Value) { failpoint.Return(val.(int)) }) diff --git a/pkg/ddl/backfilling_dist_scheduler_test.go b/pkg/ddl/backfilling_dist_scheduler_test.go index 3d08208317b2a..6e4f1f32c9264 100644 --- a/pkg/ddl/backfilling_dist_scheduler_test.go +++ b/pkg/ddl/backfilling_dist_scheduler_test.go @@ -113,19 +113,19 @@ func TestBackfillingSchedulerLocalMode(t *testing.T) { func TestCalculateRegionBatch(t *testing.T) { // Test calculate in cloud storage. - batchCnt := ddl.CalculateRegionBatchForTest(100, 8, false) + batchCnt := ddl.CalculateRegionBatch(100, 8, false) require.Equal(t, 13, batchCnt) - batchCnt = ddl.CalculateRegionBatchForTest(2, 8, false) + batchCnt = ddl.CalculateRegionBatch(2, 8, false) require.Equal(t, 1, batchCnt) - batchCnt = ddl.CalculateRegionBatchForTest(8, 8, false) + batchCnt = ddl.CalculateRegionBatch(8, 8, false) require.Equal(t, 1, batchCnt) // Test calculate in local storage. - batchCnt = ddl.CalculateRegionBatchForTest(100, 8, true) + batchCnt = ddl.CalculateRegionBatch(100, 8, true) require.Equal(t, 13, batchCnt) - batchCnt = ddl.CalculateRegionBatchForTest(2, 8, true) + batchCnt = ddl.CalculateRegionBatch(2, 8, true) require.Equal(t, 1, batchCnt) - batchCnt = ddl.CalculateRegionBatchForTest(24, 8, true) + batchCnt = ddl.CalculateRegionBatch(24, 8, true) require.Equal(t, 3, batchCnt) } diff --git a/pkg/ddl/backfilling_operators.go b/pkg/ddl/backfilling_operators.go index 5ae5554ef290b..201c09702af80 100644 --- a/pkg/ddl/backfilling_operators.go +++ b/pkg/ddl/backfilling_operators.go @@ -171,15 +171,11 @@ func NewAddIndexIngestPipeline( if err != nil { return nil, err } - poolSize := copReadChunkPoolSize() - srcChkPool := make(chan *chunk.Chunk, poolSize) - for i := 0; i < poolSize; i++ { - srcChkPool <- chunk.NewChunkWithCapacity(copCtx.GetBase().FieldTypes, copReadBatchSize()) - } + srcChkPool := createChunkPool(copCtx, concurrency, reorgMeta.BatchSize) readerCnt, writerCnt := expectedIngestWorkerCnt(concurrency, avgRowSize) srcOp := NewTableScanTaskSource(ctx, store, tbl, startKey, endKey, cpMgr) - scanOp := NewTableScanOperator(ctx, sessPool, copCtx, srcChkPool, readerCnt, cpMgr) + scanOp := NewTableScanOperator(ctx, sessPool, copCtx, srcChkPool, readerCnt, cpMgr, reorgMeta.BatchSize) ingestOp := NewIndexIngestOperator(ctx, copCtx, backendCtx, sessPool, tbl, indexes, engines, srcChkPool, writerCnt, reorgMeta, cpMgr, rowCntListener) sinkOp := newIndexWriteResultSink(ctx, backendCtx, tbl, indexes, cpMgr, rowCntListener) @@ -226,11 +222,7 @@ func NewWriteIndexToExternalStoragePipeline( if err != nil { return nil, err } - poolSize := copReadChunkPoolSize() - srcChkPool := make(chan *chunk.Chunk, poolSize) - for i := 0; i < poolSize; i++ { - srcChkPool <- chunk.NewChunkWithCapacity(copCtx.GetBase().FieldTypes, copReadBatchSize()) - } + srcChkPool := createChunkPool(copCtx, concurrency, reorgMeta.BatchSize) readerCnt, writerCnt := expectedIngestWorkerCnt(concurrency, avgRowSize) backend, err := storage.ParseBackend(extStoreURI, nil) @@ -248,7 +240,7 @@ func NewWriteIndexToExternalStoragePipeline( }) srcOp := NewTableScanTaskSource(ctx, store, tbl, startKey, endKey, nil) - scanOp := NewTableScanOperator(ctx, sessPool, copCtx, srcChkPool, readerCnt, nil) + scanOp := NewTableScanOperator(ctx, sessPool, copCtx, srcChkPool, readerCnt, nil, reorgMeta.BatchSize) writeOp := NewWriteExternalStoreOperator( ctx, copCtx, sessPool, jobID, subtaskID, tbl, indexes, extStore, srcChkPool, writerCnt, onClose, memSizePerIndex, reorgMeta) sinkOp := newIndexWriteResultSink(ctx, nil, tbl, indexes, nil, rowCntListener) @@ -270,6 +262,16 @@ func NewWriteIndexToExternalStoragePipeline( ), nil } +func createChunkPool(copCtx copr.CopContext, hintConc, hintBatchSize int) chan *chunk.Chunk { + poolSize := ingest.CopReadChunkPoolSize(hintConc) + batchSize := ingest.CopReadBatchSize(hintBatchSize) + srcChkPool := make(chan *chunk.Chunk, poolSize) + for i := 0; i < poolSize; i++ { + srcChkPool <- chunk.NewChunkWithCapacity(copCtx.GetBase().FieldTypes, batchSize) + } + return srcChkPool +} + // TableScanTask contains the start key and the end key of a region. type TableScanTask struct { ID int @@ -344,7 +346,7 @@ func (src *TableScanTaskSource) adjustStartKey(start, end kv.Key) (adjusted kv.K if src.cpMgr == nil { return start, false } - cpKey := src.cpMgr.LastProcessedKey() + cpKey := src.cpMgr.NextKeyToProcess() if len(cpKey) == 0 { return start, false } @@ -362,7 +364,7 @@ func (src *TableScanTaskSource) adjustStartKey(start, end kv.Key) (adjusted kv.K if cpKey.Cmp(end) == 0 { return cpKey, true } - return cpKey.Next(), false + return cpKey, false } func (src *TableScanTaskSource) generateTasks() error { @@ -457,6 +459,7 @@ func NewTableScanOperator( srcChkPool chan *chunk.Chunk, concurrency int, cpMgr *ingest.CheckpointManager, + hintBatchSize int, ) *TableScanOperator { pool := workerpool.NewWorkerPool( "TableScanOperator", @@ -464,12 +467,13 @@ func NewTableScanOperator( concurrency, func() workerpool.Worker[TableScanTask, IndexRecordChunk] { return &tableScanWorker{ - ctx: ctx, - copCtx: copCtx, - sessPool: sessPool, - se: nil, - srcChkPool: srcChkPool, - cpMgr: cpMgr, + ctx: ctx, + copCtx: copCtx, + sessPool: sessPool, + se: nil, + srcChkPool: srcChkPool, + cpMgr: cpMgr, + hintBatchSize: hintBatchSize, } }) return &TableScanOperator{ @@ -484,7 +488,8 @@ type tableScanWorker struct { se *session.Session srcChkPool chan *chunk.Chunk - cpMgr *ingest.CheckpointManager + cpMgr *ingest.CheckpointManager + hintBatchSize int } func (w *tableScanWorker) HandleTask(task TableScanTask, sender func(IndexRecordChunk)) { @@ -554,7 +559,7 @@ func (w *tableScanWorker) scanRecords(task TableScanTask, sender func(IndexRecor func (w *tableScanWorker) getChunk() *chunk.Chunk { chk := <-w.srcChkPool - newCap := copReadBatchSize() + newCap := ingest.CopReadBatchSize(w.hintBatchSize) if chk.Capacity() != newCap { chk = chunk.NewChunkWithCapacity(w.copCtx.GetBase().FieldTypes, newCap) } diff --git a/pkg/ddl/backfilling_read_index.go b/pkg/ddl/backfilling_read_index.go index 0c5ce7a62a538..a902a81a8a040 100644 --- a/pkg/ddl/backfilling_read_index.go +++ b/pkg/ddl/backfilling_read_index.go @@ -44,7 +44,7 @@ type readIndexExecutor struct { job *model.Job indexes []*model.IndexInfo ptbl table.PhysicalTable - jc *JobContext + jc *ReorgContext avgRowSize int cloudStorageURI string @@ -65,7 +65,7 @@ func newReadIndexExecutor( job *model.Job, indexes []*model.IndexInfo, ptbl table.PhysicalTable, - jc *JobContext, + jc *ReorgContext, bcGetter func() (ingest.BackendCtx, error), cloudStorageURI string, avgRowSize int, @@ -191,7 +191,7 @@ func (r *readIndexExecutor) getTableStartEndKey(sm *BackfillSubTaskMeta) ( } if parTbl, ok := r.ptbl.(table.PartitionedTable); ok { pid := sm.PhysicalTableID - start, end, err = getTableRange(r.jc, r.d.ddlCtx, parTbl.GetPartition(pid), currentVer.Ver, r.job.Priority) + start, end, err = getTableRange(r.jc, r.d.store, parTbl.GetPartition(pid), currentVer.Ver, r.job.Priority) if err != nil { logutil.DDLLogger().Error("get table range error", zap.Error(err)) diff --git a/pkg/ddl/backfilling_scheduler.go b/pkg/ddl/backfilling_scheduler.go index dc0201729787c..d37f6ccb7c15a 100644 --- a/pkg/ddl/backfilling_scheduler.go +++ b/pkg/ddl/backfilling_scheduler.go @@ -68,7 +68,7 @@ type txnBackfillScheduler struct { tp backfillerType tbl table.PhysicalTable decodeColMap map[int64]decoder.Column - jobCtx *JobContext + jobCtx *ReorgContext workers []*backfillWorker wg sync.WaitGroup @@ -80,11 +80,12 @@ type txnBackfillScheduler struct { func newTxnBackfillScheduler(ctx context.Context, info *reorgInfo, sessPool *sess.Pool, tp backfillerType, tbl table.PhysicalTable, - jobCtx *JobContext) (backfillScheduler, error) { + jobCtx *ReorgContext) (backfillScheduler, error) { decColMap, err := makeupDecodeColMap(info.dbInfo.Name, tbl) if err != nil { return nil, err } + workerCnt := info.ReorgMeta.GetConcurrencyOrDefault(int(variable.GetDDLReorgWorkerCounter())) return &txnBackfillScheduler{ ctx: ctx, reorgInfo: info, @@ -93,7 +94,7 @@ func newTxnBackfillScheduler(ctx context.Context, info *reorgInfo, sessPool *ses tbl: tbl, decodeColMap: decColMap, jobCtx: jobCtx, - workers: make([]*backfillWorker, 0, variable.GetDDLReorgWorkerCounter()), + workers: make([]*backfillWorker, 0, workerCnt), taskCh: make(chan *reorgBackfillTask, backfillTaskChanSize), resultCh: make(chan *backfillResult, backfillTaskChanSize), }, nil @@ -230,8 +231,8 @@ func restoreSessCtx(sessCtx sessionctx.Context) func(sessCtx sessionctx.Context) } } -func (*txnBackfillScheduler) expectedWorkerSize() (size int) { - workerCnt := int(variable.GetDDLReorgWorkerCounter()) +func (b *txnBackfillScheduler) expectedWorkerSize() (size int) { + workerCnt := b.reorgInfo.ReorgMeta.GetConcurrencyOrDefault(int(variable.GetDDLReorgWorkerCounter())) return min(workerCnt, maxBackfillWorkerSize) } @@ -304,7 +305,7 @@ func (b *txnBackfillScheduler) adjustWorkerSize() error { runner.wg = &b.wg b.workers = append(b.workers, runner) b.wg.Add(1) - go runner.run(reorgInfo.d, worker, job) + go runner.run(reorgInfo.jobCtx.oldDDLCtx, worker, job) } // Decrease the worker. if len(b.workers) > workerCnt { diff --git a/pkg/ddl/bench_test.go b/pkg/ddl/bench_test.go index e0702e1ed367d..f778e4a5c6ec6 100644 --- a/pkg/ddl/bench_test.go +++ b/pkg/ddl/bench_test.go @@ -53,7 +53,7 @@ func BenchmarkExtractDatumByOffsets(b *testing.B) { endKey := startKey.PrefixNext() txn, err := store.Begin() require.NoError(b, err) - copChunk := ddl.FetchChunk4Test(copCtx, tbl.(table.PhysicalTable), startKey, endKey, store, 10) + copChunk, err := FetchChunk4Test(copCtx, tbl.(table.PhysicalTable), startKey, endKey, store, 10) require.NoError(b, err) require.NoError(b, txn.Rollback()) @@ -66,7 +66,7 @@ func BenchmarkExtractDatumByOffsets(b *testing.B) { b.ResetTimer() for i := 0; i < b.N; i++ { - ddl.ExtractDatumByOffsetsForTest(tk.Session().GetExprCtx().GetEvalCtx(), row, offsets, c.ExprColumnInfos, handleDataBuf) + ddl.ExtractDatumByOffsets(tk.Session().GetExprCtx().GetEvalCtx(), row, offsets, c.ExprColumnInfos, handleDataBuf) } } diff --git a/pkg/ddl/callback.go b/pkg/ddl/callback.go deleted file mode 100644 index 7f51a61cc29f8..0000000000000 --- a/pkg/ddl/callback.go +++ /dev/null @@ -1,126 +0,0 @@ -// Copyright 2015 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package ddl - -import ( - "fmt" - "strings" - "time" - - "github.com/pingcap/errors" - "github.com/pingcap/log" - "github.com/pingcap/tidb/pkg/ddl/logutil" - "github.com/pingcap/tidb/pkg/parser/model" - "go.uber.org/zap" -) - -// Callback is used for DDL. -type Callback interface { - // OnJobRunBefore is called before running job. - OnJobRunBefore(job *model.Job) - // OnJobRunAfter is called after running job. - OnJobRunAfter(job *model.Job) - // OnJobUpdated is called after the running job is updated. - OnJobUpdated(job *model.Job) -} - -// BaseCallback implements Callback.OnChanged interface. -type BaseCallback struct { -} - -// OnJobRunBefore implements Callback.OnJobRunBefore interface. -func (*BaseCallback) OnJobRunBefore(_ *model.Job) { - // Nothing to do. -} - -// OnJobRunAfter implements Callback.OnJobRunAfter interface. -func (*BaseCallback) OnJobRunAfter(_ *model.Job) { - // Nothing to do. -} - -// OnJobUpdated implements Callback.OnJobUpdated interface. -func (*BaseCallback) OnJobUpdated(_ *model.Job) { - // Nothing to do. -} - -// SchemaLoader is used to avoid import loop, the only impl is domain currently. -type SchemaLoader interface { - Reload() error -} - -// ****************************** Start of Customized DDL Callback Instance **************************************** - -// DefaultCallback is the default callback that TiDB will use. -type DefaultCallback struct { - *BaseCallback - do SchemaLoader -} - -func newDefaultCallBack(do SchemaLoader) Callback { - return &DefaultCallback{BaseCallback: &BaseCallback{}, do: do} -} - -// ****************************** End of Default DDL Callback Instance ********************************************* - -// ****************************** Start of CTC DDL Callback Instance *********************************************** - -// ctcCallback is the customized callback that TiDB will use. -// ctc is named from column type change, here after we call them ctc for short. -type ctcCallback struct { - *BaseCallback - do SchemaLoader -} - -// OnJobRunBefore is used to run the user customized logic of `onJobRunBefore` first. -func (*ctcCallback) OnJobRunBefore(job *model.Job) { - log.Info("on job run before", zap.String("job", job.String())) - // Only block the ctc type ddl here. - if job.Type != model.ActionModifyColumn { - return - } - switch job.SchemaState { - case model.StateDeleteOnly, model.StateWriteOnly, model.StateWriteReorganization: - logutil.DDLLogger().Warn(fmt.Sprintf("[DDL_HOOK] Hang for 0.5 seconds on %s state triggered", job.SchemaState.String())) - time.Sleep(500 * time.Millisecond) - } -} - -func newCTCCallBack(do SchemaLoader) Callback { - return &ctcCallback{do: do} -} - -// ****************************** End of CTC DDL Callback Instance *************************************************** - -var ( - customizedCallBackRegisterMap = map[string]func(do SchemaLoader) Callback{} -) - -func init() { - // init the callback register map. - customizedCallBackRegisterMap["default_hook"] = newDefaultCallBack - customizedCallBackRegisterMap["ctc_hook"] = newCTCCallBack -} - -// GetCustomizedHook get the hook registered in the hookMap. -func GetCustomizedHook(s string) (func(do SchemaLoader) Callback, error) { - s = strings.ToLower(s) - s = strings.TrimSpace(s) - fact, ok := customizedCallBackRegisterMap[s] - if !ok { - logutil.DDLLogger().Error("bad ddl hook " + s) - return nil, errors.Errorf("ddl hook `%s` is not found in hook registered map", s) - } - return fact, nil -} diff --git a/pkg/ddl/cancel_test.go b/pkg/ddl/cancel_test.go index f84563f91b5e2..97272226ecd91 100644 --- a/pkg/ddl/cancel_test.go +++ b/pkg/ddl/cancel_test.go @@ -24,7 +24,6 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/ddl" "github.com/pingcap/tidb/pkg/ddl/testutil" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/errno" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/testkit" @@ -214,7 +213,7 @@ func TestCancel(t *testing.T) { return enterCnt.Load() == exitCnt.Load() }, 10*time.Second, 10*time.Millisecond) } - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, 100*time.Millisecond) + store := testkit.CreateMockStoreWithSchemaLease(t, 100*time.Millisecond) tk := testkit.NewTestKit(t, store) tkCancel := testkit.NewTestKit(t, store) @@ -243,8 +242,8 @@ func TestCancel(t *testing.T) { // Change some configurations. ddl.ReorgWaitTimeout = 10 * time.Millisecond - tk.MustExec("set @@global.tidb_ddl_reorg_batch_size = 8") - tk.MustExec("set @@global.tidb_ddl_reorg_worker_cnt = 1") + tk.MustExec("set @@tidb_ddl_reorg_batch_size = 8") + tk.MustExec("set @@tidb_ddl_reorg_worker_cnt = 1") tk = testkit.NewTestKit(t, store) tk.MustExec("use test") require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/ddl/mockBackfillSlow", "return")) @@ -252,7 +251,6 @@ func TestCancel(t *testing.T) { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/mockBackfillSlow")) }() - hook := &callback.TestDDLCallback{Do: dom} i := atomicutil.NewInt64(0) canceled := atomicutil.NewBool(false) cancelResult := atomicutil.NewBool(false) @@ -268,20 +266,17 @@ func TestCancel(t *testing.T) { canceled.Store(true) } } - dom.DDL().SetHook(hook.Clone()) - resetHook := func(h *callback.TestDDLCallback) { - h.OnJobRunBeforeExported = nil - h.OnJobUpdatedExported.Store(nil) - dom.DDL().SetHook(h.Clone()) + resetHook := func() { + _ = failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/onJobUpdated") + _ = failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/onJobRunBefore") } - registerHook := func(h *callback.TestDDLCallback, onJobRunBefore bool) { + registerHook := func(onJobRunBefore bool) { if onJobRunBefore { - h.OnJobRunBeforeExported = hookFunc + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", hookFunc) } else { - h.OnJobUpdatedExported.Store(&hookFunc) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", hookFunc) } - dom.DDL().SetHook(h.Clone()) } waitDDLWorkerExited() @@ -290,14 +285,14 @@ func TestCancel(t *testing.T) { i.Store(int64(j)) msg := fmt.Sprintf("sql: %s, state: %s", tc.sql, tc.cancelState) if tc.onJobBefore { - resetHook(hook) + resetHook() for _, prepareSQL := range tc.prepareSQL { tk.MustExec(prepareSQL) } waitDDLWorkerExited() canceled.Store(false) cancelWhenReorgNotStart.Store(true) - registerHook(hook, true) + registerHook(true) if tc.expectCancelled { tk.MustGetErrCode(tc.sql, errno.ErrCancelledDDLJob) } else { @@ -309,14 +304,14 @@ func TestCancel(t *testing.T) { } } if tc.onJobUpdate { - resetHook(hook) + resetHook() for _, prepareSQL := range tc.prepareSQL { tk.MustExec(prepareSQL) } waitDDLWorkerExited() canceled.Store(false) cancelWhenReorgNotStart.Store(false) - registerHook(hook, false) + registerHook(false) if tc.expectCancelled { tk.MustGetErrCode(tc.sql, errno.ErrCancelledDDLJob) } else { @@ -331,7 +326,7 @@ func TestCancel(t *testing.T) { } func TestCancelForAddUniqueIndex(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tkCancel := testkit.NewTestKit(t, store) @@ -342,14 +337,12 @@ func TestCancelForAddUniqueIndex(t *testing.T) { tk.MustExec("insert into t values(2, 2, 2)") tk.MustExec("insert into t values(1, 1, 1)") - hook := &callback.TestDDLCallback{Do: dom} var testCancelState model.SchemaState - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.SchemaState == testCancelState && job.State == model.JobStateRollingback { tkCancel.MustExec(fmt.Sprintf("admin cancel ddl jobs %d", job.ID)) } - } - dom.DDL().SetHook(hook.Clone()) + }) testCancelState = model.StateWriteOnly tk.MustGetErrCode("alter table t add unique index idx1(c1)", errno.ErrDupEntry) diff --git a/pkg/ddl/cluster.go b/pkg/ddl/cluster.go index e3b449317f7c7..6dd816aebc939 100644 --- a/pkg/ddl/cluster.go +++ b/pkg/ddl/cluster.go @@ -220,7 +220,7 @@ func checkSystemSchemaID(t *meta.Meta, schemaID int64, flashbackTSString string) return nil } -func checkAndSetFlashbackClusterInfo(ctx context.Context, se sessionctx.Context, d *ddlCtx, t *meta.Meta, job *model.Job, flashbackTS uint64) (err error) { +func checkAndSetFlashbackClusterInfo(ctx context.Context, se sessionctx.Context, store kv.Storage, t *meta.Meta, job *model.Job, flashbackTS uint64) (err error) { if err = ValidateFlashbackTS(ctx, se, flashbackTS); err != nil { return err } @@ -246,7 +246,7 @@ func checkAndSetFlashbackClusterInfo(ctx context.Context, se sessionctx.Context, return errors.Trace(err) } - flashbackSnapshotMeta := meta.NewSnapshotMeta(d.store.GetSnapshot(kv.NewVersion(flashbackTS))) + flashbackSnapshotMeta := meta.NewSnapshotMeta(store.GetSnapshot(kv.NewVersion(flashbackTS))) flashbackSchemaVersion, err := flashbackSnapshotMeta.GetSchemaVersion() if err != nil { return errors.Trace(err) @@ -322,9 +322,9 @@ func addToSlice(schema string, tableName string, tableID int64, flashbackIDs []i return flashbackIDs } -// GetTableDataKeyRanges get keyRanges by `flashbackIDs`. +// getTableDataKeyRanges get keyRanges by `flashbackIDs`. // This func will return all flashback table data key ranges. -func GetTableDataKeyRanges(nonFlashbackTableIDs []int64) []kv.KeyRange { +func getTableDataKeyRanges(nonFlashbackTableIDs []int64) []kv.KeyRange { var keyRanges []kv.KeyRange nonFlashbackTableIDs = append(nonFlashbackTableIDs, -1) @@ -349,11 +349,54 @@ func GetTableDataKeyRanges(nonFlashbackTableIDs []int64) []kv.KeyRange { return keyRanges } -// GetFlashbackKeyRanges get keyRanges for flashback cluster. +type keyRangeMayExclude struct { + r kv.KeyRange + exclude bool +} + +// appendContinuousKeyRanges merges not exclude continuous key ranges and appends +// to given []kv.KeyRange, assuming the gap between key ranges has no data. +// +// Precondition: schemaKeyRanges is sorted by start key. schemaKeyRanges are +// non-overlapping. +func appendContinuousKeyRanges(result []kv.KeyRange, schemaKeyRanges []keyRangeMayExclude) []kv.KeyRange { + var ( + continuousStart, continuousEnd kv.Key + ) + + for _, r := range schemaKeyRanges { + if r.exclude { + if continuousStart != nil { + result = append(result, kv.KeyRange{ + StartKey: continuousStart, + EndKey: continuousEnd, + }) + continuousStart = nil + } + continue + } + + if continuousStart == nil { + continuousStart = r.r.StartKey + } + continuousEnd = r.r.EndKey + } + + if continuousStart != nil { + result = append(result, kv.KeyRange{ + StartKey: continuousStart, + EndKey: continuousEnd, + }) + } + return result +} + +// getFlashbackKeyRanges get keyRanges for flashback cluster. // It contains all non system table key ranges and meta data key ranges. // The time complexity is O(nlogn). -func GetFlashbackKeyRanges(sess sessionctx.Context, flashbackTS uint64) ([]kv.KeyRange, error) { - schemas := sess.GetDomainInfoSchema().(infoschema.InfoSchema).AllSchemas() +func getFlashbackKeyRanges(ctx context.Context, sess sessionctx.Context, flashbackTS uint64) ([]kv.KeyRange, error) { + is := sess.GetDomainInfoSchema().(infoschema.InfoSchema) + schemas := is.AllSchemas() // The semantic of keyRanges(output). keyRanges := make([]kv.KeyRange, 0) @@ -366,27 +409,52 @@ func GetFlashbackKeyRanges(sess sessionctx.Context, flashbackTS uint64) ([]kv.Ke } schemaIDs := make(map[int64]struct{}) + excludeSchemaIDs := make(map[int64]struct{}) for _, schema := range schemas { - if !filter.IsSystemSchema(schema.Name.L) { + if filter.IsSystemSchema(schema.Name.L) { + excludeSchemaIDs[schema.ID] = struct{}{} + } else { schemaIDs[schema.ID] = struct{}{} } } for _, schema := range snapshotSchemas { - if !filter.IsSystemSchema(schema.Name.L) { + if filter.IsSystemSchema(schema.Name.L) { + excludeSchemaIDs[schema.ID] = struct{}{} + } else { schemaIDs[schema.ID] = struct{}{} } } - // The meta data key ranges. + schemaKeyRanges := make([]keyRangeMayExclude, 0, len(schemaIDs)+len(excludeSchemaIDs)) for schemaID := range schemaIDs { metaStartKey := tablecodec.EncodeMetaKeyPrefix(meta.DBkey(schemaID)) metaEndKey := tablecodec.EncodeMetaKeyPrefix(meta.DBkey(schemaID + 1)) - keyRanges = append(keyRanges, kv.KeyRange{ - StartKey: metaStartKey, - EndKey: metaEndKey, + schemaKeyRanges = append(schemaKeyRanges, keyRangeMayExclude{ + r: kv.KeyRange{ + StartKey: metaStartKey, + EndKey: metaEndKey, + }, + exclude: false, + }) + } + for schemaID := range excludeSchemaIDs { + metaStartKey := tablecodec.EncodeMetaKeyPrefix(meta.DBkey(schemaID)) + metaEndKey := tablecodec.EncodeMetaKeyPrefix(meta.DBkey(schemaID + 1)) + schemaKeyRanges = append(schemaKeyRanges, keyRangeMayExclude{ + r: kv.KeyRange{ + StartKey: metaStartKey, + EndKey: metaEndKey, + }, + exclude: true, }) } + slices.SortFunc(schemaKeyRanges, func(a, b keyRangeMayExclude) int { + return bytes.Compare(a.r.StartKey, b.r.StartKey) + }) + + keyRanges = appendContinuousKeyRanges(keyRanges, schemaKeyRanges) + startKey := tablecodec.EncodeMetaKeyPrefix([]byte("DBs")) keyRanges = append(keyRanges, kv.KeyRange{ StartKey: startKey, @@ -395,7 +463,11 @@ func GetFlashbackKeyRanges(sess sessionctx.Context, flashbackTS uint64) ([]kv.Ke var nonFlashbackTableIDs []int64 for _, db := range schemas { - for _, table := range db.Tables { + tbls, err2 := is.SchemaTableInfos(ctx, db.Name) + if err2 != nil { + return nil, errors.Trace(err2) + } + for _, table := range tbls { if !table.IsBaseTable() || table.ID > meta.MaxGlobalID { continue } @@ -408,7 +480,7 @@ func GetFlashbackKeyRanges(sess sessionctx.Context, flashbackTS uint64) ([]kv.Ke } } - return append(keyRanges, GetTableDataKeyRanges(nonFlashbackTableIDs)...), nil + return append(keyRanges, getTableDataKeyRanges(nonFlashbackTableIDs)...), nil } // SendPrepareFlashbackToVersionRPC prepares regions for flashback, the purpose is to put region into flashback state which region stop write @@ -597,20 +669,20 @@ func SendFlashbackToVersionRPC( func flashbackToVersion( ctx context.Context, - d *ddlCtx, + store kv.Storage, handler rangetask.TaskHandler, startKey []byte, endKey []byte, ) (err error) { return rangetask.NewRangeTaskRunner( "flashback-to-version-runner", - d.store.(tikv.Storage), + store.(tikv.Storage), int(variable.GetDDLFlashbackConcurrency()), handler, ).RunOnRange(ctx, startKey, endKey) } -func splitRegionsByKeyRanges(ctx context.Context, d *ddlCtx, keyRanges []kv.KeyRange) { - if s, ok := d.store.(kv.SplittableStore); ok { +func splitRegionsByKeyRanges(ctx context.Context, store kv.Storage, keyRanges []kv.KeyRange) { + if s, ok := store.(kv.SplittableStore); ok { for _, keys := range keyRanges { for { // tableID is useless when scatter == false @@ -628,7 +700,7 @@ func splitRegionsByKeyRanges(ctx context.Context, d *ddlCtx, keyRanges []kv.KeyR // 2. before flashback start, check timestamp, disable GC and close PD schedule, get flashback key ranges. // 3. phase 1, lock flashback key ranges. // 4. phase 2, send flashback RPC, do flashback jobs. -func (w *worker) onFlashbackCluster(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) { +func (w *worker) onFlashbackCluster(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, err error) { inFlashbackTest := false failpoint.Inject("mockFlashbackTest", func(val failpoint.Value) { if val.(bool) { @@ -636,7 +708,7 @@ func (w *worker) onFlashbackCluster(d *ddlCtx, t *meta.Meta, job *model.Job) (ve } }) // TODO: Support flashback in unistore. - if d.store.Name() != "TiKV" && !inFlashbackTest { + if jobCtx.store.Name() != "TiKV" && !inFlashbackTest { job.State = model.JobStateCancelled return ver, errors.Errorf("Not support flashback cluster in non-TiKV env") } @@ -696,38 +768,38 @@ func (w *worker) onFlashbackCluster(d *ddlCtx, t *meta.Meta, job *model.Job) (ve return ver, nil // Stage 2, check flashbackTS, close GC and PD schedule, get flashback key ranges. case model.StateDeleteOnly: - if err = checkAndSetFlashbackClusterInfo(w.ctx, sess, d, t, job, flashbackTS); err != nil { + if err = checkAndSetFlashbackClusterInfo(w.ctx, sess, jobCtx.store, t, job, flashbackTS); err != nil { job.State = model.JobStateCancelled return ver, errors.Trace(err) } // We should get startTS here to avoid lost startTS when TiDB crashed during send prepare flashback RPC. - startTS, err = d.store.GetOracle().GetTimestamp(w.ctx, &oracle.Option{TxnScope: oracle.GlobalTxnScope}) + startTS, err = jobCtx.store.GetOracle().GetTimestamp(w.ctx, &oracle.Option{TxnScope: oracle.GlobalTxnScope}) if err != nil { job.State = model.JobStateCancelled return ver, errors.Trace(err) } job.Args[startTSOffset] = startTS - keyRanges, err = GetFlashbackKeyRanges(sess, flashbackTS) + keyRanges, err = getFlashbackKeyRanges(w.ctx, sess, flashbackTS) if err != nil { return ver, errors.Trace(err) } job.Args[keyRangesOffset] = keyRanges job.SchemaState = model.StateWriteOnly - return updateSchemaVersion(d, t, job) + return updateSchemaVersion(jobCtx, t, job) // Stage 3, lock related key ranges. case model.StateWriteOnly: // TODO: Support flashback in unistore. if inFlashbackTest { job.SchemaState = model.StateWriteReorganization - return updateSchemaVersion(d, t, job) + return updateSchemaVersion(jobCtx, t, job) } // Split region by keyRanges, make sure no unrelated key ranges be locked. - splitRegionsByKeyRanges(w.ctx, d, keyRanges) + splitRegionsByKeyRanges(w.ctx, jobCtx.store, keyRanges) totalRegions.Store(0) for _, r := range keyRanges { - if err = flashbackToVersion(w.ctx, d, + if err = flashbackToVersion(w.ctx, jobCtx.store, func(ctx context.Context, r tikvstore.KeyRange) (rangetask.TaskStat, error) { - stats, err := SendPrepareFlashbackToVersionRPC(ctx, d.store.(tikv.Storage), flashbackTS, startTS, r) + stats, err := SendPrepareFlashbackToVersionRPC(ctx, jobCtx.store.(tikv.Storage), flashbackTS, startTS, r) totalRegions.Add(uint64(stats.CompletedRegions)) return stats, err }, r.StartKey, r.EndKey); err != nil { @@ -738,7 +810,7 @@ func (w *worker) onFlashbackCluster(d *ddlCtx, t *meta.Meta, job *model.Job) (ve job.Args[totalLockedRegionsOffset] = totalRegions.Load() // We should get commitTS here to avoid lost commitTS when TiDB crashed during send flashback RPC. - commitTS, err = d.store.GetOracle().GetTimestamp(w.ctx, &oracle.Option{TxnScope: oracle.GlobalTxnScope}) + commitTS, err = jobCtx.store.GetOracle().GetTimestamp(w.ctx, &oracle.Option{TxnScope: oracle.GlobalTxnScope}) if err != nil { return ver, errors.Trace(err) } @@ -749,17 +821,17 @@ func (w *worker) onFlashbackCluster(d *ddlCtx, t *meta.Meta, job *model.Job) (ve case model.StateWriteReorganization: // TODO: Support flashback in unistore. if inFlashbackTest { - asyncNotifyEvent(d, statsutil.NewFlashbackClusterEvent()) + asyncNotifyEvent(jobCtx, statsutil.NewFlashbackClusterEvent()) job.State = model.JobStateDone job.SchemaState = model.StatePublic return ver, nil } for _, r := range keyRanges { - if err = flashbackToVersion(w.ctx, d, + if err = flashbackToVersion(w.ctx, jobCtx.store, func(ctx context.Context, r tikvstore.KeyRange) (rangetask.TaskStat, error) { // Use same startTS as prepare phase to simulate 1PC txn. - stats, err := SendFlashbackToVersionRPC(ctx, d.store.(tikv.Storage), flashbackTS, startTS, commitTS, r) + stats, err := SendFlashbackToVersionRPC(ctx, jobCtx.store.(tikv.Storage), flashbackTS, startTS, commitTS, r) completedRegions.Add(uint64(stats.CompletedRegions)) logutil.DDLLogger().Info("flashback cluster stats", zap.Uint64("complete regions", completedRegions.Load()), @@ -772,10 +844,10 @@ func (w *worker) onFlashbackCluster(d *ddlCtx, t *meta.Meta, job *model.Job) (ve } } - asyncNotifyEvent(d, statsutil.NewFlashbackClusterEvent()) + asyncNotifyEvent(jobCtx, statsutil.NewFlashbackClusterEvent()) job.State = model.JobStateDone job.SchemaState = model.StatePublic - return updateSchemaVersion(d, t, job) + return updateSchemaVersion(jobCtx, t, job) } return ver, nil } diff --git a/pkg/ddl/cluster_test.go b/pkg/ddl/cluster_test.go index 8844c11e98411..9003d25646f3b 100644 --- a/pkg/ddl/cluster_test.go +++ b/pkg/ddl/cluster_test.go @@ -21,14 +21,10 @@ import ( "time" "github.com/pingcap/failpoint" - "github.com/pingcap/tidb/pkg/ddl" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/domain/infosync" "github.com/pingcap/tidb/pkg/errno" - "github.com/pingcap/tidb/pkg/meta" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/sessionctx/variable" - "github.com/pingcap/tidb/pkg/tablecodec" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/types" @@ -38,37 +34,8 @@ import ( "github.com/tikv/client-go/v2/oracle" ) -func TestGetTableDataKeyRanges(t *testing.T) { - // case 1, empty flashbackIDs - keyRanges := ddl.GetTableDataKeyRanges([]int64{}) - require.Len(t, keyRanges, 1) - require.Equal(t, keyRanges[0].StartKey, tablecodec.EncodeTablePrefix(0)) - require.Equal(t, keyRanges[0].EndKey, tablecodec.EncodeTablePrefix(meta.MaxGlobalID)) - - // case 2, insert a execluded table ID - keyRanges = ddl.GetTableDataKeyRanges([]int64{3}) - require.Len(t, keyRanges, 2) - require.Equal(t, keyRanges[0].StartKey, tablecodec.EncodeTablePrefix(0)) - require.Equal(t, keyRanges[0].EndKey, tablecodec.EncodeTablePrefix(3)) - require.Equal(t, keyRanges[1].StartKey, tablecodec.EncodeTablePrefix(4)) - require.Equal(t, keyRanges[1].EndKey, tablecodec.EncodeTablePrefix(meta.MaxGlobalID)) - - // case 3, insert some execluded table ID - keyRanges = ddl.GetTableDataKeyRanges([]int64{3, 5, 9}) - require.Len(t, keyRanges, 4) - require.Equal(t, keyRanges[0].StartKey, tablecodec.EncodeTablePrefix(0)) - require.Equal(t, keyRanges[0].EndKey, tablecodec.EncodeTablePrefix(3)) - require.Equal(t, keyRanges[1].StartKey, tablecodec.EncodeTablePrefix(4)) - require.Equal(t, keyRanges[1].EndKey, tablecodec.EncodeTablePrefix(5)) - require.Equal(t, keyRanges[2].StartKey, tablecodec.EncodeTablePrefix(6)) - require.Equal(t, keyRanges[2].EndKey, tablecodec.EncodeTablePrefix(9)) - require.Equal(t, keyRanges[3].StartKey, tablecodec.EncodeTablePrefix(10)) - require.Equal(t, keyRanges[3].EndKey, tablecodec.EncodeTablePrefix(meta.MaxGlobalID)) -} - func TestFlashbackCloseAndResetPDSchedule(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) - originHook := dom.DDL().GetHook() + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) injectSafeTS := oracle.GoTimeToTS(time.Now().Add(10 * time.Second)) @@ -85,31 +52,30 @@ func TestFlashbackCloseAndResetPDSchedule(t *testing.T) { defer resetGC() tk.MustExec(fmt.Sprintf(safePointSQL, timeBeforeDrop)) - hook := &callback.TestDDLCallback{Do: dom} - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { assert.Equal(t, model.ActionFlashbackCluster, job.Type) if job.SchemaState == model.StateWriteReorganization { closeValue, err := infosync.GetPDScheduleConfig(context.Background()) assert.NoError(t, err) assert.Equal(t, closeValue["merge-schedule-limit"], 0) } - } - hook.OnJobRunAfterExported = func(job *model.Job) { + }) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunAfter", func(job *model.Job) { assert.Equal(t, model.ActionFlashbackCluster, job.Type) if job.SchemaState == model.StateWriteReorganization { // cancel flashback job job.State = model.JobStateCancelled job.Error = dbterror.ErrCancelledDDLJob } - } - dom.DDL().SetHook(hook) + }) time.Sleep(10 * time.Millisecond) ts, err := tk.Session().GetStore().GetOracle().GetTimestamp(context.Background(), &oracle.Option{}) require.NoError(t, err) tk.MustGetErrCode(fmt.Sprintf("flashback cluster to timestamp '%s'", oracle.GetTimeFromTS(ts).Format(types.TimeFSPFormat)), errno.ErrCancelledDDLJob) - dom.DDL().SetHook(originHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore") + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunAfter") finishValue, err := infosync.GetPDScheduleConfig(context.Background()) require.NoError(t, err) @@ -117,8 +83,7 @@ func TestFlashbackCloseAndResetPDSchedule(t *testing.T) { } func TestAddDDLDuringFlashback(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) - originHook := dom.DDL().GetHook() + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("create table t(a int)") @@ -136,26 +101,23 @@ func TestAddDDLDuringFlashback(t *testing.T) { defer resetGC() tk.MustExec(fmt.Sprintf(safePointSQL, timeBeforeDrop)) - hook := &callback.TestDDLCallback{Do: dom} - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { assert.Equal(t, model.ActionFlashbackCluster, job.Type) if job.SchemaState == model.StateWriteOnly { tk1 := testkit.NewTestKit(t, store) _, err := tk1.Exec("alter table test.t add column b int") assert.ErrorContains(t, err, "Can't add ddl job, have flashback cluster job") } - } - dom.DDL().SetHook(hook) + }) tk.MustExec(fmt.Sprintf("flashback cluster to timestamp '%s'", oracle.GetTimeFromTS(ts).Format(types.TimeFSPFormat))) - dom.DDL().SetHook(originHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore") require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/mockFlashbackTest")) require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/injectSafeTS")) } func TestGlobalVariablesOnFlashback(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) - originHook := dom.DDL().GetHook() + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("create table t(a int)") @@ -173,8 +135,7 @@ func TestGlobalVariablesOnFlashback(t *testing.T) { defer resetGC() tk.MustExec(fmt.Sprintf(safePointSQL, timeBeforeDrop)) - hook := &callback.TestDDLCallback{Do: dom} - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { assert.Equal(t, model.ActionFlashbackCluster, job.Type) if job.SchemaState == model.StateWriteReorganization { rs, err := tk.Exec("show variables like 'tidb_gc_enable'") @@ -190,8 +151,7 @@ func TestGlobalVariablesOnFlashback(t *testing.T) { assert.NoError(t, err) assert.Equal(t, tk.ResultSetToResult(rs, "").Rows()[0][1], variable.Off) } - } - dom.DDL().SetHook(hook) + }) // first try with `tidb_gc_enable` = on and `tidb_super_read_only` = off and `tidb_ttl_job_enable` = on tk.MustExec("set global tidb_gc_enable = on") tk.MustExec("set global tidb_super_read_only = off") @@ -227,14 +187,13 @@ func TestGlobalVariablesOnFlashback(t *testing.T) { assert.NoError(t, err) assert.Equal(t, tk.ResultSetToResult(rs, "").Rows()[0][1], variable.Off) - dom.DDL().SetHook(originHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore") require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/mockFlashbackTest")) require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/injectSafeTS")) } func TestCancelFlashbackCluster(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) - originHook := dom.DDL().GetHook() + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) time.Sleep(10 * time.Millisecond) @@ -251,10 +210,10 @@ func TestCancelFlashbackCluster(t *testing.T) { tk.MustExec(fmt.Sprintf(safePointSQL, timeBeforeDrop)) // Try canceled on StateDeleteOnly, cancel success - hook := newCancelJobHook(t, store, dom, func(job *model.Job) bool { + hook := newCancelJobHook(t, store, func(job *model.Job) bool { return job.SchemaState == model.StateDeleteOnly }) - dom.DDL().SetHook(hook) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", hook.OnJobUpdated) tk.MustExec("set global tidb_ttl_job_enable = on") tk.MustGetErrCode(fmt.Sprintf("flashback cluster to timestamp '%s'", oracle.GetTimeFromTS(ts).Format(types.TimeFSPFormat)), errno.ErrCancelledDDLJob) hook.MustCancelDone(t) @@ -264,10 +223,10 @@ func TestCancelFlashbackCluster(t *testing.T) { assert.Equal(t, tk.ResultSetToResult(rs, "").Rows()[0][1], variable.On) // Try canceled on StateWriteReorganization, cancel failed - hook = newCancelJobHook(t, store, dom, func(job *model.Job) bool { + hook = newCancelJobHook(t, store, func(job *model.Job) bool { return job.SchemaState == model.StateWriteReorganization }) - dom.DDL().SetHook(hook) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", hook.OnJobUpdated) tk.MustExec(fmt.Sprintf("flashback cluster to timestamp '%s'", oracle.GetTimeFromTS(ts).Format(types.TimeFSPFormat))) hook.MustCancelFailed(t) @@ -275,8 +234,6 @@ func TestCancelFlashbackCluster(t *testing.T) { assert.NoError(t, err) assert.Equal(t, tk.ResultSetToResult(rs, "").Rows()[0][1], variable.Off) - dom.DDL().SetHook(originHook) - require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/mockFlashbackTest")) require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/injectSafeTS")) } diff --git a/pkg/ddl/column.go b/pkg/ddl/column.go index c479c005a8c82..629e6f77d121c 100644 --- a/pkg/ddl/column.go +++ b/pkg/ddl/column.go @@ -28,25 +28,20 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/config" "github.com/pingcap/tidb/pkg/ddl/logutil" - sess "github.com/pingcap/tidb/pkg/ddl/session" "github.com/pingcap/tidb/pkg/expression" - exprctx "github.com/pingcap/tidb/pkg/expression/context" "github.com/pingcap/tidb/pkg/infoschema" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/meta" "github.com/pingcap/tidb/pkg/meta/autoid" - "github.com/pingcap/tidb/pkg/metrics" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/parser/terror" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/sessionctx/variable" - statsutil "github.com/pingcap/tidb/pkg/statistics/handle/util" "github.com/pingcap/tidb/pkg/table" "github.com/pingcap/tidb/pkg/tablecodec" "github.com/pingcap/tidb/pkg/types" - "github.com/pingcap/tidb/pkg/util" contextutil "github.com/pingcap/tidb/pkg/util/context" "github.com/pingcap/tidb/pkg/util/dbterror" decoder "github.com/pingcap/tidb/pkg/util/rowDecoder" @@ -104,100 +99,6 @@ func checkAddColumn(t *meta.Meta, job *model.Job) (*model.TableInfo, *model.Colu return tblInfo, columnInfo, col, pos, false, nil } -func onAddColumn(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) { - // Handle the rolling back job. - if job.IsRollingback() { - ver, err = onDropColumn(d, t, job) - if err != nil { - return ver, errors.Trace(err) - } - return ver, nil - } - - failpoint.Inject("errorBeforeDecodeArgs", func(val failpoint.Value) { - //nolint:forcetypeassert - if val.(bool) { - failpoint.Return(ver, errors.New("occur an error before decode args")) - } - }) - - tblInfo, columnInfo, colFromArgs, pos, ifNotExists, err := checkAddColumn(t, job) - if err != nil { - if ifNotExists && infoschema.ErrColumnExists.Equal(err) { - job.Warning = toTError(err) - job.State = model.JobStateDone - return ver, nil - } - return ver, errors.Trace(err) - } - if columnInfo == nil { - columnInfo = InitAndAddColumnToTable(tblInfo, colFromArgs) - logutil.DDLLogger().Info("run add column job", zap.Stringer("job", job), zap.Reflect("columnInfo", *columnInfo)) - if err = checkAddColumnTooManyColumns(len(tblInfo.Columns)); err != nil { - job.State = model.JobStateCancelled - return ver, errors.Trace(err) - } - } - - originalState := columnInfo.State - switch columnInfo.State { - case model.StateNone: - // none -> delete only - columnInfo.State = model.StateDeleteOnly - ver, err = updateVersionAndTableInfoWithCheck(d, t, job, tblInfo, originalState != columnInfo.State) - if err != nil { - return ver, errors.Trace(err) - } - job.SchemaState = model.StateDeleteOnly - case model.StateDeleteOnly: - // delete only -> write only - columnInfo.State = model.StateWriteOnly - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, originalState != columnInfo.State) - if err != nil { - return ver, errors.Trace(err) - } - // Update the job state when all affairs done. - job.SchemaState = model.StateWriteOnly - case model.StateWriteOnly: - // write only -> reorganization - columnInfo.State = model.StateWriteReorganization - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, originalState != columnInfo.State) - if err != nil { - return ver, errors.Trace(err) - } - // Update the job state when all affairs done. - job.SchemaState = model.StateWriteReorganization - job.MarkNonRevertible() - case model.StateWriteReorganization: - // reorganization -> public - // Adjust table column offset. - failpoint.InjectCall("onAddColumnStateWriteReorg") - offset, err := LocateOffsetToMove(columnInfo.Offset, pos, tblInfo) - if err != nil { - return ver, errors.Trace(err) - } - tblInfo.MoveColumnInfo(columnInfo.Offset, offset) - columnInfo.State = model.StatePublic - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, originalState != columnInfo.State) - if err != nil { - return ver, errors.Trace(err) - } - - // Finish this job. - job.FinishTableJob(model.JobStateDone, model.StatePublic, ver, tblInfo) - addColumnEvent := statsutil.NewAddColumnEvent( - job.SchemaID, - tblInfo, - []*model.ColumnInfo{columnInfo}, - ) - asyncNotifyEvent(d, addColumnEvent) - default: - err = dbterror.ErrInvalidDDLState.GenWithStackByArgs("column", columnInfo.State) - } - - return ver, errors.Trace(err) -} - // CheckAfterPositionExists makes sure the column specified in AFTER clause is exists. // For example, ALTER TABLE t ADD COLUMN c3 INT AFTER c1. func CheckAfterPositionExists(tblInfo *model.TableInfo, pos *ast.ColumnPosition) error { @@ -236,8 +137,8 @@ func checkDropColumnForStatePublic(colInfo *model.ColumnInfo) (err error) { return nil } -func onDropColumn(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { - tblInfo, colInfo, idxInfos, ifExists, err := checkDropColumn(d, t, job) +func onDropColumn(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { + tblInfo, colInfo, idxInfos, ifExists, err := checkDropColumn(jobCtx, t, job) if err != nil { if ifExists && dbterror.ErrCantDropFieldOrKey.Equal(err) { // Convert the "not exists" error to a warning. @@ -251,7 +152,7 @@ func onDropColumn(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) job.MarkNonRevertible() job.SchemaState = colInfo.State // Store the mark and enter the next DDL handling loop. - return updateVersionAndTableInfoWithCheck(d, t, job, tblInfo, false) + return updateVersionAndTableInfoWithCheck(jobCtx, t, job, tblInfo, false) } originalState := colInfo.State @@ -265,7 +166,7 @@ func onDropColumn(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) if err != nil { return ver, errors.Trace(err) } - ver, err = updateVersionAndTableInfoWithCheck(d, t, job, tblInfo, originalState != colInfo.State) + ver, err = updateVersionAndTableInfoWithCheck(jobCtx, t, job, tblInfo, originalState != colInfo.State) if err != nil { return ver, errors.Trace(err) } @@ -283,7 +184,7 @@ func onDropColumn(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) } tblInfo.Indices = newIndices } - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, originalState != colInfo.State) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, originalState != colInfo.State) if err != nil { return ver, errors.Trace(err) } @@ -292,7 +193,7 @@ func onDropColumn(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) // delete only -> reorganization colInfo.State = model.StateDeleteReorganization tblInfo.MoveColumnInfo(colInfo.Offset, len(tblInfo.Columns)-1) - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, originalState != colInfo.State) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, originalState != colInfo.State) if err != nil { return ver, errors.Trace(err) } @@ -302,7 +203,7 @@ func onDropColumn(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) tblInfo.MoveColumnInfo(colInfo.Offset, len(tblInfo.Columns)-1) tblInfo.Columns = tblInfo.Columns[:len(tblInfo.Columns)-1] colInfo.State = model.StateNone - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, originalState != colInfo.State) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, originalState != colInfo.State) if err != nil { return ver, errors.Trace(err) } @@ -322,7 +223,7 @@ func onDropColumn(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) return ver, errors.Trace(err) } -func checkDropColumn(d *ddlCtx, t *meta.Meta, job *model.Job) (*model.TableInfo, *model.ColumnInfo, []*model.IndexInfo, bool /* ifExists */, error) { +func checkDropColumn(jobCtx *jobContext, t *meta.Meta, job *model.Job) (*model.TableInfo, *model.ColumnInfo, []*model.IndexInfo, bool /* ifExists */, error) { schemaID := job.SchemaID tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, schemaID) if err != nil { @@ -348,7 +249,7 @@ func checkDropColumn(d *ddlCtx, t *meta.Meta, job *model.Job) (*model.TableInfo, job.State = model.JobStateCancelled return nil, nil, nil, false, errors.Trace(err) } - if err = checkDropColumnWithForeignKeyConstraintInOwner(d, t, job, tblInfo, colName.L); err != nil { + if err = checkDropColumnWithForeignKeyConstraintInOwner(jobCtx.infoCache, job, tblInfo, colName.L); err != nil { return nil, nil, nil, false, errors.Trace(err) } if err = checkDropColumnWithTTLConfig(tblInfo, colName.L); err != nil { @@ -358,271 +259,39 @@ func checkDropColumn(d *ddlCtx, t *meta.Meta, job *model.Job) (*model.TableInfo, return tblInfo, colInfo, idxInfos, false, nil } -func onSetDefaultValue(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { - newCol := &model.ColumnInfo{} - err := job.DecodeArgs(newCol) - if err != nil { - job.State = model.JobStateCancelled - return ver, errors.Trace(err) - } - - return updateColumnDefaultValue(d, t, job, newCol, &newCol.Name) -} - -func needChangeColumnData(oldCol, newCol *model.ColumnInfo) bool { - toUnsigned := mysql.HasUnsignedFlag(newCol.GetFlag()) - originUnsigned := mysql.HasUnsignedFlag(oldCol.GetFlag()) - needTruncationOrToggleSign := func() bool { - return (newCol.GetFlen() > 0 && (newCol.GetFlen() < oldCol.GetFlen() || newCol.GetDecimal() < oldCol.GetDecimal())) || - (toUnsigned != originUnsigned) - } - // Ignore the potential max display length represented by integer's flen, use default flen instead. - defaultOldColFlen, _ := mysql.GetDefaultFieldLengthAndDecimal(oldCol.GetType()) - defaultNewColFlen, _ := mysql.GetDefaultFieldLengthAndDecimal(newCol.GetType()) - needTruncationOrToggleSignForInteger := func() bool { - return (defaultNewColFlen > 0 && defaultNewColFlen < defaultOldColFlen) || (toUnsigned != originUnsigned) - } - - // Deal with the same type. - if oldCol.GetType() == newCol.GetType() { - switch oldCol.GetType() { - case mysql.TypeNewDecimal: - // Since type decimal will encode the precision, frac, negative(signed) and wordBuf into storage together, there is no short - // cut to eliminate data reorg change for column type change between decimal. - return oldCol.GetFlen() != newCol.GetFlen() || oldCol.GetDecimal() != newCol.GetDecimal() || toUnsigned != originUnsigned - case mysql.TypeEnum, mysql.TypeSet: - return IsElemsChangedToModifyColumn(oldCol.GetElems(), newCol.GetElems()) - case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong: - return toUnsigned != originUnsigned - case mysql.TypeString: - // Due to the behavior of padding \x00 at binary type, always change column data when binary length changed - if types.IsBinaryStr(&oldCol.FieldType) { - return newCol.GetFlen() != oldCol.GetFlen() - } - case mysql.TypeTiDBVectorFloat32: - return newCol.GetFlen() != types.UnspecifiedLength && oldCol.GetFlen() != newCol.GetFlen() - } - - return needTruncationOrToggleSign() - } - - if ConvertBetweenCharAndVarchar(oldCol.GetType(), newCol.GetType()) { - return true - } - - // Deal with the different type. - switch oldCol.GetType() { - case mysql.TypeVarchar, mysql.TypeString, mysql.TypeVarString, mysql.TypeBlob, mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob: - switch newCol.GetType() { - case mysql.TypeVarchar, mysql.TypeString, mysql.TypeVarString, mysql.TypeBlob, mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob: - return needTruncationOrToggleSign() - } - case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong: - switch newCol.GetType() { - case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong: - return needTruncationOrToggleSignForInteger() - } - // conversion between float and double needs reorganization, see issue #31372 - } - - return true -} - -// ConvertBetweenCharAndVarchar check whether column converted between char and varchar -// TODO: it is used for plugins. so change plugin's using and remove it. -func ConvertBetweenCharAndVarchar(oldCol, newCol byte) bool { - return types.ConvertBetweenCharAndVarchar(oldCol, newCol) -} - -// IsElemsChangedToModifyColumn check elems changed -func IsElemsChangedToModifyColumn(oldElems, newElems []string) bool { - if len(newElems) < len(oldElems) { - return true - } - for index, oldElem := range oldElems { - newElem := newElems[index] - if oldElem != newElem { - return true +func isDroppableColumn(tblInfo *model.TableInfo, colName model.CIStr) error { + if ok, dep, isHidden := hasDependentByGeneratedColumn(tblInfo, colName); ok { + if isHidden { + return dbterror.ErrDependentByFunctionalIndex.GenWithStackByArgs(dep) } + return dbterror.ErrDependentByGeneratedColumn.GenWithStackByArgs(dep) } - return false -} - -type modifyingColInfo struct { - newCol *model.ColumnInfo - oldColName *model.CIStr - modifyColumnTp byte - updatedAutoRandomBits uint64 - changingCol *model.ColumnInfo - changingIdxs []*model.IndexInfo - pos *ast.ColumnPosition - removedIdxs []int64 -} -func getModifyColumnInfo(t *meta.Meta, job *model.Job) (*model.DBInfo, *model.TableInfo, *model.ColumnInfo, *modifyingColInfo, error) { - modifyInfo := &modifyingColInfo{pos: &ast.ColumnPosition{}} - err := job.DecodeArgs(&modifyInfo.newCol, &modifyInfo.oldColName, modifyInfo.pos, &modifyInfo.modifyColumnTp, - &modifyInfo.updatedAutoRandomBits, &modifyInfo.changingCol, &modifyInfo.changingIdxs, &modifyInfo.removedIdxs) - if err != nil { - job.State = model.JobStateCancelled - return nil, nil, nil, modifyInfo, errors.Trace(err) + if len(tblInfo.Columns) == 1 { + return dbterror.ErrCantRemoveAllFields.GenWithStack("can't drop only column %s in table %s", + colName, tblInfo.Name) } - - dbInfo, err := checkSchemaExistAndCancelNotExistJob(t, job) + // We only support dropping column with single-value none Primary Key index covered now. + err := isColumnCanDropWithIndex(colName.L, tblInfo.Indices) if err != nil { - return nil, nil, nil, modifyInfo, errors.Trace(err) + return err } - - tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) + err = IsColumnDroppableWithCheckConstraint(colName, tblInfo) if err != nil { - return nil, nil, nil, modifyInfo, errors.Trace(err) - } - - oldCol := model.FindColumnInfo(tblInfo.Columns, modifyInfo.oldColName.L) - if oldCol == nil || oldCol.State != model.StatePublic { - job.State = model.JobStateCancelled - return nil, nil, nil, modifyInfo, errors.Trace(infoschema.ErrColumnNotExists.GenWithStackByArgs(*(modifyInfo.oldColName), tblInfo.Name)) - } - - return dbInfo, tblInfo, oldCol, modifyInfo, errors.Trace(err) -} - -// GetOriginDefaultValueForModifyColumn gets the original default value for modifying column. -// Since column type change is implemented as adding a new column then substituting the old one. -// Case exists when update-where statement fetch a NULL for not-null column without any default data, -// it will errors. -// So we set original default value here to prevent this error. If the oldCol has the original default value, we use it. -// Otherwise we set the zero value as original default value. -// Besides, in insert & update records, we have already implement using the casted value of relative column to insert -// rather than the original default value. -func GetOriginDefaultValueForModifyColumn(ctx exprctx.BuildContext, changingCol, oldCol *model.ColumnInfo) (any, error) { - var err error - originDefVal := oldCol.GetOriginDefaultValue() - if originDefVal != nil { - odv, err := table.CastColumnValue(ctx, types.NewDatum(originDefVal), changingCol, false, false) - if err != nil { - logutil.DDLLogger().Info("cast origin default value failed", zap.Error(err)) - } - if !odv.IsNull() { - if originDefVal, err = odv.ToString(); err != nil { - originDefVal = nil - logutil.DDLLogger().Info("convert default value to string failed", zap.Error(err)) - } - } - } - if originDefVal == nil { - originDefVal, err = generateOriginDefaultValue(changingCol, nil) - if err != nil { - return nil, errors.Trace(err) - } + return err } - return originDefVal, nil + return nil } -func (w *worker) onModifyColumn(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { - dbInfo, tblInfo, oldCol, modifyInfo, err := getModifyColumnInfo(t, job) - if err != nil { - return ver, err - } - - if job.IsRollingback() { - // For those column-type-change jobs which don't reorg the data. - if !needChangeColumnData(oldCol, modifyInfo.newCol) { - return rollbackModifyColumnJob(d, t, tblInfo, job, modifyInfo.newCol, oldCol, modifyInfo.modifyColumnTp) - } - // For those column-type-change jobs which reorg the data. - return rollbackModifyColumnJobWithData(d, t, tblInfo, job, oldCol, modifyInfo) - } - - // If we want to rename the column name, we need to check whether it already exists. - if modifyInfo.newCol.Name.L != modifyInfo.oldColName.L { - c := model.FindColumnInfo(tblInfo.Columns, modifyInfo.newCol.Name.L) - if c != nil { - job.State = model.JobStateCancelled - return ver, errors.Trace(infoschema.ErrColumnExists.GenWithStackByArgs(modifyInfo.newCol.Name)) - } - } - - failpoint.Inject("uninitializedOffsetAndState", func(val failpoint.Value) { - //nolint:forcetypeassert - if val.(bool) { - if modifyInfo.newCol.State != model.StatePublic { - failpoint.Return(ver, errors.New("the column state is wrong")) - } - } - }) - - err = checkAndApplyAutoRandomBits(d, t, dbInfo, tblInfo, oldCol, modifyInfo.newCol, modifyInfo.updatedAutoRandomBits) +func onSetDefaultValue(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { + newCol := &model.ColumnInfo{} + err := job.DecodeArgs(newCol) if err != nil { job.State = model.JobStateCancelled return ver, errors.Trace(err) } - if !needChangeColumnData(oldCol, modifyInfo.newCol) { - return w.doModifyColumn(d, t, job, dbInfo, tblInfo, modifyInfo.newCol, oldCol, modifyInfo.pos) - } - - if err = isGeneratedRelatedColumn(tblInfo, modifyInfo.newCol, oldCol); err != nil { - job.State = model.JobStateCancelled - return ver, errors.Trace(err) - } - if tblInfo.Partition != nil { - job.State = model.JobStateCancelled - return ver, errors.Trace(dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs("table is partition table")) - } - - changingCol := modifyInfo.changingCol - if changingCol == nil { - newColName := model.NewCIStr(genChangingColumnUniqueName(tblInfo, oldCol)) - if mysql.HasPriKeyFlag(oldCol.GetFlag()) { - job.State = model.JobStateCancelled - msg := "this column has primary key flag" - return ver, dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs(msg) - } - - changingCol = modifyInfo.newCol.Clone() - changingCol.Name = newColName - changingCol.ChangeStateInfo = &model.ChangeStateInfo{DependencyColumnOffset: oldCol.Offset} - - originDefVal, err := GetOriginDefaultValueForModifyColumn(newReorgExprCtx(), changingCol, oldCol) - if err != nil { - return ver, errors.Trace(err) - } - if err = changingCol.SetOriginDefaultValue(originDefVal); err != nil { - return ver, errors.Trace(err) - } - - InitAndAddColumnToTable(tblInfo, changingCol) - indexesToChange := FindRelatedIndexesToChange(tblInfo, oldCol.Name) - for _, info := range indexesToChange { - newIdxID := AllocateIndexID(tblInfo) - if !info.isTemp { - // We create a temp index for each normal index. - tmpIdx := info.IndexInfo.Clone() - tmpIdxName := genChangingIndexUniqueName(tblInfo, info.IndexInfo) - setIdxIDName(tmpIdx, newIdxID, model.NewCIStr(tmpIdxName)) - SetIdxColNameOffset(tmpIdx.Columns[info.Offset], changingCol) - tblInfo.Indices = append(tblInfo.Indices, tmpIdx) - } else { - // The index is a temp index created by previous modify column job(s). - // We can overwrite it to reduce reorg cost, because it will be dropped eventually. - tmpIdx := info.IndexInfo - oldTempIdxID := tmpIdx.ID - setIdxIDName(tmpIdx, newIdxID, tmpIdx.Name /* unchanged */) - SetIdxColNameOffset(tmpIdx.Columns[info.Offset], changingCol) - modifyInfo.removedIdxs = append(modifyInfo.removedIdxs, oldTempIdxID) - } - } - } else { - changingCol = model.FindColumnInfoByID(tblInfo.Columns, modifyInfo.changingCol.ID) - if changingCol == nil { - logutil.DDLLogger().Error("the changing column has been removed", zap.Error(err)) - job.State = model.JobStateCancelled - return ver, errors.Trace(infoschema.ErrColumnNotExists.GenWithStackByArgs(oldCol.Name, tblInfo.Name)) - } - } - - return w.doModifyColumnTypeWithData(d, t, job, dbInfo, tblInfo, changingCol, oldCol, modifyInfo.newCol.Name, modifyInfo.pos, modifyInfo.removedIdxs) + return updateColumnDefaultValue(jobCtx, t, job, newCol, &newCol.Name) } func setIdxIDName(idxInfo *model.IndexInfo, newID int64, newName model.CIStr) { @@ -640,32 +309,6 @@ func SetIdxColNameOffset(idxCol *model.IndexColumn, changingCol *model.ColumnInf } } -// rollbackModifyColumnJobWithData is used to rollback modify-column job which need to reorg the data. -func rollbackModifyColumnJobWithData(d *ddlCtx, t *meta.Meta, tblInfo *model.TableInfo, job *model.Job, oldCol *model.ColumnInfo, modifyInfo *modifyingColInfo) (ver int64, err error) { - // If the not-null change is included, we should clean the flag info in oldCol. - if modifyInfo.modifyColumnTp == mysql.TypeNull { - // Reset NotNullFlag flag. - tblInfo.Columns[oldCol.Offset].SetFlag(oldCol.GetFlag() &^ mysql.NotNullFlag) - // Reset PreventNullInsertFlag flag. - tblInfo.Columns[oldCol.Offset].SetFlag(oldCol.GetFlag() &^ mysql.PreventNullInsertFlag) - } - var changingIdxIDs []int64 - if modifyInfo.changingCol != nil { - changingIdxIDs = buildRelatedIndexIDs(tblInfo, modifyInfo.changingCol.ID) - // The job is in the middle state. The appended changingCol and changingIndex should - // be removed from the tableInfo as well. - removeChangingColAndIdxs(tblInfo, modifyInfo.changingCol.ID) - } - ver, err = updateVersionAndTableInfoWithCheck(d, t, job, tblInfo, true) - if err != nil { - return ver, errors.Trace(err) - } - job.FinishTableJob(model.JobStateRollbackDone, model.StateNone, ver, tblInfo) - // Reconstruct the job args to add the temporary index ids into delete range table. - job.Args = []any{changingIdxIDs, getPartitionIDs(tblInfo)} - return ver, nil -} - func removeChangingColAndIdxs(tblInfo *model.TableInfo, changingColID int64) { restIdx := tblInfo.Indices[:0] for _, idx := range tblInfo.Indices { @@ -684,234 +327,6 @@ func removeChangingColAndIdxs(tblInfo *model.TableInfo, changingColID int64) { tblInfo.Columns = restCols } -func (w *worker) doModifyColumnTypeWithData( - d *ddlCtx, t *meta.Meta, job *model.Job, - dbInfo *model.DBInfo, tblInfo *model.TableInfo, changingCol, oldCol *model.ColumnInfo, - colName model.CIStr, pos *ast.ColumnPosition, rmIdxIDs []int64) (ver int64, _ error) { - var err error - originalState := changingCol.State - targetCol := changingCol.Clone() - targetCol.Name = colName - changingIdxs := buildRelatedIndexInfos(tblInfo, changingCol.ID) - switch changingCol.State { - case model.StateNone: - // Column from null to not null. - if !mysql.HasNotNullFlag(oldCol.GetFlag()) && mysql.HasNotNullFlag(changingCol.GetFlag()) { - // Introduce the `mysql.PreventNullInsertFlag` flag to prevent users from inserting or updating null values. - err := modifyColsFromNull2NotNull(w, dbInfo, tblInfo, []*model.ColumnInfo{oldCol}, targetCol, oldCol.GetType() != changingCol.GetType()) - if err != nil { - if dbterror.ErrWarnDataTruncated.Equal(err) || dbterror.ErrInvalidUseOfNull.Equal(err) { - job.State = model.JobStateRollingback - } - return ver, err - } - } - // none -> delete only - updateChangingObjState(changingCol, changingIdxs, model.StateDeleteOnly) - failpoint.Inject("mockInsertValueAfterCheckNull", func(val failpoint.Value) { - if valStr, ok := val.(string); ok { - var sctx sessionctx.Context - sctx, err := w.sessPool.Get() - if err != nil { - failpoint.Return(ver, err) - } - defer w.sessPool.Put(sctx) - - ctx := kv.WithInternalSourceType(context.Background(), kv.InternalTxnDDL) - //nolint:forcetypeassert - _, _, err = sctx.GetRestrictedSQLExecutor().ExecRestrictedSQL(ctx, nil, valStr) - if err != nil { - job.State = model.JobStateCancelled - failpoint.Return(ver, err) - } - } - }) - ver, err = updateVersionAndTableInfoWithCheck(d, t, job, tblInfo, originalState != changingCol.State) - if err != nil { - return ver, errors.Trace(err) - } - // Make sure job args change after `updateVersionAndTableInfoWithCheck`, otherwise, the job args will - // be updated in `updateDDLJob` even if it meets an error in `updateVersionAndTableInfoWithCheck`. - job.SchemaState = model.StateDeleteOnly - metrics.GetBackfillProgressByLabel(metrics.LblModifyColumn, job.SchemaName, tblInfo.Name.String()).Set(0) - job.Args = append(job.Args, changingCol, changingIdxs, rmIdxIDs) - case model.StateDeleteOnly: - // Column from null to not null. - if !mysql.HasNotNullFlag(oldCol.GetFlag()) && mysql.HasNotNullFlag(changingCol.GetFlag()) { - // Introduce the `mysql.PreventNullInsertFlag` flag to prevent users from inserting or updating null values. - err := modifyColsFromNull2NotNull(w, dbInfo, tblInfo, []*model.ColumnInfo{oldCol}, targetCol, oldCol.GetType() != changingCol.GetType()) - if err != nil { - if dbterror.ErrWarnDataTruncated.Equal(err) || dbterror.ErrInvalidUseOfNull.Equal(err) { - job.State = model.JobStateRollingback - } - return ver, err - } - } - // delete only -> write only - updateChangingObjState(changingCol, changingIdxs, model.StateWriteOnly) - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, originalState != changingCol.State) - if err != nil { - return ver, errors.Trace(err) - } - job.SchemaState = model.StateWriteOnly - failpoint.InjectCall("afterModifyColumnStateDeleteOnly", job.ID) - case model.StateWriteOnly: - // write only -> reorganization - updateChangingObjState(changingCol, changingIdxs, model.StateWriteReorganization) - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, originalState != changingCol.State) - if err != nil { - return ver, errors.Trace(err) - } - // Initialize SnapshotVer to 0 for later reorganization check. - job.SnapshotVer = 0 - job.SchemaState = model.StateWriteReorganization - case model.StateWriteReorganization: - tbl, err := getTable(d.getAutoIDRequirement(), dbInfo.ID, tblInfo) - if err != nil { - return ver, errors.Trace(err) - } - - var done bool - if job.MultiSchemaInfo != nil { - done, ver, err = doReorgWorkForModifyColumnMultiSchema(w, d, t, job, tbl, oldCol, changingCol, changingIdxs) - } else { - done, ver, err = doReorgWorkForModifyColumn(w, d, t, job, tbl, oldCol, changingCol, changingIdxs) - } - if !done { - return ver, err - } - - rmIdxIDs = append(buildRelatedIndexIDs(tblInfo, oldCol.ID), rmIdxIDs...) - - err = adjustTableInfoAfterModifyColumnWithData(tblInfo, pos, oldCol, changingCol, colName, changingIdxs) - if err != nil { - job.State = model.JobStateRollingback - return ver, errors.Trace(err) - } - - updateChangingObjState(changingCol, changingIdxs, model.StatePublic) - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, originalState != changingCol.State) - if err != nil { - return ver, errors.Trace(err) - } - - // Finish this job. - job.FinishTableJob(model.JobStateDone, model.StatePublic, ver, tblInfo) - // Refactor the job args to add the old index ids into delete range table. - job.Args = []any{rmIdxIDs, getPartitionIDs(tblInfo)} - modifyColumnEvent := statsutil.NewModifyColumnEvent( - job.SchemaID, - tblInfo, - []*model.ColumnInfo{changingCol}, - ) - asyncNotifyEvent(d, modifyColumnEvent) - default: - err = dbterror.ErrInvalidDDLState.GenWithStackByArgs("column", changingCol.State) - } - - return ver, errors.Trace(err) -} - -func doReorgWorkForModifyColumnMultiSchema(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job, tbl table.Table, - oldCol, changingCol *model.ColumnInfo, changingIdxs []*model.IndexInfo) (done bool, ver int64, err error) { - if job.MultiSchemaInfo.Revertible { - done, ver, err = doReorgWorkForModifyColumn(w, d, t, job, tbl, oldCol, changingCol, changingIdxs) - if done { - // We need another round to wait for all the others sub-jobs to finish. - job.MarkNonRevertible() - } - // We need another round to run the reorg process. - return false, ver, err - } - // Non-revertible means all the sub jobs finished. - return true, ver, err -} - -func doReorgWorkForModifyColumn(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job, tbl table.Table, - oldCol, changingCol *model.ColumnInfo, changingIdxs []*model.IndexInfo) (done bool, ver int64, err error) { - job.ReorgMeta.ReorgTp = model.ReorgTypeTxn - sctx, err1 := w.sessPool.Get() - if err1 != nil { - err = errors.Trace(err1) - return - } - defer w.sessPool.Put(sctx) - rh := newReorgHandler(sess.NewSession(sctx)) - dbInfo, err := t.GetDatabase(job.SchemaID) - if err != nil { - return false, ver, errors.Trace(err) - } - reorgInfo, err := getReorgInfo(d.jobContext(job.ID, job.ReorgMeta), - d, rh, job, dbInfo, tbl, BuildElements(changingCol, changingIdxs), false) - if err != nil || reorgInfo == nil || reorgInfo.first { - // If we run reorg firstly, we should update the job snapshot version - // and then run the reorg next time. - return false, ver, errors.Trace(err) - } - - // Inject a failpoint so that we can pause here and do verification on other components. - // With a failpoint-enabled version of TiDB, you can trigger this failpoint by the following command: - // enable: curl -X PUT -d "pause" "http://127.0.0.1:10080/fail/github.com/pingcap/tidb/pkg/ddl/mockDelayInModifyColumnTypeWithData". - // disable: curl -X DELETE "http://127.0.0.1:10080/fail/github.com/pingcap/tidb/pkg/ddl/mockDelayInModifyColumnTypeWithData" - failpoint.Inject("mockDelayInModifyColumnTypeWithData", func() {}) - err = w.runReorgJob(reorgInfo, tbl.Meta(), d.lease, func() (addIndexErr error) { - defer util.Recover(metrics.LabelDDL, "onModifyColumn", - func() { - addIndexErr = dbterror.ErrCancelledDDLJob.GenWithStack("modify table `%v` column `%v` panic", tbl.Meta().Name, oldCol.Name) - }, false) - // Use old column name to generate less confusing error messages. - changingColCpy := changingCol.Clone() - changingColCpy.Name = oldCol.Name - return w.updateCurrentElement(tbl, reorgInfo) - }) - if err != nil { - if dbterror.ErrPausedDDLJob.Equal(err) { - return false, ver, nil - } - - if dbterror.ErrWaitReorgTimeout.Equal(err) { - // If timeout, we should return, check for the owner and re-wait job done. - return false, ver, nil - } - if kv.IsTxnRetryableError(err) || dbterror.ErrNotOwner.Equal(err) { - return false, ver, errors.Trace(err) - } - if err1 := rh.RemoveDDLReorgHandle(job, reorgInfo.elements); err1 != nil { - logutil.DDLLogger().Warn("run modify column job failed, RemoveDDLReorgHandle failed, can't convert job to rollback", - zap.String("job", job.String()), zap.Error(err1)) - } - logutil.DDLLogger().Warn("run modify column job failed, convert job to rollback", zap.Stringer("job", job), zap.Error(err)) - job.State = model.JobStateRollingback - return false, ver, errors.Trace(err) - } - return true, ver, nil -} - -func adjustTableInfoAfterModifyColumnWithData(tblInfo *model.TableInfo, pos *ast.ColumnPosition, - oldCol, changingCol *model.ColumnInfo, newName model.CIStr, changingIdxs []*model.IndexInfo) (err error) { - if pos != nil && pos.RelativeColumn != nil && oldCol.Name.L == pos.RelativeColumn.Name.L { - // For cases like `modify column b after b`, it should report this error. - return errors.Trace(infoschema.ErrColumnNotExists.GenWithStackByArgs(oldCol.Name, tblInfo.Name)) - } - internalColName := changingCol.Name - changingCol = replaceOldColumn(tblInfo, oldCol, changingCol, newName) - if len(changingIdxs) > 0 { - updateNewIdxColsNameOffset(changingIdxs, internalColName, changingCol) - indexesToRemove := filterIndexesToRemove(changingIdxs, newName, tblInfo) - replaceOldIndexes(tblInfo, indexesToRemove) - } - if tblInfo.TTLInfo != nil { - updateTTLInfoWhenModifyColumn(tblInfo, oldCol.Name, changingCol.Name) - } - // Move the new column to a correct offset. - destOffset, err := LocateOffsetToMove(changingCol.Offset, pos, tblInfo) - if err != nil { - return errors.Trace(err) - } - tblInfo.MoveColumnInfo(changingCol.Offset, destOffset) - return nil -} - func replaceOldColumn(tblInfo *model.TableInfo, oldCol, changingCol *model.ColumnInfo, newName model.CIStr) *model.ColumnInfo { tblInfo.MoveColumnInfo(changingCol.Offset, len(tblInfo.Columns)-1) @@ -964,30 +379,6 @@ func updateNewIdxColsNameOffset(changingIdxs []*model.IndexInfo, } } -func updateFKInfoWhenModifyColumn(tblInfo *model.TableInfo, oldCol, newCol model.CIStr) { - if oldCol.L == newCol.L { - return - } - for _, fk := range tblInfo.ForeignKeys { - for i := range fk.Cols { - if fk.Cols[i].L == oldCol.L { - fk.Cols[i] = newCol - } - } - } -} - -func updateTTLInfoWhenModifyColumn(tblInfo *model.TableInfo, oldCol, newCol model.CIStr) { - if oldCol.L == newCol.L { - return - } - if tblInfo.TTLInfo != nil { - if tblInfo.TTLInfo.ColumnName.L == oldCol.L { - tblInfo.TTLInfo.ColumnName = newCol - } - } -} - // filterIndexesToRemove filters out the indexes that can be removed. func filterIndexesToRemove(changingIdxs []*model.IndexInfo, colName model.CIStr, tblInfo *model.TableInfo) []*model.IndexInfo { indexesToRemove := make([]*model.IndexInfo, 0, len(changingIdxs)) @@ -1149,12 +540,12 @@ func (w *worker) updateCurrentElement(t table.Table, reorgInfo *reorgInfo) error return dbterror.ErrCancelledDDLJob.GenWithStack("Modify Column on partitioned table / typeUpdateColumnWorker not yet supported.") } // Get the original start handle and end handle. - currentVer, err := getValidCurrentVersion(reorgInfo.d.store) + currentVer, err := getValidCurrentVersion(reorgInfo.jobCtx.store) if err != nil { return errors.Trace(err) } //nolint:forcetypeassert - originalStartHandle, originalEndHandle, err := getTableRange(reorgInfo.NewJobContext(), reorgInfo.d, t.(table.PhysicalTable), currentVer.Ver, reorgInfo.Job.Priority) + originalStartHandle, originalEndHandle, err := getTableRange(reorgInfo.NewJobContext(), reorgInfo.jobCtx.store, t.(table.PhysicalTable), currentVer.Ver, reorgInfo.Job.Priority) if err != nil { return errors.Trace(err) } @@ -1213,7 +604,7 @@ type updateColumnWorker struct { checksumNeeded bool } -func newUpdateColumnWorker(id int, t table.PhysicalTable, decodeColMap map[int64]decoder.Column, reorgInfo *reorgInfo, jc *JobContext) (*updateColumnWorker, error) { +func newUpdateColumnWorker(id int, t table.PhysicalTable, decodeColMap map[int64]decoder.Column, reorgInfo *reorgInfo, jc *ReorgContext) (*updateColumnWorker, error) { bCtx, err := newBackfillCtx(id, reorgInfo, reorgInfo.SchemaName, t, jc, "update_col_rate", false) if err != nil { return nil, err @@ -1504,130 +895,7 @@ func updateChangingObjState(changingCol *model.ColumnInfo, changingIdxs []*model } } -// doModifyColumn updates the column information and reorders all columns. It does not support modifying column data. -func (w *worker) doModifyColumn( - d *ddlCtx, t *meta.Meta, job *model.Job, dbInfo *model.DBInfo, tblInfo *model.TableInfo, - newCol, oldCol *model.ColumnInfo, pos *ast.ColumnPosition) (ver int64, _ error) { - if oldCol.ID != newCol.ID { - job.State = model.JobStateRollingback - return ver, dbterror.ErrColumnInChange.GenWithStackByArgs(oldCol.Name, newCol.ID) - } - // Column from null to not null. - if !mysql.HasNotNullFlag(oldCol.GetFlag()) && mysql.HasNotNullFlag(newCol.GetFlag()) { - noPreventNullFlag := !mysql.HasPreventNullInsertFlag(oldCol.GetFlag()) - - // lease = 0 means it's in an integration test. In this case we don't delay so the test won't run too slowly. - // We need to check after the flag is set - if d.lease > 0 && !noPreventNullFlag { - delayForAsyncCommit() - } - - // Introduce the `mysql.PreventNullInsertFlag` flag to prevent users from inserting or updating null values. - err := modifyColsFromNull2NotNull(w, dbInfo, tblInfo, []*model.ColumnInfo{oldCol}, newCol, oldCol.GetType() != newCol.GetType()) - if err != nil { - if dbterror.ErrWarnDataTruncated.Equal(err) || dbterror.ErrInvalidUseOfNull.Equal(err) { - job.State = model.JobStateRollingback - } - return ver, err - } - // The column should get into prevent null status first. - if noPreventNullFlag { - return updateVersionAndTableInfoWithCheck(d, t, job, tblInfo, true) - } - } - - if job.MultiSchemaInfo != nil && job.MultiSchemaInfo.Revertible { - job.MarkNonRevertible() - // Store the mark and enter the next DDL handling loop. - return updateVersionAndTableInfoWithCheck(d, t, job, tblInfo, false) - } - - if err := adjustTableInfoAfterModifyColumn(tblInfo, newCol, oldCol, pos); err != nil { - job.State = model.JobStateRollingback - return ver, errors.Trace(err) - } - - childTableInfos, err := adjustForeignKeyChildTableInfoAfterModifyColumn(d, t, job, tblInfo, newCol, oldCol) - if err != nil { - return ver, errors.Trace(err) - } - ver, err = updateVersionAndTableInfoWithCheck(d, t, job, tblInfo, true, childTableInfos...) - if err != nil { - // Modified the type definition of 'null' to 'not null' before this, so rollBack the job when an error occurs. - job.State = model.JobStateRollingback - return ver, errors.Trace(err) - } - - job.FinishTableJob(model.JobStateDone, model.StatePublic, ver, tblInfo) - // For those column-type-change type which doesn't need reorg data, we should also mock the job args for delete range. - job.Args = []any{[]int64{}, []int64{}} - return ver, nil -} - -func adjustTableInfoAfterModifyColumn( - tblInfo *model.TableInfo, newCol, oldCol *model.ColumnInfo, pos *ast.ColumnPosition) error { - // We need the latest column's offset and state. This information can be obtained from the store. - newCol.Offset = oldCol.Offset - newCol.State = oldCol.State - if pos != nil && pos.RelativeColumn != nil && oldCol.Name.L == pos.RelativeColumn.Name.L { - // For cases like `modify column b after b`, it should report this error. - return errors.Trace(infoschema.ErrColumnNotExists.GenWithStackByArgs(oldCol.Name, tblInfo.Name)) - } - destOffset, err := LocateOffsetToMove(oldCol.Offset, pos, tblInfo) - if err != nil { - return errors.Trace(infoschema.ErrColumnNotExists.GenWithStackByArgs(oldCol.Name, tblInfo.Name)) - } - tblInfo.Columns[oldCol.Offset] = newCol - tblInfo.MoveColumnInfo(oldCol.Offset, destOffset) - updateNewIdxColsNameOffset(tblInfo.Indices, oldCol.Name, newCol) - updateFKInfoWhenModifyColumn(tblInfo, oldCol.Name, newCol.Name) - updateTTLInfoWhenModifyColumn(tblInfo, oldCol.Name, newCol.Name) - return nil -} - -func adjustForeignKeyChildTableInfoAfterModifyColumn(d *ddlCtx, t *meta.Meta, job *model.Job, tblInfo *model.TableInfo, newCol, oldCol *model.ColumnInfo) ([]schemaIDAndTableInfo, error) { - if !variable.EnableForeignKey.Load() || newCol.Name.L == oldCol.Name.L { - return nil, nil - } - is, err := getAndCheckLatestInfoSchema(d, t) - if err != nil { - return nil, err - } - referredFKs := is.GetTableReferredForeignKeys(job.SchemaName, tblInfo.Name.L) - if len(referredFKs) == 0 { - return nil, nil - } - fkh := newForeignKeyHelper() - fkh.addLoadedTable(job.SchemaName, tblInfo.Name.L, job.SchemaID, tblInfo) - for _, referredFK := range referredFKs { - info, err := fkh.getTableFromStorage(is, t, referredFK.ChildSchema, referredFK.ChildTable) - if err != nil { - if infoschema.ErrTableNotExists.Equal(err) || infoschema.ErrDatabaseNotExists.Equal(err) { - continue - } - return nil, err - } - fkInfo := model.FindFKInfoByName(info.tblInfo.ForeignKeys, referredFK.ChildFKName.L) - if fkInfo == nil { - continue - } - for i := range fkInfo.RefCols { - if fkInfo.RefCols[i].L == oldCol.Name.L { - fkInfo.RefCols[i] = newCol.Name - } - } - } - infoList := make([]schemaIDAndTableInfo, 0, len(fkh.loaded)) - for _, info := range fkh.loaded { - if info.tblInfo.ID == tblInfo.ID { - continue - } - infoList = append(infoList, info) - } - return infoList, nil -} - -func checkAndApplyAutoRandomBits(d *ddlCtx, m *meta.Meta, dbInfo *model.DBInfo, tblInfo *model.TableInfo, +func checkAndApplyAutoRandomBits(jobCtx *jobContext, m *meta.Meta, dbInfo *model.DBInfo, tblInfo *model.TableInfo, oldCol *model.ColumnInfo, newCol *model.ColumnInfo, newAutoRandBits uint64) error { if newAutoRandBits == 0 { return nil @@ -1637,7 +905,7 @@ func checkAndApplyAutoRandomBits(d *ddlCtx, m *meta.Meta, dbInfo *model.DBInfo, if err != nil { return err } - return applyNewAutoRandomBits(d, m, dbInfo, tblInfo, oldCol, newAutoRandBits) + return applyNewAutoRandomBits(jobCtx, m, dbInfo, tblInfo, oldCol, newAutoRandBits) } // checkNewAutoRandomBits checks whether the new auto_random bits number can cause overflow. @@ -1698,14 +966,14 @@ func (r *asAutoIDRequirement) AutoIDClient() *autoid.ClientDiscover { // applyNewAutoRandomBits set auto_random bits to TableInfo and // migrate auto_increment ID to auto_random ID if possible. -func applyNewAutoRandomBits(d *ddlCtx, m *meta.Meta, dbInfo *model.DBInfo, +func applyNewAutoRandomBits(jobCtx *jobContext, m *meta.Meta, dbInfo *model.DBInfo, tblInfo *model.TableInfo, oldCol *model.ColumnInfo, newAutoRandBits uint64) error { tblInfo.AutoRandomBits = newAutoRandBits needMigrateFromAutoIncToAutoRand := mysql.HasAutoIncrementFlag(oldCol.GetFlag()) if !needMigrateFromAutoIncToAutoRand { return nil } - autoRandAlloc := autoid.NewAllocatorsFromTblInfo(d.getAutoIDRequirement(), dbInfo.ID, tblInfo).Get(autoid.AutoRandomType) + autoRandAlloc := autoid.NewAllocatorsFromTblInfo(jobCtx.getAutoIDRequirement(), dbInfo.ID, tblInfo).Get(autoid.AutoRandomType) if autoRandAlloc == nil { errMsg := fmt.Sprintf(autoid.AutoRandomAllocatorNotFound, dbInfo.Name.O, tblInfo.Name.O) return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(errMsg) @@ -1768,7 +1036,7 @@ func checkForNullValue(ctx context.Context, sctx sessionctx.Context, isDataTrunc return nil } -func updateColumnDefaultValue(d *ddlCtx, t *meta.Meta, job *model.Job, newCol *model.ColumnInfo, oldColName *model.CIStr) (ver int64, _ error) { +func updateColumnDefaultValue(jobCtx *jobContext, t *meta.Meta, job *model.Job, newCol *model.ColumnInfo, oldColName *model.CIStr) (ver int64, _ error) { tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) if err != nil { return ver, errors.Trace(err) @@ -1777,7 +1045,7 @@ func updateColumnDefaultValue(d *ddlCtx, t *meta.Meta, job *model.Job, newCol *m if job.MultiSchemaInfo != nil && job.MultiSchemaInfo.Revertible { job.MarkNonRevertible() // Store the mark and enter the next DDL handling loop. - return updateVersionAndTableInfoWithCheck(d, t, job, tblInfo, false) + return updateVersionAndTableInfoWithCheck(jobCtx, t, job, tblInfo, false) } oldCol := model.FindColumnInfo(tblInfo.Columns, oldColName.L) @@ -1809,7 +1077,7 @@ func updateColumnDefaultValue(d *ddlCtx, t *meta.Meta, job *model.Job, newCol *m } } - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { job.State = model.JobStateCancelled return ver, errors.Trace(err) @@ -1878,25 +1146,6 @@ func checkAddColumnTooManyColumns(colNum int) error { return nil } -// rollbackModifyColumnJob rollbacks the job when an error occurs. -func rollbackModifyColumnJob(d *ddlCtx, t *meta.Meta, tblInfo *model.TableInfo, job *model.Job, newCol, oldCol *model.ColumnInfo, modifyColumnTp byte) (ver int64, _ error) { - var err error - if oldCol.ID == newCol.ID && modifyColumnTp == mysql.TypeNull { - // field NotNullFlag flag reset. - tblInfo.Columns[oldCol.Offset].SetFlag(oldCol.GetFlag() &^ mysql.NotNullFlag) - // field PreventNullInsertFlag flag reset. - tblInfo.Columns[oldCol.Offset].SetFlag(oldCol.GetFlag() &^ mysql.PreventNullInsertFlag) - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) - if err != nil { - return ver, errors.Trace(err) - } - } - job.FinishTableJob(model.JobStateRollbackDone, model.StateNone, ver, tblInfo) - // For those column-type-change type which doesn't need reorg data, we should also mock the job args for delete range. - job.Args = []any{[]int64{}, []int64{}} - return ver, nil -} - // modifyColsFromNull2NotNull modifies the type definitions of 'null' to 'not null'. // Introduce the `mysql.PreventNullInsertFlag` flag to prevent users from inserting or updating null values. func modifyColsFromNull2NotNull(w *worker, dbInfo *model.DBInfo, tblInfo *model.TableInfo, cols []*model.ColumnInfo, newCol *model.ColumnInfo, isDataTruncated bool) error { diff --git a/pkg/ddl/column_change_test.go b/pkg/ddl/column_change_test.go index 5d10c51866b2c..f637ed5a89b69 100644 --- a/pkg/ddl/column_change_test.go +++ b/pkg/ddl/column_change_test.go @@ -23,7 +23,6 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/tidb/pkg/ddl" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/meta" "github.com/pingcap/tidb/pkg/parser/model" @@ -34,6 +33,7 @@ import ( "github.com/pingcap/tidb/pkg/tablecodec" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/testkit/external" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/mock" "github.com/stretchr/testify/require" @@ -48,9 +48,6 @@ func TestColumnAdd(t *testing.T) { tk.MustExec("create table t (c1 int, c2 int);") tk.MustExec("insert t values (1, 2);") - d := dom.DDL() - tc := &callback.TestDDLCallback{Do: dom} - ct := testNewContext(store) // set up hook var ( @@ -61,9 +58,9 @@ func TestColumnAdd(t *testing.T) { ) first := true var jobID int64 - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { jobID = job.ID - tbl, exist := dom.InfoSchema().TableByID(job.TableID) + tbl, exist := dom.InfoSchema().TableByID(context.Background(), job.TableID) require.True(t, exist) switch job.SchemaState { case model.StateDeleteOnly: @@ -79,22 +76,20 @@ func TestColumnAdd(t *testing.T) { publicTable = tbl require.NoError(t, checkAddPublic(ct, writeOnlyTable, publicTable)) } - } - tc.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(tc.Clone()) + }) tk.MustExec("alter table t add column c3 int default 3") tb := publicTable v := getSchemaVer(t, tk.Session()) checkHistoryJobArgs(t, tk.Session(), jobID, &historyJobArgs{ver: v, tbl: tb.Meta()}) // Drop column. - tc.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if dropCol == nil { tbl := external.GetTableByName(t, internal, "test", "t") dropCol = tbl.VisibleCols()[2] } - } - onJobUpdatedExportedFunc2 := func(job *model.Job) { + }) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if job.NotStarted() { return } @@ -105,9 +100,7 @@ func TestColumnAdd(t *testing.T) { require.NotEqualf(t, col.ID, dropCol.ID, "column is not dropped") } } - } - tc.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc2) - d.SetHook(tc.Clone()) + }) tk.MustExec("alter table t drop column c3") v = getSchemaVer(t, tk.Session()) // Don't check column, so it's ok to use tb. @@ -115,9 +108,9 @@ func TestColumnAdd(t *testing.T) { // Add column not default. first = true - onJobUpdatedExportedFunc3 := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { jobID = job.ID - tbl, exist := dom.InfoSchema().TableByID(job.TableID) + tbl, exist := dom.InfoSchema().TableByID(context.Background(), job.TableID) require.True(t, exist) switch job.SchemaState { case model.StateWriteOnly: @@ -128,34 +121,29 @@ func TestColumnAdd(t *testing.T) { } first = false sess := testNewContext(store) - err := sessiontxn.NewTxn(context.Background(), sess) + txn, err := newTxn(sess) require.NoError(t, err) - _, err = writeOnlyTable.AddRecord(sess.GetTableCtx(), types.MakeDatums(10, 10)) + _, err = writeOnlyTable.AddRecord(sess.GetTableCtx(), txn, types.MakeDatums(10, 10)) require.NoError(t, err) } - } - tc.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc3) - d.SetHook(tc) + }) tk.MustExec("alter table t add column c3 int") testCheckJobDone(t, store, jobID, true) } func TestModifyAutoRandColumnWithMetaKeyChanged(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) ddl.SetWaitTimeWhenErrorOccurred(1 * time.Microsecond) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("create table t (a bigint primary key clustered AUTO_RANDOM(5));") - d := dom.DDL() - tc := &callback.TestDDLCallback{Do: dom} - var errCount int32 = 3 var genAutoRandErr error var dbID int64 var tID int64 var jobID int64 - tc.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { jobID = job.ID dbID = job.SchemaID tID = job.TableID @@ -168,8 +156,7 @@ func TestModifyAutoRandColumnWithMetaKeyChanged(t *testing.T) { return err1 }) } - } - d.SetHook(tc) + }) tk.MustExec("alter table t modify column a bigint AUTO_RANDOM(10)") require.True(t, errCount == 0) @@ -215,15 +202,15 @@ func seek(t table.PhysicalTable, ctx sessionctx.Context, h kv.Handle) (kv.Handle func checkAddWriteOnly(ctx sessionctx.Context, deleteOnlyTable, writeOnlyTable table.Table, h kv.Handle) error { // WriteOnlyTable: insert t values (2, 3) - err := sessiontxn.NewTxn(context.Background(), ctx) + txn, err := newTxn(ctx) if err != nil { return errors.Trace(err) } - _, err = writeOnlyTable.AddRecord(ctx.GetTableCtx(), types.MakeDatums(2, 3)) + _, err = writeOnlyTable.AddRecord(ctx.GetTableCtx(), txn, types.MakeDatums(2, 3)) if err != nil { return errors.Trace(err) } - err = sessiontxn.NewTxn(context.Background(), ctx) + txn, err = newTxn(ctx) if err != nil { return errors.Trace(err) } @@ -257,11 +244,11 @@ func checkAddWriteOnly(ctx sessionctx.Context, deleteOnlyTable, writeOnlyTable t if err != nil { return errors.Trace(err) } - err = writeOnlyTable.UpdateRecord(context.Background(), ctx.GetTableCtx(), h, types.MakeDatums(1, 2, 3), types.MakeDatums(2, 2, 3), touchedSlice(writeOnlyTable)) + err = writeOnlyTable.UpdateRecord(ctx.GetTableCtx(), txn, h, types.MakeDatums(1, 2, 3), types.MakeDatums(2, 2, 3), touchedSlice(writeOnlyTable)) if err != nil { return errors.Trace(err) } - err = sessiontxn.NewTxn(context.Background(), ctx) + txn, err = newTxn(ctx) if err != nil { return errors.Trace(err) } @@ -274,11 +261,11 @@ func checkAddWriteOnly(ctx sessionctx.Context, deleteOnlyTable, writeOnlyTable t return errors.Trace(err) } // DeleteOnlyTable: delete from t where c2 = 2 - err = deleteOnlyTable.RemoveRecord(ctx.GetTableCtx(), h, types.MakeDatums(2, 2)) + err = deleteOnlyTable.RemoveRecord(ctx.GetTableCtx(), txn, h, types.MakeDatums(2, 2)) if err != nil { return errors.Trace(err) } - err = sessiontxn.NewTxn(context.Background(), ctx) + _, err = newTxn(ctx) if err != nil { return errors.Trace(err) } @@ -298,17 +285,16 @@ func touchedSlice(t table.Table) []bool { } func checkAddPublic(sctx sessionctx.Context, writeOnlyTable, publicTable table.Table) error { - ctx := context.TODO() // publicTable Insert t values (4, 4, 4) - err := sessiontxn.NewTxn(ctx, sctx) + txn, err := newTxn(sctx) if err != nil { return errors.Trace(err) } - h, err := publicTable.AddRecord(sctx.GetTableCtx(), types.MakeDatums(4, 4, 4)) + h, err := publicTable.AddRecord(sctx.GetTableCtx(), txn, types.MakeDatums(4, 4, 4)) if err != nil { return errors.Trace(err) } - err = sessiontxn.NewTxn(ctx, sctx) + txn, err = newTxn(sctx) if err != nil { return errors.Trace(err) } @@ -321,11 +307,11 @@ func checkAddPublic(sctx sessionctx.Context, writeOnlyTable, publicTable table.T return errors.Errorf("%v", oldRow) } newRow := types.MakeDatums(3, 4, oldRow[2].GetValue()) - err = writeOnlyTable.UpdateRecord(context.Background(), sctx.GetTableCtx(), h, oldRow, newRow, touchedSlice(writeOnlyTable)) + err = writeOnlyTable.UpdateRecord(sctx.GetTableCtx(), txn, h, oldRow, newRow, touchedSlice(writeOnlyTable)) if err != nil { return errors.Trace(err) } - err = sessiontxn.NewTxn(ctx, sctx) + _, err = newTxn(sctx) if err != nil { return errors.Trace(err) } @@ -373,9 +359,7 @@ type historyJobArgs struct { } func getSchemaVer(t *testing.T, ctx sessionctx.Context) int64 { - err := sessiontxn.NewTxn(context.Background(), ctx) - require.NoError(t, err) - txn, err := ctx.Txn(true) + txn, err := newTxn(ctx) require.NoError(t, err) m := meta.NewMeta(txn) ver, err := m.GetSchemaVersion() @@ -438,7 +422,7 @@ func testNewContext(store kv.Storage) sessionctx.Context { } func TestIssue40135(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -447,16 +431,22 @@ func TestIssue40135(t *testing.T) { tk.MustExec("CREATE TABLE t40135 ( a tinyint DEFAULT NULL, b varchar(32) DEFAULT 'md') PARTITION BY HASH (a) PARTITIONS 2") one := true - hook := &callback.TestDDLCallback{Do: dom} var checkErr error - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if one { one = false _, checkErr = tk1.Exec("alter table t40135 change column a aNew SMALLINT NULL DEFAULT '-14996'") } - } - dom.DDL().SetHook(hook) + }) tk.MustExec("alter table t40135 modify column a MEDIUMINT NULL DEFAULT '6243108' FIRST") require.ErrorContains(t, checkErr, "[ddl:3855]Column 'a' has a partitioning function dependency and cannot be dropped or renamed") } + +func newTxn(ctx sessionctx.Context) (kv.Transaction, error) { + err := sessiontxn.NewTxn(context.Background(), ctx) + if err != nil { + return nil, err + } + return ctx.Txn(true) +} diff --git a/pkg/ddl/column_modify_test.go b/pkg/ddl/column_modify_test.go index 90b4a930fb85a..c453e6370f503 100644 --- a/pkg/ddl/column_modify_test.go +++ b/pkg/ddl/column_modify_test.go @@ -24,7 +24,6 @@ import ( "github.com/pingcap/errors" testddlutil "github.com/pingcap/tidb/pkg/ddl/testutil" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/errno" "github.com/pingcap/tidb/pkg/kv" @@ -37,6 +36,7 @@ import ( "github.com/pingcap/tidb/pkg/table/tables" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/testkit/external" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/mock" "github.com/stretchr/testify/require" @@ -421,7 +421,7 @@ func TestVirtualColumnDDL(t *testing.T) { } func TestTransactionWithWriteOnlyColumn(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, columnModifyLease) + store := testkit.CreateMockStoreWithSchemaLease(t, columnModifyLease) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t1") @@ -436,9 +436,8 @@ func TestTransactionWithWriteOnlyColumn(t *testing.T) { }, } - hook := &callback.TestDDLCallback{Do: dom} var checkErr error - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if checkErr != nil { return } @@ -456,8 +455,7 @@ func TestTransactionWithWriteOnlyColumn(t *testing.T) { } } } - } - dom.DDL().SetHook(hook) + }) done := make(chan error, 1) // test transaction on add column. go backgroundExec(store, "test", "alter table t1 add column c int not null", done) @@ -477,7 +475,7 @@ func TestTransactionWithWriteOnlyColumn(t *testing.T) { // For issue #31735. func TestAddGeneratedColumnAndInsert(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, columnModifyLease) + store := testkit.CreateMockStoreWithSchemaLease(t, columnModifyLease) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -487,13 +485,11 @@ func TestAddGeneratedColumnAndInsert(t *testing.T) { tk1 := testkit.NewTestKit(t, store) tk1.MustExec("use test") - d := dom.DDL() - hook := &callback.TestDDLCallback{Do: dom} ctx := mock.NewContext() ctx.Store = store times := 0 var checkErr error - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if checkErr != nil { return } @@ -517,9 +513,7 @@ func TestAddGeneratedColumnAndInsert(t *testing.T) { times++ } } - } - hook.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(hook) + }) tk.MustExec("alter table t1 add column gc int as ((a+1))") tk.MustQuery("select * from t1 order by a").Check(testkit.Rows("4 5", "10 11")) @@ -527,16 +521,15 @@ func TestAddGeneratedColumnAndInsert(t *testing.T) { } func TestColumnTypeChangeGenUniqueChangingName(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, columnModifyLease) + store := testkit.CreateMockStoreWithSchemaLease(t, columnModifyLease) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") - hook := &callback.TestDDLCallback{} var checkErr error assertChangingColName := "_col$_c2_0" assertChangingIdxName := "_idx$_idx_0" - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if job.SchemaState == model.StateDeleteOnly && job.Type == model.ActionModifyColumn { var ( _newCol *model.ColumnInfo @@ -559,10 +552,7 @@ func TestColumnTypeChangeGenUniqueChangingName(t *testing.T) { checkErr = errors.New("changing index name is incorrect") } } - } - hook.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d := dom.DDL() - d.SetHook(hook) + }) tk.MustExec("create table if not exists t(c1 varchar(256), c2 bigint, `_col$_c2` varchar(10), unique _idx$_idx(c1), unique idx(c2));") tk.MustExec("alter table test.t change column c2 cC2 tinyint after `_col$_c2`") @@ -593,7 +583,7 @@ func TestColumnTypeChangeGenUniqueChangingName(t *testing.T) { assertChangingColName2 := "_col$__col$__col$_c1_0_1" query1 := "alter table t modify column _col$_c1 tinyint" query2 := "alter table t modify column _col$__col$_c1_0 tinyint" - onJobUpdatedExportedFunc2 := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if (job.Query == query1 || job.Query == query2) && job.SchemaState == model.StateDeleteOnly && job.Type == model.ActionModifyColumn { var ( _newCol *model.ColumnInfo @@ -616,9 +606,7 @@ func TestColumnTypeChangeGenUniqueChangingName(t *testing.T) { checkErr = errors.New("changing column name is incorrect") } } - } - hook.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc2) - d.SetHook(hook) + }) tk.MustExec("drop table if exists t") tk.MustExec("create table if not exists t(c1 bigint, _col$_c1 bigint, _col$__col$_c1_0 bigint, _col$__col$__col$_c1_0_0 bigint)") diff --git a/pkg/ddl/column_test.go b/pkg/ddl/column_test.go index 71f22ea7bb643..caa33dc883314 100644 --- a/pkg/ddl/column_test.go +++ b/pkg/ddl/column_test.go @@ -23,18 +23,17 @@ import ( "testing" "github.com/pingcap/errors" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/terror" "github.com/pingcap/tidb/pkg/sessionctx" - "github.com/pingcap/tidb/pkg/sessiontxn" "github.com/pingcap/tidb/pkg/store/mockstore" "github.com/pingcap/tidb/pkg/table" "github.com/pingcap/tidb/pkg/table/tables" "github.com/pingcap/tidb/pkg/tablecodec" "github.com/pingcap/tidb/pkg/testkit" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/types" "github.com/stretchr/testify/require" ) @@ -51,7 +50,7 @@ func testCreateColumn(tk *testkit.TestKit, t *testing.T, ctx sessionctx.Context, id := int64(idi) v := getSchemaVer(t, ctx) require.NoError(t, dom.Reload()) - tblInfo, exist := dom.InfoSchema().TableByID(tblID) + tblInfo, exist := dom.InfoSchema().TableByID(context.Background(), tblID) require.True(t, exist) checkHistoryJobArgs(t, ctx, id, &historyJobArgs{ver: v, tbl: tblInfo.Meta()}) return id @@ -74,7 +73,7 @@ func testCreateColumns(tk *testkit.TestKit, t *testing.T, ctx sessionctx.Context id := int64(idi) v := getSchemaVer(t, ctx) require.NoError(t, dom.Reload()) - tblInfo, exist := dom.InfoSchema().TableByID(tblID) + tblInfo, exist := dom.InfoSchema().TableByID(context.Background(), tblID) require.True(t, exist) checkHistoryJobArgs(t, ctx, id, &historyJobArgs{ver: v, tbl: tblInfo.Meta()}) return id @@ -93,7 +92,7 @@ func testDropColumnInternal(tk *testkit.TestKit, t *testing.T, ctx sessionctx.Co id := int64(idi) v := getSchemaVer(t, ctx) require.NoError(t, dom.Reload()) - tblInfo, exist := dom.InfoSchema().TableByID(tblID) + tblInfo, exist := dom.InfoSchema().TableByID(context.Background(), tblID) require.True(t, exist) checkHistoryJobArgs(t, ctx, id, &historyJobArgs{ver: v, tbl: tblInfo.Meta()}) return id @@ -124,7 +123,7 @@ func testCreateIndex(tk *testkit.TestKit, t *testing.T, ctx sessionctx.Context, id := int64(idi) v := getSchemaVer(t, ctx) require.NoError(t, dom.Reload()) - tblInfo, exist := dom.InfoSchema().TableByID(tblID) + tblInfo, exist := dom.InfoSchema().TableByID(context.Background(), tblID) require.True(t, exist) checkHistoryJobArgs(t, ctx, id, &historyJobArgs{ver: v, tbl: tblInfo.Meta()}) return id @@ -149,7 +148,7 @@ func testDropColumns(tk *testkit.TestKit, t *testing.T, ctx sessionctx.Context, id := int64(idi) v := getSchemaVer(t, ctx) require.NoError(t, dom.Reload()) - tblInfo, exist := dom.InfoSchema().TableByID(tblID) + tblInfo, exist := dom.InfoSchema().TableByID(context.Background(), tblID) require.True(t, exist) checkHistoryJobArgs(t, ctx, id, &historyJobArgs{ver: v, tbl: tblInfo.Meta()}) return id @@ -168,7 +167,7 @@ func TestColumnBasic(t *testing.T) { } ctx := testNewContext(store) - err := sessiontxn.NewTxn(context.Background(), ctx) + txn, err := newTxn(ctx) require.NoError(t, err) var tableID int64 @@ -212,9 +211,9 @@ func TestColumnBasic(t *testing.T) { require.NoError(t, err) require.Equal(t, i, num) - h, err := tbl.AddRecord(ctx.GetTableCtx(), types.MakeDatums(11, 12, 13, 14)) + h, err := tbl.AddRecord(ctx.GetTableCtx(), txn, types.MakeDatums(11, 12, 13, 14)) require.NoError(t, err) - err = sessiontxn.NewTxn(context.Background(), ctx) + _, err = newTxn(ctx) require.NoError(t, err) values, err := tables.RowWithCols(tbl, ctx, h, tbl.Cols()) require.NoError(t, err) @@ -311,23 +310,17 @@ func TestColumnBasic(t *testing.T) { } func checkColumnKVExist(ctx sessionctx.Context, t table.Table, handle kv.Handle, col *table.Column, columnValue any, isExist bool) error { - err := sessiontxn.NewTxn(context.Background(), ctx) + txn, err := newTxn(ctx) if err != nil { return errors.Trace(err) } defer func() { - if txn, err1 := ctx.Txn(true); err1 == nil { - err = txn.Commit(context.Background()) - if err != nil { - panic(err) - } + err = txn.Commit(context.Background()) + if err != nil { + panic(err) } }() key := tablecodec.EncodeRecordKey(t.RecordPrefix(), handle) - txn, err := ctx.Txn(true) - if err != nil { - return errors.Trace(err) - } data, err := txn.Get(context.TODO(), key) if !isExist { if terror.ErrorEqual(err, kv.ErrNotExist) { @@ -366,7 +359,7 @@ func checkNoneColumn(t *testing.T, ctx sessionctx.Context, tableID int64, handle func checkDeleteOnlyColumn(t *testing.T, ctx sessionctx.Context, tableID int64, handle kv.Handle, col *table.Column, row []types.Datum, columnValue any, dom *domain.Domain) { tbl := testGetTable(t, dom, tableID) - err := sessiontxn.NewTxn(context.Background(), ctx) + _, err := newTxn(ctx) require.NoError(t, err) i := 0 err = tables.IterRecords(tbl, ctx, tbl.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { @@ -379,13 +372,13 @@ func checkDeleteOnlyColumn(t *testing.T, ctx sessionctx.Context, tableID int64, err = checkColumnKVExist(ctx, tbl, handle, col, columnValue, false) require.NoError(t, err) // Test add a new row. - err = sessiontxn.NewTxn(context.Background(), ctx) + txn, err := newTxn(ctx) require.NoError(t, err) newRow := types.MakeDatums(int64(11), int64(22), int64(33)) - newHandle, err := tbl.AddRecord(ctx.GetTableCtx(), newRow) + newHandle, err := tbl.AddRecord(ctx.GetTableCtx(), txn, newRow) require.NoError(t, err) - err = sessiontxn.NewTxn(context.Background(), ctx) + _, err = newTxn(ctx) require.NoError(t, err) rows := [][]types.Datum{row, newRow} @@ -402,12 +395,12 @@ func checkDeleteOnlyColumn(t *testing.T, ctx sessionctx.Context, tableID int64, err = checkColumnKVExist(ctx, tbl, handle, col, columnValue, false) require.NoError(t, err) // Test remove a row. - err = sessiontxn.NewTxn(context.Background(), ctx) + txn, err = newTxn(ctx) require.NoError(t, err) - err = tbl.RemoveRecord(ctx.GetTableCtx(), newHandle, newRow) + err = tbl.RemoveRecord(ctx.GetTableCtx(), txn, newHandle, newRow) require.NoError(t, err) - err = sessiontxn.NewTxn(context.Background(), ctx) + _, err = newTxn(ctx) require.NoError(t, err) i = 0 err = tables.IterRecords(tbl, ctx, tbl.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { @@ -425,7 +418,7 @@ func checkDeleteOnlyColumn(t *testing.T, ctx sessionctx.Context, tableID int64, func checkWriteOnlyColumn(t *testing.T, ctx sessionctx.Context, tableID int64, handle kv.Handle, col *table.Column, row []types.Datum, columnValue any, dom *domain.Domain) { tbl := testGetTable(t, dom, tableID) - err := sessiontxn.NewTxn(context.Background(), ctx) + _, err := newTxn(ctx) require.NoError(t, err) i := 0 @@ -441,13 +434,13 @@ func checkWriteOnlyColumn(t *testing.T, ctx sessionctx.Context, tableID int64, h require.NoError(t, err) // Test add a new row. - err = sessiontxn.NewTxn(context.Background(), ctx) + txn, err := newTxn(ctx) require.NoError(t, err) newRow := types.MakeDatums(int64(11), int64(22), int64(33)) - newHandle, err := tbl.AddRecord(ctx.GetTableCtx(), newRow) + newHandle, err := tbl.AddRecord(ctx.GetTableCtx(), txn, newRow) require.NoError(t, err) - err = sessiontxn.NewTxn(context.Background(), ctx) + _, err = newTxn(ctx) require.NoError(t, err) rows := [][]types.Datum{row, newRow} @@ -464,12 +457,12 @@ func checkWriteOnlyColumn(t *testing.T, ctx sessionctx.Context, tableID int64, h err = checkColumnKVExist(ctx, tbl, newHandle, col, columnValue, true) require.NoError(t, err) // Test remove a row. - err = sessiontxn.NewTxn(context.Background(), ctx) + txn, err = newTxn(ctx) require.NoError(t, err) - err = tbl.RemoveRecord(ctx.GetTableCtx(), newHandle, newRow) + err = tbl.RemoveRecord(ctx.GetTableCtx(), txn, newHandle, newRow) require.NoError(t, err) - err = sessiontxn.NewTxn(context.Background(), ctx) + _, err = newTxn(ctx) require.NoError(t, err) i = 0 @@ -488,7 +481,7 @@ func checkWriteOnlyColumn(t *testing.T, ctx sessionctx.Context, tableID int64, h func checkReorganizationColumn(t *testing.T, ctx sessionctx.Context, tableID int64, col *table.Column, row []types.Datum, columnValue any, dom *domain.Domain) { tbl := testGetTable(t, dom, tableID) - err := sessiontxn.NewTxn(context.Background(), ctx) + _, err := newTxn(ctx) require.NoError(t, err) i := 0 @@ -501,13 +494,13 @@ func checkReorganizationColumn(t *testing.T, ctx sessionctx.Context, tableID int require.Equalf(t, 1, i, "expect 1, got %v", i) // Test add a new row. - err = sessiontxn.NewTxn(context.Background(), ctx) + txn, err := newTxn(ctx) require.NoError(t, err) newRow := types.MakeDatums(int64(11), int64(22), int64(33)) - newHandle, err := tbl.AddRecord(ctx.GetTableCtx(), newRow) + newHandle, err := tbl.AddRecord(ctx.GetTableCtx(), txn, newRow) require.NoError(t, err) - err = sessiontxn.NewTxn(context.Background(), ctx) + _, err = newTxn(ctx) require.NoError(t, err) rows := [][]types.Datum{row, newRow} @@ -525,12 +518,12 @@ func checkReorganizationColumn(t *testing.T, ctx sessionctx.Context, tableID int require.NoError(t, err) // Test remove a row. - err = sessiontxn.NewTxn(context.Background(), ctx) + txn, err = newTxn(ctx) require.NoError(t, err) - err = tbl.RemoveRecord(ctx.GetTableCtx(), newHandle, newRow) + err = tbl.RemoveRecord(ctx.GetTableCtx(), txn, newHandle, newRow) require.NoError(t, err) - err = sessiontxn.NewTxn(context.Background(), ctx) + _, err = newTxn(ctx) require.NoError(t, err) i = 0 @@ -546,7 +539,7 @@ func checkReorganizationColumn(t *testing.T, ctx sessionctx.Context, tableID int func checkPublicColumn(t *testing.T, ctx sessionctx.Context, tableID int64, newCol *table.Column, oldRow []types.Datum, columnValue any, dom *domain.Domain, columnCnt int) { tbl := testGetTable(t, dom, tableID) - err := sessiontxn.NewTxn(context.Background(), ctx) + _, err := newTxn(ctx) require.NoError(t, err) i := 0 @@ -564,16 +557,16 @@ func checkPublicColumn(t *testing.T, ctx sessionctx.Context, tableID int64, newC require.Equalf(t, 1, i, "expect 1, got %v", i) // Test add a new row. - err = sessiontxn.NewTxn(context.Background(), ctx) + txn, err := newTxn(ctx) require.NoError(t, err) newRow := types.MakeDatums(int64(11), int64(22), int64(33), int64(44)) for j := 1; j < columnCnt; j++ { newRow = append(newRow, types.NewDatum(int64(44))) } - handle, err := tbl.AddRecord(ctx.GetTableCtx(), newRow) + handle, err := tbl.AddRecord(ctx.GetTableCtx(), txn, newRow) require.NoError(t, err) - err = sessiontxn.NewTxn(context.Background(), ctx) + _, err = newTxn(ctx) require.NoError(t, err) rows := [][]types.Datum{updatedRow, newRow} @@ -588,13 +581,13 @@ func checkPublicColumn(t *testing.T, ctx sessionctx.Context, tableID int64, newC require.Equalf(t, 2, i, "expect 2, got %v", i) // Test remove a row. - err = sessiontxn.NewTxn(context.Background(), ctx) + txn, err = newTxn(ctx) require.NoError(t, err) - err = tbl.RemoveRecord(ctx.GetTableCtx(), handle, newRow) + err = tbl.RemoveRecord(ctx.GetTableCtx(), txn, handle, newRow) require.NoError(t, err) - err = sessiontxn.NewTxn(context.Background(), ctx) + _, err = newTxn(ctx) require.NoError(t, err) i = 0 @@ -643,8 +636,6 @@ func testGetColumn(t table.Table, name string, isExist bool) error { func TestAddColumn(t *testing.T) { store, dom := testkit.CreateMockStoreAndDomain(t, mockstore.WithDDLChecker()) - d := dom.DDL() - tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("create table t1 (c1 int, c2 int, c3 int);") @@ -656,13 +647,10 @@ func TestAddColumn(t *testing.T) { tbl := testGetTable(t, dom, tableID) ctx := testNewContext(store) - err := sessiontxn.NewTxn(context.Background(), ctx) + txn, err := newTxn(ctx) require.NoError(t, err) oldRow := types.MakeDatums(int64(1), int64(2), int64(3)) - handle, err := tbl.AddRecord(ctx.GetTableCtx(), oldRow) - require.NoError(t, err) - - txn, err := ctx.Txn(true) + handle, err := tbl.AddRecord(ctx.GetTableCtx(), txn, oldRow) require.NoError(t, err) err = txn.Commit(context.Background()) require.NoError(t, err) @@ -672,8 +660,7 @@ func TestAddColumn(t *testing.T) { checkOK := false - tc := &callback.TestDDLCallback{Do: dom} - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if checkOK { return } @@ -689,9 +676,7 @@ func TestAddColumn(t *testing.T) { if newCol.State == model.StatePublic { checkOK = true } - } - tc.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(tc) + }) jobID := testCreateColumn(tk, t, testkit.NewTestKit(t, store).Session(), tableID, newColName, "", defaultColValue, dom) testCheckJobDone(t, store, jobID, true) @@ -705,8 +690,6 @@ func TestAddColumn(t *testing.T) { func TestAddColumns(t *testing.T) { store, dom := testkit.CreateMockStoreAndDomain(t, mockstore.WithDDLChecker()) - d := dom.DDL() - tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("create table t1 (c1 int, c2 int, c3 int);") @@ -729,19 +712,15 @@ func TestAddColumns(t *testing.T) { tbl := testGetTable(t, dom, tableID) ctx := testNewContext(store) - err := sessiontxn.NewTxn(context.Background(), ctx) + txn, err := newTxn(ctx) require.NoError(t, err) oldRow := types.MakeDatums(int64(1), int64(2), int64(3)) - handle, err := tbl.AddRecord(ctx.GetTableCtx(), oldRow) - require.NoError(t, err) - - txn, err := ctx.Txn(true) + handle, err := tbl.AddRecord(ctx.GetTableCtx(), txn, oldRow) require.NoError(t, err) err = txn.Commit(context.Background()) require.NoError(t, err) - tc := &callback.TestDDLCallback{Do: dom} - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { mu.Lock() defer mu.Unlock() if checkOK { @@ -761,9 +740,7 @@ func TestAddColumns(t *testing.T) { checkOK = true } } - } - tc.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(tc) + }) jobID := testCreateColumns(tk, t, testkit.NewTestKit(t, store).Session(), tableID, newColNames, positions, defaultColValue, dom) @@ -795,12 +772,9 @@ func TestDropColumnInColumnTest(t *testing.T) { colName := "c4" defaultColValue := int64(4) row := types.MakeDatums(int64(1), int64(2), int64(3)) - err := sessiontxn.NewTxn(context.Background(), ctx) + txn, err := newTxn(ctx) require.NoError(t, err) - _, err = tbl.AddRecord(ctx.GetTableCtx(), append(row, types.NewDatum(defaultColValue))) - require.NoError(t, err) - - txn, err := ctx.Txn(true) + _, err = tbl.AddRecord(ctx.GetTableCtx(), txn, append(row, types.NewDatum(defaultColValue))) require.NoError(t, err) err = txn.Commit(context.Background()) require.NoError(t, err) @@ -809,9 +783,7 @@ func TestDropColumnInColumnTest(t *testing.T) { var hookErr error var mu sync.Mutex - d := dom.DDL() - tc := &callback.TestDDLCallback{Do: dom} - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { mu.Lock() defer mu.Unlock() if checkOK { @@ -823,9 +795,7 @@ func TestDropColumnInColumnTest(t *testing.T) { checkOK = true return } - } - tc.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(tc) + }) jobID := testDropColumnInternal(tk, t, testkit.NewTestKit(t, store).Session(), tableID, colName, false, dom) testCheckJobDone(t, store, jobID, false) @@ -853,16 +823,13 @@ func TestDropColumns(t *testing.T) { tbl := testGetTable(t, dom, tableID) ctx := testNewContext(store) - err := sessiontxn.NewTxn(context.Background(), ctx) + txn, err := newTxn(ctx) require.NoError(t, err) colNames := []string{"c3", "c4"} defaultColValue := int64(4) row := types.MakeDatums(int64(1), int64(2), int64(3)) - _, err = tbl.AddRecord(ctx.GetTableCtx(), append(row, types.NewDatum(defaultColValue))) - require.NoError(t, err) - - txn, err := ctx.Txn(true) + _, err = tbl.AddRecord(ctx.GetTableCtx(), txn, append(row, types.NewDatum(defaultColValue))) require.NoError(t, err) err = txn.Commit(context.Background()) require.NoError(t, err) @@ -871,9 +838,7 @@ func TestDropColumns(t *testing.T) { var hookErr error var mu sync.Mutex - d := dom.DDL() - tc := &callback.TestDDLCallback{Do: dom} - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { mu.Lock() defer mu.Unlock() if checkOK { @@ -887,9 +852,7 @@ func TestDropColumns(t *testing.T) { return } } - } - tc.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(tc) + }) jobID := testDropColumns(tk, t, testkit.NewTestKit(t, store).Session(), tableID, colNames, false, dom) testCheckJobDone(t, store, jobID, false) @@ -906,13 +869,13 @@ func TestDropColumns(t *testing.T) { func testGetTable(t *testing.T, dom *domain.Domain, tableID int64) table.Table { require.NoError(t, dom.Reload()) - tbl, exist := dom.InfoSchema().TableByID(tableID) + tbl, exist := dom.InfoSchema().TableByID(context.Background(), tableID) require.True(t, exist) return tbl } func TestWriteDataWriteOnlyMode(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, dbTestLease) + store := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) tk := testkit.NewTestKit(t, store) tk2 := testkit.NewTestKit(t, store) @@ -920,29 +883,21 @@ func TestWriteDataWriteOnlyMode(t *testing.T) { tk2.MustExec("use test") tk.MustExec("CREATE TABLE t (`col1` bigint(20) DEFAULT 1,`col2` float,UNIQUE KEY `key1` (`col1`))") - originalCallback := dom.DDL().GetHook() - defer dom.DDL().SetHook(originalCallback) - - hook := &callback.TestDDLCallback{Do: dom} - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.SchemaState != model.StateWriteOnly { return } tk2.MustExec("insert ignore into t values (1, 2)") tk2.MustExec("insert ignore into t values (2, 2)") - } - dom.DDL().SetHook(hook) + }) tk.MustExec("alter table t change column `col1` `col1` varchar(20)") - hook = &callback.TestDDLCallback{Do: dom} - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.SchemaState != model.StateWriteOnly { return } tk2.MustExec("insert ignore into t values (1)") tk2.MustExec("insert ignore into t values (2)") - } - dom.DDL().SetHook(hook) + }) tk.MustExec("alter table t drop column `col1`") - dom.DDL().SetHook(originalCallback) } diff --git a/pkg/ddl/column_type_change_test.go b/pkg/ddl/column_type_change_test.go index 2d3bb48963b72..42ef263952afe 100644 --- a/pkg/ddl/column_type_change_test.go +++ b/pkg/ddl/column_type_change_test.go @@ -23,7 +23,6 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/ddl" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/mysql" @@ -34,13 +33,14 @@ import ( "github.com/pingcap/tidb/pkg/tablecodec" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/testkit/external" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/dbterror" "github.com/stretchr/testify/require" ) func TestColumnTypeChangeStateBetweenInteger(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("set global tidb_enable_row_level_checksum = 1") tk.MustExec("use test") @@ -57,9 +57,8 @@ func TestColumnTypeChangeStateBetweenInteger(t *testing.T) { require.Equal(t, 2, len(tbl.Cols())) require.NotNil(t, external.GetModifyColumn(t, tk, "test", "t", "c2", false)) - hook := &callback.TestDDLCallback{Do: dom} var checkErr error - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if checkErr != nil { return } @@ -87,8 +86,7 @@ func TestColumnTypeChangeStateBetweenInteger(t *testing.T) { checkErr = errors.New("changingCol is nil") } } - } - dom.DDL().SetHook(hook) + }) // Alter sql will modify column c2 to tinyint not null. SQL := "alter table t modify column c2 tinyint not null" tk.MustExec(SQL) @@ -109,7 +107,7 @@ func TestColumnTypeChangeStateBetweenInteger(t *testing.T) { } func TestRollbackColumnTypeChangeBetweenInteger(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("set global tidb_enable_row_level_checksum = 1") tk.MustExec("use test") @@ -122,10 +120,8 @@ func TestRollbackColumnTypeChangeBetweenInteger(t *testing.T) { require.Equal(t, 2, len(tbl.Cols())) require.NotNil(t, external.GetModifyColumn(t, tk, "test", "t", "c2", false)) - hook := &callback.TestDDLCallback{Do: dom} // Mock roll back at model.StateNone. - customizeHookRollbackAtState(hook, tbl, model.StateNone) - dom.DDL().SetHook(hook) + customizeHookRollbackAtState(t, tbl, model.StateNone) // Alter sql will modify column c2 to bigint not null. SQL := "alter table t modify column c2 int not null" err := tk.ExecToErr(SQL) @@ -133,29 +129,26 @@ func TestRollbackColumnTypeChangeBetweenInteger(t *testing.T) { assertRollBackedColUnchanged(t, tk) // Mock roll back at model.StateDeleteOnly. - customizeHookRollbackAtState(hook, tbl, model.StateDeleteOnly) - dom.DDL().SetHook(hook) + customizeHookRollbackAtState(t, tbl, model.StateDeleteOnly) err = tk.ExecToErr(SQL) require.EqualError(t, err, "[ddl:1]MockRollingBackInCallBack-delete only") assertRollBackedColUnchanged(t, tk) // Mock roll back at model.StateWriteOnly. - customizeHookRollbackAtState(hook, tbl, model.StateWriteOnly) - dom.DDL().SetHook(hook) + customizeHookRollbackAtState(t, tbl, model.StateWriteOnly) err = tk.ExecToErr(SQL) require.EqualError(t, err, "[ddl:1]MockRollingBackInCallBack-write only") assertRollBackedColUnchanged(t, tk) // Mock roll back at model.StateWriteReorg. - customizeHookRollbackAtState(hook, tbl, model.StateWriteReorganization) - dom.DDL().SetHook(hook) + customizeHookRollbackAtState(t, tbl, model.StateWriteReorganization) err = tk.ExecToErr(SQL) require.EqualError(t, err, "[ddl:1]MockRollingBackInCallBack-write reorganization") assertRollBackedColUnchanged(t, tk) } -func customizeHookRollbackAtState(hook *callback.TestDDLCallback, tbl table.Table, state model.SchemaState) { - hook.OnJobRunBeforeExported = func(job *model.Job) { +func customizeHookRollbackAtState(t *testing.T, tbl table.Table, state model.SchemaState) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if tbl.Meta().ID != job.TableID { return } @@ -163,7 +156,7 @@ func customizeHookRollbackAtState(hook *callback.TestDDLCallback, tbl table.Tabl job.State = model.JobStateRollingback job.Error = mockTerrorMap[state.String()] } - } + }) } func assertRollBackedColUnchanged(t *testing.T, tk *testkit.TestKit) { @@ -190,7 +183,7 @@ func init() { // Test issue #20529. func TestColumnTypeChangeIgnoreDisplayLength(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("set global tidb_enable_row_level_checksum = 1") tk.MustExec("use test") @@ -199,16 +192,14 @@ func TestColumnTypeChangeIgnoreDisplayLength(t *testing.T) { assertHasAlterWriteReorg := func(tbl table.Table) { // Restore assertResult to false. assertResult = false - hook := &callback.TestDDLCallback{Do: dom} - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if tbl.Meta().ID != job.TableID { return } if job.SchemaState == model.StateWriteReorganization { assertResult = true } - } - dom.DDL().SetHook(hook) + }) } // Change int to tinyint. @@ -305,7 +296,7 @@ func TestRowLevelChecksumWithMultiSchemaChange(t *testing.T) { // It's good because the insert / update logic will cast the related column to changing column rather than use // origin default value directly. func TestChangingColOriginDefaultValue(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("set global tidb_enable_row_level_checksum = 1") tk.MustExec("use test") @@ -319,14 +310,12 @@ func TestChangingColOriginDefaultValue(t *testing.T) { tk.MustExec("insert into t values(2, 2)") tbl := external.GetTableByName(t, tk, "test", "t") - originalHook := dom.DDL().GetHook() - hook := &callback.TestDDLCallback{Do: dom} var ( once bool checkErr error ) i := 0 - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if checkErr != nil { return } @@ -371,11 +360,9 @@ func TestChangingColOriginDefaultValue(t *testing.T) { } i++ } - } - hook.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - dom.DDL().SetHook(hook) + }) tk.MustExec("alter table t modify column b tinyint NOT NULL") - dom.DDL().SetHook(originalHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") require.NoError(t, checkErr) // Since getReorgInfo will stagnate StateWriteReorganization for a ddl round, so insert should exec 3 times. tk.MustQuery("select * from t order by a").Check(testkit.Rows("1 -1", "2 -2", "3 3", "4 4", "5 5")) @@ -383,7 +370,7 @@ func TestChangingColOriginDefaultValue(t *testing.T) { } func TestChangingColOriginDefaultValueAfterAddColAndCastSucc(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("set global tidb_enable_row_level_checksum = 1") tk.MustExec("use test") @@ -400,14 +387,12 @@ func TestChangingColOriginDefaultValueAfterAddColAndCastSucc(t *testing.T) { tk.MustExec("alter table t add column c timestamp default '1971-06-09' not null") tbl := external.GetTableByName(t, tk, "test", "t") - originalHook := dom.DDL().GetHook() - hook := &callback.TestDDLCallback{Do: dom} var ( once bool checkErr error ) i, stableTimes := 0, 0 - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if checkErr != nil { return } @@ -458,11 +443,10 @@ func TestChangingColOriginDefaultValueAfterAddColAndCastSucc(t *testing.T) { stableTimes++ } i++ - } + }) - dom.DDL().SetHook(hook) tk.MustExec("alter table t modify column c date NOT NULL") - dom.DDL().SetHook(originalHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore") require.NoError(t, checkErr) // Since getReorgInfo will stagnate StateWriteReorganization for a ddl round, so insert should exec 3 times. tk.MustQuery("select * from t order by a").Check( @@ -472,7 +456,7 @@ func TestChangingColOriginDefaultValueAfterAddColAndCastSucc(t *testing.T) { // TestChangingColOriginDefaultValueAfterAddColAndCastFail tests #25383. func TestChangingColOriginDefaultValueAfterAddColAndCastFail(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("set global tidb_enable_row_level_checksum = 1") tk.MustExec("use test") @@ -486,11 +470,9 @@ func TestChangingColOriginDefaultValueAfterAddColAndCastFail(t *testing.T) { tk.MustExec("ALTER TABLE t ADD COLUMN x CHAR(218) NULL DEFAULT 'lkittuae'") tbl := external.GetTableByName(t, tk, "test", "t") - originalHook := dom.DDL().GetHook() - hook := &callback.TestDDLCallback{Do: dom} var checkErr error var firstJobID int64 - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if checkErr != nil { return } @@ -541,13 +523,12 @@ func TestChangingColOriginDefaultValueAfterAddColAndCastFail(t *testing.T) { } } } - } + }) - dom.DDL().SetHook(hook) tk.MustExec("alter table t modify column x DATETIME NULL DEFAULT '3771-02-28 13:00:11' AFTER b;") tk.MustExec("insert into t(a) value('1')") tk.MustExec("alter table t modify column b varchar(256) default (REPLACE(UPPER(UUID()), '-', ''));") - dom.DDL().SetHook(originalHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore") require.NoError(t, checkErr) tk.MustQuery("select * from t order by a").Check(testkit.Rows("18apf -729850476163 3771-02-28 13:00:11")) tk.MustExec("drop table if exists t") @@ -555,7 +536,7 @@ func TestChangingColOriginDefaultValueAfterAddColAndCastFail(t *testing.T) { // Close issue #23202 func TestDDLExitWhenCancelMeetPanic(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("set global tidb_enable_row_level_checksum = 1") tk.MustExec("use test") @@ -571,17 +552,15 @@ func TestDDLExitWhenCancelMeetPanic(t *testing.T) { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/mockExceedErrorLimit")) }() - hook := &callback.TestDDLCallback{Do: dom} var jobID int64 - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if jobID != 0 { return } if job.Type == model.ActionDropIndex { jobID = job.ID } - } - dom.DDL().SetHook(hook) + }) // when it panics in write-reorg state, the job will be pulled up as a cancelling job. Since drop-index with // write-reorg can't be cancelled, so it will be converted to running state and try again (dead loop). @@ -598,7 +577,7 @@ func TestDDLExitWhenCancelMeetPanic(t *testing.T) { // Close issue #24584 func TestCancelCTCInReorgStateWillCauseGoroutineLeak(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("set global tidb_enable_row_level_checksum = 1") tk.MustExec("use test") @@ -608,18 +587,13 @@ func TestCancelCTCInReorgStateWillCauseGoroutineLeak(t *testing.T) { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/mockInfiniteReorgLogic")) }() - // set ddl hook - originalHook := dom.DDL().GetHook() - defer dom.DDL().SetHook(originalHook) - tk.MustExec("drop table if exists ctc_goroutine_leak") tk.MustExec("create table ctc_goroutine_leak (a int)") tk.MustExec("insert into ctc_goroutine_leak values(1),(2),(3)") tbl := external.GetTableByName(t, tk, "test", "ctc_goroutine_leak") - hook := &callback.TestDDLCallback{Do: dom} var jobID int64 - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if jobID != 0 { return } @@ -629,8 +603,7 @@ func TestCancelCTCInReorgStateWillCauseGoroutineLeak(t *testing.T) { if job.Query == "alter table ctc_goroutine_leak modify column a tinyint" { jobID = job.ID } - } - dom.DDL().SetHook(hook) + }) tk1 := testkit.NewTestKit(t, store) tk1.MustExec("use test") @@ -654,7 +627,7 @@ func TestCancelCTCInReorgStateWillCauseGoroutineLeak(t *testing.T) { // For select statement, it truncates the string and return no errors. (which is 3977-02-22 00:00:00 here) // For ddl reorging or changing column in ctc, it needs report some errors. func TestCastDateToTimestampInReorgAttribute(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, 600*time.Millisecond) + store := testkit.CreateMockStoreWithSchemaLease(t, 600*time.Millisecond) tk := testkit.NewTestKit(t, store) tk.MustExec("set global tidb_enable_row_level_checksum = 1") tk.MustExec("use test") @@ -668,8 +641,7 @@ func TestCastDateToTimestampInReorgAttribute(t *testing.T) { var checkErr1 error var checkErr2 error - hook := &callback.TestDDLCallback{Do: dom} - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if checkErr1 != nil || checkErr2 != nil || tbl.Meta().ID != job.TableID { return } @@ -680,8 +652,7 @@ func TestCastDateToTimestampInReorgAttribute(t *testing.T) { checkErr1 = tk.ExecToErr("insert into `t` set `a` = '3977-02-22'") // this(string) will be cast to a as date, then cast a(date) as timestamp to changing column. checkErr2 = tk.ExecToErr("update t set `a` = '3977-02-22'") } - } - dom.DDL().SetHook(hook) + }) tk.MustExec("alter table t modify column a TIMESTAMP NULL DEFAULT '2021-04-28 03:35:11' FIRST") require.EqualError(t, checkErr1, "[types:1292]Incorrect timestamp value: '3977-02-22'") diff --git a/pkg/ddl/constraint.go b/pkg/ddl/constraint.go index 572c66439889a..c1919aef1bc9a 100644 --- a/pkg/ddl/constraint.go +++ b/pkg/ddl/constraint.go @@ -31,10 +31,10 @@ import ( "github.com/pingcap/tidb/pkg/util/dbterror" ) -func (w *worker) onAddCheckConstraint(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) { +func (w *worker) onAddCheckConstraint(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, err error) { // Handle the rolling back job. if job.IsRollingback() { - return rollingBackAddConstraint(d, t, job) + return rollingBackAddConstraint(jobCtx, t, job) } failpoint.Inject("errorBeforeDecodeArgs", func(val failpoint.Value) { @@ -80,7 +80,7 @@ func (w *worker) onAddCheckConstraint(d *ddlCtx, t *meta.Meta, job *model.Job) ( // If not enforced, add it directly. if !constraintInfoInMeta.Enforced { constraintInfoInMeta.State = model.StatePublic - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -93,11 +93,11 @@ func (w *worker) onAddCheckConstraint(d *ddlCtx, t *meta.Meta, job *model.Job) ( case model.StateNone: job.SchemaState = model.StateWriteOnly constraintInfoInMeta.State = model.StateWriteOnly - ver, err = updateVersionAndTableInfoWithCheck(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfoWithCheck(jobCtx, t, job, tblInfo, true) case model.StateWriteOnly: job.SchemaState = model.StateWriteReorganization constraintInfoInMeta.State = model.StateWriteReorganization - ver, err = updateVersionAndTableInfoWithCheck(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfoWithCheck(jobCtx, t, job, tblInfo, true) case model.StateWriteReorganization: err = w.verifyRemainRecordsForCheckConstraint(dbInfo, tblInfo, constraintInfoInMeta) if err != nil { @@ -107,7 +107,7 @@ func (w *worker) onAddCheckConstraint(d *ddlCtx, t *meta.Meta, job *model.Job) ( return ver, errors.Trace(err) } constraintInfoInMeta.State = model.StatePublic - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -159,7 +159,7 @@ func checkAddCheckConstraint(t *meta.Meta, job *model.Job) (*model.DBInfo, *mode // onDropCheckConstraint can be called from two case: // 1: rollback in add constraint.(in rollback function the job.args will be changed) // 2: user drop constraint ddl. -func onDropCheckConstraint(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func onDropCheckConstraint(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { tblInfo, constraintInfo, err := checkDropCheckConstraint(t, job) if err != nil { return ver, errors.Trace(err) @@ -169,7 +169,7 @@ func onDropCheckConstraint(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, case model.StatePublic: job.SchemaState = model.StateWriteOnly constraintInfo.State = model.StateWriteOnly - ver, err = updateVersionAndTableInfoWithCheck(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfoWithCheck(jobCtx, t, job, tblInfo, true) case model.StateWriteOnly: // write only state constraint will still take effect to check the newly inserted data. // So the dependent column shouldn't be dropped even in this intermediate state. @@ -180,7 +180,7 @@ func onDropCheckConstraint(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, tblInfo.Constraints = append(tblInfo.Constraints[0:i], tblInfo.Constraints[i+1:]...) } } - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -214,14 +214,14 @@ func checkDropCheckConstraint(t *meta.Meta, job *model.Job) (*model.TableInfo, * return tblInfo, constraintInfo, nil } -func (w *worker) onAlterCheckConstraint(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) { +func (w *worker) onAlterCheckConstraint(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, err error) { dbInfo, tblInfo, constraintInfo, enforced, err := checkAlterCheckConstraint(t, job) if err != nil { return ver, errors.Trace(err) } if job.IsRollingback() { - return rollingBackAlterConstraint(d, t, job) + return rollingBackAlterConstraint(jobCtx, t, job) } // Current State is desired. @@ -237,11 +237,11 @@ func (w *worker) onAlterCheckConstraint(d *ddlCtx, t *meta.Meta, job *model.Job) job.SchemaState = model.StateWriteReorganization constraintInfo.State = model.StateWriteReorganization constraintInfo.Enforced = enforced - ver, err = updateVersionAndTableInfoWithCheck(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfoWithCheck(jobCtx, t, job, tblInfo, true) case model.StateWriteReorganization: job.SchemaState = model.StateWriteOnly constraintInfo.State = model.StateWriteOnly - ver, err = updateVersionAndTableInfoWithCheck(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfoWithCheck(jobCtx, t, job, tblInfo, true) case model.StateWriteOnly: err = w.verifyRemainRecordsForCheckConstraint(dbInfo, tblInfo, constraintInfo) if err != nil { @@ -251,7 +251,7 @@ func (w *worker) onAlterCheckConstraint(d *ddlCtx, t *meta.Meta, job *model.Job) return ver, errors.Trace(err) } constraintInfo.State = model.StatePublic - ver, err = updateVersionAndTableInfoWithCheck(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfoWithCheck(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -259,7 +259,7 @@ func (w *worker) onAlterCheckConstraint(d *ddlCtx, t *meta.Meta, job *model.Job) } } else { constraintInfo.Enforced = enforced - ver, err = updateVersionAndTableInfoWithCheck(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfoWithCheck(jobCtx, t, job, tblInfo, true) if err != nil { // update version and tableInfo error will cause retry. return ver, errors.Trace(err) diff --git a/pkg/ddl/constraint_test.go b/pkg/ddl/constraint_test.go index 96d1f60bb185e..02047441f2974 100644 --- a/pkg/ddl/constraint_test.go +++ b/pkg/ddl/constraint_test.go @@ -20,17 +20,17 @@ import ( "time" "github.com/pingcap/failpoint" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/table" "github.com/pingcap/tidb/pkg/table/tables" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/testkit/external" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/stretchr/testify/require" ) func TestAlterConstraintAddDrop(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") @@ -47,18 +47,14 @@ func TestAlterConstraintAddDrop(t *testing.T) { require.Error(t, err) var checkErr error - d := dom.DDL() - callback := &callback.TestDDLCallback{} - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if checkErr != nil { return } if job.SchemaState == model.StateWriteOnly { _, checkErr = tk1.Exec("insert into t (a, b) values(5,6) ") } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(callback) + }) tk.MustExec("alter table t add constraint cc check ( b < 5 )") require.Errorf(t, err, "[table:3819]Check constraint 'cc' is violated.") @@ -68,7 +64,7 @@ func TestAlterConstraintAddDrop(t *testing.T) { } func TestAlterAddConstraintStateChange(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") @@ -80,9 +76,7 @@ func TestAlterAddConstraintStateChange(t *testing.T) { tk1.MustExec("insert into t values(12)") var checkErr error - d := dom.DDL() - callback := &callback.TestDDLCallback{} - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if checkErr != nil { return } @@ -101,12 +95,10 @@ func TestAlterAddConstraintStateChange(t *testing.T) { tableCommon.Constraints = originCons tableCommon.WritableConstraint() } - } + }) //StatNone StateWriteReorganization require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/ddl/mockVerifyRemainDataSuccess", "return(true)")) - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(callback) tk.MustExec("alter table t add constraint c0 check ( a > 10)") tk.MustQuery("select * from t").Check(testkit.Rows("12", "1")) tk.MustQuery("show create table t").Check(testkit.Rows("t CREATE TABLE `t` (\n `a` int(11) DEFAULT NULL,\n CONSTRAINT `c0` CHECK ((`a` > 10))\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) @@ -116,7 +108,7 @@ func TestAlterAddConstraintStateChange(t *testing.T) { } func TestAlterAddConstraintStateChange1(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") @@ -126,10 +118,8 @@ func TestAlterAddConstraintStateChange1(t *testing.T) { tk1.MustExec("use test") tk1.MustExec("insert into t values(12)") - d := dom.DDL() - callback := &callback.TestDDLCallback{} // StatNone -> StateWriteOnly - onJobUpdatedExportedFunc1 := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if job.SchemaState == model.StateWriteOnly { // set constraint state constraintTable := external.GetTableByName(t, tk1, "test", "t") @@ -144,9 +134,7 @@ func TestAlterAddConstraintStateChange1(t *testing.T) { tableCommon.Constraints = originCons tableCommon.WritableConstraint() } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc1) - d.SetHook(callback) + }) tk.MustGetErrMsg("alter table t add constraint c1 check ( a > 10)", "[ddl:3819]Check constraint 'c1' is violated.") tk.MustQuery("select * from t").Check(testkit.Rows("12", "1")) tk.MustQuery("show create table t").Check(testkit.Rows("t CREATE TABLE `t` (\n `a` int(11) DEFAULT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) @@ -154,7 +142,7 @@ func TestAlterAddConstraintStateChange1(t *testing.T) { } func TestAlterAddConstraintStateChange2(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") @@ -164,10 +152,8 @@ func TestAlterAddConstraintStateChange2(t *testing.T) { tk1.MustExec("use test") tk1.MustExec("insert into t values(12)") - d := dom.DDL() - callback := &callback.TestDDLCallback{} // StateWriteOnly -> StateWriteReorganization - onJobUpdatedExportedFunc2 := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if job.SchemaState == model.StateWriteReorganization { // set constraint state constraintTable := external.GetTableByName(t, tk1, "test", "t") @@ -180,9 +166,7 @@ func TestAlterAddConstraintStateChange2(t *testing.T) { tableCommon.Constraints[0].State = model.StateWriteReorganization tableCommon.WritableConstraint() } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc2) - d.SetHook(callback) + }) tk.MustExec("alter table t add constraint c2 check ( a > 10)") tk.MustQuery("select * from t").Check(testkit.Rows("12")) tk.MustQuery("show create table t").Check(testkit.Rows("t CREATE TABLE `t` (\n `a` int(11) DEFAULT NULL,\n CONSTRAINT `c2` CHECK ((`a` > 10))\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) @@ -190,7 +174,7 @@ func TestAlterAddConstraintStateChange2(t *testing.T) { } func TestAlterAddConstraintStateChange3(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") @@ -201,10 +185,8 @@ func TestAlterAddConstraintStateChange3(t *testing.T) { tk1.MustExec("insert into t values(12)") addCheckDone := false - d := dom.DDL() - callback := &callback.TestDDLCallback{} // StateWriteReorganization -> StatePublic - onJobUpdatedExportedFunc3 := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if job.Type != model.ActionAddCheckConstraint || job.TableName != "t" { return } @@ -221,9 +203,7 @@ func TestAlterAddConstraintStateChange3(t *testing.T) { tableCommon.WritableConstraint() addCheckDone = true } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc3) - d.SetHook(callback) + }) tk.MustExec("alter table t add constraint c3 check ( a > 10)") // Issue TiDB#48123. for i := 0; i <= 100; i++ { @@ -237,7 +217,7 @@ func TestAlterAddConstraintStateChange3(t *testing.T) { } func TestAlterEnforcedConstraintStateChange(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t") @@ -247,10 +227,8 @@ func TestAlterEnforcedConstraintStateChange(t *testing.T) { tk1.MustExec("use test") tk1.MustExec("insert into t values(12)") - d := dom.DDL() - callback := &callback.TestDDLCallback{} // StateWriteReorganization -> StatePublic - onJobUpdatedExportedFunc3 := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if job.SchemaState == model.StateWriteReorganization { // set constraint state constraintTable := external.GetTableByName(t, tk1, "test", "t") @@ -263,9 +241,7 @@ func TestAlterEnforcedConstraintStateChange(t *testing.T) { tableCommon.Constraints[0].State = model.StateWriteReorganization tableCommon.WritableConstraint() } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc3) - d.SetHook(callback) + }) tk.MustExec("alter table t alter constraint c1 enforced") tk.MustQuery("select * from t").Check(testkit.Rows("12")) } diff --git a/pkg/ddl/create_table.go b/pkg/ddl/create_table.go new file mode 100644 index 0000000000000..d25800058d032 --- /dev/null +++ b/pkg/ddl/create_table.go @@ -0,0 +1,1529 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package ddl + +import ( + "context" + "fmt" + "math" + "strings" + "sync/atomic" + "unicode/utf8" + + "github.com/pingcap/errors" + "github.com/pingcap/failpoint" + "github.com/pingcap/tidb/pkg/config" + "github.com/pingcap/tidb/pkg/ddl/logutil" + "github.com/pingcap/tidb/pkg/ddl/placement" + "github.com/pingcap/tidb/pkg/domain/infosync" + "github.com/pingcap/tidb/pkg/expression" + "github.com/pingcap/tidb/pkg/infoschema" + "github.com/pingcap/tidb/pkg/meta" + "github.com/pingcap/tidb/pkg/meta/autoid" + "github.com/pingcap/tidb/pkg/parser/ast" + "github.com/pingcap/tidb/pkg/parser/format" + "github.com/pingcap/tidb/pkg/parser/model" + "github.com/pingcap/tidb/pkg/parser/mysql" + field_types "github.com/pingcap/tidb/pkg/parser/types" + "github.com/pingcap/tidb/pkg/sessionctx" + "github.com/pingcap/tidb/pkg/sessionctx/variable" + statsutil "github.com/pingcap/tidb/pkg/statistics/handle/util" + "github.com/pingcap/tidb/pkg/table" + "github.com/pingcap/tidb/pkg/table/tables" + "github.com/pingcap/tidb/pkg/types" + driver "github.com/pingcap/tidb/pkg/types/parser_driver" + "github.com/pingcap/tidb/pkg/util/dbterror" + "github.com/pingcap/tidb/pkg/util/mock" + "github.com/pingcap/tidb/pkg/util/set" + "go.uber.org/zap" +) + +// DANGER: it is an internal function used by onCreateTable and onCreateTables, for reusing code. Be careful. +// 1. it expects the argument of job has been deserialized. +// 2. it won't call updateSchemaVersion, FinishTableJob and asyncNotifyEvent. +func createTable(jobCtx *jobContext, t *meta.Meta, job *model.Job, fkCheck bool) (*model.TableInfo, error) { + schemaID := job.SchemaID + tbInfo := job.Args[0].(*model.TableInfo) + + tbInfo.State = model.StateNone + err := checkTableNotExists(jobCtx.infoCache, schemaID, tbInfo.Name.L) + if err != nil { + if infoschema.ErrDatabaseNotExists.Equal(err) || infoschema.ErrTableExists.Equal(err) { + job.State = model.JobStateCancelled + } + return tbInfo, errors.Trace(err) + } + + err = checkConstraintNamesNotExists(t, schemaID, tbInfo.Constraints) + if err != nil { + if infoschema.ErrCheckConstraintDupName.Equal(err) { + job.State = model.JobStateCancelled + } + return tbInfo, errors.Trace(err) + } + + retryable, err := checkTableForeignKeyValidInOwner(jobCtx, job, tbInfo, fkCheck) + if err != nil { + if !retryable { + job.State = model.JobStateCancelled + } + return tbInfo, errors.Trace(err) + } + // Allocate foreign key ID. + for _, fkInfo := range tbInfo.ForeignKeys { + fkInfo.ID = allocateFKIndexID(tbInfo) + fkInfo.State = model.StatePublic + } + switch tbInfo.State { + case model.StateNone: + // none -> public + tbInfo.State = model.StatePublic + tbInfo.UpdateTS = t.StartTS + err = createTableOrViewWithCheck(t, job, schemaID, tbInfo) + if err != nil { + return tbInfo, errors.Trace(err) + } + + failpoint.Inject("checkOwnerCheckAllVersionsWaitTime", func(val failpoint.Value) { + if val.(bool) { + failpoint.Return(tbInfo, errors.New("mock create table error")) + } + }) + + // build table & partition bundles if any. + if err = checkAllTablePlacementPoliciesExistAndCancelNonExistJob(t, job, tbInfo); err != nil { + return tbInfo, errors.Trace(err) + } + + if tbInfo.TiFlashReplica != nil { + replicaInfo := tbInfo.TiFlashReplica + if pi := tbInfo.GetPartitionInfo(); pi != nil { + logutil.DDLLogger().Info("Set TiFlash replica pd rule for partitioned table when creating", zap.Int64("tableID", tbInfo.ID)) + if e := infosync.ConfigureTiFlashPDForPartitions(false, &pi.Definitions, replicaInfo.Count, &replicaInfo.LocationLabels, tbInfo.ID); e != nil { + job.State = model.JobStateCancelled + return tbInfo, errors.Trace(e) + } + // Partitions that in adding mid-state. They have high priorities, so we should set accordingly pd rules. + if e := infosync.ConfigureTiFlashPDForPartitions(true, &pi.AddingDefinitions, replicaInfo.Count, &replicaInfo.LocationLabels, tbInfo.ID); e != nil { + job.State = model.JobStateCancelled + return tbInfo, errors.Trace(e) + } + } else { + logutil.DDLLogger().Info("Set TiFlash replica pd rule when creating", zap.Int64("tableID", tbInfo.ID)) + if e := infosync.ConfigureTiFlashPDForTable(tbInfo.ID, replicaInfo.Count, &replicaInfo.LocationLabels); e != nil { + job.State = model.JobStateCancelled + return tbInfo, errors.Trace(e) + } + } + } + + bundles, err := placement.NewFullTableBundles(t, tbInfo) + if err != nil { + job.State = model.JobStateCancelled + return tbInfo, errors.Trace(err) + } + + // Send the placement bundle to PD. + err = infosync.PutRuleBundlesWithDefaultRetry(context.TODO(), bundles) + if err != nil { + job.State = model.JobStateCancelled + return tbInfo, errors.Wrapf(err, "failed to notify PD the placement rules") + } + + return tbInfo, nil + default: + return tbInfo, dbterror.ErrInvalidDDLState.GenWithStackByArgs("table", tbInfo.State) + } +} + +func onCreateTable(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { + failpoint.Inject("mockExceedErrorLimit", func(val failpoint.Value) { + if val.(bool) { + failpoint.Return(ver, errors.New("mock do job error")) + } + }) + + // just decode, createTable will use it as Args[0] + tbInfo := &model.TableInfo{} + fkCheck := false + if err := job.DecodeArgs(tbInfo, &fkCheck); err != nil { + // Invalid arguments, cancel this job. + job.State = model.JobStateCancelled + return ver, errors.Trace(err) + } + + if len(tbInfo.ForeignKeys) > 0 { + return createTableWithForeignKeys(jobCtx, t, job, tbInfo, fkCheck) + } + + tbInfo, err := createTable(jobCtx, t, job, fkCheck) + if err != nil { + return ver, errors.Trace(err) + } + + ver, err = updateSchemaVersion(jobCtx, t, job) + if err != nil { + return ver, errors.Trace(err) + } + + // Finish this job. + job.FinishTableJob(model.JobStateDone, model.StatePublic, ver, tbInfo) + createTableEvent := statsutil.NewCreateTableEvent( + job.SchemaID, + tbInfo, + ) + asyncNotifyEvent(jobCtx, createTableEvent) + return ver, errors.Trace(err) +} + +func createTableWithForeignKeys(jobCtx *jobContext, t *meta.Meta, job *model.Job, tbInfo *model.TableInfo, fkCheck bool) (ver int64, err error) { + switch tbInfo.State { + case model.StateNone, model.StatePublic: + // create table in non-public or public state. The function `createTable` will always reset + // the `tbInfo.State` with `model.StateNone`, so it's fine to just call the `createTable` with + // public state. + // when `br` restores table, the state of `tbInfo` will be public. + tbInfo, err = createTable(jobCtx, t, job, fkCheck) + if err != nil { + return ver, errors.Trace(err) + } + tbInfo.State = model.StateWriteOnly + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tbInfo, true) + if err != nil { + return ver, errors.Trace(err) + } + job.SchemaState = model.StateWriteOnly + case model.StateWriteOnly: + tbInfo.State = model.StatePublic + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tbInfo, true) + if err != nil { + return ver, errors.Trace(err) + } + job.FinishTableJob(model.JobStateDone, model.StatePublic, ver, tbInfo) + createTableEvent := statsutil.NewCreateTableEvent( + job.SchemaID, + tbInfo, + ) + asyncNotifyEvent(jobCtx, createTableEvent) + return ver, nil + default: + return ver, errors.Trace(dbterror.ErrInvalidDDLJob.GenWithStackByArgs("table", tbInfo.State)) + } + return ver, errors.Trace(err) +} + +func onCreateTables(jobCtx *jobContext, t *meta.Meta, job *model.Job) (int64, error) { + var ver int64 + + var args []*model.TableInfo + fkCheck := false + err := job.DecodeArgs(&args, &fkCheck) + if err != nil { + // Invalid arguments, cancel this job. + job.State = model.JobStateCancelled + return ver, errors.Trace(err) + } + + // We don't construct jobs for every table, but only tableInfo + // The following loop creates a stub job for every table + // + // it clones a stub job from the ActionCreateTables job + stubJob := job.Clone() + stubJob.Args = make([]any, 1) + for i := range args { + stubJob.TableID = args[i].ID + stubJob.Args[0] = args[i] + if args[i].Sequence != nil { + err := createSequenceWithCheck(t, stubJob, args[i]) + if err != nil { + job.State = model.JobStateCancelled + return ver, errors.Trace(err) + } + } else { + tbInfo, err := createTable(jobCtx, t, stubJob, fkCheck) + if err != nil { + job.State = model.JobStateCancelled + return ver, errors.Trace(err) + } + args[i] = tbInfo + } + } + + ver, err = updateSchemaVersion(jobCtx, t, job) + if err != nil { + return ver, errors.Trace(err) + } + + job.State = model.JobStateDone + job.SchemaState = model.StatePublic + job.BinlogInfo.SetTableInfos(ver, args) + + for i := range args { + createTableEvent := statsutil.NewCreateTableEvent( + job.SchemaID, + args[i], + ) + asyncNotifyEvent(jobCtx, createTableEvent) + } + + return ver, errors.Trace(err) +} + +func createTableOrViewWithCheck(t *meta.Meta, job *model.Job, schemaID int64, tbInfo *model.TableInfo) error { + err := checkTableInfoValid(tbInfo) + if err != nil { + job.State = model.JobStateCancelled + return errors.Trace(err) + } + return t.CreateTableOrView(schemaID, tbInfo) +} + +func onCreateView(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { + schemaID := job.SchemaID + tbInfo := &model.TableInfo{} + var orReplace bool + var _placeholder int64 // oldTblInfoID + if err := job.DecodeArgs(tbInfo, &orReplace, &_placeholder); err != nil { + // Invalid arguments, cancel this job. + job.State = model.JobStateCancelled + return ver, errors.Trace(err) + } + tbInfo.State = model.StateNone + + oldTableID, err := findTableIDByName(jobCtx.infoCache, t, schemaID, tbInfo.Name.L) + if infoschema.ErrTableNotExists.Equal(err) { + err = nil + } + failpoint.InjectCall("onDDLCreateView", job) + if err != nil { + if infoschema.ErrDatabaseNotExists.Equal(err) { + job.State = model.JobStateCancelled + return ver, errors.Trace(err) + } else if !infoschema.ErrTableExists.Equal(err) { + return ver, errors.Trace(err) + } + if !orReplace { + job.State = model.JobStateCancelled + return ver, errors.Trace(err) + } + } + ver, err = updateSchemaVersion(jobCtx, t, job) + if err != nil { + return ver, errors.Trace(err) + } + switch tbInfo.State { + case model.StateNone: + // none -> public + tbInfo.State = model.StatePublic + tbInfo.UpdateTS = t.StartTS + if oldTableID > 0 && orReplace { + err = t.DropTableOrView(schemaID, oldTableID) + if err != nil { + job.State = model.JobStateCancelled + return ver, errors.Trace(err) + } + err = t.GetAutoIDAccessors(schemaID, oldTableID).Del() + if err != nil { + job.State = model.JobStateCancelled + return ver, errors.Trace(err) + } + } + err = createTableOrViewWithCheck(t, job, schemaID, tbInfo) + if err != nil { + job.State = model.JobStateCancelled + return ver, errors.Trace(err) + } + // Finish this job. + job.FinishTableJob(model.JobStateDone, model.StatePublic, ver, tbInfo) + return ver, nil + default: + return ver, dbterror.ErrInvalidDDLState.GenWithStackByArgs("table", tbInfo.State) + } +} + +func findTableIDByName(infoCache *infoschema.InfoCache, t *meta.Meta, schemaID int64, tableName string) (int64, error) { + // Try to use memory schema info to check first. + currVer, err := t.GetSchemaVersion() + if err != nil { + return 0, err + } + is := infoCache.GetLatest() + if is != nil && is.SchemaMetaVersion() == currVer { + return findTableIDFromInfoSchema(is, schemaID, tableName) + } + + return findTableIDFromStore(t, schemaID, tableName) +} + +func findTableIDFromInfoSchema(is infoschema.InfoSchema, schemaID int64, tableName string) (int64, error) { + schema, ok := is.SchemaByID(schemaID) + if !ok { + return 0, infoschema.ErrDatabaseNotExists.GenWithStackByArgs("") + } + tbl, err := is.TableByName(context.Background(), schema.Name, model.NewCIStr(tableName)) + if err != nil { + return 0, err + } + return tbl.Meta().ID, nil +} + +func findTableIDFromStore(t *meta.Meta, schemaID int64, tableName string) (int64, error) { + tbls, err := t.ListSimpleTables(schemaID) + if err != nil { + if meta.ErrDBNotExists.Equal(err) { + return 0, infoschema.ErrDatabaseNotExists.GenWithStackByArgs("") + } + return 0, errors.Trace(err) + } + for _, tbl := range tbls { + if tbl.Name.L == tableName { + return tbl.ID, nil + } + } + return 0, infoschema.ErrTableNotExists.FastGenByArgs(tableName) +} + +// BuildTableInfoFromAST builds model.TableInfo from a SQL statement. +// Note: TableID and PartitionID are left as uninitialized value. +func BuildTableInfoFromAST(s *ast.CreateTableStmt) (*model.TableInfo, error) { + return buildTableInfoWithCheck(mock.NewContext(), s, mysql.DefaultCharset, "", nil) +} + +// buildTableInfoWithCheck builds model.TableInfo from a SQL statement. +// Note: TableID and PartitionIDs are left as uninitialized value. +func buildTableInfoWithCheck(ctx sessionctx.Context, s *ast.CreateTableStmt, dbCharset, dbCollate string, placementPolicyRef *model.PolicyRefInfo) (*model.TableInfo, error) { + tbInfo, err := BuildTableInfoWithStmt(ctx, s, dbCharset, dbCollate, placementPolicyRef) + if err != nil { + return nil, err + } + // Fix issue 17952 which will cause partition range expr can't be parsed as Int. + // checkTableInfoValidWithStmt will do the constant fold the partition expression first, + // then checkTableInfoValidExtra will pass the tableInfo check successfully. + if err = checkTableInfoValidWithStmt(ctx, tbInfo, s); err != nil { + return nil, err + } + if err = checkTableInfoValidExtra(ctx, tbInfo); err != nil { + return nil, err + } + return tbInfo, nil +} + +// CheckTableInfoValidWithStmt exposes checkTableInfoValidWithStmt to SchemaTracker. Maybe one day we can delete it. +func CheckTableInfoValidWithStmt(ctx sessionctx.Context, tbInfo *model.TableInfo, s *ast.CreateTableStmt) (err error) { + return checkTableInfoValidWithStmt(ctx, tbInfo, s) +} + +func checkTableInfoValidWithStmt(ctx sessionctx.Context, tbInfo *model.TableInfo, s *ast.CreateTableStmt) (err error) { + // All of these rely on the AST structure of expressions, which were + // lost in the model (got serialized into strings). + if err := checkGeneratedColumn(ctx, s.Table.Schema, tbInfo.Name, s.Cols); err != nil { + return errors.Trace(err) + } + + // Check if table has a primary key if required. + if !ctx.GetSessionVars().InRestrictedSQL && ctx.GetSessionVars().PrimaryKeyRequired && len(tbInfo.GetPkName().String()) == 0 { + return infoschema.ErrTableWithoutPrimaryKey + } + if tbInfo.Partition != nil { + if err := checkPartitionDefinitionConstraints(ctx, tbInfo); err != nil { + return errors.Trace(err) + } + if s.Partition != nil { + if err := checkPartitionFuncType(ctx, s.Partition.Expr, s.Table.Schema.O, tbInfo); err != nil { + return errors.Trace(err) + } + if err := checkPartitioningKeysConstraints(ctx, s, tbInfo); err != nil { + return errors.Trace(err) + } + } + } + if tbInfo.TTLInfo != nil { + if err := checkTTLInfoValid(ctx, s.Table.Schema, tbInfo); err != nil { + return errors.Trace(err) + } + } + + return nil +} + +func checkGeneratedColumn(ctx sessionctx.Context, schemaName model.CIStr, tableName model.CIStr, colDefs []*ast.ColumnDef) error { + var colName2Generation = make(map[string]columnGenerationInDDL, len(colDefs)) + var exists bool + var autoIncrementColumn string + for i, colDef := range colDefs { + for _, option := range colDef.Options { + if option.Tp == ast.ColumnOptionGenerated { + if err := checkIllegalFn4Generated(colDef.Name.Name.L, typeColumn, option.Expr); err != nil { + return errors.Trace(err) + } + } + } + if containsColumnOption(colDef, ast.ColumnOptionAutoIncrement) { + exists, autoIncrementColumn = true, colDef.Name.Name.L + } + generated, depCols, err := findDependedColumnNames(schemaName, tableName, colDef) + if err != nil { + return errors.Trace(err) + } + if !generated { + colName2Generation[colDef.Name.Name.L] = columnGenerationInDDL{ + position: i, + generated: false, + } + } else { + colName2Generation[colDef.Name.Name.L] = columnGenerationInDDL{ + position: i, + generated: true, + dependences: depCols, + } + } + } + + // Check whether the generated column refers to any auto-increment columns + if exists { + if !ctx.GetSessionVars().EnableAutoIncrementInGenerated { + for colName, generated := range colName2Generation { + if _, found := generated.dependences[autoIncrementColumn]; found { + return dbterror.ErrGeneratedColumnRefAutoInc.GenWithStackByArgs(colName) + } + } + } + } + + for _, colDef := range colDefs { + colName := colDef.Name.Name.L + if err := verifyColumnGeneration(colName2Generation, colName); err != nil { + return errors.Trace(err) + } + } + return nil +} + +// checkTableInfoValidExtra is like checkTableInfoValid, but also assumes the +// table info comes from untrusted source and performs further checks such as +// name length and column count. +// (checkTableInfoValid is also used in repairing objects which don't perform +// these checks. Perhaps the two functions should be merged together regardless?) +func checkTableInfoValidExtra(ctx sessionctx.Context, tbInfo *model.TableInfo) error { + if err := checkTooLongTable(tbInfo.Name); err != nil { + return err + } + + if err := checkDuplicateColumn(tbInfo.Columns); err != nil { + return err + } + if err := checkTooLongColumns(tbInfo.Columns); err != nil { + return err + } + if err := checkTooManyColumns(tbInfo.Columns); err != nil { + return errors.Trace(err) + } + if err := checkTooManyIndexes(tbInfo.Indices); err != nil { + return errors.Trace(err) + } + if err := checkColumnsAttributes(tbInfo.Columns); err != nil { + return errors.Trace(err) + } + if err := checkGlobalIndexes(ctx, tbInfo); err != nil { + return errors.Trace(err) + } + + // FIXME: perform checkConstraintNames + if err := checkCharsetAndCollation(tbInfo.Charset, tbInfo.Collate); err != nil { + return errors.Trace(err) + } + + oldState := tbInfo.State + tbInfo.State = model.StatePublic + err := checkTableInfoValid(tbInfo) + tbInfo.State = oldState + return err +} + +// checkTableInfoValid uses to check table info valid. This is used to validate table info. +func checkTableInfoValid(tblInfo *model.TableInfo) error { + _, err := tables.TableFromMeta(autoid.NewAllocators(false), tblInfo) + if err != nil { + return err + } + return checkInvisibleIndexOnPK(tblInfo) +} + +func checkDuplicateColumn(cols []*model.ColumnInfo) error { + colNames := set.StringSet{} + for _, col := range cols { + colName := col.Name + if colNames.Exist(colName.L) { + return infoschema.ErrColumnExists.GenWithStackByArgs(colName.O) + } + colNames.Insert(colName.L) + } + return nil +} + +func checkTooLongColumns(cols []*model.ColumnInfo) error { + for _, col := range cols { + if err := checkTooLongColumn(col.Name); err != nil { + return err + } + } + return nil +} + +func checkTooManyColumns(colDefs []*model.ColumnInfo) error { + if uint32(len(colDefs)) > atomic.LoadUint32(&config.GetGlobalConfig().TableColumnCountLimit) { + return dbterror.ErrTooManyFields + } + return nil +} + +func checkTooManyIndexes(idxDefs []*model.IndexInfo) error { + if len(idxDefs) > config.GetGlobalConfig().IndexLimit { + return dbterror.ErrTooManyKeys.GenWithStackByArgs(config.GetGlobalConfig().IndexLimit) + } + return nil +} + +// checkColumnsAttributes checks attributes for multiple columns. +func checkColumnsAttributes(colDefs []*model.ColumnInfo) error { + for _, colDef := range colDefs { + if err := checkColumnAttributes(colDef.Name.O, &colDef.FieldType); err != nil { + return errors.Trace(err) + } + } + return nil +} + +// checkColumnAttributes check attributes for single column. +func checkColumnAttributes(colName string, tp *types.FieldType) error { + switch tp.GetType() { + case mysql.TypeNewDecimal, mysql.TypeDouble, mysql.TypeFloat: + if tp.GetFlen() < tp.GetDecimal() { + return types.ErrMBiggerThanD.GenWithStackByArgs(colName) + } + case mysql.TypeDatetime, mysql.TypeDuration, mysql.TypeTimestamp: + if tp.GetDecimal() != types.UnspecifiedFsp && (tp.GetDecimal() < types.MinFsp || tp.GetDecimal() > types.MaxFsp) { + return types.ErrTooBigPrecision.GenWithStackByArgs(tp.GetDecimal(), colName, types.MaxFsp) + } + } + return nil +} + +// BuildSessionTemporaryTableInfo builds model.TableInfo from a SQL statement. +func BuildSessionTemporaryTableInfo(ctx sessionctx.Context, is infoschema.InfoSchema, s *ast.CreateTableStmt, dbCharset, dbCollate string, placementPolicyRef *model.PolicyRefInfo) (*model.TableInfo, error) { + ident := ast.Ident{Schema: s.Table.Schema, Name: s.Table.Name} + //build tableInfo + var tbInfo *model.TableInfo + var referTbl table.Table + var err error + if s.ReferTable != nil { + referIdent := ast.Ident{Schema: s.ReferTable.Schema, Name: s.ReferTable.Name} + _, ok := is.SchemaByName(referIdent.Schema) + if !ok { + return nil, infoschema.ErrTableNotExists.GenWithStackByArgs(referIdent.Schema, referIdent.Name) + } + referTbl, err = is.TableByName(context.Background(), referIdent.Schema, referIdent.Name) + if err != nil { + return nil, infoschema.ErrTableNotExists.GenWithStackByArgs(referIdent.Schema, referIdent.Name) + } + tbInfo, err = BuildTableInfoWithLike(ctx, ident, referTbl.Meta(), s) + } else { + tbInfo, err = buildTableInfoWithCheck(ctx, s, dbCharset, dbCollate, placementPolicyRef) + } + return tbInfo, err +} + +// BuildTableInfoWithStmt builds model.TableInfo from a SQL statement without validity check +func BuildTableInfoWithStmt(ctx sessionctx.Context, s *ast.CreateTableStmt, dbCharset, dbCollate string, placementPolicyRef *model.PolicyRefInfo) (*model.TableInfo, error) { + colDefs := s.Cols + tableCharset, tableCollate, err := GetCharsetAndCollateInTableOption(ctx.GetSessionVars(), 0, s.Options) + if err != nil { + return nil, errors.Trace(err) + } + tableCharset, tableCollate, err = ResolveCharsetCollation(ctx.GetSessionVars(), + ast.CharsetOpt{Chs: tableCharset, Col: tableCollate}, + ast.CharsetOpt{Chs: dbCharset, Col: dbCollate}, + ) + if err != nil { + return nil, errors.Trace(err) + } + + // The column charset haven't been resolved here. + cols, newConstraints, err := buildColumnsAndConstraints(ctx, colDefs, s.Constraints, tableCharset, tableCollate) + if err != nil { + return nil, errors.Trace(err) + } + err = checkConstraintNames(s.Table.Name, newConstraints) + if err != nil { + return nil, errors.Trace(err) + } + + var tbInfo *model.TableInfo + tbInfo, err = BuildTableInfo(ctx, s.Table.Name, cols, newConstraints, tableCharset, tableCollate) + if err != nil { + return nil, errors.Trace(err) + } + if err = setTemporaryType(ctx, tbInfo, s); err != nil { + return nil, errors.Trace(err) + } + + if err = setTableAutoRandomBits(ctx, tbInfo, colDefs); err != nil { + return nil, errors.Trace(err) + } + + if err = handleTableOptions(s.Options, tbInfo); err != nil { + return nil, errors.Trace(err) + } + + sessionVars := ctx.GetSessionVars() + if _, err = validateCommentLength(sessionVars.StmtCtx.ErrCtx(), sessionVars.SQLMode, tbInfo.Name.L, &tbInfo.Comment, dbterror.ErrTooLongTableComment); err != nil { + return nil, errors.Trace(err) + } + + if tbInfo.TempTableType == model.TempTableNone && tbInfo.PlacementPolicyRef == nil && placementPolicyRef != nil { + // Set the defaults from Schema. Note: they are mutual exclusive! + tbInfo.PlacementPolicyRef = placementPolicyRef + } + + // After handleTableOptions, so the partitions can get defaults from Table level + err = buildTablePartitionInfo(ctx, s.Partition, tbInfo) + if err != nil { + return nil, errors.Trace(err) + } + + return tbInfo, nil +} + +func setTableAutoRandomBits(ctx sessionctx.Context, tbInfo *model.TableInfo, colDefs []*ast.ColumnDef) error { + for _, col := range colDefs { + if containsColumnOption(col, ast.ColumnOptionAutoRandom) { + if col.Tp.GetType() != mysql.TypeLonglong { + return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs( + fmt.Sprintf(autoid.AutoRandomOnNonBigIntColumn, types.TypeStr(col.Tp.GetType()))) + } + switch { + case tbInfo.PKIsHandle: + if tbInfo.GetPkName().L != col.Name.Name.L { + errMsg := fmt.Sprintf(autoid.AutoRandomMustFirstColumnInPK, col.Name.Name.O) + return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(errMsg) + } + case tbInfo.IsCommonHandle: + pk := tables.FindPrimaryIndex(tbInfo) + if pk == nil { + return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomNoClusteredPKErrMsg) + } + if col.Name.Name.L != pk.Columns[0].Name.L { + errMsg := fmt.Sprintf(autoid.AutoRandomMustFirstColumnInPK, col.Name.Name.O) + return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(errMsg) + } + default: + return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomNoClusteredPKErrMsg) + } + + if containsColumnOption(col, ast.ColumnOptionAutoIncrement) { + return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomIncompatibleWithAutoIncErrMsg) + } + if containsColumnOption(col, ast.ColumnOptionDefaultValue) { + return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomIncompatibleWithDefaultValueErrMsg) + } + + shardBits, rangeBits, err := extractAutoRandomBitsFromColDef(col) + if err != nil { + return errors.Trace(err) + } + tbInfo.AutoRandomBits = shardBits + tbInfo.AutoRandomRangeBits = rangeBits + + shardFmt := autoid.NewShardIDFormat(col.Tp, shardBits, rangeBits) + if shardFmt.IncrementalBits < autoid.AutoRandomIncBitsMin { + return dbterror.ErrInvalidAutoRandom.FastGenByArgs(autoid.AutoRandomIncrementalBitsTooSmall) + } + msg := fmt.Sprintf(autoid.AutoRandomAvailableAllocTimesNote, shardFmt.IncrementalBitsCapacity()) + ctx.GetSessionVars().StmtCtx.AppendNote(errors.NewNoStackError(msg)) + } + } + return nil +} + +func containsColumnOption(colDef *ast.ColumnDef, opTp ast.ColumnOptionType) bool { + for _, option := range colDef.Options { + if option.Tp == opTp { + return true + } + } + return false +} + +func extractAutoRandomBitsFromColDef(colDef *ast.ColumnDef) (shardBits, rangeBits uint64, err error) { + for _, op := range colDef.Options { + if op.Tp == ast.ColumnOptionAutoRandom { + shardBits, err = autoid.AutoRandomShardBitsNormalize(op.AutoRandOpt.ShardBits, colDef.Name.Name.O) + if err != nil { + return 0, 0, err + } + rangeBits, err = autoid.AutoRandomRangeBitsNormalize(op.AutoRandOpt.RangeBits) + if err != nil { + return 0, 0, err + } + return shardBits, rangeBits, nil + } + } + return 0, 0, nil +} + +// handleTableOptions updates tableInfo according to table options. +func handleTableOptions(options []*ast.TableOption, tbInfo *model.TableInfo) error { + var ttlOptionsHandled bool + + for _, op := range options { + switch op.Tp { + case ast.TableOptionAutoIncrement: + tbInfo.AutoIncID = int64(op.UintValue) + case ast.TableOptionAutoIdCache: + if op.UintValue > uint64(math.MaxInt64) { + // TODO: Refine this error. + return errors.New("table option auto_id_cache overflows int64") + } + tbInfo.AutoIdCache = int64(op.UintValue) + case ast.TableOptionAutoRandomBase: + tbInfo.AutoRandID = int64(op.UintValue) + case ast.TableOptionComment: + tbInfo.Comment = op.StrValue + case ast.TableOptionCompression: + tbInfo.Compression = op.StrValue + case ast.TableOptionShardRowID: + if op.UintValue > 0 && tbInfo.HasClusteredIndex() { + return dbterror.ErrUnsupportedShardRowIDBits + } + tbInfo.ShardRowIDBits = op.UintValue + if tbInfo.ShardRowIDBits > shardRowIDBitsMax { + tbInfo.ShardRowIDBits = shardRowIDBitsMax + } + tbInfo.MaxShardRowIDBits = tbInfo.ShardRowIDBits + case ast.TableOptionPreSplitRegion: + if tbInfo.TempTableType != model.TempTableNone { + return errors.Trace(dbterror.ErrOptOnTemporaryTable.GenWithStackByArgs("pre split regions")) + } + tbInfo.PreSplitRegions = op.UintValue + case ast.TableOptionCharset, ast.TableOptionCollate: + // We don't handle charset and collate here since they're handled in `GetCharsetAndCollateInTableOption`. + case ast.TableOptionPlacementPolicy: + tbInfo.PlacementPolicyRef = &model.PolicyRefInfo{ + Name: model.NewCIStr(op.StrValue), + } + case ast.TableOptionTTL, ast.TableOptionTTLEnable, ast.TableOptionTTLJobInterval: + if ttlOptionsHandled { + continue + } + + ttlInfo, ttlEnable, ttlJobInterval, err := getTTLInfoInOptions(options) + if err != nil { + return err + } + // It's impossible that `ttlInfo` and `ttlEnable` are all nil, because we have met this option. + // After exclude the situation `ttlInfo == nil && ttlEnable != nil`, we could say `ttlInfo != nil` + if ttlInfo == nil { + if ttlEnable != nil { + return errors.Trace(dbterror.ErrSetTTLOptionForNonTTLTable.FastGenByArgs("TTL_ENABLE")) + } + if ttlJobInterval != nil { + return errors.Trace(dbterror.ErrSetTTLOptionForNonTTLTable.FastGenByArgs("TTL_JOB_INTERVAL")) + } + } + + tbInfo.TTLInfo = ttlInfo + ttlOptionsHandled = true + } + } + shardingBits := shardingBits(tbInfo) + if tbInfo.PreSplitRegions > shardingBits { + tbInfo.PreSplitRegions = shardingBits + } + return nil +} + +func setTemporaryType(_ sessionctx.Context, tbInfo *model.TableInfo, s *ast.CreateTableStmt) error { + switch s.TemporaryKeyword { + case ast.TemporaryGlobal: + tbInfo.TempTableType = model.TempTableGlobal + // "create global temporary table ... on commit preserve rows" + if !s.OnCommitDelete { + return errors.Trace(dbterror.ErrUnsupportedOnCommitPreserve) + } + case ast.TemporaryLocal: + tbInfo.TempTableType = model.TempTableLocal + default: + tbInfo.TempTableType = model.TempTableNone + } + return nil +} + +func buildColumnsAndConstraints( + ctx sessionctx.Context, + colDefs []*ast.ColumnDef, + constraints []*ast.Constraint, + tblCharset string, + tblCollate string, +) ([]*table.Column, []*ast.Constraint, error) { + // outPriKeyConstraint is the primary key constraint out of column definition. such as: create table t1 (id int , age int, primary key(id)); + var outPriKeyConstraint *ast.Constraint + for _, v := range constraints { + if v.Tp == ast.ConstraintPrimaryKey { + outPriKeyConstraint = v + break + } + } + cols := make([]*table.Column, 0, len(colDefs)) + colMap := make(map[string]*table.Column, len(colDefs)) + + for i, colDef := range colDefs { + if field_types.TiDBStrictIntegerDisplayWidth { + switch colDef.Tp.GetType() { + case mysql.TypeTiny: + // No warning for BOOL-like tinyint(1) + if colDef.Tp.GetFlen() != types.UnspecifiedLength && colDef.Tp.GetFlen() != 1 { + ctx.GetSessionVars().StmtCtx.AppendWarning( + dbterror.ErrWarnDeprecatedIntegerDisplayWidth.FastGenByArgs(), + ) + } + case mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong: + if colDef.Tp.GetFlen() != types.UnspecifiedLength { + ctx.GetSessionVars().StmtCtx.AppendWarning( + dbterror.ErrWarnDeprecatedIntegerDisplayWidth.FastGenByArgs(), + ) + } + } + } + col, cts, err := buildColumnAndConstraint(ctx, i, colDef, outPriKeyConstraint, tblCharset, tblCollate) + if err != nil { + return nil, nil, errors.Trace(err) + } + col.State = model.StatePublic + if mysql.HasZerofillFlag(col.GetFlag()) { + ctx.GetSessionVars().StmtCtx.AppendWarning( + dbterror.ErrWarnDeprecatedZerofill.FastGenByArgs(), + ) + } + constraints = append(constraints, cts...) + cols = append(cols, col) + colMap[colDef.Name.Name.L] = col + } + // Traverse table Constraints and set col.flag. + for _, v := range constraints { + setColumnFlagWithConstraint(colMap, v) + } + return cols, constraints, nil +} + +func setEmptyConstraintName(namesMap map[string]bool, constr *ast.Constraint) { + if constr.Name == "" && len(constr.Keys) > 0 { + var colName string + for _, keyPart := range constr.Keys { + if keyPart.Expr != nil { + colName = "expression_index" + } + } + if colName == "" { + colName = constr.Keys[0].Column.Name.O + } + constrName := colName + i := 2 + if strings.EqualFold(constrName, mysql.PrimaryKeyName) { + constrName = fmt.Sprintf("%s_%d", constrName, 2) + i = 3 + } + for namesMap[constrName] { + // We loop forever until we find constrName that haven't been used. + constrName = fmt.Sprintf("%s_%d", colName, i) + i++ + } + constr.Name = constrName + namesMap[constrName] = true + } +} + +func checkConstraintNames(tableName model.CIStr, constraints []*ast.Constraint) error { + constrNames := map[string]bool{} + fkNames := map[string]bool{} + + // Check not empty constraint name whether is duplicated. + for _, constr := range constraints { + if constr.Tp == ast.ConstraintForeignKey { + err := checkDuplicateConstraint(fkNames, constr.Name, constr.Tp) + if err != nil { + return errors.Trace(err) + } + } else { + err := checkDuplicateConstraint(constrNames, constr.Name, constr.Tp) + if err != nil { + return errors.Trace(err) + } + } + } + + // Set empty constraint names. + checkConstraints := make([]*ast.Constraint, 0, len(constraints)) + for _, constr := range constraints { + if constr.Tp != ast.ConstraintForeignKey { + setEmptyConstraintName(constrNames, constr) + } + if constr.Tp == ast.ConstraintCheck { + checkConstraints = append(checkConstraints, constr) + } + } + // Set check constraint name under its order. + if len(checkConstraints) > 0 { + setEmptyCheckConstraintName(tableName.L, constrNames, checkConstraints) + } + return nil +} + +func checkDuplicateConstraint(namesMap map[string]bool, name string, constraintType ast.ConstraintType) error { + if name == "" { + return nil + } + nameLower := strings.ToLower(name) + if namesMap[nameLower] { + switch constraintType { + case ast.ConstraintForeignKey: + return dbterror.ErrFkDupName.GenWithStackByArgs(name) + case ast.ConstraintCheck: + return dbterror.ErrCheckConstraintDupName.GenWithStackByArgs(name) + default: + return dbterror.ErrDupKeyName.GenWithStackByArgs(name) + } + } + namesMap[nameLower] = true + return nil +} + +func setEmptyCheckConstraintName(tableLowerName string, namesMap map[string]bool, constrs []*ast.Constraint) { + cnt := 1 + constraintPrefix := tableLowerName + "_chk_" + for _, constr := range constrs { + if constr.Name == "" { + constrName := fmt.Sprintf("%s%d", constraintPrefix, cnt) + for { + // loop until find constrName that haven't been used. + if !namesMap[constrName] { + namesMap[constrName] = true + break + } + cnt++ + constrName = fmt.Sprintf("%s%d", constraintPrefix, cnt) + } + constr.Name = constrName + } + } +} + +func setColumnFlagWithConstraint(colMap map[string]*table.Column, v *ast.Constraint) { + switch v.Tp { + case ast.ConstraintPrimaryKey: + for _, key := range v.Keys { + if key.Expr != nil { + continue + } + c, ok := colMap[key.Column.Name.L] + if !ok { + continue + } + c.AddFlag(mysql.PriKeyFlag) + // Primary key can not be NULL. + c.AddFlag(mysql.NotNullFlag) + setNoDefaultValueFlag(c, c.DefaultValue != nil) + } + case ast.ConstraintUniq, ast.ConstraintUniqIndex, ast.ConstraintUniqKey: + for i, key := range v.Keys { + if key.Expr != nil { + continue + } + c, ok := colMap[key.Column.Name.L] + if !ok { + continue + } + if i == 0 { + // Only the first column can be set + // if unique index has multi columns, + // the flag should be MultipleKeyFlag. + // See https://dev.mysql.com/doc/refman/5.7/en/show-columns.html + if len(v.Keys) > 1 { + c.AddFlag(mysql.MultipleKeyFlag) + } else { + c.AddFlag(mysql.UniqueKeyFlag) + } + } + } + case ast.ConstraintKey, ast.ConstraintIndex: + for i, key := range v.Keys { + if key.Expr != nil { + continue + } + c, ok := colMap[key.Column.Name.L] + if !ok { + continue + } + if i == 0 { + // Only the first column can be set. + c.AddFlag(mysql.MultipleKeyFlag) + } + } + } +} + +// BuildTableInfoWithLike builds a new table info according to CREATE TABLE ... LIKE statement. +func BuildTableInfoWithLike(ctx sessionctx.Context, ident ast.Ident, referTblInfo *model.TableInfo, s *ast.CreateTableStmt) (*model.TableInfo, error) { + // Check the referred table is a real table object. + if referTblInfo.IsSequence() || referTblInfo.IsView() { + return nil, dbterror.ErrWrongObject.GenWithStackByArgs(ident.Schema, referTblInfo.Name, "BASE TABLE") + } + tblInfo := *referTblInfo + if err := setTemporaryType(ctx, &tblInfo, s); err != nil { + return nil, errors.Trace(err) + } + // Check non-public column and adjust column offset. + newColumns := referTblInfo.Cols() + newIndices := make([]*model.IndexInfo, 0, len(tblInfo.Indices)) + for _, idx := range tblInfo.Indices { + if idx.State == model.StatePublic { + newIndices = append(newIndices, idx) + } + } + tblInfo.Columns = newColumns + tblInfo.Indices = newIndices + tblInfo.Name = ident.Name + tblInfo.AutoIncID = 0 + tblInfo.ForeignKeys = nil + // Ignore TiFlash replicas for temporary tables. + if s.TemporaryKeyword != ast.TemporaryNone { + tblInfo.TiFlashReplica = nil + } else if tblInfo.TiFlashReplica != nil { + replica := *tblInfo.TiFlashReplica + // Keep the tiflash replica setting, remove the replica available status. + replica.AvailablePartitionIDs = nil + replica.Available = false + tblInfo.TiFlashReplica = &replica + } + if referTblInfo.Partition != nil { + pi := *referTblInfo.Partition + pi.Definitions = make([]model.PartitionDefinition, len(referTblInfo.Partition.Definitions)) + copy(pi.Definitions, referTblInfo.Partition.Definitions) + tblInfo.Partition = &pi + } + + if referTblInfo.TTLInfo != nil { + tblInfo.TTLInfo = referTblInfo.TTLInfo.Clone() + } + renameCheckConstraint(&tblInfo) + return &tblInfo, nil +} + +func renameCheckConstraint(tblInfo *model.TableInfo) { + for _, cons := range tblInfo.Constraints { + cons.Name = model.NewCIStr("") + cons.Table = tblInfo.Name + } + setNameForConstraintInfo(tblInfo.Name.L, map[string]bool{}, tblInfo.Constraints) +} + +// BuildTableInfo creates a TableInfo. +func BuildTableInfo( + ctx sessionctx.Context, + tableName model.CIStr, + cols []*table.Column, + constraints []*ast.Constraint, + charset string, + collate string, +) (tbInfo *model.TableInfo, err error) { + tbInfo = &model.TableInfo{ + Name: tableName, + Version: model.CurrLatestTableInfoVersion, + Charset: charset, + Collate: collate, + } + tblColumns := make([]*table.Column, 0, len(cols)) + existedColsMap := make(map[string]struct{}, len(cols)) + for _, v := range cols { + v.ID = AllocateColumnID(tbInfo) + tbInfo.Columns = append(tbInfo.Columns, v.ToInfo()) + tblColumns = append(tblColumns, table.ToColumn(v.ToInfo())) + existedColsMap[v.Name.L] = struct{}{} + } + foreignKeyID := tbInfo.MaxForeignKeyID + for _, constr := range constraints { + // Build hidden columns if necessary. + hiddenCols, err := buildHiddenColumnInfoWithCheck(ctx, constr.Keys, model.NewCIStr(constr.Name), tbInfo, tblColumns) + if err != nil { + return nil, err + } + for _, hiddenCol := range hiddenCols { + hiddenCol.State = model.StatePublic + hiddenCol.ID = AllocateColumnID(tbInfo) + hiddenCol.Offset = len(tbInfo.Columns) + tbInfo.Columns = append(tbInfo.Columns, hiddenCol) + tblColumns = append(tblColumns, table.ToColumn(hiddenCol)) + } + // Check clustered on non-primary key. + if constr.Option != nil && constr.Option.PrimaryKeyTp != model.PrimaryKeyTypeDefault && + constr.Tp != ast.ConstraintPrimaryKey { + return nil, dbterror.ErrUnsupportedClusteredSecondaryKey + } + if constr.Tp == ast.ConstraintForeignKey { + var fkName model.CIStr + foreignKeyID++ + if constr.Name != "" { + fkName = model.NewCIStr(constr.Name) + } else { + fkName = model.NewCIStr(fmt.Sprintf("fk_%d", foreignKeyID)) + } + if model.FindFKInfoByName(tbInfo.ForeignKeys, fkName.L) != nil { + return nil, infoschema.ErrCannotAddForeign + } + fk, err := buildFKInfo(fkName, constr.Keys, constr.Refer, cols) + if err != nil { + return nil, err + } + fk.State = model.StatePublic + + tbInfo.ForeignKeys = append(tbInfo.ForeignKeys, fk) + continue + } + if constr.Tp == ast.ConstraintPrimaryKey { + lastCol, err := CheckPKOnGeneratedColumn(tbInfo, constr.Keys) + if err != nil { + return nil, err + } + isSingleIntPK := isSingleIntPK(constr, lastCol) + if ShouldBuildClusteredIndex(ctx, constr.Option, isSingleIntPK) { + if isSingleIntPK { + tbInfo.PKIsHandle = true + } else { + tbInfo.IsCommonHandle = true + tbInfo.CommonHandleVersion = 1 + } + } + if tbInfo.HasClusteredIndex() { + // Primary key cannot be invisible. + if constr.Option != nil && constr.Option.Visibility == ast.IndexVisibilityInvisible { + return nil, dbterror.ErrPKIndexCantBeInvisible + } + } + if tbInfo.PKIsHandle { + continue + } + } + + if constr.Tp == ast.ConstraintFulltext { + ctx.GetSessionVars().StmtCtx.AppendWarning(dbterror.ErrTableCantHandleFt.FastGenByArgs()) + continue + } + + var ( + indexName = constr.Name + primary, unique bool + ) + + // Check if the index is primary or unique. + switch constr.Tp { + case ast.ConstraintPrimaryKey: + primary = true + unique = true + indexName = mysql.PrimaryKeyName + case ast.ConstraintUniq, ast.ConstraintUniqKey, ast.ConstraintUniqIndex: + unique = true + } + + // check constraint + if constr.Tp == ast.ConstraintCheck { + if !variable.EnableCheckConstraint.Load() { + ctx.GetSessionVars().StmtCtx.AppendWarning(errCheckConstraintIsOff) + continue + } + // Since column check constraint dependency has been done in columnDefToCol. + // Here do the table check constraint dependency check, table constraint + // can only refer the columns in defined columns of the table. + // Refer: https://dev.mysql.com/doc/refman/8.0/en/create-table-check-constraints.html + if ok, err := table.IsSupportedExpr(constr); !ok { + return nil, err + } + var dependedCols []model.CIStr + dependedColsMap := findDependentColsInExpr(constr.Expr) + if !constr.InColumn { + dependedCols = make([]model.CIStr, 0, len(dependedColsMap)) + for k := range dependedColsMap { + if _, ok := existedColsMap[k]; !ok { + // The table constraint depended on a non-existed column. + return nil, dbterror.ErrTableCheckConstraintReferUnknown.GenWithStackByArgs(constr.Name, k) + } + dependedCols = append(dependedCols, model.NewCIStr(k)) + } + } else { + // Check the column-type constraint dependency. + if len(dependedColsMap) > 1 { + return nil, dbterror.ErrColumnCheckConstraintReferOther.GenWithStackByArgs(constr.Name) + } else if len(dependedColsMap) == 0 { + // If dependedCols is empty, the expression must be true/false. + valExpr, ok := constr.Expr.(*driver.ValueExpr) + if !ok || !mysql.HasIsBooleanFlag(valExpr.GetType().GetFlag()) { + return nil, errors.Trace(errors.New("unsupported expression in check constraint")) + } + } else { + if _, ok := dependedColsMap[constr.InColumnName]; !ok { + return nil, dbterror.ErrColumnCheckConstraintReferOther.GenWithStackByArgs(constr.Name) + } + dependedCols = []model.CIStr{model.NewCIStr(constr.InColumnName)} + } + } + // check auto-increment column + if table.ContainsAutoIncrementCol(dependedCols, tbInfo) { + return nil, dbterror.ErrCheckConstraintRefersAutoIncrementColumn.GenWithStackByArgs(constr.Name) + } + // check foreign key + if err := table.HasForeignKeyRefAction(tbInfo.ForeignKeys, constraints, constr, dependedCols); err != nil { + return nil, err + } + // build constraint meta info. + constraintInfo, err := buildConstraintInfo(tbInfo, dependedCols, constr, model.StatePublic) + if err != nil { + return nil, errors.Trace(err) + } + // check if the expression is bool type + if err := table.IfCheckConstraintExprBoolType(ctx.GetExprCtx().GetEvalCtx(), constraintInfo, tbInfo); err != nil { + return nil, err + } + constraintInfo.ID = allocateConstraintID(tbInfo) + tbInfo.Constraints = append(tbInfo.Constraints, constraintInfo) + continue + } + + // build index info. + idxInfo, err := BuildIndexInfo( + ctx, + tbInfo.Columns, + model.NewCIStr(indexName), + primary, + unique, + constr.Keys, + constr.Option, + model.StatePublic, + ) + if err != nil { + return nil, errors.Trace(err) + } + + if len(hiddenCols) > 0 { + AddIndexColumnFlag(tbInfo, idxInfo) + } + sessionVars := ctx.GetSessionVars() + _, err = validateCommentLength(sessionVars.StmtCtx.ErrCtx(), sessionVars.SQLMode, idxInfo.Name.String(), &idxInfo.Comment, dbterror.ErrTooLongIndexComment) + if err != nil { + return nil, errors.Trace(err) + } + idxInfo.ID = AllocateIndexID(tbInfo) + tbInfo.Indices = append(tbInfo.Indices, idxInfo) + } + + err = addIndexForForeignKey(ctx, tbInfo) + return tbInfo, err +} + +func precheckBuildHiddenColumnInfo( + indexPartSpecifications []*ast.IndexPartSpecification, + indexName model.CIStr, +) error { + for i, idxPart := range indexPartSpecifications { + if idxPart.Expr == nil { + continue + } + name := fmt.Sprintf("%s_%s_%d", expressionIndexPrefix, indexName, i) + if utf8.RuneCountInString(name) > mysql.MaxColumnNameLength { + // TODO: Refine the error message. + return dbterror.ErrTooLongIdent.GenWithStackByArgs("hidden column") + } + // TODO: Refine the error message. + if err := checkIllegalFn4Generated(indexName.L, typeIndex, idxPart.Expr); err != nil { + return errors.Trace(err) + } + } + return nil +} + +func buildHiddenColumnInfoWithCheck(ctx sessionctx.Context, indexPartSpecifications []*ast.IndexPartSpecification, indexName model.CIStr, tblInfo *model.TableInfo, existCols []*table.Column) ([]*model.ColumnInfo, error) { + if err := precheckBuildHiddenColumnInfo(indexPartSpecifications, indexName); err != nil { + return nil, err + } + return BuildHiddenColumnInfo(ctx, indexPartSpecifications, indexName, tblInfo, existCols) +} + +// BuildHiddenColumnInfo builds hidden column info. +func BuildHiddenColumnInfo(ctx sessionctx.Context, indexPartSpecifications []*ast.IndexPartSpecification, indexName model.CIStr, tblInfo *model.TableInfo, existCols []*table.Column) ([]*model.ColumnInfo, error) { + hiddenCols := make([]*model.ColumnInfo, 0, len(indexPartSpecifications)) + for i, idxPart := range indexPartSpecifications { + if idxPart.Expr == nil { + continue + } + idxPart.Column = &ast.ColumnName{Name: model.NewCIStr(fmt.Sprintf("%s_%s_%d", expressionIndexPrefix, indexName, i))} + // Check whether the hidden columns have existed. + col := table.FindCol(existCols, idxPart.Column.Name.L) + if col != nil { + // TODO: Use expression index related error. + return nil, infoschema.ErrColumnExists.GenWithStackByArgs(col.Name.String()) + } + idxPart.Length = types.UnspecifiedLength + // The index part is an expression, prepare a hidden column for it. + + var sb strings.Builder + restoreFlags := format.RestoreStringSingleQuotes | format.RestoreKeyWordLowercase | format.RestoreNameBackQuotes | + format.RestoreSpacesAroundBinaryOperation | format.RestoreWithoutSchemaName | format.RestoreWithoutTableName + restoreCtx := format.NewRestoreCtx(restoreFlags, &sb) + sb.Reset() + err := idxPart.Expr.Restore(restoreCtx) + if err != nil { + return nil, errors.Trace(err) + } + expr, err := expression.BuildSimpleExpr(ctx.GetExprCtx(), idxPart.Expr, + expression.WithTableInfo(ctx.GetSessionVars().CurrentDB, tblInfo), + expression.WithAllowCastArray(true), + ) + if err != nil { + // TODO: refine the error message. + return nil, err + } + if _, ok := expr.(*expression.Column); ok { + return nil, dbterror.ErrFunctionalIndexOnField + } + + colInfo := &model.ColumnInfo{ + Name: idxPart.Column.Name, + GeneratedExprString: sb.String(), + GeneratedStored: false, + Version: model.CurrLatestColumnInfoVersion, + Dependences: make(map[string]struct{}), + Hidden: true, + FieldType: *expr.GetType(ctx.GetExprCtx().GetEvalCtx()), + } + // Reset some flag, it may be caused by wrong type infer. But it's not easy to fix them all, so reset them here for safety. + colInfo.DelFlag(mysql.PriKeyFlag | mysql.UniqueKeyFlag | mysql.AutoIncrementFlag) + + if colInfo.GetType() == mysql.TypeDatetime || colInfo.GetType() == mysql.TypeDate || colInfo.GetType() == mysql.TypeTimestamp || colInfo.GetType() == mysql.TypeDuration { + if colInfo.FieldType.GetDecimal() == types.UnspecifiedLength { + colInfo.FieldType.SetDecimal(types.MaxFsp) + } + } + // For an array, the collation is set to "binary". The collation has no effect on the array itself (as it's usually + // regarded as a JSON), but will influence how TiKV handles the index value. + if colInfo.FieldType.IsArray() { + colInfo.SetCharset("binary") + colInfo.SetCollate("binary") + } + checkDependencies := make(map[string]struct{}) + for _, colName := range FindColumnNamesInExpr(idxPart.Expr) { + colInfo.Dependences[colName.Name.L] = struct{}{} + checkDependencies[colName.Name.L] = struct{}{} + } + if err = checkDependedColExist(checkDependencies, existCols); err != nil { + return nil, errors.Trace(err) + } + if !ctx.GetSessionVars().EnableAutoIncrementInGenerated { + if err = checkExpressionIndexAutoIncrement(indexName.O, colInfo.Dependences, tblInfo); err != nil { + return nil, errors.Trace(err) + } + } + idxPart.Expr = nil + hiddenCols = append(hiddenCols, colInfo) + } + return hiddenCols, nil +} + +// addIndexForForeignKey uses to auto create an index for the foreign key if the table doesn't have any index cover the +// foreign key columns. +func addIndexForForeignKey(ctx sessionctx.Context, tbInfo *model.TableInfo) error { + if len(tbInfo.ForeignKeys) == 0 { + return nil + } + var handleCol *model.ColumnInfo + if tbInfo.PKIsHandle { + handleCol = tbInfo.GetPkColInfo() + } + for _, fk := range tbInfo.ForeignKeys { + if fk.Version < model.FKVersion1 { + continue + } + if handleCol != nil && len(fk.Cols) == 1 && handleCol.Name.L == fk.Cols[0].L { + continue + } + if model.FindIndexByColumns(tbInfo, tbInfo.Indices, fk.Cols...) != nil { + continue + } + idxName := fk.Name + if tbInfo.FindIndexByName(idxName.L) != nil { + return dbterror.ErrDupKeyName.GenWithStack("duplicate key name %s", fk.Name.O) + } + keys := make([]*ast.IndexPartSpecification, 0, len(fk.Cols)) + for _, col := range fk.Cols { + keys = append(keys, &ast.IndexPartSpecification{ + Column: &ast.ColumnName{Name: col}, + Length: types.UnspecifiedLength, + }) + } + idxInfo, err := BuildIndexInfo(ctx, tbInfo.Columns, idxName, false, false, keys, nil, model.StatePublic) + if err != nil { + return errors.Trace(err) + } + idxInfo.ID = AllocateIndexID(tbInfo) + tbInfo.Indices = append(tbInfo.Indices, idxInfo) + } + return nil +} + +func isSingleIntPK(constr *ast.Constraint, lastCol *model.ColumnInfo) bool { + if len(constr.Keys) != 1 { + return false + } + switch lastCol.GetType() { + case mysql.TypeLong, mysql.TypeLonglong, + mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24: + return true + } + return false +} + +// ShouldBuildClusteredIndex is used to determine whether the CREATE TABLE statement should build a clustered index table. +func ShouldBuildClusteredIndex(ctx sessionctx.Context, opt *ast.IndexOption, isSingleIntPK bool) bool { + if opt == nil || opt.PrimaryKeyTp == model.PrimaryKeyTypeDefault { + switch ctx.GetSessionVars().EnableClusteredIndex { + case variable.ClusteredIndexDefModeOn: + return true + case variable.ClusteredIndexDefModeIntOnly: + return !config.GetGlobalConfig().AlterPrimaryKey && isSingleIntPK + default: + return false + } + } + return opt.PrimaryKeyTp == model.PrimaryKeyTypeClustered +} + +// BuildViewInfo builds a ViewInfo structure from an ast.CreateViewStmt. +func BuildViewInfo(s *ast.CreateViewStmt) (*model.ViewInfo, error) { + // Always Use `format.RestoreNameBackQuotes` to restore `SELECT` statement despite the `ANSI_QUOTES` SQL Mode is enabled or not. + restoreFlag := format.RestoreStringSingleQuotes | format.RestoreKeyWordUppercase | format.RestoreNameBackQuotes + var sb strings.Builder + if err := s.Select.Restore(format.NewRestoreCtx(restoreFlag, &sb)); err != nil { + return nil, err + } + + return &model.ViewInfo{Definer: s.Definer, Algorithm: s.Algorithm, + Security: s.Security, SelectStmt: sb.String(), CheckOption: s.CheckOption, Cols: nil}, nil +} diff --git a/pkg/ddl/db_change_failpoints_test.go b/pkg/ddl/db_change_failpoints_test.go index dfacf2cd05ff4..23059e004f5eb 100644 --- a/pkg/ddl/db_change_failpoints_test.go +++ b/pkg/ddl/db_change_failpoints_test.go @@ -86,7 +86,7 @@ func TestParallelUpdateTableReplica(t *testing.T) { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/infoschema/mockTiFlashStoreCount")) }() - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("create database test_db_state default charset utf8 default collate utf8_bin") @@ -95,8 +95,7 @@ func TestParallelUpdateTableReplica(t *testing.T) { tk.MustExec("create table t1 (a int);") tk.MustExec("alter table t1 set tiflash replica 3 location labels 'a','b';") - tk1, tk2, ch, originalCallback := prepareTestControlParallelExecSQL(t, store, dom) - defer dom.DDL().SetHook(originalCallback) + tk1, tk2, ch := prepareTestControlParallelExecSQL(t, store) t1 := external.GetTableByName(t, tk, "test_db_state", "t1") diff --git a/pkg/ddl/db_change_test.go b/pkg/ddl/db_change_test.go index ddb6709bef06b..25a8249a5b9cc 100644 --- a/pkg/ddl/db_change_test.go +++ b/pkg/ddl/db_change_test.go @@ -23,8 +23,8 @@ import ( "time" "github.com/pingcap/errors" + "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/ddl" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/executor" "github.com/pingcap/tidb/pkg/kv" @@ -46,7 +46,7 @@ import ( // TestShowCreateTable tests the result of "show create table" when we are running "add index" or "add column". func TestShowCreateTable(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -74,9 +74,8 @@ func TestShowCreateTable(t *testing.T) { "CREATE TABLE `t2` (\n `a` int(11) DEFAULT NULL,\n `b` varchar(10) COLLATE utf8mb4_general_ci DEFAULT NULL,\n `c` varchar(1) COLLATE utf8mb4_general_ci DEFAULT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci"}, } prevState := model.StateNone - callback := &callback.TestDDLCallback{} currTestCaseOffset := 0 - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if job.SchemaState == prevState || checkErr != nil { return } @@ -110,12 +109,7 @@ func TestShowCreateTable(t *testing.T) { } terror.Log(result.Close()) } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d := dom.DDL() - originalCallback := d.GetHook() - defer d.SetHook(originalCallback) - d.SetHook(callback) + }) for _, tc := range testCases { tk.MustExec(tc.sql) require.NoError(t, checkErr) @@ -124,7 +118,7 @@ func TestShowCreateTable(t *testing.T) { // TestDropNotNullColumn is used to test issue #8654. func TestDropNotNullColumn(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -143,11 +137,8 @@ func TestDropNotNullColumn(t *testing.T) { tk1.MustExec("use test") var checkErr error - d := dom.DDL() - originalCallback := d.GetHook() - callback := &callback.TestDDLCallback{} sqlNum := 0 - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if checkErr != nil { return } @@ -165,9 +156,7 @@ func TestDropNotNullColumn(t *testing.T) { _, checkErr = tk1.Exec("insert into t4 set id = 5") } } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(callback) + }) tk.MustExec("alter table t drop column a") require.NoError(t, checkErr) sqlNum++ @@ -182,12 +171,12 @@ func TestDropNotNullColumn(t *testing.T) { sqlNum++ tk.MustExec("alter table t4 drop column e") require.NoError(t, checkErr) - d.SetHook(originalCallback) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") tk.MustExec("drop table t, t1, t2, t3") } func TestTwoStates(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, 200*time.Millisecond) + store := testkit.CreateMockStoreWithSchemaLease(t, 200*time.Millisecond) tk := testkit.NewTestKit(t, store) tk.MustExec("create database test_db_state default charset utf8 default collate utf8_bin") tk.MustExec("use test_db_state") @@ -227,13 +216,12 @@ func TestTwoStates(t *testing.T) { key(c1, c2))`) tk.MustExec("insert into t values(1, 'a', 'N', '2017-07-01')") - callback := &callback.TestDDLCallback{} prevState := model.StateNone require.NoError(t, testInfo.parseSQLs(parser.New())) times := 0 var checkErr error - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if job.SchemaState == prevState || checkErr != nil || times >= 3 { return } @@ -280,12 +268,7 @@ func TestTwoStates(t *testing.T) { checkErr = err } } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d := dom.DDL() - originalCallback := d.GetHook() - defer d.SetHook(originalCallback) - d.SetHook(callback) + }) tk.MustExec(alterTableSQL) require.NoError(t, testInfo.compileSQL(4)) require.NoError(t, testInfo.execSQL(4)) @@ -788,7 +771,6 @@ func runTestInSchemaState( // Make sure these SQLs use the plan of index scan. tk.MustExec("drop stats t") - callback := &callback.TestDDLCallback{Do: dom} prevState := model.StateNone var checkErr error se, err := session.CreateSession(store) @@ -812,16 +794,13 @@ func runTestInSchemaState( } } if isOnJobUpdated { - callback.OnJobUpdatedExported.Store(&cbFunc) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", cbFunc) } else { - callback.OnJobRunBeforeExported = cbFunc + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", cbFunc) } - d := dom.DDL() - originalCallback := d.GetHook() - d.SetHook(callback) tk.MustExec(alterTableSQL) require.NoError(t, checkErr) - d.SetHook(originalCallback) + _ = failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/onJobRunBefore") if expectQuery != nil { tk := testkit.NewTestKit(t, store) @@ -845,17 +824,16 @@ func jobStateOrLastSubJobState(job *model.Job) model.SchemaState { } func TestShowIndex(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, 200*time.Millisecond) + store := testkit.CreateMockStoreWithSchemaLease(t, 200*time.Millisecond) tk := testkit.NewTestKit(t, store) tk.MustExec("create database test_db_state default charset utf8 default collate utf8_bin") tk.MustExec("use test_db_state") tk.MustExec(`create table t(c1 int primary key nonclustered, c2 int)`) - callback := &callback.TestDDLCallback{} prevState := model.StateNone showIndexSQL := `show index from t` var checkErr error - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if job.SchemaState == prevState || checkErr != nil { return } @@ -873,11 +851,7 @@ func TestShowIndex(t *testing.T) { checkErr = fmt.Errorf("need %v, but got %v", need, got) } } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d := dom.DDL() - originalCallback := d.GetHook() - d.SetHook(callback) + }) alterTableSQL := `alter table t add index c2(c2)` tk.MustExec(alterTableSQL) require.NoError(t, checkErr) @@ -886,7 +860,7 @@ func TestShowIndex(t *testing.T) { "t 0 PRIMARY 1 c1 A 0 BTREE YES NO", "t 1 c2 1 c2 A 0 YES BTREE YES NO", )) - d.SetHook(originalCallback) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") tk.MustExec(`create table tr( id int, name varchar(50), @@ -1316,10 +1290,9 @@ func TestParallelAlterAndDropSchema(t *testing.T) { testControlParallelExecSQL(t, tk, store, dom, "", sql1, sql2, f) } -func prepareTestControlParallelExecSQL(t *testing.T, store kv.Storage, dom *domain.Domain) (*testkit.TestKit, *testkit.TestKit, chan struct{}, ddl.Callback) { - callback := &callback.TestDDLCallback{} +func prepareTestControlParallelExecSQL(t *testing.T, store kv.Storage) (*testkit.TestKit, *testkit.TestKit, chan struct{}) { times := 0 - callback.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if times != 0 { return } @@ -1337,10 +1310,7 @@ func prepareTestControlParallelExecSQL(t *testing.T, store kv.Storage, dom *doma time.Sleep(5 * time.Millisecond) } times++ - } - d := dom.DDL() - originalCallback := d.GetHook() - d.SetHook(callback) + }) tk1 := testkit.NewTestKit(t, store) tk1.MustExec("use test_db_state") @@ -1365,7 +1335,7 @@ func prepareTestControlParallelExecSQL(t *testing.T, store kv.Storage, dom *doma time.Sleep(5 * time.Millisecond) } }() - return tk1, tk2, ch, originalCallback + return tk1, tk2, ch } func testControlParallelExecSQL(t *testing.T, tk *testkit.TestKit, store kv.Storage, dom *domain.Domain, preSQL, sql1, sql2 string, f func(e1, e2 error)) { @@ -1386,8 +1356,7 @@ func testControlParallelExecSQL(t *testing.T, tk *testkit.TestKit, store kv.Stor partition p1 values less than (20) );`) - tk1, tk2, ch, originalCallback := prepareTestControlParallelExecSQL(t, store, dom) - defer dom.DDL().SetHook(originalCallback) + tk1, tk2, ch := prepareTestControlParallelExecSQL(t, store) var err1 error var err2 error @@ -1412,7 +1381,7 @@ func testControlParallelExecSQL(t *testing.T, tk *testkit.TestKit, store kv.Stor f(err1, err2) } -func dbChangeTestParallelExecSQL(t *testing.T, store kv.Storage, dom *domain.Domain, sql string) { +func dbChangeTestParallelExecSQL(t *testing.T, store kv.Storage, sql string) { tk1 := testkit.NewTestKit(t, store) tk1.MustExec("use test_db_state") tk2 := testkit.NewTestKit(t, store) @@ -1421,19 +1390,14 @@ func dbChangeTestParallelExecSQL(t *testing.T, store kv.Storage, dom *domain.Dom var err2, err3 error var wg util.WaitGroupWrapper - callback := &callback.TestDDLCallback{} once := sync.Once{} - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { // sleep a while, let other job enqueue. once.Do(func() { time.Sleep(time.Millisecond * 10) }) - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d := dom.DDL() - originalCallback := d.GetHook() - defer d.SetHook(originalCallback) - d.SetHook(callback) + }) + defer testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") wg.Run(func() { err2 = tk1.ExecToErr(sql) }) @@ -1447,58 +1411,58 @@ func dbChangeTestParallelExecSQL(t *testing.T, store kv.Storage, dom *domain.Dom // TestCreateTableIfNotExists parallel exec create table if not exists xxx. No error returns is expected. func TestCreateTableIfNotExists(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("create database test_db_state default charset utf8 default collate utf8_bin") - dbChangeTestParallelExecSQL(t, store, dom, "create table if not exists test_not_exists(a int)") + dbChangeTestParallelExecSQL(t, store, "create table if not exists test_not_exists(a int)") } // TestCreateDBIfNotExists parallel exec create database if not exists xxx. No error returns is expected. func TestCreateDBIfNotExists(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("create database test_db_state default charset utf8 default collate utf8_bin") - dbChangeTestParallelExecSQL(t, store, dom, "create database if not exists test_not_exists") + dbChangeTestParallelExecSQL(t, store, "create database if not exists test_not_exists") } // TestDDLIfNotExists parallel exec some DDLs with `if not exists` clause. No error returns is expected. func TestDDLIfNotExists(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, 200*time.Millisecond) + store := testkit.CreateMockStoreWithSchemaLease(t, 200*time.Millisecond) tk := testkit.NewTestKit(t, store) tk.MustExec("create database test_db_state default charset utf8 default collate utf8_bin") tk.MustExec("use test_db_state") tk.MustExec("create table if not exists test_not_exists(a int)") // ADD COLUMN - dbChangeTestParallelExecSQL(t, store, dom, "alter table test_not_exists add column if not exists b int") + dbChangeTestParallelExecSQL(t, store, "alter table test_not_exists add column if not exists b int") // ADD COLUMNS - dbChangeTestParallelExecSQL(t, store, dom, "alter table test_not_exists add column if not exists (c11 int, d11 int)") + dbChangeTestParallelExecSQL(t, store, "alter table test_not_exists add column if not exists (c11 int, d11 int)") // ADD INDEX - dbChangeTestParallelExecSQL(t, store, dom, "alter table test_not_exists add index if not exists idx_b (b)") + dbChangeTestParallelExecSQL(t, store, "alter table test_not_exists add index if not exists idx_b (b)") // CREATE INDEX - dbChangeTestParallelExecSQL(t, store, dom, "create index if not exists idx_b on test_not_exists (b)") + dbChangeTestParallelExecSQL(t, store, "create index if not exists idx_b on test_not_exists (b)") } // TestDDLIfExists parallel exec some DDLs with `if exists` clause. No error returns is expected. func TestDDLIfExists(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, 200*time.Millisecond) + store := testkit.CreateMockStoreWithSchemaLease(t, 200*time.Millisecond) tk := testkit.NewTestKit(t, store) tk.MustExec("create database test_db_state default charset utf8 default collate utf8_bin") tk.MustExec("use test_db_state") tk.MustExec("create table if not exists test_exists (a int key, b int)") // DROP COLUMNS - dbChangeTestParallelExecSQL(t, store, dom, "alter table test_exists drop column if exists c, drop column if exists d") + dbChangeTestParallelExecSQL(t, store, "alter table test_exists drop column if exists c, drop column if exists d") // DROP COLUMN - dbChangeTestParallelExecSQL(t, store, dom, "alter table test_exists drop column if exists b") // only `a` exists now + dbChangeTestParallelExecSQL(t, store, "alter table test_exists drop column if exists b") // only `a` exists now // CHANGE COLUMN - dbChangeTestParallelExecSQL(t, store, dom, "alter table test_exists change column if exists a c int") // only, `c` exists now + dbChangeTestParallelExecSQL(t, store, "alter table test_exists change column if exists a c int") // only, `c` exists now // MODIFY COLUMN - dbChangeTestParallelExecSQL(t, store, dom, "alter table test_exists modify column if exists a bigint") + dbChangeTestParallelExecSQL(t, store, "alter table test_exists modify column if exists a bigint") // DROP INDEX tk.MustExec("alter table test_exists add index idx_c (c)") - dbChangeTestParallelExecSQL(t, store, dom, "alter table test_exists drop index if exists idx_c") + dbChangeTestParallelExecSQL(t, store, "alter table test_exists drop index if exists idx_c") // DROP PARTITION (ADD PARTITION tested in TestParallelAlterAddPartition) tk.MustExec("create table test_exists_2 (a int key) partition by range(a) (partition p0 values less than (10), partition p1 values less than (20), partition p2 values less than (30))") - dbChangeTestParallelExecSQL(t, store, dom, "alter table test_exists_2 drop partition if exists p1") + dbChangeTestParallelExecSQL(t, store, "alter table test_exists_2 drop partition if exists p1") } // TestParallelDDLBeforeRunDDLJob tests a session to execute DDL with an outdated information schema. @@ -1622,7 +1586,7 @@ func TestWriteReorgForColumnTypeChange(t *testing.T) { } func TestCreateExpressionIndex(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -1640,11 +1604,7 @@ func TestCreateExpressionIndex(t *testing.T) { // If waitReorg timeout, the worker may enter writeReorg more than 2 times. reorgTime := 0 var checkErr error - d := dom.DDL() - originalCallback := d.GetHook() - defer d.SetHook(originalCallback) - callback := &callback.TestDDLCallback{} - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if checkErr != nil { return } @@ -1678,10 +1638,8 @@ func TestCreateExpressionIndex(t *testing.T) { } // (1, 7), (2, 7), (5, 7), (8, 8), (0, 9), (10, 10), (10, 10), (0, 11), (0, 11) } - } + }) - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(callback) tk.MustExec("alter table t add index idx((b+1))") require.NoError(t, checkErr) tk.MustExec("admin check table t") @@ -1697,7 +1655,7 @@ func TestCreateExpressionIndex(t *testing.T) { } func TestCreateUniqueExpressionIndex(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -1712,11 +1670,7 @@ func TestCreateUniqueExpressionIndex(t *testing.T) { // If waitReorg timeout, the worker may enter writeReorg more than 2 times. reorgTime := 0 var checkErr error - d := dom.DDL() - originalCallback := d.GetHook() - defer d.SetHook(originalCallback) - callback := &callback.TestDDLCallback{} - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if checkErr != nil { return } @@ -1796,9 +1750,7 @@ func TestCreateUniqueExpressionIndex(t *testing.T) { } // (1, 7), (2, 7), (5, 7), (8, 8), (13, 9), (11, 10), (0, 11) } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(callback) + }) tk.MustExec("alter table t add unique index idx((a*b+1))") require.NoError(t, checkErr) tk.MustExec("admin check table t") @@ -1806,7 +1758,7 @@ func TestCreateUniqueExpressionIndex(t *testing.T) { } func TestDropExpressionIndex(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -1820,11 +1772,7 @@ func TestDropExpressionIndex(t *testing.T) { stateWriteReorganizationSQLs := []string{"insert into t values (10, 10)", "begin pessimistic;", "insert into t select * from t", "rollback", "insert into t set b = 11", "update t set b = 7 where a = 5", "delete from t where b = 6"} var checkErr error - d := dom.DDL() - originalCallback := d.GetHook() - defer d.SetHook(originalCallback) - callback := &callback.TestDDLCallback{} - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if checkErr != nil { return } @@ -1854,9 +1802,7 @@ func TestDropExpressionIndex(t *testing.T) { } // (1, 7), (2, 7), (5, 7), (8, 8), (0, 9), (10, 10), (0, 11) } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(callback) + }) tk.MustExec("alter table t drop index idx") require.NoError(t, checkErr) tk.MustExec("admin check table t") @@ -1864,7 +1810,7 @@ func TestDropExpressionIndex(t *testing.T) { } func TestParallelRenameTable(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("create database test2") @@ -1881,11 +1827,7 @@ func TestParallelRenameTable(t *testing.T) { var wg sync.WaitGroup var checkErr error - d2 := dom.DDL() - originalCallback := d2.GetHook() - defer d2.SetHook(originalCallback) - callback := &callback.TestDDLCallback{Do: dom} - callback.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { switch job.SchemaState { case model.StateNone: if !firstDDL { @@ -1911,9 +1853,7 @@ func TestParallelRenameTable(t *testing.T) { }() time.Sleep(10 * time.Millisecond) } - } - - d2.SetHook(callback) + }) // rename then add column concurrentDDLQuery = "alter table t add column g int" @@ -1979,7 +1919,7 @@ func TestParallelRenameTable(t *testing.T) { } func TestConcurrentSetDefaultValue(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -1995,12 +1935,8 @@ func TestConcurrentSetDefaultValue(t *testing.T) { setdefaultSQLOffset := 0 var wg sync.WaitGroup - d := dom.DDL() - originalCallback := d.GetHook() - defer d.SetHook(originalCallback) - callback := &callback.TestDDLCallback{Do: dom} skip := false - callback.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { switch job.SchemaState { case model.StateDeleteOnly: if skip { @@ -2016,9 +1952,8 @@ func TestConcurrentSetDefaultValue(t *testing.T) { wg.Done() }() } - } + }) - d.SetHook(callback) tk.MustExec("alter table t modify column a MEDIUMINT NULL DEFAULT '-8145111'") wg.Wait() diff --git a/pkg/ddl/db_integration_test.go b/pkg/ddl/db_integration_test.go index 91808b4fee99f..e675b1696e9af 100644 --- a/pkg/ddl/db_integration_test.go +++ b/pkg/ddl/db_integration_test.go @@ -30,7 +30,6 @@ import ( "github.com/pingcap/tidb/pkg/config" "github.com/pingcap/tidb/pkg/ddl/schematracker" ddlutil "github.com/pingcap/tidb/pkg/ddl/util" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/errno" "github.com/pingcap/tidb/pkg/infoschema" @@ -374,7 +373,7 @@ func TestTableDDLWithTimeType(t *testing.T) { } func TestUpdateMultipleTable(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("create table t1 (c1 int, c2 int)") @@ -384,17 +383,13 @@ func TestUpdateMultipleTable(t *testing.T) { tk2 := testkit.NewTestKit(t, store) tk2.MustExec("use test") - d := dom.DDL() - hook := &callback.TestDDLCallback{Do: dom} - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if job.SchemaState == model.StateWriteOnly { tk2.MustExec("update t1, t2 set t1.c1 = 8, t2.c2 = 10 where t1.c2 = t2.c1") tk2.MustQuery("select * from t1").Check(testkit.Rows("8 1", "8 2")) tk2.MustQuery("select * from t2").Check(testkit.Rows("1 10", "2 10")) } - } - hook.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(hook) + }) tk.MustExec("alter table t1 add column c3 bigint default 9") @@ -3098,16 +3093,13 @@ func TestIssue52680(t *testing.T) { } func TestCreateIndexWithChangeMaxIndexLength(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) originCfg := config.GetGlobalConfig() defer func() { config.StoreGlobalConfig(originCfg) }() - originHook := dom.DDL().GetHook() - defer dom.DDL().SetHook(originHook) - hook := &callback.TestDDLCallback{Do: dom} - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.Type != model.ActionAddIndex { return } @@ -3116,8 +3108,7 @@ func TestCreateIndexWithChangeMaxIndexLength(t *testing.T) { newCfg.MaxIndexLength = 1000 config.StoreGlobalConfig(&newCfg) } - } - dom.DDL().SetHook(hook) + }) tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") diff --git a/pkg/ddl/db_table_test.go b/pkg/ddl/db_table_test.go index defa179374184..c5aa1fee85a3b 100644 --- a/pkg/ddl/db_table_test.go +++ b/pkg/ddl/db_table_test.go @@ -27,7 +27,6 @@ import ( "github.com/pingcap/tidb/pkg/config" "github.com/pingcap/tidb/pkg/ddl" testddlutil "github.com/pingcap/tidb/pkg/ddl/testutil" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/errno" "github.com/pingcap/tidb/pkg/infoschema" @@ -37,12 +36,12 @@ import ( "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/terror" "github.com/pingcap/tidb/pkg/sessionctx" - "github.com/pingcap/tidb/pkg/sessiontxn" "github.com/pingcap/tidb/pkg/store/mockstore" "github.com/pingcap/tidb/pkg/table" "github.com/pingcap/tidb/pkg/table/tables" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/testkit/external" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util" "github.com/stretchr/testify/require" @@ -106,7 +105,7 @@ func TestAddNotNullColumnWhileInsertOnDupUpdate(t *testing.T) { } func TestTransactionOnAddDropColumn(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("set @@global.tidb_max_delta_schema_count= 4096") tk.MustExec("use test") @@ -130,11 +129,8 @@ func TestTransactionOnAddDropColumn(t *testing.T) { }, } - originHook := dom.DDL().GetHook() - defer dom.DDL().SetHook(originHook) - hook := &callback.TestDDLCallback{Do: dom} var checkErr error - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if checkErr != nil { return } @@ -152,8 +148,7 @@ func TestTransactionOnAddDropColumn(t *testing.T) { } } } - } - dom.DDL().SetHook(hook) + }) done := make(chan error, 1) // test transaction on add column. go backgroundExec(store, "test", "alter table t1 add column c int not null after a", done) @@ -749,16 +744,12 @@ func TestAddColumn2(t *testing.T) { tk.MustExec("create table t1 (a int key, b int);") defer tk.MustExec("drop table if exists t1, t2") - originHook := dom.DDL().GetHook() - defer dom.DDL().SetHook(originHook) - hook := &callback.TestDDLCallback{Do: dom} var writeOnlyTable table.Table - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.SchemaState == model.StateWriteOnly { - writeOnlyTable, _ = dom.InfoSchema().TableByID(job.TableID) + writeOnlyTable, _ = dom.InfoSchema().TableByID(context.Background(), job.TableID) } - } - dom.DDL().SetHook(hook) + }) done := make(chan error, 1) // test transaction on add column. go backgroundExec(store, "test", "alter table t1 add column c int not null", done) @@ -771,14 +762,14 @@ func TestAddColumn2(t *testing.T) { // mock for outdated tidb update record. require.NotNil(t, writeOnlyTable) ctx := context.Background() - err = sessiontxn.NewTxn(ctx, tk.Session()) + txn, err := newTxn(tk.Session()) require.NoError(t, err) oldRow, err := tables.RowWithCols(writeOnlyTable, tk.Session(), kv.IntHandle(1), writeOnlyTable.WritableCols()) require.NoError(t, err) require.Equal(t, 3, len(oldRow)) - err = writeOnlyTable.RemoveRecord(tk.Session().GetTableCtx(), kv.IntHandle(1), oldRow) + err = writeOnlyTable.RemoveRecord(tk.Session().GetTableCtx(), txn, kv.IntHandle(1), oldRow) require.NoError(t, err) - _, err = writeOnlyTable.AddRecord(tk.Session().GetTableCtx(), types.MakeDatums(oldRow[0].GetInt64(), 2, oldRow[2].GetInt64()), table.IsUpdate) + _, err = writeOnlyTable.AddRecord(tk.Session().GetTableCtx(), txn, types.MakeDatums(oldRow[0].GetInt64(), 2, oldRow[2].GetInt64()), table.IsUpdate) require.NoError(t, err) tk.Session().StmtCommit(ctx) err = tk.Session().CommitTxn(ctx) @@ -789,24 +780,26 @@ func TestAddColumn2(t *testing.T) { // Test for _tidb_rowid var re *testkit.Result tk.MustExec("create table t2 (a int);") - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.SchemaState != model.StateWriteOnly { return } // allow write _tidb_rowid first - tk.MustExec("set @@tidb_opt_write_row_id=1") - tk.MustExec("begin") - tk.MustExec("insert into t2 (a,_tidb_rowid) values (1,2);") - re = tk.MustQuery(" select a,_tidb_rowid from t2;") - tk.MustExec("commit") - } - dom.DDL().SetHook(hook) + tk2 := testkit.NewTestKit(t, store) + tk2.MustExec("use test") + tk2.MustExec("set @@tidb_opt_write_row_id=1") + tk2.MustExec("begin") + tk2.MustExec("insert into t2 (a,_tidb_rowid) values (1,2);") + re = tk2.MustQuery(" select a,_tidb_rowid from t2;") + tk2.MustExec("commit") + }) go backgroundExec(store, "test", "alter table t2 add column b int not null default 3", done) err = <-done require.NoError(t, err) re.Check(testkit.Rows("1 2")) tk.MustQuery("select a,b,_tidb_rowid from t2").Check(testkit.Rows("1 3 2")) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore") } func TestDropTables(t *testing.T) { diff --git a/pkg/ddl/db_test.go b/pkg/ddl/db_test.go index c0ec7e732bb81..5bc4eb1d17bb6 100644 --- a/pkg/ddl/db_test.go +++ b/pkg/ddl/db_test.go @@ -29,7 +29,6 @@ import ( "github.com/pingcap/tidb/pkg/ddl" "github.com/pingcap/tidb/pkg/ddl/testutil" ddlutil "github.com/pingcap/tidb/pkg/ddl/util" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/errno" "github.com/pingcap/tidb/pkg/kv" @@ -45,6 +44,7 @@ import ( "github.com/pingcap/tidb/pkg/sessiontxn" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/testkit/external" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/dbterror" "github.com/pingcap/tidb/pkg/util/mock" @@ -133,7 +133,7 @@ func TestIssue22819(t *testing.T) { } func TestIssue22307(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, dbTestLease) + store := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -141,16 +141,14 @@ func TestIssue22307(t *testing.T) { tk.MustExec("create table t (a int, b int)") tk.MustExec("insert into t values(1, 1);") - hook := &callback.TestDDLCallback{Do: dom} var checkErr1, checkErr2 error - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.SchemaState != model.StateWriteOnly { return } _, checkErr1 = tk.Exec("update t set a = 3 where b = 1;") _, checkErr2 = tk.Exec("update t set a = 3 order by b;") - } - dom.DDL().SetHook(hook) + }) done := make(chan error, 1) // test transaction on add column. go backgroundExec(store, "test", "alter table t drop column b;", done) @@ -161,7 +159,7 @@ func TestIssue22307(t *testing.T) { } func TestAddExpressionIndexRollback(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, dbTestLease) + store := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("create table t1 (c1 int, c2 int, c3 int, unique key(c1))") @@ -171,13 +169,11 @@ func TestAddExpressionIndexRollback(t *testing.T) { tk1 := testkit.NewTestKit(t, store) tk1.MustExec("use test") - d := dom.DDL() - hook := &callback.TestDDLCallback{Do: dom} var currJob *model.Job ctx := mock.NewContext() ctx.Store = store times := 0 - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if checkErr != nil { return } @@ -209,9 +205,7 @@ func TestAddExpressionIndexRollback(t *testing.T) { times++ } } - } - hook.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(hook) + }) tk.MustGetErrMsg("alter table t1 add index expr_idx ((pow(c1, c2)));", "[types:1690]DOUBLE value is out of range in 'pow(160, 160)'") require.NoError(t, checkErr) @@ -379,7 +373,7 @@ func TestAlterShardRowIDBits(t *testing.T) { } func TestDDLJobErrorCount(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, dbTestLease) + store := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists ddl_error_table, new_ddl_error_table") @@ -391,14 +385,9 @@ func TestDDLJobErrorCount(t *testing.T) { }() var jobID int64 - hook := &callback.TestDDLCallback{} - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { jobID = job.ID - } - hook.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - originHook := dom.DDL().GetHook() - dom.DDL().SetHook(hook) - defer dom.DDL().SetHook(originHook) + }) tk.MustGetErrCode("rename table ddl_error_table to new_ddl_error_table", errno.ErrEntryTooLarge) @@ -515,7 +504,7 @@ func TestShowCountWarningsOrErrors(t *testing.T) { // Close issue #24172. // See https://github.com/pingcap/tidb/issues/24172 func TestCancelJobWriteConflict(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, dbTestLease) + store := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) tk1 := testkit.NewTestKit(t, store) tk2 := testkit.NewTestKit(t, store) @@ -526,14 +515,9 @@ func TestCancelJobWriteConflict(t *testing.T) { var cancelErr error var rs []sqlexec.RecordSet - hook := &callback.TestDDLCallback{Do: dom} - d := dom.DDL() - originalHook := d.GetHook() - d.SetHook(hook) - defer d.SetHook(originalHook) // Test when cancelling cannot be retried and adding index succeeds. - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.Type == model.ActionAddIndex && job.State == model.JobStateRunning && job.SchemaState == model.StateWriteReorganization { require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/kv/mockCommitErrorInNewTxn", `return("no_retry")`)) defer func() { @@ -547,13 +531,13 @@ func TestCancelJobWriteConflict(t *testing.T) { stmt := fmt.Sprintf("admin cancel ddl jobs %d", job.ID) rs, cancelErr = tk2.Session().Execute(context.Background(), stmt) } - } + }) tk1.MustExec("alter table t add index (id)") require.EqualError(t, cancelErr, "mock failed admin command on ddl jobs") // Test when cancelling is retried only once and adding index is cancelled in the end. var jobID int64 - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.Type == model.ActionAddIndex && job.State == model.JobStateRunning && job.SchemaState == model.StateWriteReorganization { jobID = job.ID stmt := fmt.Sprintf("admin cancel ddl jobs %d", job.ID) @@ -563,7 +547,7 @@ func TestCancelJobWriteConflict(t *testing.T) { }() rs, cancelErr = tk2.Session().Execute(context.Background(), stmt) } - } + }) tk1.MustGetErrCode("alter table t add index (id)", errno.ErrCancelledDDLJob) require.NoError(t, cancelErr) result := tk2.ResultSetToResultWithCtx(context.Background(), rs[0], "cancel ddl job fails") @@ -629,7 +613,7 @@ func TestSnapshotVersion(t *testing.T) { dd := dom.DDL() ddl.DisableTiFlashPoll(dd) - require.Equal(t, dbTestLease, dd.GetLease()) + require.Equal(t, dbTestLease, dom.GetSchemaLease()) snapTS := oracle.GoTimeToTS(time.Now()) tk.MustExec("create database test2") @@ -689,7 +673,7 @@ func TestSchemaValidator(t *testing.T) { dd := dom.DDL() ddl.DisableTiFlashPoll(dd) - require.Equal(t, dbTestLease, dd.GetLease()) + require.Equal(t, dbTestLease, dom.GetSchemaLease()) tk.MustExec("create table test.t(a int)") @@ -939,15 +923,14 @@ func TestTiDBDownBeforeUpdateGlobalVersion(t *testing.T) { } func TestDDLBlockedCreateView(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("create table t(a int)") - hook := &callback.TestDDLCallback{Do: dom} first := true - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.SchemaState != model.StateWriteOnly { return } @@ -958,33 +941,30 @@ func TestDDLBlockedCreateView(t *testing.T) { tk2 := testkit.NewTestKit(t, store) tk2.MustExec("use test") tk2.MustExec("create view v as select * from t") - } - dom.DDL().SetHook(hook) + }) tk.MustExec("alter table t modify column a char(10)") } func TestHashPartitionAddColumn(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("create table t(a int, b int) partition by hash(a) partitions 4") - hook := &callback.TestDDLCallback{Do: dom} - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.SchemaState != model.StateWriteOnly { return } tk2 := testkit.NewTestKit(t, store) tk2.MustExec("use test") tk2.MustExec("delete from t") - } - dom.DDL().SetHook(hook) + }) tk.MustExec("alter table t add column c int") } func TestSetInvalidDefaultValueAfterModifyColumn(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -993,8 +973,7 @@ func TestSetInvalidDefaultValueAfterModifyColumn(t *testing.T) { var wg sync.WaitGroup var checkErr error one := false - hook := &callback.TestDDLCallback{Do: dom} - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.SchemaState != model.StateDeleteOnly { return } @@ -1009,15 +988,14 @@ func TestSetInvalidDefaultValueAfterModifyColumn(t *testing.T) { _, checkErr = tk2.Exec("alter table t alter column a set default 1") wg.Done() }() - } - dom.DDL().SetHook(hook) + }) tk.MustExec("alter table t modify column a text(100)") wg.Wait() require.EqualError(t, checkErr, "[ddl:1101]BLOB/TEXT/JSON column 'a' can't have a default value") } func TestMDLTruncateTable(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk2 := testkit.NewTestKit(t, store) @@ -1029,13 +1007,12 @@ func TestMDLTruncateTable(t *testing.T) { var wg sync.WaitGroup - hook := &callback.TestDDLCallback{Do: dom} wg.Add(2) var timetk2 time.Time var timetk3 time.Time one := false - f := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if one { return } @@ -1045,10 +1022,7 @@ func TestMDLTruncateTable(t *testing.T) { timetk3 = time.Now() wg.Done() }() - } - - hook.OnJobUpdatedExported.Store(&f) - dom.DDL().SetHook(hook) + }) go func() { tk2.MustExec("truncate table test.t") @@ -1065,7 +1039,7 @@ func TestMDLTruncateTable(t *testing.T) { } func TestTruncateTableAndSchemaDependence(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk2 := testkit.NewTestKit(t, store) @@ -1080,7 +1054,7 @@ func TestTruncateTableAndSchemaDependence(t *testing.T) { var timetk3 time.Time first := false - f := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if first || job.Type != model.ActionTruncateTable { return } @@ -1091,11 +1065,7 @@ func TestTruncateTableAndSchemaDependence(t *testing.T) { wg.Done() }() time.Sleep(3 * time.Second) - } - - hook := &callback.TestDDLCallback{Do: dom} - hook.OnJobUpdatedExported.Store(&f) - dom.DDL().SetHook(hook) + }) go func() { tk2.MustExec("truncate table test.t") @@ -1118,12 +1088,7 @@ func TestInsertIgnore(t *testing.T) { tk1 := testkit.NewTestKit(t, store) tk1.MustExec("use test") - d := dom.DDL() - originalCallback := d.GetHook() - defer d.SetHook(originalCallback) - callback := &callback.TestDDLCallback{} - - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { switch job.SchemaState { case model.StateDeleteOnly: _, err := tk1.Exec("INSERT INTO t VALUES (-18585,'aaa',1), (-18585,'0',1), (-18585,'1',1), (-18585,'duplicatevalue',1);") @@ -1136,9 +1101,7 @@ func TestInsertIgnore(t *testing.T) { return } } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(callback) + }) tk.MustExec("alter table t add unique index idx(b);") tk.MustExec("admin check table t;") diff --git a/pkg/ddl/ddl.go b/pkg/ddl/ddl.go index 67b27238456e6..f0c041e28291c 100644 --- a/pkg/ddl/ddl.go +++ b/pkg/ddl/ddl.go @@ -21,23 +21,21 @@ package ddl import ( "context" "fmt" - "runtime" "strconv" "strings" "sync" - "sync/atomic" "time" "github.com/google/uuid" "github.com/ngaut/pools" "github.com/pingcap/errors" "github.com/pingcap/failpoint" - "github.com/pingcap/kvproto/pkg/kvrpcpb" "github.com/pingcap/tidb/pkg/config" "github.com/pingcap/tidb/pkg/ddl/ingest" "github.com/pingcap/tidb/pkg/ddl/logutil" + "github.com/pingcap/tidb/pkg/ddl/schemaver" + "github.com/pingcap/tidb/pkg/ddl/serverstate" sess "github.com/pingcap/tidb/pkg/ddl/session" - "github.com/pingcap/tidb/pkg/ddl/syncer" "github.com/pingcap/tidb/pkg/ddl/systable" "github.com/pingcap/tidb/pkg/ddl/util" "github.com/pingcap/tidb/pkg/disttask/framework/proto" @@ -58,16 +56,13 @@ import ( "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/statistics/handle" statsutil "github.com/pingcap/tidb/pkg/statistics/handle/util" - "github.com/pingcap/tidb/pkg/table" pumpcli "github.com/pingcap/tidb/pkg/tidb-binlog/pump_client" tidbutil "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/dbterror" - "github.com/pingcap/tidb/pkg/util/dbterror/exeerrors" "github.com/pingcap/tidb/pkg/util/gcutil" "github.com/pingcap/tidb/pkg/util/generic" "github.com/tikv/client-go/v2/tikvrpc" clientv3 "go.etcd.io/etcd/client/v3" - "go.etcd.io/etcd/client/v3/concurrency" atomicutil "go.uber.org/atomic" "go.uber.org/zap" ) @@ -84,11 +79,10 @@ const ( shardRowIDBitsMax = 15 - batchAddingJobs = 10 + batchAddingJobs = 100 reorgWorkerCnt = 10 generalWorkerCnt = 10 - localWorkerCnt = 10 // checkFlagIndexInJobArgs is the recoverCheckFlag index used in RecoverTable/RecoverSchema job arg list. checkFlagIndexInJobArgs = 1 @@ -170,8 +164,6 @@ type DDL interface { // Start campaigns the owner and starts workers. // ctxPool is used for the worker's delRangeManager and creates sessions. Start(ctxPool *pools.ResourcePool) error - // GetLease returns current schema lease time. - GetLease() time.Duration // Stats returns the DDL statistics. Stats(vars *variable.SessionVars) (map[string]any, error) // GetScope gets the status variables scope. @@ -181,25 +173,28 @@ type DDL interface { // RegisterStatsHandle registers statistics handle and its corresponding event channel for ddl. RegisterStatsHandle(*handle.Handle) // SchemaSyncer gets the schema syncer. - SchemaSyncer() syncer.SchemaSyncer + SchemaSyncer() schemaver.Syncer // StateSyncer gets the cluster state syncer. - StateSyncer() syncer.StateSyncer + StateSyncer() serverstate.Syncer // OwnerManager gets the owner manager. OwnerManager() owner.Manager // GetID gets the ddl ID. GetID() string - // GetTableMaxHandle gets the max row ID of a normal table or a partition. - GetTableMaxHandle(ctx *JobContext, startTS uint64, tbl table.PhysicalTable) (kv.Handle, bool, error) // SetBinlogClient sets the binlog client for DDL worker. It's exported for testing. SetBinlogClient(*pumpcli.PumpsClient) - // GetHook gets the hook. It's exported for testing. - GetHook() Callback - // SetHook sets the hook. - SetHook(h Callback) // GetMinJobIDRefresher gets the MinJobIDRefresher, this api only works after Start. GetMinJobIDRefresher() *systable.MinJobIDRefresher } +type jobSubmitResult struct { + err error + jobID int64 + // merged indicates whether the job is merged into another job together with + // other jobs. we only merge multiple create table jobs into one job when fast + // create table is enabled. + merged bool +} + // JobWrapper is used to wrap a job and some other information. // exported for testing. type JobWrapper struct { @@ -208,9 +203,9 @@ type JobWrapper struct { // exported for test. IDAllocated bool // job submission is run in async, we use this channel to notify the caller. - // for local job we might combine multiple jobs into one, append the ErrChs to - // this slice. - ErrChs []chan error + // when fast create table enabled, we might combine multiple jobs into one, and + // append the channel to this slice. + ResultCh []chan jobSubmitResult cacheErr error } @@ -220,14 +215,19 @@ func NewJobWrapper(job *model.Job, idAllocated bool) *JobWrapper { return &JobWrapper{ Job: job, IDAllocated: idAllocated, - ErrChs: []chan error{make(chan error)}, + ResultCh: []chan jobSubmitResult{make(chan jobSubmitResult)}, } } -// NotifyError notifies the error to all error channels. -func (t *JobWrapper) NotifyError(err error) { - for _, errCh := range t.ErrChs { - errCh <- err +// NotifyResult notifies the job submit result. +func (t *JobWrapper) NotifyResult(err error) { + merged := len(t.ResultCh) > 1 + for _, resultCh := range t.ResultCh { + resultCh <- jobSubmitResult{ + err: err, + jobID: t.ID, + merged: merged, + } } } @@ -236,72 +236,67 @@ type ddl struct { m sync.RWMutex wg tidbutil.WaitGroupWrapper // It's only used to deal with data race in restart_test. limitJobCh chan *JobWrapper - // limitJobChV2 is used to limit the number of jobs being executed in local worker. - limitJobChV2 chan *JobWrapper *ddlCtx sessPool *sess.Pool delRangeMgr delRangeManager enableTiFlashPoll *atomicutil.Bool - // used in the concurrency ddl. - localWorkerPool *workerPool // get notification if any DDL job submitted or finished. ddlJobNotifyCh chan struct{} sysTblMgr systable.Manager minJobIDRefresher *systable.MinJobIDRefresher - // localJobCh is used to delivery job in local TiDB nodes. - localJobCh chan *JobWrapper - // globalIDLocal locks global id to reduce write conflict. + // globalIDLock locks global id to reduce write conflict. globalIDLock sync.Mutex executor *executor } -// waitSchemaSyncedController is to control whether to waitSchemaSynced or not. -type waitSchemaSyncedController struct { - mu sync.RWMutex - job map[int64]struct{} +// unSyncedJobTracker is to track whether changes of a DDL job are synced to all +// TiDB instances. +type unSyncedJobTracker struct { + mu sync.RWMutex + unSyncedJobs map[int64]struct{} // Use to check if the DDL job is the first run on this owner. onceMap map[int64]struct{} } -func newWaitSchemaSyncedController() *waitSchemaSyncedController { - return &waitSchemaSyncedController{ - job: make(map[int64]struct{}, jobRecordCapacity), - onceMap: make(map[int64]struct{}, jobOnceCapacity), +func newUnSyncedJobTracker() *unSyncedJobTracker { + return &unSyncedJobTracker{ + unSyncedJobs: make(map[int64]struct{}, jobRecordCapacity), + onceMap: make(map[int64]struct{}, jobOnceCapacity), } } -func (w *waitSchemaSyncedController) registerSync(job *model.Job) { +func (w *unSyncedJobTracker) addUnSynced(jobID int64) { w.mu.Lock() defer w.mu.Unlock() - w.job[job.ID] = struct{}{} + w.unSyncedJobs[jobID] = struct{}{} } -func (w *waitSchemaSyncedController) isSynced(job *model.Job) bool { +func (w *unSyncedJobTracker) isUnSynced(jobID int64) bool { w.mu.RLock() defer w.mu.RUnlock() - _, ok := w.job[job.ID] - return !ok + _, ok := w.unSyncedJobs[jobID] + return ok } -func (w *waitSchemaSyncedController) synced(job *model.Job) { +func (w *unSyncedJobTracker) removeUnSynced(jobID int64) { w.mu.Lock() defer w.mu.Unlock() - delete(w.job, job.ID) + delete(w.unSyncedJobs, jobID) } // maybeAlreadyRunOnce returns true means that the job may be the first run on this owner. // Returns false means that the job must not be the first run on this owner. -func (w *waitSchemaSyncedController) maybeAlreadyRunOnce(id int64) bool { +func (w *unSyncedJobTracker) maybeAlreadyRunOnce(id int64) bool { w.mu.Lock() defer w.mu.Unlock() _, ok := w.onceMap[id] return ok } -func (w *waitSchemaSyncedController) setAlreadyRunOnce(id int64) { +func (w *unSyncedJobTracker) setAlreadyRunOnce(id int64) { w.mu.Lock() defer w.mu.Unlock() if len(w.onceMap) > jobOnceCapacity { @@ -311,21 +306,15 @@ func (w *waitSchemaSyncedController) setAlreadyRunOnce(id int64) { w.onceMap[id] = struct{}{} } -func (w *waitSchemaSyncedController) clearOnceMap() { - w.mu.Lock() - defer w.mu.Unlock() - w.onceMap = make(map[int64]struct{}, jobOnceCapacity) -} - // ddlCtx is the context when we use worker to handle DDL jobs. type ddlCtx struct { - ctx context.Context - cancel context.CancelFunc - uuid string - store kv.Storage - ownerManager owner.Manager - schemaSyncer syncer.SchemaSyncer - stateSyncer syncer.StateSyncer + ctx context.Context + cancel context.CancelFunc + uuid string + store kv.Storage + ownerManager owner.Manager + schemaVerSyncer schemaver.Syncer + serverStateSyncer serverstate.Syncer // ddlJobDoneChMap is used to notify the session that the DDL job is finished. // jobID -> chan struct{} ddlJobDoneChMap generic.SyncMap[int64, chan struct{}] @@ -339,63 +328,49 @@ type ddlCtx struct { autoidCli *autoid.ClientDiscover schemaLoader SchemaLoader - *waitSchemaSyncedController - *schemaVersionManager - // reorgCtx is used for reorganization. reorgCtx reorgContexts jobCtx struct { sync.RWMutex // jobCtxMap maps job ID to job's ctx. - jobCtxMap map[int64]*JobContext + jobCtxMap map[int64]*ReorgContext } - - // hook may be modified. - mu hookStruct -} - -// TODO remove it after we remove hook. -type hookStruct struct { - sync.RWMutex - // see newDefaultCallBack for its value in normal flow. - hook Callback } -// the schema synchronization mechanism now requires strict incremental schema versions. -// Therefore, we require a distributed lock to ensure the sequential commit of schema diffs from different TiDB nodes. -type etcdLockInfo struct { - se *concurrency.Session - mu *concurrency.Mutex +// SchemaLoader is used to reload info schema, the only impl is domain currently. +type SchemaLoader interface { + Reload() error } -// schemaVersionManager is used to manage the schema version. To prevent the conflicts on this key between different DDL job, -// we use another transaction to update the schema version, so that we need to lock the schema version and unlock it until the job is committed. -// for version2, we use etcd lock to lock the schema version between TiDB nodes now. +// schemaVersionManager is used to manage the schema version. info schema cache +// only load differences between its version and current version, so we must +// make sure increment version & set differ run in a single transaction. we are +// using memory lock to make sure this right now, as we are using optimistic +// transaction here, and there will be many write conflict if we allow those +// transactions run in parallel. we can change this to lock TiKV key inside the +// transaction later. type schemaVersionManager struct { schemaVersionMu sync.Mutex // lockOwner stores the job ID that is holding the lock. lockOwner atomicutil.Int64 - - ctx context.Context - etcdClient *clientv3.Client - lockInfoMaps map[int64]*etcdLockInfo + store kv.Storage } -func newSchemaVersionManager(ctx context.Context, etcdClient *clientv3.Client) *schemaVersionManager { +func newSchemaVersionManager(store kv.Storage) *schemaVersionManager { return &schemaVersionManager{ - ctx: ctx, - etcdClient: etcdClient, - lockInfoMaps: make(map[int64]*etcdLockInfo), + store: store, } } -func (sv *schemaVersionManager) setSchemaVersion(job *model.Job, store kv.Storage) (schemaVersion int64, err error) { +func (sv *schemaVersionManager) setSchemaVersion(job *model.Job) (schemaVersion int64, err error) { err = sv.lockSchemaVersion(job.ID) if err != nil { return schemaVersion, errors.Trace(err) } - err = kv.RunInNewTxn(kv.WithInternalSourceType(context.Background(), kv.InternalTxnDDL), store, true, func(_ context.Context, txn kv.Transaction) error { + // TODO we can merge this txn into job transaction to avoid schema version + // without differ. + err = kv.RunInNewTxn(kv.WithInternalSourceType(context.Background(), kv.InternalTxnDDL), sv.store, true, func(_ context.Context, txn kv.Transaction) error { var err error m := meta.NewMeta(txn) schemaVersion, err = m.GenSchemaVersion() @@ -412,17 +387,6 @@ func (sv *schemaVersionManager) lockSchemaVersion(jobID int64) error { if ownerID != jobID { sv.schemaVersionMu.Lock() sv.lockOwner.Store(jobID) - if sv.etcdClient != nil && variable.EnableFastCreateTable.Load() { - se, err := concurrency.NewSession(sv.etcdClient) - if err != nil { - return errors.Trace(err) - } - mu := concurrency.NewMutex(se, ddlSchemaVersionKeyLock) - if err := mu.Lock(sv.ctx); err != nil { - return errors.Trace(err) - } - sv.lockInfoMaps[jobID] = &etcdLockInfo{se: se, mu: mu} - } } return nil } @@ -431,24 +395,6 @@ func (sv *schemaVersionManager) lockSchemaVersion(jobID int64) error { func (sv *schemaVersionManager) unlockSchemaVersion(jobID int64) { ownerID := sv.lockOwner.Load() if ownerID == jobID { - if lockInfo, ok := sv.lockInfoMaps[jobID]; ok { - delete(sv.lockInfoMaps, jobID) - err := lockInfo.mu.Unlock(sv.ctx) - outer: - for err != nil { - logutil.DDLLogger().Error("unlock schema version", zap.Error(err)) - select { - case <-sv.ctx.Done(): - break outer - case <-time.After(time.Second): - } - // retry unlock - err = lockInfo.mu.Unlock(sv.ctx) - } - if err := lockInfo.se.Close(); err != nil { - logutil.DDLLogger().Error("close etcd session", zap.Error(err)) - } - } sv.lockOwner.Store(0) sv.schemaVersionMu.Unlock() } @@ -468,7 +414,7 @@ func (dc *ddlCtx) setDDLLabelForTopSQL(jobID int64, jobQuery string) { defer dc.jobCtx.Unlock() ctx, exists := dc.jobCtx.jobCtxMap[jobID] if !exists { - ctx = NewJobContext() + ctx = NewReorgContext() dc.jobCtx.jobCtxMap[jobID] = ctx } ctx.setDDLLabelForTopSQL(jobQuery) @@ -479,7 +425,7 @@ func (dc *ddlCtx) setDDLSourceForDiagnosis(jobID int64, jobType model.ActionType defer dc.jobCtx.Unlock() ctx, exists := dc.jobCtx.jobCtxMap[jobID] if !exists { - ctx = NewJobContext() + ctx = NewReorgContext() dc.jobCtx.jobCtxMap[jobID] = ctx } ctx.setDDLLabelForDiagnosis(jobType) @@ -501,14 +447,14 @@ func (dc *ddlCtx) removeJobCtx(job *model.Job) { delete(dc.jobCtx.jobCtxMap, job.ID) } -func (dc *ddlCtx) jobContext(jobID int64, reorgMeta *model.DDLReorgMeta) *JobContext { +func (dc *ddlCtx) jobContext(jobID int64, reorgMeta *model.DDLReorgMeta) *ReorgContext { dc.jobCtx.RLock() defer dc.jobCtx.RUnlock() - var ctx *JobContext + var ctx *ReorgContext if jobContext, exists := dc.jobCtx.jobCtxMap[jobID]; exists { ctx = jobContext } else { - ctx = NewJobContext() + ctx = NewReorgContext() } if reorgMeta != nil && len(ctx.resourceGroupName) == 0 { ctx.resourceGroupName = reorgMeta.ResourceGroupName @@ -520,6 +466,19 @@ type reorgContexts struct { sync.RWMutex // reorgCtxMap maps job ID to reorg context. reorgCtxMap map[int64]*reorgCtx + beOwnerTS int64 +} + +func (r *reorgContexts) getOwnerTS() int64 { + r.RLock() + defer r.RUnlock() + return r.beOwnerTS +} + +func (r *reorgContexts) setOwnerTS(ts int64) { + r.Lock() + r.beOwnerTS = ts + r.Unlock() } func (dc *ddlCtx) getReorgCtx(jobID int64) *reorgCtx { @@ -537,7 +496,7 @@ func (dc *ddlCtx) newReorgCtx(jobID int64, rowCount int64) *reorgCtx { return existedRC } rc := &reorgCtx{} - rc.doneCh = make(chan error, 1) + rc.doneCh = make(chan reorgFnResult, 1) // initial reorgCtx rc.setRowCount(rowCount) rc.mu.warnings = make(map[errors.ErrorID]*terror.Error) @@ -571,24 +530,11 @@ func (dc *ddlCtx) notifyReorgWorkerJobStateChange(job *model.Job) { rc.notifyJobState(job.State) } -func (dc *ddlCtx) initJobDoneCh(jobID int64) { - dc.ddlJobDoneChMap.Store(jobID, make(chan struct{}, 1)) -} - -func (e *executor) getJobDoneCh(jobID int64) (chan struct{}, bool) { - return e.ddlJobDoneChMap.Load(jobID) -} - -func (e *executor) delJobDoneCh(jobID int64) { - e.ddlJobDoneChMap.Delete(jobID) -} - func (dc *ddlCtx) notifyJobDone(jobID int64) { - if ch, ok := dc.ddlJobDoneChMap.Load(jobID); ok { - select { - case ch <- struct{}{}: - default: - } + if ch, ok := dc.ddlJobDoneChMap.Delete(jobID); ok { + // broadcast done event as we might merge multiple jobs into one when fast + // create table is enabled. + close(ch) } } @@ -612,6 +558,8 @@ func (d *ddl) IsTiFlashPollEnabled() bool { } // RegisterStatsHandle registers statistics handle and its corresponding even channel for ddl. +// TODO this is called after ddl started, will cause panic if related DDL are executed +// in between. func (d *ddl) RegisterStatsHandle(h *handle.Handle) { d.ddlCtx.statsHandle = h d.executor.statsHandle = h @@ -620,19 +568,12 @@ func (d *ddl) RegisterStatsHandle(h *handle.Handle) { // asyncNotifyEvent will notify the ddl event to outside world, say statistic handle. When the channel is full, we may // give up notify and log it. -func asyncNotifyEvent(d *ddlCtx, e *statsutil.DDLEvent) { - if d.ddlEventCh != nil { - if d.lease == 0 { - // If lease is 0, it's always used in test. - select { - case d.ddlEventCh <- e: - default: - } - return - } +func asyncNotifyEvent(jobCtx *jobContext, e *statsutil.DDLEvent) { + ch := jobCtx.oldDDLCtx.ddlEventCh + if ch != nil { for i := 0; i < 10; i++ { select { - case d.ddlEventCh <- e: + case ch <- e: return default: time.Sleep(time.Microsecond * 10) @@ -649,28 +590,26 @@ func NewDDL(ctx context.Context, options ...Option) (DDL, Executor) { } func newDDL(ctx context.Context, options ...Option) (*ddl, *executor) { - opt := &Options{ - Hook: &BaseCallback{}, - } + opt := &Options{} for _, o := range options { o(opt) } id := uuid.New().String() var manager owner.Manager - var schemaSyncer syncer.SchemaSyncer - var stateSyncer syncer.StateSyncer + var schemaVerSyncer schemaver.Syncer + var serverStateSyncer serverstate.Syncer var deadLockCkr util.DeadTableLockChecker if etcdCli := opt.EtcdCli; etcdCli == nil { // The etcdCli is nil if the store is localstore which is only used for testing. - // So we use mockOwnerManager and MockSchemaSyncer. + // So we use mockOwnerManager and memSyncer. manager = owner.NewMockManager(ctx, id, opt.Store, DDLOwnerKey) - schemaSyncer = NewMockSchemaSyncer() - stateSyncer = NewMockStateSyncer() + schemaVerSyncer = schemaver.NewMemSyncer() + serverStateSyncer = serverstate.NewMemSyncer() } else { manager = owner.NewOwnerManager(ctx, etcdCli, ddlPrompt, id, DDLOwnerKey) - schemaSyncer = syncer.NewSchemaSyncer(etcdCli, id) - stateSyncer = syncer.NewStateSyncer(etcdCli, util.ServerGlobalState) + schemaVerSyncer = schemaver.NewEtcdSyncer(etcdCli, id) + serverStateSyncer = serverstate.NewEtcdSyncer(etcdCli, util.ServerGlobalState) deadLockCkr = util.NewDeadTableLockChecker(etcdCli) } @@ -684,35 +623,30 @@ func newDDL(ctx context.Context, options ...Option) (*ddl, *executor) { } ddlCtx := &ddlCtx{ - uuid: id, - store: opt.Store, - lease: opt.Lease, - ddlJobDoneChMap: generic.NewSyncMap[int64, chan struct{}](10), - ownerManager: manager, - schemaSyncer: schemaSyncer, - stateSyncer: stateSyncer, - binlogCli: binloginfo.GetPumpsClient(), - infoCache: opt.InfoCache, - tableLockCkr: deadLockCkr, - etcdCli: opt.EtcdCli, - autoidCli: opt.AutoIDClient, - schemaLoader: opt.SchemaLoader, - waitSchemaSyncedController: newWaitSchemaSyncedController(), + uuid: id, + store: opt.Store, + lease: opt.Lease, + ddlJobDoneChMap: generic.NewSyncMap[int64, chan struct{}](10), + ownerManager: manager, + schemaVerSyncer: schemaVerSyncer, + serverStateSyncer: serverStateSyncer, + binlogCli: binloginfo.GetPumpsClient(), + infoCache: opt.InfoCache, + tableLockCkr: deadLockCkr, + etcdCli: opt.EtcdCli, + autoidCli: opt.AutoIDClient, + schemaLoader: opt.SchemaLoader, } ddlCtx.reorgCtx.reorgCtxMap = make(map[int64]*reorgCtx) - ddlCtx.jobCtx.jobCtxMap = make(map[int64]*JobContext) - ddlCtx.mu.hook = opt.Hook + ddlCtx.jobCtx.jobCtxMap = make(map[int64]*ReorgContext) ctx = kv.WithInternalSourceType(ctx, kv.InternalTxnDDL) ddlCtx.ctx, ddlCtx.cancel = context.WithCancel(ctx) - ddlCtx.schemaVersionManager = newSchemaVersionManager(ddlCtx.ctx, opt.EtcdCli) d := &ddl{ ddlCtx: ddlCtx, limitJobCh: make(chan *JobWrapper, batchAddingJobs), - limitJobChV2: make(chan *JobWrapper, batchAddingJobs), enableTiFlashPoll: atomicutil.NewBool(true), ddlJobNotifyCh: make(chan struct{}, 100), - localJobCh: make(chan *JobWrapper, 1), } taskexecutor.RegisterTaskType(proto.Backfill, @@ -730,7 +664,6 @@ func newDDL(ctx context.Context, options ...Option) (*ddl, *executor) { variable.EnableDDL = d.EnableDDL variable.DisableDDL = d.DisableDDL variable.SwitchMDL = d.SwitchMDL - variable.SwitchFastCreateTable = d.SwitchFastCreateTable e := &executor{ ctx: d.ctx, @@ -743,10 +676,8 @@ func newDDL(ctx context.Context, options ...Option) (*ddl, *executor) { schemaLoader: d.schemaLoader, lease: d.lease, ownerManager: d.ownerManager, - limitJobChV2: d.limitJobChV2, ddlJobDoneChMap: &d.ddlJobDoneChMap, ddlJobNotifyCh: d.ddlJobNotifyCh, - mu: &d.mu, globalIDLock: &d.globalIDLock, } d.executor = e @@ -777,33 +708,6 @@ func (d *ddl) newDeleteRangeManager(mock bool) delRangeManager { return delRangeMgr } -func (d *ddl) prepareLocalModeWorkers() { - var idAllocator atomic.Uint64 - workerFactory := func(tp workerType) func() (pools.Resource, error) { - return func() (pools.Resource, error) { - wk := newWorker(d.ctx, tp, d.sessPool, d.delRangeMgr, d.ddlCtx) - sessForJob, err := d.sessPool.Get() - if err != nil { - return nil, err - } - sessForJob.GetSessionVars().SetDiskFullOpt(kvrpcpb.DiskFullOpt_AllowedOnAlmostFull) - wk.sess = sess.NewSession(sessForJob) - wk.seqAllocator = &idAllocator - metrics.DDLCounter.WithLabelValues(fmt.Sprintf("%s_%s", metrics.CreateDDL, wk.String())).Inc() - return wk, nil - } - } - // local worker count at least 2 at most 10. - localCnt := min(max(runtime.GOMAXPROCS(0)/4, 2), localWorkerCnt) - d.localWorkerPool = newDDLWorkerPool(pools.NewResourcePool(workerFactory(localWorker), localCnt, localCnt, 0), jobTypeLocal) - failpoint.Inject("NoDDLDispatchLoop", func(val failpoint.Value) { - if val.(bool) { - failpoint.Return() - } - }) - d.wg.Run(d.startLocalWorkerLoop) -} - // Start implements DDL.Start interface. func (d *ddl) Start(ctxPool *pools.ResourcePool) error { logutil.DDLLogger().Info("start DDL", zap.String("ID", d.uuid), zap.Bool("runWorker", config.GetGlobalConfig().Instance.TiDBEnableDDL.Load())) @@ -813,10 +717,7 @@ func (d *ddl) Start(ctxPool *pools.ResourcePool) error { d.sysTblMgr = systable.NewManager(d.sessPool) d.minJobIDRefresher = systable.NewMinJobIDRefresher(d.sysTblMgr) d.wg.Run(func() { - d.limitDDLJobs(d.limitJobCh, d.addBatchDDLJobsV1) - }) - d.wg.Run(func() { - d.limitDDLJobs(d.limitJobChV2, d.addBatchLocalDDLJobs) + d.limitDDLJobs() }) d.wg.Run(func() { d.minJobIDRefresher.Start(d.ctx) @@ -824,7 +725,7 @@ func (d *ddl) Start(ctxPool *pools.ResourcePool) error { d.delRangeMgr = d.newDeleteRangeManager(ctxPool == nil) - if err := d.stateSyncer.Init(d.ctx); err != nil { + if err := d.serverStateSyncer.Init(d.ctx); err != nil { logutil.DDLLogger().Warn("start DDL init state syncer failed", zap.Error(err)) return errors.Trace(err) } @@ -832,8 +733,6 @@ func (d *ddl) Start(ctxPool *pools.ResourcePool) error { ddl: d, }) - d.prepareLocalModeWorkers() - if config.TableLockEnabled() { d.wg.Add(1) go d.startCleanDeadTableLock() @@ -927,10 +826,7 @@ func (d *ddl) close() { d.cancel() d.wg.Wait() d.ownerManager.Cancel() - d.schemaSyncer.Close() - if d.localWorkerPool != nil { - d.localWorkerPool.close() - } + d.schemaVerSyncer.Close() // d.delRangeMgr using sessions from d.sessPool. // Put it before d.sessPool.close to reduce the time spent by d.sessPool.close. @@ -945,49 +841,14 @@ func (d *ddl) close() { logutil.DDLLogger().Info("DDL closed", zap.String("ID", d.uuid), zap.Duration("take time", time.Since(startTime))) } -// GetLease implements DDL.GetLease interface. -func (d *ddl) GetLease() time.Duration { - lease := d.lease - return lease -} - -func (e *executor) genGlobalIDs(count int) ([]int64, error) { - var ret []int64 - ctx := kv.WithInternalSourceType(context.Background(), kv.InternalTxnDDL) - // lock to reduce conflict - e.globalIDLock.Lock() - defer e.globalIDLock.Unlock() - err := kv.RunInNewTxn(ctx, e.store, true, func(_ context.Context, txn kv.Transaction) error { - m := meta.NewMeta(txn) - var err error - ret, err = m.GenGlobalIDs(count) - return err - }) - - return ret, err -} - -func (e *executor) genPlacementPolicyID() (int64, error) { - var ret int64 - ctx := kv.WithInternalSourceType(context.Background(), kv.InternalTxnDDL) - err := kv.RunInNewTxn(ctx, e.store, true, func(_ context.Context, txn kv.Transaction) error { - m := meta.NewMeta(txn) - var err error - ret, err = m.GenPlacementPolicyID() - return err - }) - - return ret, err -} - // SchemaSyncer implements DDL.SchemaSyncer interface. -func (d *ddl) SchemaSyncer() syncer.SchemaSyncer { - return d.schemaSyncer +func (d *ddl) SchemaSyncer() schemaver.Syncer { + return d.schemaVerSyncer } // StateSyncer implements DDL.StateSyncer interface. -func (d *ddl) StateSyncer() syncer.StateSyncer { - return d.stateSyncer +func (d *ddl) StateSyncer() serverstate.Syncer { + return d.serverStateSyncer } // OwnerManager implements DDL.OwnerManager interface. @@ -1000,307 +861,11 @@ func (d *ddl) GetID() string { return d.uuid } -var ( - fastDDLIntervalPolicy = []time.Duration{ - 500 * time.Millisecond, - } - normalDDLIntervalPolicy = []time.Duration{ - 500 * time.Millisecond, - 500 * time.Millisecond, - 1 * time.Second, - } - slowDDLIntervalPolicy = []time.Duration{ - 500 * time.Millisecond, - 500 * time.Millisecond, - 1 * time.Second, - 1 * time.Second, - 3 * time.Second, - } -) - -func getIntervalFromPolicy(policy []time.Duration, i int) (time.Duration, bool) { - plen := len(policy) - if i < plen { - return policy[i], true - } - return policy[plen-1], false -} - -func getJobCheckInterval(job *model.Job, i int) (time.Duration, bool) { - switch job.Type { - case model.ActionAddIndex, model.ActionAddPrimaryKey, model.ActionModifyColumn, - model.ActionReorganizePartition, - model.ActionRemovePartitioning, - model.ActionAlterTablePartitioning: - return getIntervalFromPolicy(slowDDLIntervalPolicy, i) - case model.ActionCreateTable, model.ActionCreateSchema: - return getIntervalFromPolicy(fastDDLIntervalPolicy, i) - default: - return getIntervalFromPolicy(normalDDLIntervalPolicy, i) - } -} - -func (e *executor) notifyNewJobSubmitted(ch chan struct{}, etcdPath string, jobID int64, jobType string) { - // If the workers don't run, we needn't notify workers. - // TODO: It does not affect informing the backfill worker. - if !config.GetGlobalConfig().Instance.TiDBEnableDDL.Load() { - return - } - if e.ownerManager.IsOwner() { - asyncNotify(ch) - } else { - e.notifyNewJobByEtcd(etcdPath, jobID, jobType) - } -} - -func updateTickerInterval(ticker *time.Ticker, lease time.Duration, job *model.Job, i int) *time.Ticker { - interval, changed := getJobCheckInterval(job, i) - if !changed { - return ticker - } - // For now we should stop old ticker and create a new ticker - ticker.Stop() - return time.NewTicker(chooseLeaseTime(lease, interval)) -} - -func recordLastDDLInfo(ctx sessionctx.Context, job *model.Job) { - if job == nil { - return - } - ctx.GetSessionVars().LastDDLInfo.Query = job.Query - ctx.GetSessionVars().LastDDLInfo.SeqNum = job.SeqNum -} - -func setDDLJobQuery(ctx sessionctx.Context, job *model.Job) { - switch job.Type { - case model.ActionUpdateTiFlashReplicaStatus, model.ActionUnlockTable: - job.Query = "" - default: - job.Query, _ = ctx.Value(sessionctx.QueryString).(string) - } -} - -func setDDLJobMode(job *model.Job) { - if !variable.EnableFastCreateTable.Load() { - job.LocalMode = false - return - } - - switch job.Type { - // currently, v2 only support CreateTable without foreign keys. - case model.ActionCreateTable: - tbInfo, ok := job.Args[0].(*model.TableInfo) - if ok && len(tbInfo.ForeignKeys) == 0 { - job.LocalMode = true - return - } - case model.ActionCreateSchema: - job.LocalMode = true - return - default: - } - job.LocalMode = false -} - -func (e *executor) deliverJobTask(task *JobWrapper) { - if task.LocalMode { - e.limitJobChV2 <- task - } else { - e.limitJobCh <- task - } -} - -// DoDDLJob will return -// - nil: found in history DDL job and no job error -// - context.Cancel: job has been sent to worker, but not found in history DDL job before cancel -// - other: found in history DDL job and return that job error -func (e *executor) DoDDLJob(ctx sessionctx.Context, job *model.Job) error { - return e.DoDDLJobWrapper(ctx, NewJobWrapper(job, false)) -} - -func (e *executor) DoDDLJobWrapper(ctx sessionctx.Context, jobW *JobWrapper) error { - job := jobW.Job - job.TraceInfo = &model.TraceInfo{ - ConnectionID: ctx.GetSessionVars().ConnectionID, - SessionAlias: ctx.GetSessionVars().SessionAlias, - } - if mci := ctx.GetSessionVars().StmtCtx.MultiSchemaInfo; mci != nil { - // In multiple schema change, we don't run the job. - // Instead, we merge all the jobs into one pending job. - return appendToSubJobs(mci, job) - } - // Get a global job ID and put the DDL job in the queue. - setDDLJobQuery(ctx, job) - setDDLJobMode(job) - e.deliverJobTask(jobW) - - failpoint.Inject("mockParallelSameDDLJobTwice", func(val failpoint.Value) { - if val.(bool) { - <-jobW.ErrChs[0] - // The same job will be put to the DDL queue twice. - job = job.Clone() - newJobW := NewJobWrapper(job, jobW.IDAllocated) - e.deliverJobTask(newJobW) - // The second job result is used for test. - jobW = newJobW - } - }) - - // worker should restart to continue handling tasks in limitJobCh, and send back through jobW.err - err := <-jobW.ErrChs[0] - // job.ID must be allocated after previous channel receive returns nil. - defer e.delJobDoneCh(job.ID) - if err != nil { - // The transaction of enqueuing job is failed. - return errors.Trace(err) - } - failpoint.InjectCall("waitJobSubmitted") - - sessVars := ctx.GetSessionVars() - sessVars.StmtCtx.IsDDLJobInQueue = true - - // Notice worker that we push a new job and wait the job done. - e.notifyNewJobSubmitted(e.ddlJobNotifyCh, addingDDLJobNotifyKey, job.ID, job.Type.String()) - logutil.DDLLogger().Info("start DDL job", zap.Stringer("job", job), zap.String("query", job.Query)) - - // for local mode job, we add the history job directly now, so no need to check it. - // fast-create doesn't wait schema version synced, we must reload info-schema - // here to make sure later statements can see the created table/database. - if job.LocalMode { - return e.schemaLoader.Reload() - } - - var historyJob *model.Job - jobID := job.ID - - // Attach the context of the jobId to the calling session so that - // KILL can cancel this DDL job. - ctx.GetSessionVars().StmtCtx.DDLJobID = jobID - - // For a job from start to end, the state of it will be none -> delete only -> write only -> reorganization -> public - // For every state changes, we will wait as lease 2 * lease time, so here the ticker check is 10 * lease. - // But we use etcd to speed up, normally it takes less than 0.5s now, so we use 0.5s or 1s or 3s as the max value. - initInterval, _ := getJobCheckInterval(job, 0) - ticker := time.NewTicker(chooseLeaseTime(10*e.lease, initInterval)) - startTime := time.Now() - metrics.JobsGauge.WithLabelValues(job.Type.String()).Inc() - defer func() { - ticker.Stop() - metrics.JobsGauge.WithLabelValues(job.Type.String()).Dec() - metrics.HandleJobHistogram.WithLabelValues(job.Type.String(), metrics.RetLabel(err)).Observe(time.Since(startTime).Seconds()) - recordLastDDLInfo(ctx, historyJob) - }() - i := 0 - notifyCh, _ := e.getJobDoneCh(job.ID) - for { - failpoint.InjectCall("storeCloseInLoop") - select { - case <-notifyCh: - case <-ticker.C: - i++ - ticker = updateTickerInterval(ticker, 10*e.lease, job, i) - case <-e.ctx.Done(): - logutil.DDLLogger().Info("DoDDLJob will quit because context done") - return context.Canceled - } - - // If the connection being killed, we need to CANCEL the DDL job. - if sessVars.SQLKiller.HandleSignal() == exeerrors.ErrQueryInterrupted { - if atomic.LoadInt32(&sessVars.ConnectionStatus) == variable.ConnStatusShutdown { - logutil.DDLLogger().Info("DoDDLJob will quit because context done") - return context.Canceled - } - if sessVars.StmtCtx.DDLJobID != 0 { - se, err := e.sessPool.Get() - if err != nil { - logutil.DDLLogger().Error("get session failed, check again", zap.Error(err)) - continue - } - sessVars.StmtCtx.DDLJobID = 0 // Avoid repeat. - errs, err := CancelJobsBySystem(se, []int64{jobID}) - e.sessPool.Put(se) - if len(errs) > 0 { - logutil.DDLLogger().Warn("error canceling DDL job", zap.Error(errs[0])) - } - if err != nil { - logutil.DDLLogger().Warn("Kill command could not cancel DDL job", zap.Error(err)) - continue - } - } - } - - se, err := e.sessPool.Get() - if err != nil { - logutil.DDLLogger().Error("get session failed, check again", zap.Error(err)) - continue - } - historyJob, err = GetHistoryJobByID(se, jobID) - e.sessPool.Put(se) - if err != nil { - logutil.DDLLogger().Error("get history DDL job failed, check again", zap.Error(err)) - continue - } - if historyJob == nil { - logutil.DDLLogger().Debug("DDL job is not in history, maybe not run", zap.Int64("jobID", jobID)) - continue - } - - e.checkHistoryJobInTest(ctx, historyJob) - - // If a job is a history job, the state must be JobStateSynced or JobStateRollbackDone or JobStateCancelled. - if historyJob.IsSynced() { - // Judge whether there are some warnings when executing DDL under the certain SQL mode. - if historyJob.ReorgMeta != nil && len(historyJob.ReorgMeta.Warnings) != 0 { - if len(historyJob.ReorgMeta.Warnings) != len(historyJob.ReorgMeta.WarningsCount) { - logutil.DDLLogger().Info("DDL warnings doesn't match the warnings count", zap.Int64("jobID", jobID)) - } else { - for key, warning := range historyJob.ReorgMeta.Warnings { - keyCount := historyJob.ReorgMeta.WarningsCount[key] - if keyCount == 1 { - ctx.GetSessionVars().StmtCtx.AppendWarning(warning) - } else { - newMsg := fmt.Sprintf("%d warnings with this error code, first warning: "+warning.GetMsg(), keyCount) - newWarning := dbterror.ClassTypes.Synthesize(terror.ErrCode(warning.Code()), newMsg) - ctx.GetSessionVars().StmtCtx.AppendWarning(newWarning) - } - } - } - } - appendMultiChangeWarningsToOwnerCtx(ctx, historyJob) - - logutil.DDLLogger().Info("DDL job is finished", zap.Int64("jobID", jobID)) - return nil - } - - if historyJob.Error != nil { - logutil.DDLLogger().Info("DDL job is failed", zap.Int64("jobID", jobID)) - return errors.Trace(historyJob.Error) - } - panic("When the state is JobStateRollbackDone or JobStateCancelled, historyJob.Error should never be nil") - } -} - // SetBinlogClient implements DDL.SetBinlogClient interface. func (d *ddl) SetBinlogClient(binlogCli *pumpcli.PumpsClient) { d.binlogCli = binlogCli } -// GetHook implements DDL.GetHook interface. -func (d *ddl) GetHook() Callback { - d.mu.Lock() - defer d.mu.Unlock() - - return d.mu.hook -} - -// SetHook set the customized hook. -func (d *ddl) SetHook(h Callback) { - d.mu.Lock() - defer d.mu.Unlock() - - d.mu.hook = h -} - func (d *ddl) GetMinJobIDRefresher() *systable.MinJobIDRefresher { return d.minJobIDRefresher } @@ -1320,13 +885,13 @@ func (d *ddl) startCleanDeadTableLock() { if !d.ownerManager.IsOwner() { continue } - deadLockTables, err := d.tableLockCkr.GetDeadLockedTables(d.ctx, d.infoCache.GetLatest().AllSchemas()) + deadLockTables, err := d.tableLockCkr.GetDeadLockedTables(d.ctx, d.infoCache.GetLatest()) if err != nil { logutil.DDLLogger().Info("get dead table lock failed.", zap.Error(err)) continue } for se, tables := range deadLockTables { - err := d.CleanDeadTableLock(tables, se) + err := d.cleanDeadTableLock(tables, se) if err != nil { logutil.DDLLogger().Info("clean dead table lock failed.", zap.Error(err)) } @@ -1337,6 +902,32 @@ func (d *ddl) startCleanDeadTableLock() { } } +// cleanDeadTableLock uses to clean dead table locks. +func (d *ddl) cleanDeadTableLock(unlockTables []model.TableLockTpInfo, se model.SessionInfo) error { + if len(unlockTables) == 0 { + return nil + } + arg := &LockTablesArg{ + UnlockTables: unlockTables, + SessionInfo: se, + } + job := &model.Job{ + SchemaID: unlockTables[0].SchemaID, + TableID: unlockTables[0].TableID, + Type: model.ActionUnlockTable, + BinlogInfo: &model.HistoryInfo{}, + Args: []any{arg}, + } + + ctx, err := d.sessPool.Get() + if err != nil { + return err + } + defer d.sessPool.Put(ctx) + err = d.executor.DoDDLJob(ctx, job) + return errors.Trace(err) +} + // SwitchMDL enables MDL or disable MDL. func (d *ddl) SwitchMDL(enable bool) error { isEnableBefore := variable.EnableMDL.Load() @@ -1383,114 +974,6 @@ func (d *ddl) SwitchMDL(enable bool) error { return nil } -// SwitchFastCreateTable switch fast create table -func (d *ddl) SwitchFastCreateTable(val bool) error { - old := variable.EnableFastCreateTable.Load() - if old == val { - return nil - } - ctx, cancel := context.WithTimeout(context.Background(), time.Second*30) - defer cancel() - - // Check if there is any DDL running. - // This check can not cover every corner cases, so users need to guarantee that there is no DDL running by themselves. - sessCtx, err := d.sessPool.Get() - if err != nil { - return errors.Trace(err) - } - defer d.sessPool.Put(sessCtx) - se := sess.NewSession(sessCtx) - rows, err := se.Execute(ctx, "select 1 from mysql.tidb_ddl_job", "check job") - if err != nil { - return errors.Trace(err) - } - if len(rows) != 0 { - return errors.New("please wait for all jobs done") - } - - if err := d.switchFastCreateTable(val); err != nil { - return errors.Trace(err) - } - - variable.EnableFastCreateTable.Store(val) - logutil.DDLLogger().Info("switch fast create table", zap.Bool("val", val)) - return nil -} - -// disableFastCreateTable disable fast create table feature. -func (*ddl) disableFastCreateTable(m *meta.Meta) error { - fastCreateTableInitialized, err := m.GetFastCreateTableInitialized() - if err != nil { - return errors.Trace(err) - } - if !fastCreateTableInitialized { - return nil - } - if err := m.ClearAllDatabaseNames(); err != nil { - return errors.Trace(err) - } - if err := m.ClearAllTableNames(); err != nil { - return errors.Trace(err) - } - return errors.Trace(m.SetFastCreateTableInitialized(false)) -} - -// enableFastCreateTable enable fast create table feature. -func (*ddl) enableFastCreateTable(m *meta.Meta) error { - fastCreateTableInitialized, err := m.GetFastCreateTableInitialized() - if err != nil { - return errors.Trace(err) - } - if fastCreateTableInitialized { - return nil - } - - if err := m.ClearAllDatabaseNames(); err != nil { - return errors.Trace(err) - } - if err := m.ClearAllTableNames(); err != nil { - return errors.Trace(err) - } - - dbs, err := m.ListDatabases() - if err != nil { - return errors.Trace(err) - } - - for _, dbInfo := range dbs { - if err := m.CreateDatabaseName(dbInfo.Name.L, dbInfo.ID); err != nil { - return errors.Trace(err) - } - } - - for _, dbInfo := range dbs { - tables, err := m.ListTables(dbInfo.ID) - if err != nil { - return errors.Trace(err) - } - for _, tableInfo := range tables { - if err := m.CreateTableName(dbInfo.Name.L, tableInfo.Name.L, tableInfo.ID); err != nil { - return errors.Trace(err) - } - } - } - - return errors.Trace(m.SetFastCreateTableInitialized(true)) -} - -func (d *ddl) switchFastCreateTable(val bool) (err error) { - return kv.RunInNewTxn(kv.WithInternalSourceType(d.ctx, kv.InternalTxnDDL), d.store, true, func(_ context.Context, txn kv.Transaction) error { - m := meta.NewMeta(txn) - - if val { - err = d.enableFastCreateTable(m) - } else { - err = d.disableFastCreateTable(m) - } - return errors.Trace(err) - }) -} - // RecoverInfo contains information needed by DDL.RecoverTable. type RecoverInfo struct { SchemaID int64 @@ -1520,9 +1003,19 @@ type RecoverSchemaInfo struct { // This provides a safe window for async commit and 1PC to commit with an old schema. func delayForAsyncCommit() { if variable.EnableMDL.Load() { - // If metadata lock is enabled. The transaction of DDL must begin after prewrite of the async commit transaction, - // then the commit ts of DDL must be greater than the async commit transaction. In this case, the corresponding schema of the async commit transaction - // is correct. But if metadata lock is disabled, we can't ensure that the corresponding schema of the async commit transaction isn't change. + // If metadata lock is enabled. The transaction of DDL must begin after + // pre-write of the async commit transaction, then the commit ts of DDL + // must be greater than the async commit transaction. In this case, the + // corresponding schema of the async commit transaction is correct. + // suppose we're adding index: + // - schema state -> StateWriteOnly with version V + // - some txn T started using async commit and version V, + // and T do pre-write before or after V+1 + // - schema state -> StateWriteReorganization with version V+1 + // - T commit finish, with TS + // - 'wait schema synced' finish + // - schema state -> Done with version V+2, commit-ts of this + // transaction must > TS, so it's safe for T to commit. return } cfg := config.GetGlobalConfig().TiKVClient.AsyncCommit diff --git a/pkg/ddl/ddl_test.go b/pkg/ddl/ddl_test.go index 6a88570f222ea..314d4ab0d27a2 100644 --- a/pkg/ddl/ddl_test.go +++ b/pkg/ddl/ddl_test.go @@ -30,6 +30,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/terror" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/store/mockstore" + "github.com/pingcap/tidb/pkg/tablecodec" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/dbterror" "github.com/pingcap/tidb/pkg/util/mock" @@ -294,3 +295,146 @@ func TestCheckDuplicateConstraint(t *testing.T) { err = checkDuplicateConstraint(constrNames, "u1", ast.ConstraintUniq) require.EqualError(t, err, "[ddl:1061]Duplicate key name 'u1'") } + +func TestGetTableDataKeyRanges(t *testing.T) { + // case 1, empty flashbackIDs + keyRanges := getTableDataKeyRanges([]int64{}) + require.Len(t, keyRanges, 1) + require.Equal(t, keyRanges[0].StartKey, tablecodec.EncodeTablePrefix(0)) + require.Equal(t, keyRanges[0].EndKey, tablecodec.EncodeTablePrefix(meta.MaxGlobalID)) + + // case 2, insert a execluded table ID + keyRanges = getTableDataKeyRanges([]int64{3}) + require.Len(t, keyRanges, 2) + require.Equal(t, keyRanges[0].StartKey, tablecodec.EncodeTablePrefix(0)) + require.Equal(t, keyRanges[0].EndKey, tablecodec.EncodeTablePrefix(3)) + require.Equal(t, keyRanges[1].StartKey, tablecodec.EncodeTablePrefix(4)) + require.Equal(t, keyRanges[1].EndKey, tablecodec.EncodeTablePrefix(meta.MaxGlobalID)) + + // case 3, insert some execluded table ID + keyRanges = getTableDataKeyRanges([]int64{3, 5, 9}) + require.Len(t, keyRanges, 4) + require.Equal(t, keyRanges[0].StartKey, tablecodec.EncodeTablePrefix(0)) + require.Equal(t, keyRanges[0].EndKey, tablecodec.EncodeTablePrefix(3)) + require.Equal(t, keyRanges[1].StartKey, tablecodec.EncodeTablePrefix(4)) + require.Equal(t, keyRanges[1].EndKey, tablecodec.EncodeTablePrefix(5)) + require.Equal(t, keyRanges[2].StartKey, tablecodec.EncodeTablePrefix(6)) + require.Equal(t, keyRanges[2].EndKey, tablecodec.EncodeTablePrefix(9)) + require.Equal(t, keyRanges[3].StartKey, tablecodec.EncodeTablePrefix(10)) + require.Equal(t, keyRanges[3].EndKey, tablecodec.EncodeTablePrefix(meta.MaxGlobalID)) +} + +func TestAppendContinuousKeyRanges(t *testing.T) { + cases := []struct { + input []keyRangeMayExclude + expect []kv.KeyRange + }{ + { + []keyRangeMayExclude{ + { + r: kv.KeyRange{StartKey: []byte{1}, EndKey: []byte{2}}, + exclude: true, + }, + }, + []kv.KeyRange{}, + }, + { + []keyRangeMayExclude{ + { + r: kv.KeyRange{StartKey: []byte{1}, EndKey: []byte{2}}, + exclude: false, + }, + }, + []kv.KeyRange{{StartKey: []byte{1}, EndKey: []byte{2}}}, + }, + { + []keyRangeMayExclude{ + { + r: kv.KeyRange{StartKey: []byte{1}, EndKey: []byte{2}}, + exclude: false, + }, + { + r: kv.KeyRange{StartKey: []byte{3}, EndKey: []byte{4}}, + exclude: false, + }, + }, + []kv.KeyRange{{StartKey: []byte{1}, EndKey: []byte{4}}}, + }, + { + []keyRangeMayExclude{ + { + r: kv.KeyRange{StartKey: []byte{1}, EndKey: []byte{2}}, + exclude: false, + }, + { + r: kv.KeyRange{StartKey: []byte{3}, EndKey: []byte{4}}, + exclude: true, + }, + { + r: kv.KeyRange{StartKey: []byte{5}, EndKey: []byte{6}}, + exclude: false, + }, + }, + []kv.KeyRange{ + {StartKey: []byte{1}, EndKey: []byte{2}}, + {StartKey: []byte{5}, EndKey: []byte{6}}, + }, + }, + { + []keyRangeMayExclude{ + { + r: kv.KeyRange{StartKey: []byte{1}, EndKey: []byte{2}}, + exclude: true, + }, + { + r: kv.KeyRange{StartKey: []byte{3}, EndKey: []byte{4}}, + exclude: true, + }, + { + r: kv.KeyRange{StartKey: []byte{5}, EndKey: []byte{6}}, + exclude: false, + }, + }, + []kv.KeyRange{{StartKey: []byte{5}, EndKey: []byte{6}}}, + }, + { + []keyRangeMayExclude{ + { + r: kv.KeyRange{StartKey: []byte{1}, EndKey: []byte{2}}, + exclude: false, + }, + { + r: kv.KeyRange{StartKey: []byte{3}, EndKey: []byte{4}}, + exclude: true, + }, + { + r: kv.KeyRange{StartKey: []byte{5}, EndKey: []byte{6}}, + exclude: true, + }, + }, + []kv.KeyRange{{StartKey: []byte{1}, EndKey: []byte{2}}}, + }, + { + []keyRangeMayExclude{ + { + r: kv.KeyRange{StartKey: []byte{1}, EndKey: []byte{2}}, + exclude: true, + }, + { + r: kv.KeyRange{StartKey: []byte{3}, EndKey: []byte{4}}, + exclude: false, + }, + { + r: kv.KeyRange{StartKey: []byte{5}, EndKey: []byte{6}}, + exclude: true, + }, + }, + []kv.KeyRange{{StartKey: []byte{3}, EndKey: []byte{4}}}, + }, + } + + for i, ca := range cases { + ranges := appendContinuousKeyRanges([]kv.KeyRange{}, ca.input) + require.Equal(t, ca.expect, ranges, "case %d", i) + } +} diff --git a/pkg/ddl/ddl_tiflash_api.go b/pkg/ddl/ddl_tiflash_api.go index 9f4c2512f0019..9813ce612f7e3 100644 --- a/pkg/ddl/ddl_tiflash_api.go +++ b/pkg/ddl/ddl_tiflash_api.go @@ -370,7 +370,7 @@ func PollAvailableTableProgress(schemas infoschema.InfoSchema, _ sessionctx.Cont } } else { var ok bool - table, ok = schemas.TableByID(availableTableID.ID) + table, ok = schemas.TableByID(context.Background(), availableTableID.ID) if !ok { logutil.DDLLogger().Info("get table id failed, may be dropped or truncated", zap.Int64("tableID", availableTableID.ID), @@ -461,7 +461,7 @@ func (d *ddl) refreshTiFlashTicker(ctx sessionctx.Context, pollTiFlashContext *T failpoint.Inject("waitForAddPartition", func(val failpoint.Value) { for _, phyTable := range tableList { is := d.infoCache.GetLatest() - _, ok := is.TableByID(phyTable.ID) + _, ok := is.TableByID(d.ctx, phyTable.ID) if !ok { tb, _, _ := is.FindTableByPartitionID(phyTable.ID) if tb == nil { diff --git a/pkg/ddl/delete_range.go b/pkg/ddl/delete_range.go index 68ddfe092982f..bafa01c847977 100644 --- a/pkg/ddl/delete_range.go +++ b/pkg/ddl/delete_range.go @@ -324,9 +324,10 @@ func insertJobIntoDeleteRangeTable(ctx context.Context, wrapper DelRangeExecWrap case model.ActionAddIndex, model.ActionAddPrimaryKey: allIndexIDs := make([]int64, 1) ifExists := make([]bool, 1) + isGlobal := make([]bool, 0, 1) var partitionIDs []int64 if err := job.DecodeArgs(&allIndexIDs[0], &ifExists[0], &partitionIDs); err != nil { - if err = job.DecodeArgs(&allIndexIDs, &ifExists, &partitionIDs); err != nil { + if err = job.DecodeArgs(&allIndexIDs, &ifExists, &partitionIDs, &isGlobal); err != nil { return errors.Trace(err) } } @@ -335,7 +336,7 @@ func insertJobIntoDeleteRangeTable(ctx context.Context, wrapper DelRangeExecWrap if len(partitionIDs) > 0 { physicalIDs = partitionIDs } - for _, indexID := range allIndexIDs { + for i, indexID := range allIndexIDs { // Determine the index IDs to be added. tempIdxID := tablecodec.TempIndexPrefix | indexID var indexIDs []int64 @@ -344,10 +345,16 @@ func insertJobIntoDeleteRangeTable(ctx context.Context, wrapper DelRangeExecWrap } else { indexIDs = []int64{tempIdxID} } - for _, pid := range physicalIDs { - if err := doBatchDeleteIndiceRange(ctx, wrapper, job.ID, pid, indexIDs, ea, "add index: physical table ID(s)"); err != nil { + if len(isGlobal) != 0 && isGlobal[i] { + if err := doBatchDeleteIndiceRange(ctx, wrapper, job.ID, job.TableID, indexIDs, ea, "add index: physical table ID(s)"); err != nil { return errors.Trace(err) } + } else { + for _, pid := range physicalIDs { + if err := doBatchDeleteIndiceRange(ctx, wrapper, job.ID, pid, indexIDs, ea, "add index: physical table ID(s)"); err != nil { + return errors.Trace(err) + } + } } } case model.ActionDropIndex, model.ActionDropPrimaryKey: diff --git a/pkg/ddl/executor.go b/pkg/ddl/executor.go index 0086afbfc86c4..8b7e4cbd1afe6 100644 --- a/pkg/ddl/executor.go +++ b/pkg/ddl/executor.go @@ -23,8 +23,6 @@ import ( "context" "fmt" "math" - "slices" - "strconv" "strings" "sync" "sync/atomic" @@ -42,20 +40,17 @@ import ( rg "github.com/pingcap/tidb/pkg/domain/resourcegroup" "github.com/pingcap/tidb/pkg/errctx" "github.com/pingcap/tidb/pkg/expression" - exprctx "github.com/pingcap/tidb/pkg/expression/context" "github.com/pingcap/tidb/pkg/infoschema" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/meta" "github.com/pingcap/tidb/pkg/meta/autoid" + "github.com/pingcap/tidb/pkg/metrics" "github.com/pingcap/tidb/pkg/owner" - "github.com/pingcap/tidb/pkg/parser" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/charset" - "github.com/pingcap/tidb/pkg/parser/format" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/parser/terror" - field_types "github.com/pingcap/tidb/pkg/parser/types" "github.com/pingcap/tidb/pkg/privilege" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/sessionctx/variable" @@ -65,22 +60,16 @@ import ( "github.com/pingcap/tidb/pkg/table/tables" "github.com/pingcap/tidb/pkg/tablecodec" "github.com/pingcap/tidb/pkg/types" - driver "github.com/pingcap/tidb/pkg/types/parser_driver" "github.com/pingcap/tidb/pkg/util" - "github.com/pingcap/tidb/pkg/util/chunk" "github.com/pingcap/tidb/pkg/util/collate" "github.com/pingcap/tidb/pkg/util/dbterror" "github.com/pingcap/tidb/pkg/util/dbterror/exeerrors" "github.com/pingcap/tidb/pkg/util/domainutil" "github.com/pingcap/tidb/pkg/util/generic" - "github.com/pingcap/tidb/pkg/util/hack" + "github.com/pingcap/tidb/pkg/util/intest" "github.com/pingcap/tidb/pkg/util/mathutil" - "github.com/pingcap/tidb/pkg/util/mock" - "github.com/pingcap/tidb/pkg/util/set" - "github.com/pingcap/tidb/pkg/util/sqlkiller" "github.com/pingcap/tidb/pkg/util/stringutil" "github.com/tikv/client-go/v2/oracle" - kvutil "github.com/tikv/client-go/v2/util" clientv3 "go.etcd.io/etcd/client/v3" "go.uber.org/zap" ) @@ -195,10 +184,8 @@ type executor struct { schemaLoader SchemaLoader lease time.Duration // lease is schema lease, default 45s, see config.Lease. ownerManager owner.Manager - limitJobChV2 chan *JobWrapper ddlJobDoneChMap *generic.SyncMap[int64, chan struct{}] ddlJobNotifyCh chan struct{} - mu *hookStruct // TODO remove it. globalIDLock *sync.Mutex } @@ -430,7 +417,7 @@ func (e *executor) getPendingTiFlashTableCount(originVersion int64, pendingCount cnt := uint32(0) dbs := is.ListTablesWithSpecialAttribute(infoschema.TiFlashAttribute) for _, db := range dbs { - if util.IsMemOrSysDB(db.DBName) { + if util.IsMemOrSysDB(db.DBName.L) { continue } for _, tbl := range db.TableInfos { @@ -665,25 +652,6 @@ func (e *executor) AlterTablePlacement(ctx sessionctx.Context, ident ast.Ident, return errors.Trace(err) } -func checkAndNormalizePlacementPolicy(ctx sessionctx.Context, placementPolicyRef *model.PolicyRefInfo) (*model.PolicyRefInfo, error) { - if placementPolicyRef == nil { - return nil, nil - } - - if placementPolicyRef.Name.L == defaultPlacementPolicyName { - // When policy name is 'default', it means to remove the placement settings - return nil, nil - } - - policy, ok := sessiontxn.GetTxnManager(ctx).GetTxnInfoSchema().PolicyByName(placementPolicyRef.Name) - if !ok { - return nil, errors.Trace(infoschema.ErrPlacementPolicyNotExists.GenWithStackByArgs(placementPolicyRef.Name)) - } - - placementPolicyRef.ID = policy.ID - return placementPolicyRef, nil -} - func checkMultiSchemaSpecs(_ sessionctx.Context, specs []*ast.DatabaseOption) error { hasSetTiFlashReplica := false if len(specs) == 1 { @@ -877,117 +845,6 @@ func checkTooLongForeignKey(fk model.CIStr) error { return nil } -func setColumnFlagWithConstraint(colMap map[string]*table.Column, v *ast.Constraint) { - switch v.Tp { - case ast.ConstraintPrimaryKey: - for _, key := range v.Keys { - if key.Expr != nil { - continue - } - c, ok := colMap[key.Column.Name.L] - if !ok { - continue - } - c.AddFlag(mysql.PriKeyFlag) - // Primary key can not be NULL. - c.AddFlag(mysql.NotNullFlag) - setNoDefaultValueFlag(c, c.DefaultValue != nil) - } - case ast.ConstraintUniq, ast.ConstraintUniqIndex, ast.ConstraintUniqKey: - for i, key := range v.Keys { - if key.Expr != nil { - continue - } - c, ok := colMap[key.Column.Name.L] - if !ok { - continue - } - if i == 0 { - // Only the first column can be set - // if unique index has multi columns, - // the flag should be MultipleKeyFlag. - // See https://dev.mysql.com/doc/refman/5.7/en/show-columns.html - if len(v.Keys) > 1 { - c.AddFlag(mysql.MultipleKeyFlag) - } else { - c.AddFlag(mysql.UniqueKeyFlag) - } - } - } - case ast.ConstraintKey, ast.ConstraintIndex: - for i, key := range v.Keys { - if key.Expr != nil { - continue - } - c, ok := colMap[key.Column.Name.L] - if !ok { - continue - } - if i == 0 { - // Only the first column can be set. - c.AddFlag(mysql.MultipleKeyFlag) - } - } - } -} - -func buildColumnsAndConstraints( - ctx sessionctx.Context, - colDefs []*ast.ColumnDef, - constraints []*ast.Constraint, - tblCharset string, - tblCollate string, -) ([]*table.Column, []*ast.Constraint, error) { - // outPriKeyConstraint is the primary key constraint out of column definition. such as: create table t1 (id int , age int, primary key(id)); - var outPriKeyConstraint *ast.Constraint - for _, v := range constraints { - if v.Tp == ast.ConstraintPrimaryKey { - outPriKeyConstraint = v - break - } - } - cols := make([]*table.Column, 0, len(colDefs)) - colMap := make(map[string]*table.Column, len(colDefs)) - - for i, colDef := range colDefs { - if field_types.TiDBStrictIntegerDisplayWidth { - switch colDef.Tp.GetType() { - case mysql.TypeTiny: - // No warning for BOOL-like tinyint(1) - if colDef.Tp.GetFlen() != types.UnspecifiedLength && colDef.Tp.GetFlen() != 1 { - ctx.GetSessionVars().StmtCtx.AppendWarning( - dbterror.ErrWarnDeprecatedIntegerDisplayWidth.FastGenByArgs(), - ) - } - case mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong: - if colDef.Tp.GetFlen() != types.UnspecifiedLength { - ctx.GetSessionVars().StmtCtx.AppendWarning( - dbterror.ErrWarnDeprecatedIntegerDisplayWidth.FastGenByArgs(), - ) - } - } - } - col, cts, err := buildColumnAndConstraint(ctx, i, colDef, outPriKeyConstraint, tblCharset, tblCollate) - if err != nil { - return nil, nil, errors.Trace(err) - } - col.State = model.StatePublic - if mysql.HasZerofillFlag(col.GetFlag()) { - ctx.GetSessionVars().StmtCtx.AppendWarning( - dbterror.ErrWarnDeprecatedZerofill.FastGenByArgs(), - ) - } - constraints = append(constraints, cts...) - cols = append(cols, col) - colMap[colDef.Name.Name.L] = col - } - // Traverse table Constraints and set col.flag. - for _, v := range constraints { - setColumnFlagWithConstraint(colMap, v) - } - return cols, constraints, nil -} - func getDefaultCollationForUTF8MB4(sessVars *variable.SessionVars, cs string) (string, error) { if sessVars == nil || cs != charset.CharsetUTF8MB4 { return "", nil @@ -1050,4155 +907,1369 @@ func ResolveCharsetCollation(sessVars *variable.SessionVars, charsetOpts ...ast. return chs, coll, nil } -// OverwriteCollationWithBinaryFlag is used to handle the case like -// -// CREATE TABLE t (a VARCHAR(255) BINARY) CHARSET utf8 COLLATE utf8_general_ci; -// -// The 'BINARY' sets the column collation to *_bin according to the table charset. -func OverwriteCollationWithBinaryFlag(sessVars *variable.SessionVars, colDef *ast.ColumnDef, chs, coll string) (newChs string, newColl string) { - ignoreBinFlag := colDef.Tp.GetCharset() != "" && (colDef.Tp.GetCollate() != "" || containsColumnOption(colDef, ast.ColumnOptionCollate)) - if ignoreBinFlag { - return chs, coll - } - needOverwriteBinColl := types.IsString(colDef.Tp.GetType()) && mysql.HasBinaryFlag(colDef.Tp.GetFlag()) - if needOverwriteBinColl { - newColl, err := GetDefaultCollation(sessVars, chs) - if err != nil { - return chs, coll - } - return chs, newColl +// IsAutoRandomColumnID returns true if the given column ID belongs to an auto_random column. +func IsAutoRandomColumnID(tblInfo *model.TableInfo, colID int64) bool { + if !tblInfo.ContainsAutoRandomBits() { + return false } - return chs, coll -} - -func typesNeedCharset(tp byte) bool { - switch tp { - case mysql.TypeString, mysql.TypeVarchar, mysql.TypeVarString, - mysql.TypeBlob, mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob, - mysql.TypeEnum, mysql.TypeSet: - return true + if tblInfo.PKIsHandle { + return tblInfo.GetPkColInfo().ID == colID + } else if tblInfo.IsCommonHandle { + pk := tables.FindPrimaryIndex(tblInfo) + if pk == nil { + return false + } + offset := pk.Columns[0].Offset + return tblInfo.Columns[offset].ID == colID } return false } -func setCharsetCollationFlenDecimal(tp *types.FieldType, colName, colCharset, colCollate string, sessVars *variable.SessionVars) error { - var err error - if typesNeedCharset(tp.GetType()) { - tp.SetCharset(colCharset) - tp.SetCollate(colCollate) - } else { - tp.SetCharset(charset.CharsetBin) - tp.SetCollate(charset.CharsetBin) - } - - // Use default value for flen or decimal when they are unspecified. - defaultFlen, defaultDecimal := mysql.GetDefaultFieldLengthAndDecimal(tp.GetType()) - if tp.GetDecimal() == types.UnspecifiedLength { - tp.SetDecimal(defaultDecimal) +// checkInvisibleIndexOnPK check if primary key is invisible index. +// Note: PKIsHandle == true means the table already has a visible primary key, +// we do not need do a check for this case and return directly, +// because whether primary key is invisible has been check when creating table. +func checkInvisibleIndexOnPK(tblInfo *model.TableInfo) error { + if tblInfo.PKIsHandle { + return nil } - if tp.GetFlen() == types.UnspecifiedLength { - tp.SetFlen(defaultFlen) - if mysql.HasUnsignedFlag(tp.GetFlag()) && tp.GetType() != mysql.TypeLonglong && mysql.IsIntegerType(tp.GetType()) { - // Issue #4684: the flen of unsigned integer(except bigint) is 1 digit shorter than signed integer - // because it has no prefix "+" or "-" character. - tp.SetFlen(tp.GetFlen() - 1) - } - } else { - // Adjust the field type for blob/text types if the flen is set. - if err = adjustBlobTypesFlen(tp, colCharset); err != nil { - return err - } + pk := tblInfo.GetPrimaryKey() + if pk != nil && pk.Invisible { + return dbterror.ErrPKIndexCantBeInvisible } - return checkTooBigFieldLengthAndTryAutoConvert(tp, colName, sessVars) + return nil } -func decodeEnumSetBinaryLiteralToUTF8(tp *types.FieldType, chs string) { - if tp.GetType() != mysql.TypeEnum && tp.GetType() != mysql.TypeSet { - return - } - enc := charset.FindEncoding(chs) - for i, elem := range tp.GetElems() { - if !tp.GetElemIsBinaryLit(i) { - continue +// checkGlobalIndex check if the index is allowed to have global index +func checkGlobalIndex(ctx sessionctx.Context, tblInfo *model.TableInfo, indexInfo *model.IndexInfo) error { + pi := tblInfo.GetPartitionInfo() + isPartitioned := pi != nil && pi.Type != model.PartitionTypeNone + if indexInfo.Global { + if !isPartitioned { + // Makes no sense with LOCAL/GLOBAL index for non-partitioned tables, since we don't support + // partitioning an index differently from the table partitioning. + return dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs("Global Index on non-partitioned table") + } + if !ctx.GetSessionVars().EnableGlobalIndex { + return dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs("GLOBAL IndexOption when tidb_enable_global_index is disabled") } - s, err := enc.Transform(nil, hack.Slice(elem), charset.OpDecodeReplace) + // TODO: remove limitation + if !indexInfo.Unique { + return dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs("GLOBAL IndexOption on non-unique index") + } + // TODO: remove limitation + // check that not all partitioned columns are included. + inAllPartitionColumns, err := checkPartitionKeysConstraint(pi, indexInfo.Columns, tblInfo) if err != nil { - logutil.DDLLogger().Warn("decode enum binary literal to utf-8 failed", zap.Error(err)) + return errors.Trace(err) + } + if inAllPartitionColumns { + return dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs("Global Index including all columns in the partitioning expression") } - tp.SetElem(i, string(hack.String(s))) } - tp.CleanElemIsBinaryLit() + return nil } -// buildColumnAndConstraint builds table.Column and ast.Constraint from the parameters. -// outPriKeyConstraint is the primary key constraint out of column definition. For example: -// `create table t1 (id int , age int, primary key(id));` -func buildColumnAndConstraint( - ctx sessionctx.Context, - offset int, - colDef *ast.ColumnDef, - outPriKeyConstraint *ast.Constraint, - tblCharset string, - tblCollate string, -) (*table.Column, []*ast.Constraint, error) { - if colName := colDef.Name.Name.L; colName == model.ExtraHandleName.L { - return nil, nil, dbterror.ErrWrongColumnName.GenWithStackByArgs(colName) +// checkGlobalIndexes check if global index is supported. +func checkGlobalIndexes(ctx sessionctx.Context, tblInfo *model.TableInfo) error { + for _, indexInfo := range tblInfo.Indices { + err := checkGlobalIndex(ctx, tblInfo, indexInfo) + if err != nil { + return err + } } + return nil +} - // specifiedCollate refers to the last collate specified in colDef.Options. - chs, coll, err := getCharsetAndCollateInColumnDef(ctx.GetSessionVars(), colDef) +func (e *executor) assignPartitionIDs(defs []model.PartitionDefinition) error { + genIDs, err := e.genGlobalIDs(len(defs)) if err != nil { - return nil, nil, errors.Trace(err) + return errors.Trace(err) } - chs, coll, err = ResolveCharsetCollation(ctx.GetSessionVars(), - ast.CharsetOpt{Chs: chs, Col: coll}, - ast.CharsetOpt{Chs: tblCharset, Col: tblCollate}, - ) - chs, coll = OverwriteCollationWithBinaryFlag(ctx.GetSessionVars(), colDef, chs, coll) - if err != nil { - return nil, nil, errors.Trace(err) + for i := range defs { + defs[i].ID = genIDs[i] } + return nil +} - if err := setCharsetCollationFlenDecimal(colDef.Tp, colDef.Name.Name.O, chs, coll, ctx.GetSessionVars()); err != nil { - return nil, nil, errors.Trace(err) - } - decodeEnumSetBinaryLiteralToUTF8(colDef.Tp, chs) - col, cts, err := columnDefToCol(ctx, offset, colDef, outPriKeyConstraint) - if err != nil { - return nil, nil, errors.Trace(err) +func (e *executor) CreateTable(ctx sessionctx.Context, s *ast.CreateTableStmt) (err error) { + ident := ast.Ident{Schema: s.Table.Schema, Name: s.Table.Name} + is := e.infoCache.GetLatest() + schema, ok := is.SchemaByName(ident.Schema) + if !ok { + return infoschema.ErrDatabaseNotExists.GenWithStackByArgs(ident.Schema) } - return col, cts, nil -} -// checkColumnDefaultValue checks the default value of the column. -// In non-strict SQL mode, if the default value of the column is an empty string, the default value can be ignored. -// In strict SQL mode, TEXT/BLOB/JSON can't have not null default values. -// In NO_ZERO_DATE SQL mode, TIMESTAMP/DATE/DATETIME type can't have zero date like '0000-00-00' or '0000-00-00 00:00:00'. -func checkColumnDefaultValue(ctx exprctx.BuildContext, col *table.Column, value any) (bool, any, error) { - hasDefaultValue := true - if value != nil && (col.GetType() == mysql.TypeJSON || - col.GetType() == mysql.TypeTinyBlob || col.GetType() == mysql.TypeMediumBlob || - col.GetType() == mysql.TypeLongBlob || col.GetType() == mysql.TypeBlob) { - // In non-strict SQL mode. - if !ctx.GetEvalCtx().SQLMode().HasStrictMode() && value == "" { - if col.GetType() == mysql.TypeBlob || col.GetType() == mysql.TypeLongBlob { - // The TEXT/BLOB default value can be ignored. - hasDefaultValue = false - } - // In non-strict SQL mode, if the column type is json and the default value is null, it is initialized to an empty array. - if col.GetType() == mysql.TypeJSON { - value = `null` - } - ctx.GetEvalCtx().AppendWarning(dbterror.ErrBlobCantHaveDefault.FastGenByArgs(col.Name.O)) - return hasDefaultValue, value, nil + var ( + referTbl table.Table + involvingRef []model.InvolvingSchemaInfo + ) + if s.ReferTable != nil { + referIdent := ast.Ident{Schema: s.ReferTable.Schema, Name: s.ReferTable.Name} + _, ok := is.SchemaByName(referIdent.Schema) + if !ok { + return infoschema.ErrTableNotExists.GenWithStackByArgs(referIdent.Schema, referIdent.Name) } - // In strict SQL mode or default value is not an empty string. - return hasDefaultValue, value, dbterror.ErrBlobCantHaveDefault.GenWithStackByArgs(col.Name.O) - } - if value != nil && ctx.GetEvalCtx().SQLMode().HasNoZeroDateMode() && - ctx.GetEvalCtx().SQLMode().HasStrictMode() && types.IsTypeTime(col.GetType()) { - if vv, ok := value.(string); ok { - timeValue, err := expression.GetTimeValue(ctx, vv, col.GetType(), col.GetDecimal(), nil) - if err != nil { - return hasDefaultValue, value, errors.Trace(err) - } - if timeValue.GetMysqlTime().CoreTime() == types.ZeroCoreTime { - return hasDefaultValue, value, types.ErrInvalidDefault.GenWithStackByArgs(col.Name.O) - } + referTbl, err = is.TableByName(e.ctx, referIdent.Schema, referIdent.Name) + if err != nil { + return infoschema.ErrTableNotExists.GenWithStackByArgs(referIdent.Schema, referIdent.Name) } + involvingRef = append(involvingRef, model.InvolvingSchemaInfo{ + Database: s.ReferTable.Schema.L, + Table: s.ReferTable.Name.L, + Mode: model.SharedInvolving, + }) } - return hasDefaultValue, value, nil -} - -func checkSequenceDefaultValue(col *table.Column) error { - if mysql.IsIntegerType(col.GetType()) { - return nil - } - return dbterror.ErrColumnTypeUnsupportedNextValue.GenWithStackByArgs(col.ColumnInfo.Name.O) -} -func convertTimestampDefaultValToUTC(ctx sessionctx.Context, defaultVal any, col *table.Column) (any, error) { - if defaultVal == nil || col.GetType() != mysql.TypeTimestamp { - return defaultVal, nil + // build tableInfo + var tbInfo *model.TableInfo + if s.ReferTable != nil { + tbInfo, err = BuildTableInfoWithLike(ctx, ident, referTbl.Meta(), s) + } else { + tbInfo, err = BuildTableInfoWithStmt(ctx, s, schema.Charset, schema.Collate, schema.PlacementPolicyRef) } - if vv, ok := defaultVal.(string); ok { - if vv != types.ZeroDatetimeStr && !strings.EqualFold(vv, ast.CurrentTimestamp) { - t, err := types.ParseTime(ctx.GetSessionVars().StmtCtx.TypeCtx(), vv, col.GetType(), col.GetDecimal()) - if err != nil { - return defaultVal, errors.Trace(err) - } - err = t.ConvertTimeZone(ctx.GetSessionVars().Location(), time.UTC) - if err != nil { - return defaultVal, errors.Trace(err) - } - defaultVal = t.String() - } + if err != nil { + return errors.Trace(err) } - return defaultVal, nil -} -// isExplicitTimeStamp is used to check if explicit_defaults_for_timestamp is on or off. -// Check out this link for more details. -// https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_explicit_defaults_for_timestamp -func isExplicitTimeStamp() bool { - // TODO: implement the behavior as MySQL when explicit_defaults_for_timestamp = off, then this function could return false. - return true -} - -// processColumnFlags is used by columnDefToCol and processColumnOptions. It is intended to unify behaviors on `create/add` and `modify/change` statements. Check tidb#issue#19342. -func processColumnFlags(col *table.Column) { - if col.FieldType.EvalType().IsStringKind() { - if col.GetCharset() == charset.CharsetBin { - col.AddFlag(mysql.BinaryFlag) - } else { - col.DelFlag(mysql.BinaryFlag) - } - } - if col.GetType() == mysql.TypeBit { - // For BIT field, it's charset is binary but does not have binary flag. - col.DelFlag(mysql.BinaryFlag) - col.AddFlag(mysql.UnsignedFlag) + if err = checkTableInfoValidWithStmt(ctx, tbInfo, s); err != nil { + return err } - if col.GetType() == mysql.TypeYear { - // For Year field, it's charset is binary but does not have binary flag. - col.DelFlag(mysql.BinaryFlag) - col.AddFlag(mysql.ZerofillFlag) + if err = checkTableForeignKeysValid(ctx, is, schema.Name.L, tbInfo); err != nil { + return err } - // If you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to the column. - // See https://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html for more details. - // But some types like bit and year, won't show its unsigned flag in `show create table`. - if mysql.HasZerofillFlag(col.GetFlag()) { - col.AddFlag(mysql.UnsignedFlag) + onExist := OnExistError + if s.IfNotExists { + onExist = OnExistIgnore } -} -func adjustBlobTypesFlen(tp *types.FieldType, colCharset string) error { - cs, err := charset.GetCharsetInfo(colCharset) - // when we meet the unsupported charset, we do not adjust. - if err != nil { - return err - } - l := tp.GetFlen() * cs.Maxlen - if tp.GetType() == mysql.TypeBlob { - if l <= tinyBlobMaxLength { - logutil.DDLLogger().Info(fmt.Sprintf("Automatically convert BLOB(%d) to TINYBLOB", tp.GetFlen())) - tp.SetFlen(tinyBlobMaxLength) - tp.SetType(mysql.TypeTinyBlob) - } else if l <= blobMaxLength { - tp.SetFlen(blobMaxLength) - } else if l <= mediumBlobMaxLength { - logutil.DDLLogger().Info(fmt.Sprintf("Automatically convert BLOB(%d) to MEDIUMBLOB", tp.GetFlen())) - tp.SetFlen(mediumBlobMaxLength) - tp.SetType(mysql.TypeMediumBlob) - } else if l <= longBlobMaxLength { - logutil.DDLLogger().Info(fmt.Sprintf("Automatically convert BLOB(%d) to LONGBLOB", tp.GetFlen())) - tp.SetFlen(longBlobMaxLength) - tp.SetType(mysql.TypeLongBlob) - } - } - return nil + return e.CreateTableWithInfo(ctx, schema.Name, tbInfo, involvingRef, WithOnExist(onExist)) } -// columnDefToCol converts ColumnDef to Col and TableConstraints. -// outPriKeyConstraint is the primary key constraint out of column definition. such as: create table t1 (id int , age int, primary key(id)); -func columnDefToCol(ctx sessionctx.Context, offset int, colDef *ast.ColumnDef, outPriKeyConstraint *ast.Constraint) (*table.Column, []*ast.Constraint, error) { - var constraints = make([]*ast.Constraint, 0) - col := table.ToColumn(&model.ColumnInfo{ - Offset: offset, - Name: colDef.Name.Name, - FieldType: *colDef.Tp, - // TODO: remove this version field after there is no old version. - Version: model.CurrLatestColumnInfoVersion, - }) - - if !isExplicitTimeStamp() { - // Check and set TimestampFlag, OnUpdateNowFlag and NotNullFlag. - if col.GetType() == mysql.TypeTimestamp { - col.AddFlag(mysql.TimestampFlag | mysql.OnUpdateNowFlag | mysql.NotNullFlag) - } +// createTableWithInfoJob returns the table creation job. +// WARNING: it may return a nil job, which means you don't need to submit any DDL job. +func (e *executor) createTableWithInfoJob( + ctx sessionctx.Context, + dbName model.CIStr, + tbInfo *model.TableInfo, + involvingRef []model.InvolvingSchemaInfo, + onExist OnExist, +) (job *model.Job, err error) { + is := e.infoCache.GetLatest() + schema, ok := is.SchemaByName(dbName) + if !ok { + return nil, infoschema.ErrDatabaseNotExists.GenWithStackByArgs(dbName) } - var err error - setOnUpdateNow := false - hasDefaultValue := false - hasNullFlag := false - if colDef.Options != nil { - length := types.UnspecifiedLength - keys := []*ast.IndexPartSpecification{ - { - Column: colDef.Name, - Length: length, - }, - } + if err = handleTablePlacement(ctx, tbInfo); err != nil { + return nil, errors.Trace(err) + } - var sb strings.Builder - restoreFlags := format.RestoreStringSingleQuotes | format.RestoreKeyWordLowercase | format.RestoreNameBackQuotes | - format.RestoreSpacesAroundBinaryOperation | format.RestoreWithoutSchemaName | format.RestoreWithoutTableName - restoreCtx := format.NewRestoreCtx(restoreFlags, &sb) - - for _, v := range colDef.Options { - switch v.Tp { - case ast.ColumnOptionNotNull: - col.AddFlag(mysql.NotNullFlag) - case ast.ColumnOptionNull: - col.DelFlag(mysql.NotNullFlag) - removeOnUpdateNowFlag(col) - hasNullFlag = true - case ast.ColumnOptionAutoIncrement: - col.AddFlag(mysql.AutoIncrementFlag | mysql.NotNullFlag) - case ast.ColumnOptionPrimaryKey: - // Check PriKeyFlag first to avoid extra duplicate constraints. - if col.GetFlag()&mysql.PriKeyFlag == 0 { - constraint := &ast.Constraint{Tp: ast.ConstraintPrimaryKey, Keys: keys, - Option: &ast.IndexOption{PrimaryKeyTp: v.PrimaryKeyTp}} - constraints = append(constraints, constraint) - col.AddFlag(mysql.PriKeyFlag) - // Add NotNullFlag early so that processColumnFlags() can see it. - col.AddFlag(mysql.NotNullFlag) - } - case ast.ColumnOptionUniqKey: - // Check UniqueFlag first to avoid extra duplicate constraints. - if col.GetFlag()&mysql.UniqueFlag == 0 { - constraint := &ast.Constraint{Tp: ast.ConstraintUniqKey, Keys: keys} - constraints = append(constraints, constraint) - col.AddFlag(mysql.UniqueKeyFlag) - } - case ast.ColumnOptionDefaultValue: - hasDefaultValue, err = SetDefaultValue(ctx, col, v) - if err != nil { - return nil, nil, errors.Trace(err) - } - removeOnUpdateNowFlag(col) - case ast.ColumnOptionOnUpdate: - // TODO: Support other time functions. - if !(col.GetType() == mysql.TypeTimestamp || col.GetType() == mysql.TypeDatetime) { - return nil, nil, dbterror.ErrInvalidOnUpdate.GenWithStackByArgs(col.Name) - } - if !expression.IsValidCurrentTimestampExpr(v.Expr, colDef.Tp) { - return nil, nil, dbterror.ErrInvalidOnUpdate.GenWithStackByArgs(col.Name) - } - col.AddFlag(mysql.OnUpdateNowFlag) - setOnUpdateNow = true - case ast.ColumnOptionComment: - err := setColumnComment(ctx, col, v) - if err != nil { - return nil, nil, errors.Trace(err) - } - case ast.ColumnOptionGenerated: - sb.Reset() - err = v.Expr.Restore(restoreCtx) - if err != nil { - return nil, nil, errors.Trace(err) - } - col.GeneratedExprString = sb.String() - col.GeneratedStored = v.Stored - _, dependColNames, err := findDependedColumnNames(model.NewCIStr(""), model.NewCIStr(""), colDef) - if err != nil { - return nil, nil, errors.Trace(err) - } - col.Dependences = dependColNames - case ast.ColumnOptionCollate: - if field_types.HasCharset(colDef.Tp) { - col.FieldType.SetCollate(v.StrValue) - } - case ast.ColumnOptionFulltext: - ctx.GetSessionVars().StmtCtx.AppendWarning(dbterror.ErrTableCantHandleFt.FastGenByArgs()) - case ast.ColumnOptionCheck: - if !variable.EnableCheckConstraint.Load() { - ctx.GetSessionVars().StmtCtx.AppendWarning(errCheckConstraintIsOff) - } else { - // Check the column CHECK constraint dependency lazily, after fill all the name. - // Extract column constraint from column option. - constraint := &ast.Constraint{ - Tp: ast.ConstraintCheck, - Expr: v.Expr, - Enforced: v.Enforced, - Name: v.ConstraintName, - InColumn: true, - InColumnName: colDef.Name.Name.O, - } - constraints = append(constraints, constraint) + var oldViewTblID int64 + if oldTable, err := is.TableByName(e.ctx, schema.Name, tbInfo.Name); err == nil { + err = infoschema.ErrTableExists.GenWithStackByArgs(ast.Ident{Schema: schema.Name, Name: tbInfo.Name}) + switch onExist { + case OnExistIgnore: + ctx.GetSessionVars().StmtCtx.AppendNote(err) + return nil, nil + case OnExistReplace: + // only CREATE OR REPLACE VIEW is supported at the moment. + if tbInfo.View != nil { + if oldTable.Meta().IsView() { + oldViewTblID = oldTable.Meta().ID + break } + // The object to replace isn't a view. + return nil, dbterror.ErrWrongObject.GenWithStackByArgs(dbName, tbInfo.Name, "VIEW") } + return nil, err + default: + return nil, err } } - if err = processAndCheckDefaultValueAndColumn(ctx, col, outPriKeyConstraint, hasDefaultValue, setOnUpdateNow, hasNullFlag); err != nil { - return nil, nil, errors.Trace(err) + if err := checkTableInfoValidExtra(ctx, tbInfo); err != nil { + return nil, err } - return col, constraints, nil -} -func restoreFuncCall(expr *ast.FuncCallExpr) (string, error) { - var sb strings.Builder - restoreFlags := format.RestoreStringSingleQuotes | format.RestoreKeyWordLowercase | format.RestoreNameBackQuotes | - format.RestoreSpacesAroundBinaryOperation - restoreCtx := format.NewRestoreCtx(restoreFlags, &sb) - if err := expr.Restore(restoreCtx); err != nil { - return "", err + var actionType model.ActionType + args := []any{tbInfo} + switch { + case tbInfo.View != nil: + actionType = model.ActionCreateView + args = append(args, onExist == OnExistReplace, oldViewTblID) + case tbInfo.Sequence != nil: + actionType = model.ActionCreateSequence + default: + actionType = model.ActionCreateTable + args = append(args, ctx.GetSessionVars().ForeignKeyChecks) } - return sb.String(), nil -} -// getFuncCallDefaultValue gets the default column value of function-call expression. -func getFuncCallDefaultValue(col *table.Column, option *ast.ColumnOption, expr *ast.FuncCallExpr) (any, bool, error) { - switch expr.FnName.L { - case ast.CurrentTimestamp, ast.CurrentDate: // CURRENT_TIMESTAMP() and CURRENT_DATE() - tp, fsp := col.FieldType.GetType(), col.FieldType.GetDecimal() - if tp == mysql.TypeTimestamp || tp == mysql.TypeDatetime { - defaultFsp := 0 - if len(expr.Args) == 1 { - if val := expr.Args[0].(*driver.ValueExpr); val != nil { - defaultFsp = int(val.GetInt64()) - } - } - if defaultFsp != fsp { - return nil, false, dbterror.ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) - } - } - return nil, false, nil - case ast.NextVal: - // handle default next value of sequence. (keep the expr string) - str, err := getSequenceDefaultValue(option) - if err != nil { - return nil, false, errors.Trace(err) - } - return str, true, nil - case ast.Rand, ast.UUID, ast.UUIDToBin: // RAND(), UUID() and UUID_TO_BIN() - if err := expression.VerifyArgsWrapper(expr.FnName.L, len(expr.Args)); err != nil { - return nil, false, errors.Trace(err) - } - str, err := restoreFuncCall(expr) - if err != nil { - return nil, false, errors.Trace(err) - } - col.DefaultIsExpr = true - return str, false, nil - case ast.DateFormat: // DATE_FORMAT() - if err := expression.VerifyArgsWrapper(expr.FnName.L, len(expr.Args)); err != nil { - return nil, false, errors.Trace(err) - } - // Support DATE_FORMAT(NOW(),'%Y-%m'), DATE_FORMAT(NOW(),'%Y-%m-%d'), - // DATE_FORMAT(NOW(),'%Y-%m-%d %H.%i.%s'), DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s'). - nowFunc, ok := expr.Args[0].(*ast.FuncCallExpr) - if ok && nowFunc.FnName.L == ast.Now { - if err := expression.VerifyArgsWrapper(nowFunc.FnName.L, len(nowFunc.Args)); err != nil { - return nil, false, errors.Trace(err) - } - valExpr, isValue := expr.Args[1].(ast.ValueExpr) - if !isValue || (valExpr.GetString() != "%Y-%m" && valExpr.GetString() != "%Y-%m-%d" && - valExpr.GetString() != "%Y-%m-%d %H.%i.%s" && valExpr.GetString() != "%Y-%m-%d %H:%i:%s") { - return nil, false, dbterror.ErrDefValGeneratedNamedFunctionIsNotAllowed.GenWithStackByArgs(col.Name.String(), valExpr) - } - str, err := restoreFuncCall(expr) - if err != nil { - return nil, false, errors.Trace(err) - } - col.DefaultIsExpr = true - return str, false, nil - } - return nil, false, dbterror.ErrDefValGeneratedNamedFunctionIsNotAllowed.GenWithStackByArgs(col.Name.String(), - fmt.Sprintf("%s with disallowed args", expr.FnName.String())) - case ast.Replace: - if err := expression.VerifyArgsWrapper(expr.FnName.L, len(expr.Args)); err != nil { - return nil, false, errors.Trace(err) - } - funcCall := expr.Args[0] - // Support REPLACE(CONVERT(UPPER(UUID()) USING UTF8MB4), '-', '')) - if convertFunc, ok := funcCall.(*ast.FuncCallExpr); ok && convertFunc.FnName.L == ast.Convert { - if err := expression.VerifyArgsWrapper(convertFunc.FnName.L, len(convertFunc.Args)); err != nil { - return nil, false, errors.Trace(err) - } - funcCall = convertFunc.Args[0] - } - // Support REPLACE(UPPER(UUID()), '-', ''). - if upperFunc, ok := funcCall.(*ast.FuncCallExpr); ok && upperFunc.FnName.L == ast.Upper { - if err := expression.VerifyArgsWrapper(upperFunc.FnName.L, len(upperFunc.Args)); err != nil { - return nil, false, errors.Trace(err) - } - if uuidFunc, ok := upperFunc.Args[0].(*ast.FuncCallExpr); ok && uuidFunc.FnName.L == ast.UUID { - if err := expression.VerifyArgsWrapper(uuidFunc.FnName.L, len(uuidFunc.Args)); err != nil { - return nil, false, errors.Trace(err) - } - str, err := restoreFuncCall(expr) - if err != nil { - return nil, false, errors.Trace(err) - } - col.DefaultIsExpr = true - return str, false, nil - } - } - return nil, false, dbterror.ErrDefValGeneratedNamedFunctionIsNotAllowed.GenWithStackByArgs(col.Name.String(), - fmt.Sprintf("%s with disallowed args", expr.FnName.String())) - case ast.Upper: - if err := expression.VerifyArgsWrapper(expr.FnName.L, len(expr.Args)); err != nil { - return nil, false, errors.Trace(err) - } - // Support UPPER(SUBSTRING_INDEX(USER(), '@', 1)). - if substringIndexFunc, ok := expr.Args[0].(*ast.FuncCallExpr); ok && substringIndexFunc.FnName.L == ast.SubstringIndex { - if err := expression.VerifyArgsWrapper(substringIndexFunc.FnName.L, len(substringIndexFunc.Args)); err != nil { - return nil, false, errors.Trace(err) - } - if userFunc, ok := substringIndexFunc.Args[0].(*ast.FuncCallExpr); ok && userFunc.FnName.L == ast.User { - if err := expression.VerifyArgsWrapper(userFunc.FnName.L, len(userFunc.Args)); err != nil { - return nil, false, errors.Trace(err) - } - valExpr, isValue := substringIndexFunc.Args[1].(ast.ValueExpr) - if !isValue || valExpr.GetString() != "@" { - return nil, false, dbterror.ErrDefValGeneratedNamedFunctionIsNotAllowed.GenWithStackByArgs(col.Name.String(), valExpr) - } - str, err := restoreFuncCall(expr) - if err != nil { - return nil, false, errors.Trace(err) - } - col.DefaultIsExpr = true - return str, false, nil - } - } - return nil, false, dbterror.ErrDefValGeneratedNamedFunctionIsNotAllowed.GenWithStackByArgs(col.Name.String(), - fmt.Sprintf("%s with disallowed args", expr.FnName.String())) - case ast.StrToDate: // STR_TO_DATE() - if err := expression.VerifyArgsWrapper(expr.FnName.L, len(expr.Args)); err != nil { - return nil, false, errors.Trace(err) - } - // Support STR_TO_DATE('1980-01-01', '%Y-%m-%d'). - if _, ok1 := expr.Args[0].(ast.ValueExpr); ok1 { - if _, ok2 := expr.Args[1].(ast.ValueExpr); ok2 { - str, err := restoreFuncCall(expr) - if err != nil { - return nil, false, errors.Trace(err) - } - col.DefaultIsExpr = true - return str, false, nil - } - } - return nil, false, dbterror.ErrDefValGeneratedNamedFunctionIsNotAllowed.GenWithStackByArgs(col.Name.String(), - fmt.Sprintf("%s with disallowed args", expr.FnName.String())) - case ast.JSONObject, ast.JSONArray, ast.JSONQuote: // JSON_OBJECT(), JSON_ARRAY(), JSON_QUOTE() - if err := expression.VerifyArgsWrapper(expr.FnName.L, len(expr.Args)); err != nil { - return nil, false, errors.Trace(err) - } - str, err := restoreFuncCall(expr) - if err != nil { - return nil, false, errors.Trace(err) - } - col.DefaultIsExpr = true - return str, false, nil + var involvingSchemas []model.InvolvingSchemaInfo + sharedInvolvingFromTableInfo := getSharedInvolvingSchemaInfo(tbInfo) - default: - return nil, false, dbterror.ErrDefValGeneratedNamedFunctionIsNotAllowed.GenWithStackByArgs(col.Name.String(), expr.FnName.String()) + if sum := len(involvingRef) + len(sharedInvolvingFromTableInfo); sum > 0 { + involvingSchemas = make([]model.InvolvingSchemaInfo, 0, sum+1) + involvingSchemas = append(involvingSchemas, model.InvolvingSchemaInfo{ + Database: schema.Name.L, + Table: tbInfo.Name.L, + }) + involvingSchemas = append(involvingSchemas, involvingRef...) + involvingSchemas = append(involvingSchemas, sharedInvolvingFromTableInfo...) } -} -// getDefaultValue will get the default value for column. -// 1: get the expr restored string for the column which uses sequence next value as default value. -// 2: get specific default value for the other column. -func getDefaultValue(ctx exprctx.BuildContext, col *table.Column, option *ast.ColumnOption) (any, bool, error) { - // handle default value with function call - tp, fsp := col.FieldType.GetType(), col.FieldType.GetDecimal() - if x, ok := option.Expr.(*ast.FuncCallExpr); ok { - val, isSeqExpr, err := getFuncCallDefaultValue(col, option, x) - if val != nil || isSeqExpr || err != nil { - return val, isSeqExpr, err - } - // If the function call is ast.CurrentTimestamp, it needs to be continuously processed. + job = &model.Job{ + SchemaID: schema.ID, + SchemaName: schema.Name.L, + TableName: tbInfo.Name.L, + Type: actionType, + BinlogInfo: &model.HistoryInfo{}, + Args: args, + CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, + InvolvingSchemaInfo: involvingSchemas, + SQLMode: ctx.GetSessionVars().SQLMode, } + return job, nil +} - if tp == mysql.TypeTimestamp || tp == mysql.TypeDatetime || tp == mysql.TypeDate { - vd, err := expression.GetTimeValue(ctx, option.Expr, tp, fsp, nil) - value := vd.GetValue() - if err != nil { - return nil, false, dbterror.ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) - } - - // Value is nil means `default null`. - if value == nil { - return nil, false, nil - } - - // If value is types.Time, convert it to string. - if vv, ok := value.(types.Time); ok { - return vv.String(), false, nil - } - - return value, false, nil +func getSharedInvolvingSchemaInfo(info *model.TableInfo) []model.InvolvingSchemaInfo { + ret := make([]model.InvolvingSchemaInfo, 0, len(info.ForeignKeys)+1) + for _, fk := range info.ForeignKeys { + ret = append(ret, model.InvolvingSchemaInfo{ + Database: fk.RefSchema.L, + Table: fk.RefTable.L, + Mode: model.SharedInvolving, + }) } - - // evaluate the non-function-call expr to a certain value. - v, err := expression.EvalSimpleAst(ctx, option.Expr) - if err != nil { - return nil, false, errors.Trace(err) + if ref := info.PlacementPolicyRef; ref != nil { + ret = append(ret, model.InvolvingSchemaInfo{ + Policy: ref.Name.L, + Mode: model.SharedInvolving, + }) } + return ret +} - if v.IsNull() { - return nil, false, nil +func (e *executor) createTableWithInfoPost( + ctx sessionctx.Context, + tbInfo *model.TableInfo, + schemaID int64, +) error { + var err error + var partitions []model.PartitionDefinition + if pi := tbInfo.GetPartitionInfo(); pi != nil { + partitions = pi.Definitions } - - if v.Kind() == types.KindBinaryLiteral || v.Kind() == types.KindMysqlBit { - if types.IsTypeBlob(tp) || tp == mysql.TypeJSON || tp == mysql.TypeTiDBVectorFloat32 { - // BLOB/TEXT/JSON column cannot have a default value. - // Skip the unnecessary decode procedure. - return v.GetString(), false, err + preSplitAndScatter(ctx, e.store, tbInfo, partitions) + if tbInfo.AutoIncID > 1 { + // Default tableAutoIncID base is 0. + // If the first ID is expected to greater than 1, we need to do rebase. + newEnd := tbInfo.AutoIncID - 1 + var allocType autoid.AllocatorType + if tbInfo.SepAutoInc() { + allocType = autoid.AutoIncrementType + } else { + allocType = autoid.RowIDAllocType } - if tp == mysql.TypeBit || tp == mysql.TypeString || tp == mysql.TypeVarchar || - tp == mysql.TypeVarString || tp == mysql.TypeEnum || tp == mysql.TypeSet { - // For BinaryLiteral or bit fields, we decode the default value to utf8 string. - str, err := v.GetBinaryStringDecoded(types.StrictFlags, col.GetCharset()) - if err != nil { - // Overwrite the decoding error with invalid default value error. - err = dbterror.ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) - } - return str, false, err + if err = e.handleAutoIncID(tbInfo, schemaID, newEnd, allocType); err != nil { + return errors.Trace(err) } - // For other kind of fields (e.g. INT), we supply its integer as string value. - value, err := v.GetBinaryLiteral().ToInt(ctx.GetEvalCtx().TypeCtx()) - if err != nil { - return nil, false, err + } + // For issue https://github.com/pingcap/tidb/issues/46093 + if tbInfo.AutoIncIDExtra != 0 { + if err = e.handleAutoIncID(tbInfo, schemaID, tbInfo.AutoIncIDExtra-1, autoid.RowIDAllocType); err != nil { + return errors.Trace(err) } - return strconv.FormatUint(value, 10), false, nil } - - switch tp { - case mysql.TypeSet: - val, err := getSetDefaultValue(v, col) - return val, false, err - case mysql.TypeEnum: - val, err := getEnumDefaultValue(v, col) - return val, false, err - case mysql.TypeDuration, mysql.TypeDate: - if v, err = v.ConvertTo(ctx.GetEvalCtx().TypeCtx(), &col.FieldType); err != nil { - return "", false, errors.Trace(err) - } - case mysql.TypeBit: - if v.Kind() == types.KindInt64 || v.Kind() == types.KindUint64 { - // For BIT fields, convert int into BinaryLiteral. - return types.NewBinaryLiteralFromUint(v.GetUint64(), -1).ToString(), false, nil - } - case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong, mysql.TypeFloat, mysql.TypeDouble: - // For these types, convert it to standard format firstly. - // like integer fields, convert it into integer string literals. like convert "1.25" into "1" and "2.8" into "3". - // if raise a error, we will use original expression. We will handle it in check phase - if temp, err := v.ConvertTo(ctx.GetEvalCtx().TypeCtx(), &col.FieldType); err == nil { - v = temp - } - } - - val, err := v.ToString() - return val, false, err -} - -func getSequenceDefaultValue(c *ast.ColumnOption) (expr string, err error) { - var sb strings.Builder - restoreFlags := format.RestoreStringSingleQuotes | format.RestoreKeyWordLowercase | format.RestoreNameBackQuotes | - format.RestoreSpacesAroundBinaryOperation - restoreCtx := format.NewRestoreCtx(restoreFlags, &sb) - if err := c.Expr.Restore(restoreCtx); err != nil { - return "", err + if tbInfo.AutoRandID > 1 { + // Default tableAutoRandID base is 0. + // If the first ID is expected to greater than 1, we need to do rebase. + newEnd := tbInfo.AutoRandID - 1 + err = e.handleAutoIncID(tbInfo, schemaID, newEnd, autoid.AutoRandomType) } - return sb.String(), nil + return err } -// getSetDefaultValue gets the default value for the set type. See https://dev.mysql.com/doc/refman/5.7/en/set.html. -func getSetDefaultValue(v types.Datum, col *table.Column) (string, error) { - if v.Kind() == types.KindInt64 { - setCnt := len(col.GetElems()) - maxLimit := int64(1< maxLimit { - return "", dbterror.ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) - } - setVal, err := types.ParseSetValue(col.GetElems(), uint64(val)) - if err != nil { - return "", errors.Trace(err) - } - v.SetMysqlSet(setVal, col.GetCollate()) - return v.ToString() - } +func (e *executor) CreateTableWithInfo( + ctx sessionctx.Context, + dbName model.CIStr, + tbInfo *model.TableInfo, + involvingRef []model.InvolvingSchemaInfo, + cs ...CreateTableOption, +) (err error) { + c := GetCreateTableConfig(cs) - str, err := v.ToString() + job, err := e.createTableWithInfoJob( + ctx, dbName, tbInfo, involvingRef, c.OnExist, + ) if err != nil { - return "", errors.Trace(err) - } - if str == "" { - return str, nil + return err } - setVal, err := types.ParseSetName(col.GetElems(), str, col.GetCollate()) - if err != nil { - return "", dbterror.ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) + if job == nil { + return nil } - v.SetMysqlSet(setVal, col.GetCollate()) - return v.ToString() -} + jobW := NewJobWrapper(job, c.IDAllocated) -// getEnumDefaultValue gets the default value for the enum type. See https://dev.mysql.com/doc/refman/5.7/en/enum.html. -func getEnumDefaultValue(v types.Datum, col *table.Column) (string, error) { - if v.Kind() == types.KindInt64 { - val := v.GetInt64() - if val < 1 || val > int64(len(col.GetElems())) { - return "", dbterror.ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) - } - enumVal, err := types.ParseEnumValue(col.GetElems(), uint64(val)) - if err != nil { - return "", errors.Trace(err) - } - v.SetMysqlEnum(enumVal, col.GetCollate()) - return v.ToString() - } - str, err := v.ToString() - if err != nil { - return "", errors.Trace(err) - } - // Ref: https://dev.mysql.com/doc/refman/8.0/en/enum.html - // Trailing spaces are automatically deleted from ENUM member values in the table definition when a table is created. - str = strings.TrimRight(str, " ") - enumVal, err := types.ParseEnumName(col.GetElems(), str, col.GetCollate()) + err = e.DoDDLJobWrapper(ctx, jobW) if err != nil { - return "", dbterror.ErrInvalidDefaultValue.GenWithStackByArgs(col.Name.O) + // table exists, but if_not_exists flags is true, so we ignore this error. + if c.OnExist == OnExistIgnore && infoschema.ErrTableExists.Equal(err) { + ctx.GetSessionVars().StmtCtx.AppendNote(err) + err = nil + } + } else { + err = e.createTableWithInfoPost(ctx, tbInfo, job.SchemaID) } - v.SetMysqlEnum(enumVal, col.GetCollate()) - return v.ToString() + return errors.Trace(err) } -func removeOnUpdateNowFlag(c *table.Column) { - // For timestamp Col, if it is set null or default value, - // OnUpdateNowFlag should be removed. - if mysql.HasTimestampFlag(c.GetFlag()) { - c.DelFlag(mysql.OnUpdateNowFlag) - } -} +func (e *executor) BatchCreateTableWithInfo(ctx sessionctx.Context, + dbName model.CIStr, + infos []*model.TableInfo, + cs ...CreateTableOption, +) error { + failpoint.Inject("RestoreBatchCreateTableEntryTooLarge", func(val failpoint.Value) { + injectBatchSize := val.(int) + if len(infos) > injectBatchSize { + failpoint.Return(kv.ErrEntryTooLarge) + } + }) + c := GetCreateTableConfig(cs) -func processDefaultValue(c *table.Column, hasDefaultValue bool, setOnUpdateNow bool) { - setTimestampDefaultValue(c, hasDefaultValue, setOnUpdateNow) + jobW := NewJobWrapper( + &model.Job{ + BinlogInfo: &model.HistoryInfo{}, + CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, + SQLMode: ctx.GetSessionVars().SQLMode, + }, + c.IDAllocated, + ) + args := make([]*model.TableInfo, 0, len(infos)) - setYearDefaultValue(c, hasDefaultValue) + var err error - // Set `NoDefaultValueFlag` if this field doesn't have a default value and - // it is `not null` and not an `AUTO_INCREMENT` field or `TIMESTAMP` field. - setNoDefaultValueFlag(c, hasDefaultValue) -} + // check if there are any duplicated table names + duplication := make(map[string]struct{}) + // TODO filter those duplicated info out. + for _, info := range infos { + if _, ok := duplication[info.Name.L]; ok { + err = infoschema.ErrTableExists.FastGenByArgs("can not batch create tables with same name") + if c.OnExist == OnExistIgnore && infoschema.ErrTableExists.Equal(err) { + ctx.GetSessionVars().StmtCtx.AppendNote(err) + err = nil + } + } + if err != nil { + return errors.Trace(err) + } -func setYearDefaultValue(c *table.Column, hasDefaultValue bool) { - if hasDefaultValue { - return + duplication[info.Name.L] = struct{}{} } - if c.GetType() == mysql.TypeYear && mysql.HasNotNullFlag(c.GetFlag()) { - if err := c.SetDefaultValue("0000"); err != nil { - logutil.DDLLogger().Error("set default value failed", zap.Error(err)) + for _, info := range infos { + job, err := e.createTableWithInfoJob(ctx, dbName, info, nil, c.OnExist) + if err != nil { + return errors.Trace(err) + } + if job == nil { + continue } - } -} -func setTimestampDefaultValue(c *table.Column, hasDefaultValue bool, setOnUpdateNow bool) { - if hasDefaultValue { - return - } + // if jobW.Type == model.ActionCreateTables, it is initialized + // if not, initialize jobW by job.XXXX + if jobW.Type != model.ActionCreateTables { + jobW.Type = model.ActionCreateTables + jobW.SchemaID = job.SchemaID + jobW.SchemaName = job.SchemaName + } - // For timestamp Col, if is not set default value or not set null, use current timestamp. - if mysql.HasTimestampFlag(c.GetFlag()) && mysql.HasNotNullFlag(c.GetFlag()) { - if setOnUpdateNow { - if err := c.SetDefaultValue(types.ZeroDatetimeStr); err != nil { - logutil.DDLLogger().Error("set default value failed", zap.Error(err)) - } - } else { - if err := c.SetDefaultValue(strings.ToUpper(ast.CurrentTimestamp)); err != nil { - logutil.DDLLogger().Error("set default value failed", zap.Error(err)) - } + // append table job args + info, ok := job.Args[0].(*model.TableInfo) + if !ok { + return errors.Trace(fmt.Errorf("except table info")) + } + args = append(args, info) + jobW.InvolvingSchemaInfo = append(jobW.InvolvingSchemaInfo, model.InvolvingSchemaInfo{ + Database: dbName.L, + Table: info.Name.L, + }) + if sharedInv := getSharedInvolvingSchemaInfo(info); len(sharedInv) > 0 { + jobW.InvolvingSchemaInfo = append(jobW.InvolvingSchemaInfo, sharedInv...) } } -} - -func setNoDefaultValueFlag(c *table.Column, hasDefaultValue bool) { - if hasDefaultValue { - return + if len(args) == 0 { + return nil } + jobW.Args = append(jobW.Args, args) + jobW.Args = append(jobW.Args, ctx.GetSessionVars().ForeignKeyChecks) - if !mysql.HasNotNullFlag(c.GetFlag()) { - return + err = e.DoDDLJobWrapper(ctx, jobW) + if err != nil { + // table exists, but if_not_exists flags is true, so we ignore this error. + if c.OnExist == OnExistIgnore && infoschema.ErrTableExists.Equal(err) { + ctx.GetSessionVars().StmtCtx.AppendNote(err) + err = nil + } + return errors.Trace(err) } - // Check if it is an `AUTO_INCREMENT` field or `TIMESTAMP` field. - if !mysql.HasAutoIncrementFlag(c.GetFlag()) && !mysql.HasTimestampFlag(c.GetFlag()) { - c.AddFlag(mysql.NoDefaultValueFlag) + for j := range args { + if err = e.createTableWithInfoPost(ctx, args[j], jobW.SchemaID); err != nil { + return errors.Trace(err) + } } -} -func checkDefaultValue(ctx exprctx.BuildContext, c *table.Column, hasDefaultValue bool) (err error) { - if !hasDefaultValue { + return nil +} + +func (e *executor) CreatePlacementPolicyWithInfo(ctx sessionctx.Context, policy *model.PolicyInfo, onExist OnExist) error { + if checkIgnorePlacementDDL(ctx) { return nil } - if c.GetDefaultValue() != nil { - if c.DefaultIsExpr { - if mysql.HasAutoIncrementFlag(c.GetFlag()) { - return types.ErrInvalidDefault.GenWithStackByArgs(c.Name) - } + policyName := policy.Name + if policyName.L == defaultPlacementPolicyName { + return errors.Trace(infoschema.ErrReservedSyntax.GenWithStackByArgs(policyName)) + } + + // Check policy existence. + _, ok := e.infoCache.GetLatest().PolicyByName(policyName) + if ok { + err := infoschema.ErrPlacementPolicyExists.GenWithStackByArgs(policyName) + switch onExist { + case OnExistIgnore: + ctx.GetSessionVars().StmtCtx.AppendNote(err) return nil + case OnExistError: + return err } - _, err = table.GetColDefaultValue( - exprctx.CtxWithHandleTruncateErrLevel(ctx, errctx.LevelError), - c.ToInfo(), - ) - if err != nil { - return types.ErrInvalidDefault.GenWithStackByArgs(c.Name) - } - return nil } - // Primary key default null is invalid. - if mysql.HasPriKeyFlag(c.GetFlag()) { - return dbterror.ErrPrimaryCantHaveNull + + if err := checkPolicyValidation(policy.PlacementSettings); err != nil { + return err } - // Set not null but default null is invalid. - if mysql.HasNotNullFlag(c.GetFlag()) { - return types.ErrInvalidDefault.GenWithStackByArgs(c.Name) + policyID, err := e.genPlacementPolicyID() + if err != nil { + return err } + policy.ID = policyID - return nil + job := &model.Job{ + SchemaName: policy.Name.L, + Type: model.ActionCreatePlacementPolicy, + BinlogInfo: &model.HistoryInfo{}, + Args: []any{policy, onExist == OnExistReplace}, + InvolvingSchemaInfo: []model.InvolvingSchemaInfo{{ + Policy: policy.Name.L, + }}, + CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, + SQLMode: ctx.GetSessionVars().SQLMode, + } + err = e.DoDDLJob(ctx, job) + return errors.Trace(err) } -// checkPriKeyConstraint check all parts of a PRIMARY KEY must be NOT NULL -func checkPriKeyConstraint(col *table.Column, hasDefaultValue, hasNullFlag bool, outPriKeyConstraint *ast.Constraint) error { - // Primary key should not be null. - if mysql.HasPriKeyFlag(col.GetFlag()) && hasDefaultValue && col.GetDefaultValue() == nil { - return types.ErrInvalidDefault.GenWithStackByArgs(col.Name) +// preSplitAndScatter performs pre-split and scatter of the table's regions. +// If `pi` is not nil, will only split region for `pi`, this is used when add partition. +func preSplitAndScatter(ctx sessionctx.Context, store kv.Storage, tbInfo *model.TableInfo, parts []model.PartitionDefinition) { + if tbInfo.TempTableType != model.TempTableNone { + return } - // Set primary key flag for outer primary key constraint. - // Such as: create table t1 (id int , age int, primary key(id)) - if !mysql.HasPriKeyFlag(col.GetFlag()) && outPriKeyConstraint != nil { - for _, key := range outPriKeyConstraint.Keys { - if key.Expr == nil && key.Column.Name.L != col.Name.L { - continue - } - col.AddFlag(mysql.PriKeyFlag) - break - } + sp, ok := store.(kv.SplittableStore) + if !ok || atomic.LoadUint32(&EnableSplitTableRegion) == 0 { + return + } + var ( + preSplit func() + scatterRegion bool + ) + val, err := ctx.GetSessionVars().GetGlobalSystemVar(context.Background(), variable.TiDBScatterRegion) + if err != nil { + logutil.DDLLogger().Warn("won't scatter region", zap.Error(err)) + } else { + scatterRegion = variable.TiDBOptOn(val) } - // Primary key should not be null. - if mysql.HasPriKeyFlag(col.GetFlag()) && hasNullFlag { - return dbterror.ErrPrimaryCantHaveNull + if len(parts) > 0 { + preSplit = func() { splitPartitionTableRegion(ctx, sp, tbInfo, parts, scatterRegion) } + } else { + preSplit = func() { splitTableRegion(ctx, sp, tbInfo, scatterRegion) } + } + if scatterRegion { + preSplit() + } else { + go preSplit() } - return nil } -func checkColumnValueConstraint(col *table.Column, collation string) error { - if col.GetType() != mysql.TypeEnum && col.GetType() != mysql.TypeSet { - return nil - } - valueMap := make(map[string]bool, len(col.GetElems())) - ctor := collate.GetCollator(collation) - enumLengthLimit := config.GetGlobalConfig().EnableEnumLengthLimit - desc, err := charset.GetCharsetInfo(col.GetCharset()) +func (e *executor) FlashbackCluster(ctx sessionctx.Context, flashbackTS uint64) error { + logutil.DDLLogger().Info("get flashback cluster job", zap.Stringer("flashbackTS", oracle.GetTimeFromTS(flashbackTS))) + nowTS, err := ctx.GetStore().GetOracle().GetTimestamp(e.ctx, &oracle.Option{}) if err != nil { return errors.Trace(err) } - for i := range col.GetElems() { - val := string(ctor.Key(col.GetElems()[i])) - // According to MySQL 8.0 Refman: - // The maximum supported length of an individual ENUM element is M <= 255 and (M x w) <= 1020, - // where M is the element literal length and w is the number of bytes required for the maximum-length character in the character set. - // See https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html for more details. - if enumLengthLimit && (len(val) > 255 || len(val)*desc.Maxlen > 1020) { - return dbterror.ErrTooLongValueForType.GenWithStackByArgs(col.Name) - } - if _, ok := valueMap[val]; ok { - tpStr := "ENUM" - if col.GetType() == mysql.TypeSet { - tpStr = "SET" - } - return types.ErrDuplicatedValueInType.GenWithStackByArgs(col.Name, col.GetElems()[i], tpStr) - } - valueMap[val] = true + gap := time.Until(oracle.GetTimeFromTS(nowTS)).Abs() + if gap > 1*time.Second { + ctx.GetSessionVars().StmtCtx.AppendWarning(errors.NewNoStackErrorf("Gap between local time and PD TSO is %s, please check PD/system time", gap)) } - return nil + job := &model.Job{ + Type: model.ActionFlashbackCluster, + BinlogInfo: &model.HistoryInfo{}, + // The value for global variables is meaningless, it will cover during flashback cluster. + Args: []any{ + flashbackTS, + map[string]any{}, + true, /* tidb_gc_enable */ + variable.On, /* tidb_enable_auto_analyze */ + variable.Off, /* tidb_super_read_only */ + 0, /* totalRegions */ + 0, /* startTS */ + 0, /* commitTS */ + variable.On, /* tidb_ttl_job_enable */ + []kv.KeyRange{} /* flashback key_ranges */}, + CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, + // FLASHBACK CLUSTER affects all schemas and tables. + InvolvingSchemaInfo: []model.InvolvingSchemaInfo{{ + Database: model.InvolvingAll, + Table: model.InvolvingAll, + }}, + SQLMode: ctx.GetSessionVars().SQLMode, + } + err = e.DoDDLJob(ctx, job) + return errors.Trace(err) } -func checkDuplicateColumn(cols []*model.ColumnInfo) error { - colNames := set.StringSet{} - for _, col := range cols { - colName := col.Name - if colNames.Exist(colName.L) { - return infoschema.ErrColumnExists.GenWithStackByArgs(colName.O) - } - colNames.Insert(colName.L) +func (e *executor) RecoverTable(ctx sessionctx.Context, recoverInfo *RecoverInfo) (err error) { + is := e.infoCache.GetLatest() + schemaID, tbInfo := recoverInfo.SchemaID, recoverInfo.TableInfo + // Check schema exist. + schema, ok := is.SchemaByID(schemaID) + if !ok { + return errors.Trace(infoschema.ErrDatabaseNotExists.GenWithStackByArgs( + fmt.Sprintf("(Schema ID %d)", schemaID), + )) + } + // Check not exist table with same name. + if ok := is.TableExists(schema.Name, tbInfo.Name); ok { + return infoschema.ErrTableExists.GenWithStackByArgs(tbInfo.Name) } - return nil -} -func containsColumnOption(colDef *ast.ColumnDef, opTp ast.ColumnOptionType) bool { - for _, option := range colDef.Options { - if option.Tp == opTp { - return true + // for "flashback table xxx to yyy" + // Note: this case only allow change table name, schema remains the same. + var involvedSchemas []model.InvolvingSchemaInfo + if recoverInfo.OldTableName != tbInfo.Name.L { + involvedSchemas = []model.InvolvingSchemaInfo{ + {Database: schema.Name.L, Table: recoverInfo.OldTableName}, + {Database: schema.Name.L, Table: tbInfo.Name.L}, } } - return false -} -// IsAutoRandomColumnID returns true if the given column ID belongs to an auto_random column. -func IsAutoRandomColumnID(tblInfo *model.TableInfo, colID int64) bool { - if !tblInfo.ContainsAutoRandomBits() { - return false - } - if tblInfo.PKIsHandle { - return tblInfo.GetPkColInfo().ID == colID - } else if tblInfo.IsCommonHandle { - pk := tables.FindPrimaryIndex(tblInfo) - if pk == nil { - return false - } - offset := pk.Columns[0].Offset - return tblInfo.Columns[offset].ID == colID + tbInfo.State = model.StateNone + job := &model.Job{ + SchemaID: schemaID, + TableID: tbInfo.ID, + SchemaName: schema.Name.L, + TableName: tbInfo.Name.L, + + Type: model.ActionRecoverTable, + BinlogInfo: &model.HistoryInfo{}, + Args: []any{recoverInfo, recoverCheckFlagNone}, + InvolvingSchemaInfo: involvedSchemas, + CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, + SQLMode: ctx.GetSessionVars().SQLMode, } - return false + err = e.DoDDLJob(ctx, job) + return errors.Trace(err) } -func checkGeneratedColumn(ctx sessionctx.Context, schemaName model.CIStr, tableName model.CIStr, colDefs []*ast.ColumnDef) error { - var colName2Generation = make(map[string]columnGenerationInDDL, len(colDefs)) - var exists bool - var autoIncrementColumn string - for i, colDef := range colDefs { - for _, option := range colDef.Options { - if option.Tp == ast.ColumnOptionGenerated { - if err := checkIllegalFn4Generated(colDef.Name.Name.L, typeColumn, option.Expr); err != nil { - return errors.Trace(err) - } - } - } - if containsColumnOption(colDef, ast.ColumnOptionAutoIncrement) { - exists, autoIncrementColumn = true, colDef.Name.Name.L - } - generated, depCols, err := findDependedColumnNames(schemaName, tableName, colDef) - if err != nil { - return errors.Trace(err) - } - if !generated { - colName2Generation[colDef.Name.Name.L] = columnGenerationInDDL{ - position: i, - generated: false, - } - } else { - colName2Generation[colDef.Name.Name.L] = columnGenerationInDDL{ - position: i, - generated: true, - dependences: depCols, - } - } +func (e *executor) CreateView(ctx sessionctx.Context, s *ast.CreateViewStmt) (err error) { + viewInfo, err := BuildViewInfo(s) + if err != nil { + return err } - // Check whether the generated column refers to any auto-increment columns - if exists { - if !ctx.GetSessionVars().EnableAutoIncrementInGenerated { - for colName, generated := range colName2Generation { - if _, found := generated.dependences[autoIncrementColumn]; found { - return dbterror.ErrGeneratedColumnRefAutoInc.GenWithStackByArgs(colName) - } - } - } + cols := make([]*table.Column, len(s.Cols)) + for i, v := range s.Cols { + cols[i] = table.ToColumn(&model.ColumnInfo{ + Name: v, + ID: int64(i), + Offset: i, + State: model.StatePublic, + }) } - for _, colDef := range colDefs { - colName := colDef.Name.Name.L - if err := verifyColumnGeneration(colName2Generation, colName); err != nil { - return errors.Trace(err) - } + tblCharset := "" + tblCollate := "" + if v, ok := ctx.GetSessionVars().GetSystemVar(variable.CharacterSetConnection); ok { + tblCharset = v } - return nil -} - -func checkTooLongColumns(cols []*model.ColumnInfo) error { - for _, col := range cols { - if err := checkTooLongColumn(col.Name); err != nil { - return err - } + if v, ok := ctx.GetSessionVars().GetSystemVar(variable.CollationConnection); ok { + tblCollate = v } - return nil -} -func checkTooManyColumns(colDefs []*model.ColumnInfo) error { - if uint32(len(colDefs)) > atomic.LoadUint32(&config.GetGlobalConfig().TableColumnCountLimit) { - return dbterror.ErrTooManyFields + tbInfo, err := BuildTableInfo(ctx, s.ViewName.Name, cols, nil, tblCharset, tblCollate) + if err != nil { + return err } - return nil -} + tbInfo.View = viewInfo -func checkTooManyIndexes(idxDefs []*model.IndexInfo) error { - if len(idxDefs) > config.GetGlobalConfig().IndexLimit { - return dbterror.ErrTooManyKeys.GenWithStackByArgs(config.GetGlobalConfig().IndexLimit) + onExist := OnExistError + if s.OrReplace { + onExist = OnExistReplace } - return nil + + return e.CreateTableWithInfo(ctx, s.ViewName.Schema, tbInfo, nil, WithOnExist(onExist)) } -// checkColumnsAttributes checks attributes for multiple columns. -func checkColumnsAttributes(colDefs []*model.ColumnInfo) error { - for _, colDef := range colDefs { - if err := checkColumnAttributes(colDef.Name.O, &colDef.FieldType); err != nil { +func checkCharsetAndCollation(cs string, co string) error { + if !charset.ValidCharsetAndCollation(cs, co) { + return dbterror.ErrUnknownCharacterSet.GenWithStackByArgs(cs) + } + if co != "" { + if _, err := collate.GetCollationByName(co); err != nil { return errors.Trace(err) } } return nil } -func checkColumnFieldLength(col *table.Column) error { - if col.GetType() == mysql.TypeVarchar { - if err := types.IsVarcharTooBigFieldLength(col.GetFlen(), col.Name.O, col.GetCharset()); err != nil { +// handleAutoIncID handles auto_increment option in DDL. It creates a ID counter for the table and initiates the counter to a proper value. +// For example if the option sets auto_increment to 10. The counter will be set to 9. So the next allocated ID will be 10. +func (e *executor) handleAutoIncID(tbInfo *model.TableInfo, schemaID int64, newEnd int64, tp autoid.AllocatorType) error { + allocs := autoid.NewAllocatorsFromTblInfo(e.getAutoIDRequirement(), schemaID, tbInfo) + if alloc := allocs.Get(tp); alloc != nil { + err := alloc.Rebase(context.Background(), newEnd, false) + if err != nil { return errors.Trace(err) } } - return nil } -// checkColumnAttributes check attributes for single column. -func checkColumnAttributes(colName string, tp *types.FieldType) error { - switch tp.GetType() { - case mysql.TypeNewDecimal, mysql.TypeDouble, mysql.TypeFloat: - if tp.GetFlen() < tp.GetDecimal() { - return types.ErrMBiggerThanD.GenWithStackByArgs(colName) - } - case mysql.TypeDatetime, mysql.TypeDuration, mysql.TypeTimestamp: - if tp.GetDecimal() != types.UnspecifiedFsp && (tp.GetDecimal() < types.MinFsp || tp.GetDecimal() > types.MaxFsp) { - return types.ErrTooBigPrecision.GenWithStackByArgs(tp.GetDecimal(), colName, types.MaxFsp) - } +// TODO we can unify this part with ddlCtx. +func (e *executor) getAutoIDRequirement() autoid.Requirement { + return &asAutoIDRequirement{ + store: e.store, + autoidCli: e.autoidCli, } - return nil } -func checkDuplicateConstraint(namesMap map[string]bool, name string, constraintType ast.ConstraintType) error { - if name == "" { - return nil - } - nameLower := strings.ToLower(name) - if namesMap[nameLower] { - switch constraintType { - case ast.ConstraintForeignKey: - return dbterror.ErrFkDupName.GenWithStackByArgs(name) - case ast.ConstraintCheck: - return dbterror.ErrCheckConstraintDupName.GenWithStackByArgs(name) - default: - return dbterror.ErrDupKeyName.GenWithStackByArgs(name) - } +func shardingBits(tblInfo *model.TableInfo) uint64 { + if tblInfo.ShardRowIDBits > 0 { + return tblInfo.ShardRowIDBits } - namesMap[nameLower] = true - return nil + return tblInfo.AutoRandomBits } -func setEmptyCheckConstraintName(tableLowerName string, namesMap map[string]bool, constrs []*ast.Constraint) { - cnt := 1 - constraintPrefix := tableLowerName + "_chk_" - for _, constr := range constrs { - if constr.Name == "" { - constrName := fmt.Sprintf("%s%d", constraintPrefix, cnt) - for { - // loop until find constrName that haven't been used. - if !namesMap[constrName] { - namesMap[constrName] = true - break - } - cnt++ - constrName = fmt.Sprintf("%s%d", constraintPrefix, cnt) - } - constr.Name = constrName - } - } -} - -func setEmptyConstraintName(namesMap map[string]bool, constr *ast.Constraint) { - if constr.Name == "" && len(constr.Keys) > 0 { - var colName string - for _, keyPart := range constr.Keys { - if keyPart.Expr != nil { - colName = "expression_index" - } - } - if colName == "" { - colName = constr.Keys[0].Column.Name.O - } - constrName := colName - i := 2 - if strings.EqualFold(constrName, mysql.PrimaryKeyName) { - constrName = fmt.Sprintf("%s_%d", constrName, 2) - i = 3 - } - for namesMap[constrName] { - // We loop forever until we find constrName that haven't been used. - constrName = fmt.Sprintf("%s_%d", colName, i) - i++ - } - constr.Name = constrName - namesMap[constrName] = true - } +// isIgnorableSpec checks if the spec type is ignorable. +// Some specs are parsed by ignored. This is for compatibility. +func isIgnorableSpec(tp ast.AlterTableType) bool { + // AlterTableLock/AlterTableAlgorithm are ignored. + return tp == ast.AlterTableLock || tp == ast.AlterTableAlgorithm } -func checkConstraintNames(tableName model.CIStr, constraints []*ast.Constraint) error { - constrNames := map[string]bool{} - fkNames := map[string]bool{} - - // Check not empty constraint name whether is duplicated. - for _, constr := range constraints { - if constr.Tp == ast.ConstraintForeignKey { - err := checkDuplicateConstraint(fkNames, constr.Name, constr.Tp) - if err != nil { - return errors.Trace(err) - } - } else { - err := checkDuplicateConstraint(constrNames, constr.Name, constr.Tp) +// GetCharsetAndCollateInTableOption will iterate the charset and collate in the options, +// and returns the last charset and collate in options. If there is no charset in the options, +// the returns charset will be "", the same as collate. +func GetCharsetAndCollateInTableOption(sessVars *variable.SessionVars, startIdx int, options []*ast.TableOption) (chs, coll string, err error) { + for i := startIdx; i < len(options); i++ { + opt := options[i] + // we set the charset to the last option. example: alter table t charset latin1 charset utf8 collate utf8_bin; + // the charset will be utf8, collate will be utf8_bin + switch opt.Tp { + case ast.TableOptionCharset: + info, err := charset.GetCharsetInfo(opt.StrValue) if err != nil { - return errors.Trace(err) + return "", "", err } - } - } - - // Set empty constraint names. - checkConstraints := make([]*ast.Constraint, 0, len(constraints)) - for _, constr := range constraints { - if constr.Tp != ast.ConstraintForeignKey { - setEmptyConstraintName(constrNames, constr) - } - if constr.Tp == ast.ConstraintCheck { - checkConstraints = append(checkConstraints, constr) - } - } - // Set check constraint name under its order. - if len(checkConstraints) > 0 { - setEmptyCheckConstraintName(tableName.L, constrNames, checkConstraints) - } - return nil -} - -// checkInvisibleIndexOnPK check if primary key is invisible index. -// Note: PKIsHandle == true means the table already has a visible primary key, -// we do not need do a check for this case and return directly, -// because whether primary key is invisible has been check when creating table. -func checkInvisibleIndexOnPK(tblInfo *model.TableInfo) error { - if tblInfo.PKIsHandle { - return nil - } - pk := tblInfo.GetPrimaryKey() - if pk != nil && pk.Invisible { - return dbterror.ErrPKIndexCantBeInvisible - } - return nil -} - -func setTableAutoRandomBits(ctx sessionctx.Context, tbInfo *model.TableInfo, colDefs []*ast.ColumnDef) error { - for _, col := range colDefs { - if containsColumnOption(col, ast.ColumnOptionAutoRandom) { - if col.Tp.GetType() != mysql.TypeLonglong { - return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs( - fmt.Sprintf(autoid.AutoRandomOnNonBigIntColumn, types.TypeStr(col.Tp.GetType()))) + if len(chs) == 0 { + chs = info.Name + } else if chs != info.Name { + return "", "", dbterror.ErrConflictingDeclarations.GenWithStackByArgs(chs, info.Name) } - switch { - case tbInfo.PKIsHandle: - if tbInfo.GetPkName().L != col.Name.Name.L { - errMsg := fmt.Sprintf(autoid.AutoRandomMustFirstColumnInPK, col.Name.Name.O) - return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(errMsg) - } - case tbInfo.IsCommonHandle: - pk := tables.FindPrimaryIndex(tbInfo) - if pk == nil { - return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomNoClusteredPKErrMsg) + if len(coll) == 0 { + defaultColl, err := getDefaultCollationForUTF8MB4(sessVars, chs) + if err != nil { + return "", "", errors.Trace(err) } - if col.Name.Name.L != pk.Columns[0].Name.L { - errMsg := fmt.Sprintf(autoid.AutoRandomMustFirstColumnInPK, col.Name.Name.O) - return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(errMsg) + if len(defaultColl) == 0 { + coll = info.DefaultCollation + } else { + coll = defaultColl } - default: - return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomNoClusteredPKErrMsg) - } - - if containsColumnOption(col, ast.ColumnOptionAutoIncrement) { - return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomIncompatibleWithAutoIncErrMsg) - } - if containsColumnOption(col, ast.ColumnOptionDefaultValue) { - return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomIncompatibleWithDefaultValueErrMsg) } - - shardBits, rangeBits, err := extractAutoRandomBitsFromColDef(col) + case ast.TableOptionCollate: + info, err := collate.GetCollationByName(opt.StrValue) if err != nil { - return errors.Trace(err) + return "", "", err } - tbInfo.AutoRandomBits = shardBits - tbInfo.AutoRandomRangeBits = rangeBits - - shardFmt := autoid.NewShardIDFormat(col.Tp, shardBits, rangeBits) - if shardFmt.IncrementalBits < autoid.AutoRandomIncBitsMin { - return dbterror.ErrInvalidAutoRandom.FastGenByArgs(autoid.AutoRandomIncrementalBitsTooSmall) + if len(chs) == 0 { + chs = info.CharsetName + } else if chs != info.CharsetName { + return "", "", dbterror.ErrCollationCharsetMismatch.GenWithStackByArgs(info.Name, chs) } - msg := fmt.Sprintf(autoid.AutoRandomAvailableAllocTimesNote, shardFmt.IncrementalBitsCapacity()) - ctx.GetSessionVars().StmtCtx.AppendNote(errors.NewNoStackError(msg)) + coll = info.Name } } - return nil + return } -func extractAutoRandomBitsFromColDef(colDef *ast.ColumnDef) (shardBits, rangeBits uint64, err error) { - for _, op := range colDef.Options { - if op.Tp == ast.ColumnOptionAutoRandom { - shardBits, err = autoid.AutoRandomShardBitsNormalize(op.AutoRandOpt.ShardBits, colDef.Name.Name.O) - if err != nil { - return 0, 0, err - } - rangeBits, err = autoid.AutoRandomRangeBitsNormalize(op.AutoRandOpt.RangeBits) - if err != nil { - return 0, 0, err - } - return shardBits, rangeBits, nil +// NeedToOverwriteColCharset return true for altering charset and specified CONVERT TO. +func NeedToOverwriteColCharset(options []*ast.TableOption) bool { + for i := len(options) - 1; i >= 0; i-- { + opt := options[i] + if opt.Tp == ast.TableOptionCharset { + // Only overwrite columns charset if the option contains `CONVERT TO`. + return opt.UintValue == ast.TableOptionCharsetWithConvertTo } } - return 0, 0, nil + return false } -// BuildTableInfo creates a TableInfo. -func BuildTableInfo( - ctx sessionctx.Context, - tableName model.CIStr, - cols []*table.Column, - constraints []*ast.Constraint, - charset string, - collate string, -) (tbInfo *model.TableInfo, err error) { - tbInfo = &model.TableInfo{ - Name: tableName, - Version: model.CurrLatestTableInfoVersion, - Charset: charset, - Collate: collate, - } - tblColumns := make([]*table.Column, 0, len(cols)) - existedColsMap := make(map[string]struct{}, len(cols)) - for _, v := range cols { - v.ID = AllocateColumnID(tbInfo) - tbInfo.Columns = append(tbInfo.Columns, v.ToInfo()) - tblColumns = append(tblColumns, table.ToColumn(v.ToInfo())) - existedColsMap[v.Name.L] = struct{}{} +// resolveAlterTableAddColumns splits "add columns" to multiple spec. For example, +// `ALTER TABLE ADD COLUMN (c1 INT, c2 INT)` is split into +// `ALTER TABLE ADD COLUMN c1 INT, ADD COLUMN c2 INT`. +func resolveAlterTableAddColumns(spec *ast.AlterTableSpec) []*ast.AlterTableSpec { + specs := make([]*ast.AlterTableSpec, 0, len(spec.NewColumns)+len(spec.NewConstraints)) + for _, col := range spec.NewColumns { + t := *spec + t.NewColumns = []*ast.ColumnDef{col} + t.NewConstraints = []*ast.Constraint{} + specs = append(specs, &t) } - foreignKeyID := tbInfo.MaxForeignKeyID - for _, constr := range constraints { - // Build hidden columns if necessary. - hiddenCols, err := buildHiddenColumnInfoWithCheck(ctx, constr.Keys, model.NewCIStr(constr.Name), tbInfo, tblColumns) - if err != nil { - return nil, err - } - for _, hiddenCol := range hiddenCols { - hiddenCol.State = model.StatePublic - hiddenCol.ID = AllocateColumnID(tbInfo) - hiddenCol.Offset = len(tbInfo.Columns) - tbInfo.Columns = append(tbInfo.Columns, hiddenCol) - tblColumns = append(tblColumns, table.ToColumn(hiddenCol)) - } - // Check clustered on non-primary key. - if constr.Option != nil && constr.Option.PrimaryKeyTp != model.PrimaryKeyTypeDefault && - constr.Tp != ast.ConstraintPrimaryKey { - return nil, dbterror.ErrUnsupportedClusteredSecondaryKey - } - if constr.Tp == ast.ConstraintForeignKey { - var fkName model.CIStr - foreignKeyID++ - if constr.Name != "" { - fkName = model.NewCIStr(constr.Name) - } else { - fkName = model.NewCIStr(fmt.Sprintf("fk_%d", foreignKeyID)) - } - if model.FindFKInfoByName(tbInfo.ForeignKeys, fkName.L) != nil { - return nil, infoschema.ErrCannotAddForeign - } - fk, err := buildFKInfo(fkName, constr.Keys, constr.Refer, cols) - if err != nil { - return nil, err - } - fk.State = model.StatePublic - - tbInfo.ForeignKeys = append(tbInfo.ForeignKeys, fk) - continue - } - if constr.Tp == ast.ConstraintPrimaryKey { - lastCol, err := CheckPKOnGeneratedColumn(tbInfo, constr.Keys) - if err != nil { - return nil, err - } - isSingleIntPK := isSingleIntPK(constr, lastCol) - if ShouldBuildClusteredIndex(ctx, constr.Option, isSingleIntPK) { - if isSingleIntPK { - tbInfo.PKIsHandle = true - } else { - tbInfo.IsCommonHandle = true - tbInfo.CommonHandleVersion = 1 - } - } - if tbInfo.HasClusteredIndex() { - // Primary key cannot be invisible. - if constr.Option != nil && constr.Option.Visibility == ast.IndexVisibilityInvisible { - return nil, dbterror.ErrPKIndexCantBeInvisible - } - } - if tbInfo.PKIsHandle { - continue - } - } - - if constr.Tp == ast.ConstraintFulltext { - ctx.GetSessionVars().StmtCtx.AppendWarning(dbterror.ErrTableCantHandleFt.FastGenByArgs()) - continue - } - - var ( - indexName = constr.Name - primary, unique bool - ) - - // Check if the index is primary or unique. - switch constr.Tp { - case ast.ConstraintPrimaryKey: - primary = true - unique = true - indexName = mysql.PrimaryKeyName - case ast.ConstraintUniq, ast.ConstraintUniqKey, ast.ConstraintUniqIndex: - unique = true - } - - // check constraint - if constr.Tp == ast.ConstraintCheck { - if !variable.EnableCheckConstraint.Load() { - ctx.GetSessionVars().StmtCtx.AppendWarning(errCheckConstraintIsOff) - continue - } - // Since column check constraint dependency has been done in columnDefToCol. - // Here do the table check constraint dependency check, table constraint - // can only refer the columns in defined columns of the table. - // Refer: https://dev.mysql.com/doc/refman/8.0/en/create-table-check-constraints.html - if ok, err := table.IsSupportedExpr(constr); !ok { - return nil, err - } - var dependedCols []model.CIStr - dependedColsMap := findDependentColsInExpr(constr.Expr) - if !constr.InColumn { - dependedCols = make([]model.CIStr, 0, len(dependedColsMap)) - for k := range dependedColsMap { - if _, ok := existedColsMap[k]; !ok { - // The table constraint depended on a non-existed column. - return nil, dbterror.ErrTableCheckConstraintReferUnknown.GenWithStackByArgs(constr.Name, k) - } - dependedCols = append(dependedCols, model.NewCIStr(k)) - } - } else { - // Check the column-type constraint dependency. - if len(dependedColsMap) > 1 { - return nil, dbterror.ErrColumnCheckConstraintReferOther.GenWithStackByArgs(constr.Name) - } else if len(dependedColsMap) == 0 { - // If dependedCols is empty, the expression must be true/false. - valExpr, ok := constr.Expr.(*driver.ValueExpr) - if !ok || !mysql.HasIsBooleanFlag(valExpr.GetType().GetFlag()) { - return nil, errors.Trace(errors.New("unsupported expression in check constraint")) - } - } else { - if _, ok := dependedColsMap[constr.InColumnName]; !ok { - return nil, dbterror.ErrColumnCheckConstraintReferOther.GenWithStackByArgs(constr.Name) - } - dependedCols = []model.CIStr{model.NewCIStr(constr.InColumnName)} - } - } - // check auto-increment column - if table.ContainsAutoIncrementCol(dependedCols, tbInfo) { - return nil, dbterror.ErrCheckConstraintRefersAutoIncrementColumn.GenWithStackByArgs(constr.Name) - } - // check foreign key - if err := table.HasForeignKeyRefAction(tbInfo.ForeignKeys, constraints, constr, dependedCols); err != nil { - return nil, err - } - // build constraint meta info. - constraintInfo, err := buildConstraintInfo(tbInfo, dependedCols, constr, model.StatePublic) - if err != nil { - return nil, errors.Trace(err) - } - // check if the expression is bool type - if err := table.IfCheckConstraintExprBoolType(ctx.GetExprCtx().GetEvalCtx(), constraintInfo, tbInfo); err != nil { - return nil, err - } - constraintInfo.ID = allocateConstraintID(tbInfo) - tbInfo.Constraints = append(tbInfo.Constraints, constraintInfo) - continue - } - - // build index info. - idxInfo, err := BuildIndexInfo( - ctx, - tbInfo.Columns, - model.NewCIStr(indexName), - primary, - unique, - false, - constr.Keys, - constr.Option, - model.StatePublic, - ) - if err != nil { - return nil, errors.Trace(err) - } - - if len(hiddenCols) > 0 { - AddIndexColumnFlag(tbInfo, idxInfo) - } - sessionVars := ctx.GetSessionVars() - _, err = validateCommentLength(sessionVars.StmtCtx.ErrCtx(), sessionVars.SQLMode, idxInfo.Name.String(), &idxInfo.Comment, dbterror.ErrTooLongIndexComment) - if err != nil { - return nil, errors.Trace(err) - } - idxInfo.ID = AllocateIndexID(tbInfo) - tbInfo.Indices = append(tbInfo.Indices, idxInfo) + // Split the add constraints from AlterTableSpec. + for _, con := range spec.NewConstraints { + t := *spec + t.NewColumns = []*ast.ColumnDef{} + t.NewConstraints = []*ast.Constraint{} + t.Constraint = con + t.Tp = ast.AlterTableAddConstraint + specs = append(specs, &t) } - - err = addIndexForForeignKey(ctx, tbInfo) - return tbInfo, err + return specs } -// addIndexForForeignKey uses to auto create an index for the foreign key if the table doesn't have any index cover the -// foreign key columns. -func addIndexForForeignKey(ctx sessionctx.Context, tbInfo *model.TableInfo) error { - if len(tbInfo.ForeignKeys) == 0 { - return nil - } - var handleCol *model.ColumnInfo - if tbInfo.PKIsHandle { - handleCol = tbInfo.GetPkColInfo() - } - for _, fk := range tbInfo.ForeignKeys { - if fk.Version < model.FKVersion1 { - continue - } - if handleCol != nil && len(fk.Cols) == 1 && handleCol.Name.L == fk.Cols[0].L { - continue +// ResolveAlterTableSpec resolves alter table algorithm and removes ignore table spec in specs. +// returns valid specs, and the occurred error. +func ResolveAlterTableSpec(ctx sessionctx.Context, specs []*ast.AlterTableSpec) ([]*ast.AlterTableSpec, error) { + validSpecs := make([]*ast.AlterTableSpec, 0, len(specs)) + algorithm := ast.AlgorithmTypeDefault + for _, spec := range specs { + if spec.Tp == ast.AlterTableAlgorithm { + // Find the last AlterTableAlgorithm. + algorithm = spec.Algorithm } - if model.FindIndexByColumns(tbInfo, tbInfo.Indices, fk.Cols...) != nil { + if isIgnorableSpec(spec.Tp) { continue } - idxName := fk.Name - if tbInfo.FindIndexByName(idxName.L) != nil { - return dbterror.ErrDupKeyName.GenWithStack("duplicate key name %s", fk.Name.O) - } - keys := make([]*ast.IndexPartSpecification, 0, len(fk.Cols)) - for _, col := range fk.Cols { - keys = append(keys, &ast.IndexPartSpecification{ - Column: &ast.ColumnName{Name: col}, - Length: types.UnspecifiedLength, - }) - } - idxInfo, err := BuildIndexInfo(ctx, tbInfo.Columns, idxName, false, false, false, keys, nil, model.StatePublic) - if err != nil { - return errors.Trace(err) + if spec.Tp == ast.AlterTableAddColumns && (len(spec.NewColumns) > 1 || len(spec.NewConstraints) > 0) { + validSpecs = append(validSpecs, resolveAlterTableAddColumns(spec)...) + } else { + validSpecs = append(validSpecs, spec) } - idxInfo.ID = AllocateIndexID(tbInfo) - tbInfo.Indices = append(tbInfo.Indices, idxInfo) + // TODO: Only allow REMOVE PARTITIONING as a single ALTER TABLE statement? } - return nil -} -func indexColumnsLen(cols []*model.ColumnInfo, idxCols []*model.IndexColumn) (colLen int, err error) { - for _, idxCol := range idxCols { - col := model.FindColumnInfo(cols, idxCol.Name.L) - if col == nil { - err = dbterror.ErrKeyColumnDoesNotExits.GenWithStack("column does not exist: %s", idxCol.Name.L) - return - } - var l int - l, err = getIndexColumnLength(col, idxCol.Length) + // Verify whether the algorithm is supported. + for _, spec := range validSpecs { + resolvedAlgorithm, err := ResolveAlterAlgorithm(spec, algorithm) if err != nil { - return + // If TiDB failed to choose a better algorithm, report the error + if resolvedAlgorithm == ast.AlgorithmTypeDefault { + return nil, errors.Trace(err) + } + // For the compatibility, we return warning instead of error when a better algorithm is chosed by TiDB + ctx.GetSessionVars().StmtCtx.AppendError(err) } - colLen += l + + spec.Algorithm = resolvedAlgorithm } - return + + // Only handle valid specs. + return validSpecs, nil } -func isSingleIntPK(constr *ast.Constraint, lastCol *model.ColumnInfo) bool { - if len(constr.Keys) != 1 { - return false +func isMultiSchemaChanges(specs []*ast.AlterTableSpec) bool { + if len(specs) > 1 { + return true } - switch lastCol.GetType() { - case mysql.TypeLong, mysql.TypeLonglong, - mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24: + if len(specs) == 1 && len(specs[0].NewColumns) > 1 && specs[0].Tp == ast.AlterTableAddColumns { return true } return false } -// ShouldBuildClusteredIndex is used to determine whether the CREATE TABLE statement should build a clustered index table. -func ShouldBuildClusteredIndex(ctx sessionctx.Context, opt *ast.IndexOption, isSingleIntPK bool) bool { - if opt == nil || opt.PrimaryKeyTp == model.PrimaryKeyTypeDefault { - switch ctx.GetSessionVars().EnableClusteredIndex { - case variable.ClusteredIndexDefModeOn: - return true - case variable.ClusteredIndexDefModeIntOnly: - return !config.GetGlobalConfig().AlterPrimaryKey && isSingleIntPK - default: - return false - } - } - return opt.PrimaryKeyTp == model.PrimaryKeyTypeClustered -} - -// checkTableInfoValidExtra is like checkTableInfoValid, but also assumes the -// table info comes from untrusted source and performs further checks such as -// name length and column count. -// (checkTableInfoValid is also used in repairing objects which don't perform -// these checks. Perhaps the two functions should be merged together regardless?) -func checkTableInfoValidExtra(tbInfo *model.TableInfo) error { - if err := checkTooLongTable(tbInfo.Name); err != nil { - return err +func (e *executor) AlterTable(ctx context.Context, sctx sessionctx.Context, stmt *ast.AlterTableStmt) (err error) { + ident := ast.Ident{Schema: stmt.Table.Schema, Name: stmt.Table.Name} + validSpecs, err := ResolveAlterTableSpec(sctx, stmt.Specs) + if err != nil { + return errors.Trace(err) } - if err := checkDuplicateColumn(tbInfo.Columns); err != nil { - return err - } - if err := checkTooLongColumns(tbInfo.Columns); err != nil { - return err - } - if err := checkTooManyColumns(tbInfo.Columns); err != nil { - return errors.Trace(err) - } - if err := checkTooManyIndexes(tbInfo.Indices); err != nil { - return errors.Trace(err) - } - if err := checkColumnsAttributes(tbInfo.Columns); err != nil { - return errors.Trace(err) - } - - // FIXME: perform checkConstraintNames - if err := checkCharsetAndCollation(tbInfo.Charset, tbInfo.Collate); err != nil { - return errors.Trace(err) - } - - oldState := tbInfo.State - tbInfo.State = model.StatePublic - err := checkTableInfoValid(tbInfo) - tbInfo.State = oldState - return err -} - -// CheckTableInfoValidWithStmt exposes checkTableInfoValidWithStmt to SchemaTracker. Maybe one day we can delete it. -func CheckTableInfoValidWithStmt(ctx sessionctx.Context, tbInfo *model.TableInfo, s *ast.CreateTableStmt) (err error) { - return checkTableInfoValidWithStmt(ctx, tbInfo, s) -} - -func checkTableInfoValidWithStmt(ctx sessionctx.Context, tbInfo *model.TableInfo, s *ast.CreateTableStmt) (err error) { - // All of these rely on the AST structure of expressions, which were - // lost in the model (got serialized into strings). - if err := checkGeneratedColumn(ctx, s.Table.Schema, tbInfo.Name, s.Cols); err != nil { - return errors.Trace(err) - } - - // Check if table has a primary key if required. - if !ctx.GetSessionVars().InRestrictedSQL && ctx.GetSessionVars().PrimaryKeyRequired && len(tbInfo.GetPkName().String()) == 0 { - return infoschema.ErrTableWithoutPrimaryKey - } - if tbInfo.Partition != nil { - if err := checkPartitionDefinitionConstraints(ctx, tbInfo); err != nil { - return errors.Trace(err) - } - if s.Partition != nil { - if err := checkPartitionFuncType(ctx, s.Partition.Expr, s.Table.Schema.O, tbInfo); err != nil { - return errors.Trace(err) - } - if err := checkPartitioningKeysConstraints(ctx, s, tbInfo); err != nil { - return errors.Trace(err) - } - } - } - if tbInfo.TTLInfo != nil { - if err := checkTTLInfoValid(ctx, s.Table.Schema, tbInfo); err != nil { - return errors.Trace(err) - } - } - - return nil -} - -func checkPartitionDefinitionConstraints(ctx sessionctx.Context, tbInfo *model.TableInfo) error { - var err error - if err = checkPartitionNameUnique(tbInfo.Partition); err != nil { - return errors.Trace(err) - } - if err = checkAddPartitionTooManyPartitions(uint64(len(tbInfo.Partition.Definitions))); err != nil { - return err - } - if err = checkAddPartitionOnTemporaryMode(tbInfo); err != nil { - return err - } - if err = checkPartitionColumnsUnique(tbInfo); err != nil { - return err - } - - switch tbInfo.Partition.Type { - case model.PartitionTypeRange: - err = checkPartitionByRange(ctx, tbInfo) - case model.PartitionTypeHash, model.PartitionTypeKey: - err = checkPartitionByHash(ctx, tbInfo) - case model.PartitionTypeList: - err = checkPartitionByList(ctx, tbInfo) - } - return errors.Trace(err) -} - -// checkTableInfoValid uses to check table info valid. This is used to validate table info. -func checkTableInfoValid(tblInfo *model.TableInfo) error { - _, err := tables.TableFromMeta(autoid.NewAllocators(false), tblInfo) - if err != nil { - return err - } - return checkInvisibleIndexOnPK(tblInfo) -} - -// BuildTableInfoWithLike builds a new table info according to CREATE TABLE ... LIKE statement. -func BuildTableInfoWithLike(ctx sessionctx.Context, ident ast.Ident, referTblInfo *model.TableInfo, s *ast.CreateTableStmt) (*model.TableInfo, error) { - // Check the referred table is a real table object. - if referTblInfo.IsSequence() || referTblInfo.IsView() { - return nil, dbterror.ErrWrongObject.GenWithStackByArgs(ident.Schema, referTblInfo.Name, "BASE TABLE") - } - tblInfo := *referTblInfo - if err := setTemporaryType(ctx, &tblInfo, s); err != nil { - return nil, errors.Trace(err) - } - // Check non-public column and adjust column offset. - newColumns := referTblInfo.Cols() - newIndices := make([]*model.IndexInfo, 0, len(tblInfo.Indices)) - for _, idx := range tblInfo.Indices { - if idx.State == model.StatePublic { - newIndices = append(newIndices, idx) - } - } - tblInfo.Columns = newColumns - tblInfo.Indices = newIndices - tblInfo.Name = ident.Name - tblInfo.AutoIncID = 0 - tblInfo.ForeignKeys = nil - // Ignore TiFlash replicas for temporary tables. - if s.TemporaryKeyword != ast.TemporaryNone { - tblInfo.TiFlashReplica = nil - } else if tblInfo.TiFlashReplica != nil { - replica := *tblInfo.TiFlashReplica - // Keep the tiflash replica setting, remove the replica available status. - replica.AvailablePartitionIDs = nil - replica.Available = false - tblInfo.TiFlashReplica = &replica - } - if referTblInfo.Partition != nil { - pi := *referTblInfo.Partition - pi.Definitions = make([]model.PartitionDefinition, len(referTblInfo.Partition.Definitions)) - copy(pi.Definitions, referTblInfo.Partition.Definitions) - tblInfo.Partition = &pi - } - - if referTblInfo.TTLInfo != nil { - tblInfo.TTLInfo = referTblInfo.TTLInfo.Clone() - } - renameCheckConstraint(&tblInfo) - return &tblInfo, nil -} - -func renameCheckConstraint(tblInfo *model.TableInfo) { - for _, cons := range tblInfo.Constraints { - cons.Name = model.NewCIStr("") - cons.Table = tblInfo.Name - } - setNameForConstraintInfo(tblInfo.Name.L, map[string]bool{}, tblInfo.Constraints) -} - -// BuildTableInfoFromAST builds model.TableInfo from a SQL statement. -// Note: TableID and PartitionID are left as uninitialized value. -func BuildTableInfoFromAST(s *ast.CreateTableStmt) (*model.TableInfo, error) { - return buildTableInfoWithCheck(mock.NewContext(), s, mysql.DefaultCharset, "", nil) -} - -// buildTableInfoWithCheck builds model.TableInfo from a SQL statement. -// Note: TableID and PartitionIDs are left as uninitialized value. -func buildTableInfoWithCheck(ctx sessionctx.Context, s *ast.CreateTableStmt, dbCharset, dbCollate string, placementPolicyRef *model.PolicyRefInfo) (*model.TableInfo, error) { - tbInfo, err := BuildTableInfoWithStmt(ctx, s, dbCharset, dbCollate, placementPolicyRef) - if err != nil { - return nil, err - } - // Fix issue 17952 which will cause partition range expr can't be parsed as Int. - // checkTableInfoValidWithStmt will do the constant fold the partition expression first, - // then checkTableInfoValidExtra will pass the tableInfo check successfully. - if err = checkTableInfoValidWithStmt(ctx, tbInfo, s); err != nil { - return nil, err - } - if err = checkTableInfoValidExtra(tbInfo); err != nil { - return nil, err - } - return tbInfo, nil -} - -// BuildSessionTemporaryTableInfo builds model.TableInfo from a SQL statement. -func BuildSessionTemporaryTableInfo(ctx sessionctx.Context, is infoschema.InfoSchema, s *ast.CreateTableStmt, dbCharset, dbCollate string, placementPolicyRef *model.PolicyRefInfo) (*model.TableInfo, error) { - ident := ast.Ident{Schema: s.Table.Schema, Name: s.Table.Name} - //build tableInfo - var tbInfo *model.TableInfo - var referTbl table.Table - var err error - if s.ReferTable != nil { - referIdent := ast.Ident{Schema: s.ReferTable.Schema, Name: s.ReferTable.Name} - _, ok := is.SchemaByName(referIdent.Schema) - if !ok { - return nil, infoschema.ErrTableNotExists.GenWithStackByArgs(referIdent.Schema, referIdent.Name) - } - referTbl, err = is.TableByName(context.Background(), referIdent.Schema, referIdent.Name) - if err != nil { - return nil, infoschema.ErrTableNotExists.GenWithStackByArgs(referIdent.Schema, referIdent.Name) - } - tbInfo, err = BuildTableInfoWithLike(ctx, ident, referTbl.Meta(), s) - } else { - tbInfo, err = buildTableInfoWithCheck(ctx, s, dbCharset, dbCollate, placementPolicyRef) - } - return tbInfo, err -} - -// BuildTableInfoWithStmt builds model.TableInfo from a SQL statement without validity check -func BuildTableInfoWithStmt(ctx sessionctx.Context, s *ast.CreateTableStmt, dbCharset, dbCollate string, placementPolicyRef *model.PolicyRefInfo) (*model.TableInfo, error) { - colDefs := s.Cols - tableCharset, tableCollate, err := GetCharsetAndCollateInTableOption(ctx.GetSessionVars(), 0, s.Options) - if err != nil { - return nil, errors.Trace(err) - } - tableCharset, tableCollate, err = ResolveCharsetCollation(ctx.GetSessionVars(), - ast.CharsetOpt{Chs: tableCharset, Col: tableCollate}, - ast.CharsetOpt{Chs: dbCharset, Col: dbCollate}, - ) - if err != nil { - return nil, errors.Trace(err) - } - - // The column charset haven't been resolved here. - cols, newConstraints, err := buildColumnsAndConstraints(ctx, colDefs, s.Constraints, tableCharset, tableCollate) - if err != nil { - return nil, errors.Trace(err) - } - err = checkConstraintNames(s.Table.Name, newConstraints) - if err != nil { - return nil, errors.Trace(err) - } - - var tbInfo *model.TableInfo - tbInfo, err = BuildTableInfo(ctx, s.Table.Name, cols, newConstraints, tableCharset, tableCollate) - if err != nil { - return nil, errors.Trace(err) - } - if err = setTemporaryType(ctx, tbInfo, s); err != nil { - return nil, errors.Trace(err) - } - - if err = setTableAutoRandomBits(ctx, tbInfo, colDefs); err != nil { - return nil, errors.Trace(err) - } - - if err = handleTableOptions(s.Options, tbInfo); err != nil { - return nil, errors.Trace(err) - } - - sessionVars := ctx.GetSessionVars() - if _, err = validateCommentLength(sessionVars.StmtCtx.ErrCtx(), sessionVars.SQLMode, tbInfo.Name.L, &tbInfo.Comment, dbterror.ErrTooLongTableComment); err != nil { - return nil, errors.Trace(err) - } - - if tbInfo.TempTableType == model.TempTableNone && tbInfo.PlacementPolicyRef == nil && placementPolicyRef != nil { - // Set the defaults from Schema. Note: they are mutual exclusive! - tbInfo.PlacementPolicyRef = placementPolicyRef - } - - // After handleTableOptions, so the partitions can get defaults from Table level - err = buildTablePartitionInfo(ctx, s.Partition, tbInfo) - if err != nil { - return nil, errors.Trace(err) - } - - return tbInfo, nil -} - -func (e *executor) assignPartitionIDs(defs []model.PartitionDefinition) error { - genIDs, err := e.genGlobalIDs(len(defs)) - if err != nil { - return errors.Trace(err) - } - for i := range defs { - defs[i].ID = genIDs[i] - } - return nil -} - -func (e *executor) CreateTable(ctx sessionctx.Context, s *ast.CreateTableStmt) (err error) { - ident := ast.Ident{Schema: s.Table.Schema, Name: s.Table.Name} - is := e.infoCache.GetLatest() - schema, ok := is.SchemaByName(ident.Schema) - if !ok { - return infoschema.ErrDatabaseNotExists.GenWithStackByArgs(ident.Schema) - } - - var ( - referTbl table.Table - involvingRef []model.InvolvingSchemaInfo - ) - if s.ReferTable != nil { - referIdent := ast.Ident{Schema: s.ReferTable.Schema, Name: s.ReferTable.Name} - _, ok := is.SchemaByName(referIdent.Schema) - if !ok { - return infoschema.ErrTableNotExists.GenWithStackByArgs(referIdent.Schema, referIdent.Name) - } - referTbl, err = is.TableByName(e.ctx, referIdent.Schema, referIdent.Name) - if err != nil { - return infoschema.ErrTableNotExists.GenWithStackByArgs(referIdent.Schema, referIdent.Name) - } - involvingRef = append(involvingRef, model.InvolvingSchemaInfo{ - Database: s.ReferTable.Schema.L, - Table: s.ReferTable.Name.L, - Mode: model.SharedInvolving, - }) - } - - // build tableInfo - var tbInfo *model.TableInfo - if s.ReferTable != nil { - tbInfo, err = BuildTableInfoWithLike(ctx, ident, referTbl.Meta(), s) - } else { - tbInfo, err = BuildTableInfoWithStmt(ctx, s, schema.Charset, schema.Collate, schema.PlacementPolicyRef) - } - if err != nil { - return errors.Trace(err) - } - - if err = checkTableInfoValidWithStmt(ctx, tbInfo, s); err != nil { - return err - } - if err = checkTableForeignKeysValid(ctx, is, schema.Name.L, tbInfo); err != nil { - return err - } - - onExist := OnExistError - if s.IfNotExists { - onExist = OnExistIgnore - } - - return e.CreateTableWithInfo(ctx, schema.Name, tbInfo, involvingRef, WithOnExist(onExist)) -} - -func setTemporaryType(_ sessionctx.Context, tbInfo *model.TableInfo, s *ast.CreateTableStmt) error { - switch s.TemporaryKeyword { - case ast.TemporaryGlobal: - tbInfo.TempTableType = model.TempTableGlobal - // "create global temporary table ... on commit preserve rows" - if !s.OnCommitDelete { - return errors.Trace(dbterror.ErrUnsupportedOnCommitPreserve) - } - case ast.TemporaryLocal: - tbInfo.TempTableType = model.TempTableLocal - default: - tbInfo.TempTableType = model.TempTableNone - } - return nil -} - -// createTableWithInfoJob returns the table creation job. -// WARNING: it may return a nil job, which means you don't need to submit any DDL job. -func (e *executor) createTableWithInfoJob( - ctx sessionctx.Context, - dbName model.CIStr, - tbInfo *model.TableInfo, - involvingRef []model.InvolvingSchemaInfo, - onExist OnExist, -) (job *model.Job, err error) { - is := e.infoCache.GetLatest() - schema, ok := is.SchemaByName(dbName) - if !ok { - return nil, infoschema.ErrDatabaseNotExists.GenWithStackByArgs(dbName) - } - - if err = handleTablePlacement(ctx, tbInfo); err != nil { - return nil, errors.Trace(err) - } - - var oldViewTblID int64 - if oldTable, err := is.TableByName(e.ctx, schema.Name, tbInfo.Name); err == nil { - err = infoschema.ErrTableExists.GenWithStackByArgs(ast.Ident{Schema: schema.Name, Name: tbInfo.Name}) - switch onExist { - case OnExistIgnore: - ctx.GetSessionVars().StmtCtx.AppendNote(err) - return nil, nil - case OnExistReplace: - // only CREATE OR REPLACE VIEW is supported at the moment. - if tbInfo.View != nil { - if oldTable.Meta().IsView() { - oldViewTblID = oldTable.Meta().ID - break - } - // The object to replace isn't a view. - return nil, dbterror.ErrWrongObject.GenWithStackByArgs(dbName, tbInfo.Name, "VIEW") - } - return nil, err - default: - return nil, err - } - } - - if err := checkTableInfoValidExtra(tbInfo); err != nil { - return nil, err - } - - var actionType model.ActionType - args := []any{tbInfo} - switch { - case tbInfo.View != nil: - actionType = model.ActionCreateView - args = append(args, onExist == OnExistReplace, oldViewTblID) - case tbInfo.Sequence != nil: - actionType = model.ActionCreateSequence - default: - actionType = model.ActionCreateTable - args = append(args, ctx.GetSessionVars().ForeignKeyChecks) - } - - var involvingSchemas []model.InvolvingSchemaInfo - sharedInvolvingFromTableInfo := getSharedInvolvingSchemaInfo(tbInfo) - - if sum := len(involvingRef) + len(sharedInvolvingFromTableInfo); sum > 0 { - involvingSchemas = make([]model.InvolvingSchemaInfo, 0, sum+1) - involvingSchemas = append(involvingSchemas, model.InvolvingSchemaInfo{ - Database: schema.Name.L, - Table: tbInfo.Name.L, - }) - involvingSchemas = append(involvingSchemas, involvingRef...) - involvingSchemas = append(involvingSchemas, sharedInvolvingFromTableInfo...) - } - - job = &model.Job{ - SchemaID: schema.ID, - SchemaName: schema.Name.L, - TableName: tbInfo.Name.L, - Type: actionType, - BinlogInfo: &model.HistoryInfo{}, - Args: args, - CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, - InvolvingSchemaInfo: involvingSchemas, - SQLMode: ctx.GetSessionVars().SQLMode, - } - return job, nil -} - -func getSharedInvolvingSchemaInfo(info *model.TableInfo) []model.InvolvingSchemaInfo { - ret := make([]model.InvolvingSchemaInfo, 0, len(info.ForeignKeys)+1) - for _, fk := range info.ForeignKeys { - ret = append(ret, model.InvolvingSchemaInfo{ - Database: fk.RefSchema.L, - Table: fk.RefTable.L, - Mode: model.SharedInvolving, - }) - } - if ref := info.PlacementPolicyRef; ref != nil { - ret = append(ret, model.InvolvingSchemaInfo{ - Policy: ref.Name.L, - Mode: model.SharedInvolving, - }) - } - return ret -} - -func (e *executor) createTableWithInfoPost( - ctx sessionctx.Context, - tbInfo *model.TableInfo, - schemaID int64, -) error { - var err error - var partitions []model.PartitionDefinition - if pi := tbInfo.GetPartitionInfo(); pi != nil { - partitions = pi.Definitions - } - preSplitAndScatter(ctx, e.store, tbInfo, partitions) - if tbInfo.AutoIncID > 1 { - // Default tableAutoIncID base is 0. - // If the first ID is expected to greater than 1, we need to do rebase. - newEnd := tbInfo.AutoIncID - 1 - var allocType autoid.AllocatorType - if tbInfo.SepAutoInc() { - allocType = autoid.AutoIncrementType - } else { - allocType = autoid.RowIDAllocType - } - if err = e.handleAutoIncID(tbInfo, schemaID, newEnd, allocType); err != nil { - return errors.Trace(err) - } - } - // For issue https://github.com/pingcap/tidb/issues/46093 - if tbInfo.AutoIncIDExtra != 0 { - if err = e.handleAutoIncID(tbInfo, schemaID, tbInfo.AutoIncIDExtra-1, autoid.RowIDAllocType); err != nil { - return errors.Trace(err) - } - } - if tbInfo.AutoRandID > 1 { - // Default tableAutoRandID base is 0. - // If the first ID is expected to greater than 1, we need to do rebase. - newEnd := tbInfo.AutoRandID - 1 - err = e.handleAutoIncID(tbInfo, schemaID, newEnd, autoid.AutoRandomType) - } - return err -} - -func (e *executor) CreateTableWithInfo( - ctx sessionctx.Context, - dbName model.CIStr, - tbInfo *model.TableInfo, - involvingRef []model.InvolvingSchemaInfo, - cs ...CreateTableOption, -) (err error) { - c := GetCreateTableConfig(cs) - - job, err := e.createTableWithInfoJob( - ctx, dbName, tbInfo, involvingRef, c.OnExist, - ) - if err != nil { - return err - } - if job == nil { - return nil - } - - jobW := NewJobWrapper(job, c.IDAllocated) - - err = e.DoDDLJobWrapper(ctx, jobW) - if err != nil { - // table exists, but if_not_exists flags is true, so we ignore this error. - if c.OnExist == OnExistIgnore && infoschema.ErrTableExists.Equal(err) { - ctx.GetSessionVars().StmtCtx.AppendNote(err) - err = nil - } - } else { - err = e.createTableWithInfoPost(ctx, tbInfo, job.SchemaID) - } - - return errors.Trace(err) -} - -func (e *executor) BatchCreateTableWithInfo(ctx sessionctx.Context, - dbName model.CIStr, - infos []*model.TableInfo, - cs ...CreateTableOption, -) error { - failpoint.Inject("RestoreBatchCreateTableEntryTooLarge", func(val failpoint.Value) { - injectBatchSize := val.(int) - if len(infos) > injectBatchSize { - failpoint.Return(kv.ErrEntryTooLarge) - } - }) - c := GetCreateTableConfig(cs) - - jobW := NewJobWrapper( - &model.Job{ - BinlogInfo: &model.HistoryInfo{}, - CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, - SQLMode: ctx.GetSessionVars().SQLMode, - }, - c.IDAllocated, - ) - args := make([]*model.TableInfo, 0, len(infos)) - - var err error - - // check if there are any duplicated table names - duplication := make(map[string]struct{}) - // TODO filter those duplicated info out. - for _, info := range infos { - if _, ok := duplication[info.Name.L]; ok { - err = infoschema.ErrTableExists.FastGenByArgs("can not batch create tables with same name") - if c.OnExist == OnExistIgnore && infoschema.ErrTableExists.Equal(err) { - ctx.GetSessionVars().StmtCtx.AppendNote(err) - err = nil - } - } - if err != nil { - return errors.Trace(err) - } - - duplication[info.Name.L] = struct{}{} - } - - for _, info := range infos { - job, err := e.createTableWithInfoJob(ctx, dbName, info, nil, c.OnExist) - if err != nil { - return errors.Trace(err) - } - if job == nil { - continue - } - - // if jobW.Type == model.ActionCreateTables, it is initialized - // if not, initialize jobW by job.XXXX - if jobW.Type != model.ActionCreateTables { - jobW.Type = model.ActionCreateTables - jobW.SchemaID = job.SchemaID - jobW.SchemaName = job.SchemaName - } - - // append table job args - info, ok := job.Args[0].(*model.TableInfo) - if !ok { - return errors.Trace(fmt.Errorf("except table info")) - } - args = append(args, info) - jobW.InvolvingSchemaInfo = append(jobW.InvolvingSchemaInfo, model.InvolvingSchemaInfo{ - Database: dbName.L, - Table: info.Name.L, - }) - if sharedInv := getSharedInvolvingSchemaInfo(info); len(sharedInv) > 0 { - jobW.InvolvingSchemaInfo = append(jobW.InvolvingSchemaInfo, sharedInv...) - } - } - if len(args) == 0 { - return nil - } - jobW.Args = append(jobW.Args, args) - jobW.Args = append(jobW.Args, ctx.GetSessionVars().ForeignKeyChecks) - - err = e.DoDDLJobWrapper(ctx, jobW) - if err != nil { - // table exists, but if_not_exists flags is true, so we ignore this error. - if c.OnExist == OnExistIgnore && infoschema.ErrTableExists.Equal(err) { - ctx.GetSessionVars().StmtCtx.AppendNote(err) - err = nil - } - return errors.Trace(err) - } - - for j := range args { - if err = e.createTableWithInfoPost(ctx, args[j], jobW.SchemaID); err != nil { - return errors.Trace(err) - } - } - - return nil -} - -// BuildQueryStringFromJobs takes a slice of Jobs and concatenates their -// queries into a single query string. -// Each query is separated by a semicolon and a space. -// Trailing spaces are removed from each query, and a semicolon is appended -// if it's not already present. -func BuildQueryStringFromJobs(jobs []*model.Job) string { - var queryBuilder strings.Builder - for i, job := range jobs { - q := strings.TrimSpace(job.Query) - if !strings.HasSuffix(q, ";") { - q += ";" - } - queryBuilder.WriteString(q) - - if i < len(jobs)-1 { - queryBuilder.WriteString(" ") - } - } - return queryBuilder.String() -} - -// BatchCreateTableWithJobs combine CreateTableJobs to BatchCreateTableJob. -func BatchCreateTableWithJobs(jobs []*model.Job) (*model.Job, error) { - if len(jobs) == 0 { - return nil, errors.Trace(fmt.Errorf("expect non-empty jobs")) - } - - var combinedJob *model.Job - - args := make([]*model.TableInfo, 0, len(jobs)) - involvingSchemaInfo := make([]model.InvolvingSchemaInfo, 0, len(jobs)) - var foreignKeyChecks bool - - // if there is any duplicated table name - duplication := make(map[string]struct{}) - for _, job := range jobs { - if combinedJob == nil { - combinedJob = job.Clone() - combinedJob.Type = model.ActionCreateTables - combinedJob.Args = combinedJob.Args[:0] - foreignKeyChecks = job.Args[1].(bool) - } - // append table job args - info, ok := job.Args[0].(*model.TableInfo) - if !ok { - return nil, errors.Trace(fmt.Errorf("expect model.TableInfo, but got %T", job.Args[0])) - } - args = append(args, info) - - if _, ok := duplication[info.Name.L]; ok { - // return err even if create table if not exists - return nil, infoschema.ErrTableExists.FastGenByArgs("can not batch create tables with same name") - } - - duplication[info.Name.L] = struct{}{} - - involvingSchemaInfo = append(involvingSchemaInfo, - model.InvolvingSchemaInfo{ - Database: job.SchemaName, - Table: info.Name.L, - }) - } - - combinedJob.Args = append(combinedJob.Args, args) - combinedJob.Args = append(combinedJob.Args, foreignKeyChecks) - combinedJob.InvolvingSchemaInfo = involvingSchemaInfo - combinedJob.Query = BuildQueryStringFromJobs(jobs) - - return combinedJob, nil -} - -func (e *executor) CreatePlacementPolicyWithInfo(ctx sessionctx.Context, policy *model.PolicyInfo, onExist OnExist) error { - if checkIgnorePlacementDDL(ctx) { - return nil - } - - policyName := policy.Name - if policyName.L == defaultPlacementPolicyName { - return errors.Trace(infoschema.ErrReservedSyntax.GenWithStackByArgs(policyName)) - } - - // Check policy existence. - _, ok := e.infoCache.GetLatest().PolicyByName(policyName) - if ok { - err := infoschema.ErrPlacementPolicyExists.GenWithStackByArgs(policyName) - switch onExist { - case OnExistIgnore: - ctx.GetSessionVars().StmtCtx.AppendNote(err) - return nil - case OnExistError: - return err - } - } - - if err := checkPolicyValidation(policy.PlacementSettings); err != nil { - return err - } - - policyID, err := e.genPlacementPolicyID() - if err != nil { - return err - } - policy.ID = policyID - - job := &model.Job{ - SchemaName: policy.Name.L, - Type: model.ActionCreatePlacementPolicy, - BinlogInfo: &model.HistoryInfo{}, - Args: []any{policy, onExist == OnExistReplace}, - InvolvingSchemaInfo: []model.InvolvingSchemaInfo{{ - Policy: policy.Name.L, - }}, - CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, - SQLMode: ctx.GetSessionVars().SQLMode, - } - err = e.DoDDLJob(ctx, job) - return errors.Trace(err) -} - -// preSplitAndScatter performs pre-split and scatter of the table's regions. -// If `pi` is not nil, will only split region for `pi`, this is used when add partition. -func preSplitAndScatter(ctx sessionctx.Context, store kv.Storage, tbInfo *model.TableInfo, parts []model.PartitionDefinition) { - if tbInfo.TempTableType != model.TempTableNone { - return - } - sp, ok := store.(kv.SplittableStore) - if !ok || atomic.LoadUint32(&EnableSplitTableRegion) == 0 { - return - } - var ( - preSplit func() - scatterRegion bool - ) - val, err := ctx.GetSessionVars().GetGlobalSystemVar(context.Background(), variable.TiDBScatterRegion) - if err != nil { - logutil.DDLLogger().Warn("won't scatter region", zap.Error(err)) - } else { - scatterRegion = variable.TiDBOptOn(val) - } - if len(parts) > 0 { - preSplit = func() { splitPartitionTableRegion(ctx, sp, tbInfo, parts, scatterRegion) } - } else { - preSplit = func() { splitTableRegion(ctx, sp, tbInfo, scatterRegion) } - } - if scatterRegion { - preSplit() - } else { - go preSplit() - } -} - -func (e *executor) FlashbackCluster(ctx sessionctx.Context, flashbackTS uint64) error { - logutil.DDLLogger().Info("get flashback cluster job", zap.Stringer("flashbackTS", oracle.GetTimeFromTS(flashbackTS))) - nowTS, err := ctx.GetStore().GetOracle().GetTimestamp(e.ctx, &oracle.Option{}) - if err != nil { - return errors.Trace(err) - } - gap := time.Until(oracle.GetTimeFromTS(nowTS)).Abs() - if gap > 1*time.Second { - ctx.GetSessionVars().StmtCtx.AppendWarning(errors.NewNoStackErrorf("Gap between local time and PD TSO is %s, please check PD/system time", gap)) - } - job := &model.Job{ - Type: model.ActionFlashbackCluster, - BinlogInfo: &model.HistoryInfo{}, - // The value for global variables is meaningless, it will cover during flashback cluster. - Args: []any{ - flashbackTS, - map[string]any{}, - true, /* tidb_gc_enable */ - variable.On, /* tidb_enable_auto_analyze */ - variable.Off, /* tidb_super_read_only */ - 0, /* totalRegions */ - 0, /* startTS */ - 0, /* commitTS */ - variable.On, /* tidb_ttl_job_enable */ - []kv.KeyRange{} /* flashback key_ranges */}, - CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, - // FLASHBACK CLUSTER affects all schemas and tables. - InvolvingSchemaInfo: []model.InvolvingSchemaInfo{{ - Database: model.InvolvingAll, - Table: model.InvolvingAll, - }}, - SQLMode: ctx.GetSessionVars().SQLMode, - } - err = e.DoDDLJob(ctx, job) - return errors.Trace(err) -} - -func (e *executor) RecoverTable(ctx sessionctx.Context, recoverInfo *RecoverInfo) (err error) { - is := e.infoCache.GetLatest() - schemaID, tbInfo := recoverInfo.SchemaID, recoverInfo.TableInfo - // Check schema exist. - schema, ok := is.SchemaByID(schemaID) - if !ok { - return errors.Trace(infoschema.ErrDatabaseNotExists.GenWithStackByArgs( - fmt.Sprintf("(Schema ID %d)", schemaID), - )) - } - // Check not exist table with same name. - if ok := is.TableExists(schema.Name, tbInfo.Name); ok { - return infoschema.ErrTableExists.GenWithStackByArgs(tbInfo.Name) - } - - // for "flashback table xxx to yyy" - // Note: this case only allow change table name, schema remains the same. - var involvedSchemas []model.InvolvingSchemaInfo - if recoverInfo.OldTableName != tbInfo.Name.L { - involvedSchemas = []model.InvolvingSchemaInfo{ - {Database: schema.Name.L, Table: recoverInfo.OldTableName}, - {Database: schema.Name.L, Table: tbInfo.Name.L}, - } - } - - tbInfo.State = model.StateNone - job := &model.Job{ - SchemaID: schemaID, - TableID: tbInfo.ID, - SchemaName: schema.Name.L, - TableName: tbInfo.Name.L, - - Type: model.ActionRecoverTable, - BinlogInfo: &model.HistoryInfo{}, - Args: []any{recoverInfo, recoverCheckFlagNone}, - InvolvingSchemaInfo: involvedSchemas, - CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, - SQLMode: ctx.GetSessionVars().SQLMode, - } - err = e.DoDDLJob(ctx, job) - return errors.Trace(err) -} - -func (e *executor) CreateView(ctx sessionctx.Context, s *ast.CreateViewStmt) (err error) { - viewInfo, err := BuildViewInfo(s) - if err != nil { - return err - } - - cols := make([]*table.Column, len(s.Cols)) - for i, v := range s.Cols { - cols[i] = table.ToColumn(&model.ColumnInfo{ - Name: v, - ID: int64(i), - Offset: i, - State: model.StatePublic, - }) - } - - tblCharset := "" - tblCollate := "" - if v, ok := ctx.GetSessionVars().GetSystemVar(variable.CharacterSetConnection); ok { - tblCharset = v - } - if v, ok := ctx.GetSessionVars().GetSystemVar(variable.CollationConnection); ok { - tblCollate = v - } - - tbInfo, err := BuildTableInfo(ctx, s.ViewName.Name, cols, nil, tblCharset, tblCollate) - if err != nil { - return err - } - tbInfo.View = viewInfo - - onExist := OnExistError - if s.OrReplace { - onExist = OnExistReplace - } - - return e.CreateTableWithInfo(ctx, s.ViewName.Schema, tbInfo, nil, WithOnExist(onExist)) -} - -// BuildViewInfo builds a ViewInfo structure from an ast.CreateViewStmt. -func BuildViewInfo(s *ast.CreateViewStmt) (*model.ViewInfo, error) { - // Always Use `format.RestoreNameBackQuotes` to restore `SELECT` statement despite the `ANSI_QUOTES` SQL Mode is enabled or not. - restoreFlag := format.RestoreStringSingleQuotes | format.RestoreKeyWordUppercase | format.RestoreNameBackQuotes - var sb strings.Builder - if err := s.Select.Restore(format.NewRestoreCtx(restoreFlag, &sb)); err != nil { - return nil, err - } - - return &model.ViewInfo{Definer: s.Definer, Algorithm: s.Algorithm, - Security: s.Security, SelectStmt: sb.String(), CheckOption: s.CheckOption, Cols: nil}, nil -} - -func checkPartitionByHash(ctx sessionctx.Context, tbInfo *model.TableInfo) error { - return checkNoHashPartitions(ctx, tbInfo.Partition.Num) -} - -// checkPartitionByRange checks validity of a "BY RANGE" partition. -func checkPartitionByRange(ctx sessionctx.Context, tbInfo *model.TableInfo) error { - failpoint.Inject("CheckPartitionByRangeErr", func() { - ctx.GetSessionVars().SQLKiller.SendKillSignal(sqlkiller.QueryMemoryExceeded) - panic(ctx.GetSessionVars().SQLKiller.HandleSignal()) - }) - pi := tbInfo.Partition - - if len(pi.Columns) == 0 { - return checkRangePartitionValue(ctx, tbInfo) - } - - return checkRangeColumnsPartitionValue(ctx, tbInfo) -} - -// checkPartitionByList checks validity of a "BY LIST" partition. -func checkPartitionByList(ctx sessionctx.Context, tbInfo *model.TableInfo) error { - return checkListPartitionValue(ctx.GetExprCtx(), tbInfo) -} - -func isValidKeyPartitionColType(fieldType types.FieldType) bool { - switch fieldType.GetType() { - case mysql.TypeBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob, mysql.TypeJSON, mysql.TypeGeometry, - mysql.TypeTiDBVectorFloat32: - return false - default: - return true - } -} - -func isColTypeAllowedAsPartitioningCol(partType model.PartitionType, fieldType types.FieldType) bool { - // For key partition, the permitted partition field types can be all field types except - // BLOB, JSON, Geometry - if partType == model.PartitionTypeKey { - return isValidKeyPartitionColType(fieldType) - } - // The permitted data types are shown in the following list: - // All integer types - // DATE and DATETIME - // CHAR, VARCHAR, BINARY, and VARBINARY - // See https://dev.mysql.com/doc/mysql-partitioning-excerpt/5.7/en/partitioning-columns.html - // Note that also TIME is allowed in MySQL. Also see https://bugs.mysql.com/bug.php?id=84362 - switch fieldType.GetType() { - case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong: - case mysql.TypeDate, mysql.TypeDatetime, mysql.TypeDuration: - case mysql.TypeVarchar, mysql.TypeString: - default: - return false - } - return true -} - -func checkColumnsPartitionType(tbInfo *model.TableInfo) error { - for _, col := range tbInfo.Partition.Columns { - colInfo := tbInfo.FindPublicColumnByName(col.L) - if colInfo == nil { - return errors.Trace(dbterror.ErrFieldNotFoundPart) - } - if !isColTypeAllowedAsPartitioningCol(tbInfo.Partition.Type, colInfo.FieldType) { - return dbterror.ErrNotAllowedTypeInPartition.GenWithStackByArgs(col.O) - } - } - return nil -} - -func checkRangeColumnsPartitionValue(ctx sessionctx.Context, tbInfo *model.TableInfo) error { - // Range columns partition key supports multiple data types with integer、datetime、string. - pi := tbInfo.Partition - defs := pi.Definitions - if len(defs) < 1 { - return ast.ErrPartitionsMustBeDefined.GenWithStackByArgs("RANGE") - } - - curr := &defs[0] - if len(curr.LessThan) != len(pi.Columns) { - return errors.Trace(ast.ErrPartitionColumnList) - } - var prev *model.PartitionDefinition - for i := 1; i < len(defs); i++ { - prev, curr = curr, &defs[i] - succ, err := checkTwoRangeColumns(ctx, curr, prev, pi, tbInfo) - if err != nil { - return err - } - if !succ { - return errors.Trace(dbterror.ErrRangeNotIncreasing) - } - } - return nil -} - -func checkTwoRangeColumns(ctx sessionctx.Context, curr, prev *model.PartitionDefinition, pi *model.PartitionInfo, tbInfo *model.TableInfo) (bool, error) { - if len(curr.LessThan) != len(pi.Columns) { - return false, errors.Trace(ast.ErrPartitionColumnList) - } - for i := 0; i < len(pi.Columns); i++ { - // Special handling for MAXVALUE. - if strings.EqualFold(curr.LessThan[i], partitionMaxValue) && !strings.EqualFold(prev.LessThan[i], partitionMaxValue) { - // If current is maxvalue, it certainly >= previous. - return true, nil - } - if strings.EqualFold(prev.LessThan[i], partitionMaxValue) { - // Current is not maxvalue, and previous is maxvalue. - return false, nil - } - - // The tuples of column values used to define the partitions are strictly increasing: - // PARTITION p0 VALUES LESS THAN (5,10,'ggg') - // PARTITION p1 VALUES LESS THAN (10,20,'mmm') - // PARTITION p2 VALUES LESS THAN (15,30,'sss') - colInfo := findColumnByName(pi.Columns[i].L, tbInfo) - cmp, err := parseAndEvalBoolExpr(ctx.GetExprCtx(), curr.LessThan[i], prev.LessThan[i], colInfo, tbInfo) - if err != nil { - return false, err - } - - if cmp > 0 { - return true, nil - } - - if cmp < 0 { - return false, nil - } - } - return false, nil -} - -// equal, return 0 -// greater, return 1 -// less, return -1 -func parseAndEvalBoolExpr(ctx expression.BuildContext, l, r string, colInfo *model.ColumnInfo, tbInfo *model.TableInfo) (int64, error) { - lexpr, err := expression.ParseSimpleExpr(ctx, l, expression.WithTableInfo("", tbInfo), expression.WithCastExprTo(&colInfo.FieldType)) - if err != nil { - return 0, err - } - rexpr, err := expression.ParseSimpleExpr(ctx, r, expression.WithTableInfo("", tbInfo), expression.WithCastExprTo(&colInfo.FieldType)) - if err != nil { - return 0, err - } - - e, err := expression.NewFunctionBase(ctx, ast.EQ, field_types.NewFieldType(mysql.TypeLonglong), lexpr, rexpr) - if err != nil { - return 0, err - } - e.SetCharsetAndCollation(colInfo.GetCharset(), colInfo.GetCollate()) - res, _, err1 := e.EvalInt(ctx.GetEvalCtx(), chunk.Row{}) - if err1 != nil { - return 0, err1 - } - if res == 1 { - return 0, nil - } - - e, err = expression.NewFunctionBase(ctx, ast.GT, field_types.NewFieldType(mysql.TypeLonglong), lexpr, rexpr) - if err != nil { - return 0, err - } - e.SetCharsetAndCollation(colInfo.GetCharset(), colInfo.GetCollate()) - res, _, err1 = e.EvalInt(ctx.GetEvalCtx(), chunk.Row{}) - if err1 != nil { - return 0, err1 - } - if res > 0 { - return 1, nil - } - return -1, nil -} - -func checkCharsetAndCollation(cs string, co string) error { - if !charset.ValidCharsetAndCollation(cs, co) { - return dbterror.ErrUnknownCharacterSet.GenWithStackByArgs(cs) - } - if co != "" { - if _, err := collate.GetCollationByName(co); err != nil { - return errors.Trace(err) - } - } - return nil -} - -// handleAutoIncID handles auto_increment option in DDL. It creates a ID counter for the table and initiates the counter to a proper value. -// For example if the option sets auto_increment to 10. The counter will be set to 9. So the next allocated ID will be 10. -func (e *executor) handleAutoIncID(tbInfo *model.TableInfo, schemaID int64, newEnd int64, tp autoid.AllocatorType) error { - allocs := autoid.NewAllocatorsFromTblInfo(e.getAutoIDRequirement(), schemaID, tbInfo) - if alloc := allocs.Get(tp); alloc != nil { - err := alloc.Rebase(context.Background(), newEnd, false) - if err != nil { - return errors.Trace(err) - } - } - return nil -} - -// TODO we can unify this part with ddlCtx. -func (e *executor) getAutoIDRequirement() autoid.Requirement { - return &asAutoIDRequirement{ - store: e.store, - autoidCli: e.autoidCli, - } -} - -// SetDirectPlacementOpt tries to make the PlacementSettings assignments generic for Schema/Table/Partition -func SetDirectPlacementOpt(placementSettings *model.PlacementSettings, placementOptionType ast.PlacementOptionType, stringVal string, uintVal uint64) error { - switch placementOptionType { - case ast.PlacementOptionPrimaryRegion: - placementSettings.PrimaryRegion = stringVal - case ast.PlacementOptionRegions: - placementSettings.Regions = stringVal - case ast.PlacementOptionFollowerCount: - placementSettings.Followers = uintVal - case ast.PlacementOptionVoterCount: - placementSettings.Voters = uintVal - case ast.PlacementOptionLearnerCount: - placementSettings.Learners = uintVal - case ast.PlacementOptionSchedule: - placementSettings.Schedule = stringVal - case ast.PlacementOptionConstraints: - placementSettings.Constraints = stringVal - case ast.PlacementOptionLeaderConstraints: - placementSettings.LeaderConstraints = stringVal - case ast.PlacementOptionLearnerConstraints: - placementSettings.LearnerConstraints = stringVal - case ast.PlacementOptionFollowerConstraints: - placementSettings.FollowerConstraints = stringVal - case ast.PlacementOptionVoterConstraints: - placementSettings.VoterConstraints = stringVal - case ast.PlacementOptionSurvivalPreferences: - placementSettings.SurvivalPreferences = stringVal - default: - return errors.Trace(errors.New("unknown placement policy option")) - } - return nil -} - -// SetDirectResourceGroupSettings tries to set the ResourceGroupSettings. -func SetDirectResourceGroupSettings(groupInfo *model.ResourceGroupInfo, opt *ast.ResourceGroupOption) error { - resourceGroupSettings := groupInfo.ResourceGroupSettings - switch opt.Tp { - case ast.ResourceRURate: - resourceGroupSettings.RURate = opt.UintValue - case ast.ResourcePriority: - resourceGroupSettings.Priority = opt.UintValue - case ast.ResourceUnitCPU: - resourceGroupSettings.CPULimiter = opt.StrValue - case ast.ResourceUnitIOReadBandwidth: - resourceGroupSettings.IOReadBandwidth = opt.StrValue - case ast.ResourceUnitIOWriteBandwidth: - resourceGroupSettings.IOWriteBandwidth = opt.StrValue - case ast.ResourceBurstableOpiton: - // Some about BurstLimit(b): - // - If b == 0, that means the limiter is unlimited capacity. default use in resource controller (burst with a rate within a unlimited capacity). - // - If b < 0, that means the limiter is unlimited capacity and fillrate(r) is ignored, can be seen as r == Inf (burst with a inf rate within a unlimited capacity). - // - If b > 0, that means the limiter is limited capacity. (current not used). - limit := int64(0) - if opt.BoolValue { - limit = -1 - } - resourceGroupSettings.BurstLimit = limit - case ast.ResourceGroupRunaway: - if len(opt.RunawayOptionList) == 0 { - resourceGroupSettings.Runaway = nil - } - for _, opt := range opt.RunawayOptionList { - if err := SetDirectResourceGroupRunawayOption(resourceGroupSettings, opt); err != nil { - return err - } - } - case ast.ResourceGroupBackground: - if groupInfo.Name.L != rg.DefaultResourceGroupName { - // FIXME: this is a temporary restriction, so we don't add a error-code for it. - return errors.New("unsupported operation. Currently, only the default resource group support change background settings") - } - if len(opt.BackgroundOptions) == 0 { - resourceGroupSettings.Background = nil - } - for _, opt := range opt.BackgroundOptions { - if err := SetDirectResourceGroupBackgroundOption(resourceGroupSettings, opt); err != nil { - return err - } - } - default: - return errors.Trace(errors.New("unknown resource unit type")) - } - return nil -} - -// SetDirectResourceGroupRunawayOption tries to set runaway part of the ResourceGroupSettings. -func SetDirectResourceGroupRunawayOption(resourceGroupSettings *model.ResourceGroupSettings, opt *ast.ResourceGroupRunawayOption) error { - if resourceGroupSettings.Runaway == nil { - resourceGroupSettings.Runaway = &model.ResourceGroupRunawaySettings{} - } - settings := resourceGroupSettings.Runaway - switch opt.Tp { - case ast.RunawayRule: - // because execute time won't be too long, we use `time` pkg which does not support to parse unit 'd'. - dur, err := time.ParseDuration(opt.RuleOption.ExecElapsed) - if err != nil { - return err - } - settings.ExecElapsedTimeMs = uint64(dur.Milliseconds()) - case ast.RunawayAction: - settings.Action = opt.ActionOption.Type - case ast.RunawayWatch: - settings.WatchType = opt.WatchOption.Type - if dur := opt.WatchOption.Duration; len(dur) > 0 { - dur, err := time.ParseDuration(dur) - if err != nil { - return err - } - settings.WatchDurationMs = dur.Milliseconds() - } else { - settings.WatchDurationMs = 0 - } - default: - return errors.Trace(errors.New("unknown runaway option type")) - } - return nil -} - -// SetDirectResourceGroupBackgroundOption set background configs of the ResourceGroupSettings. -func SetDirectResourceGroupBackgroundOption(resourceGroupSettings *model.ResourceGroupSettings, opt *ast.ResourceGroupBackgroundOption) error { - if resourceGroupSettings.Background == nil { - resourceGroupSettings.Background = &model.ResourceGroupBackgroundSettings{} - } - switch opt.Type { - case ast.BackgroundOptionTaskNames: - jobTypes, err := parseBackgroundJobTypes(opt.StrValue) - if err != nil { - return err - } - resourceGroupSettings.Background.JobTypes = jobTypes - default: - return errors.Trace(errors.New("unknown background option type")) - } - return nil -} - -func parseBackgroundJobTypes(t string) ([]string, error) { - if len(t) == 0 { - return []string{}, nil - } - - segs := strings.Split(t, ",") - res := make([]string, 0, len(segs)) - for _, s := range segs { - ty := strings.ToLower(strings.TrimSpace(s)) - if len(ty) > 0 { - if !slices.Contains(kvutil.ExplicitTypeList, ty) { - return nil, infoschema.ErrResourceGroupInvalidBackgroundTaskName.GenWithStackByArgs(ty) - } - res = append(res, ty) - } - } - return res, nil -} - -// handleTableOptions updates tableInfo according to table options. -func handleTableOptions(options []*ast.TableOption, tbInfo *model.TableInfo) error { - var ttlOptionsHandled bool - - for _, op := range options { - switch op.Tp { - case ast.TableOptionAutoIncrement: - tbInfo.AutoIncID = int64(op.UintValue) - case ast.TableOptionAutoIdCache: - if op.UintValue > uint64(math.MaxInt64) { - // TODO: Refine this error. - return errors.New("table option auto_id_cache overflows int64") - } - tbInfo.AutoIdCache = int64(op.UintValue) - case ast.TableOptionAutoRandomBase: - tbInfo.AutoRandID = int64(op.UintValue) - case ast.TableOptionComment: - tbInfo.Comment = op.StrValue - case ast.TableOptionCompression: - tbInfo.Compression = op.StrValue - case ast.TableOptionShardRowID: - if op.UintValue > 0 && tbInfo.HasClusteredIndex() { - return dbterror.ErrUnsupportedShardRowIDBits - } - tbInfo.ShardRowIDBits = op.UintValue - if tbInfo.ShardRowIDBits > shardRowIDBitsMax { - tbInfo.ShardRowIDBits = shardRowIDBitsMax - } - tbInfo.MaxShardRowIDBits = tbInfo.ShardRowIDBits - case ast.TableOptionPreSplitRegion: - if tbInfo.TempTableType != model.TempTableNone { - return errors.Trace(dbterror.ErrOptOnTemporaryTable.GenWithStackByArgs("pre split regions")) - } - tbInfo.PreSplitRegions = op.UintValue - case ast.TableOptionCharset, ast.TableOptionCollate: - // We don't handle charset and collate here since they're handled in `GetCharsetAndCollateInTableOption`. - case ast.TableOptionPlacementPolicy: - tbInfo.PlacementPolicyRef = &model.PolicyRefInfo{ - Name: model.NewCIStr(op.StrValue), - } - case ast.TableOptionTTL, ast.TableOptionTTLEnable, ast.TableOptionTTLJobInterval: - if ttlOptionsHandled { - continue - } - - ttlInfo, ttlEnable, ttlJobInterval, err := getTTLInfoInOptions(options) - if err != nil { - return err - } - // It's impossible that `ttlInfo` and `ttlEnable` are all nil, because we have met this option. - // After exclude the situation `ttlInfo == nil && ttlEnable != nil`, we could say `ttlInfo != nil` - if ttlInfo == nil { - if ttlEnable != nil { - return errors.Trace(dbterror.ErrSetTTLOptionForNonTTLTable.FastGenByArgs("TTL_ENABLE")) - } - if ttlJobInterval != nil { - return errors.Trace(dbterror.ErrSetTTLOptionForNonTTLTable.FastGenByArgs("TTL_JOB_INTERVAL")) - } - } - - tbInfo.TTLInfo = ttlInfo - ttlOptionsHandled = true - } - } - shardingBits := shardingBits(tbInfo) - if tbInfo.PreSplitRegions > shardingBits { - tbInfo.PreSplitRegions = shardingBits - } - return nil -} - -func shardingBits(tblInfo *model.TableInfo) uint64 { - if tblInfo.ShardRowIDBits > 0 { - return tblInfo.ShardRowIDBits - } - return tblInfo.AutoRandomBits -} - -// isIgnorableSpec checks if the spec type is ignorable. -// Some specs are parsed by ignored. This is for compatibility. -func isIgnorableSpec(tp ast.AlterTableType) bool { - // AlterTableLock/AlterTableAlgorithm are ignored. - return tp == ast.AlterTableLock || tp == ast.AlterTableAlgorithm -} - -// getCharsetAndCollateInColumnDef will iterate collate in the options, validate it by checking the charset -// of column definition. If there's no collate in the option, the default collate of column's charset will be used. -func getCharsetAndCollateInColumnDef(sessVars *variable.SessionVars, def *ast.ColumnDef) (chs, coll string, err error) { - chs = def.Tp.GetCharset() - coll = def.Tp.GetCollate() - if chs != "" && coll == "" { - if coll, err = GetDefaultCollation(sessVars, chs); err != nil { - return "", "", errors.Trace(err) - } - } - for _, opt := range def.Options { - if opt.Tp == ast.ColumnOptionCollate { - info, err := collate.GetCollationByName(opt.StrValue) - if err != nil { - return "", "", errors.Trace(err) - } - if chs == "" { - chs = info.CharsetName - } else if chs != info.CharsetName { - return "", "", dbterror.ErrCollationCharsetMismatch.GenWithStackByArgs(info.Name, chs) - } - coll = info.Name - } - } - return -} - -// GetCharsetAndCollateInTableOption will iterate the charset and collate in the options, -// and returns the last charset and collate in options. If there is no charset in the options, -// the returns charset will be "", the same as collate. -func GetCharsetAndCollateInTableOption(sessVars *variable.SessionVars, startIdx int, options []*ast.TableOption) (chs, coll string, err error) { - for i := startIdx; i < len(options); i++ { - opt := options[i] - // we set the charset to the last option. example: alter table t charset latin1 charset utf8 collate utf8_bin; - // the charset will be utf8, collate will be utf8_bin - switch opt.Tp { - case ast.TableOptionCharset: - info, err := charset.GetCharsetInfo(opt.StrValue) - if err != nil { - return "", "", err - } - if len(chs) == 0 { - chs = info.Name - } else if chs != info.Name { - return "", "", dbterror.ErrConflictingDeclarations.GenWithStackByArgs(chs, info.Name) - } - if len(coll) == 0 { - defaultColl, err := getDefaultCollationForUTF8MB4(sessVars, chs) - if err != nil { - return "", "", errors.Trace(err) - } - if len(defaultColl) == 0 { - coll = info.DefaultCollation - } else { - coll = defaultColl - } - } - case ast.TableOptionCollate: - info, err := collate.GetCollationByName(opt.StrValue) - if err != nil { - return "", "", err - } - if len(chs) == 0 { - chs = info.CharsetName - } else if chs != info.CharsetName { - return "", "", dbterror.ErrCollationCharsetMismatch.GenWithStackByArgs(info.Name, chs) - } - coll = info.Name - } - } - return -} - -// NeedToOverwriteColCharset return true for altering charset and specified CONVERT TO. -func NeedToOverwriteColCharset(options []*ast.TableOption) bool { - for i := len(options) - 1; i >= 0; i-- { - opt := options[i] - if opt.Tp == ast.TableOptionCharset { - // Only overwrite columns charset if the option contains `CONVERT TO`. - return opt.UintValue == ast.TableOptionCharsetWithConvertTo - } - } - return false -} - -// resolveAlterTableAddColumns splits "add columns" to multiple spec. For example, -// `ALTER TABLE ADD COLUMN (c1 INT, c2 INT)` is split into -// `ALTER TABLE ADD COLUMN c1 INT, ADD COLUMN c2 INT`. -func resolveAlterTableAddColumns(spec *ast.AlterTableSpec) []*ast.AlterTableSpec { - specs := make([]*ast.AlterTableSpec, 0, len(spec.NewColumns)+len(spec.NewConstraints)) - for _, col := range spec.NewColumns { - t := *spec - t.NewColumns = []*ast.ColumnDef{col} - t.NewConstraints = []*ast.Constraint{} - specs = append(specs, &t) - } - // Split the add constraints from AlterTableSpec. - for _, con := range spec.NewConstraints { - t := *spec - t.NewColumns = []*ast.ColumnDef{} - t.NewConstraints = []*ast.Constraint{} - t.Constraint = con - t.Tp = ast.AlterTableAddConstraint - specs = append(specs, &t) - } - return specs -} - -// ResolveAlterTableSpec resolves alter table algorithm and removes ignore table spec in specs. -// returns valid specs, and the occurred error. -func ResolveAlterTableSpec(ctx sessionctx.Context, specs []*ast.AlterTableSpec) ([]*ast.AlterTableSpec, error) { - validSpecs := make([]*ast.AlterTableSpec, 0, len(specs)) - algorithm := ast.AlgorithmTypeDefault - for _, spec := range specs { - if spec.Tp == ast.AlterTableAlgorithm { - // Find the last AlterTableAlgorithm. - algorithm = spec.Algorithm - } - if isIgnorableSpec(spec.Tp) { - continue - } - if spec.Tp == ast.AlterTableAddColumns && (len(spec.NewColumns) > 1 || len(spec.NewConstraints) > 0) { - validSpecs = append(validSpecs, resolveAlterTableAddColumns(spec)...) - } else { - validSpecs = append(validSpecs, spec) - } - // TODO: Only allow REMOVE PARTITIONING as a single ALTER TABLE statement? - } - - // Verify whether the algorithm is supported. - for _, spec := range validSpecs { - resolvedAlgorithm, err := ResolveAlterAlgorithm(spec, algorithm) - if err != nil { - // If TiDB failed to choose a better algorithm, report the error - if resolvedAlgorithm == ast.AlgorithmTypeDefault { - return nil, errors.Trace(err) - } - // For the compatibility, we return warning instead of error when a better algorithm is chosed by TiDB - ctx.GetSessionVars().StmtCtx.AppendError(err) - } - - spec.Algorithm = resolvedAlgorithm - } - - // Only handle valid specs. - return validSpecs, nil -} - -func isMultiSchemaChanges(specs []*ast.AlterTableSpec) bool { - if len(specs) > 1 { - return true - } - if len(specs) == 1 && len(specs[0].NewColumns) > 1 && specs[0].Tp == ast.AlterTableAddColumns { - return true - } - return false -} - -func (e *executor) AlterTable(ctx context.Context, sctx sessionctx.Context, stmt *ast.AlterTableStmt) (err error) { - ident := ast.Ident{Schema: stmt.Table.Schema, Name: stmt.Table.Name} - validSpecs, err := ResolveAlterTableSpec(sctx, stmt.Specs) - if err != nil { - return errors.Trace(err) - } - - is := e.infoCache.GetLatest() - tb, err := is.TableByName(ctx, ident.Schema, ident.Name) - if err != nil { - return errors.Trace(err) - } - if tb.Meta().IsView() || tb.Meta().IsSequence() { - return dbterror.ErrWrongObject.GenWithStackByArgs(ident.Schema, ident.Name, "BASE TABLE") - } - if tb.Meta().TableCacheStatusType != model.TableCacheStatusDisable { - if len(validSpecs) != 1 { - return dbterror.ErrOptOnCacheTable.GenWithStackByArgs("Alter Table") - } - if validSpecs[0].Tp != ast.AlterTableCache && validSpecs[0].Tp != ast.AlterTableNoCache { - return dbterror.ErrOptOnCacheTable.GenWithStackByArgs("Alter Table") - } - } - if isMultiSchemaChanges(validSpecs) && (sctx.GetSessionVars().EnableRowLevelChecksum || variable.EnableRowLevelChecksum.Load()) { - return dbterror.ErrRunMultiSchemaChanges.GenWithStack("Unsupported multi schema change when row level checksum is enabled") - } - // set name for anonymous foreign key. - maxForeignKeyID := tb.Meta().MaxForeignKeyID - for _, spec := range validSpecs { - if spec.Tp == ast.AlterTableAddConstraint && spec.Constraint.Tp == ast.ConstraintForeignKey && spec.Constraint.Name == "" { - maxForeignKeyID++ - spec.Constraint.Name = fmt.Sprintf("fk_%d", maxForeignKeyID) - } - } - - if len(validSpecs) > 1 { - // after MultiSchemaInfo is set, DoDDLJob will collect all jobs into - // MultiSchemaInfo and skip running them. Then we will run them in - // d.MultiSchemaChange all at once. - sctx.GetSessionVars().StmtCtx.MultiSchemaInfo = model.NewMultiSchemaInfo() - } - for _, spec := range validSpecs { - var handledCharsetOrCollate bool - var ttlOptionsHandled bool - switch spec.Tp { - case ast.AlterTableAddColumns: - err = e.AddColumn(sctx, ident, spec) - case ast.AlterTableAddPartitions, ast.AlterTableAddLastPartition: - err = e.AddTablePartitions(sctx, ident, spec) - case ast.AlterTableCoalescePartitions: - err = e.CoalescePartitions(sctx, ident, spec) - case ast.AlterTableReorganizePartition: - err = e.ReorganizePartitions(sctx, ident, spec) - case ast.AlterTableReorganizeFirstPartition: - err = dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs("MERGE FIRST PARTITION") - case ast.AlterTableReorganizeLastPartition: - err = dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs("SPLIT LAST PARTITION") - case ast.AlterTableCheckPartitions: - err = errors.Trace(dbterror.ErrUnsupportedCheckPartition) - case ast.AlterTableRebuildPartition: - err = errors.Trace(dbterror.ErrUnsupportedRebuildPartition) - case ast.AlterTableOptimizePartition: - err = errors.Trace(dbterror.ErrUnsupportedOptimizePartition) - case ast.AlterTableRemovePartitioning: - err = e.RemovePartitioning(sctx, ident, spec) - case ast.AlterTableRepairPartition: - err = errors.Trace(dbterror.ErrUnsupportedRepairPartition) - case ast.AlterTableDropColumn: - err = e.DropColumn(sctx, ident, spec) - case ast.AlterTableDropIndex: - err = e.dropIndex(sctx, ident, model.NewCIStr(spec.Name), spec.IfExists, false) - case ast.AlterTableDropPrimaryKey: - err = e.dropIndex(sctx, ident, model.NewCIStr(mysql.PrimaryKeyName), spec.IfExists, false) - case ast.AlterTableRenameIndex: - err = e.RenameIndex(sctx, ident, spec) - case ast.AlterTableDropPartition, ast.AlterTableDropFirstPartition: - err = e.DropTablePartition(sctx, ident, spec) - case ast.AlterTableTruncatePartition: - err = e.TruncateTablePartition(sctx, ident, spec) - case ast.AlterTableWriteable: - if !config.TableLockEnabled() { - return nil - } - tName := &ast.TableName{Schema: ident.Schema, Name: ident.Name} - if spec.Writeable { - err = e.CleanupTableLock(sctx, []*ast.TableName{tName}) - } else { - lockStmt := &ast.LockTablesStmt{ - TableLocks: []ast.TableLock{ - { - Table: tName, - Type: model.TableLockReadOnly, - }, - }, - } - err = e.LockTables(sctx, lockStmt) - } - case ast.AlterTableExchangePartition: - err = e.ExchangeTablePartition(sctx, ident, spec) - case ast.AlterTableAddConstraint: - constr := spec.Constraint - switch spec.Constraint.Tp { - case ast.ConstraintKey, ast.ConstraintIndex: - err = e.createIndex(sctx, ident, ast.IndexKeyTypeNone, model.NewCIStr(constr.Name), - spec.Constraint.Keys, constr.Option, constr.IfNotExists) - case ast.ConstraintUniq, ast.ConstraintUniqIndex, ast.ConstraintUniqKey: - err = e.createIndex(sctx, ident, ast.IndexKeyTypeUnique, model.NewCIStr(constr.Name), - spec.Constraint.Keys, constr.Option, false) // IfNotExists should be not applied - case ast.ConstraintForeignKey: - // NOTE: we do not handle `symbol` and `index_name` well in the parser and we do not check ForeignKey already exists, - // so we just also ignore the `if not exists` check. - err = e.CreateForeignKey(sctx, ident, model.NewCIStr(constr.Name), spec.Constraint.Keys, spec.Constraint.Refer) - case ast.ConstraintPrimaryKey: - err = e.CreatePrimaryKey(sctx, ident, model.NewCIStr(constr.Name), spec.Constraint.Keys, constr.Option) - case ast.ConstraintFulltext: - sctx.GetSessionVars().StmtCtx.AppendWarning(dbterror.ErrTableCantHandleFt) - case ast.ConstraintCheck: - if !variable.EnableCheckConstraint.Load() { - sctx.GetSessionVars().StmtCtx.AppendWarning(errCheckConstraintIsOff) - } else { - err = e.CreateCheckConstraint(sctx, ident, model.NewCIStr(constr.Name), spec.Constraint) - } - default: - // Nothing to do now. - } - case ast.AlterTableDropForeignKey: - // NOTE: we do not check `if not exists` and `if exists` for ForeignKey now. - err = e.DropForeignKey(sctx, ident, model.NewCIStr(spec.Name)) - case ast.AlterTableModifyColumn: - err = e.ModifyColumn(ctx, sctx, ident, spec) - case ast.AlterTableChangeColumn: - err = e.ChangeColumn(ctx, sctx, ident, spec) - case ast.AlterTableRenameColumn: - err = e.RenameColumn(sctx, ident, spec) - case ast.AlterTableAlterColumn: - err = e.AlterColumn(sctx, ident, spec) - case ast.AlterTableRenameTable: - newIdent := ast.Ident{Schema: spec.NewTable.Schema, Name: spec.NewTable.Name} - isAlterTable := true - err = e.renameTable(sctx, ident, newIdent, isAlterTable) - case ast.AlterTablePartition: - err = e.AlterTablePartitioning(sctx, ident, spec) - case ast.AlterTableOption: - var placementPolicyRef *model.PolicyRefInfo - for i, opt := range spec.Options { - switch opt.Tp { - case ast.TableOptionShardRowID: - if opt.UintValue > shardRowIDBitsMax { - opt.UintValue = shardRowIDBitsMax - } - err = e.ShardRowID(sctx, ident, opt.UintValue) - case ast.TableOptionAutoIncrement: - err = e.RebaseAutoID(sctx, ident, int64(opt.UintValue), autoid.AutoIncrementType, opt.BoolValue) - case ast.TableOptionAutoIdCache: - if opt.UintValue > uint64(math.MaxInt64) { - // TODO: Refine this error. - return errors.New("table option auto_id_cache overflows int64") - } - err = e.AlterTableAutoIDCache(sctx, ident, int64(opt.UintValue)) - case ast.TableOptionAutoRandomBase: - err = e.RebaseAutoID(sctx, ident, int64(opt.UintValue), autoid.AutoRandomType, opt.BoolValue) - case ast.TableOptionComment: - spec.Comment = opt.StrValue - err = e.AlterTableComment(sctx, ident, spec) - case ast.TableOptionCharset, ast.TableOptionCollate: - // GetCharsetAndCollateInTableOption will get the last charset and collate in the options, - // so it should be handled only once. - if handledCharsetOrCollate { - continue - } - var toCharset, toCollate string - toCharset, toCollate, err = GetCharsetAndCollateInTableOption(sctx.GetSessionVars(), i, spec.Options) - if err != nil { - return err - } - needsOverwriteCols := NeedToOverwriteColCharset(spec.Options) - err = e.AlterTableCharsetAndCollate(sctx, ident, toCharset, toCollate, needsOverwriteCols) - handledCharsetOrCollate = true - case ast.TableOptionPlacementPolicy: - placementPolicyRef = &model.PolicyRefInfo{ - Name: model.NewCIStr(opt.StrValue), - } - case ast.TableOptionEngine: - case ast.TableOptionRowFormat: - case ast.TableOptionTTL, ast.TableOptionTTLEnable, ast.TableOptionTTLJobInterval: - var ttlInfo *model.TTLInfo - var ttlEnable *bool - var ttlJobInterval *string - - if ttlOptionsHandled { - continue - } - ttlInfo, ttlEnable, ttlJobInterval, err = getTTLInfoInOptions(spec.Options) - if err != nil { - return err - } - err = e.AlterTableTTLInfoOrEnable(sctx, ident, ttlInfo, ttlEnable, ttlJobInterval) - - ttlOptionsHandled = true - default: - err = dbterror.ErrUnsupportedAlterTableOption - } - - if err != nil { - return errors.Trace(err) - } - } - - if placementPolicyRef != nil { - err = e.AlterTablePlacement(sctx, ident, placementPolicyRef) - } - case ast.AlterTableSetTiFlashReplica: - err = e.AlterTableSetTiFlashReplica(sctx, ident, spec.TiFlashReplica) - case ast.AlterTableOrderByColumns: - err = e.OrderByColumns(sctx, ident) - case ast.AlterTableIndexInvisible: - err = e.AlterIndexVisibility(sctx, ident, spec.IndexName, spec.Visibility) - case ast.AlterTableAlterCheck: - if !variable.EnableCheckConstraint.Load() { - sctx.GetSessionVars().StmtCtx.AppendWarning(errCheckConstraintIsOff) - } else { - err = e.AlterCheckConstraint(sctx, ident, model.NewCIStr(spec.Constraint.Name), spec.Constraint.Enforced) - } - case ast.AlterTableDropCheck: - if !variable.EnableCheckConstraint.Load() { - sctx.GetSessionVars().StmtCtx.AppendWarning(errCheckConstraintIsOff) - } else { - err = e.DropCheckConstraint(sctx, ident, model.NewCIStr(spec.Constraint.Name)) - } - case ast.AlterTableWithValidation: - sctx.GetSessionVars().StmtCtx.AppendWarning(dbterror.ErrUnsupportedAlterTableWithValidation) - case ast.AlterTableWithoutValidation: - sctx.GetSessionVars().StmtCtx.AppendWarning(dbterror.ErrUnsupportedAlterTableWithoutValidation) - case ast.AlterTableAddStatistics: - err = e.AlterTableAddStatistics(sctx, ident, spec.Statistics, spec.IfNotExists) - case ast.AlterTableDropStatistics: - err = e.AlterTableDropStatistics(sctx, ident, spec.Statistics, spec.IfExists) - case ast.AlterTableAttributes: - err = e.AlterTableAttributes(sctx, ident, spec) - case ast.AlterTablePartitionAttributes: - err = e.AlterTablePartitionAttributes(sctx, ident, spec) - case ast.AlterTablePartitionOptions: - err = e.AlterTablePartitionOptions(sctx, ident, spec) - case ast.AlterTableCache: - err = e.AlterTableCache(sctx, ident) - case ast.AlterTableNoCache: - err = e.AlterTableNoCache(sctx, ident) - case ast.AlterTableDisableKeys, ast.AlterTableEnableKeys: - // Nothing to do now, see https://github.com/pingcap/tidb/issues/1051 - // MyISAM specific - case ast.AlterTableRemoveTTL: - // the parser makes sure we have only one `ast.AlterTableRemoveTTL` in an alter statement - err = e.AlterTableRemoveTTL(sctx, ident) - default: - err = errors.Trace(dbterror.ErrUnsupportedAlterTableSpec) - } - - if err != nil { - return errors.Trace(err) - } - } - - if sctx.GetSessionVars().StmtCtx.MultiSchemaInfo != nil { - info := sctx.GetSessionVars().StmtCtx.MultiSchemaInfo - sctx.GetSessionVars().StmtCtx.MultiSchemaInfo = nil - err = e.MultiSchemaChange(sctx, ident, info) - if err != nil { - return errors.Trace(err) - } - } - - return nil -} - -func (e *executor) RebaseAutoID(ctx sessionctx.Context, ident ast.Ident, newBase int64, tp autoid.AllocatorType, force bool) error { - schema, t, err := e.getSchemaAndTableByIdent(ident) - if err != nil { - return errors.Trace(err) - } - tbInfo := t.Meta() - var actionType model.ActionType - switch tp { - case autoid.AutoRandomType: - pkCol := tbInfo.GetPkColInfo() - if tbInfo.AutoRandomBits == 0 || pkCol == nil { - return errors.Trace(dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomRebaseNotApplicable)) - } - shardFmt := autoid.NewShardIDFormat(&pkCol.FieldType, tbInfo.AutoRandomBits, tbInfo.AutoRandomRangeBits) - if shardFmt.IncrementalMask()&newBase != newBase { - errMsg := fmt.Sprintf(autoid.AutoRandomRebaseOverflow, newBase, shardFmt.IncrementalBitsCapacity()) - return errors.Trace(dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(errMsg)) - } - actionType = model.ActionRebaseAutoRandomBase - case autoid.RowIDAllocType: - actionType = model.ActionRebaseAutoID - case autoid.AutoIncrementType: - actionType = model.ActionRebaseAutoID - default: - panic(fmt.Sprintf("unimplemented rebase autoid type %s", tp)) - } - - if !force { - newBaseTemp, err := adjustNewBaseToNextGlobalID(ctx.GetTableCtx(), t, tp, newBase) - if err != nil { - return err - } - if newBase != newBaseTemp { - ctx.GetSessionVars().StmtCtx.AppendWarning( - errors.NewNoStackErrorf("Can't reset AUTO_INCREMENT to %d without FORCE option, using %d instead", - newBase, newBaseTemp, - )) - } - newBase = newBaseTemp - } - job := &model.Job{ - SchemaID: schema.ID, - TableID: tbInfo.ID, - SchemaName: schema.Name.L, - TableName: tbInfo.Name.L, - Type: actionType, - BinlogInfo: &model.HistoryInfo{}, - Args: []any{newBase, force}, - CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, - SQLMode: ctx.GetSessionVars().SQLMode, - } - err = e.DoDDLJob(ctx, job) - return errors.Trace(err) -} - -func adjustNewBaseToNextGlobalID(ctx table.AllocatorContext, t table.Table, tp autoid.AllocatorType, newBase int64) (int64, error) { - alloc := t.Allocators(ctx).Get(tp) - if alloc == nil { - return newBase, nil - } - autoID, err := alloc.NextGlobalAutoID() - if err != nil { - return newBase, errors.Trace(err) - } - // If newBase < autoID, we need to do a rebase before returning. - // Assume there are 2 TiDB servers: TiDB-A with allocator range of 0 ~ 30000; TiDB-B with allocator range of 30001 ~ 60000. - // If the user sends SQL `alter table t1 auto_increment = 100` to TiDB-B, - // and TiDB-B finds 100 < 30001 but returns without any handling, - // then TiDB-A may still allocate 99 for auto_increment column. This doesn't make sense for the user. - return int64(mathutil.Max(uint64(newBase), uint64(autoID))), nil -} - -// ShardRowID shards the implicit row ID by adding shard value to the row ID's first few bits. -func (e *executor) ShardRowID(ctx sessionctx.Context, tableIdent ast.Ident, uVal uint64) error { - schema, t, err := e.getSchemaAndTableByIdent(tableIdent) - if err != nil { - return errors.Trace(err) - } - tbInfo := t.Meta() - if tbInfo.TempTableType != model.TempTableNone { - return dbterror.ErrOptOnTemporaryTable.GenWithStackByArgs("shard_row_id_bits") - } - if uVal == tbInfo.ShardRowIDBits { - // Nothing need to do. - return nil - } - if uVal > 0 && tbInfo.HasClusteredIndex() { - return dbterror.ErrUnsupportedShardRowIDBits - } - err = verifyNoOverflowShardBits(e.sessPool, t, uVal) - if err != nil { - return err - } - job := &model.Job{ - Type: model.ActionShardRowID, - SchemaID: schema.ID, - TableID: tbInfo.ID, - SchemaName: schema.Name.L, - TableName: tbInfo.Name.L, - BinlogInfo: &model.HistoryInfo{}, - Args: []any{uVal}, - CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, - SQLMode: ctx.GetSessionVars().SQLMode, - } - err = e.DoDDLJob(ctx, job) - return errors.Trace(err) -} - -func (e *executor) getSchemaAndTableByIdent(tableIdent ast.Ident) (dbInfo *model.DBInfo, t table.Table, err error) { - is := e.infoCache.GetLatest() - schema, ok := is.SchemaByName(tableIdent.Schema) - if !ok { - return nil, nil, infoschema.ErrDatabaseNotExists.GenWithStackByArgs(tableIdent.Schema) - } - t, err = is.TableByName(e.ctx, tableIdent.Schema, tableIdent.Name) - if err != nil { - return nil, nil, infoschema.ErrTableNotExists.GenWithStackByArgs(tableIdent.Schema, tableIdent.Name) - } - return schema, t, nil -} - -func checkUnsupportedColumnConstraint(col *ast.ColumnDef, ti ast.Ident) error { - for _, constraint := range col.Options { - switch constraint.Tp { - case ast.ColumnOptionAutoIncrement: - return dbterror.ErrUnsupportedAddColumn.GenWithStack("unsupported add column '%s' constraint AUTO_INCREMENT when altering '%s.%s'", col.Name, ti.Schema, ti.Name) - case ast.ColumnOptionPrimaryKey: - return dbterror.ErrUnsupportedAddColumn.GenWithStack("unsupported add column '%s' constraint PRIMARY KEY when altering '%s.%s'", col.Name, ti.Schema, ti.Name) - case ast.ColumnOptionUniqKey: - return dbterror.ErrUnsupportedAddColumn.GenWithStack("unsupported add column '%s' constraint UNIQUE KEY when altering '%s.%s'", col.Name, ti.Schema, ti.Name) - case ast.ColumnOptionAutoRandom: - errMsg := fmt.Sprintf(autoid.AutoRandomAlterAddColumn, col.Name, ti.Schema, ti.Name) - return dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(errMsg) - } - } - - return nil -} - -func checkAndCreateNewColumn(ctx sessionctx.Context, ti ast.Ident, schema *model.DBInfo, spec *ast.AlterTableSpec, t table.Table, specNewColumn *ast.ColumnDef) (*table.Column, error) { - err := checkUnsupportedColumnConstraint(specNewColumn, ti) - if err != nil { - return nil, errors.Trace(err) - } - - colName := specNewColumn.Name.Name.O - // Check whether added column has existed. - col := table.FindCol(t.Cols(), colName) - if col != nil { - err = infoschema.ErrColumnExists.GenWithStackByArgs(colName) - if spec.IfNotExists { - ctx.GetSessionVars().StmtCtx.AppendNote(err) - return nil, nil - } - return nil, err - } - if err = checkColumnAttributes(colName, specNewColumn.Tp); err != nil { - return nil, errors.Trace(err) - } - if utf8.RuneCountInString(colName) > mysql.MaxColumnNameLength { - return nil, dbterror.ErrTooLongIdent.GenWithStackByArgs(colName) - } - - return CreateNewColumn(ctx, schema, spec, t, specNewColumn) -} - -// CreateNewColumn creates a new column according to the column information. -func CreateNewColumn(ctx sessionctx.Context, schema *model.DBInfo, spec *ast.AlterTableSpec, t table.Table, specNewColumn *ast.ColumnDef) (*table.Column, error) { - // If new column is a generated column, do validation. - // NOTE: we do check whether the column refers other generated - // columns occurring later in a table, but we don't handle the col offset. - for _, option := range specNewColumn.Options { - if option.Tp == ast.ColumnOptionGenerated { - if err := checkIllegalFn4Generated(specNewColumn.Name.Name.L, typeColumn, option.Expr); err != nil { - return nil, errors.Trace(err) - } - - if option.Stored { - return nil, dbterror.ErrUnsupportedOnGeneratedColumn.GenWithStackByArgs("Adding generated stored column through ALTER TABLE") - } - - _, dependColNames, err := findDependedColumnNames(schema.Name, t.Meta().Name, specNewColumn) - if err != nil { - return nil, errors.Trace(err) - } - if !ctx.GetSessionVars().EnableAutoIncrementInGenerated { - if err := checkAutoIncrementRef(specNewColumn.Name.Name.L, dependColNames, t.Meta()); err != nil { - return nil, errors.Trace(err) - } - } - duplicateColNames := make(map[string]struct{}, len(dependColNames)) - for k := range dependColNames { - duplicateColNames[k] = struct{}{} - } - cols := t.Cols() - - if err := checkDependedColExist(dependColNames, cols); err != nil { - return nil, errors.Trace(err) - } - - if err := verifyColumnGenerationSingle(duplicateColNames, cols, spec.Position); err != nil { - return nil, errors.Trace(err) - } - } - // Specially, since sequence has been supported, if a newly added column has a - // sequence nextval function as it's default value option, it won't fill the - // known rows with specific sequence next value under current add column logic. - // More explanation can refer: TestSequenceDefaultLogic's comment in sequence_test.go - if option.Tp == ast.ColumnOptionDefaultValue { - if f, ok := option.Expr.(*ast.FuncCallExpr); ok { - switch f.FnName.L { - case ast.NextVal: - if _, err := getSequenceDefaultValue(option); err != nil { - return nil, errors.Trace(err) - } - return nil, errors.Trace(dbterror.ErrAddColumnWithSequenceAsDefault.GenWithStackByArgs(specNewColumn.Name.Name.O)) - case ast.Rand, ast.UUID, ast.UUIDToBin, ast.Replace, ast.Upper: - return nil, errors.Trace(dbterror.ErrBinlogUnsafeSystemFunction.GenWithStackByArgs()) - } - } - } - } - - tableCharset, tableCollate, err := ResolveCharsetCollation(ctx.GetSessionVars(), - ast.CharsetOpt{Chs: t.Meta().Charset, Col: t.Meta().Collate}, - ast.CharsetOpt{Chs: schema.Charset, Col: schema.Collate}, - ) - if err != nil { - return nil, errors.Trace(err) - } - // Ignore table constraints now, they will be checked later. - // We use length(t.Cols()) as the default offset firstly, we will change the column's offset later. - col, _, err := buildColumnAndConstraint( - ctx, - len(t.Cols()), - specNewColumn, - nil, - tableCharset, - tableCollate, - ) - if err != nil { - return nil, errors.Trace(err) - } - - originDefVal, err := generateOriginDefaultValue(col.ToInfo(), ctx) - if err != nil { - return nil, errors.Trace(err) - } - - err = col.SetOriginDefaultValue(originDefVal) - return col, err -} - -// AddColumn will add a new column to the table. -func (e *executor) AddColumn(ctx sessionctx.Context, ti ast.Ident, spec *ast.AlterTableSpec) error { - specNewColumn := spec.NewColumns[0] - schema, t, err := e.getSchemaAndTableByIdent(ti) - if err != nil { - return errors.Trace(err) - } - failpoint.InjectCall("afterGetSchemaAndTableByIdent", ctx) - tbInfo := t.Meta() - if err = checkAddColumnTooManyColumns(len(t.Cols()) + 1); err != nil { - return errors.Trace(err) - } - col, err := checkAndCreateNewColumn(ctx, ti, schema, spec, t, specNewColumn) - if err != nil { - return errors.Trace(err) - } - // Added column has existed and if_not_exists flag is true. - if col == nil { - return nil - } - err = CheckAfterPositionExists(tbInfo, spec.Position) - if err != nil { - return errors.Trace(err) - } - - txn, err := ctx.Txn(true) - if err != nil { - return errors.Trace(err) - } - bdrRole, err := meta.NewMeta(txn).GetBDRRole() - if err != nil { - return errors.Trace(err) - } - if bdrRole == string(ast.BDRRolePrimary) && deniedByBDRWhenAddColumn(specNewColumn.Options) { - return dbterror.ErrBDRRestrictedDDL.FastGenByArgs(bdrRole) - } - - job := &model.Job{ - SchemaID: schema.ID, - TableID: tbInfo.ID, - SchemaName: schema.Name.L, - TableName: tbInfo.Name.L, - Type: model.ActionAddColumn, - BinlogInfo: &model.HistoryInfo{}, - Args: []any{col, spec.Position, 0, spec.IfNotExists}, - CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, - SQLMode: ctx.GetSessionVars().SQLMode, - } - - err = e.DoDDLJob(ctx, job) - return errors.Trace(err) -} - -// AddTablePartitions will add a new partition to the table. -func (e *executor) AddTablePartitions(ctx sessionctx.Context, ident ast.Ident, spec *ast.AlterTableSpec) error { - is := e.infoCache.GetLatest() - schema, ok := is.SchemaByName(ident.Schema) - if !ok { - return errors.Trace(infoschema.ErrDatabaseNotExists.GenWithStackByArgs(schema)) - } - t, err := is.TableByName(e.ctx, ident.Schema, ident.Name) + is := e.infoCache.GetLatest() + tb, err := is.TableByName(ctx, ident.Schema, ident.Name) if err != nil { - return errors.Trace(infoschema.ErrTableNotExists.GenWithStackByArgs(ident.Schema, ident.Name)) + return errors.Trace(err) } - - meta := t.Meta() - pi := meta.GetPartitionInfo() - if pi == nil { - return errors.Trace(dbterror.ErrPartitionMgmtOnNonpartitioned) + if tb.Meta().IsView() || tb.Meta().IsSequence() { + return dbterror.ErrWrongObject.GenWithStackByArgs(ident.Schema, ident.Name, "BASE TABLE") } - if pi.Type == model.PartitionTypeHash || pi.Type == model.PartitionTypeKey { - // Add partition for hash/key is actually a reorganize partition - // operation and not a metadata only change! - switch spec.Tp { - case ast.AlterTableAddLastPartition: - return errors.Trace(dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs("LAST PARTITION of HASH/KEY partitioned table")) - case ast.AlterTableAddPartitions: - // only thing supported - default: - return errors.Trace(dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs("ADD PARTITION of HASH/KEY partitioned table")) + if tb.Meta().TableCacheStatusType != model.TableCacheStatusDisable { + if len(validSpecs) != 1 { + return dbterror.ErrOptOnCacheTable.GenWithStackByArgs("Alter Table") } - return e.hashPartitionManagement(ctx, ident, spec, pi) - } - - partInfo, err := BuildAddedPartitionInfo(ctx.GetExprCtx(), meta, spec) - if err != nil { - return errors.Trace(err) - } - if pi.Type == model.PartitionTypeList { - // TODO: make sure that checks in ddl_api and ddl_worker is the same. - err = checkAddListPartitions(meta) - if err != nil { - return errors.Trace(err) + if validSpecs[0].Tp != ast.AlterTableCache && validSpecs[0].Tp != ast.AlterTableNoCache { + return dbterror.ErrOptOnCacheTable.GenWithStackByArgs("Alter Table") } } - if err := e.assignPartitionIDs(partInfo.Definitions); err != nil { - return errors.Trace(err) + if isMultiSchemaChanges(validSpecs) && (sctx.GetSessionVars().EnableRowLevelChecksum || variable.EnableRowLevelChecksum.Load()) { + return dbterror.ErrRunMultiSchemaChanges.GenWithStack("Unsupported multi schema change when row level checksum is enabled") } - - // partInfo contains only the new added partition, we have to combine it with the - // old partitions to check all partitions is strictly increasing. - clonedMeta := meta.Clone() - tmp := *partInfo - tmp.Definitions = append(pi.Definitions, tmp.Definitions...) - clonedMeta.Partition = &tmp - if err := checkPartitionDefinitionConstraints(ctx, clonedMeta); err != nil { - if dbterror.ErrSameNamePartition.Equal(err) && spec.IfNotExists { - ctx.GetSessionVars().StmtCtx.AppendNote(err) - return nil + // set name for anonymous foreign key. + maxForeignKeyID := tb.Meta().MaxForeignKeyID + for _, spec := range validSpecs { + if spec.Tp == ast.AlterTableAddConstraint && spec.Constraint.Tp == ast.ConstraintForeignKey && spec.Constraint.Name == "" { + maxForeignKeyID++ + spec.Constraint.Name = fmt.Sprintf("fk_%d", maxForeignKeyID) } - return errors.Trace(err) - } - - if err = handlePartitionPlacement(ctx, partInfo); err != nil { - return errors.Trace(err) } - job := &model.Job{ - SchemaID: schema.ID, - TableID: meta.ID, - SchemaName: schema.Name.L, - TableName: t.Meta().Name.L, - Type: model.ActionAddTablePartition, - BinlogInfo: &model.HistoryInfo{}, - Args: []any{partInfo}, - CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, - SQLMode: ctx.GetSessionVars().SQLMode, + if len(validSpecs) > 1 { + // after MultiSchemaInfo is set, DoDDLJob will collect all jobs into + // MultiSchemaInfo and skip running them. Then we will run them in + // d.multiSchemaChange all at once. + sctx.GetSessionVars().StmtCtx.MultiSchemaInfo = model.NewMultiSchemaInfo() } + for _, spec := range validSpecs { + var handledCharsetOrCollate bool + var ttlOptionsHandled bool + switch spec.Tp { + case ast.AlterTableAddColumns: + err = e.AddColumn(sctx, ident, spec) + case ast.AlterTableAddPartitions, ast.AlterTableAddLastPartition: + err = e.AddTablePartitions(sctx, ident, spec) + case ast.AlterTableCoalescePartitions: + err = e.CoalescePartitions(sctx, ident, spec) + case ast.AlterTableReorganizePartition: + err = e.ReorganizePartitions(sctx, ident, spec) + case ast.AlterTableReorganizeFirstPartition: + err = dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs("MERGE FIRST PARTITION") + case ast.AlterTableReorganizeLastPartition: + err = dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs("SPLIT LAST PARTITION") + case ast.AlterTableCheckPartitions: + err = errors.Trace(dbterror.ErrUnsupportedCheckPartition) + case ast.AlterTableRebuildPartition: + err = errors.Trace(dbterror.ErrUnsupportedRebuildPartition) + case ast.AlterTableOptimizePartition: + err = errors.Trace(dbterror.ErrUnsupportedOptimizePartition) + case ast.AlterTableRemovePartitioning: + err = e.RemovePartitioning(sctx, ident, spec) + case ast.AlterTableRepairPartition: + err = errors.Trace(dbterror.ErrUnsupportedRepairPartition) + case ast.AlterTableDropColumn: + err = e.DropColumn(sctx, ident, spec) + case ast.AlterTableDropIndex: + err = e.dropIndex(sctx, ident, model.NewCIStr(spec.Name), spec.IfExists, false) + case ast.AlterTableDropPrimaryKey: + err = e.dropIndex(sctx, ident, model.NewCIStr(mysql.PrimaryKeyName), spec.IfExists, false) + case ast.AlterTableRenameIndex: + err = e.RenameIndex(sctx, ident, spec) + case ast.AlterTableDropPartition, ast.AlterTableDropFirstPartition: + err = e.DropTablePartition(sctx, ident, spec) + case ast.AlterTableTruncatePartition: + err = e.TruncateTablePartition(sctx, ident, spec) + case ast.AlterTableWriteable: + if !config.TableLockEnabled() { + return nil + } + tName := &ast.TableName{Schema: ident.Schema, Name: ident.Name} + if spec.Writeable { + err = e.CleanupTableLock(sctx, []*ast.TableName{tName}) + } else { + lockStmt := &ast.LockTablesStmt{ + TableLocks: []ast.TableLock{ + { + Table: tName, + Type: model.TableLockReadOnly, + }, + }, + } + err = e.LockTables(sctx, lockStmt) + } + case ast.AlterTableExchangePartition: + err = e.ExchangeTablePartition(sctx, ident, spec) + case ast.AlterTableAddConstraint: + constr := spec.Constraint + switch spec.Constraint.Tp { + case ast.ConstraintKey, ast.ConstraintIndex: + err = e.createIndex(sctx, ident, ast.IndexKeyTypeNone, model.NewCIStr(constr.Name), + spec.Constraint.Keys, constr.Option, constr.IfNotExists) + case ast.ConstraintUniq, ast.ConstraintUniqIndex, ast.ConstraintUniqKey: + err = e.createIndex(sctx, ident, ast.IndexKeyTypeUnique, model.NewCIStr(constr.Name), + spec.Constraint.Keys, constr.Option, false) // IfNotExists should be not applied + case ast.ConstraintForeignKey: + // NOTE: we do not handle `symbol` and `index_name` well in the parser and we do not check ForeignKey already exists, + // so we just also ignore the `if not exists` check. + err = e.CreateForeignKey(sctx, ident, model.NewCIStr(constr.Name), spec.Constraint.Keys, spec.Constraint.Refer) + case ast.ConstraintPrimaryKey: + err = e.CreatePrimaryKey(sctx, ident, model.NewCIStr(constr.Name), spec.Constraint.Keys, constr.Option) + case ast.ConstraintFulltext: + sctx.GetSessionVars().StmtCtx.AppendWarning(dbterror.ErrTableCantHandleFt) + case ast.ConstraintCheck: + if !variable.EnableCheckConstraint.Load() { + sctx.GetSessionVars().StmtCtx.AppendWarning(errCheckConstraintIsOff) + } else { + err = e.CreateCheckConstraint(sctx, ident, model.NewCIStr(constr.Name), spec.Constraint) + } + default: + // Nothing to do now. + } + case ast.AlterTableDropForeignKey: + // NOTE: we do not check `if not exists` and `if exists` for ForeignKey now. + err = e.DropForeignKey(sctx, ident, model.NewCIStr(spec.Name)) + case ast.AlterTableModifyColumn: + err = e.ModifyColumn(ctx, sctx, ident, spec) + case ast.AlterTableChangeColumn: + err = e.ChangeColumn(ctx, sctx, ident, spec) + case ast.AlterTableRenameColumn: + err = e.RenameColumn(sctx, ident, spec) + case ast.AlterTableAlterColumn: + err = e.AlterColumn(sctx, ident, spec) + case ast.AlterTableRenameTable: + newIdent := ast.Ident{Schema: spec.NewTable.Schema, Name: spec.NewTable.Name} + isAlterTable := true + err = e.renameTable(sctx, ident, newIdent, isAlterTable) + case ast.AlterTablePartition: + err = e.AlterTablePartitioning(sctx, ident, spec) + case ast.AlterTableOption: + var placementPolicyRef *model.PolicyRefInfo + for i, opt := range spec.Options { + switch opt.Tp { + case ast.TableOptionShardRowID: + if opt.UintValue > shardRowIDBitsMax { + opt.UintValue = shardRowIDBitsMax + } + err = e.ShardRowID(sctx, ident, opt.UintValue) + case ast.TableOptionAutoIncrement: + err = e.RebaseAutoID(sctx, ident, int64(opt.UintValue), autoid.AutoIncrementType, opt.BoolValue) + case ast.TableOptionAutoIdCache: + if opt.UintValue > uint64(math.MaxInt64) { + // TODO: Refine this error. + return errors.New("table option auto_id_cache overflows int64") + } + err = e.AlterTableAutoIDCache(sctx, ident, int64(opt.UintValue)) + case ast.TableOptionAutoRandomBase: + err = e.RebaseAutoID(sctx, ident, int64(opt.UintValue), autoid.AutoRandomType, opt.BoolValue) + case ast.TableOptionComment: + spec.Comment = opt.StrValue + err = e.AlterTableComment(sctx, ident, spec) + case ast.TableOptionCharset, ast.TableOptionCollate: + // GetCharsetAndCollateInTableOption will get the last charset and collate in the options, + // so it should be handled only once. + if handledCharsetOrCollate { + continue + } + var toCharset, toCollate string + toCharset, toCollate, err = GetCharsetAndCollateInTableOption(sctx.GetSessionVars(), i, spec.Options) + if err != nil { + return err + } + needsOverwriteCols := NeedToOverwriteColCharset(spec.Options) + err = e.AlterTableCharsetAndCollate(sctx, ident, toCharset, toCollate, needsOverwriteCols) + handledCharsetOrCollate = true + case ast.TableOptionPlacementPolicy: + placementPolicyRef = &model.PolicyRefInfo{ + Name: model.NewCIStr(opt.StrValue), + } + case ast.TableOptionEngine: + case ast.TableOptionRowFormat: + case ast.TableOptionTTL, ast.TableOptionTTLEnable, ast.TableOptionTTLJobInterval: + var ttlInfo *model.TTLInfo + var ttlEnable *bool + var ttlJobInterval *string - if spec.Tp == ast.AlterTableAddLastPartition && spec.Partition != nil { - query, ok := ctx.Value(sessionctx.QueryString).(string) - if ok { - sqlMode := ctx.GetSessionVars().SQLMode - var buf bytes.Buffer - AppendPartitionDefs(partInfo, &buf, sqlMode) + if ttlOptionsHandled { + continue + } + ttlInfo, ttlEnable, ttlJobInterval, err = getTTLInfoInOptions(spec.Options) + if err != nil { + return err + } + err = e.AlterTableTTLInfoOrEnable(sctx, ident, ttlInfo, ttlEnable, ttlJobInterval) - syntacticSugar := spec.Partition.PartitionMethod.OriginalText() - syntacticStart := spec.Partition.PartitionMethod.OriginTextPosition() - newQuery := query[:syntacticStart] + "ADD PARTITION (" + buf.String() + ")" + query[syntacticStart+len(syntacticSugar):] - defer ctx.SetValue(sessionctx.QueryString, query) - ctx.SetValue(sessionctx.QueryString, newQuery) - } - } - err = e.DoDDLJob(ctx, job) - if dbterror.ErrSameNamePartition.Equal(err) && spec.IfNotExists { - ctx.GetSessionVars().StmtCtx.AppendNote(err) - return nil - } - return errors.Trace(err) -} + ttlOptionsHandled = true + default: + err = dbterror.ErrUnsupportedAlterTableOption + } -// getReorganizedDefinitions return the definitions as they would look like after the REORGANIZE PARTITION is done. -func getReorganizedDefinitions(pi *model.PartitionInfo, firstPartIdx, lastPartIdx int, idMap map[int]struct{}) []model.PartitionDefinition { - tmpDefs := make([]model.PartitionDefinition, 0, len(pi.Definitions)+len(pi.AddingDefinitions)-len(idMap)) - if pi.Type == model.PartitionTypeList { - replaced := false - for i := range pi.Definitions { - if _, ok := idMap[i]; ok { - if !replaced { - tmpDefs = append(tmpDefs, pi.AddingDefinitions...) - replaced = true + if err != nil { + return errors.Trace(err) } - continue } - tmpDefs = append(tmpDefs, pi.Definitions[i]) - } - if !replaced { - // For safety, for future non-partitioned table -> partitioned - tmpDefs = append(tmpDefs, pi.AddingDefinitions...) - } - return tmpDefs - } - // Range - tmpDefs = append(tmpDefs, pi.Definitions[:firstPartIdx]...) - tmpDefs = append(tmpDefs, pi.AddingDefinitions...) - if len(pi.Definitions) > (lastPartIdx + 1) { - tmpDefs = append(tmpDefs, pi.Definitions[lastPartIdx+1:]...) - } - return tmpDefs -} -func getReplacedPartitionIDs(names []string, pi *model.PartitionInfo) (firstPartIdx int, lastPartIdx int, idMap map[int]struct{}, err error) { - idMap = make(map[int]struct{}) - firstPartIdx, lastPartIdx = -1, -1 - for _, name := range names { - nameL := strings.ToLower(name) - partIdx := pi.FindPartitionDefinitionByName(nameL) - if partIdx == -1 { - return 0, 0, nil, errors.Trace(dbterror.ErrWrongPartitionName) - } - if _, ok := idMap[partIdx]; ok { - return 0, 0, nil, errors.Trace(dbterror.ErrSameNamePartition) - } - idMap[partIdx] = struct{}{} - if firstPartIdx == -1 { - firstPartIdx = partIdx - } else { - firstPartIdx = mathutil.Min[int](firstPartIdx, partIdx) + if placementPolicyRef != nil { + err = e.AlterTablePlacement(sctx, ident, placementPolicyRef) + } + case ast.AlterTableSetTiFlashReplica: + err = e.AlterTableSetTiFlashReplica(sctx, ident, spec.TiFlashReplica) + case ast.AlterTableOrderByColumns: + err = e.OrderByColumns(sctx, ident) + case ast.AlterTableIndexInvisible: + err = e.AlterIndexVisibility(sctx, ident, spec.IndexName, spec.Visibility) + case ast.AlterTableAlterCheck: + if !variable.EnableCheckConstraint.Load() { + sctx.GetSessionVars().StmtCtx.AppendWarning(errCheckConstraintIsOff) + } else { + err = e.AlterCheckConstraint(sctx, ident, model.NewCIStr(spec.Constraint.Name), spec.Constraint.Enforced) + } + case ast.AlterTableDropCheck: + if !variable.EnableCheckConstraint.Load() { + sctx.GetSessionVars().StmtCtx.AppendWarning(errCheckConstraintIsOff) + } else { + err = e.DropCheckConstraint(sctx, ident, model.NewCIStr(spec.Constraint.Name)) + } + case ast.AlterTableWithValidation: + sctx.GetSessionVars().StmtCtx.AppendWarning(dbterror.ErrUnsupportedAlterTableWithValidation) + case ast.AlterTableWithoutValidation: + sctx.GetSessionVars().StmtCtx.AppendWarning(dbterror.ErrUnsupportedAlterTableWithoutValidation) + case ast.AlterTableAddStatistics: + err = e.AlterTableAddStatistics(sctx, ident, spec.Statistics, spec.IfNotExists) + case ast.AlterTableDropStatistics: + err = e.AlterTableDropStatistics(sctx, ident, spec.Statistics, spec.IfExists) + case ast.AlterTableAttributes: + err = e.AlterTableAttributes(sctx, ident, spec) + case ast.AlterTablePartitionAttributes: + err = e.AlterTablePartitionAttributes(sctx, ident, spec) + case ast.AlterTablePartitionOptions: + err = e.AlterTablePartitionOptions(sctx, ident, spec) + case ast.AlterTableCache: + err = e.AlterTableCache(sctx, ident) + case ast.AlterTableNoCache: + err = e.AlterTableNoCache(sctx, ident) + case ast.AlterTableDisableKeys, ast.AlterTableEnableKeys: + // Nothing to do now, see https://github.com/pingcap/tidb/issues/1051 + // MyISAM specific + case ast.AlterTableRemoveTTL: + // the parser makes sure we have only one `ast.AlterTableRemoveTTL` in an alter statement + err = e.AlterTableRemoveTTL(sctx, ident) + default: + err = errors.Trace(dbterror.ErrUnsupportedAlterTableSpec) } - if lastPartIdx == -1 { - lastPartIdx = partIdx - } else { - lastPartIdx = mathutil.Max[int](lastPartIdx, partIdx) + + if err != nil { + return errors.Trace(err) } } - switch pi.Type { - case model.PartitionTypeRange: - if len(idMap) != (lastPartIdx - firstPartIdx + 1) { - return 0, 0, nil, errors.Trace(dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs( - "REORGANIZE PARTITION of RANGE; not adjacent partitions")) - } - case model.PartitionTypeHash, model.PartitionTypeKey: - if len(idMap) != len(pi.Definitions) { - return 0, 0, nil, errors.Trace(dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs( - "REORGANIZE PARTITION of HASH/RANGE; must reorganize all partitions")) + + if sctx.GetSessionVars().StmtCtx.MultiSchemaInfo != nil { + info := sctx.GetSessionVars().StmtCtx.MultiSchemaInfo + sctx.GetSessionVars().StmtCtx.MultiSchemaInfo = nil + err = e.multiSchemaChange(sctx, ident, info) + if err != nil { + return errors.Trace(err) } } - return firstPartIdx, lastPartIdx, idMap, nil + return nil } -func getPartitionInfoTypeNone() *model.PartitionInfo { - return &model.PartitionInfo{ - Type: model.PartitionTypeNone, - Enable: true, - Definitions: []model.PartitionDefinition{{ - Name: model.NewCIStr("pFullTable"), - Comment: "Intermediate partition during ALTER TABLE ... PARTITION BY ...", - }}, - Num: 1, +func (e *executor) multiSchemaChange(ctx sessionctx.Context, ti ast.Ident, info *model.MultiSchemaInfo) error { + subJobs := info.SubJobs + if len(subJobs) == 0 { + return nil } -} - -// AlterTablePartitioning reorganize one set of partitions to a new set of partitions. -func (e *executor) AlterTablePartitioning(ctx sessionctx.Context, ident ast.Ident, spec *ast.AlterTableSpec) error { - schema, t, err := e.getSchemaAndTableByIdent(ident) + schema, t, err := e.getSchemaAndTableByIdent(ti) if err != nil { - return errors.Trace(infoschema.ErrTableNotExists.FastGenByArgs(ident.Schema, ident.Name)) + return errors.Trace(err) } - meta := t.Meta().Clone() - piOld := meta.GetPartitionInfo() - var partNames []string - if piOld != nil { - partNames = make([]string, 0, len(piOld.Definitions)) - for i := range piOld.Definitions { - partNames = append(partNames, piOld.Definitions[i].Name.L) - } - } else { - piOld = getPartitionInfoTypeNone() - meta.Partition = piOld - partNames = append(partNames, piOld.Definitions[0].Name.L) + logFn := logutil.DDLLogger().Warn + if intest.InTest { + logFn = logutil.DDLLogger().Fatal } - newMeta := meta.Clone() - err = buildTablePartitionInfo(ctx, spec.Partition, newMeta) - if err != nil { - return err - } - newPartInfo := newMeta.Partition - for _, index := range newMeta.Indices { - if index.Unique { - ck, err := checkPartitionKeysConstraint(newMeta.GetPartitionInfo(), index.Columns, newMeta) - if err != nil { - return err + var involvingSchemaInfo []model.InvolvingSchemaInfo + for _, j := range subJobs { + switch j.Type { + case model.ActionAlterTablePlacement: + ref, ok := j.Args[0].(*model.PolicyRefInfo) + if !ok { + logFn("unexpected type of policy reference info", + zap.Any("args[0]", j.Args[0]), + zap.String("type", fmt.Sprintf("%T", j.Args[0]))) + continue } - if !ck { - indexTp := "" - if !ctx.GetSessionVars().EnableGlobalIndex { - if index.Primary { - indexTp = "PRIMARY KEY" - } else { - indexTp = "UNIQUE INDEX" - } - } else if t.Meta().IsCommonHandle { - indexTp = "CLUSTERED INDEX" - } - if indexTp != "" { - return dbterror.ErrUniqueKeyNeedAllFieldsInPf.GenWithStackByArgs(indexTp) - } - // Also mark the unique index as global index - index.Global = true + if ref == nil { + continue } - } - } - if newMeta.PKIsHandle { - // This case is covers when the Handle is the PK (only ints), since it would not - // have an entry in the tblInfo.Indices - indexCols := []*model.IndexColumn{{ - Name: newMeta.GetPkName(), - Length: types.UnspecifiedLength, - }} - ck, err := checkPartitionKeysConstraint(newMeta.GetPartitionInfo(), indexCols, newMeta) - if err != nil { - return err - } - if !ck { - if !ctx.GetSessionVars().EnableGlobalIndex { - return dbterror.ErrUniqueKeyNeedAllFieldsInPf.GenWithStackByArgs("PRIMARY KEY") + involvingSchemaInfo = append(involvingSchemaInfo, model.InvolvingSchemaInfo{ + Policy: ref.Name.L, + Mode: model.SharedInvolving, + }) + case model.ActionAddForeignKey: + ref, ok := j.Args[0].(*model.FKInfo) + if !ok { + logFn("unexpected type of foreign key info", + zap.Any("args[0]", j.Args[0]), + zap.String("type", fmt.Sprintf("%T", j.Args[0]))) + continue + } + involvingSchemaInfo = append(involvingSchemaInfo, model.InvolvingSchemaInfo{ + Database: ref.RefSchema.L, + Table: ref.RefTable.L, + Mode: model.SharedInvolving, + }) + case model.ActionAlterTablePartitionPlacement: + if len(j.Args) < 2 { + logFn("unexpected number of arguments for partition placement", + zap.Int("len(args)", len(j.Args)), + zap.Any("args", j.Args)) + continue + } + ref, ok := j.Args[1].(*model.PolicyRefInfo) + if !ok { + logFn("unexpected type of policy reference info", + zap.Any("args[0]", j.Args[0]), + zap.String("type", fmt.Sprintf("%T", j.Args[0]))) + continue + } + if ref == nil { + continue } - return dbterror.ErrUniqueKeyNeedAllFieldsInPf.GenWithStackByArgs("CLUSTERED INDEX") + involvingSchemaInfo = append(involvingSchemaInfo, model.InvolvingSchemaInfo{ + Policy: ref.Name.L, + Mode: model.SharedInvolving, + }) } } - if err = handlePartitionPlacement(ctx, newPartInfo); err != nil { - return errors.Trace(err) - } - - if err = e.assignPartitionIDs(newPartInfo.Definitions); err != nil { - return errors.Trace(err) - } - // A new table ID would be needed for - // the global index, which cannot be the same as the current table id, - // since this table id will be removed in the final state when removing - // all the data with this table id. - var newID []int64 - newID, err = e.genGlobalIDs(1) - if err != nil { - return errors.Trace(err) - } - newPartInfo.NewTableID = newID[0] - newPartInfo.DDLType = piOld.Type - - job := &model.Job{ - SchemaID: schema.ID, - TableID: meta.ID, - SchemaName: schema.Name.L, - TableName: t.Meta().Name.L, - Type: model.ActionAlterTablePartitioning, - BinlogInfo: &model.HistoryInfo{}, - Args: []any{partNames, newPartInfo}, - ReorgMeta: NewDDLReorgMeta(ctx), - CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, - SQLMode: ctx.GetSessionVars().SQLMode, - } - - // No preSplitAndScatter here, it will be done by the worker in onReorganizePartition instead. - err = e.DoDDLJob(ctx, job) - if err == nil { - ctx.GetSessionVars().StmtCtx.AppendWarning(errors.NewNoStackError("The statistics of new partitions will be outdated after reorganizing partitions. Please use 'ANALYZE TABLE' statement if you want to update it now")) - } - return errors.Trace(err) -} - -// ReorganizePartitions reorganize one set of partitions to a new set of partitions. -func (e *executor) ReorganizePartitions(ctx sessionctx.Context, ident ast.Ident, spec *ast.AlterTableSpec) error { - schema, t, err := e.getSchemaAndTableByIdent(ident) - if err != nil { - return errors.Trace(infoschema.ErrTableNotExists.FastGenByArgs(ident.Schema, ident.Name)) + if len(involvingSchemaInfo) > 0 { + involvingSchemaInfo = append(involvingSchemaInfo, model.InvolvingSchemaInfo{ + Database: schema.Name.L, + Table: t.Meta().Name.L, + }) } - meta := t.Meta() - pi := meta.GetPartitionInfo() - if pi == nil { - return dbterror.ErrPartitionMgmtOnNonpartitioned - } - switch pi.Type { - case model.PartitionTypeRange, model.PartitionTypeList: - case model.PartitionTypeHash, model.PartitionTypeKey: - if spec.Tp != ast.AlterTableCoalescePartitions && - spec.Tp != ast.AlterTableAddPartitions { - return errors.Trace(dbterror.ErrUnsupportedReorganizePartition) - } - default: - return errors.Trace(dbterror.ErrUnsupportedReorganizePartition) - } - partNames := make([]string, 0, len(spec.PartitionNames)) - for _, name := range spec.PartitionNames { - partNames = append(partNames, name.L) + job := &model.Job{ + SchemaID: schema.ID, + TableID: t.Meta().ID, + SchemaName: schema.Name.L, + TableName: t.Meta().Name.L, + Type: model.ActionMultiSchemaChange, + BinlogInfo: &model.HistoryInfo{}, + Args: nil, + MultiSchemaInfo: info, + ReorgMeta: nil, + CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, + InvolvingSchemaInfo: involvingSchemaInfo, + SQLMode: ctx.GetSessionVars().SQLMode, } - firstPartIdx, lastPartIdx, idMap, err := getReplacedPartitionIDs(partNames, pi) - if err != nil { - return errors.Trace(err) + if containsDistTaskSubJob(subJobs) { + job.ReorgMeta, err = newReorgMetaFromVariables(job, ctx) + if err != nil { + return err + } + } else { + job.ReorgMeta = NewDDLReorgMeta(ctx) } - partInfo, err := BuildAddedPartitionInfo(ctx.GetExprCtx(), meta, spec) + + err = checkMultiSchemaInfo(info, t) if err != nil { return errors.Trace(err) } - if err = e.assignPartitionIDs(partInfo.Definitions); err != nil { - return errors.Trace(err) + mergeAddIndex(info) + return e.DoDDLJob(ctx, job) +} + +func containsDistTaskSubJob(subJobs []*model.SubJob) bool { + for _, sub := range subJobs { + if sub.Type == model.ActionAddIndex || + sub.Type == model.ActionAddPrimaryKey { + return true + } } - if err = checkReorgPartitionDefs(ctx, model.ActionReorganizePartition, meta, partInfo, firstPartIdx, lastPartIdx, idMap); err != nil { + return false +} + +func (e *executor) RebaseAutoID(ctx sessionctx.Context, ident ast.Ident, newBase int64, tp autoid.AllocatorType, force bool) error { + schema, t, err := e.getSchemaAndTableByIdent(ident) + if err != nil { return errors.Trace(err) } - if err = handlePartitionPlacement(ctx, partInfo); err != nil { - return errors.Trace(err) + tbInfo := t.Meta() + var actionType model.ActionType + switch tp { + case autoid.AutoRandomType: + pkCol := tbInfo.GetPkColInfo() + if tbInfo.AutoRandomBits == 0 || pkCol == nil { + return errors.Trace(dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomRebaseNotApplicable)) + } + shardFmt := autoid.NewShardIDFormat(&pkCol.FieldType, tbInfo.AutoRandomBits, tbInfo.AutoRandomRangeBits) + if shardFmt.IncrementalMask()&newBase != newBase { + errMsg := fmt.Sprintf(autoid.AutoRandomRebaseOverflow, newBase, shardFmt.IncrementalBitsCapacity()) + return errors.Trace(dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(errMsg)) + } + actionType = model.ActionRebaseAutoRandomBase + case autoid.RowIDAllocType: + actionType = model.ActionRebaseAutoID + case autoid.AutoIncrementType: + actionType = model.ActionRebaseAutoID + default: + panic(fmt.Sprintf("unimplemented rebase autoid type %s", tp)) } + if !force { + newBaseTemp, err := adjustNewBaseToNextGlobalID(ctx.GetTableCtx(), t, tp, newBase) + if err != nil { + return err + } + if newBase != newBaseTemp { + ctx.GetSessionVars().StmtCtx.AppendWarning( + errors.NewNoStackErrorf("Can't reset AUTO_INCREMENT to %d without FORCE option, using %d instead", + newBase, newBaseTemp, + )) + } + newBase = newBaseTemp + } job := &model.Job{ SchemaID: schema.ID, - TableID: meta.ID, + TableID: tbInfo.ID, SchemaName: schema.Name.L, - TableName: t.Meta().Name.L, - Type: model.ActionReorganizePartition, + TableName: tbInfo.Name.L, + Type: actionType, BinlogInfo: &model.HistoryInfo{}, - Args: []any{partNames, partInfo}, - ReorgMeta: NewDDLReorgMeta(ctx), + Args: []any{newBase, force}, CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, SQLMode: ctx.GetSessionVars().SQLMode, } - - // No preSplitAndScatter here, it will be done by the worker in onReorganizePartition instead. err = e.DoDDLJob(ctx, job) - failpoint.InjectCall("afterReorganizePartition") - if err == nil { - ctx.GetSessionVars().StmtCtx.AppendWarning(errors.NewNoStackError("The statistics of related partitions will be outdated after reorganizing partitions. Please use 'ANALYZE TABLE' statement if you want to update it now")) - } return errors.Trace(err) } -// RemovePartitioning removes partitioning from a table. -func (e *executor) RemovePartitioning(ctx sessionctx.Context, ident ast.Ident, spec *ast.AlterTableSpec) error { - schema, t, err := e.getSchemaAndTableByIdent(ident) - if err != nil { - return errors.Trace(infoschema.ErrTableNotExists.FastGenByArgs(ident.Schema, ident.Name)) +func adjustNewBaseToNextGlobalID(ctx table.AllocatorContext, t table.Table, tp autoid.AllocatorType, newBase int64) (int64, error) { + alloc := t.Allocators(ctx).Get(tp) + if alloc == nil { + return newBase, nil } - - meta := t.Meta().Clone() - pi := meta.GetPartitionInfo() - if pi == nil { - return dbterror.ErrPartitionMgmtOnNonpartitioned + autoID, err := alloc.NextGlobalAutoID() + if err != nil { + return newBase, errors.Trace(err) } - // TODO: Optimize for remove partitioning with a single partition - // TODO: Add the support for this in onReorganizePartition - // skip if only one partition - // If there are only one partition, then we can do: - // change the table id to the partition id - // and keep the statistics for the partition id (which should be similar to the global statistics) - // and it let the GC clean up the old table metadata including possible global index. + // If newBase < autoID, we need to do a rebase before returning. + // Assume there are 2 TiDB servers: TiDB-A with allocator range of 0 ~ 30000; TiDB-B with allocator range of 30001 ~ 60000. + // If the user sends SQL `alter table t1 auto_increment = 100` to TiDB-B, + // and TiDB-B finds 100 < 30001 but returns without any handling, + // then TiDB-A may still allocate 99 for auto_increment column. This doesn't make sense for the user. + return int64(mathutil.Max(uint64(newBase), uint64(autoID))), nil +} - newSpec := &ast.AlterTableSpec{} - newSpec.Tp = spec.Tp - defs := make([]*ast.PartitionDefinition, 1) - defs[0] = &ast.PartitionDefinition{} - defs[0].Name = model.NewCIStr("CollapsedPartitions") - newSpec.PartDefinitions = defs - partNames := make([]string, len(pi.Definitions)) - for i := range pi.Definitions { - partNames[i] = pi.Definitions[i].Name.L - } - meta.Partition.Type = model.PartitionTypeNone - partInfo, err := BuildAddedPartitionInfo(ctx.GetExprCtx(), meta, newSpec) +// ShardRowID shards the implicit row ID by adding shard value to the row ID's first few bits. +func (e *executor) ShardRowID(ctx sessionctx.Context, tableIdent ast.Ident, uVal uint64) error { + schema, t, err := e.getSchemaAndTableByIdent(tableIdent) if err != nil { return errors.Trace(err) } - if err = e.assignPartitionIDs(partInfo.Definitions); err != nil { - return errors.Trace(err) + tbInfo := t.Meta() + if tbInfo.TempTableType != model.TempTableNone { + return dbterror.ErrOptOnTemporaryTable.GenWithStackByArgs("shard_row_id_bits") } - // TODO: check where the default placement comes from (i.e. table level) - if err = handlePartitionPlacement(ctx, partInfo); err != nil { - return errors.Trace(err) + if uVal == tbInfo.ShardRowIDBits { + // Nothing need to do. + return nil + } + if uVal > 0 && tbInfo.HasClusteredIndex() { + return dbterror.ErrUnsupportedShardRowIDBits + } + err = verifyNoOverflowShardBits(e.sessPool, t, uVal) + if err != nil { + return err } - partInfo.NewTableID = partInfo.Definitions[0].ID - job := &model.Job{ + Type: model.ActionShardRowID, SchemaID: schema.ID, - TableID: meta.ID, + TableID: tbInfo.ID, SchemaName: schema.Name.L, - TableName: meta.Name.L, - Type: model.ActionRemovePartitioning, + TableName: tbInfo.Name.L, BinlogInfo: &model.HistoryInfo{}, - Args: []any{partNames, partInfo}, - ReorgMeta: NewDDLReorgMeta(ctx), + Args: []any{uVal}, CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, SQLMode: ctx.GetSessionVars().SQLMode, } - - // No preSplitAndScatter here, it will be done by the worker in onReorganizePartition instead. err = e.DoDDLJob(ctx, job) return errors.Trace(err) } -func checkReorgPartitionDefs(ctx sessionctx.Context, action model.ActionType, tblInfo *model.TableInfo, partInfo *model.PartitionInfo, firstPartIdx, lastPartIdx int, idMap map[int]struct{}) error { - // partInfo contains only the new added partition, we have to combine it with the - // old partitions to check all partitions is strictly increasing. - pi := tblInfo.Partition - clonedMeta := tblInfo.Clone() - switch action { - case model.ActionRemovePartitioning, model.ActionAlterTablePartitioning: - clonedMeta.Partition = partInfo - clonedMeta.ID = partInfo.NewTableID - case model.ActionReorganizePartition: - clonedMeta.Partition.AddingDefinitions = partInfo.Definitions - clonedMeta.Partition.Definitions = getReorganizedDefinitions(clonedMeta.Partition, firstPartIdx, lastPartIdx, idMap) - default: - return dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs("partition type") - } - if err := checkPartitionDefinitionConstraints(ctx, clonedMeta); err != nil { - return errors.Trace(err) +func (e *executor) getSchemaAndTableByIdent(tableIdent ast.Ident) (dbInfo *model.DBInfo, t table.Table, err error) { + is := e.infoCache.GetLatest() + schema, ok := is.SchemaByName(tableIdent.Schema) + if !ok { + return nil, nil, infoschema.ErrDatabaseNotExists.GenWithStackByArgs(tableIdent.Schema) } - if action == model.ActionReorganizePartition { - if pi.Type == model.PartitionTypeRange { - if lastPartIdx == len(pi.Definitions)-1 { - // Last partition dropped, OK to change the end range - // Also includes MAXVALUE - return nil - } - // Check if the replaced end range is the same as before - lastAddingPartition := partInfo.Definitions[len(partInfo.Definitions)-1] - lastOldPartition := pi.Definitions[lastPartIdx] - if len(pi.Columns) > 0 { - newGtOld, err := checkTwoRangeColumns(ctx, &lastAddingPartition, &lastOldPartition, pi, tblInfo) - if err != nil { - return errors.Trace(err) - } - if newGtOld { - return errors.Trace(dbterror.ErrRangeNotIncreasing) - } - oldGtNew, err := checkTwoRangeColumns(ctx, &lastOldPartition, &lastAddingPartition, pi, tblInfo) - if err != nil { - return errors.Trace(err) - } - if oldGtNew { - return errors.Trace(dbterror.ErrRangeNotIncreasing) - } - return nil - } - - isUnsigned := isPartExprUnsigned(ctx.GetExprCtx().GetEvalCtx(), tblInfo) - currentRangeValue, _, err := getRangeValue(ctx.GetExprCtx(), pi.Definitions[lastPartIdx].LessThan[0], isUnsigned) - if err != nil { - return errors.Trace(err) - } - newRangeValue, _, err := getRangeValue(ctx.GetExprCtx(), partInfo.Definitions[len(partInfo.Definitions)-1].LessThan[0], isUnsigned) - if err != nil { - return errors.Trace(err) - } - - if currentRangeValue != newRangeValue { - return errors.Trace(dbterror.ErrRangeNotIncreasing) - } - } - } else { - if len(pi.Definitions) != (lastPartIdx - firstPartIdx + 1) { - // if not ActionReorganizePartition, require all partitions to be changed. - return errors.Trace(dbterror.ErrAlterOperationNotSupported) - } + t, err = is.TableByName(e.ctx, tableIdent.Schema, tableIdent.Name) + if err != nil { + return nil, nil, infoschema.ErrTableNotExists.GenWithStackByArgs(tableIdent.Schema, tableIdent.Name) } - return nil + return schema, t, nil } -// CoalescePartitions coalesce partitions can be used with a table that is partitioned by hash or key to reduce the number of partitions by number. -func (e *executor) CoalescePartitions(sctx sessionctx.Context, ident ast.Ident, spec *ast.AlterTableSpec) error { - is := e.infoCache.GetLatest() - schema, ok := is.SchemaByName(ident.Schema) - if !ok { - return errors.Trace(infoschema.ErrDatabaseNotExists.GenWithStackByArgs(schema)) +// AddColumn will add a new column to the table. +func (e *executor) AddColumn(ctx sessionctx.Context, ti ast.Ident, spec *ast.AlterTableSpec) error { + specNewColumn := spec.NewColumns[0] + schema, t, err := e.getSchemaAndTableByIdent(ti) + if err != nil { + return errors.Trace(err) + } + failpoint.InjectCall("afterGetSchemaAndTableByIdent", ctx) + tbInfo := t.Meta() + if err = checkAddColumnTooManyColumns(len(t.Cols()) + 1); err != nil { + return errors.Trace(err) + } + col, err := checkAndCreateNewColumn(ctx, ti, schema, spec, t, specNewColumn) + if err != nil { + return errors.Trace(err) + } + // Added column has existed and if_not_exists flag is true. + if col == nil { + return nil } - t, err := is.TableByName(e.ctx, ident.Schema, ident.Name) + err = CheckAfterPositionExists(tbInfo, spec.Position) if err != nil { - return errors.Trace(infoschema.ErrTableNotExists.GenWithStackByArgs(ident.Schema, ident.Name)) + return errors.Trace(err) } - pi := t.Meta().GetPartitionInfo() - if pi == nil { - return errors.Trace(dbterror.ErrPartitionMgmtOnNonpartitioned) + txn, err := ctx.Txn(true) + if err != nil { + return errors.Trace(err) } - - switch pi.Type { - case model.PartitionTypeHash, model.PartitionTypeKey: - return e.hashPartitionManagement(sctx, ident, spec, pi) - - // Coalesce partition can only be used on hash/key partitions. - default: - return errors.Trace(dbterror.ErrCoalesceOnlyOnHashPartition) + bdrRole, err := meta.NewMeta(txn).GetBDRRole() + if err != nil { + return errors.Trace(err) } -} - -func (e *executor) hashPartitionManagement(sctx sessionctx.Context, ident ast.Ident, spec *ast.AlterTableSpec, pi *model.PartitionInfo) error { - newSpec := *spec - newSpec.PartitionNames = make([]model.CIStr, len(pi.Definitions)) - for i := 0; i < len(pi.Definitions); i++ { - // reorganize ALL partitions into the new number of partitions - newSpec.PartitionNames[i] = pi.Definitions[i].Name + if bdrRole == string(ast.BDRRolePrimary) && deniedByBDRWhenAddColumn(specNewColumn.Options) { + return dbterror.ErrBDRRestrictedDDL.FastGenByArgs(bdrRole) } - for i := 0; i < len(newSpec.PartDefinitions); i++ { - switch newSpec.PartDefinitions[i].Clause.(type) { - case *ast.PartitionDefinitionClauseNone: - // OK, expected - case *ast.PartitionDefinitionClauseIn: - return errors.Trace(ast.ErrPartitionWrongValues.FastGenByArgs("LIST", "IN")) - case *ast.PartitionDefinitionClauseLessThan: - return errors.Trace(ast.ErrPartitionWrongValues.FastGenByArgs("RANGE", "LESS THAN")) - case *ast.PartitionDefinitionClauseHistory: - return errors.Trace(ast.ErrPartitionWrongValues.FastGenByArgs("SYSTEM_TIME", "HISTORY")) - default: - return dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs( - "partitioning clause") - } - } - if newSpec.Num < uint64(len(newSpec.PartDefinitions)) { - newSpec.Num = uint64(len(newSpec.PartDefinitions)) - } - if spec.Tp == ast.AlterTableCoalescePartitions { - if newSpec.Num < 1 { - return ast.ErrCoalescePartitionNoPartition - } - if newSpec.Num >= uint64(len(pi.Definitions)) { - return dbterror.ErrDropLastPartition - } - if isNonDefaultPartitionOptionsUsed(pi.Definitions) { - // The partition definitions will be copied in buildHashPartitionDefinitions() - // if there is a non-empty list of definitions - newSpec.PartDefinitions = []*ast.PartitionDefinition{{}} - } + job := &model.Job{ + SchemaID: schema.ID, + TableID: tbInfo.ID, + SchemaName: schema.Name.L, + TableName: tbInfo.Name.L, + Type: model.ActionAddColumn, + BinlogInfo: &model.HistoryInfo{}, + Args: []any{col, spec.Position, 0, spec.IfNotExists}, + CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, + SQLMode: ctx.GetSessionVars().SQLMode, } - return e.ReorganizePartitions(sctx, ident, &newSpec) + err = e.DoDDLJob(ctx, job) + return errors.Trace(err) } -func (e *executor) TruncateTablePartition(ctx sessionctx.Context, ident ast.Ident, spec *ast.AlterTableSpec) error { +// AddTablePartitions will add a new partition to the table. +func (e *executor) AddTablePartitions(ctx sessionctx.Context, ident ast.Ident, spec *ast.AlterTableSpec) error { is := e.infoCache.GetLatest() schema, ok := is.SchemaByName(ident.Schema) if !ok { @@ -5208,44 +2279,56 @@ func (e *executor) TruncateTablePartition(ctx sessionctx.Context, ident ast.Iden if err != nil { return errors.Trace(infoschema.ErrTableNotExists.GenWithStackByArgs(ident.Schema, ident.Name)) } + meta := t.Meta() - if meta.GetPartitionInfo() == nil { + pi := meta.GetPartitionInfo() + if pi == nil { return errors.Trace(dbterror.ErrPartitionMgmtOnNonpartitioned) } - - getTruncatedParts := func(pi *model.PartitionInfo) (*model.PartitionInfo, error) { - if spec.OnAllPartitions { - return pi.Clone(), nil - } - var defs []model.PartitionDefinition - // MySQL allows duplicate partition names in truncate partition - // so we filter them out through a hash - posMap := make(map[int]bool) - for _, name := range spec.PartitionNames { - pos := pi.FindPartitionDefinitionByName(name.L) - if pos < 0 { - return nil, errors.Trace(table.ErrUnknownPartition.GenWithStackByArgs(name.L, ident.Name.O)) - } - if _, ok := posMap[pos]; !ok { - defs = append(defs, pi.Definitions[pos]) - posMap[pos] = true - } + if pi.Type == model.PartitionTypeHash || pi.Type == model.PartitionTypeKey { + // Add partition for hash/key is actually a reorganize partition + // operation and not a metadata only change! + switch spec.Tp { + case ast.AlterTableAddLastPartition: + return errors.Trace(dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs("LAST PARTITION of HASH/KEY partitioned table")) + case ast.AlterTableAddPartitions: + // only thing supported + default: + return errors.Trace(dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs("ADD PARTITION of HASH/KEY partitioned table")) } - pi = pi.Clone() - pi.Definitions = defs - return pi, nil + return e.hashPartitionManagement(ctx, ident, spec, pi) } - pi, err := getTruncatedParts(meta.GetPartitionInfo()) + + partInfo, err := BuildAddedPartitionInfo(ctx.GetExprCtx(), meta, spec) if err != nil { - return err + return errors.Trace(err) } - pids := make([]int64, 0, len(pi.Definitions)) - for i := range pi.Definitions { - pids = append(pids, pi.Definitions[i].ID) + if pi.Type == model.PartitionTypeList { + // TODO: make sure that checks in ddl_api and ddl_worker is the same. + err = checkAddListPartitions(meta) + if err != nil { + return errors.Trace(err) + } + } + if err := e.assignPartitionIDs(partInfo.Definitions); err != nil { + return errors.Trace(err) } - genIDs, err := e.genGlobalIDs(len(pids)) - if err != nil { + // partInfo contains only the new added partition, we have to combine it with the + // old partitions to check all partitions is strictly increasing. + clonedMeta := meta.Clone() + tmp := *partInfo + tmp.Definitions = append(pi.Definitions, tmp.Definitions...) + clonedMeta.Partition = &tmp + if err := checkPartitionDefinitionConstraints(ctx, clonedMeta); err != nil { + if dbterror.ErrSameNamePartition.Equal(err) && spec.IfNotExists { + ctx.GetSessionVars().StmtCtx.AppendNote(err) + return nil + } + return errors.Trace(err) + } + + if err = handlePartitionPlacement(ctx, partInfo); err != nil { return errors.Trace(err) } @@ -5253,1172 +2336,993 @@ func (e *executor) TruncateTablePartition(ctx sessionctx.Context, ident ast.Iden SchemaID: schema.ID, TableID: meta.ID, SchemaName: schema.Name.L, - SchemaState: model.StatePublic, TableName: t.Meta().Name.L, - Type: model.ActionTruncateTablePartition, + Type: model.ActionAddTablePartition, BinlogInfo: &model.HistoryInfo{}, - Args: []any{pids, genIDs}, + Args: []any{partInfo}, CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, SQLMode: ctx.GetSessionVars().SQLMode, } - err = e.DoDDLJob(ctx, job) + if spec.Tp == ast.AlterTableAddLastPartition && spec.Partition != nil { + query, ok := ctx.Value(sessionctx.QueryString).(string) + if ok { + sqlMode := ctx.GetSessionVars().SQLMode + var buf bytes.Buffer + AppendPartitionDefs(partInfo, &buf, sqlMode) + + syntacticSugar := spec.Partition.PartitionMethod.OriginalText() + syntacticStart := spec.Partition.PartitionMethod.OriginTextPosition() + newQuery := query[:syntacticStart] + "ADD PARTITION (" + buf.String() + ")" + query[syntacticStart+len(syntacticSugar):] + defer ctx.SetValue(sessionctx.QueryString, query) + ctx.SetValue(sessionctx.QueryString, newQuery) + } + } + err = e.DoDDLJob(ctx, job) + if dbterror.ErrSameNamePartition.Equal(err) && spec.IfNotExists { + ctx.GetSessionVars().StmtCtx.AppendNote(err) + return nil + } + return errors.Trace(err) +} + +// getReorganizedDefinitions return the definitions as they would look like after the REORGANIZE PARTITION is done. +func getReorganizedDefinitions(pi *model.PartitionInfo, firstPartIdx, lastPartIdx int, idMap map[int]struct{}) []model.PartitionDefinition { + tmpDefs := make([]model.PartitionDefinition, 0, len(pi.Definitions)+len(pi.AddingDefinitions)-len(idMap)) + if pi.Type == model.PartitionTypeList { + replaced := false + for i := range pi.Definitions { + if _, ok := idMap[i]; ok { + if !replaced { + tmpDefs = append(tmpDefs, pi.AddingDefinitions...) + replaced = true + } + continue + } + tmpDefs = append(tmpDefs, pi.Definitions[i]) + } + if !replaced { + // For safety, for future non-partitioned table -> partitioned + tmpDefs = append(tmpDefs, pi.AddingDefinitions...) + } + return tmpDefs + } + // Range + tmpDefs = append(tmpDefs, pi.Definitions[:firstPartIdx]...) + tmpDefs = append(tmpDefs, pi.AddingDefinitions...) + if len(pi.Definitions) > (lastPartIdx + 1) { + tmpDefs = append(tmpDefs, pi.Definitions[lastPartIdx+1:]...) + } + return tmpDefs +} + +func getReplacedPartitionIDs(names []string, pi *model.PartitionInfo) (firstPartIdx int, lastPartIdx int, idMap map[int]struct{}, err error) { + idMap = make(map[int]struct{}) + firstPartIdx, lastPartIdx = -1, -1 + for _, name := range names { + nameL := strings.ToLower(name) + partIdx := pi.FindPartitionDefinitionByName(nameL) + if partIdx == -1 { + return 0, 0, nil, errors.Trace(dbterror.ErrWrongPartitionName) + } + if _, ok := idMap[partIdx]; ok { + return 0, 0, nil, errors.Trace(dbterror.ErrSameNamePartition) + } + idMap[partIdx] = struct{}{} + if firstPartIdx == -1 { + firstPartIdx = partIdx + } else { + firstPartIdx = mathutil.Min[int](firstPartIdx, partIdx) + } + if lastPartIdx == -1 { + lastPartIdx = partIdx + } else { + lastPartIdx = mathutil.Max[int](lastPartIdx, partIdx) + } + } + switch pi.Type { + case model.PartitionTypeRange: + if len(idMap) != (lastPartIdx - firstPartIdx + 1) { + return 0, 0, nil, errors.Trace(dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs( + "REORGANIZE PARTITION of RANGE; not adjacent partitions")) + } + case model.PartitionTypeHash, model.PartitionTypeKey: + if len(idMap) != len(pi.Definitions) { + return 0, 0, nil, errors.Trace(dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs( + "REORGANIZE PARTITION of HASH/RANGE; must reorganize all partitions")) + } + } + + return firstPartIdx, lastPartIdx, idMap, nil +} + +func getPartitionInfoTypeNone() *model.PartitionInfo { + return &model.PartitionInfo{ + Type: model.PartitionTypeNone, + Enable: true, + Definitions: []model.PartitionDefinition{{ + Name: model.NewCIStr("pFullTable"), + Comment: "Intermediate partition during ALTER TABLE ... PARTITION BY ...", + }}, + Num: 1, + } +} + +// AlterTablePartitioning reorganize one set of partitions to a new set of partitions. +func (e *executor) AlterTablePartitioning(ctx sessionctx.Context, ident ast.Ident, spec *ast.AlterTableSpec) error { + schema, t, err := e.getSchemaAndTableByIdent(ident) if err != nil { - return errors.Trace(err) + return errors.Trace(infoschema.ErrTableNotExists.FastGenByArgs(ident.Schema, ident.Name)) } - return nil -} -func (e *executor) DropTablePartition(ctx sessionctx.Context, ident ast.Ident, spec *ast.AlterTableSpec) error { - is := e.infoCache.GetLatest() - schema, ok := is.SchemaByName(ident.Schema) - if !ok { - return errors.Trace(infoschema.ErrDatabaseNotExists.GenWithStackByArgs(schema)) + meta := t.Meta().Clone() + piOld := meta.GetPartitionInfo() + var partNames []string + if piOld != nil { + partNames = make([]string, 0, len(piOld.Definitions)) + for i := range piOld.Definitions { + partNames = append(partNames, piOld.Definitions[i].Name.L) + } + } else { + piOld = getPartitionInfoTypeNone() + meta.Partition = piOld + partNames = append(partNames, piOld.Definitions[0].Name.L) } - t, err := is.TableByName(e.ctx, ident.Schema, ident.Name) + newMeta := meta.Clone() + + err = buildTablePartitionInfo(ctx, spec.Partition, newMeta) if err != nil { - return errors.Trace(infoschema.ErrTableNotExists.GenWithStackByArgs(ident.Schema, ident.Name)) - } - meta := t.Meta() - if meta.GetPartitionInfo() == nil { - return errors.Trace(dbterror.ErrPartitionMgmtOnNonpartitioned) + return err } - if spec.Tp == ast.AlterTableDropFirstPartition { - intervalOptions := getPartitionIntervalFromTable(ctx.GetExprCtx(), meta) - if intervalOptions == nil { - return dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs( - "FIRST PARTITION, does not seem like an INTERVAL partitioned table") - } - if len(spec.Partition.Definitions) != 0 { - return dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs( - "FIRST PARTITION, table info already contains partition definitions") - } - spec.Partition.Interval = intervalOptions - err = GeneratePartDefsFromInterval(ctx.GetExprCtx(), spec.Tp, meta, spec.Partition) - if err != nil { - return err - } - pNullOffset := 0 - if intervalOptions.NullPart { - pNullOffset = 1 - } - if len(spec.Partition.Definitions) == 0 || - len(spec.Partition.Definitions) >= len(meta.Partition.Definitions)-pNullOffset { - return dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs( - "FIRST PARTITION, number of partitions does not match") - } - if len(spec.PartitionNames) != 0 || len(spec.Partition.Definitions) <= 1 { - return dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs( - "FIRST PARTITION, given value does not generate a list of partition names to be dropped") - } - for i := range spec.Partition.Definitions { - spec.PartitionNames = append(spec.PartitionNames, meta.Partition.Definitions[i+pNullOffset].Name) - } - // Use the last generated partition as First, i.e. do not drop the last name in the slice - spec.PartitionNames = spec.PartitionNames[:len(spec.PartitionNames)-1] + newPartInfo := newMeta.Partition - query, ok := ctx.Value(sessionctx.QueryString).(string) - if ok { - partNames := make([]string, 0, len(spec.PartitionNames)) - sqlMode := ctx.GetSessionVars().SQLMode - for i := range spec.PartitionNames { - partNames = append(partNames, stringutil.Escape(spec.PartitionNames[i].O, sqlMode)) - } - syntacticSugar := spec.Partition.PartitionMethod.OriginalText() - syntacticStart := spec.Partition.PartitionMethod.OriginTextPosition() - newQuery := query[:syntacticStart] + "DROP PARTITION " + strings.Join(partNames, ", ") + query[syntacticStart+len(syntacticSugar):] - defer ctx.SetValue(sessionctx.QueryString, query) - ctx.SetValue(sessionctx.QueryString, newQuery) - } + if err = handlePartitionPlacement(ctx, newPartInfo); err != nil { + return errors.Trace(err) } - partNames := make([]string, len(spec.PartitionNames)) - for i, partCIName := range spec.PartitionNames { - partNames[i] = partCIName.L + + if err = e.assignPartitionIDs(newPartInfo.Definitions); err != nil { + return errors.Trace(err) } - err = CheckDropTablePartition(meta, partNames) + // A new table ID would be needed for + // the global index, which cannot be the same as the current table id, + // since this table id will be removed in the final state when removing + // all the data with this table id. + var newID []int64 + newID, err = e.genGlobalIDs(1) if err != nil { - if dbterror.ErrDropPartitionNonExistent.Equal(err) && spec.IfExists { - ctx.GetSessionVars().StmtCtx.AppendNote(err) - return nil - } return errors.Trace(err) } + newPartInfo.NewTableID = newID[0] + newPartInfo.DDLType = piOld.Type job := &model.Job{ SchemaID: schema.ID, TableID: meta.ID, SchemaName: schema.Name.L, - SchemaState: model.StatePublic, - TableName: meta.Name.L, - Type: model.ActionDropTablePartition, + TableName: t.Meta().Name.L, + Type: model.ActionAlterTablePartitioning, BinlogInfo: &model.HistoryInfo{}, - Args: []any{partNames}, + Args: []any{partNames, newPartInfo}, + ReorgMeta: NewDDLReorgMeta(ctx), CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, SQLMode: ctx.GetSessionVars().SQLMode, } + // No preSplitAndScatter here, it will be done by the worker in onReorganizePartition instead. err = e.DoDDLJob(ctx, job) - if err != nil { - if dbterror.ErrDropPartitionNonExistent.Equal(err) && spec.IfExists { - ctx.GetSessionVars().StmtCtx.AppendNote(err) - return nil - } - return errors.Trace(err) + if err == nil { + ctx.GetSessionVars().StmtCtx.AppendWarning(errors.NewNoStackError("The statistics of new partitions will be outdated after reorganizing partitions. Please use 'ANALYZE TABLE' statement if you want to update it now")) } return errors.Trace(err) } -func checkFieldTypeCompatible(ft *types.FieldType, other *types.FieldType) bool { - // int(1) could match the type with int(8) - partialEqual := ft.GetType() == other.GetType() && - ft.GetDecimal() == other.GetDecimal() && - ft.GetCharset() == other.GetCharset() && - ft.GetCollate() == other.GetCollate() && - (ft.GetFlen() == other.GetFlen() || ft.StorageLength() != types.VarStorageLen) && - mysql.HasUnsignedFlag(ft.GetFlag()) == mysql.HasUnsignedFlag(other.GetFlag()) && - mysql.HasAutoIncrementFlag(ft.GetFlag()) == mysql.HasAutoIncrementFlag(other.GetFlag()) && - mysql.HasNotNullFlag(ft.GetFlag()) == mysql.HasNotNullFlag(other.GetFlag()) && - mysql.HasZerofillFlag(ft.GetFlag()) == mysql.HasZerofillFlag(other.GetFlag()) && - mysql.HasBinaryFlag(ft.GetFlag()) == mysql.HasBinaryFlag(other.GetFlag()) && - mysql.HasPriKeyFlag(ft.GetFlag()) == mysql.HasPriKeyFlag(other.GetFlag()) - if !partialEqual || len(ft.GetElems()) != len(other.GetElems()) { - return false - } - for i := range ft.GetElems() { - if ft.GetElems()[i] != other.GetElems()[i] { - return false - } - } - return true -} - -func checkTiFlashReplicaCompatible(source *model.TiFlashReplicaInfo, target *model.TiFlashReplicaInfo) bool { - if source == target { - return true - } - if source == nil || target == nil { - return false - } - if source.Count != target.Count || - source.Available != target.Available || len(source.LocationLabels) != len(target.LocationLabels) { - return false - } - for i, lable := range source.LocationLabels { - if target.LocationLabels[i] != lable { - return false - } - } - return true -} - -func checkTableDefCompatible(source *model.TableInfo, target *model.TableInfo) error { - // check temp table - if target.TempTableType != model.TempTableNone { - return errors.Trace(dbterror.ErrPartitionExchangeTempTable.FastGenByArgs(target.Name)) +// ReorganizePartitions reorganize one set of partitions to a new set of partitions. +func (e *executor) ReorganizePartitions(ctx sessionctx.Context, ident ast.Ident, spec *ast.AlterTableSpec) error { + schema, t, err := e.getSchemaAndTableByIdent(ident) + if err != nil { + return errors.Trace(infoschema.ErrTableNotExists.FastGenByArgs(ident.Schema, ident.Name)) } - // check auto_random - if source.AutoRandomBits != target.AutoRandomBits || - source.AutoRandomRangeBits != target.AutoRandomRangeBits || - source.Charset != target.Charset || - source.Collate != target.Collate || - source.ShardRowIDBits != target.ShardRowIDBits || - source.MaxShardRowIDBits != target.MaxShardRowIDBits || - !checkTiFlashReplicaCompatible(source.TiFlashReplica, target.TiFlashReplica) { - return errors.Trace(dbterror.ErrTablesDifferentMetadata) - } - if len(source.Cols()) != len(target.Cols()) { - return errors.Trace(dbterror.ErrTablesDifferentMetadata) + meta := t.Meta() + pi := meta.GetPartitionInfo() + if pi == nil { + return dbterror.ErrPartitionMgmtOnNonpartitioned } - // Col compatible check - for i, sourceCol := range source.Cols() { - targetCol := target.Cols()[i] - if sourceCol.IsVirtualGenerated() != targetCol.IsVirtualGenerated() { - return dbterror.ErrUnsupportedOnGeneratedColumn.GenWithStackByArgs("Exchanging partitions for non-generated columns") - } - // It should strictyle compare expressions for generated columns - if sourceCol.Name.L != targetCol.Name.L || - sourceCol.Hidden != targetCol.Hidden || - !checkFieldTypeCompatible(&sourceCol.FieldType, &targetCol.FieldType) || - sourceCol.GeneratedExprString != targetCol.GeneratedExprString { - return errors.Trace(dbterror.ErrTablesDifferentMetadata) - } - if sourceCol.State != model.StatePublic || - targetCol.State != model.StatePublic { - return errors.Trace(dbterror.ErrTablesDifferentMetadata) - } - if sourceCol.ID != targetCol.ID { - return dbterror.ErrPartitionExchangeDifferentOption.GenWithStackByArgs(fmt.Sprintf("column: %s", sourceCol.Name)) + switch pi.Type { + case model.PartitionTypeRange, model.PartitionTypeList: + case model.PartitionTypeHash, model.PartitionTypeKey: + if spec.Tp != ast.AlterTableCoalescePartitions && + spec.Tp != ast.AlterTableAddPartitions { + return errors.Trace(dbterror.ErrUnsupportedReorganizePartition) } + default: + return errors.Trace(dbterror.ErrUnsupportedReorganizePartition) } - if len(source.Indices) != len(target.Indices) { - return errors.Trace(dbterror.ErrTablesDifferentMetadata) + partNames := make([]string, 0, len(spec.PartitionNames)) + for _, name := range spec.PartitionNames { + partNames = append(partNames, name.L) } - for _, sourceIdx := range source.Indices { - if sourceIdx.Global { - return dbterror.ErrPartitionExchangeDifferentOption.GenWithStackByArgs(fmt.Sprintf("global index: %s", sourceIdx.Name)) - } - var compatIdx *model.IndexInfo - for _, targetIdx := range target.Indices { - if strings.EqualFold(sourceIdx.Name.L, targetIdx.Name.L) { - compatIdx = targetIdx - } - } - // No match index - if compatIdx == nil { - return errors.Trace(dbterror.ErrTablesDifferentMetadata) - } - // Index type is not compatible - if sourceIdx.Tp != compatIdx.Tp || - sourceIdx.Unique != compatIdx.Unique || - sourceIdx.Primary != compatIdx.Primary { - return errors.Trace(dbterror.ErrTablesDifferentMetadata) - } - // The index column - if len(sourceIdx.Columns) != len(compatIdx.Columns) { - return errors.Trace(dbterror.ErrTablesDifferentMetadata) - } - for i, sourceIdxCol := range sourceIdx.Columns { - compatIdxCol := compatIdx.Columns[i] - if sourceIdxCol.Length != compatIdxCol.Length || - sourceIdxCol.Name.L != compatIdxCol.Name.L { - return errors.Trace(dbterror.ErrTablesDifferentMetadata) - } - } - if sourceIdx.ID != compatIdx.ID { - return dbterror.ErrPartitionExchangeDifferentOption.GenWithStackByArgs(fmt.Sprintf("index: %s", sourceIdx.Name)) - } + firstPartIdx, lastPartIdx, idMap, err := getReplacedPartitionIDs(partNames, pi) + if err != nil { + return errors.Trace(err) } - - return nil -} - -func checkExchangePartition(pt *model.TableInfo, nt *model.TableInfo) error { - if nt.IsView() || nt.IsSequence() { - return errors.Trace(dbterror.ErrCheckNoSuchTable) + partInfo, err := BuildAddedPartitionInfo(ctx.GetExprCtx(), meta, spec) + if err != nil { + return errors.Trace(err) } - if pt.GetPartitionInfo() == nil { - return errors.Trace(dbterror.ErrPartitionMgmtOnNonpartitioned) + if err = e.assignPartitionIDs(partInfo.Definitions); err != nil { + return errors.Trace(err) } - if nt.GetPartitionInfo() != nil { - return errors.Trace(dbterror.ErrPartitionExchangePartTable.GenWithStackByArgs(nt.Name)) + if err = checkReorgPartitionDefs(ctx, model.ActionReorganizePartition, meta, partInfo, firstPartIdx, lastPartIdx, idMap); err != nil { + return errors.Trace(err) + } + if err = handlePartitionPlacement(ctx, partInfo); err != nil { + return errors.Trace(err) } - if len(nt.ForeignKeys) > 0 { - return errors.Trace(dbterror.ErrPartitionExchangeForeignKey.GenWithStackByArgs(nt.Name)) + job := &model.Job{ + SchemaID: schema.ID, + TableID: meta.ID, + SchemaName: schema.Name.L, + TableName: t.Meta().Name.L, + Type: model.ActionReorganizePartition, + BinlogInfo: &model.HistoryInfo{}, + Args: []any{partNames, partInfo}, + ReorgMeta: NewDDLReorgMeta(ctx), + CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, + SQLMode: ctx.GetSessionVars().SQLMode, } - return nil + // No preSplitAndScatter here, it will be done by the worker in onReorganizePartition instead. + err = e.DoDDLJob(ctx, job) + failpoint.InjectCall("afterReorganizePartition") + if err == nil { + ctx.GetSessionVars().StmtCtx.AppendWarning(errors.NewNoStackError("The statistics of related partitions will be outdated after reorganizing partitions. Please use 'ANALYZE TABLE' statement if you want to update it now")) + } + return errors.Trace(err) } -func (e *executor) ExchangeTablePartition(ctx sessionctx.Context, ident ast.Ident, spec *ast.AlterTableSpec) error { - ptSchema, pt, err := e.getSchemaAndTableByIdent(ident) +// RemovePartitioning removes partitioning from a table. +func (e *executor) RemovePartitioning(ctx sessionctx.Context, ident ast.Ident, spec *ast.AlterTableSpec) error { + schema, t, err := e.getSchemaAndTableByIdent(ident) if err != nil { - return errors.Trace(err) + return errors.Trace(infoschema.ErrTableNotExists.FastGenByArgs(ident.Schema, ident.Name)) } - ptMeta := pt.Meta() - - ntIdent := ast.Ident{Schema: spec.NewTable.Schema, Name: spec.NewTable.Name} - - // We should check local temporary here using session's info schema because the local temporary tables are only stored in session. - ntLocalTempTable, err := sessiontxn.GetTxnManager(ctx).GetTxnInfoSchema().TableByName(context.Background(), ntIdent.Schema, ntIdent.Name) - if err == nil && ntLocalTempTable.Meta().TempTableType == model.TempTableLocal { - return errors.Trace(dbterror.ErrPartitionExchangeTempTable.FastGenByArgs(ntLocalTempTable.Meta().Name)) + meta := t.Meta().Clone() + pi := meta.GetPartitionInfo() + if pi == nil { + return dbterror.ErrPartitionMgmtOnNonpartitioned } + // TODO: Optimize for remove partitioning with a single partition + // TODO: Add the support for this in onReorganizePartition + // skip if only one partition + // If there are only one partition, then we can do: + // change the table id to the partition id + // and keep the statistics for the partition id (which should be similar to the global statistics) + // and it let the GC clean up the old table metadata including possible global index. - ntSchema, nt, err := e.getSchemaAndTableByIdent(ntIdent) + newSpec := &ast.AlterTableSpec{} + newSpec.Tp = spec.Tp + defs := make([]*ast.PartitionDefinition, 1) + defs[0] = &ast.PartitionDefinition{} + defs[0].Name = model.NewCIStr("CollapsedPartitions") + newSpec.PartDefinitions = defs + partNames := make([]string, len(pi.Definitions)) + for i := range pi.Definitions { + partNames[i] = pi.Definitions[i].Name.L + } + meta.Partition.Type = model.PartitionTypeNone + partInfo, err := BuildAddedPartitionInfo(ctx.GetExprCtx(), meta, newSpec) if err != nil { return errors.Trace(err) } + if err = e.assignPartitionIDs(partInfo.Definitions); err != nil { + return errors.Trace(err) + } + // TODO: check where the default placement comes from (i.e. table level) + if err = handlePartitionPlacement(ctx, partInfo); err != nil { + return errors.Trace(err) + } + partInfo.NewTableID = partInfo.Definitions[0].ID - ntMeta := nt.Meta() + job := &model.Job{ + SchemaID: schema.ID, + TableID: meta.ID, + SchemaName: schema.Name.L, + TableName: meta.Name.L, + Type: model.ActionRemovePartitioning, + BinlogInfo: &model.HistoryInfo{}, + Args: []any{partNames, partInfo}, + ReorgMeta: NewDDLReorgMeta(ctx), + CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, + SQLMode: ctx.GetSessionVars().SQLMode, + } - err = checkExchangePartition(ptMeta, ntMeta) - if err != nil { + // No preSplitAndScatter here, it will be done by the worker in onReorganizePartition instead. + err = e.DoDDLJob(ctx, job) + return errors.Trace(err) +} + +func checkReorgPartitionDefs(ctx sessionctx.Context, action model.ActionType, tblInfo *model.TableInfo, partInfo *model.PartitionInfo, firstPartIdx, lastPartIdx int, idMap map[int]struct{}) error { + // partInfo contains only the new added partition, we have to combine it with the + // old partitions to check all partitions is strictly increasing. + pi := tblInfo.Partition + clonedMeta := tblInfo.Clone() + switch action { + case model.ActionRemovePartitioning, model.ActionAlterTablePartitioning: + clonedMeta.Partition = partInfo + clonedMeta.ID = partInfo.NewTableID + case model.ActionReorganizePartition: + clonedMeta.Partition.AddingDefinitions = partInfo.Definitions + clonedMeta.Partition.Definitions = getReorganizedDefinitions(clonedMeta.Partition, firstPartIdx, lastPartIdx, idMap) + default: + return dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs("partition type") + } + if err := checkPartitionDefinitionConstraints(ctx, clonedMeta); err != nil { return errors.Trace(err) } + if action == model.ActionReorganizePartition { + if pi.Type == model.PartitionTypeRange { + if lastPartIdx == len(pi.Definitions)-1 { + // Last partition dropped, OK to change the end range + // Also includes MAXVALUE + return nil + } + // Check if the replaced end range is the same as before + lastAddingPartition := partInfo.Definitions[len(partInfo.Definitions)-1] + lastOldPartition := pi.Definitions[lastPartIdx] + if len(pi.Columns) > 0 { + newGtOld, err := checkTwoRangeColumns(ctx, &lastAddingPartition, &lastOldPartition, pi, tblInfo) + if err != nil { + return errors.Trace(err) + } + if newGtOld { + return errors.Trace(dbterror.ErrRangeNotIncreasing) + } + oldGtNew, err := checkTwoRangeColumns(ctx, &lastOldPartition, &lastAddingPartition, pi, tblInfo) + if err != nil { + return errors.Trace(err) + } + if oldGtNew { + return errors.Trace(dbterror.ErrRangeNotIncreasing) + } + return nil + } - partName := spec.PartitionNames[0].L + isUnsigned := isPartExprUnsigned(ctx.GetExprCtx().GetEvalCtx(), tblInfo) + currentRangeValue, _, err := getRangeValue(ctx.GetExprCtx(), pi.Definitions[lastPartIdx].LessThan[0], isUnsigned) + if err != nil { + return errors.Trace(err) + } + newRangeValue, _, err := getRangeValue(ctx.GetExprCtx(), partInfo.Definitions[len(partInfo.Definitions)-1].LessThan[0], isUnsigned) + if err != nil { + return errors.Trace(err) + } - // NOTE: if pt is subPartitioned, it should be checked + if currentRangeValue != newRangeValue { + return errors.Trace(dbterror.ErrRangeNotIncreasing) + } + } + } else { + if len(pi.Definitions) != (lastPartIdx - firstPartIdx + 1) { + // if not ActionReorganizePartition, require all partitions to be changed. + return errors.Trace(dbterror.ErrAlterOperationNotSupported) + } + } + return nil +} - defID, err := tables.FindPartitionByName(ptMeta, partName) +// CoalescePartitions coalesce partitions can be used with a table that is partitioned by hash or key to reduce the number of partitions by number. +func (e *executor) CoalescePartitions(sctx sessionctx.Context, ident ast.Ident, spec *ast.AlterTableSpec) error { + is := e.infoCache.GetLatest() + schema, ok := is.SchemaByName(ident.Schema) + if !ok { + return errors.Trace(infoschema.ErrDatabaseNotExists.GenWithStackByArgs(schema)) + } + t, err := is.TableByName(e.ctx, ident.Schema, ident.Name) if err != nil { - return errors.Trace(err) + return errors.Trace(infoschema.ErrTableNotExists.GenWithStackByArgs(ident.Schema, ident.Name)) } - err = checkTableDefCompatible(ptMeta, ntMeta) - if err != nil { - return errors.Trace(err) + pi := t.Meta().GetPartitionInfo() + if pi == nil { + return errors.Trace(dbterror.ErrPartitionMgmtOnNonpartitioned) } - job := &model.Job{ - SchemaID: ntSchema.ID, - TableID: ntMeta.ID, - SchemaName: ntSchema.Name.L, - TableName: ntMeta.Name.L, - Type: model.ActionExchangeTablePartition, - BinlogInfo: &model.HistoryInfo{}, - Args: []any{defID, ptSchema.ID, ptMeta.ID, partName, spec.WithValidation}, - CtxVars: []any{[]int64{ntSchema.ID, ptSchema.ID}, []int64{ntMeta.ID, ptMeta.ID}}, - CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, - InvolvingSchemaInfo: []model.InvolvingSchemaInfo{ - {Database: ptSchema.Name.L, Table: ptMeta.Name.L}, - {Database: ntSchema.Name.L, Table: ntMeta.Name.L}, - }, - SQLMode: ctx.GetSessionVars().SQLMode, + switch pi.Type { + case model.PartitionTypeHash, model.PartitionTypeKey: + return e.hashPartitionManagement(sctx, ident, spec, pi) + + // Coalesce partition can only be used on hash/key partitions. + default: + return errors.Trace(dbterror.ErrCoalesceOnlyOnHashPartition) } +} - err = e.DoDDLJob(ctx, job) - if err != nil { - return errors.Trace(err) +func (e *executor) hashPartitionManagement(sctx sessionctx.Context, ident ast.Ident, spec *ast.AlterTableSpec, pi *model.PartitionInfo) error { + newSpec := *spec + newSpec.PartitionNames = make([]model.CIStr, len(pi.Definitions)) + for i := 0; i < len(pi.Definitions); i++ { + // reorganize ALL partitions into the new number of partitions + newSpec.PartitionNames[i] = pi.Definitions[i].Name + } + for i := 0; i < len(newSpec.PartDefinitions); i++ { + switch newSpec.PartDefinitions[i].Clause.(type) { + case *ast.PartitionDefinitionClauseNone: + // OK, expected + case *ast.PartitionDefinitionClauseIn: + return errors.Trace(ast.ErrPartitionWrongValues.FastGenByArgs("LIST", "IN")) + case *ast.PartitionDefinitionClauseLessThan: + return errors.Trace(ast.ErrPartitionWrongValues.FastGenByArgs("RANGE", "LESS THAN")) + case *ast.PartitionDefinitionClauseHistory: + return errors.Trace(ast.ErrPartitionWrongValues.FastGenByArgs("SYSTEM_TIME", "HISTORY")) + + default: + return dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs( + "partitioning clause") + } + } + if newSpec.Num < uint64(len(newSpec.PartDefinitions)) { + newSpec.Num = uint64(len(newSpec.PartDefinitions)) + } + if spec.Tp == ast.AlterTableCoalescePartitions { + if newSpec.Num < 1 { + return ast.ErrCoalescePartitionNoPartition + } + if newSpec.Num >= uint64(len(pi.Definitions)) { + return dbterror.ErrDropLastPartition + } + if isNonDefaultPartitionOptionsUsed(pi.Definitions) { + // The partition definitions will be copied in buildHashPartitionDefinitions() + // if there is a non-empty list of definitions + newSpec.PartDefinitions = []*ast.PartitionDefinition{{}} + } } - ctx.GetSessionVars().StmtCtx.AppendWarning(errors.NewNoStackError("after the exchange, please analyze related table of the exchange to update statistics")) - return nil + + return e.ReorganizePartitions(sctx, ident, &newSpec) } -// DropColumn will drop a column from the table, now we don't support drop the column with index covered. -func (e *executor) DropColumn(ctx sessionctx.Context, ti ast.Ident, spec *ast.AlterTableSpec) error { - schema, t, err := e.getSchemaAndTableByIdent(ti) +func (e *executor) TruncateTablePartition(ctx sessionctx.Context, ident ast.Ident, spec *ast.AlterTableSpec) error { + is := e.infoCache.GetLatest() + schema, ok := is.SchemaByName(ident.Schema) + if !ok { + return errors.Trace(infoschema.ErrDatabaseNotExists.GenWithStackByArgs(schema)) + } + t, err := is.TableByName(e.ctx, ident.Schema, ident.Name) if err != nil { - return errors.Trace(err) + return errors.Trace(infoschema.ErrTableNotExists.GenWithStackByArgs(ident.Schema, ident.Name)) + } + meta := t.Meta() + if meta.GetPartitionInfo() == nil { + return errors.Trace(dbterror.ErrPartitionMgmtOnNonpartitioned) } - failpoint.InjectCall("afterGetSchemaAndTableByIdent", ctx) - isDropable, err := checkIsDroppableColumn(ctx, e.infoCache.GetLatest(), schema, t, spec) + getTruncatedParts := func(pi *model.PartitionInfo) (*model.PartitionInfo, error) { + if spec.OnAllPartitions { + return pi.Clone(), nil + } + var defs []model.PartitionDefinition + // MySQL allows duplicate partition names in truncate partition + // so we filter them out through a hash + posMap := make(map[int]bool) + for _, name := range spec.PartitionNames { + pos := pi.FindPartitionDefinitionByName(name.L) + if pos < 0 { + return nil, errors.Trace(table.ErrUnknownPartition.GenWithStackByArgs(name.L, ident.Name.O)) + } + if _, ok := posMap[pos]; !ok { + defs = append(defs, pi.Definitions[pos]) + posMap[pos] = true + } + } + pi = pi.Clone() + pi.Definitions = defs + return pi, nil + } + pi, err := getTruncatedParts(meta.GetPartitionInfo()) if err != nil { return err } - if !isDropable { - return nil + pids := make([]int64, 0, len(pi.Definitions)) + for i := range pi.Definitions { + pids = append(pids, pi.Definitions[i].ID) } - colName := spec.OldColumnName.Name - err = checkVisibleColumnCnt(t, 0, 1) + + genIDs, err := e.genGlobalIDs(len(pids)) if err != nil { - return err + return errors.Trace(err) } job := &model.Job{ SchemaID: schema.ID, - TableID: t.Meta().ID, + TableID: meta.ID, SchemaName: schema.Name.L, SchemaState: model.StatePublic, TableName: t.Meta().Name.L, - Type: model.ActionDropColumn, + Type: model.ActionTruncateTablePartition, BinlogInfo: &model.HistoryInfo{}, - Args: []any{colName, spec.IfExists}, + Args: []any{pids, genIDs}, CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, SQLMode: ctx.GetSessionVars().SQLMode, } err = e.DoDDLJob(ctx, job) - return errors.Trace(err) -} - -func checkIsDroppableColumn(ctx sessionctx.Context, is infoschema.InfoSchema, schema *model.DBInfo, t table.Table, spec *ast.AlterTableSpec) (isDrapable bool, err error) { - tblInfo := t.Meta() - // Check whether dropped column has existed. - colName := spec.OldColumnName.Name - col := table.FindCol(t.VisibleCols(), colName.L) - if col == nil { - err = dbterror.ErrCantDropFieldOrKey.GenWithStackByArgs(colName) - if spec.IfExists { - ctx.GetSessionVars().StmtCtx.AppendNote(err) - return false, nil - } - return false, err - } - - if err = isDroppableColumn(tblInfo, colName); err != nil { - return false, errors.Trace(err) - } - if err = checkDropColumnWithPartitionConstraint(t, colName); err != nil { - return false, errors.Trace(err) - } - // Check the column with foreign key. - err = checkDropColumnWithForeignKeyConstraint(is, schema.Name.L, tblInfo, colName.L) if err != nil { - return false, errors.Trace(err) - } - // Check the column with TTL config - err = checkDropColumnWithTTLConfig(tblInfo, colName.L) - if err != nil { - return false, errors.Trace(err) - } - // We don't support dropping column with PK handle covered now. - if col.IsPKHandleColumn(tblInfo) { - return false, dbterror.ErrUnsupportedPKHandle - } - if mysql.HasAutoIncrementFlag(col.GetFlag()) && !ctx.GetSessionVars().AllowRemoveAutoInc { - return false, dbterror.ErrCantDropColWithAutoInc - } - return true, nil -} - -// checkDropColumnWithPartitionConstraint is used to check the partition constraint of the drop column. -func checkDropColumnWithPartitionConstraint(t table.Table, colName model.CIStr) error { - if t.Meta().Partition == nil { - return nil - } - pt, ok := t.(table.PartitionedTable) - if !ok { - // Should never happen! - return errors.Trace(dbterror.ErrDependentByPartitionFunctional.GenWithStackByArgs(colName.L)) - } - for _, name := range pt.GetPartitionColumnNames() { - if strings.EqualFold(name.L, colName.L) { - return errors.Trace(dbterror.ErrDependentByPartitionFunctional.GenWithStackByArgs(colName.L)) - } + return errors.Trace(err) } return nil } -func checkVisibleColumnCnt(t table.Table, addCnt, dropCnt int) error { - tblInfo := t.Meta() - visibleColumCnt := 0 - for _, column := range tblInfo.Columns { - if !column.Hidden { - visibleColumCnt++ - } - } - if visibleColumCnt+addCnt > dropCnt { - return nil - } - if len(tblInfo.Columns)-visibleColumCnt > 0 { - // There are only invisible columns. - return dbterror.ErrTableMustHaveColumns - } - return dbterror.ErrCantRemoveAllFields -} - -// checkModifyCharsetAndCollation returns error when the charset or collation is not modifiable. -// needRewriteCollationData is used when trying to modify the collation of a column, it is true when the column is with -// index because index of a string column is collation-aware. -func checkModifyCharsetAndCollation(toCharset, toCollate, origCharset, origCollate string, needRewriteCollationData bool) error { - if !charset.ValidCharsetAndCollation(toCharset, toCollate) { - return dbterror.ErrUnknownCharacterSet.GenWithStack("Unknown character set: '%s', collation: '%s'", toCharset, toCollate) - } - - if needRewriteCollationData && collate.NewCollationEnabled() && !collate.CompatibleCollate(origCollate, toCollate) { - return dbterror.ErrUnsupportedModifyCollation.GenWithStackByArgs(origCollate, toCollate) - } - - if (origCharset == charset.CharsetUTF8 && toCharset == charset.CharsetUTF8MB4) || - (origCharset == charset.CharsetUTF8 && toCharset == charset.CharsetUTF8) || - (origCharset == charset.CharsetUTF8MB4 && toCharset == charset.CharsetUTF8MB4) || - (origCharset == charset.CharsetLatin1 && toCharset == charset.CharsetUTF8MB4) { - // TiDB only allow utf8/latin1 to be changed to utf8mb4, or changing the collation when the charset is utf8/utf8mb4/latin1. - return nil +func (e *executor) DropTablePartition(ctx sessionctx.Context, ident ast.Ident, spec *ast.AlterTableSpec) error { + is := e.infoCache.GetLatest() + schema, ok := is.SchemaByName(ident.Schema) + if !ok { + return errors.Trace(infoschema.ErrDatabaseNotExists.GenWithStackByArgs(schema)) } - - if toCharset != origCharset { - msg := fmt.Sprintf("charset from %s to %s", origCharset, toCharset) - return dbterror.ErrUnsupportedModifyCharset.GenWithStackByArgs(msg) + t, err := is.TableByName(e.ctx, ident.Schema, ident.Name) + if err != nil { + return errors.Trace(infoschema.ErrTableNotExists.GenWithStackByArgs(ident.Schema, ident.Name)) } - if toCollate != origCollate { - msg := fmt.Sprintf("change collate from %s to %s", origCollate, toCollate) - return dbterror.ErrUnsupportedModifyCharset.GenWithStackByArgs(msg) + meta := t.Meta() + if meta.GetPartitionInfo() == nil { + return errors.Trace(dbterror.ErrPartitionMgmtOnNonpartitioned) } - return nil -} -// checkModifyTypes checks if the 'origin' type can be modified to 'to' type no matter directly change -// or change by reorg. It returns error if the two types are incompatible and correlated change are not -// supported. However, even the two types can be change, if the "origin" type contains primary key, error will be returned. -func checkModifyTypes(origin *types.FieldType, to *types.FieldType, needRewriteCollationData bool) error { - canReorg, err := types.CheckModifyTypeCompatible(origin, to) - if err != nil { - if !canReorg { - return errors.Trace(dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs(err.Error())) + if spec.Tp == ast.AlterTableDropFirstPartition { + intervalOptions := getPartitionIntervalFromTable(ctx.GetExprCtx(), meta) + if intervalOptions == nil { + return dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs( + "FIRST PARTITION, does not seem like an INTERVAL partitioned table") } - if mysql.HasPriKeyFlag(origin.GetFlag()) { - msg := "this column has primary key flag" - return dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs(msg) + if len(spec.Partition.Definitions) != 0 { + return dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs( + "FIRST PARTITION, table info already contains partition definitions") } - } - - err = checkModifyCharsetAndCollation(to.GetCharset(), to.GetCollate(), origin.GetCharset(), origin.GetCollate(), needRewriteCollationData) - - if err != nil { - if to.GetCharset() == charset.CharsetGBK || origin.GetCharset() == charset.CharsetGBK { - return errors.Trace(err) + spec.Partition.Interval = intervalOptions + err = GeneratePartDefsFromInterval(ctx.GetExprCtx(), spec.Tp, meta, spec.Partition) + if err != nil { + return err } - // column type change can handle the charset change between these two types in the process of the reorg. - if dbterror.ErrUnsupportedModifyCharset.Equal(err) && canReorg { - return nil + pNullOffset := 0 + if intervalOptions.NullPart { + pNullOffset = 1 } - } - return errors.Trace(err) -} - -// SetDefaultValue sets the default value of the column. -func SetDefaultValue(ctx sessionctx.Context, col *table.Column, option *ast.ColumnOption) (hasDefaultValue bool, err error) { - var value any - var isSeqExpr bool - value, isSeqExpr, err = getDefaultValue( - exprctx.CtxWithHandleTruncateErrLevel(ctx.GetExprCtx(), errctx.LevelError), - col, option, - ) - if err != nil { - return false, errors.Trace(err) - } - if isSeqExpr { - if err := checkSequenceDefaultValue(col); err != nil { - return false, errors.Trace(err) + if len(spec.Partition.Definitions) == 0 || + len(spec.Partition.Definitions) >= len(meta.Partition.Definitions)-pNullOffset { + return dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs( + "FIRST PARTITION, number of partitions does not match") } - col.DefaultIsExpr = isSeqExpr - } - - // When the default value is expression, we skip check and convert. - if !col.DefaultIsExpr { - if hasDefaultValue, value, err = checkColumnDefaultValue(ctx.GetExprCtx(), col, value); err != nil { - return hasDefaultValue, errors.Trace(err) + if len(spec.PartitionNames) != 0 || len(spec.Partition.Definitions) <= 1 { + return dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs( + "FIRST PARTITION, given value does not generate a list of partition names to be dropped") } - value, err = convertTimestampDefaultValToUTC(ctx, value, col) - if err != nil { - return hasDefaultValue, errors.Trace(err) + for i := range spec.Partition.Definitions { + spec.PartitionNames = append(spec.PartitionNames, meta.Partition.Definitions[i+pNullOffset].Name) } - } else { - hasDefaultValue = true + // Use the last generated partition as First, i.e. do not drop the last name in the slice + spec.PartitionNames = spec.PartitionNames[:len(spec.PartitionNames)-1] + + query, ok := ctx.Value(sessionctx.QueryString).(string) + if ok { + partNames := make([]string, 0, len(spec.PartitionNames)) + sqlMode := ctx.GetSessionVars().SQLMode + for i := range spec.PartitionNames { + partNames = append(partNames, stringutil.Escape(spec.PartitionNames[i].O, sqlMode)) + } + syntacticSugar := spec.Partition.PartitionMethod.OriginalText() + syntacticStart := spec.Partition.PartitionMethod.OriginTextPosition() + newQuery := query[:syntacticStart] + "DROP PARTITION " + strings.Join(partNames, ", ") + query[syntacticStart+len(syntacticSugar):] + defer ctx.SetValue(sessionctx.QueryString, query) + ctx.SetValue(sessionctx.QueryString, newQuery) + } + } + partNames := make([]string, len(spec.PartitionNames)) + for i, partCIName := range spec.PartitionNames { + partNames[i] = partCIName.L } - err = setDefaultValueWithBinaryPadding(col, value) + err = CheckDropTablePartition(meta, partNames) if err != nil { - return hasDefaultValue, errors.Trace(err) + if dbterror.ErrDropPartitionNonExistent.Equal(err) && spec.IfExists { + ctx.GetSessionVars().StmtCtx.AppendNote(err) + return nil + } + return errors.Trace(err) + } + + job := &model.Job{ + SchemaID: schema.ID, + TableID: meta.ID, + SchemaName: schema.Name.L, + SchemaState: model.StatePublic, + TableName: meta.Name.L, + Type: model.ActionDropTablePartition, + BinlogInfo: &model.HistoryInfo{}, + Args: []any{partNames}, + CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, + SQLMode: ctx.GetSessionVars().SQLMode, } - return hasDefaultValue, nil -} -func setDefaultValueWithBinaryPadding(col *table.Column, value any) error { - err := col.SetDefaultValue(value) + err = e.DoDDLJob(ctx, job) if err != nil { - return err - } - // https://dev.mysql.com/doc/refman/8.0/en/binary-varbinary.html - // Set the default value for binary type should append the paddings. - if value != nil { - if col.GetType() == mysql.TypeString && types.IsBinaryStr(&col.FieldType) && len(value.(string)) < col.GetFlen() { - padding := make([]byte, col.GetFlen()-len(value.(string))) - col.DefaultValue = string(append([]byte(col.DefaultValue.(string)), padding...)) + if dbterror.ErrDropPartitionNonExistent.Equal(err) && spec.IfExists { + ctx.GetSessionVars().StmtCtx.AppendNote(err) + return nil } - } - return nil -} - -func setColumnComment(ctx sessionctx.Context, col *table.Column, option *ast.ColumnOption) error { - value, err := expression.EvalSimpleAst(ctx.GetExprCtx(), option.Expr) - if err != nil { - return errors.Trace(err) - } - if col.Comment, err = value.ToString(); err != nil { return errors.Trace(err) } - - sessionVars := ctx.GetSessionVars() - col.Comment, err = validateCommentLength(sessionVars.StmtCtx.ErrCtx(), sessionVars.SQLMode, col.Name.L, &col.Comment, dbterror.ErrTooLongFieldComment) return errors.Trace(err) } -// ProcessModifyColumnOptions process column options. -func ProcessModifyColumnOptions(ctx sessionctx.Context, col *table.Column, options []*ast.ColumnOption) error { - var sb strings.Builder - restoreFlags := format.RestoreStringSingleQuotes | format.RestoreKeyWordLowercase | format.RestoreNameBackQuotes | - format.RestoreSpacesAroundBinaryOperation | format.RestoreWithoutSchemaName | format.RestoreWithoutSchemaName - restoreCtx := format.NewRestoreCtx(restoreFlags, &sb) - - var hasDefaultValue, setOnUpdateNow bool - var err error - var hasNullFlag bool - for _, opt := range options { - switch opt.Tp { - case ast.ColumnOptionDefaultValue: - hasDefaultValue, err = SetDefaultValue(ctx, col, opt) - if err != nil { - return errors.Trace(err) - } - case ast.ColumnOptionComment: - err := setColumnComment(ctx, col, opt) - if err != nil { - return errors.Trace(err) - } - case ast.ColumnOptionNotNull: - col.AddFlag(mysql.NotNullFlag) - case ast.ColumnOptionNull: - hasNullFlag = true - col.DelFlag(mysql.NotNullFlag) - case ast.ColumnOptionAutoIncrement: - col.AddFlag(mysql.AutoIncrementFlag) - case ast.ColumnOptionPrimaryKey: - return errors.Trace(dbterror.ErrUnsupportedModifyColumn.GenWithStack("can't change column constraint (PRIMARY KEY)")) - case ast.ColumnOptionUniqKey: - return errors.Trace(dbterror.ErrUnsupportedModifyColumn.GenWithStack("can't change column constraint (UNIQUE KEY)")) - case ast.ColumnOptionOnUpdate: - // TODO: Support other time functions. - if !(col.GetType() == mysql.TypeTimestamp || col.GetType() == mysql.TypeDatetime) { - return dbterror.ErrInvalidOnUpdate.GenWithStackByArgs(col.Name) - } - if !expression.IsValidCurrentTimestampExpr(opt.Expr, &col.FieldType) { - return dbterror.ErrInvalidOnUpdate.GenWithStackByArgs(col.Name) - } - col.AddFlag(mysql.OnUpdateNowFlag) - setOnUpdateNow = true - case ast.ColumnOptionGenerated: - sb.Reset() - err = opt.Expr.Restore(restoreCtx) - if err != nil { - return errors.Trace(err) - } - col.GeneratedExprString = sb.String() - col.GeneratedStored = opt.Stored - col.Dependences = make(map[string]struct{}) - // Only used by checkModifyGeneratedColumn, there is no need to set a ctor for it. - col.GeneratedExpr = table.NewClonableExprNode(nil, opt.Expr) - for _, colName := range FindColumnNamesInExpr(opt.Expr) { - col.Dependences[colName.Name.L] = struct{}{} - } - case ast.ColumnOptionCollate: - col.SetCollate(opt.StrValue) - case ast.ColumnOptionReference: - return errors.Trace(dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs("can't modify with references")) - case ast.ColumnOptionFulltext: - return errors.Trace(dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs("can't modify with full text")) - case ast.ColumnOptionCheck: - return errors.Trace(dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs("can't modify with check")) - // Ignore ColumnOptionAutoRandom. It will be handled later. - case ast.ColumnOptionAutoRandom: - default: - return errors.Trace(dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs(fmt.Sprintf("unknown column option type: %d", opt.Tp))) - } +func checkFieldTypeCompatible(ft *types.FieldType, other *types.FieldType) bool { + // int(1) could match the type with int(8) + partialEqual := ft.GetType() == other.GetType() && + ft.GetDecimal() == other.GetDecimal() && + ft.GetCharset() == other.GetCharset() && + ft.GetCollate() == other.GetCollate() && + (ft.GetFlen() == other.GetFlen() || ft.StorageLength() != types.VarStorageLen) && + mysql.HasUnsignedFlag(ft.GetFlag()) == mysql.HasUnsignedFlag(other.GetFlag()) && + mysql.HasAutoIncrementFlag(ft.GetFlag()) == mysql.HasAutoIncrementFlag(other.GetFlag()) && + mysql.HasNotNullFlag(ft.GetFlag()) == mysql.HasNotNullFlag(other.GetFlag()) && + mysql.HasZerofillFlag(ft.GetFlag()) == mysql.HasZerofillFlag(other.GetFlag()) && + mysql.HasBinaryFlag(ft.GetFlag()) == mysql.HasBinaryFlag(other.GetFlag()) && + mysql.HasPriKeyFlag(ft.GetFlag()) == mysql.HasPriKeyFlag(other.GetFlag()) + if !partialEqual || len(ft.GetElems()) != len(other.GetElems()) { + return false } - - if err = processAndCheckDefaultValueAndColumn(ctx, col, nil, hasDefaultValue, setOnUpdateNow, hasNullFlag); err != nil { - return errors.Trace(err) + for i := range ft.GetElems() { + if ft.GetElems()[i] != other.GetElems()[i] { + return false + } } - - return nil + return true } -func processAndCheckDefaultValueAndColumn(ctx sessionctx.Context, col *table.Column, - outPriKeyConstraint *ast.Constraint, hasDefaultValue, setOnUpdateNow, hasNullFlag bool) error { - processDefaultValue(col, hasDefaultValue, setOnUpdateNow) - processColumnFlags(col) - - err := checkPriKeyConstraint(col, hasDefaultValue, hasNullFlag, outPriKeyConstraint) - if err != nil { - return errors.Trace(err) +func checkTiFlashReplicaCompatible(source *model.TiFlashReplicaInfo, target *model.TiFlashReplicaInfo) bool { + if source == target { + return true } - if err = checkColumnValueConstraint(col, col.GetCollate()); err != nil { - return errors.Trace(err) + if source == nil || target == nil { + return false } - if err = checkDefaultValue(ctx.GetExprCtx(), col, hasDefaultValue); err != nil { - return errors.Trace(err) + if source.Count != target.Count || + source.Available != target.Available || len(source.LocationLabels) != len(target.LocationLabels) { + return false } - if err = checkColumnFieldLength(col); err != nil { - return errors.Trace(err) + for i, lable := range source.LocationLabels { + if target.LocationLabels[i] != lable { + return false + } } - return nil + return true } -func (e *executor) getModifiableColumnJob(ctx context.Context, sctx sessionctx.Context, ident ast.Ident, originalColName model.CIStr, - spec *ast.AlterTableSpec) (*model.Job, error) { - is := e.infoCache.GetLatest() - schema, ok := is.SchemaByName(ident.Schema) - if !ok { - return nil, errors.Trace(infoschema.ErrDatabaseNotExists) - } - t, err := is.TableByName(ctx, ident.Schema, ident.Name) - if err != nil { - return nil, errors.Trace(infoschema.ErrTableNotExists.GenWithStackByArgs(ident.Schema, ident.Name)) +func checkTableDefCompatible(source *model.TableInfo, target *model.TableInfo) error { + // check temp table + if target.TempTableType != model.TempTableNone { + return errors.Trace(dbterror.ErrPartitionExchangeTempTable.FastGenByArgs(target.Name)) } - return GetModifiableColumnJob(ctx, sctx, is, ident, originalColName, schema, t, spec) -} - -func checkModifyColumnWithGeneratedColumnsConstraint(allCols []*table.Column, oldColName model.CIStr) error { - for _, col := range allCols { - if col.GeneratedExpr == nil { - continue + // check auto_random + if source.AutoRandomBits != target.AutoRandomBits || + source.AutoRandomRangeBits != target.AutoRandomRangeBits || + source.Charset != target.Charset || + source.Collate != target.Collate || + source.ShardRowIDBits != target.ShardRowIDBits || + source.MaxShardRowIDBits != target.MaxShardRowIDBits || + !checkTiFlashReplicaCompatible(source.TiFlashReplica, target.TiFlashReplica) { + return errors.Trace(dbterror.ErrTablesDifferentMetadata) + } + if len(source.Cols()) != len(target.Cols()) { + return errors.Trace(dbterror.ErrTablesDifferentMetadata) + } + // Col compatible check + for i, sourceCol := range source.Cols() { + targetCol := target.Cols()[i] + if sourceCol.IsVirtualGenerated() != targetCol.IsVirtualGenerated() { + return dbterror.ErrUnsupportedOnGeneratedColumn.GenWithStackByArgs("Exchanging partitions for non-generated columns") } - dependedColNames := FindColumnNamesInExpr(col.GeneratedExpr.Internal()) - for _, name := range dependedColNames { - if name.Name.L == oldColName.L { - if col.Hidden { - return dbterror.ErrDependentByFunctionalIndex.GenWithStackByArgs(oldColName.O) - } - return dbterror.ErrDependentByGeneratedColumn.GenWithStackByArgs(oldColName.O) - } + // It should strictyle compare expressions for generated columns + if sourceCol.Name.L != targetCol.Name.L || + sourceCol.Hidden != targetCol.Hidden || + !checkFieldTypeCompatible(&sourceCol.FieldType, &targetCol.FieldType) || + sourceCol.GeneratedExprString != targetCol.GeneratedExprString { + return errors.Trace(dbterror.ErrTablesDifferentMetadata) + } + if sourceCol.State != model.StatePublic || + targetCol.State != model.StatePublic { + return errors.Trace(dbterror.ErrTablesDifferentMetadata) + } + if sourceCol.ID != targetCol.ID { + return dbterror.ErrPartitionExchangeDifferentOption.GenWithStackByArgs(fmt.Sprintf("column: %s", sourceCol.Name)) } } - return nil -} - -// ProcessColumnCharsetAndCollation process column charset and collation -func ProcessColumnCharsetAndCollation(sctx sessionctx.Context, col *table.Column, newCol *table.Column, meta *model.TableInfo, specNewColumn *ast.ColumnDef, schema *model.DBInfo) error { - var chs, coll string - var err error - // TODO: Remove it when all table versions are greater than or equal to TableInfoVersion1. - // If newCol's charset is empty and the table's version less than TableInfoVersion1, - // we will not modify the charset of the column. This behavior is not compatible with MySQL. - if len(newCol.FieldType.GetCharset()) == 0 && meta.Version < model.TableInfoVersion1 { - chs = col.FieldType.GetCharset() - coll = col.FieldType.GetCollate() - } else { - chs, coll, err = getCharsetAndCollateInColumnDef(sctx.GetSessionVars(), specNewColumn) - if err != nil { - return errors.Trace(err) + if len(source.Indices) != len(target.Indices) { + return errors.Trace(dbterror.ErrTablesDifferentMetadata) + } + for _, sourceIdx := range source.Indices { + if sourceIdx.Global { + return dbterror.ErrPartitionExchangeDifferentOption.GenWithStackByArgs(fmt.Sprintf("global index: %s", sourceIdx.Name)) } - chs, coll, err = ResolveCharsetCollation(sctx.GetSessionVars(), - ast.CharsetOpt{Chs: chs, Col: coll}, - ast.CharsetOpt{Chs: meta.Charset, Col: meta.Collate}, - ast.CharsetOpt{Chs: schema.Charset, Col: schema.Collate}, - ) - chs, coll = OverwriteCollationWithBinaryFlag(sctx.GetSessionVars(), specNewColumn, chs, coll) - if err != nil { - return errors.Trace(err) + var compatIdx *model.IndexInfo + for _, targetIdx := range target.Indices { + if strings.EqualFold(sourceIdx.Name.L, targetIdx.Name.L) { + compatIdx = targetIdx + } + } + // No match index + if compatIdx == nil { + return errors.Trace(dbterror.ErrTablesDifferentMetadata) + } + // Index type is not compatible + if sourceIdx.Tp != compatIdx.Tp || + sourceIdx.Unique != compatIdx.Unique || + sourceIdx.Primary != compatIdx.Primary { + return errors.Trace(dbterror.ErrTablesDifferentMetadata) + } + // The index column + if len(sourceIdx.Columns) != len(compatIdx.Columns) { + return errors.Trace(dbterror.ErrTablesDifferentMetadata) + } + for i, sourceIdxCol := range sourceIdx.Columns { + compatIdxCol := compatIdx.Columns[i] + if sourceIdxCol.Length != compatIdxCol.Length || + sourceIdxCol.Name.L != compatIdxCol.Name.L { + return errors.Trace(dbterror.ErrTablesDifferentMetadata) + } + } + if sourceIdx.ID != compatIdx.ID { + return dbterror.ErrPartitionExchangeDifferentOption.GenWithStackByArgs(fmt.Sprintf("index: %s", sourceIdx.Name)) } } - if err = setCharsetCollationFlenDecimal(&newCol.FieldType, newCol.Name.O, chs, coll, sctx.GetSessionVars()); err != nil { - return errors.Trace(err) - } - decodeEnumSetBinaryLiteralToUTF8(&newCol.FieldType, chs) return nil } -// GetModifiableColumnJob returns a DDL job of model.ActionModifyColumn. -func GetModifiableColumnJob( - ctx context.Context, - sctx sessionctx.Context, - is infoschema.InfoSchema, // WARN: is maybe nil here. - ident ast.Ident, - originalColName model.CIStr, - schema *model.DBInfo, - t table.Table, - spec *ast.AlterTableSpec, -) (*model.Job, error) { - var err error - specNewColumn := spec.NewColumns[0] - - col := table.FindCol(t.Cols(), originalColName.L) - if col == nil { - return nil, infoschema.ErrColumnNotExists.GenWithStackByArgs(originalColName, ident.Name) - } - newColName := specNewColumn.Name.Name - if newColName.L == model.ExtraHandleName.L { - return nil, dbterror.ErrWrongColumnName.GenWithStackByArgs(newColName.L) +func checkExchangePartition(pt *model.TableInfo, nt *model.TableInfo) error { + if nt.IsView() || nt.IsSequence() { + return errors.Trace(dbterror.ErrCheckNoSuchTable) } - errG := checkModifyColumnWithGeneratedColumnsConstraint(t.Cols(), originalColName) - - // If we want to rename the column name, we need to check whether it already exists. - if newColName.L != originalColName.L { - c := table.FindCol(t.Cols(), newColName.L) - if c != nil { - return nil, infoschema.ErrColumnExists.GenWithStackByArgs(newColName) - } - - // And also check the generated columns dependency, if some generated columns - // depend on this column, we can't rename the column name. - if errG != nil { - return nil, errors.Trace(errG) - } + if pt.GetPartitionInfo() == nil { + return errors.Trace(dbterror.ErrPartitionMgmtOnNonpartitioned) } - - // Constraints in the new column means adding new constraints. Errors should thrown, - // which will be done by `processColumnOptions` later. - if specNewColumn.Tp == nil { - // Make sure the column definition is simple field type. - return nil, errors.Trace(dbterror.ErrUnsupportedModifyColumn) + if nt.GetPartitionInfo() != nil { + return errors.Trace(dbterror.ErrPartitionExchangePartTable.GenWithStackByArgs(nt.Name)) } - if err = checkColumnAttributes(specNewColumn.Name.OrigColName(), specNewColumn.Tp); err != nil { - return nil, errors.Trace(err) + if len(nt.ForeignKeys) > 0 { + return errors.Trace(dbterror.ErrPartitionExchangeForeignKey.GenWithStackByArgs(nt.Name)) } - newCol := table.ToColumn(&model.ColumnInfo{ - ID: col.ID, - // We use this PR(https://github.com/pingcap/tidb/pull/6274) as the dividing line to define whether it is a new version or an old version TiDB. - // The old version TiDB initializes the column's offset and state here. - // The new version TiDB doesn't initialize the column's offset and state, and it will do the initialization in run DDL function. - // When we do the rolling upgrade the following may happen: - // a new version TiDB builds the DDL job that doesn't be set the column's offset and state, - // and the old version TiDB is the DDL owner, it doesn't get offset and state from the store. Then it will encounter errors. - // So here we set offset and state to support the rolling upgrade. - Offset: col.Offset, - State: col.State, - OriginDefaultValue: col.OriginDefaultValue, - OriginDefaultValueBit: col.OriginDefaultValueBit, - FieldType: *specNewColumn.Tp, - Name: newColName, - Version: col.Version, - }) + return nil +} - if err = ProcessColumnCharsetAndCollation(sctx, col, newCol, t.Meta(), specNewColumn, schema); err != nil { - return nil, err +func (e *executor) ExchangeTablePartition(ctx sessionctx.Context, ident ast.Ident, spec *ast.AlterTableSpec) error { + ptSchema, pt, err := e.getSchemaAndTableByIdent(ident) + if err != nil { + return errors.Trace(err) } - if err = checkModifyColumnWithForeignKeyConstraint(is, schema.Name.L, t.Meta(), col.ColumnInfo, newCol.ColumnInfo); err != nil { - return nil, errors.Trace(err) - } + ptMeta := pt.Meta() - // Copy index related options to the new spec. - indexFlags := col.FieldType.GetFlag() & (mysql.PriKeyFlag | mysql.UniqueKeyFlag | mysql.MultipleKeyFlag) - newCol.FieldType.AddFlag(indexFlags) - if mysql.HasPriKeyFlag(col.FieldType.GetFlag()) { - newCol.FieldType.AddFlag(mysql.NotNullFlag) - // TODO: If user explicitly set NULL, we should throw error ErrPrimaryCantHaveNull. - } + ntIdent := ast.Ident{Schema: spec.NewTable.Schema, Name: spec.NewTable.Name} - if err = ProcessModifyColumnOptions(sctx, newCol, specNewColumn.Options); err != nil { - return nil, errors.Trace(err) + // We should check local temporary here using session's info schema because the local temporary tables are only stored in session. + ntLocalTempTable, err := sessiontxn.GetTxnManager(ctx).GetTxnInfoSchema().TableByName(context.Background(), ntIdent.Schema, ntIdent.Name) + if err == nil && ntLocalTempTable.Meta().TempTableType == model.TempTableLocal { + return errors.Trace(dbterror.ErrPartitionExchangeTempTable.FastGenByArgs(ntLocalTempTable.Meta().Name)) } - if err = checkModifyTypes(&col.FieldType, &newCol.FieldType, isColumnWithIndex(col.Name.L, t.Meta().Indices)); err != nil { - if strings.Contains(err.Error(), "Unsupported modifying collation") { - colErrMsg := "Unsupported modifying collation of column '%s' from '%s' to '%s' when index is defined on it." - err = dbterror.ErrUnsupportedModifyCollation.GenWithStack(colErrMsg, col.Name.L, col.GetCollate(), newCol.GetCollate()) - } - return nil, errors.Trace(err) - } - needChangeColData := needChangeColumnData(col.ColumnInfo, newCol.ColumnInfo) - if needChangeColData { - if err = isGeneratedRelatedColumn(t.Meta(), newCol.ColumnInfo, col.ColumnInfo); err != nil { - return nil, errors.Trace(err) - } - if t.Meta().Partition != nil { - return nil, dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs("table is partition table") - } + ntSchema, nt, err := e.getSchemaAndTableByIdent(ntIdent) + if err != nil { + return errors.Trace(err) } - // Check that the column change does not affect the partitioning column - // It must keep the same type, int [unsigned], [var]char, date[time] - if t.Meta().Partition != nil { - pt, ok := t.(table.PartitionedTable) - if !ok { - // Should never happen! - return nil, dbterror.ErrNotAllowedTypeInPartition.GenWithStackByArgs(newCol.Name.O) - } - isPartitioningColumn := false - for _, name := range pt.GetPartitionColumnNames() { - if strings.EqualFold(name.L, col.Name.L) { - isPartitioningColumn = true - break - } - } - if isPartitioningColumn { - // TODO: update the partitioning columns with new names if column is renamed - // Would be an extension from MySQL which does not support it. - if col.Name.L != newCol.Name.L { - return nil, dbterror.ErrDependentByPartitionFunctional.GenWithStackByArgs(col.Name.L) - } - if !isColTypeAllowedAsPartitioningCol(t.Meta().Partition.Type, newCol.FieldType) { - return nil, dbterror.ErrNotAllowedTypeInPartition.GenWithStackByArgs(newCol.Name.O) - } - pi := pt.Meta().GetPartitionInfo() - if len(pi.Columns) == 0 { - // non COLUMNS partitioning, only checks INTs, not their actual range - // There are many edge cases, like when truncating SQL Mode is allowed - // which will change the partitioning expression value resulting in a - // different partition. Better be safe and not allow decreasing of length. - // TODO: Should we allow it in strict mode? Wait for a use case / request. - if newCol.FieldType.GetFlen() < col.FieldType.GetFlen() { - return nil, dbterror.ErrUnsupportedModifyCollation.GenWithStack("Unsupported modify column, decreasing length of int may result in truncation and change of partition") - } - } - // Basically only allow changes of the length/decimals for the column - // Note that enum is not allowed, so elems are not checked - // TODO: support partition by ENUM - if newCol.FieldType.EvalType() != col.FieldType.EvalType() || - newCol.FieldType.GetFlag() != col.FieldType.GetFlag() || - newCol.FieldType.GetCollate() != col.FieldType.GetCollate() || - newCol.FieldType.GetCharset() != col.FieldType.GetCharset() { - return nil, dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs("can't change the partitioning column, since it would require reorganize all partitions") - } - // Generate a new PartitionInfo and validate it together with the new column definition - // Checks if all partition definition values are compatible. - // Similar to what buildRangePartitionDefinitions would do in terms of checks. - - tblInfo := pt.Meta() - newTblInfo := *tblInfo - // Replace col with newCol and see if we can generate a new SHOW CREATE TABLE - // and reparse it and build new partition definitions (which will do additional - // checks columns vs partition definition values - newCols := make([]*model.ColumnInfo, 0, len(newTblInfo.Columns)) - for _, c := range newTblInfo.Columns { - if c.ID == col.ID { - newCols = append(newCols, newCol.ColumnInfo) - continue - } - newCols = append(newCols, c) - } - newTblInfo.Columns = newCols + ntMeta := nt.Meta() - var buf bytes.Buffer - AppendPartitionInfo(tblInfo.GetPartitionInfo(), &buf, mysql.ModeNone) - // The parser supports ALTER TABLE ... PARTITION BY ... even if the ddl code does not yet :) - // Ignoring warnings - stmt, _, err := parser.New().ParseSQL("ALTER TABLE t " + buf.String()) - if err != nil { - // Should never happen! - return nil, dbterror.ErrUnsupportedModifyColumn.GenWithStack("cannot parse generated PartitionInfo") - } - at, ok := stmt[0].(*ast.AlterTableStmt) - if !ok || len(at.Specs) != 1 || at.Specs[0].Partition == nil { - return nil, dbterror.ErrUnsupportedModifyColumn.GenWithStack("cannot parse generated PartitionInfo") - } - pAst := at.Specs[0].Partition - _, err = buildPartitionDefinitionsInfo( - exprctx.CtxWithHandleTruncateErrLevel(sctx.GetExprCtx(), errctx.LevelError), - pAst.Definitions, &newTblInfo, uint64(len(newTblInfo.Partition.Definitions)), - ) - if err != nil { - return nil, dbterror.ErrUnsupportedModifyColumn.GenWithStack("New column does not match partition definitions: %s", err.Error()) - } - } + err = checkExchangePartition(ptMeta, ntMeta) + if err != nil { + return errors.Trace(err) } - // We don't support modifying column from not_auto_increment to auto_increment. - if !mysql.HasAutoIncrementFlag(col.GetFlag()) && mysql.HasAutoIncrementFlag(newCol.GetFlag()) { - return nil, dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs("can't set auto_increment") - } - // Not support auto id with default value. - if mysql.HasAutoIncrementFlag(newCol.GetFlag()) && newCol.GetDefaultValue() != nil { - return nil, dbterror.ErrInvalidDefaultValue.GenWithStackByArgs(newCol.Name) - } - // Disallow modifying column from auto_increment to not auto_increment if the session variable `AllowRemoveAutoInc` is false. - if !sctx.GetSessionVars().AllowRemoveAutoInc && mysql.HasAutoIncrementFlag(col.GetFlag()) && !mysql.HasAutoIncrementFlag(newCol.GetFlag()) { - return nil, dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs("can't remove auto_increment without @@tidb_allow_remove_auto_inc enabled") - } + partName := spec.PartitionNames[0].L - // We support modifying the type definitions of 'null' to 'not null' now. - var modifyColumnTp byte - if !mysql.HasNotNullFlag(col.GetFlag()) && mysql.HasNotNullFlag(newCol.GetFlag()) { - if err = checkForNullValue(ctx, sctx, true, ident.Schema, ident.Name, newCol.ColumnInfo, col.ColumnInfo); err != nil { - return nil, errors.Trace(err) - } - // `modifyColumnTp` indicates that there is a type modification. - modifyColumnTp = mysql.TypeNull - } + // NOTE: if pt is subPartitioned, it should be checked - if err = checkColumnWithIndexConstraint(t.Meta(), col.ColumnInfo, newCol.ColumnInfo); err != nil { - return nil, err + defID, err := tables.FindPartitionByName(ptMeta, partName) + if err != nil { + return errors.Trace(err) } - // As same with MySQL, we don't support modifying the stored status for generated columns. - if err = checkModifyGeneratedColumn(sctx, schema.Name, t, col, newCol, specNewColumn, spec.Position); err != nil { - return nil, errors.Trace(err) - } - if errG != nil { - // According to issue https://github.com/pingcap/tidb/issues/24321, - // changing the type of a column involving generating a column is prohibited. - return nil, dbterror.ErrUnsupportedOnGeneratedColumn.GenWithStackByArgs(errG.Error()) + err = checkTableDefCompatible(ptMeta, ntMeta) + if err != nil { + return errors.Trace(err) } - if t.Meta().TTLInfo != nil { - // the column referenced by TTL should be a time type - if t.Meta().TTLInfo.ColumnName.L == originalColName.L && !types.IsTypeTime(newCol.ColumnInfo.FieldType.GetType()) { - return nil, errors.Trace(dbterror.ErrUnsupportedColumnInTTLConfig.GenWithStackByArgs(newCol.ColumnInfo.Name.O)) - } + job := &model.Job{ + SchemaID: ntSchema.ID, + TableID: ntMeta.ID, + SchemaName: ntSchema.Name.L, + TableName: ntMeta.Name.L, + Type: model.ActionExchangeTablePartition, + BinlogInfo: &model.HistoryInfo{}, + Args: []any{defID, ptSchema.ID, ptMeta.ID, partName, spec.WithValidation}, + CtxVars: []any{[]int64{ntSchema.ID, ptSchema.ID}, []int64{ntMeta.ID, ptMeta.ID}}, + CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, + InvolvingSchemaInfo: []model.InvolvingSchemaInfo{ + {Database: ptSchema.Name.L, Table: ptMeta.Name.L}, + {Database: ntSchema.Name.L, Table: ntMeta.Name.L}, + }, + SQLMode: ctx.GetSessionVars().SQLMode, } - var newAutoRandBits uint64 - if newAutoRandBits, err = checkAutoRandom(t.Meta(), col, specNewColumn); err != nil { - return nil, errors.Trace(err) + err = e.DoDDLJob(ctx, job) + if err != nil { + return errors.Trace(err) } + ctx.GetSessionVars().StmtCtx.AppendWarning(errors.NewNoStackError("after the exchange, please analyze related table of the exchange to update statistics")) + return nil +} - txn, err := sctx.Txn(true) +// DropColumn will drop a column from the table, now we don't support drop the column with index covered. +func (e *executor) DropColumn(ctx sessionctx.Context, ti ast.Ident, spec *ast.AlterTableSpec) error { + schema, t, err := e.getSchemaAndTableByIdent(ti) if err != nil { - return nil, errors.Trace(err) + return errors.Trace(err) } - bdrRole, err := meta.NewMeta(txn).GetBDRRole() + failpoint.InjectCall("afterGetSchemaAndTableByIdent", ctx) + + isDropable, err := checkIsDroppableColumn(ctx, e.infoCache.GetLatest(), schema, t, spec) if err != nil { - return nil, errors.Trace(err) + return err + } + if !isDropable { + return nil } - if bdrRole == string(ast.BDRRolePrimary) && - deniedByBDRWhenModifyColumn(newCol.FieldType, col.FieldType, specNewColumn.Options) { - return nil, dbterror.ErrBDRRestrictedDDL.FastGenByArgs(bdrRole) + colName := spec.OldColumnName.Name + err = checkVisibleColumnCnt(t, 0, 1) + if err != nil { + return err } job := &model.Job{ SchemaID: schema.ID, TableID: t.Meta().ID, SchemaName: schema.Name.L, + SchemaState: model.StatePublic, TableName: t.Meta().Name.L, - Type: model.ActionModifyColumn, + Type: model.ActionDropColumn, BinlogInfo: &model.HistoryInfo{}, - ReorgMeta: NewDDLReorgMeta(sctx), - CtxVars: []any{needChangeColData}, - Args: []any{&newCol.ColumnInfo, originalColName, spec.Position, modifyColumnTp, newAutoRandBits}, - CDCWriteSource: sctx.GetSessionVars().CDCWriteSource, - SQLMode: sctx.GetSessionVars().SQLMode, + Args: []any{colName, spec.IfExists}, + CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, + SQLMode: ctx.GetSessionVars().SQLMode, } - return job, nil + + err = e.DoDDLJob(ctx, job) + return errors.Trace(err) } -// checkColumnWithIndexConstraint is used to check the related index constraint of the modified column. -// Index has a max-prefix-length constraint. eg: a varchar(100), index idx(a), modifying column a to a varchar(4000) -// will cause index idx to break the max-prefix-length constraint. -func checkColumnWithIndexConstraint(tbInfo *model.TableInfo, originalCol, newCol *model.ColumnInfo) error { - columns := make([]*model.ColumnInfo, 0, len(tbInfo.Columns)) - columns = append(columns, tbInfo.Columns...) - // Replace old column with new column. - for i, col := range columns { - if col.Name.L != originalCol.Name.L { - continue +func checkIsDroppableColumn(ctx sessionctx.Context, is infoschema.InfoSchema, schema *model.DBInfo, t table.Table, spec *ast.AlterTableSpec) (isDrapable bool, err error) { + tblInfo := t.Meta() + // Check whether dropped column has existed. + colName := spec.OldColumnName.Name + col := table.FindCol(t.VisibleCols(), colName.L) + if col == nil { + err = dbterror.ErrCantDropFieldOrKey.GenWithStackByArgs(colName) + if spec.IfExists { + ctx.GetSessionVars().StmtCtx.AppendNote(err) + return false, nil } - columns[i] = newCol.Clone() - columns[i].Name = originalCol.Name - break + return false, err } - pkIndex := tables.FindPrimaryIndex(tbInfo) - - checkOneIndex := func(indexInfo *model.IndexInfo) (err error) { - var modified bool - for _, col := range indexInfo.Columns { - if col.Name.L == originalCol.Name.L { - modified = true - break - } - } - if !modified { - return - } - err = checkIndexInModifiableColumns(columns, indexInfo.Columns) - if err != nil { - return - } - err = checkIndexPrefixLength(columns, indexInfo.Columns) - return + if err = isDroppableColumn(tblInfo, colName); err != nil { + return false, errors.Trace(err) } - - // Check primary key first. - var err error - - if pkIndex != nil { - err = checkOneIndex(pkIndex) - if err != nil { - return err - } + if err = checkDropColumnWithPartitionConstraint(t, colName); err != nil { + return false, errors.Trace(err) } - - // Check secondary indexes. - for _, indexInfo := range tbInfo.Indices { - if indexInfo.Primary { - continue - } - // the second param should always be set to true, check index length only if it was modified - // checkOneIndex needs one param only. - err = checkOneIndex(indexInfo) - if err != nil { - return err - } + // Check the column with foreign key. + err = checkDropColumnWithForeignKeyConstraint(is, schema.Name.L, tblInfo, colName.L) + if err != nil { + return false, errors.Trace(err) } - return nil + // Check the column with TTL config + err = checkDropColumnWithTTLConfig(tblInfo, colName.L) + if err != nil { + return false, errors.Trace(err) + } + // We don't support dropping column with PK handle covered now. + if col.IsPKHandleColumn(tblInfo) { + return false, dbterror.ErrUnsupportedPKHandle + } + if mysql.HasAutoIncrementFlag(col.GetFlag()) && !ctx.GetSessionVars().AllowRemoveAutoInc { + return false, dbterror.ErrCantDropColWithAutoInc + } + return true, nil } -func checkIndexInModifiableColumns(columns []*model.ColumnInfo, idxColumns []*model.IndexColumn) error { - for _, ic := range idxColumns { - col := model.FindColumnInfo(columns, ic.Name.L) - if col == nil { - return dbterror.ErrKeyColumnDoesNotExits.GenWithStack("column does not exist: %s", ic.Name) - } - - prefixLength := types.UnspecifiedLength - if types.IsTypePrefixable(col.FieldType.GetType()) && col.FieldType.GetFlen() > ic.Length { - // When the index column is changed, prefix length is only valid - // if the type is still prefixable and larger than old prefix length. - prefixLength = ic.Length - } - if err := checkIndexColumn(nil, col, prefixLength); err != nil { - return err +// checkDropColumnWithPartitionConstraint is used to check the partition constraint of the drop column. +func checkDropColumnWithPartitionConstraint(t table.Table, colName model.CIStr) error { + if t.Meta().Partition == nil { + return nil + } + pt, ok := t.(table.PartitionedTable) + if !ok { + // Should never happen! + return errors.Trace(dbterror.ErrDependentByPartitionFunctional.GenWithStackByArgs(colName.L)) + } + for _, name := range pt.GetPartitionColumnNames() { + if strings.EqualFold(name.L, colName.L) { + return errors.Trace(dbterror.ErrDependentByPartitionFunctional.GenWithStackByArgs(colName.L)) } } return nil } -func isClusteredPKColumn(col *table.Column, tblInfo *model.TableInfo) bool { - switch { - case tblInfo.PKIsHandle: - return mysql.HasPriKeyFlag(col.GetFlag()) - case tblInfo.IsCommonHandle: - pk := tables.FindPrimaryIndex(tblInfo) - for _, c := range pk.Columns { - if c.Name.L == col.Name.L { - return true - } +func checkVisibleColumnCnt(t table.Table, addCnt, dropCnt int) error { + tblInfo := t.Meta() + visibleColumCnt := 0 + for _, column := range tblInfo.Columns { + if !column.Hidden { + visibleColumCnt++ } - return false - default: - return false } + if visibleColumCnt+addCnt > dropCnt { + return nil + } + if len(tblInfo.Columns)-visibleColumCnt > 0 { + // There are only invisible columns. + return dbterror.ErrTableMustHaveColumns + } + return dbterror.ErrCantRemoveAllFields } -func checkAutoRandom(tableInfo *model.TableInfo, originCol *table.Column, specNewColumn *ast.ColumnDef) (uint64, error) { - var oldShardBits, oldRangeBits uint64 - if isClusteredPKColumn(originCol, tableInfo) { - oldShardBits = tableInfo.AutoRandomBits - oldRangeBits = tableInfo.AutoRandomRangeBits +// checkModifyCharsetAndCollation returns error when the charset or collation is not modifiable. +// needRewriteCollationData is used when trying to modify the collation of a column, it is true when the column is with +// index because index of a string column is collation-aware. +func checkModifyCharsetAndCollation(toCharset, toCollate, origCharset, origCollate string, needRewriteCollationData bool) error { + if !charset.ValidCharsetAndCollation(toCharset, toCollate) { + return dbterror.ErrUnknownCharacterSet.GenWithStack("Unknown character set: '%s', collation: '%s'", toCharset, toCollate) } - newShardBits, newRangeBits, err := extractAutoRandomBitsFromColDef(specNewColumn) - if err != nil { - return 0, errors.Trace(err) + + if needRewriteCollationData && collate.NewCollationEnabled() && !collate.CompatibleCollate(origCollate, toCollate) { + return dbterror.ErrUnsupportedModifyCollation.GenWithStackByArgs(origCollate, toCollate) } - switch { - case oldShardBits == newShardBits: - case oldShardBits < newShardBits: - addingAutoRandom := oldShardBits == 0 - if addingAutoRandom { - convFromAutoInc := mysql.HasAutoIncrementFlag(originCol.GetFlag()) && originCol.IsPKHandleColumn(tableInfo) - if !convFromAutoInc { - return 0, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomAlterChangeFromAutoInc) - } - } - if autoid.AutoRandomShardBitsMax < newShardBits { - errMsg := fmt.Sprintf(autoid.AutoRandomOverflowErrMsg, - autoid.AutoRandomShardBitsMax, newShardBits, specNewColumn.Name.Name.O) - return 0, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(errMsg) - } - // increasing auto_random shard bits is allowed. - case oldShardBits > newShardBits: - if newShardBits == 0 { - return 0, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomAlterErrMsg) - } - return 0, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomDecreaseBitErrMsg) + + if (origCharset == charset.CharsetUTF8 && toCharset == charset.CharsetUTF8MB4) || + (origCharset == charset.CharsetUTF8 && toCharset == charset.CharsetUTF8) || + (origCharset == charset.CharsetUTF8MB4 && toCharset == charset.CharsetUTF8MB4) || + (origCharset == charset.CharsetLatin1 && toCharset == charset.CharsetUTF8MB4) { + // TiDB only allow utf8/latin1 to be changed to utf8mb4, or changing the collation when the charset is utf8/utf8mb4/latin1. + return nil } - modifyingAutoRandCol := oldShardBits > 0 || newShardBits > 0 - if modifyingAutoRandCol { - // Disallow changing the column field type. - if originCol.GetType() != specNewColumn.Tp.GetType() { - return 0, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomModifyColTypeErrMsg) - } - if originCol.GetType() != mysql.TypeLonglong { - return 0, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(fmt.Sprintf(autoid.AutoRandomOnNonBigIntColumn, types.TypeStr(originCol.GetType()))) - } - // Disallow changing from auto_random to auto_increment column. - if containsColumnOption(specNewColumn, ast.ColumnOptionAutoIncrement) { - return 0, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomIncompatibleWithAutoIncErrMsg) - } - // Disallow specifying a default value on auto_random column. - if containsColumnOption(specNewColumn, ast.ColumnOptionDefaultValue) { - return 0, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomIncompatibleWithDefaultValueErrMsg) - } + if toCharset != origCharset { + msg := fmt.Sprintf("charset from %s to %s", origCharset, toCharset) + return dbterror.ErrUnsupportedModifyCharset.GenWithStackByArgs(msg) } - if rangeBitsIsChanged(oldRangeBits, newRangeBits) { - return 0, dbterror.ErrInvalidAutoRandom.FastGenByArgs(autoid.AutoRandomUnsupportedAlterRangeBits) + if toCollate != origCollate { + msg := fmt.Sprintf("change collate from %s to %s", origCollate, toCollate) + return dbterror.ErrUnsupportedModifyCharset.GenWithStackByArgs(msg) } - return newShardBits, nil + return nil } -func rangeBitsIsChanged(oldBits, newBits uint64) bool { - if oldBits == 0 { - oldBits = autoid.AutoRandomRangeBitsDefault +func (e *executor) getModifiableColumnJob(ctx context.Context, sctx sessionctx.Context, ident ast.Ident, originalColName model.CIStr, + spec *ast.AlterTableSpec) (*model.Job, error) { + is := e.infoCache.GetLatest() + schema, ok := is.SchemaByName(ident.Schema) + if !ok { + return nil, errors.Trace(infoschema.ErrDatabaseNotExists) } - if newBits == 0 { - newBits = autoid.AutoRandomRangeBitsDefault + t, err := is.TableByName(ctx, ident.Schema, ident.Name) + if err != nil { + return nil, errors.Trace(infoschema.ErrTableNotExists.GenWithStackByArgs(ident.Schema, ident.Name)) } - return oldBits != newBits + + return GetModifiableColumnJob(ctx, sctx, is, ident, originalColName, schema, t, spec) } // ChangeColumn renames an existing column and modifies the column's definition, @@ -6982,7 +3886,7 @@ func (e *executor) AlterTableDropStatistics(ctx sessionctx.Context, ident ast.Id // UpdateTableReplicaInfo updates the table flash replica infos. func (e *executor) UpdateTableReplicaInfo(ctx sessionctx.Context, physicalID int64, available bool) error { is := e.infoCache.GetLatest() - tb, ok := is.TableByID(physicalID) + tb, ok := is.TableByID(e.ctx, physicalID) if !ok { tb, _, _ = is.FindTableByPartitionID(physicalID) if tb == nil { @@ -7398,7 +4302,7 @@ func (e *executor) renameTable(ctx sessionctx.Context, oldIdent, newIdent ast.Id return nil } - if tbl, ok := is.TableByID(tableID); ok { + if tbl, ok := is.TableByID(e.ctx, tableID); ok { if tbl.Meta().TableCacheStatusType != model.TableCacheStatusDisable { return errors.Trace(dbterror.ErrOptOnCacheTable.GenWithStackByArgs("Rename Table")) } @@ -7446,7 +4350,7 @@ func (e *executor) renameTables(ctx sessionctx.Context, oldIdents, newIdents []a return err } - if t, ok := is.TableByID(tableID); ok { + if t, ok := is.TableByID(e.ctx, tableID); ok { if t.Meta().TableCacheStatusType != model.TableCacheStatusDisable { return errors.Trace(dbterror.ErrOptOnCacheTable.GenWithStackByArgs("Rename Tables")) } @@ -7638,7 +4542,6 @@ func (e *executor) CreatePrimaryKey(ctx sessionctx.Context, ti ast.Ident, indexN return err } - global := false if tblInfo.GetPartitionInfo() != nil { ck, err := checkPartitionKeysConstraint(tblInfo.GetPartitionInfo(), indexColumns, tblInfo) if err != nil { @@ -7649,7 +4552,9 @@ func (e *executor) CreatePrimaryKey(ctx sessionctx.Context, ti ast.Ident, indexN return dbterror.ErrUniqueKeyNeedAllFieldsInPf.GenWithStackByArgs("PRIMARY") } // index columns does not contain all partition columns, must set global - global = true + if indexOption == nil || !indexOption.Global { + return dbterror.ErrGlobalIndexNotExplicitlySet.GenWithStackByArgs("PRIMARY") + } } } @@ -7663,135 +4568,30 @@ func (e *executor) CreatePrimaryKey(ctx sessionctx.Context, ti ast.Ident, indexN unique := true sqlMode := ctx.GetSessionVars().SQLMode + // global is set to 'false' is just there to be backwards compatible, + // to avoid unmarshal issues, it is now part of indexOption. + global := false job := &model.Job{ SchemaID: schema.ID, TableID: t.Meta().ID, - SchemaName: schema.Name.L, - TableName: t.Meta().Name.L, - Type: model.ActionAddPrimaryKey, - BinlogInfo: &model.HistoryInfo{}, - ReorgMeta: nil, - Args: []any{unique, indexName, indexPartSpecifications, indexOption, sqlMode, nil, global}, - Priority: ctx.GetSessionVars().DDLReorgPriority, - CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, - SQLMode: ctx.GetSessionVars().SQLMode, - } - reorgMeta, err := newReorgMetaFromVariables(job, ctx) - if err != nil { - return err - } - job.ReorgMeta = reorgMeta - - err = e.DoDDLJob(ctx, job) - return errors.Trace(err) -} - -func precheckBuildHiddenColumnInfo( - indexPartSpecifications []*ast.IndexPartSpecification, - indexName model.CIStr, -) error { - for i, idxPart := range indexPartSpecifications { - if idxPart.Expr == nil { - continue - } - name := fmt.Sprintf("%s_%s_%d", expressionIndexPrefix, indexName, i) - if utf8.RuneCountInString(name) > mysql.MaxColumnNameLength { - // TODO: Refine the error message. - return dbterror.ErrTooLongIdent.GenWithStackByArgs("hidden column") - } - // TODO: Refine the error message. - if err := checkIllegalFn4Generated(indexName.L, typeIndex, idxPart.Expr); err != nil { - return errors.Trace(err) - } - } - return nil -} - -func buildHiddenColumnInfoWithCheck(ctx sessionctx.Context, indexPartSpecifications []*ast.IndexPartSpecification, indexName model.CIStr, tblInfo *model.TableInfo, existCols []*table.Column) ([]*model.ColumnInfo, error) { - if err := precheckBuildHiddenColumnInfo(indexPartSpecifications, indexName); err != nil { - return nil, err - } - return BuildHiddenColumnInfo(ctx, indexPartSpecifications, indexName, tblInfo, existCols) -} - -// BuildHiddenColumnInfo builds hidden column info. -func BuildHiddenColumnInfo(ctx sessionctx.Context, indexPartSpecifications []*ast.IndexPartSpecification, indexName model.CIStr, tblInfo *model.TableInfo, existCols []*table.Column) ([]*model.ColumnInfo, error) { - hiddenCols := make([]*model.ColumnInfo, 0, len(indexPartSpecifications)) - for i, idxPart := range indexPartSpecifications { - if idxPart.Expr == nil { - continue - } - idxPart.Column = &ast.ColumnName{Name: model.NewCIStr(fmt.Sprintf("%s_%s_%d", expressionIndexPrefix, indexName, i))} - // Check whether the hidden columns have existed. - col := table.FindCol(existCols, idxPart.Column.Name.L) - if col != nil { - // TODO: Use expression index related error. - return nil, infoschema.ErrColumnExists.GenWithStackByArgs(col.Name.String()) - } - idxPart.Length = types.UnspecifiedLength - // The index part is an expression, prepare a hidden column for it. - - var sb strings.Builder - restoreFlags := format.RestoreStringSingleQuotes | format.RestoreKeyWordLowercase | format.RestoreNameBackQuotes | - format.RestoreSpacesAroundBinaryOperation | format.RestoreWithoutSchemaName | format.RestoreWithoutTableName - restoreCtx := format.NewRestoreCtx(restoreFlags, &sb) - sb.Reset() - err := idxPart.Expr.Restore(restoreCtx) - if err != nil { - return nil, errors.Trace(err) - } - expr, err := expression.BuildSimpleExpr(ctx.GetExprCtx(), idxPart.Expr, - expression.WithTableInfo(ctx.GetSessionVars().CurrentDB, tblInfo), - expression.WithAllowCastArray(true), - ) - if err != nil { - // TODO: refine the error message. - return nil, err - } - if _, ok := expr.(*expression.Column); ok { - return nil, dbterror.ErrFunctionalIndexOnField - } - - colInfo := &model.ColumnInfo{ - Name: idxPart.Column.Name, - GeneratedExprString: sb.String(), - GeneratedStored: false, - Version: model.CurrLatestColumnInfoVersion, - Dependences: make(map[string]struct{}), - Hidden: true, - FieldType: *expr.GetType(ctx.GetExprCtx().GetEvalCtx()), - } - // Reset some flag, it may be caused by wrong type infer. But it's not easy to fix them all, so reset them here for safety. - colInfo.DelFlag(mysql.PriKeyFlag | mysql.UniqueKeyFlag | mysql.AutoIncrementFlag) - - if colInfo.GetType() == mysql.TypeDatetime || colInfo.GetType() == mysql.TypeDate || colInfo.GetType() == mysql.TypeTimestamp || colInfo.GetType() == mysql.TypeDuration { - if colInfo.FieldType.GetDecimal() == types.UnspecifiedLength { - colInfo.FieldType.SetDecimal(types.MaxFsp) - } - } - // For an array, the collation is set to "binary". The collation has no effect on the array itself (as it's usually - // regarded as a JSON), but will influence how TiKV handles the index value. - if colInfo.FieldType.IsArray() { - colInfo.SetCharset("binary") - colInfo.SetCollate("binary") - } - checkDependencies := make(map[string]struct{}) - for _, colName := range FindColumnNamesInExpr(idxPart.Expr) { - colInfo.Dependences[colName.Name.L] = struct{}{} - checkDependencies[colName.Name.L] = struct{}{} - } - if err = checkDependedColExist(checkDependencies, existCols); err != nil { - return nil, errors.Trace(err) - } - if !ctx.GetSessionVars().EnableAutoIncrementInGenerated { - if err = checkExpressionIndexAutoIncrement(indexName.O, colInfo.Dependences, tblInfo); err != nil { - return nil, errors.Trace(err) - } - } - idxPart.Expr = nil - hiddenCols = append(hiddenCols, colInfo) + SchemaName: schema.Name.L, + TableName: t.Meta().Name.L, + Type: model.ActionAddPrimaryKey, + BinlogInfo: &model.HistoryInfo{}, + ReorgMeta: nil, + Args: []any{unique, indexName, indexPartSpecifications, indexOption, sqlMode, nil, global}, + Priority: ctx.GetSessionVars().DDLReorgPriority, + CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, + SQLMode: ctx.GetSessionVars().SQLMode, + } + reorgMeta, err := newReorgMetaFromVariables(job, ctx) + if err != nil { + return err } - return hiddenCols, nil + job.ReorgMeta = reorgMeta + + err = e.DoDDLJob(ctx, job) + return errors.Trace(err) } func (e *executor) CreateIndex(ctx sessionctx.Context, stmt *ast.CreateIndexStmt) error { @@ -7891,7 +4691,19 @@ func (e *executor) createIndex(ctx sessionctx.Context, ti ast.Ident, keyType ast return errors.Trace(err) } - global := false + globalIndex := false + if indexOption != nil && indexOption.Global { + globalIndex = true + } + if globalIndex { + if tblInfo.GetPartitionInfo() == nil { + return dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs("Global Index on non-partitioned table") + } + if !unique { + // TODO: remove this limitation + return dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs("Global IndexOption on non-unique index") + } + } if unique && tblInfo.GetPartitionInfo() != nil { ck, err := checkPartitionKeysConstraint(tblInfo.GetPartitionInfo(), indexColumns, tblInfo) if err != nil { @@ -7902,7 +4714,12 @@ func (e *executor) createIndex(ctx sessionctx.Context, ti ast.Ident, keyType ast return dbterror.ErrUniqueKeyNeedAllFieldsInPf.GenWithStackByArgs("UNIQUE INDEX") } // index columns does not contain all partition columns, must set global - global = true + if !globalIndex { + return dbterror.ErrGlobalIndexNotExplicitlySet.GenWithStackByArgs(indexName.O) + } + } else if globalIndex { + // TODO: remove this restriction + return dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs("Global IndexOption on index including all columns in the partitioning expression") } } // May be truncate comment here, when index comment too long and sql_mode is't strict. @@ -7914,7 +4731,7 @@ func (e *executor) createIndex(ctx sessionctx.Context, ti ast.Ident, keyType ast } if indexOption != nil && indexOption.Tp == model.IndexTypeHypo { // for hypo-index - indexInfo, err := BuildIndexInfo(ctx, tblInfo.Columns, indexName, false, unique, global, + indexInfo, err := BuildIndexInfo(ctx, tblInfo.Columns, indexName, false, unique, indexPartSpecifications, indexOption, model.StatePublic) if err != nil { return err @@ -7923,6 +4740,9 @@ func (e *executor) createIndex(ctx sessionctx.Context, ti ast.Ident, keyType ast } chs, coll := ctx.GetSessionVars().GetCharsetInfo() + // global is set to 'false' is just there to be backwards compatible, + // to avoid unmarshal issues, it is now part of indexOption. + global := false job := &model.Job{ SchemaID: schema.ID, TableID: t.Meta().ID, @@ -7958,6 +4778,12 @@ func newReorgMetaFromVariables(job *model.Job, sctx sessionctx.Context) (*model. reorgMeta.IsDistReorg = variable.EnableDistTask.Load() reorgMeta.IsFastReorg = variable.EnableFastReorg.Load() reorgMeta.TargetScope = variable.ServiceScope.Load() + if sv, ok := sctx.GetSessionVars().GetSystemVar(variable.TiDBDDLReorgWorkerCount); ok { + reorgMeta.Concurrency = variable.TidbOptInt(sv, 0) + } + if sv, ok := sctx.GetSessionVars().GetSystemVar(variable.TiDBDDLReorgBatchSize); ok { + reorgMeta.BatchSize = variable.TidbOptInt(sv, 0) + } if reorgMeta.IsDistReorg && !reorgMeta.IsFastReorg { return nil, dbterror.ErrUnsupportedDistTask @@ -7973,6 +4799,17 @@ func newReorgMetaFromVariables(job *model.Job, sctx sessionctx.Context) (*model. LastReorgMetaFastReorgDisabled = true }) } + + logutil.DDLLogger().Info("initialize reorg meta", + zap.String("jobSchema", job.SchemaName), + zap.String("jobTable", job.TableName), + zap.Stringer("jobType", job.Type), + zap.Bool("enableDistTask", reorgMeta.IsDistReorg), + zap.Bool("enableFastReorg", reorgMeta.IsFastReorg), + zap.String("targetScope", reorgMeta.TargetScope), + zap.Int("concurrency", reorgMeta.Concurrency), + zap.Int("batchSize", reorgMeta.BatchSize), + ) return reorgMeta, nil } @@ -8294,30 +5131,6 @@ func CheckIsDropPrimaryKey(indexName model.CIStr, indexInfo *model.IndexInfo, t return isPK, nil } -func isDroppableColumn(tblInfo *model.TableInfo, colName model.CIStr) error { - if ok, dep, isHidden := hasDependentByGeneratedColumn(tblInfo, colName); ok { - if isHidden { - return dbterror.ErrDependentByFunctionalIndex.GenWithStackByArgs(dep) - } - return dbterror.ErrDependentByGeneratedColumn.GenWithStackByArgs(dep) - } - - if len(tblInfo.Columns) == 1 { - return dbterror.ErrCantRemoveAllFields.GenWithStack("can't drop only column %s in table %s", - colName, tblInfo.Name) - } - // We only support dropping column with single-value none Primary Key index covered now. - err := isColumnCanDropWithIndex(colName.L, tblInfo.Indices) - if err != nil { - return err - } - err = IsColumnDroppableWithCheckConstraint(colName, tblInfo) - if err != nil { - return err - } - return nil -} - // validateCommentLength checks comment length of table, column, or index // If comment length is more than the standard length truncate it // and store the comment length upto the standard comment length size. @@ -8433,66 +5246,6 @@ func buildAddedPartitionDefs(ctx expression.BuildContext, meta *model.TableInfo, return GeneratePartDefsFromInterval(ctx, spec.Tp, meta, spec.Partition) } -func checkAndGetColumnsTypeAndValuesMatch(ctx expression.BuildContext, colTypes []types.FieldType, exprs []ast.ExprNode) ([]types.Datum, error) { - // Validate() has already checked len(colNames) = len(exprs) - // create table ... partition by range columns (cols) - // partition p0 values less than (expr) - // check the type of cols[i] and expr is consistent. - valDatums := make([]types.Datum, 0, len(colTypes)) - for i, colExpr := range exprs { - if _, ok := colExpr.(*ast.MaxValueExpr); ok { - valDatums = append(valDatums, types.NewStringDatum(partitionMaxValue)) - continue - } - if d, ok := colExpr.(*ast.DefaultExpr); ok { - if d.Name != nil { - return nil, dbterror.ErrWrongTypeColumnValue.GenWithStackByArgs() - } - continue - } - colType := colTypes[i] - val, err := expression.EvalSimpleAst(ctx, colExpr) - if err != nil { - return nil, err - } - // Check val.ConvertTo(colType) doesn't work, so we need this case by case check. - vkind := val.Kind() - switch colType.GetType() { - case mysql.TypeDate, mysql.TypeDatetime, mysql.TypeDuration: - switch vkind { - case types.KindString, types.KindBytes, types.KindNull: - default: - return nil, dbterror.ErrWrongTypeColumnValue.GenWithStackByArgs() - } - case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong: - switch vkind { - case types.KindInt64, types.KindUint64, types.KindNull: - default: - return nil, dbterror.ErrWrongTypeColumnValue.GenWithStackByArgs() - } - case mysql.TypeFloat, mysql.TypeDouble: - switch vkind { - case types.KindFloat32, types.KindFloat64, types.KindNull: - default: - return nil, dbterror.ErrWrongTypeColumnValue.GenWithStackByArgs() - } - case mysql.TypeString, mysql.TypeVarString: - switch vkind { - case types.KindString, types.KindBytes, types.KindNull, types.KindBinaryLiteral: - default: - return nil, dbterror.ErrWrongTypeColumnValue.GenWithStackByArgs() - } - } - evalCtx := ctx.GetEvalCtx() - newVal, err := val.ConvertTo(evalCtx.TypeCtx(), &colType) - if err != nil { - return nil, dbterror.ErrWrongTypeColumnValue.GenWithStackByArgs() - } - valDatums = append(valDatums, newVal) - } - return valDatums, nil -} - // LockTables uses to execute lock tables statement. func (e *executor) LockTables(ctx sessionctx.Context, stmt *ast.LockTablesStmt) error { lockTables := make([]model.TableLockTpInfo, 0, len(stmt.TableLocks)) @@ -8578,7 +5331,7 @@ func (e *executor) UnlockTables(ctx sessionctx.Context, unlockTables []model.Tab if !ok { continue } - tbl, ok := is.TableByID(t.TableID) + tbl, ok := is.TableByID(e.ctx, t.TableID) if !ok { continue } @@ -8605,32 +5358,6 @@ func (e *executor) UnlockTables(ctx sessionctx.Context, unlockTables []model.Tab return errors.Trace(err) } -// CleanDeadTableLock uses to clean dead table locks. -func (d *ddl) CleanDeadTableLock(unlockTables []model.TableLockTpInfo, se model.SessionInfo) error { - if len(unlockTables) == 0 { - return nil - } - arg := &LockTablesArg{ - UnlockTables: unlockTables, - SessionInfo: se, - } - job := &model.Job{ - SchemaID: unlockTables[0].SchemaID, - TableID: unlockTables[0].TableID, - Type: model.ActionUnlockTable, - BinlogInfo: &model.HistoryInfo{}, - Args: []any{arg}, - } - - ctx, err := d.sessPool.Get() - if err != nil { - return err - } - defer d.sessPool.Put(ctx) - err = d.executor.DoDDLJob(ctx, job) - return errors.Trace(err) -} - func throwErrIfInMemOrSysDB(ctx sessionctx.Context, dbLowerName string) error { if util.IsMemOrSysDB(dbLowerName) { if ctx.GetSessionVars().User != nil { @@ -9066,125 +5793,6 @@ func (e *executor) AlterTablePartitionPlacement(ctx sessionctx.Context, tableIde return errors.Trace(err) } -func buildPolicyInfo(name model.CIStr, options []*ast.PlacementOption) (*model.PolicyInfo, error) { - policyInfo := &model.PolicyInfo{PlacementSettings: &model.PlacementSettings{}} - policyInfo.Name = name - for _, opt := range options { - err := SetDirectPlacementOpt(policyInfo.PlacementSettings, opt.Tp, opt.StrValue, opt.UintValue) - if err != nil { - return nil, err - } - } - return policyInfo, nil -} - -func removeTablePlacement(tbInfo *model.TableInfo) bool { - hasPlacementSettings := false - if tbInfo.PlacementPolicyRef != nil { - tbInfo.PlacementPolicyRef = nil - hasPlacementSettings = true - } - - if removePartitionPlacement(tbInfo.Partition) { - hasPlacementSettings = true - } - - return hasPlacementSettings -} - -func removePartitionPlacement(partInfo *model.PartitionInfo) bool { - if partInfo == nil { - return false - } - - hasPlacementSettings := false - for i := range partInfo.Definitions { - def := &partInfo.Definitions[i] - if def.PlacementPolicyRef != nil { - def.PlacementPolicyRef = nil - hasPlacementSettings = true - } - } - return hasPlacementSettings -} - -func handleDatabasePlacement(ctx sessionctx.Context, dbInfo *model.DBInfo) error { - if dbInfo.PlacementPolicyRef == nil { - return nil - } - - sessVars := ctx.GetSessionVars() - if sessVars.PlacementMode == variable.PlacementModeIgnore { - dbInfo.PlacementPolicyRef = nil - sessVars.StmtCtx.AppendNote( - errors.NewNoStackErrorf("Placement is ignored when TIDB_PLACEMENT_MODE is '%s'", variable.PlacementModeIgnore), - ) - return nil - } - - var err error - dbInfo.PlacementPolicyRef, err = checkAndNormalizePlacementPolicy(ctx, dbInfo.PlacementPolicyRef) - return err -} - -func handleTablePlacement(ctx sessionctx.Context, tbInfo *model.TableInfo) error { - sessVars := ctx.GetSessionVars() - if sessVars.PlacementMode == variable.PlacementModeIgnore && removeTablePlacement(tbInfo) { - sessVars.StmtCtx.AppendNote( - errors.NewNoStackErrorf("Placement is ignored when TIDB_PLACEMENT_MODE is '%s'", variable.PlacementModeIgnore), - ) - return nil - } - - var err error - tbInfo.PlacementPolicyRef, err = checkAndNormalizePlacementPolicy(ctx, tbInfo.PlacementPolicyRef) - if err != nil { - return err - } - - if tbInfo.Partition != nil { - for i := range tbInfo.Partition.Definitions { - partition := &tbInfo.Partition.Definitions[i] - partition.PlacementPolicyRef, err = checkAndNormalizePlacementPolicy(ctx, partition.PlacementPolicyRef) - if err != nil { - return err - } - } - } - return nil -} - -func handlePartitionPlacement(ctx sessionctx.Context, partInfo *model.PartitionInfo) error { - sessVars := ctx.GetSessionVars() - if sessVars.PlacementMode == variable.PlacementModeIgnore && removePartitionPlacement(partInfo) { - sessVars.StmtCtx.AppendNote( - errors.NewNoStackErrorf("Placement is ignored when TIDB_PLACEMENT_MODE is '%s'", variable.PlacementModeIgnore), - ) - return nil - } - - var err error - for i := range partInfo.Definitions { - partition := &partInfo.Definitions[i] - partition.PlacementPolicyRef, err = checkAndNormalizePlacementPolicy(ctx, partition.PlacementPolicyRef) - if err != nil { - return err - } - } - return nil -} - -func checkIgnorePlacementDDL(ctx sessionctx.Context) bool { - sessVars := ctx.GetSessionVars() - if sessVars.PlacementMode == variable.PlacementModeIgnore { - sessVars.StmtCtx.AppendNote( - errors.NewNoStackErrorf("Placement is ignored when TIDB_PLACEMENT_MODE is '%s'", variable.PlacementModeIgnore), - ) - return true - } - return false -} - // AddResourceGroup implements the DDL interface, creates a resource group. func (e *executor) AddResourceGroup(ctx sessionctx.Context, stmt *ast.CreateResourceGroupStmt) (err error) { groupName := stmt.ResourceGroupName @@ -9203,7 +5811,7 @@ func (e *executor) AddResourceGroup(ctx sessionctx.Context, stmt *ast.CreateReso return infoschema.ErrResourceGroupExists.GenWithStackByArgs(groupName) } - if err := e.checkResourceGroupValidation(groupInfo); err != nil { + if err := checkResourceGroupValidation(groupInfo); err != nil { return err } @@ -9229,11 +5837,6 @@ func (e *executor) AddResourceGroup(ctx sessionctx.Context, stmt *ast.CreateReso return err } -func (*executor) checkResourceGroupValidation(groupInfo *model.ResourceGroupInfo) error { - _, err := resourcegroup.NewGroupFromOptions(groupInfo.Name.L, groupInfo.ResourceGroupSettings) - return err -} - // DropResourceGroup implements the DDL interface. func (e *executor) DropResourceGroup(ctx sessionctx.Context, stmt *ast.DropResourceGroupStmt) (err error) { groupName := stmt.ResourceGroupName @@ -9279,21 +5882,6 @@ func (e *executor) DropResourceGroup(ctx sessionctx.Context, stmt *ast.DropResou return err } -func buildResourceGroup(oldGroup *model.ResourceGroupInfo, options []*ast.ResourceGroupOption) (*model.ResourceGroupInfo, error) { - groupInfo := &model.ResourceGroupInfo{Name: oldGroup.Name, ID: oldGroup.ID, ResourceGroupSettings: model.NewResourceGroupSettings()} - if oldGroup.ResourceGroupSettings != nil { - *groupInfo.ResourceGroupSettings = *oldGroup.ResourceGroupSettings - } - for _, opt := range options { - err := SetDirectResourceGroupSettings(groupInfo, opt) - if err != nil { - return nil, err - } - } - groupInfo.ResourceGroupSettings.Adjust() - return groupInfo, nil -} - // AlterResourceGroup implements the DDL interface. func (e *executor) AlterResourceGroup(ctx sessionctx.Context, stmt *ast.AlterResourceGroupStmt) (err error) { groupName := stmt.ResourceGroupName @@ -9313,7 +5901,7 @@ func (e *executor) AlterResourceGroup(ctx sessionctx.Context, stmt *ast.AlterRes return errors.Trace(err) } - if err := e.checkResourceGroupValidation(newGroupInfo); err != nil { + if err := checkResourceGroupValidation(newGroupInfo); err != nil { return err } @@ -9554,26 +6142,6 @@ func (e *executor) AlterTableNoCache(ctx sessionctx.Context, ti ast.Ident) (err return e.DoDDLJob(ctx, job) } -// checkTooBigFieldLengthAndTryAutoConvert will check whether the field length is too big -// in non-strict mode and varchar column. If it is, will try to adjust to blob or text, see issue #30328 -func checkTooBigFieldLengthAndTryAutoConvert(tp *types.FieldType, colName string, sessVars *variable.SessionVars) error { - if sessVars != nil && !sessVars.SQLMode.HasStrictMode() && tp.GetType() == mysql.TypeVarchar { - err := types.IsVarcharTooBigFieldLength(tp.GetFlen(), colName, tp.GetCharset()) - if err != nil && terror.ErrorEqual(types.ErrTooBigFieldLength, err) { - tp.SetType(mysql.TypeBlob) - if err = adjustBlobTypesFlen(tp, tp.GetCharset()); err != nil { - return err - } - if tp.GetCharset() == charset.CharsetBin { - sessVars.StmtCtx.AppendWarning(dbterror.ErrAutoConvert.FastGenByArgs(colName, "VARBINARY", "BLOB")) - } else { - sessVars.StmtCtx.AppendWarning(dbterror.ErrAutoConvert.FastGenByArgs(colName, "VARCHAR", "TEXT")) - } - } - } - return nil -} - func (e *executor) CreateCheckConstraint(ctx sessionctx.Context, ti ast.Ident, constrName model.CIStr, constr *ast.Constraint) error { schema, t, err := e.getSchemaAndTableByIdent(ti) if err != nil { @@ -9713,6 +6281,291 @@ func (e *executor) AlterCheckConstraint(ctx sessionctx.Context, ti ast.Ident, co return errors.Trace(err) } +func (e *executor) genGlobalIDs(count int) ([]int64, error) { + var ret []int64 + ctx := kv.WithInternalSourceType(context.Background(), kv.InternalTxnDDL) + // lock to reduce conflict + e.globalIDLock.Lock() + defer e.globalIDLock.Unlock() + err := kv.RunInNewTxn(ctx, e.store, true, func(_ context.Context, txn kv.Transaction) error { + m := meta.NewMeta(txn) + var err error + ret, err = m.GenGlobalIDs(count) + return err + }) + + return ret, err +} + +func (e *executor) genPlacementPolicyID() (int64, error) { + var ret int64 + ctx := kv.WithInternalSourceType(context.Background(), kv.InternalTxnDDL) + err := kv.RunInNewTxn(ctx, e.store, true, func(_ context.Context, txn kv.Transaction) error { + m := meta.NewMeta(txn) + var err error + ret, err = m.GenPlacementPolicyID() + return err + }) + + return ret, err +} + +// DoDDLJob will return +// - nil: found in history DDL job and no job error +// - context.Cancel: job has been sent to worker, but not found in history DDL job before cancel +// - other: found in history DDL job and return that job error +func (e *executor) DoDDLJob(ctx sessionctx.Context, job *model.Job) error { + return e.DoDDLJobWrapper(ctx, NewJobWrapper(job, false)) +} + +// DoDDLJobWrapper submit DDL job and wait it finishes. +// When fast create is enabled, we might merge multiple jobs into one, so do not +// depend on job.ID, use JobID from jobSubmitResult. +func (e *executor) DoDDLJobWrapper(ctx sessionctx.Context, jobW *JobWrapper) error { + job := jobW.Job + job.TraceInfo = &model.TraceInfo{ + ConnectionID: ctx.GetSessionVars().ConnectionID, + SessionAlias: ctx.GetSessionVars().SessionAlias, + } + if mci := ctx.GetSessionVars().StmtCtx.MultiSchemaInfo; mci != nil { + // In multiple schema change, we don't run the job. + // Instead, we merge all the jobs into one pending job. + return appendToSubJobs(mci, job) + } + // Get a global job ID and put the DDL job in the queue. + setDDLJobQuery(ctx, job) + e.deliverJobTask(jobW) + + failpoint.Inject("mockParallelSameDDLJobTwice", func(val failpoint.Value) { + if val.(bool) { + <-jobW.ResultCh[0] + // The same job will be put to the DDL queue twice. + job = job.Clone() + newJobW := NewJobWrapper(job, jobW.IDAllocated) + e.deliverJobTask(newJobW) + // The second job result is used for test. + jobW = newJobW + } + }) + + // worker should restart to continue handling tasks in limitJobCh, and send back through jobW.err + result := <-jobW.ResultCh[0] + // job.ID must be allocated after previous channel receive returns nil. + jobID, err := result.jobID, result.err + defer e.delJobDoneCh(jobID) + if err != nil { + // The transaction of enqueuing job is failed. + return errors.Trace(err) + } + failpoint.InjectCall("waitJobSubmitted") + + sessVars := ctx.GetSessionVars() + sessVars.StmtCtx.IsDDLJobInQueue = true + + ddlAction := job.Type + // Notice worker that we push a new job and wait the job done. + e.notifyNewJobSubmitted(e.ddlJobNotifyCh, addingDDLJobNotifyKey, jobID, ddlAction.String()) + if result.merged { + logutil.DDLLogger().Info("DDL job submitted", zap.Int64("job_id", jobID), zap.String("query", job.Query), zap.String("merged", "true")) + } else { + logutil.DDLLogger().Info("DDL job submitted", zap.Stringer("job", job), zap.String("query", job.Query)) + } + + var historyJob *model.Job + + // Attach the context of the jobId to the calling session so that + // KILL can cancel this DDL job. + ctx.GetSessionVars().StmtCtx.DDLJobID = jobID + + // For a job from start to end, the state of it will be none -> delete only -> write only -> reorganization -> public + // For every state changes, we will wait as lease 2 * lease time, so here the ticker check is 10 * lease. + // But we use etcd to speed up, normally it takes less than 0.5s now, so we use 0.5s or 1s or 3s as the max value. + initInterval, _ := getJobCheckInterval(ddlAction, 0) + ticker := time.NewTicker(chooseLeaseTime(10*e.lease, initInterval)) + startTime := time.Now() + metrics.JobsGauge.WithLabelValues(ddlAction.String()).Inc() + defer func() { + ticker.Stop() + metrics.JobsGauge.WithLabelValues(ddlAction.String()).Dec() + metrics.HandleJobHistogram.WithLabelValues(ddlAction.String(), metrics.RetLabel(err)).Observe(time.Since(startTime).Seconds()) + recordLastDDLInfo(ctx, historyJob) + }() + i := 0 + notifyCh, _ := e.getJobDoneCh(jobID) + for { + failpoint.InjectCall("storeCloseInLoop") + select { + case _, ok := <-notifyCh: + if !ok { + // when fast create enabled, jobs might be merged, and we broadcast + // the result by closing the channel, to avoid this loop keeps running + // without sleeping on retryable error, we set it to nil. + notifyCh = nil + } + case <-ticker.C: + i++ + ticker = updateTickerInterval(ticker, 10*e.lease, ddlAction, i) + case <-e.ctx.Done(): + logutil.DDLLogger().Info("DoDDLJob will quit because context done") + return context.Canceled + } + + // If the connection being killed, we need to CANCEL the DDL job. + if sessVars.SQLKiller.HandleSignal() == exeerrors.ErrQueryInterrupted { + if atomic.LoadInt32(&sessVars.ConnectionStatus) == variable.ConnStatusShutdown { + logutil.DDLLogger().Info("DoDDLJob will quit because context done") + return context.Canceled + } + if sessVars.StmtCtx.DDLJobID != 0 { + se, err := e.sessPool.Get() + if err != nil { + logutil.DDLLogger().Error("get session failed, check again", zap.Error(err)) + continue + } + sessVars.StmtCtx.DDLJobID = 0 // Avoid repeat. + errs, err := CancelJobsBySystem(se, []int64{jobID}) + e.sessPool.Put(se) + if len(errs) > 0 { + logutil.DDLLogger().Warn("error canceling DDL job", zap.Error(errs[0])) + } + if err != nil { + logutil.DDLLogger().Warn("Kill command could not cancel DDL job", zap.Error(err)) + continue + } + } + } + + se, err := e.sessPool.Get() + if err != nil { + logutil.DDLLogger().Error("get session failed, check again", zap.Error(err)) + continue + } + historyJob, err = GetHistoryJobByID(se, jobID) + e.sessPool.Put(se) + if err != nil { + logutil.DDLLogger().Error("get history DDL job failed, check again", zap.Error(err)) + continue + } + if historyJob == nil { + logutil.DDLLogger().Debug("DDL job is not in history, maybe not run", zap.Int64("jobID", jobID)) + continue + } + + e.checkHistoryJobInTest(ctx, historyJob) + + // If a job is a history job, the state must be JobStateSynced or JobStateRollbackDone or JobStateCancelled. + if historyJob.IsSynced() { + // Judge whether there are some warnings when executing DDL under the certain SQL mode. + if historyJob.ReorgMeta != nil && len(historyJob.ReorgMeta.Warnings) != 0 { + if len(historyJob.ReorgMeta.Warnings) != len(historyJob.ReorgMeta.WarningsCount) { + logutil.DDLLogger().Info("DDL warnings doesn't match the warnings count", zap.Int64("jobID", jobID)) + } else { + for key, warning := range historyJob.ReorgMeta.Warnings { + keyCount := historyJob.ReorgMeta.WarningsCount[key] + if keyCount == 1 { + ctx.GetSessionVars().StmtCtx.AppendWarning(warning) + } else { + newMsg := fmt.Sprintf("%d warnings with this error code, first warning: "+warning.GetMsg(), keyCount) + newWarning := dbterror.ClassTypes.Synthesize(terror.ErrCode(warning.Code()), newMsg) + ctx.GetSessionVars().StmtCtx.AppendWarning(newWarning) + } + } + } + } + appendMultiChangeWarningsToOwnerCtx(ctx, historyJob) + + logutil.DDLLogger().Info("DDL job is finished", zap.Int64("jobID", jobID)) + return nil + } + + if historyJob.Error != nil { + logutil.DDLLogger().Info("DDL job is failed", zap.Int64("jobID", jobID)) + return errors.Trace(historyJob.Error) + } + panic("When the state is JobStateRollbackDone or JobStateCancelled, historyJob.Error should never be nil") + } +} + +func (e *executor) getJobDoneCh(jobID int64) (chan struct{}, bool) { + return e.ddlJobDoneChMap.Load(jobID) +} + +func (e *executor) delJobDoneCh(jobID int64) { + e.ddlJobDoneChMap.Delete(jobID) +} + +func (e *executor) deliverJobTask(task *JobWrapper) { + // TODO this might block forever, as the consumer part considers context cancel. + e.limitJobCh <- task +} + +func updateTickerInterval(ticker *time.Ticker, lease time.Duration, action model.ActionType, i int) *time.Ticker { + interval, changed := getJobCheckInterval(action, i) + if !changed { + return ticker + } + // For now we should stop old ticker and create a new ticker + ticker.Stop() + return time.NewTicker(chooseLeaseTime(lease, interval)) +} + +func recordLastDDLInfo(ctx sessionctx.Context, job *model.Job) { + if job == nil { + return + } + ctx.GetSessionVars().LastDDLInfo.Query = job.Query + ctx.GetSessionVars().LastDDLInfo.SeqNum = job.SeqNum +} + +func setDDLJobQuery(ctx sessionctx.Context, job *model.Job) { + switch job.Type { + case model.ActionUpdateTiFlashReplicaStatus, model.ActionUnlockTable: + job.Query = "" + default: + job.Query, _ = ctx.Value(sessionctx.QueryString).(string) + } +} + +var ( + fastDDLIntervalPolicy = []time.Duration{ + 500 * time.Millisecond, + } + normalDDLIntervalPolicy = []time.Duration{ + 500 * time.Millisecond, + 500 * time.Millisecond, + 1 * time.Second, + } + slowDDLIntervalPolicy = []time.Duration{ + 500 * time.Millisecond, + 500 * time.Millisecond, + 1 * time.Second, + 1 * time.Second, + 3 * time.Second, + } +) + +func getIntervalFromPolicy(policy []time.Duration, i int) (time.Duration, bool) { + plen := len(policy) + if i < plen { + return policy[i], true + } + return policy[plen-1], false +} + +func getJobCheckInterval(action model.ActionType, i int) (time.Duration, bool) { + switch action { + case model.ActionAddIndex, model.ActionAddPrimaryKey, model.ActionModifyColumn, + model.ActionReorganizePartition, + model.ActionRemovePartitioning, + model.ActionAlterTablePartitioning: + return getIntervalFromPolicy(slowDDLIntervalPolicy, i) + case model.ActionCreateTable, model.ActionCreateSchema: + return getIntervalFromPolicy(fastDDLIntervalPolicy, i) + default: + return getIntervalFromPolicy(normalDDLIntervalPolicy, i) + } +} + // NewDDLReorgMeta create a DDL ReorgMeta. func NewDDLReorgMeta(ctx sessionctx.Context) *model.DDLReorgMeta { tzName, tzOffset := ddlutil.GetTimeZone(ctx) diff --git a/pkg/ddl/executor_nokit_test.go b/pkg/ddl/executor_nokit_test.go new file mode 100644 index 0000000000000..e683e286f0665 --- /dev/null +++ b/pkg/ddl/executor_nokit_test.go @@ -0,0 +1,195 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package ddl + +import ( + "fmt" + "slices" + "testing" + + "github.com/pingcap/tidb/pkg/parser/model" + "github.com/stretchr/testify/require" +) + +func TestBuildQueryStringFromJobs(t *testing.T) { + testCases := []struct { + name string + jobs []*JobWrapper + expected string + }{ + { + name: "Empty jobs", + jobs: []*JobWrapper{}, + expected: "", + }, + { + name: "Single create table job", + jobs: []*JobWrapper{{Job: &model.Job{Query: "CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(255));"}}}, + expected: "CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(255));", + }, + { + name: "Multiple create table jobs with trailing semicolons", + jobs: []*JobWrapper{ + {Job: &model.Job{Query: "CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(255));"}}, + {Job: &model.Job{Query: "CREATE TABLE products (id INT PRIMARY KEY, description TEXT);"}}, + }, + expected: "CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(255)); CREATE TABLE products (id INT PRIMARY KEY, description TEXT);", + }, + { + name: "Multiple create table jobs with and without trailing semicolons", + jobs: []*JobWrapper{ + {Job: &model.Job{Query: "CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(255))"}}, + {Job: &model.Job{Query: "CREATE TABLE products (id INT PRIMARY KEY, description TEXT);"}}, + {Job: &model.Job{Query: " CREATE TABLE orders (id INT PRIMARY KEY, user_id INT, product_id INT) "}}, + }, + expected: "CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(255)); CREATE TABLE products (id INT PRIMARY KEY, description TEXT); CREATE TABLE orders (id INT PRIMARY KEY, user_id INT, product_id INT);", + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + actual := buildQueryStringFromJobs(tc.jobs) + require.Equal(t, tc.expected, actual, "Query strings do not match") + }) + } +} + +func TestMergeCreateTableJobsOfSameSchema(t *testing.T) { + job1 := NewJobWrapper(&model.Job{ + SchemaID: 1, + Type: model.ActionCreateTable, + BinlogInfo: &model.HistoryInfo{}, + Args: []any{&model.TableInfo{Name: model.CIStr{O: "t1", L: "t1"}}, false}, + Query: "create table db1.t1 (c1 int, c2 int)", + }, false) + job2 := NewJobWrapper(&model.Job{ + SchemaID: 1, + Type: model.ActionCreateTable, + BinlogInfo: &model.HistoryInfo{}, + Args: []any{&model.TableInfo{Name: model.CIStr{O: "t2", L: "t2"}}, &model.TableInfo{}}, + Query: "create table db1.t2 (c1 int, c2 int);", + }, false) + job, err := mergeCreateTableJobsOfSameSchema([]*JobWrapper{job1, job2}) + require.NoError(t, err) + require.Equal(t, "create table db1.t1 (c1 int, c2 int); create table db1.t2 (c1 int, c2 int);", job.Query) +} + +func TestMergeCreateTableJobs(t *testing.T) { + t.Run("0 or 1 job", func(t *testing.T) { + newWs, err := mergeCreateTableJobs([]*JobWrapper{}) + require.NoError(t, err) + require.Empty(t, newWs) + jobWs := []*JobWrapper{{Job: &model.Job{}}} + newWs, err = mergeCreateTableJobs(jobWs) + require.NoError(t, err) + require.EqualValues(t, jobWs, newWs) + }) + + t.Run("non create table are not merged", func(t *testing.T) { + jobWs := []*JobWrapper{ + {Job: &model.Job{SchemaName: "db", Type: model.ActionCreateTable, + Args: []any{&model.TableInfo{Name: model.NewCIStr("t1")}, false}}}, + {Job: &model.Job{SchemaName: "db", Type: model.ActionAddColumn}}, + {Job: &model.Job{SchemaName: "db", Type: model.ActionCreateTable, + Args: []any{&model.TableInfo{Name: model.NewCIStr("t2")}, false}}}, + } + newWs, err := mergeCreateTableJobs(jobWs) + require.NoError(t, err) + require.Len(t, newWs, 2) + require.Equal(t, model.ActionAddColumn, newWs[0].Type) + require.Equal(t, model.ActionCreateTables, newWs[1].Type) + }) + + t.Run("jobs of pre allocated ids are not merged", func(t *testing.T) { + jobWs := []*JobWrapper{ + {Job: &model.Job{SchemaName: "db", Type: model.ActionCreateTable, + Args: []any{&model.TableInfo{Name: model.NewCIStr("t1")}, false}}, IDAllocated: true}, + {Job: &model.Job{SchemaName: "db", Type: model.ActionCreateTable, + Args: []any{&model.TableInfo{Name: model.NewCIStr("t2")}, false}}}, + } + newWs, err := mergeCreateTableJobs(jobWs) + require.NoError(t, err) + require.EqualValues(t, jobWs, newWs) + }) + + t.Run("jobs of foreign keys are not merged", func(t *testing.T) { + jobWs := []*JobWrapper{ + {Job: &model.Job{SchemaName: "db", Type: model.ActionCreateTable, + Args: []any{&model.TableInfo{ForeignKeys: []*model.FKInfo{{}}}, false}}}, + {Job: &model.Job{SchemaName: "db", Type: model.ActionCreateTable, + Args: []any{&model.TableInfo{Name: model.NewCIStr("t2")}, false}}}, + } + newWs, err := mergeCreateTableJobs(jobWs) + require.NoError(t, err) + require.EqualValues(t, jobWs, newWs) + }) + + t.Run("jobs of different schema are not merged", func(t *testing.T) { + jobWs := []*JobWrapper{ + {Job: &model.Job{SchemaName: "db1", Type: model.ActionCreateTable, + Args: []any{&model.TableInfo{Name: model.NewCIStr("t1")}, false}}}, + {Job: &model.Job{SchemaName: "db2", Type: model.ActionCreateTable, + Args: []any{&model.TableInfo{Name: model.NewCIStr("t2")}, false}}}, + } + newWs, err := mergeCreateTableJobs(jobWs) + require.NoError(t, err) + require.EqualValues(t, jobWs, newWs) + }) + + t.Run("max batch size 8", func(t *testing.T) { + jobWs := make([]*JobWrapper, 0, 100) + for db, cnt := range map[string]int{ + "db0": 9, + "db1": 7, + "db2": 22, + } { + for i := 0; i < cnt; i++ { + tblName := fmt.Sprintf("t%d", i) + jobWs = append(jobWs, NewJobWrapper(&model.Job{SchemaName: db, Type: model.ActionCreateTable, + Args: []any{&model.TableInfo{Name: model.NewCIStr(tblName)}, false}}, false)) + } + } + jobWs = append(jobWs, NewJobWrapper(&model.Job{SchemaName: "dbx", Type: model.ActionAddColumn}, false)) + jobWs = append(jobWs, NewJobWrapper(&model.Job{SchemaName: "dbxx", Type: model.ActionCreateTable, + Args: []any{&model.TableInfo{Name: model.NewCIStr("t1")}, false}}, true)) + jobWs = append(jobWs, NewJobWrapper(&model.Job{SchemaName: "dbxxx", Type: model.ActionCreateTable, + Args: []any{&model.TableInfo{ForeignKeys: []*model.FKInfo{{}}}, false}}, false)) + newWs, err := mergeCreateTableJobs(jobWs) + require.NoError(t, err) + // 3 non-mergeable + 2 + 1 + 3 + require.Len(t, newWs, 9) + require.Equal(t, model.ActionAddColumn, newWs[0].Type) + require.Equal(t, model.ActionCreateTable, newWs[1].Type) + require.Equal(t, "dbxx", newWs[1].SchemaName) + require.Equal(t, model.ActionCreateTable, newWs[2].Type) + require.Equal(t, "dbxxx", newWs[2].SchemaName) + + schemaCnts := make(map[string][]int, 3) + for i := 3; i < 9; i++ { + require.Equal(t, model.ActionCreateTables, newWs[i].Type) + infos := newWs[i].Args[0].([]*model.TableInfo) + schemaCnts[newWs[i].SchemaName] = append(schemaCnts[newWs[i].SchemaName], len(infos)) + require.Equal(t, len(infos), len(newWs[i].ResultCh)) + } + for k := range schemaCnts { + slices.Sort(schemaCnts[k]) + } + require.Equal(t, map[string][]int{ + "db0": {4, 5}, + "db1": {7}, + "db2": {7, 7, 8}, + }, schemaCnts) + }) +} diff --git a/pkg/ddl/executor_test.go b/pkg/ddl/executor_test.go index d9fa206ee4b30..66c3c74c568d6 100644 --- a/pkg/ddl/executor_test.go +++ b/pkg/ddl/executor_test.go @@ -29,7 +29,6 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/ddl" sess "github.com/pingcap/tidb/pkg/ddl/session" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/meta" @@ -73,7 +72,7 @@ func TestGetDDLJobs(t *testing.T) { currJobs2 = currJobs2[:0] err = ddl.IterAllDDLJobs(sess, txn, func(jobs []*model.Job) (b bool, e error) { for _, job := range jobs { - if !job.NotStarted() { + if job.Started() { return true, nil } currJobs2 = append(currJobs2, job) @@ -203,7 +202,7 @@ func TestCreateViewConcurrently(t *testing.T) { } func TestCreateDropCreateTable(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk1 := testkit.NewTestKit(t, store) @@ -216,10 +215,9 @@ func TestCreateDropCreateTable(t *testing.T) { var fpErr error var createTable bool - originHook := dom.DDL().GetHook() - onJobUpdated := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if job.Type == model.ActionDropTable && job.SchemaState == model.StateWriteOnly && !createTable { - fpErr = failpoint.Enable("github.com/pingcap/tidb/pkg/ddl/mockOwnerCheckAllVersionSlow", fmt.Sprintf("return(%d)", job.ID)) + fpErr = failpoint.Enable("github.com/pingcap/tidb/pkg/ddl/schemaver/mockOwnerCheckAllVersionSlow", fmt.Sprintf("return(%d)", job.ID)) wg.Add(1) go func() { _, createErr = tk1.Exec("create table t (b int);") @@ -227,17 +225,14 @@ func TestCreateDropCreateTable(t *testing.T) { }() createTable = true } - } - hook := &callback.TestDDLCallback{} - hook.OnJobUpdatedExported.Store(&onJobUpdated) - dom.DDL().SetHook(hook) + }) tk.MustExec("drop table t;") - dom.DDL().SetHook(originHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") wg.Wait() require.NoError(t, createErr) require.NoError(t, fpErr) - require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/mockOwnerCheckAllVersionSlow")) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/schemaver/mockOwnerCheckAllVersionSlow")) rs := tk.MustQuery("admin show ddl jobs 3;").Rows() create1JobID := rs[0][0].(string) @@ -265,69 +260,6 @@ func TestCreateDropCreateTable(t *testing.T) { require.Less(t, dropTS, create1TS, "second create should finish after drop") } -func TestBuildQueryStringFromJobs(t *testing.T) { - testCases := []struct { - name string - jobs []*model.Job - expected string - }{ - { - name: "Empty jobs", - jobs: []*model.Job{}, - expected: "", - }, - { - name: "Single create table job", - jobs: []*model.Job{{Query: "CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(255));"}}, - expected: "CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(255));", - }, - { - name: "Multiple create table jobs with trailing semicolons", - jobs: []*model.Job{ - {Query: "CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(255));"}, - {Query: "CREATE TABLE products (id INT PRIMARY KEY, description TEXT);"}, - }, - expected: "CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(255)); CREATE TABLE products (id INT PRIMARY KEY, description TEXT);", - }, - { - name: "Multiple create table jobs with and without trailing semicolons", - jobs: []*model.Job{ - {Query: "CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(255))"}, - {Query: "CREATE TABLE products (id INT PRIMARY KEY, description TEXT);"}, - {Query: " CREATE TABLE orders (id INT PRIMARY KEY, user_id INT, product_id INT) "}, - }, - expected: "CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(255)); CREATE TABLE products (id INT PRIMARY KEY, description TEXT); CREATE TABLE orders (id INT PRIMARY KEY, user_id INT, product_id INT);", - }, - } - - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - actual := ddl.BuildQueryStringFromJobs(tc.jobs) - require.Equal(t, tc.expected, actual, "Query strings do not match") - }) - } -} - -func TestBatchCreateTableWithJobs(t *testing.T) { - job1 := &model.Job{ - SchemaID: 1, - Type: model.ActionCreateTable, - BinlogInfo: &model.HistoryInfo{}, - Args: []any{&model.TableInfo{Name: model.CIStr{O: "t1", L: "t1"}}, false}, - Query: "create table db1.t1 (c1 int, c2 int)", - } - job2 := &model.Job{ - SchemaID: 1, - Type: model.ActionCreateTable, - BinlogInfo: &model.HistoryInfo{}, - Args: []any{&model.TableInfo{Name: model.CIStr{O: "t2", L: "t2"}}, &model.TableInfo{}}, - Query: "create table db1.t2 (c1 int, c2 int);", - } - job, err := ddl.BatchCreateTableWithJobs([]*model.Job{job1, job2}) - require.NoError(t, err) - require.Equal(t, "create table db1.t1 (c1 int, c2 int); create table db1.t2 (c1 int, c2 int);", job.Query) -} - func getGlobalID(ctx context.Context, t *testing.T, store kv.Storage) int64 { res := int64(0) require.NoError(t, kv.RunInNewTxn(ctx, store, true, func(_ context.Context, txn kv.Transaction) error { @@ -365,10 +297,15 @@ func TestGenIDAndInsertJobsWithRetry(t *testing.T) { }} initialGID := getGlobalID(ctx, t, store) threads, iterations := 10, 500 + tks := make([]*testkit.TestKit, threads) + for i := 0; i < threads; i++ { + tks[i] = testkit.NewTestKit(t, store) + } var wg util.WaitGroupWrapper for i := 0; i < threads; i++ { + idx := i wg.Run(func() { - kit := testkit.NewTestKit(t, store) + kit := tks[idx] ddlSe := sess.NewSession(kit.Session()) for j := 0; j < iterations; j++ { require.NoError(t, ddl.GenGIDAndInsertJobsWithRetry(ctx, ddlSe, jobs)) diff --git a/pkg/ddl/export_test.go b/pkg/ddl/export_test.go index d814000eff867..4aa98bb40fb0a 100644 --- a/pkg/ddl/export_test.go +++ b/pkg/ddl/export_test.go @@ -12,59 +12,59 @@ // See the License for the specific language governing permissions and // limitations under the License. -package ddl +package ddl_test import ( "context" "time" "github.com/ngaut/pools" + "github.com/pingcap/tidb/pkg/ddl" "github.com/pingcap/tidb/pkg/ddl/copr" "github.com/pingcap/tidb/pkg/ddl/session" + "github.com/pingcap/tidb/pkg/ddl/testutil" + "github.com/pingcap/tidb/pkg/disttask/operator" "github.com/pingcap/tidb/pkg/errctx" "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/kv" - "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/table" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/chunk" "github.com/pingcap/tidb/pkg/util/mock" ) -type resultChanForTest struct { - ch chan IndexRecordChunk -} - -func (r *resultChanForTest) AddTask(rs IndexRecordChunk) { - r.ch <- rs -} - func FetchChunk4Test(copCtx copr.CopContext, tbl table.PhysicalTable, startKey, endKey kv.Key, store kv.Storage, - batchSize int) *chunk.Chunk { - variable.SetDDLReorgBatchSize(int32(batchSize)) - task := &reorgBackfillTask{ - id: 1, - startKey: startKey, - endKey: endKey, - physicalTable: tbl, - } - taskCh := make(chan *reorgBackfillTask, 5) - resultCh := make(chan IndexRecordChunk, 5) + batchSize int) (*chunk.Chunk, error) { resPool := pools.NewResourcePool(func() (pools.Resource, error) { ctx := mock.NewContext() ctx.Store = store return ctx, nil }, 8, 8, 0) sessPool := session.NewSessionPool(resPool) - pool := newCopReqSenderPool(context.Background(), copCtx, store, taskCh, sessPool, nil) - pool.chunkSender = &resultChanForTest{ch: resultCh} - pool.adjustSize(1) - pool.tasksCh <- task - rs := <-resultCh - close(taskCh) - pool.close(false) - sessPool.Close() - return rs.Chunk + srcChkPool := make(chan *chunk.Chunk, 10) + for i := 0; i < 10; i++ { + srcChkPool <- chunk.NewChunkWithCapacity(copCtx.GetBase().FieldTypes, batchSize) + } + opCtx := ddl.NewLocalOperatorCtx(context.Background(), 1) + src := testutil.NewOperatorTestSource(ddl.TableScanTask{1, startKey, endKey}) + scanOp := ddl.NewTableScanOperator(opCtx, sessPool, copCtx, srcChkPool, 1, nil, 0) + sink := testutil.NewOperatorTestSink[ddl.IndexRecordChunk]() + + operator.Compose[ddl.TableScanTask](src, scanOp) + operator.Compose[ddl.IndexRecordChunk](scanOp, sink) + + pipeline := operator.NewAsyncPipeline(src, scanOp, sink) + err := pipeline.Execute() + if err != nil { + return nil, err + } + err = pipeline.Close() + if err != nil { + return nil, err + } + + results := sink.Collect() + return results[0].Chunk, nil } func ConvertRowToHandleAndIndexDatum( @@ -72,14 +72,8 @@ func ConvertRowToHandleAndIndexDatum( handleDataBuf, idxDataBuf []types.Datum, row chunk.Row, copCtx copr.CopContext, idxID int64) (kv.Handle, []types.Datum, error) { c := copCtx.GetBase() - idxData := extractDatumByOffsets(ctx, row, copCtx.IndexColumnOutputOffsets(idxID), c.ExprColumnInfos, idxDataBuf) - handleData := extractDatumByOffsets(ctx, row, c.HandleOutputOffsets, c.ExprColumnInfos, handleDataBuf) - handle, err := buildHandle(handleData, c.TableInfo, c.PrimaryKeyInfo, time.Local, errctx.StrictNoWarningContext) + idxData := ddl.ExtractDatumByOffsets(ctx, row, copCtx.IndexColumnOutputOffsets(idxID), c.ExprColumnInfos, idxDataBuf) + handleData := ddl.ExtractDatumByOffsets(ctx, row, c.HandleOutputOffsets, c.ExprColumnInfos, handleDataBuf) + handle, err := ddl.BuildHandle(handleData, c.TableInfo, c.PrimaryKeyInfo, time.Local, errctx.StrictNoWarningContext) return handle, idxData, err } - -// ExtractDatumByOffsetsForTest is used for test. -var ExtractDatumByOffsetsForTest = extractDatumByOffsets - -// CalculateRegionBatchForTest is used for test. -var CalculateRegionBatchForTest = calculateRegionBatch diff --git a/pkg/ddl/fail_test.go b/pkg/ddl/fail_test.go index 64aa9b435709d..e961aadcaff07 100644 --- a/pkg/ddl/fail_test.go +++ b/pkg/ddl/fail_test.go @@ -18,9 +18,9 @@ import ( "testing" "github.com/pingcap/failpoint" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/testkit" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/stretchr/testify/require" ) @@ -37,12 +37,9 @@ func TestFailBeforeDecodeArgs(t *testing.T) { tableIDi, _ := strconv.Atoi(rs.Rows()[0][0].(string)) tableID = int64(tableIDi) - d := dom.DDL() - tc := &callback.TestDDLCallback{Do: dom} - first := true stateCnt := 0 - tc.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { // It can be other schema states except failed schema state. // This schema state can only appear once. if job.SchemaState == model.StateWriteOnly { @@ -55,8 +52,7 @@ func TestFailBeforeDecodeArgs(t *testing.T) { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/errorBeforeDecodeArgs")) } } - } - d.SetHook(tc) + }) defaultValue := int64(3) jobID := testCreateColumn(tk, t, testkit.NewTestKit(t, store).Session(), tableID, "c3", "", defaultValue, dom) // Make sure the schema state only appears once. diff --git a/pkg/ddl/foreign_key.go b/pkg/ddl/foreign_key.go index 62308440a7099..1adc206570868 100644 --- a/pkg/ddl/foreign_key.go +++ b/pkg/ddl/foreign_key.go @@ -31,7 +31,7 @@ import ( "github.com/pingcap/tidb/pkg/util/sqlexec" ) -func (w *worker) onCreateForeignKey(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func (w *worker) onCreateForeignKey(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { schemaID := job.SchemaID tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, schemaID) if err != nil { @@ -46,11 +46,11 @@ func (w *worker) onCreateForeignKey(d *ddlCtx, t *meta.Meta, job *model.Job) (ve return ver, errors.Trace(err) } if job.IsRollingback() { - return dropForeignKey(d, t, job, tblInfo, fkInfo.Name) + return dropForeignKey(jobCtx, t, job, tblInfo, fkInfo.Name) } switch job.SchemaState { case model.StateNone: - err = checkAddForeignKeyValidInOwner(d, t, job.SchemaName, tblInfo, &fkInfo, fkCheck) + err = checkAddForeignKeyValidInOwner(jobCtx.infoCache, job.SchemaName, tblInfo, &fkInfo, fkCheck) if err != nil { job.State = model.JobStateCancelled return ver, err @@ -58,7 +58,7 @@ func (w *worker) onCreateForeignKey(d *ddlCtx, t *meta.Meta, job *model.Job) (ve fkInfo.State = model.StateWriteOnly fkInfo.ID = allocateFKIndexID(tblInfo) tblInfo.ForeignKeys = append(tblInfo.ForeignKeys, &fkInfo) - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -71,14 +71,14 @@ func (w *worker) onCreateForeignKey(d *ddlCtx, t *meta.Meta, job *model.Job) (ve return ver, err } tblInfo.ForeignKeys[len(tblInfo.ForeignKeys)-1].State = model.StateWriteReorganization - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } job.SchemaState = model.StateWriteReorganization case model.StateWriteReorganization: tblInfo.ForeignKeys[len(tblInfo.ForeignKeys)-1].State = model.StatePublic - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -91,7 +91,7 @@ func (w *worker) onCreateForeignKey(d *ddlCtx, t *meta.Meta, job *model.Job) (ve return ver, nil } -func onDropForeignKey(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func onDropForeignKey(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { schemaID := job.SchemaID tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, schemaID) if err != nil { @@ -104,10 +104,10 @@ func onDropForeignKey(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ err job.State = model.JobStateCancelled return ver, errors.Trace(err) } - return dropForeignKey(d, t, job, tblInfo, fkName) + return dropForeignKey(jobCtx, t, job, tblInfo, fkName) } -func dropForeignKey(d *ddlCtx, t *meta.Meta, job *model.Job, tblInfo *model.TableInfo, fkName model.CIStr) (ver int64, err error) { +func dropForeignKey(jobCtx *jobContext, t *meta.Meta, job *model.Job, tblInfo *model.TableInfo, fkName model.CIStr) (ver int64, err error) { var fkInfo *model.FKInfo for _, fk := range tblInfo.ForeignKeys { if fk.Name.L == fkName.L { @@ -126,7 +126,7 @@ func dropForeignKey(d *ddlCtx, t *meta.Meta, job *model.Job, tblInfo *model.Tabl } } tblInfo.ForeignKeys = nfks - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -161,8 +161,9 @@ func checkTableForeignKeysValid(sctx sessionctx.Context, is infoschema.InfoSchem } referredFKInfos := is.GetTableReferredForeignKeys(schema, tbInfo.Name.L) + ctx := infoschema.WithRefillOption(context.Background(), false) for _, referredFK := range referredFKInfos { - childTable, err := is.TableByName(context.Background(), referredFK.ChildSchema, referredFK.ChildTable) + childTable, err := is.TableByName(ctx, referredFK.ChildSchema, referredFK.ChildTable) if err != nil { return err } @@ -206,19 +207,11 @@ func checkTableForeignKeyValid(is infoschema.InfoSchema, schema string, tbInfo * return checkTableForeignKey(referTblInfo, tbInfo, fk) } -func getAndCheckLatestInfoSchema(d *ddlCtx, _ *meta.Meta) (infoschema.InfoSchema, error) { - // TODO(crazycs520): fix me, need to make sure the `d.infoCache` is the latest infoschema. - return d.infoCache.GetLatest(), nil -} - -func checkTableForeignKeyValidInOwner(d *ddlCtx, t *meta.Meta, job *model.Job, tbInfo *model.TableInfo, fkCheck bool) (retryable bool, _ error) { +func checkTableForeignKeyValidInOwner(jobCtx *jobContext, job *model.Job, tbInfo *model.TableInfo, fkCheck bool) (retryable bool, _ error) { if !variable.EnableForeignKey.Load() { return false, nil } - is, err := getAndCheckLatestInfoSchema(d, t) - if err != nil { - return true, err - } + is := jobCtx.infoCache.GetLatest() for _, fk := range tbInfo.ForeignKeys { if fk.Version < model.FKVersion1 { continue @@ -227,7 +220,7 @@ func checkTableForeignKeyValidInOwner(d *ddlCtx, t *meta.Meta, job *model.Job, t if fk.RefSchema.L == job.SchemaName && fk.RefTable.L == tbInfo.Name.L { referTableInfo = tbInfo } else { - referTable, err := is.TableByName(d.ctx, fk.RefSchema, fk.RefTable) + referTable, err := is.TableByName(jobCtx.ctx, fk.RefSchema, fk.RefTable) if err != nil { if !fkCheck && (infoschema.ErrTableNotExists.Equal(err) || infoschema.ErrDatabaseNotExists.Equal(err)) { continue @@ -244,7 +237,7 @@ func checkTableForeignKeyValidInOwner(d *ddlCtx, t *meta.Meta, job *model.Job, t } referredFKInfos := is.GetTableReferredForeignKeys(job.SchemaName, tbInfo.Name.L) for _, referredFK := range referredFKInfos { - childTable, err := is.TableByName(d.ctx, referredFK.ChildSchema, referredFK.ChildTable) + childTable, err := is.TableByName(jobCtx.ctx, referredFK.ChildSchema, referredFK.ChildTable) if err != nil { return false, err } @@ -407,7 +400,7 @@ func checkTableHasForeignKeyReferred(is infoschema.InfoSchema, schema, tbl strin return nil } -func checkDropTableHasForeignKeyReferredInOwner(d *ddlCtx, t *meta.Meta, job *model.Job) error { +func checkDropTableHasForeignKeyReferredInOwner(infoCache *infoschema.InfoCache, job *model.Job) error { if !variable.EnableForeignKey.Load() { return nil } @@ -418,7 +411,7 @@ func checkDropTableHasForeignKeyReferredInOwner(d *ddlCtx, t *meta.Meta, job *mo job.State = model.JobStateCancelled return errors.Trace(err) } - referredFK, err := checkTableHasForeignKeyReferredInOwner(d, t, job.SchemaName, job.TableName, objectIdents, fkCheck) + referredFK, err := checkTableHasForeignKeyReferredInOwner(infoCache, job.SchemaName, job.TableName, objectIdents, fkCheck) if err != nil { return err } @@ -430,8 +423,8 @@ func checkDropTableHasForeignKeyReferredInOwner(d *ddlCtx, t *meta.Meta, job *mo return nil } -func checkTruncateTableHasForeignKeyReferredInOwner(d *ddlCtx, t *meta.Meta, job *model.Job, tblInfo *model.TableInfo, fkCheck bool) error { - referredFK, err := checkTableHasForeignKeyReferredInOwner(d, t, job.SchemaName, job.TableName, []ast.Ident{{Name: tblInfo.Name, Schema: model.NewCIStr(job.SchemaName)}}, fkCheck) +func checkTruncateTableHasForeignKeyReferredInOwner(infoCache *infoschema.InfoCache, job *model.Job, tblInfo *model.TableInfo, fkCheck bool) error { + referredFK, err := checkTableHasForeignKeyReferredInOwner(infoCache, job.SchemaName, job.TableName, []ast.Ident{{Name: tblInfo.Name, Schema: model.NewCIStr(job.SchemaName)}}, fkCheck) if err != nil { return err } @@ -443,14 +436,11 @@ func checkTruncateTableHasForeignKeyReferredInOwner(d *ddlCtx, t *meta.Meta, job return nil } -func checkTableHasForeignKeyReferredInOwner(d *ddlCtx, t *meta.Meta, schema, tbl string, ignoreTables []ast.Ident, fkCheck bool) (_ *model.ReferredFKInfo, _ error) { +func checkTableHasForeignKeyReferredInOwner(infoCache *infoschema.InfoCache, schema, tbl string, ignoreTables []ast.Ident, fkCheck bool) (_ *model.ReferredFKInfo, _ error) { if !variable.EnableForeignKey.Load() { return nil, nil } - is, err := getAndCheckLatestInfoSchema(d, t) - if err != nil { - return nil, err - } + is := infoCache.GetLatest() referredFK := checkTableHasForeignKeyReferred(is, schema, tbl, ignoreTables, fkCheck) return referredFK, nil } @@ -502,15 +492,12 @@ func checkIndexNeededInForeignKey(is infoschema.InfoSchema, dbName string, tbInf return nil } -func checkIndexNeededInForeignKeyInOwner(d *ddlCtx, t *meta.Meta, job *model.Job, dbName string, tbInfo *model.TableInfo, idxInfo *model.IndexInfo) error { +func checkIndexNeededInForeignKeyInOwner(infoCache *infoschema.InfoCache, job *model.Job, dbName string, tbInfo *model.TableInfo, idxInfo *model.IndexInfo) error { if !variable.EnableForeignKey.Load() { return nil } - is, err := getAndCheckLatestInfoSchema(d, t) - if err != nil { - return err - } - err = checkIndexNeededInForeignKey(is, dbName, tbInfo, idxInfo) + is := infoCache.GetLatest() + err := checkIndexNeededInForeignKey(is, dbName, tbInfo, idxInfo) if err != nil { job.State = model.JobStateCancelled return err @@ -537,15 +524,12 @@ func checkDropColumnWithForeignKeyConstraint(is infoschema.InfoSchema, dbName st return nil } -func checkDropColumnWithForeignKeyConstraintInOwner(d *ddlCtx, t *meta.Meta, job *model.Job, tbInfo *model.TableInfo, colName string) error { +func checkDropColumnWithForeignKeyConstraintInOwner(infoCache *infoschema.InfoCache, job *model.Job, tbInfo *model.TableInfo, colName string) error { if !variable.EnableForeignKey.Load() { return nil } - is, err := getAndCheckLatestInfoSchema(d, t) - if err != nil { - return errors.Trace(err) - } - err = checkDropColumnWithForeignKeyConstraint(is, job.SchemaName, tbInfo, colName) + is := infoCache.GetLatest() + err := checkDropColumnWithForeignKeyConstraint(is, job.SchemaName, tbInfo, colName) if err != nil { job.State = model.JobStateCancelled return errors.Trace(err) @@ -621,7 +605,7 @@ func checkDatabaseHasForeignKeyReferred(ctx context.Context, is infoschema.InfoS return nil } -func checkDatabaseHasForeignKeyReferredInOwner(d *ddlCtx, t *meta.Meta, job *model.Job) error { +func checkDatabaseHasForeignKeyReferredInOwner(jobCtx *jobContext, job *model.Job) error { if !variable.EnableForeignKey.Load() { return nil } @@ -634,11 +618,8 @@ func checkDatabaseHasForeignKeyReferredInOwner(d *ddlCtx, t *meta.Meta, job *mod if !fkCheck { return nil } - is, err := getAndCheckLatestInfoSchema(d, t) - if err != nil { - return errors.Trace(err) - } - err = checkDatabaseHasForeignKeyReferred(d.ctx, is, model.NewCIStr(job.SchemaName), fkCheck) + is := jobCtx.infoCache.GetLatest() + err = checkDatabaseHasForeignKeyReferred(jobCtx.ctx, is, model.NewCIStr(job.SchemaName), fkCheck) if err != nil { job.State = model.JobStateCancelled } @@ -665,7 +646,7 @@ func checkAddForeignKeyValid(is infoschema.InfoSchema, schema string, tbInfo *mo return nil } -func checkAddForeignKeyValidInOwner(d *ddlCtx, t *meta.Meta, schema string, tbInfo *model.TableInfo, fk *model.FKInfo, fkCheck bool) error { +func checkAddForeignKeyValidInOwner(infoCache *infoschema.InfoCache, schema string, tbInfo *model.TableInfo, fk *model.FKInfo, fkCheck bool) error { err := checkFKDupName(tbInfo, fk.Name) if err != nil { return err @@ -673,10 +654,7 @@ func checkAddForeignKeyValidInOwner(d *ddlCtx, t *meta.Meta, schema string, tbIn if !variable.EnableForeignKey.Load() { return nil } - is, err := getAndCheckLatestInfoSchema(d, t) - if err != nil { - return errors.Trace(err) - } + is := infoCache.GetLatest() err = checkAddForeignKeyValid(is, schema, tbInfo, fk, fkCheck) if err != nil { return errors.Trace(err) diff --git a/pkg/ddl/foreign_key_test.go b/pkg/ddl/foreign_key_test.go index d9affa1e58054..5441e3df1da62 100644 --- a/pkg/ddl/foreign_key_test.go +++ b/pkg/ddl/foreign_key_test.go @@ -23,12 +23,12 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/tidb/pkg/ddl" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/sessiontxn" "github.com/pingcap/tidb/pkg/table" "github.com/pingcap/tidb/pkg/testkit" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/types" "github.com/stretchr/testify/require" ) @@ -107,7 +107,6 @@ func getForeignKey(t table.Table, name string) *model.FKInfo { func TestForeignKey(t *testing.T) { store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, testLease) - d := dom.DDL() dbInfo, err := testSchemaInfo(store, "test_foreign") require.NoError(t, err) de := dom.DDLExecutor().(ddl.ExecutorForTest) @@ -131,8 +130,7 @@ func TestForeignKey(t *testing.T) { var mu sync.Mutex checkOK := false var hookErr error - tc := &callback.TestDDLCallback{} - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if job.State != model.JobStateDone { return } @@ -150,11 +148,7 @@ func TestForeignKey(t *testing.T) { return } checkOK = true - } - tc.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - originalHook := d.GetHook() - defer d.SetHook(originalHook) - d.SetHook(tc) + }) ctx := testkit.NewTestKit(t, store).Session() job := testCreateForeignKey(t, de, ctx, dbInfo, tblInfo, "c1_fk", []string{"c1"}, "t2", []string{"c1"}, model.ReferOptionCascade, model.ReferOptionSetNull) @@ -173,8 +167,7 @@ func TestForeignKey(t *testing.T) { checkOK = false mu.Unlock() // fix data race pr/#9491 - tc2 := &callback.TestDDLCallback{} - onJobUpdatedExportedFunc2 := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if job.State != model.JobStateDone { return } @@ -192,9 +185,7 @@ func TestForeignKey(t *testing.T) { return } checkOK = true - } - tc2.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc2) - d.SetHook(tc2) + }) job = testDropForeignKey(t, ctx, de, dbInfo, tblInfo, "c1_fk") testCheckJobDone(t, store, job.ID, false) @@ -204,7 +195,7 @@ func TestForeignKey(t *testing.T) { mu.Unlock() require.NoError(t, hErr) require.True(t, ok) - d.SetHook(originalHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") tk := testkit.NewTestKit(t, store) jobID := testDropTable(tk, t, dbInfo.Name.L, tblInfo.Name.L, dom) @@ -214,8 +205,7 @@ func TestForeignKey(t *testing.T) { } func TestTruncateOrDropTableWithForeignKeyReferred2(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, testLease) - d := dom.DDL() + store := testkit.CreateMockStoreWithSchemaLease(t, testLease) tk := testkit.NewTestKit(t, store) tk.MustExec("set @@global.tidb_enable_foreign_key=1") tk.MustExec("set @@foreign_key_checks=1;") @@ -230,8 +220,7 @@ func TestTruncateOrDropTableWithForeignKeyReferred2(t *testing.T) { var wg sync.WaitGroup var truncateErr, dropErr error testTruncate := true - tc := &callback.TestDDLCallback{} - tc.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.SchemaState != model.StateNone { return } @@ -252,10 +241,7 @@ func TestTruncateOrDropTableWithForeignKeyReferred2(t *testing.T) { } // make sure tk2's ddl job already put into ddl job queue. time.Sleep(time.Millisecond * 100) - } - originalHook := d.GetHook() - defer d.SetHook(originalHook) - d.SetHook(tc) + }) tk.MustExec("create table t2 (a int, b int, foreign key fk(b) references t1(id));") wg.Wait() @@ -271,8 +257,7 @@ func TestTruncateOrDropTableWithForeignKeyReferred2(t *testing.T) { } func TestDropIndexNeededInForeignKey2(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, testLease) - d := dom.DDL() + store := testkit.CreateMockStoreWithSchemaLease(t, testLease) tk := testkit.NewTestKit(t, store) tk.MustExec("set @@global.tidb_enable_foreign_key=1") tk.MustExec("set @@foreign_key_checks=1;") @@ -286,8 +271,7 @@ func TestDropIndexNeededInForeignKey2(t *testing.T) { var wg sync.WaitGroup var dropErr error - tc := &callback.TestDDLCallback{} - tc.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.SchemaState != model.StatePublic || job.Type != model.ActionDropIndex { return } @@ -298,10 +282,7 @@ func TestDropIndexNeededInForeignKey2(t *testing.T) { }() // make sure tk2's ddl job already put into ddl job queue. time.Sleep(time.Millisecond * 100) - } - originalHook := d.GetHook() - defer d.SetHook(originalHook) - d.SetHook(tc) + }) tk.MustExec("alter table t2 drop index idx1") wg.Wait() @@ -310,8 +291,7 @@ func TestDropIndexNeededInForeignKey2(t *testing.T) { } func TestDropDatabaseWithForeignKeyReferred2(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, testLease) - d := dom.DDL() + store := testkit.CreateMockStoreWithSchemaLease(t, testLease) tk := testkit.NewTestKit(t, store) tk.MustExec("set @@global.tidb_enable_foreign_key=1") tk.MustExec("set @@foreign_key_checks=1;") @@ -325,8 +305,7 @@ func TestDropDatabaseWithForeignKeyReferred2(t *testing.T) { tk.MustExec("create database test2") var wg sync.WaitGroup var dropErr error - tc := &callback.TestDDLCallback{} - tc.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.SchemaState != model.StateNone { return } @@ -340,10 +319,7 @@ func TestDropDatabaseWithForeignKeyReferred2(t *testing.T) { }() // make sure tk2's ddl job already put into ddl job queue. time.Sleep(time.Millisecond * 100) - } - originalHook := d.GetHook() - defer d.SetHook(originalHook) - d.SetHook(tc) + }) tk.MustExec("create table test2.t3 (id int key, b int, foreign key fk_b(b) references test.t2(id));") wg.Wait() @@ -354,8 +330,7 @@ func TestDropDatabaseWithForeignKeyReferred2(t *testing.T) { } func TestAddForeignKey2(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, testLease) - d := dom.DDL() + store := testkit.CreateMockStoreWithSchemaLease(t, testLease) tk := testkit.NewTestKit(t, store) tk.MustExec("set @@global.tidb_enable_foreign_key=1") tk.MustExec("set @@foreign_key_checks=1;") @@ -366,8 +341,7 @@ func TestAddForeignKey2(t *testing.T) { tk.MustExec("create table t2 (id int key, b int, index(b));") var wg sync.WaitGroup var addErr error - tc := &callback.TestDDLCallback{} - tc.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.SchemaState != model.StatePublic || job.Type != model.ActionDropIndex { return } @@ -378,10 +352,7 @@ func TestAddForeignKey2(t *testing.T) { }() // make sure tk2's ddl job already put into ddl job queue. time.Sleep(time.Millisecond * 100) - } - originalHook := d.GetHook() - defer d.SetHook(originalHook) - d.SetHook(tc) + }) tk.MustExec("alter table t2 drop index b") wg.Wait() @@ -390,8 +361,7 @@ func TestAddForeignKey2(t *testing.T) { } func TestAddForeignKey3(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, testLease) - d := dom.DDL() + store := testkit.CreateMockStoreWithSchemaLease(t, testLease) tk := testkit.NewTestKit(t, store) tk.MustExec("set @@global.tidb_enable_foreign_key=1") tk.MustExec("set @@foreign_key_checks=1;") @@ -406,8 +376,7 @@ func TestAddForeignKey3(t *testing.T) { var insertErrs []error var deleteErrs []error - tc := &callback.TestDDLCallback{} - tc.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.Type != model.ActionAddForeignKey { return } @@ -417,10 +386,7 @@ func TestAddForeignKey3(t *testing.T) { err = tk2.ExecToErr("delete from t1 where id = 1") deleteErrs = append(deleteErrs, err) } - } - originalHook := d.GetHook() - defer d.SetHook(originalHook) - d.SetHook(tc) + }) tk.MustExec("alter table t2 add foreign key (id) references t1(id) on delete cascade") require.Equal(t, 2, len(insertErrs)) diff --git a/pkg/ddl/index.go b/pkg/ddl/index.go index 4c3aa25bba417..ade5a5b9fa4f2 100644 --- a/pkg/ddl/index.go +++ b/pkg/ddl/index.go @@ -88,7 +88,10 @@ var ( SuppressErrorTooLongKeyKey stringutil.StringerStr = "suppressErrorTooLongKeyKey" ) -func suppressErrorTooLongKeyKey(sctx sessionctx.Context) bool { +func suppressErrorTooLongKeyForSchemaTracker(sctx sessionctx.Context) bool { + if sctx == nil { + return false + } if suppress, ok := sctx.Value(SuppressErrorTooLongKeyKey).(bool); ok && suppress { return true } @@ -130,11 +133,12 @@ func buildIndexColumns(ctx sessionctx.Context, columns []*model.ColumnInfo, inde } sumLength += indexColumnLength - // The sum of all lengths must be shorter than the max length for prefix. - if sumLength > maxIndexLength { + if !suppressErrorTooLongKeyForSchemaTracker(ctx) && sumLength > maxIndexLength { + // The sum of all lengths must be shorter than the max length for prefix. + // The multiple column index and the unique index in which the length sum exceeds the maximum size // will return an error instead produce a warning. - if ctx == nil || (ctx.GetSessionVars().SQLMode.HasStrictMode() && !suppressErrorTooLongKeyKey(ctx)) || mysql.HasUniKeyFlag(col.GetFlag()) || len(indexPartSpecifications) > 1 { + if ctx == nil || ctx.GetSessionVars().SQLMode.HasStrictMode() || mysql.HasUniKeyFlag(col.GetFlag()) || len(indexPartSpecifications) > 1 { return nil, false, dbterror.ErrTooLongKey.GenWithStackByArgs(sumLength, maxIndexLength) } // truncate index length and produce warning message in non-restrict sql mode. @@ -188,6 +192,23 @@ func checkIndexPrefixLength(columns []*model.ColumnInfo, idxColumns []*model.Ind return nil } +func indexColumnsLen(cols []*model.ColumnInfo, idxCols []*model.IndexColumn) (colLen int, err error) { + for _, idxCol := range idxCols { + col := model.FindColumnInfo(cols, idxCol.Name.L) + if col == nil { + err = dbterror.ErrKeyColumnDoesNotExits.GenWithStack("column does not exist: %s", idxCol.Name.L) + return + } + var l int + l, err = getIndexColumnLength(col, idxCol.Length) + if err != nil { + return + } + colLen += l + } + return +} + func checkIndexColumn(ctx sessionctx.Context, col *model.ColumnInfo, indexColumnLen int) error { if col.GetFlen() == 0 && (types.IsTypeChar(col.FieldType.GetType()) || types.IsTypeVarchar(col.FieldType.GetType())) { if col.Hidden { @@ -252,7 +273,7 @@ func checkIndexColumn(ctx sessionctx.Context, col *model.ColumnInfo, indexColumn // Specified length must be shorter than the max length for prefix. maxIndexLength := config.GetGlobalConfig().MaxIndexLength if indexColumnLen > maxIndexLength { - if ctx == nil || (ctx.GetSessionVars().SQLMode.HasStrictMode() && !suppressErrorTooLongKeyKey(ctx)) { + if ctx == nil || (ctx.GetSessionVars().SQLMode.HasStrictMode() && !suppressErrorTooLongKeyForSchemaTracker(ctx)) { // return error in strict sql mode return dbterror.ErrTooLongKey.GenWithStackByArgs(indexColumnLen, maxIndexLength) } @@ -307,7 +328,6 @@ func BuildIndexInfo( indexName model.CIStr, isPrimary bool, isUnique bool, - isGlobal bool, indexPartSpecifications []*ast.IndexPartSpecification, indexOption *ast.IndexOption, state model.SchemaState, @@ -328,7 +348,6 @@ func BuildIndexInfo( State: state, Primary: isPrimary, Unique: isUnique, - Global: isGlobal, MVIndex: mvIndex, } @@ -343,6 +362,7 @@ func BuildIndexInfo( } else { idxInfo.Tp = indexOption.Tp } + idxInfo.Global = indexOption.Global } else { // Use btree as default index type. idxInfo.Tp = model.IndexTypeBtree @@ -413,7 +433,7 @@ func ValidateRenameIndex(from, to model.CIStr, tbl *model.TableInfo) (ignore boo return false, nil } -func onRenameIndex(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func onRenameIndex(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { tblInfo, from, to, err := checkRenameIndex(t, job) if err != nil || tblInfo == nil { return ver, errors.Trace(err) @@ -425,13 +445,13 @@ func onRenameIndex(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) if job.MultiSchemaInfo != nil && job.MultiSchemaInfo.Revertible { job.MarkNonRevertible() // Store the mark and enter the next DDL handling loop. - return updateVersionAndTableInfoWithCheck(d, t, job, tblInfo, false) + return updateVersionAndTableInfoWithCheck(jobCtx, t, job, tblInfo, false) } renameIndexes(tblInfo, from, to) renameHiddenColumns(tblInfo, from, to) - if ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true); err != nil { + if ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true); err != nil { job.State = model.JobStateCancelled return ver, errors.Trace(err) } @@ -453,7 +473,7 @@ func validateAlterIndexVisibility(ctx sessionctx.Context, indexName model.CIStr, return false, nil } -func onAlterIndexVisibility(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func onAlterIndexVisibility(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { tblInfo, from, invisible, err := checkAlterIndexVisibility(t, job) if err != nil || tblInfo == nil { return ver, errors.Trace(err) @@ -461,11 +481,11 @@ func onAlterIndexVisibility(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, if job.MultiSchemaInfo != nil && job.MultiSchemaInfo.Revertible { job.MarkNonRevertible() - return updateVersionAndTableInfo(d, t, job, tblInfo, false) + return updateVersionAndTableInfo(jobCtx, t, job, tblInfo, false) } setIndexVisibility(tblInfo, from, invisible) - if ver, err = updateVersionAndTableInfoWithCheck(d, t, job, tblInfo, true); err != nil { + if ver, err = updateVersionAndTableInfoWithCheck(jobCtx, t, job, tblInfo, true); err != nil { job.State = model.JobStateCancelled return ver, errors.Trace(err) } @@ -492,7 +512,7 @@ func getNullColInfos(tblInfo *model.TableInfo, indexInfo *model.IndexInfo) ([]*m return nullCols, nil } -func checkPrimaryKeyNotNull(d *ddlCtx, w *worker, t *meta.Meta, job *model.Job, +func checkPrimaryKeyNotNull(jobCtx *jobContext, w *worker, t *meta.Meta, job *model.Job, tblInfo *model.TableInfo, indexInfo *model.IndexInfo) (warnings []string, err error) { if !indexInfo.Primary { return nil, nil @@ -514,7 +534,7 @@ func checkPrimaryKeyNotNull(d *ddlCtx, w *worker, t *meta.Meta, job *model.Job, if err == nil { return nil, nil } - _, err = convertAddIdxJob2RollbackJob(d, t, job, tblInfo, []*model.IndexInfo{indexInfo}, err) + _, err = convertAddIdxJob2RollbackJob(jobCtx, t, job, tblInfo, []*model.IndexInfo{indexInfo}, err) // TODO: Support non-strict mode. // warnings = append(warnings, ErrWarnDataTruncated.GenWithStackByArgs(oldCol.Name.L, 0).Error()) return nil, err @@ -555,7 +575,6 @@ func decodeAddIndexArgs(job *model.Job) ( indexPartSpecifications [][]*ast.IndexPartSpecification, indexOptions []*ast.IndexOption, hiddenCols [][]*model.ColumnInfo, - globals []bool, err error, ) { var ( @@ -564,27 +583,25 @@ func decodeAddIndexArgs(job *model.Job) ( indexPartSpecification []*ast.IndexPartSpecification indexOption *ast.IndexOption hiddenCol []*model.ColumnInfo - global bool ) - err = job.DecodeArgs(&unique, &indexName, &indexPartSpecification, &indexOption, &hiddenCol, &global) + err = job.DecodeArgs(&unique, &indexName, &indexPartSpecification, &indexOption, &hiddenCol) if err == nil { return []bool{unique}, []model.CIStr{indexName}, [][]*ast.IndexPartSpecification{indexPartSpecification}, []*ast.IndexOption{indexOption}, [][]*model.ColumnInfo{hiddenCol}, - []bool{global}, nil } - err = job.DecodeArgs(&uniques, &indexNames, &indexPartSpecifications, &indexOptions, &hiddenCols, &globals) + err = job.DecodeArgs(&uniques, &indexNames, &indexPartSpecifications, &indexOptions, &hiddenCols) return } -func (w *worker) onCreateIndex(d *ddlCtx, t *meta.Meta, job *model.Job, isPK bool) (ver int64, err error) { +func (w *worker) onCreateIndex(jobCtx *jobContext, t *meta.Meta, job *model.Job, isPK bool) (ver int64, err error) { // Handle the rolling back job. if job.IsRollingback() { - ver, err = onDropIndex(d, t, job) + ver, err = onDropIndex(jobCtx, t, job) if err != nil { return ver, errors.Trace(err) } @@ -602,7 +619,6 @@ func (w *worker) onCreateIndex(d *ddlCtx, t *meta.Meta, job *model.Job, isPK boo } uniques := make([]bool, 1) - global := make([]bool, 1) indexNames := make([]model.CIStr, 1) indexPartSpecifications := make([][]*ast.IndexPartSpecification, 1) indexOption := make([]*ast.IndexOption, 1) @@ -612,9 +628,9 @@ func (w *worker) onCreateIndex(d *ddlCtx, t *meta.Meta, job *model.Job, isPK boo if isPK { // Notice: sqlMode and warnings is used to support non-strict mode. - err = job.DecodeArgs(&uniques[0], &indexNames[0], &indexPartSpecifications[0], &indexOption[0], &sqlMode, &warnings, &global[0]) + err = job.DecodeArgs(&uniques[0], &indexNames[0], &indexPartSpecifications[0], &indexOption[0], &sqlMode, &warnings) } else { - uniques, indexNames, indexPartSpecifications, indexOption, hiddenCols, global, err = decodeAddIndexArgs(job) + uniques, indexNames, indexPartSpecifications, indexOption, hiddenCols, err = decodeAddIndexArgs(job) } if err != nil { job.State = model.JobStateCancelled @@ -659,7 +675,6 @@ func (w *worker) onCreateIndex(d *ddlCtx, t *meta.Meta, job *model.Job, isPK boo indexName, isPK, uniques[i], - global[i], indexPartSpecifications[i], indexOption[i], model.StateNone, @@ -716,7 +731,7 @@ SwitchIndexState: indexInfo.State = model.StateDeleteOnly moveAndUpdateHiddenColumnsToPublic(tblInfo, indexInfo) } - ver, err = updateVersionAndTableInfoWithCheck(d, t, job, tblInfo, originalState != model.StateDeleteOnly) + ver, err = updateVersionAndTableInfoWithCheck(jobCtx, t, job, tblInfo, originalState != model.StateDeleteOnly) if err != nil { return ver, err } @@ -725,13 +740,13 @@ SwitchIndexState: // delete only -> write only for _, indexInfo := range allIndexInfos { indexInfo.State = model.StateWriteOnly - _, err = checkPrimaryKeyNotNull(d, w, t, job, tblInfo, indexInfo) + _, err = checkPrimaryKeyNotNull(jobCtx, w, t, job, tblInfo, indexInfo) if err != nil { break SwitchIndexState } } - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, originalState != model.StateWriteOnly) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, originalState != model.StateWriteOnly) if err != nil { return ver, err } @@ -740,13 +755,13 @@ SwitchIndexState: // write only -> reorganization for _, indexInfo := range allIndexInfos { indexInfo.State = model.StateWriteReorganization - _, err = checkPrimaryKeyNotNull(d, w, t, job, tblInfo, indexInfo) + _, err = checkPrimaryKeyNotNull(jobCtx, w, t, job, tblInfo, indexInfo) if err != nil { break SwitchIndexState } } - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, originalState != model.StateWriteReorganization) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, originalState != model.StateWriteReorganization) if err != nil { return ver, err } @@ -755,16 +770,16 @@ SwitchIndexState: job.SchemaState = model.StateWriteReorganization case model.StateWriteReorganization: // reorganization -> public - tbl, err := getTable(d.getAutoIDRequirement(), schemaID, tblInfo) + tbl, err := getTable(jobCtx.getAutoIDRequirement(), schemaID, tblInfo) if err != nil { return ver, errors.Trace(err) } var done bool if job.MultiSchemaInfo != nil { - done, ver, err = doReorgWorkForCreateIndexMultiSchema(w, d, t, job, tbl, allIndexInfos) + done, ver, err = doReorgWorkForCreateIndexMultiSchema(w, jobCtx, t, job, tbl, allIndexInfos) } else { - done, ver, err = doReorgWorkForCreateIndex(w, d, t, job, tbl, allIndexInfos) + done, ver, err = doReorgWorkForCreateIndex(w, jobCtx, t, job, tbl, allIndexInfos) } if !done { return ver, err @@ -797,18 +812,20 @@ SwitchIndexState: } }) - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, originalState != model.StatePublic) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, originalState != model.StatePublic) if err != nil { return ver, errors.Trace(err) } allIndexIDs := make([]int64, 0, len(allIndexInfos)) ifExists := make([]bool, 0, len(allIndexInfos)) + isGlobal := make([]bool, 0, len(allIndexInfos)) for _, indexInfo := range allIndexInfos { allIndexIDs = append(allIndexIDs, indexInfo.ID) ifExists = append(ifExists, false) + isGlobal = append(isGlobal, indexInfo.Global) } - job.Args = []any{allIndexIDs, ifExists, getPartitionIDs(tbl.Meta())} + job.Args = []any{allIndexIDs, ifExists, getPartitionIDs(tbl.Meta()), isGlobal} // Finish this job. job.FinishTableJob(model.JobStateDone, model.StatePublic, ver, tblInfo) if !job.ReorgMeta.IsDistReorg && job.ReorgMeta.ReorgTp == model.ReorgTypeLitMerge { @@ -863,14 +880,14 @@ func loadCloudStorageURI(w *worker, job *model.Job) { job.ReorgMeta.UseCloudStorage = len(jc.cloudStorageURI) > 0 } -func doReorgWorkForCreateIndexMultiSchema(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job, +func doReorgWorkForCreateIndexMultiSchema(w *worker, jobCtx *jobContext, t *meta.Meta, job *model.Job, tbl table.Table, allIndexInfos []*model.IndexInfo) (done bool, ver int64, err error) { if job.MultiSchemaInfo.Revertible { - done, ver, err = doReorgWorkForCreateIndex(w, d, t, job, tbl, allIndexInfos) + done, ver, err = doReorgWorkForCreateIndex(w, jobCtx, t, job, tbl, allIndexInfos) if done { job.MarkNonRevertible() if err == nil { - ver, err = updateVersionAndTableInfo(d, t, job, tbl.Meta(), true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tbl.Meta(), true) } } // We need another round to wait for all the others sub-jobs to finish. @@ -881,7 +898,7 @@ func doReorgWorkForCreateIndexMultiSchema(w *worker, d *ddlCtx, t *meta.Meta, jo func doReorgWorkForCreateIndex( w *worker, - d *ddlCtx, + jobCtx *jobContext, t *meta.Meta, job *model.Job, tbl table.Table, @@ -893,7 +910,7 @@ func doReorgWorkForCreateIndex( return false, ver, err } if !reorgTp.NeedMergeProcess() { - return runReorgJobAndHandleErr(w, d, t, job, tbl, allIndexInfos, false) + return runReorgJobAndHandleErr(w, jobCtx, t, job, tbl, allIndexInfos, false) } switch allIndexInfos[0].BackfillState { case model.BackfillStateRunning: @@ -904,12 +921,12 @@ func doReorgWorkForCreateIndex( switch reorgTp { case model.ReorgTypeLitMerge: if job.ReorgMeta.IsDistReorg { - done, ver, err = runIngestReorgJobDist(w, d, t, job, tbl, allIndexInfos) + done, ver, err = runIngestReorgJobDist(w, jobCtx, t, job, tbl, allIndexInfos) } else { - done, ver, err = runIngestReorgJob(w, d, t, job, tbl, allIndexInfos) + done, ver, err = runIngestReorgJob(w, jobCtx, t, job, tbl, allIndexInfos) } case model.ReorgTypeTxnMerge: - done, ver, err = runReorgJobAndHandleErr(w, d, t, job, tbl, allIndexInfos, false) + done, ver, err = runReorgJobAndHandleErr(w, jobCtx, t, job, tbl, allIndexInfos, false) } if err != nil || !done { return false, ver, errors.Trace(err) @@ -917,7 +934,7 @@ func doReorgWorkForCreateIndex( for _, indexInfo := range allIndexInfos { indexInfo.BackfillState = model.BackfillStateReadyToMerge } - ver, err = updateVersionAndTableInfo(d, t, job, tbl.Meta(), true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tbl.Meta(), true) return false, ver, errors.Trace(err) case model.BackfillStateReadyToMerge: failpoint.Inject("mockDMLExecutionStateBeforeMerge", func(_ failpoint.Value) { @@ -936,10 +953,10 @@ func doReorgWorkForCreateIndex( ingest.LitBackCtxMgr.Unregister(job.ID) } job.SnapshotVer = 0 // Reset the snapshot version for merge index reorg. - ver, err = updateVersionAndTableInfo(d, t, job, tbl.Meta(), true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tbl.Meta(), true) return false, ver, errors.Trace(err) case model.BackfillStateMerging: - done, ver, err = runReorgJobAndHandleErr(w, d, t, job, tbl, allIndexInfos, true) + done, ver, err = runReorgJobAndHandleErr(w, jobCtx, t, job, tbl, allIndexInfos, true) if !done { return false, ver, err } @@ -952,9 +969,9 @@ func doReorgWorkForCreateIndex( } } -func runIngestReorgJobDist(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job, +func runIngestReorgJobDist(w *worker, jobCtx *jobContext, t *meta.Meta, job *model.Job, tbl table.Table, allIndexInfos []*model.IndexInfo) (done bool, ver int64, err error) { - done, ver, err = runReorgJobAndHandleErr(w, d, t, job, tbl, allIndexInfos, false) + done, ver, err = runReorgJobAndHandleErr(w, jobCtx, t, job, tbl, allIndexInfos, false) if err != nil { return false, ver, errors.Trace(err) } @@ -966,17 +983,17 @@ func runIngestReorgJobDist(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job, return true, ver, nil } -func runIngestReorgJob(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job, +func runIngestReorgJob(w *worker, jobCtx *jobContext, t *meta.Meta, job *model.Job, tbl table.Table, allIndexInfos []*model.IndexInfo) (done bool, ver int64, err error) { - done, ver, err = runReorgJobAndHandleErr(w, d, t, job, tbl, allIndexInfos, false) + done, ver, err = runReorgJobAndHandleErr(w, jobCtx, t, job, tbl, allIndexInfos, false) if err != nil { if kv.ErrKeyExists.Equal(err) { logutil.DDLLogger().Warn("import index duplicate key, convert job to rollback", zap.Stringer("job", job), zap.Error(err)) - ver, err = convertAddIdxJob2RollbackJob(d, t, job, tbl.Meta(), allIndexInfos, err) + ver, err = convertAddIdxJob2RollbackJob(jobCtx, t, job, tbl.Meta(), allIndexInfos, err) } else if !errorIsRetryable(err, job) { logutil.DDLLogger().Warn("run reorg job failed, convert job to rollback", zap.String("job", job.String()), zap.Error(err)) - ver, err = convertAddIdxJob2RollbackJob(d, t, job, tbl.Meta(), allIndexInfos, err) + ver, err = convertAddIdxJob2RollbackJob(jobCtx, t, job, tbl.Meta(), allIndexInfos, err) } else { logutil.DDLLogger().Warn("run add index ingest job error", zap.Error(err)) } @@ -1002,7 +1019,7 @@ func errorIsRetryable(err error, job *model.Job) bool { func runReorgJobAndHandleErr( w *worker, - d *ddlCtx, + jobCtx *jobContext, t *meta.Meta, job *model.Job, tbl table.Table, @@ -1033,7 +1050,7 @@ func runReorgJobAndHandleErr( if err != nil { return false, ver, errors.Trace(err) } - reorgInfo, err := getReorgInfo(d.jobContext(job.ID, job.ReorgMeta), d, rh, job, dbInfo, tbl, elements, mergingTmpIdx) + reorgInfo, err := getReorgInfo(jobCtx.oldDDLCtx.jobContext(job.ID, job.ReorgMeta), jobCtx, rh, job, dbInfo, tbl, elements, mergingTmpIdx) if err != nil || reorgInfo == nil || reorgInfo.first { // If we run reorg firstly, we should update the job snapshot version // and then run the reorg next time. @@ -1043,7 +1060,7 @@ func runReorgJobAndHandleErr( if err != nil { return false, ver, errors.Trace(err) } - err = w.runReorgJob(reorgInfo, tbl.Meta(), d.lease, func() (addIndexErr error) { + err = w.runReorgJob(reorgInfo, tbl.Meta(), func() (addIndexErr error) { defer util.Recover(metrics.LabelDDL, "onCreateIndex", func() { addIndexErr = dbterror.ErrCancelledDDLJob.GenWithStack("add table `%v` index `%v` panic", tbl.Meta().Name, allIndexInfos[0].Name) @@ -1062,7 +1079,7 @@ func runReorgJobAndHandleErr( err = ingest.TryConvertToKeyExistsErr(err, allIndexInfos[0], tbl.Meta()) if !errorIsRetryable(err, job) { logutil.DDLLogger().Warn("run add index job failed, convert job to rollback", zap.Stringer("job", job), zap.Error(err)) - ver, err = convertAddIdxJob2RollbackJob(d, t, job, tbl.Meta(), allIndexInfos, err) + ver, err = convertAddIdxJob2RollbackJob(jobCtx, t, job, tbl.Meta(), allIndexInfos, err) if err1 := rh.RemoveDDLReorgHandle(job, reorgInfo.elements); err1 != nil { logutil.DDLLogger().Warn("run add index job failed, convert job to rollback, RemoveDDLReorgHandle failed", zap.Stringer("job", job), zap.Error(err1)) } @@ -1077,8 +1094,8 @@ func runReorgJobAndHandleErr( return true, ver, nil } -func onDropIndex(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { - tblInfo, allIndexInfos, ifExists, err := checkDropIndex(d, t, job) +func onDropIndex(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { + tblInfo, allIndexInfos, ifExists, err := checkDropIndex(jobCtx.infoCache, t, job) if err != nil { if ifExists && dbterror.ErrCantDropFieldOrKey.Equal(err) { job.Warning = toTError(err) @@ -1094,7 +1111,7 @@ func onDropIndex(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { if job.MultiSchemaInfo != nil && !job.IsRollingback() && job.MultiSchemaInfo.Revertible { job.MarkNonRevertible() job.SchemaState = allIndexInfos[0].State - return updateVersionAndTableInfo(d, t, job, tblInfo, false) + return updateVersionAndTableInfo(jobCtx, t, job, tblInfo, false) } originalState := allIndexInfos[0].State @@ -1104,7 +1121,7 @@ func onDropIndex(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { for _, indexInfo := range allIndexInfos { indexInfo.State = model.StateWriteOnly } - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, originalState != model.StateWriteOnly) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, originalState != model.StateWriteOnly) if err != nil { return ver, errors.Trace(err) } @@ -1113,7 +1130,7 @@ func onDropIndex(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { for _, indexInfo := range allIndexInfos { indexInfo.State = model.StateDeleteOnly } - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, originalState != model.StateDeleteOnly) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, originalState != model.StateDeleteOnly) if err != nil { return ver, errors.Trace(err) } @@ -1122,7 +1139,7 @@ func onDropIndex(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { for _, indexInfo := range allIndexInfos { indexInfo.State = model.StateDeleteReorganization } - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, originalState != model.StateDeleteReorganization) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, originalState != model.StateDeleteReorganization) if err != nil { return ver, errors.Trace(err) } @@ -1145,7 +1162,7 @@ func onDropIndex(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { } }) - ver, err = updateVersionAndTableInfoWithCheck(d, t, job, tblInfo, originalState != model.StateNone) + ver, err = updateVersionAndTableInfoWithCheck(jobCtx, t, job, tblInfo, originalState != model.StateNone) if err != nil { return ver, errors.Trace(err) } @@ -1209,7 +1226,7 @@ func removeIndexInfo(tblInfo *model.TableInfo, idxInfo *model.IndexInfo) { tblInfo.Indices = append(tblInfo.Indices[:offset], tblInfo.Indices[offset+1:]...) } -func checkDropIndex(d *ddlCtx, t *meta.Meta, job *model.Job) (*model.TableInfo, []*model.IndexInfo, bool /* ifExists */, error) { +func checkDropIndex(infoCache *infoschema.InfoCache, t *meta.Meta, job *model.Job) (*model.TableInfo, []*model.IndexInfo, bool /* ifExists */, error) { schemaID := job.SchemaID tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, schemaID) if err != nil { @@ -1240,7 +1257,7 @@ func checkDropIndex(d *ddlCtx, t *meta.Meta, job *model.Job) (*model.TableInfo, } // Double check for drop index needed in foreign key. - if err := checkIndexNeededInForeignKeyInOwner(d, t, job, job.SchemaName, tblInfo, indexInfo); err != nil { + if err := checkIndexNeededInForeignKeyInOwner(infoCache, job, job.SchemaName, tblInfo, indexInfo); err != nil { return nil, nil, false, errors.Trace(err) } indexInfos = append(indexInfos, indexInfo) @@ -1635,8 +1652,6 @@ func (w *addIndexTxnWorker) batchCheckUniqueKey(txn kv.Transaction, idxRecords [ } idxRecords[w.recordIdx[i]].skip = found && idxRecords[w.recordIdx[i]].skip } - // Constrains is already checked. - w.tblCtx.GetSessionVars().StmtCtx.BatchCheck = true return nil } @@ -1701,20 +1716,20 @@ func writeChunkToLocal( restoreDataBuf = make([]types.Datum, len(c.HandleOutputOffsets)) } for row := iter.Begin(); row != iter.End(); row = iter.Next() { - handleDataBuf := extractDatumByOffsets(ectx, row, c.HandleOutputOffsets, c.ExprColumnInfos, handleDataBuf) + handleDataBuf := ExtractDatumByOffsets(ectx, row, c.HandleOutputOffsets, c.ExprColumnInfos, handleDataBuf) if restore { // restoreDataBuf should not truncate index values. for i, datum := range handleDataBuf { restoreDataBuf[i] = *datum.Clone() } } - h, err := buildHandle(handleDataBuf, c.TableInfo, c.PrimaryKeyInfo, loc, errCtx) + h, err := BuildHandle(handleDataBuf, c.TableInfo, c.PrimaryKeyInfo, loc, errCtx) if err != nil { return 0, nil, errors.Trace(err) } for i, index := range indexes { idxID := index.Meta().ID - idxDataBuf = extractDatumByOffsets(ectx, + idxDataBuf = ExtractDatumByOffsets(ectx, row, copCtx.IndexColumnOutputOffsets(idxID), c.ExprColumnInfos, idxDataBuf) idxData := idxDataBuf[:len(index.Meta().Columns)] var rsData []types.Datum @@ -1830,7 +1845,12 @@ func (w *addIndexTxnWorker) BackfillData(handleRange reorgBackfillTask) (taskCtx } handle, err := w.indexes[i%len(w.indexes)].Create( - w.tblCtx, txn, idxRecord.vals, idxRecord.handle, idxRecord.rsData, table.WithIgnoreAssertion, table.FromBackfill) + w.tblCtx, txn, idxRecord.vals, idxRecord.handle, idxRecord.rsData, + table.WithIgnoreAssertion, + table.FromBackfill, + // Constrains is already checked in batchCheckUniqueKey + table.DupKeyCheckSkip, + ) if err != nil { if kv.ErrKeyExists.Equal(err) && idxRecord.handle.Equal(handle) { // Index already exists, skip it. @@ -1940,7 +1960,7 @@ func checkDuplicateForUniqueIndex(ctx context.Context, t table.Table, reorgInfo if indexInfo.Unique { ctx := tidblogutil.WithCategory(ctx, "ddl-ingest") if bc == nil { - bc, err = ingest.LitBackCtxMgr.Register(ctx, reorgInfo.ID, indexInfo.Unique, nil, discovery, reorgInfo.ReorgMeta.ResourceGroupName) + bc, err = ingest.LitBackCtxMgr.Register(ctx, reorgInfo.ID, indexInfo.Unique, nil, discovery, reorgInfo.ReorgMeta.ResourceGroupName, 1) if err != nil { return err } @@ -2015,7 +2035,7 @@ func (w *worker) executeDistTask(t table.Table, reorgInfo *reorgInfo) error { }) } else { job := reorgInfo.Job - workerCntLimit := int(variable.GetDDLReorgWorkerCounter()) + workerCntLimit := job.ReorgMeta.GetConcurrencyOrDefault(int(variable.GetDDLReorgWorkerCounter())) cpuCount, err := handle.GetCPUCountOfNode(ctx) if err != nil { return err @@ -2255,7 +2275,7 @@ func getNextPartitionInfo(reorg *reorgInfo, t table.PartitionedTable, currPhysic if val.(bool) { ts := oracle.GoTimeToTS(time.Now()) //nolint:forcetypeassert - s := reorg.d.store.(tikv.Storage) + s := reorg.jobCtx.store.(tikv.Storage) s.UpdateSPCache(ts, time.Now()) time.Sleep(time.Second * 3) } @@ -2269,11 +2289,11 @@ func getNextPartitionInfo(reorg *reorgInfo, t table.PartitionedTable, currPhysic startKey = tablecodec.EncodeIndexSeekKey(pid, firstElemTempID, nil) endKey = tablecodec.EncodeIndexSeekKey(pid, lastElemTempID, []byte{255}) } else { - currentVer, err := getValidCurrentVersion(reorg.d.store) + currentVer, err := getValidCurrentVersion(reorg.jobCtx.store) if err != nil { return 0, nil, nil, errors.Trace(err) } - startKey, endKey, err = getTableRange(reorg.NewJobContext(), reorg.d, t.GetPartition(pid), currentVer.Ver, reorg.Job.Priority) + startKey, endKey, err = getTableRange(reorg.NewJobContext(), reorg.jobCtx.store, t.GetPartition(pid), currentVer.Ver, reorg.Job.Priority) if err != nil { return 0, nil, nil, errors.Trace(err) } @@ -2375,7 +2395,7 @@ type cleanUpIndexWorker struct { baseIndexWorker } -func newCleanUpIndexWorker(id int, t table.PhysicalTable, decodeColMap map[int64]decoder.Column, reorgInfo *reorgInfo, jc *JobContext) (*cleanUpIndexWorker, error) { +func newCleanUpIndexWorker(id int, t table.PhysicalTable, decodeColMap map[int64]decoder.Column, reorgInfo *reorgInfo, jc *ReorgContext) (*cleanUpIndexWorker, error) { bCtx, err := newBackfillCtx(id, reorgInfo, reorgInfo.SchemaName, t, jc, "cleanup_idx_rate", false) if err != nil { return nil, err @@ -2501,11 +2521,11 @@ func (w *worker) updateReorgInfoForPartitions(t table.PartitionedTable, reorg *r } } - currentVer, err := getValidCurrentVersion(reorg.d.store) + currentVer, err := getValidCurrentVersion(reorg.jobCtx.store) if err != nil { return false, errors.Trace(err) } - start, end, err := getTableRange(reorg.NewJobContext(), reorg.d, t.GetPartition(pid), currentVer.Ver, reorg.Job.Priority) + start, end, err := getTableRange(reorg.NewJobContext(), reorg.jobCtx.store, t.GetPartition(pid), currentVer.Ver, reorg.Job.Priority) if err != nil { return false, errors.Trace(err) } diff --git a/pkg/ddl/index_change_test.go b/pkg/ddl/index_change_test.go index 8ec5d34fd1403..882d2fecffe23 100644 --- a/pkg/ddl/index_change_test.go +++ b/pkg/ddl/index_change_test.go @@ -22,15 +22,14 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/tidb/pkg/ddl" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/sessionctx/variable" - "github.com/pingcap/tidb/pkg/sessiontxn" "github.com/pingcap/tidb/pkg/table" "github.com/pingcap/tidb/pkg/table/tables" "github.com/pingcap/tidb/pkg/testkit" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/types" "github.com/stretchr/testify/require" ) @@ -43,8 +42,6 @@ func TestIndexChange(t *testing.T) { tk.MustExec("create table t (c1 int primary key, c2 int)") tk.MustExec("insert t values (1, 1), (2, 2), (3, 3);") - d := dom.DDL() - tc := &callback.TestDDLCallback{Do: dom} // set up hook prevState := model.StateNone addIndexDone := false @@ -54,7 +51,7 @@ func TestIndexChange(t *testing.T) { writeOnlyTable table.Table publicTable table.Table ) - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if job.Type != model.ActionAddIndex || job.TableName != "t" { return } @@ -65,7 +62,7 @@ func TestIndexChange(t *testing.T) { ctx1 := testNewContext(store) prevState = job.SchemaState require.NoError(t, dom.Reload()) - tbl, exist := dom.InfoSchema().TableByID(job.TableID) + tbl, exist := dom.InfoSchema().TableByID(context.Background(), job.TableID) require.True(t, exist) switch job.SchemaState { case model.StateDeleteOnly: @@ -83,9 +80,7 @@ func TestIndexChange(t *testing.T) { addIndexDone = true } } - } - tc.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(tc) + }) tk.MustExec("alter table t add index c2(c2)") // We need to make sure onJobUpdated is called in the first hook. // After testCreateIndex(), onJobUpdated() may not be called when job.state is Sync. @@ -101,7 +96,7 @@ func TestIndexChange(t *testing.T) { prevState = model.StateNone var noneTable table.Table - onJobUpdatedExportedFunc2 := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { jobID.Store(job.ID) if job.SchemaState == prevState { return @@ -109,7 +104,7 @@ func TestIndexChange(t *testing.T) { prevState = job.SchemaState var err error require.NoError(t, dom.Reload()) - tbl, exist := dom.InfoSchema().TableByID(job.TableID) + tbl, exist := dom.InfoSchema().TableByID(context.Background(), job.TableID) require.True(t, exist) ctx1 := testNewContext(store) switch job.SchemaState { @@ -125,8 +120,7 @@ func TestIndexChange(t *testing.T) { noneTable = tbl require.Equalf(t, 0, len(noneTable.Indices()), "index should have been dropped") } - } - tc.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc2) + }) tk.MustExec("alter table t drop index c2") v = getSchemaVer(t, tk.Session()) checkHistoryJobArgs(t, tk.Session(), jobID.Load(), &historyJobArgs{ver: v, tbl: noneTable.Meta()}) @@ -154,11 +148,11 @@ func checkIndexExists(ctx sessionctx.Context, tbl table.Table, indexValue any, h func checkAddWriteOnlyForAddIndex(ctx sessionctx.Context, delOnlyTbl, writeOnlyTbl table.Table) error { // DeleteOnlyTable: insert t values (4, 4); - err := sessiontxn.NewTxn(context.Background(), ctx) + txn, err := newTxn(ctx) if err != nil { return errors.Trace(err) } - _, err = delOnlyTbl.AddRecord(ctx.GetTableCtx(), types.MakeDatums(4, 4)) + _, err = delOnlyTbl.AddRecord(ctx.GetTableCtx(), txn, types.MakeDatums(4, 4)) if err != nil { return errors.Trace(err) } @@ -168,7 +162,7 @@ func checkAddWriteOnlyForAddIndex(ctx sessionctx.Context, delOnlyTbl, writeOnlyT } // WriteOnlyTable: insert t values (5, 5); - _, err = writeOnlyTbl.AddRecord(ctx.GetTableCtx(), types.MakeDatums(5, 5)) + _, err = writeOnlyTbl.AddRecord(ctx.GetTableCtx(), txn, types.MakeDatums(5, 5)) if err != nil { return errors.Trace(err) } @@ -178,7 +172,7 @@ func checkAddWriteOnlyForAddIndex(ctx sessionctx.Context, delOnlyTbl, writeOnlyT } // WriteOnlyTable: update t set c2 = 1 where c1 = 4 and c2 = 4 - err = writeOnlyTbl.UpdateRecord(context.Background(), ctx.GetTableCtx(), kv.IntHandle(4), types.MakeDatums(4, 4), types.MakeDatums(4, 1), touchedSlice(writeOnlyTbl)) + err = writeOnlyTbl.UpdateRecord(ctx.GetTableCtx(), txn, kv.IntHandle(4), types.MakeDatums(4, 4), types.MakeDatums(4, 1), touchedSlice(writeOnlyTbl)) if err != nil { return errors.Trace(err) } @@ -188,7 +182,7 @@ func checkAddWriteOnlyForAddIndex(ctx sessionctx.Context, delOnlyTbl, writeOnlyT } // DeleteOnlyTable: update t set c2 = 3 where c1 = 4 and c2 = 1 - err = delOnlyTbl.UpdateRecord(context.Background(), ctx.GetTableCtx(), kv.IntHandle(4), types.MakeDatums(4, 1), types.MakeDatums(4, 3), touchedSlice(writeOnlyTbl)) + err = delOnlyTbl.UpdateRecord(ctx.GetTableCtx(), txn, kv.IntHandle(4), types.MakeDatums(4, 1), types.MakeDatums(4, 3), touchedSlice(writeOnlyTbl)) if err != nil { return errors.Trace(err) } @@ -204,7 +198,7 @@ func checkAddWriteOnlyForAddIndex(ctx sessionctx.Context, delOnlyTbl, writeOnlyT } // WriteOnlyTable: delete t where c1 = 4 and c2 = 3 - err = writeOnlyTbl.RemoveRecord(ctx.GetTableCtx(), kv.IntHandle(4), types.MakeDatums(4, 3)) + err = writeOnlyTbl.RemoveRecord(ctx.GetTableCtx(), txn, kv.IntHandle(4), types.MakeDatums(4, 3)) if err != nil { return errors.Trace(err) } @@ -214,7 +208,7 @@ func checkAddWriteOnlyForAddIndex(ctx sessionctx.Context, delOnlyTbl, writeOnlyT } // DeleteOnlyTable: delete t where c1 = 5 - err = delOnlyTbl.RemoveRecord(ctx.GetTableCtx(), kv.IntHandle(5), types.MakeDatums(5, 5)) + err = delOnlyTbl.RemoveRecord(ctx.GetTableCtx(), txn, kv.IntHandle(5), types.MakeDatums(5, 5)) if err != nil { return errors.Trace(err) } @@ -228,11 +222,11 @@ func checkAddWriteOnlyForAddIndex(ctx sessionctx.Context, delOnlyTbl, writeOnlyT func checkAddPublicForAddIndex(ctx sessionctx.Context, writeTbl, publicTbl table.Table) error { var err1 error // WriteOnlyTable: insert t values (6, 6) - err := sessiontxn.NewTxn(context.Background(), ctx) + txn, err := newTxn(ctx) if err != nil { return errors.Trace(err) } - _, err = writeTbl.AddRecord(ctx.GetTableCtx(), types.MakeDatums(6, 6)) + _, err = writeTbl.AddRecord(ctx.GetTableCtx(), txn, types.MakeDatums(6, 6)) if err != nil { return errors.Trace(err) } @@ -245,7 +239,7 @@ func checkAddPublicForAddIndex(ctx sessionctx.Context, writeTbl, publicTbl table return errors.Trace(err) } // PublicTable: insert t values (7, 7) - _, err = publicTbl.AddRecord(ctx.GetTableCtx(), types.MakeDatums(7, 7)) + _, err = publicTbl.AddRecord(ctx.GetTableCtx(), txn, types.MakeDatums(7, 7)) if err != nil { return errors.Trace(err) } @@ -255,7 +249,7 @@ func checkAddPublicForAddIndex(ctx sessionctx.Context, writeTbl, publicTbl table } // WriteOnlyTable: update t set c2 = 5 where c1 = 7 and c2 = 7 - err = writeTbl.UpdateRecord(context.Background(), ctx.GetTableCtx(), kv.IntHandle(7), types.MakeDatums(7, 7), types.MakeDatums(7, 5), touchedSlice(writeTbl)) + err = writeTbl.UpdateRecord(ctx.GetTableCtx(), txn, kv.IntHandle(7), types.MakeDatums(7, 7), types.MakeDatums(7, 5), touchedSlice(writeTbl)) if err != nil { return errors.Trace(err) } @@ -276,7 +270,7 @@ func checkAddPublicForAddIndex(ctx sessionctx.Context, writeTbl, publicTbl table return errors.Trace(err) } // WriteOnlyTable: delete t where c1 = 6 - err = writeTbl.RemoveRecord(ctx.GetTableCtx(), kv.IntHandle(6), types.MakeDatums(6, 6)) + err = writeTbl.RemoveRecord(ctx.GetTableCtx(), txn, kv.IntHandle(6), types.MakeDatums(6, 6)) if err != nil { return errors.Trace(err) } @@ -309,20 +303,16 @@ func checkAddPublicForAddIndex(ctx sessionctx.Context, writeTbl, publicTbl table return errors.Trace(err) } } - txn, err := ctx.Txn(true) - if err != nil { - return errors.Trace(err) - } return txn.Commit(context.Background()) } func checkDropWriteOnly(ctx sessionctx.Context, publicTbl, writeTbl table.Table) error { // WriteOnlyTable insert t values (8, 8) - err := sessiontxn.NewTxn(context.Background(), ctx) + txn, err := newTxn(ctx) if err != nil { return errors.Trace(err) } - _, err = writeTbl.AddRecord(ctx.GetTableCtx(), types.MakeDatums(8, 8)) + _, err = writeTbl.AddRecord(ctx.GetTableCtx(), txn, types.MakeDatums(8, 8)) if err != nil { return errors.Trace(err) } @@ -333,7 +323,7 @@ func checkDropWriteOnly(ctx sessionctx.Context, publicTbl, writeTbl table.Table) } // WriteOnlyTable update t set c2 = 7 where c1 = 8 and c2 = 8 - err = writeTbl.UpdateRecord(context.Background(), ctx.GetTableCtx(), kv.IntHandle(8), types.MakeDatums(8, 8), types.MakeDatums(8, 7), touchedSlice(writeTbl)) + err = writeTbl.UpdateRecord(ctx.GetTableCtx(), txn, kv.IntHandle(8), types.MakeDatums(8, 8), types.MakeDatums(8, 7), touchedSlice(writeTbl)) if err != nil { return errors.Trace(err) } @@ -344,7 +334,7 @@ func checkDropWriteOnly(ctx sessionctx.Context, publicTbl, writeTbl table.Table) } // WriteOnlyTable delete t where c1 = 8 - err = writeTbl.RemoveRecord(ctx.GetTableCtx(), kv.IntHandle(8), types.MakeDatums(8, 7)) + err = writeTbl.RemoveRecord(ctx.GetTableCtx(), txn, kv.IntHandle(8), types.MakeDatums(8, 7)) if err != nil { return errors.Trace(err) } @@ -353,20 +343,16 @@ func checkDropWriteOnly(ctx sessionctx.Context, publicTbl, writeTbl table.Table) if err != nil { return errors.Trace(err) } - txn, err := ctx.Txn(true) - if err != nil { - return errors.Trace(err) - } return txn.Commit(context.Background()) } func checkDropDeleteOnly(ctx sessionctx.Context, writeTbl, delTbl table.Table) error { // WriteOnlyTable insert t values (9, 9) - err := sessiontxn.NewTxn(context.Background(), ctx) + txn, err := newTxn(ctx) if err != nil { return errors.Trace(err) } - _, err = writeTbl.AddRecord(ctx.GetTableCtx(), types.MakeDatums(9, 9)) + _, err = writeTbl.AddRecord(ctx.GetTableCtx(), txn, types.MakeDatums(9, 9)) if err != nil { return errors.Trace(err) } @@ -377,7 +363,7 @@ func checkDropDeleteOnly(ctx sessionctx.Context, writeTbl, delTbl table.Table) e } // DeleteOnlyTable insert t values (10, 10) - _, err = delTbl.AddRecord(ctx.GetTableCtx(), types.MakeDatums(10, 10)) + _, err = delTbl.AddRecord(ctx.GetTableCtx(), txn, types.MakeDatums(10, 10)) if err != nil { return errors.Trace(err) } @@ -388,7 +374,7 @@ func checkDropDeleteOnly(ctx sessionctx.Context, writeTbl, delTbl table.Table) e } // DeleteOnlyTable update t set c2 = 10 where c1 = 9 - err = delTbl.UpdateRecord(context.Background(), ctx.GetTableCtx(), kv.IntHandle(9), types.MakeDatums(9, 9), types.MakeDatums(9, 10), touchedSlice(delTbl)) + err = delTbl.UpdateRecord(ctx.GetTableCtx(), txn, kv.IntHandle(9), types.MakeDatums(9, 9), types.MakeDatums(9, 10), touchedSlice(delTbl)) if err != nil { return errors.Trace(err) } @@ -402,9 +388,5 @@ func checkDropDeleteOnly(ctx sessionctx.Context, writeTbl, delTbl table.Table) e if err != nil { return errors.Trace(err) } - txn, err := ctx.Txn(true) - if err != nil { - return errors.Trace(err) - } return txn.Commit(context.Background()) } diff --git a/pkg/ddl/index_cop.go b/pkg/ddl/index_cop.go index 30d6f70c8b9e0..547ee400d1a41 100644 --- a/pkg/ddl/index_cop.go +++ b/pkg/ddl/index_cop.go @@ -16,14 +16,10 @@ package ddl import ( "context" - "encoding/hex" - "sync" "time" "github.com/pingcap/errors" - "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/ddl/copr" - "github.com/pingcap/tidb/pkg/ddl/ingest" sess "github.com/pingcap/tidb/pkg/ddl/session" "github.com/pingcap/tidb/pkg/distsql" distsqlctx "github.com/pingcap/tidb/pkg/distsql/context" @@ -31,155 +27,19 @@ import ( "github.com/pingcap/tidb/pkg/expression" exprctx "github.com/pingcap/tidb/pkg/expression/context" "github.com/pingcap/tidb/pkg/kv" - "github.com/pingcap/tidb/pkg/metrics" "github.com/pingcap/tidb/pkg/parser/model" - "github.com/pingcap/tidb/pkg/parser/terror" - "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/table" "github.com/pingcap/tidb/pkg/table/tables" "github.com/pingcap/tidb/pkg/tablecodec" "github.com/pingcap/tidb/pkg/types" - "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/chunk" "github.com/pingcap/tidb/pkg/util/codec" "github.com/pingcap/tidb/pkg/util/collate" - "github.com/pingcap/tidb/pkg/util/dbterror" - "github.com/pingcap/tidb/pkg/util/logutil" "github.com/pingcap/tidb/pkg/util/timeutil" "github.com/pingcap/tipb/go-tipb" kvutil "github.com/tikv/client-go/v2/util" - "go.uber.org/zap" ) -// copReadBatchSize is the batch size of coprocessor read. -// It multiplies the tidb_ddl_reorg_batch_size by 10 to avoid -// sending too many cop requests for the same handle range. -func copReadBatchSize() int { - return 10 * int(variable.GetDDLReorgBatchSize()) -} - -// copReadChunkPoolSize is the size of chunk pool, which -// represents the max concurrent ongoing coprocessor requests. -// It multiplies the tidb_ddl_reorg_worker_cnt by 10. -func copReadChunkPoolSize() int { - return 10 * int(variable.GetDDLReorgWorkerCounter()) -} - -// chunkSender is used to receive the result of coprocessor request. -type chunkSender interface { - AddTask(IndexRecordChunk) -} - -type copReqSenderPool struct { - tasksCh chan *reorgBackfillTask - chunkSender chunkSender - checkpointMgr *ingest.CheckpointManager - sessPool *sess.Pool - - ctx context.Context - copCtx copr.CopContext - store kv.Storage - - senders []*copReqSender - wg sync.WaitGroup - closed bool - - srcChkPool chan *chunk.Chunk -} - -type copReqSender struct { - senderPool *copReqSenderPool - - ctx context.Context - cancel context.CancelFunc -} - -func (c *copReqSender) run() { - p := c.senderPool - defer p.wg.Done() - defer util.Recover(metrics.LabelDDL, "copReqSender.run", func() { - p.chunkSender.AddTask(IndexRecordChunk{Err: dbterror.ErrReorgPanic}) - }, false) - sessCtx, err := p.sessPool.Get() - if err != nil { - logutil.Logger(p.ctx).Error("copReqSender get session from pool failed", zap.Error(err)) - p.chunkSender.AddTask(IndexRecordChunk{Err: err}) - return - } - se := sess.NewSession(sessCtx) - defer p.sessPool.Put(sessCtx) - var ( - task *reorgBackfillTask - ok bool - ) - - for { - select { - case <-c.ctx.Done(): - return - case task, ok = <-p.tasksCh: - } - if !ok { - return - } - if p.checkpointMgr != nil && p.checkpointMgr.IsKeyProcessed(task.endKey) { - logutil.Logger(p.ctx).Info("checkpoint detected, skip a cop-request task", - zap.Int("task ID", task.id), - zap.String("task end key", hex.EncodeToString(task.endKey))) - continue - } - err := scanRecords(p, task, se) - if err != nil { - p.chunkSender.AddTask(IndexRecordChunk{ID: task.id, Err: err}) - return - } - } -} - -func scanRecords(p *copReqSenderPool, task *reorgBackfillTask, se *sess.Session) error { - logutil.Logger(p.ctx).Info("start a cop-request task", - zap.Int("id", task.id), zap.Stringer("task", task)) - - return wrapInBeginRollback(se, func(startTS uint64) error { - rs, err := buildTableScan(p.ctx, p.copCtx.GetBase(), startTS, task.startKey, task.endKey) - if err != nil { - return err - } - failpoint.Inject("mockCopSenderPanic", func(val failpoint.Value) { - if val.(bool) { - panic("mock panic") - } - }) - if p.checkpointMgr != nil { - p.checkpointMgr.Register(task.id, task.endKey) - } - var done bool - startTime := time.Now() - for !done { - srcChk := p.getChunk() - done, err = fetchTableScanResult(p.ctx, p.copCtx.GetBase(), rs, srcChk) - if err != nil { - p.recycleChunk(srcChk) - terror.Call(rs.Close) - return err - } - if p.checkpointMgr != nil { - p.checkpointMgr.UpdateTotalKeys(task.id, srcChk.NumRows(), done) - } - idxRs := IndexRecordChunk{ID: task.id, Chunk: srcChk, Done: done} - rate := float64(srcChk.MemoryUsage()) / 1024.0 / 1024.0 / time.Since(startTime).Seconds() - metrics.AddIndexScanRate.WithLabelValues(metrics.LblAddIndex).Observe(rate) - failpoint.Inject("mockCopSenderError", func() { - idxRs.Err = errors.New("mock cop error") - }) - p.chunkSender.AddTask(idxRs) - startTime = time.Now() - } - terror.Call(rs.Close) - return nil - }) -} - func wrapInBeginRollback(se *sess.Session, f func(startTS uint64) error) error { err := se.Begin(context.Background()) if err != nil { @@ -194,81 +54,6 @@ func wrapInBeginRollback(se *sess.Session, f func(startTS uint64) error) error { return f(startTS) } -func newCopReqSenderPool(ctx context.Context, copCtx copr.CopContext, store kv.Storage, - taskCh chan *reorgBackfillTask, sessPool *sess.Pool, - checkpointMgr *ingest.CheckpointManager) *copReqSenderPool { - poolSize := copReadChunkPoolSize() - srcChkPool := make(chan *chunk.Chunk, poolSize) - for i := 0; i < poolSize; i++ { - srcChkPool <- chunk.NewChunkWithCapacity(copCtx.GetBase().FieldTypes, copReadBatchSize()) - } - return &copReqSenderPool{ - tasksCh: taskCh, - ctx: ctx, - copCtx: copCtx, - store: store, - senders: make([]*copReqSender, 0, variable.GetDDLReorgWorkerCounter()), - wg: sync.WaitGroup{}, - srcChkPool: srcChkPool, - sessPool: sessPool, - checkpointMgr: checkpointMgr, - } -} - -func (c *copReqSenderPool) adjustSize(n int) { - // Add some senders. - for i := len(c.senders); i < n; i++ { - ctx, cancel := context.WithCancel(c.ctx) - c.senders = append(c.senders, &copReqSender{ - senderPool: c, - ctx: ctx, - cancel: cancel, - }) - c.wg.Add(1) - go c.senders[i].run() - } - // Remove some senders. - if n < len(c.senders) { - for i := n; i < len(c.senders); i++ { - c.senders[i].cancel() - } - c.senders = c.senders[:n] - } -} - -func (c *copReqSenderPool) close(force bool) { - if c.closed { - return - } - logutil.Logger(c.ctx).Info("close cop-request sender pool", zap.Bool("force", force)) - if force { - for _, w := range c.senders { - w.cancel() - } - } - // Wait for all cop-req senders to exit. - c.wg.Wait() - c.closed = true -} - -func (c *copReqSenderPool) getChunk() *chunk.Chunk { - chk := <-c.srcChkPool - newCap := copReadBatchSize() - if chk.Capacity() != newCap { - chk = chunk.NewChunkWithCapacity(c.copCtx.GetBase().FieldTypes, newCap) - } - chk.Reset() - return chk -} - -// recycleChunk puts the index record slice and the chunk back to the pool for reuse. -func (c *copReqSenderPool) recycleChunk(chk *chunk.Chunk) { - if chk == nil { - return - } - c.srcChkPool <- chk -} - func buildTableScan(ctx context.Context, c *copr.CopContextBase, startTS uint64, start, end kv.Key) (distsql.SelectResult, error) { dagPB, err := buildDAGPB(c.ExprCtx, c.DistSQLCtx, c.PushDownFlags, c.TableInfo, c.ColumnInfos) if err != nil { @@ -363,13 +148,14 @@ func buildDAGPB(exprCtx exprctx.BuildContext, distSQLCtx *distsqlctx.DistSQLCont } func constructTableScanPB(ctx exprctx.BuildContext, tblInfo *model.TableInfo, colInfos []*model.ColumnInfo) (*tipb.Executor, error) { - tblScan := tables.BuildTableScanFromInfos(tblInfo, colInfos) + tblScan := tables.BuildTableScanFromInfos(tblInfo, colInfos, false) tblScan.TableId = tblInfo.ID err := tables.SetPBColumnsDefaultValue(ctx, tblScan.Columns, colInfos) return &tipb.Executor{Tp: tipb.ExecType_TypeTableScan, TblScan: tblScan}, err } -func extractDatumByOffsets(ctx expression.EvalContext, row chunk.Row, offsets []int, expCols []*expression.Column, buf []types.Datum) []types.Datum { +// ExtractDatumByOffsets is exported for test. +func ExtractDatumByOffsets(ctx expression.EvalContext, row chunk.Row, offsets []int, expCols []*expression.Column, buf []types.Datum) []types.Datum { for i, offset := range offsets { c := expCols[offset] row.DatumWithBuffer(offset, c.GetType(ctx), &buf[i]) @@ -377,7 +163,8 @@ func extractDatumByOffsets(ctx expression.EvalContext, row chunk.Row, offsets [] return buf } -func buildHandle(pkDts []types.Datum, tblInfo *model.TableInfo, +// BuildHandle is exported for test. +func BuildHandle(pkDts []types.Datum, tblInfo *model.TableInfo, pkInfo *model.IndexInfo, loc *time.Location, errCtx errctx.Context) (kv.Handle, error) { if tblInfo.IsCommonHandle { tablecodec.TruncateIndexValues(tblInfo, pkInfo, pkDts) diff --git a/pkg/ddl/index_cop_test.go b/pkg/ddl/index_cop_test.go index 28f07752ab6ed..7c2f8fb2c15d3 100644 --- a/pkg/ddl/index_cop_test.go +++ b/pkg/ddl/index_cop_test.go @@ -50,7 +50,7 @@ func TestAddIndexFetchRowsFromCoprocessor(t *testing.T) { endKey := startKey.PrefixNext() txn, err := store.Begin() require.NoError(t, err) - copChunk := ddl.FetchChunk4Test(copCtx, tbl.(table.PhysicalTable), startKey, endKey, store, 10) + copChunk, err := FetchChunk4Test(copCtx, tbl.(table.PhysicalTable), startKey, endKey, store, 10) require.NoError(t, err) require.NoError(t, txn.Rollback()) @@ -61,7 +61,7 @@ func TestAddIndexFetchRowsFromCoprocessor(t *testing.T) { idxDataBuf := make([]types.Datum, len(idxInfo.Columns)) for row := iter.Begin(); row != iter.End(); row = iter.Next() { - handle, idxDatum, err := ddl.ConvertRowToHandleAndIndexDatum(tk.Session().GetExprCtx().GetEvalCtx(), handleDataBuf, idxDataBuf, row, copCtx, idxInfo.ID) + handle, idxDatum, err := ConvertRowToHandleAndIndexDatum(tk.Session().GetExprCtx().GetEvalCtx(), handleDataBuf, idxDataBuf, row, copCtx, idxInfo.ID) require.NoError(t, err) handles = append(handles, handle) copiedIdxDatum := make([]types.Datum, len(idxDatum)) diff --git a/pkg/ddl/index_modify_test.go b/pkg/ddl/index_modify_test.go index 7639e8c2a55f0..e0a38c17919f6 100644 --- a/pkg/ddl/index_modify_test.go +++ b/pkg/ddl/index_modify_test.go @@ -689,7 +689,7 @@ func TestAddGlobalIndex(t *testing.T) { " (partition p0 values less than (10), " + " partition p1 values less than (maxvalue));") tk.MustExec("insert test_t1 values (1, 1)") - tk.MustExec("alter table test_t1 add unique index p_a (a);") + tk.MustExec("alter table test_t1 add unique index p_a (a) global") tk.MustExec("insert test_t1 values (2, 11)") tbl := external.GetTableByName(t, tk, "test", "test_t1") tblInfo := tbl.Meta() @@ -719,7 +719,7 @@ func TestAddGlobalIndex(t *testing.T) { " (partition p0 values less than (10), " + " partition p1 values less than (maxvalue));") tk.MustExec("insert test_t2 values (1, 1)") - tk.MustExec("alter table test_t2 add primary key (a) nonclustered;") + tk.MustExec("alter table test_t2 add primary key (a) nonclustered global") tk.MustExec("insert test_t2 values (2, 11)") tbl = external.GetTableByName(t, tk, "test", "test_t2") tblInfo = tbl.Meta() @@ -744,6 +744,24 @@ func TestAddGlobalIndex(t *testing.T) { checkGlobalIndexRow(t, tk.Session(), tblInfo, indexInfo, pid, idxVals, rowVals) require.NoError(t, txn.Commit(context.Background())) + + // `sanity_check.go` will check the del_range numbers are correct or not. + // normal index + tk.MustExec("drop table if exists t") + tk.MustExec("create table t(a int, b int) partition by hash(b) partitions 64") + tk.MustExec("alter table t add unique index idx(a) global") + + // meets duplicate + tk.MustExec("drop table t") + tk.MustExec("create table t(a int, b int) partition by hash(b) partitions 64") + tk.MustExec("insert into t values (1, 2), (1, 3)") + // Duplicate + tk.MustContainErrMsg("alter table t add unique index idx(a) global", "[kv:1062]Duplicate entry '1' for key 't.idx'") + + // with multi schema change + tk.MustExec("drop table t") + tk.MustExec("create table t(a int, b int) partition by hash(b) partitions 64") + tk.MustExec("alter table t add unique index idx(a) global, add index idx1(b)") } // checkGlobalIndexRow reads one record from global index and check. Only support int handle. @@ -1029,7 +1047,7 @@ func TestAddIndexUniqueFailOnDuplicate(t *testing.T) { tk.MustExec("create table t (a bigint primary key clustered, b int);") // The subtask execution order is not guaranteed in distributed reorg. We need to disable it first. tk.MustExec("set @@global.tidb_enable_dist_task = 0;") - tk.MustExec("set @@global.tidb_ddl_reorg_worker_cnt = 1;") + tk.MustExec("set @@tidb_ddl_reorg_worker_cnt = 1;") for i := 1; i <= 12; i++ { tk.MustExec("insert into t values (?, ?)", i, i) } diff --git a/pkg/ddl/index_test.go b/pkg/ddl/index_test.go index 5e5fe1a0564a6..ba89046bf6fa7 100644 --- a/pkg/ddl/index_test.go +++ b/pkg/ddl/index_test.go @@ -31,7 +31,6 @@ func TestDecodeAddIndexArgsCompatibility(t *testing.T) { indexPartSpecifications [][]*ast.IndexPartSpecification indexOptions []*ast.IndexOption hiddenCols [][]*model.ColumnInfo - globals []bool }{ { raw: json.RawMessage(`[ @@ -74,7 +73,6 @@ false]`), }, indexOptions: []*ast.IndexOption{nil}, hiddenCols: [][]*model.ColumnInfo{{}}, - globals: []bool{false}, }, { raw: json.RawMessage(`[ @@ -134,19 +132,17 @@ false]`), }, indexOptions: []*ast.IndexOption{nil, nil}, hiddenCols: [][]*model.ColumnInfo{{}, {}}, - globals: []bool{false, false}, }, } for _, c := range cases { job := &model.Job{RawArgs: c.raw} - uniques, indexNames, specs, indexOptions, hiddenCols, globals, err := decodeAddIndexArgs(job) + uniques, indexNames, specs, indexOptions, hiddenCols, err := decodeAddIndexArgs(job) require.NoError(t, err) require.Equal(t, c.uniques, uniques) require.Equal(t, c.indexNames, indexNames) require.Equal(t, c.indexPartSpecifications, specs) require.Equal(t, c.indexOptions, indexOptions) require.Equal(t, c.hiddenCols, hiddenCols) - require.Equal(t, c.globals, globals) } } diff --git a/pkg/ddl/ingest/BUILD.bazel b/pkg/ddl/ingest/BUILD.bazel index 82c5b95074937..d9cffd0c1a3a8 100644 --- a/pkg/ddl/ingest/BUILD.bazel +++ b/pkg/ddl/ingest/BUILD.bazel @@ -31,7 +31,6 @@ go_library( "//pkg/lightning/checkpoints", "//pkg/lightning/common", "//pkg/lightning/config", - "//pkg/lightning/errormanager", "//pkg/lightning/log", "//pkg/meta", "//pkg/parser/model", @@ -76,12 +75,9 @@ go_test( shard_count = 20, deps = [ "//pkg/config", - "//pkg/ddl", "//pkg/ddl/ingest/testutil", "//pkg/ddl/session", "//pkg/ddl/testutil", - "//pkg/ddl/util/callback", - "//pkg/domain", "//pkg/errno", "//pkg/parser/model", "//pkg/testkit", diff --git a/pkg/ddl/ingest/backend.go b/pkg/ddl/ingest/backend.go index 6a8a4e0e6666a..5098192551fb1 100644 --- a/pkg/ddl/ingest/backend.go +++ b/pkg/ddl/ingest/backend.go @@ -29,7 +29,6 @@ import ( "github.com/pingcap/tidb/pkg/lightning/backend/local" "github.com/pingcap/tidb/pkg/lightning/common" lightning "github.com/pingcap/tidb/pkg/lightning/config" - "github.com/pingcap/tidb/pkg/lightning/errormanager" "github.com/pingcap/tidb/pkg/lightning/log" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/mysql" @@ -95,7 +94,7 @@ type litBackendCtx struct { tbl table.Table backend *local.Backend ctx context.Context - cfg *lightning.Config + cfg *local.BackendConfig sysVars map[string]string flushing atomic.Bool @@ -148,8 +147,7 @@ func (bc *litBackendCtx) CollectRemoteDuplicateRows(indexID int64, tbl table.Tab } func (bc *litBackendCtx) collectRemoteDuplicateRows(indexID int64, tbl table.Table) error { - errorMgr := errormanager.New(nil, bc.cfg, log.Logger{Logger: logutil.Logger(bc.ctx)}) - dupeController := bc.backend.GetDupeController(bc.cfg.TikvImporter.RangeConcurrency*2, errorMgr) + dupeController := bc.backend.GetDupeController(bc.cfg.WorkerConcurrency, nil) hasDupe, err := dupeController.CollectRemoteDuplicateRows(bc.ctx, tbl, tbl.Meta().Name.L, &encode.SessionOptions{ SQLMode: mysql.ModeStrictAllTables, SysVars: bc.sysVars, diff --git a/pkg/ddl/ingest/backend_mgr.go b/pkg/ddl/ingest/backend_mgr.go index 068047e5a8710..74300de29869f 100644 --- a/pkg/ddl/ingest/backend_mgr.go +++ b/pkg/ddl/ingest/backend_mgr.go @@ -17,6 +17,7 @@ package ingest import ( "context" "math" + "net" "os" "path/filepath" "strconv" @@ -24,11 +25,11 @@ import ( "time" "github.com/pingcap/failpoint" + "github.com/pingcap/tidb/pkg/config" ddllogutil "github.com/pingcap/tidb/pkg/ddl/logutil" "github.com/pingcap/tidb/pkg/lightning/backend/local" - "github.com/pingcap/tidb/pkg/lightning/config" + "github.com/pingcap/tidb/pkg/lightning/common" "github.com/pingcap/tidb/pkg/util/logutil" - kvutil "github.com/tikv/client-go/v2/util" pd "github.com/tikv/pd/client" clientv3 "go.etcd.io/etcd/client/v3" "go.uber.org/atomic" @@ -49,6 +50,7 @@ type BackendCtxMgr interface { etcdClient *clientv3.Client, pdSvcDiscovery pd.ServiceDiscovery, resourceGroupName string, + importConc int, ) (BackendCtx, error) Unregister(jobID int64) // EncodeJobSortPath encodes the job ID to the local disk sort path. @@ -114,6 +116,7 @@ func (m *litBackendCtxMgr) Register( etcdClient *clientv3.Client, pdSvcDiscovery pd.ServiceDiscovery, resourceGroupName string, + concurrency int, ) (BackendCtx, error) { bc, exist := m.Load(jobID) if exist { @@ -131,7 +134,7 @@ func (m *litBackendCtxMgr) Register( logutil.Logger(ctx).Error(LitErrCreateDirFail, zap.Error(err)) return nil, err } - cfg, err := genConfig(ctx, sortPath, m.memRoot, hasUnique, resourceGroupName) + cfg, err := genConfig(ctx, sortPath, m.memRoot, hasUnique, resourceGroupName, concurrency) if err != nil { logutil.Logger(ctx).Warn(LitWarnConfigError, zap.Int64("job ID", jobID), zap.Error(err)) return nil, err @@ -150,7 +153,7 @@ func (m *litBackendCtxMgr) Register( return nil, err } - bcCtx := newBackendContext(ctx, jobID, bd, cfg.lightning, defaultImportantVariables, m.memRoot, m.diskRoot, etcdClient) + bcCtx := newBackendContext(ctx, jobID, bd, cfg, defaultImportantVariables, m.memRoot, m.diskRoot, etcdClient) m.backends.m[jobID] = bcCtx m.memRoot.Consume(structSizeBackendCtx) m.backends.mu.Unlock() @@ -169,23 +172,26 @@ func (m *litBackendCtxMgr) EncodeJobSortPath(jobID int64) string { func createLocalBackend( ctx context.Context, - cfg *litConfig, + cfg *local.BackendConfig, pdSvcDiscovery pd.ServiceDiscovery, ) (*local.Backend, error) { - tls, err := cfg.lightning.ToTLS() + tidbCfg := config.GetGlobalConfig() + tls, err := common.NewTLS( + tidbCfg.Security.ClusterSSLCA, + tidbCfg.Security.ClusterSSLCert, + tidbCfg.Security.ClusterSSLKey, + net.JoinHostPort("127.0.0.1", strconv.Itoa(int(tidbCfg.Status.StatusPort))), + nil, nil, nil, + ) if err != nil { logutil.Logger(ctx).Error(LitErrCreateBackendFail, zap.Error(err)) return nil, err } ddllogutil.DDLIngestLogger().Info("create local backend for adding index", - zap.String("sortDir", cfg.lightning.TikvImporter.SortedKVDir), - zap.String("keyspaceName", cfg.keyspaceName)) - // We disable the switch TiKV mode feature for now, - // because the impact is not fully tested. - var raftKV2SwitchModeDuration time.Duration - backendConfig := local.NewBackendConfig(cfg.lightning, int(litRLimit), cfg.keyspaceName, cfg.resourceGroup, kvutil.ExplicitTypeDDL, raftKV2SwitchModeDuration) - return local.NewBackend(ctx, tls, backendConfig, pdSvcDiscovery) + zap.String("sortDir", cfg.LocalStoreDir), + zap.String("keyspaceName", cfg.KeyspaceName)) + return local.NewBackend(ctx, tls, *cfg, pdSvcDiscovery) } const checkpointUpdateInterval = 10 * time.Minute @@ -194,7 +200,7 @@ func newBackendContext( ctx context.Context, jobID int64, be *local.Backend, - cfg *config.Config, + cfg *local.BackendConfig, vars map[string]string, memRoot MemRoot, diskRoot DiskRoot, diff --git a/pkg/ddl/ingest/checkpoint.go b/pkg/ddl/ingest/checkpoint.go index 2d1536905736c..0575dd27af966 100644 --- a/pkg/ddl/ingest/checkpoint.go +++ b/pkg/ddl/ingest/checkpoint.go @@ -156,9 +156,9 @@ func (s *CheckpointManager) IsKeyProcessed(end kv.Key) bool { return s.localDataIsValid && len(s.flushedKeyLowWatermark) > 0 && end.Cmp(s.flushedKeyLowWatermark) <= 0 } -// LastProcessedKey finds the last processed key in checkpoint. -// If there is no processed key, it returns nil. -func (s *CheckpointManager) LastProcessedKey() kv.Key { +// NextKeyToProcess finds the next unprocessed key in checkpoint. +// If there is no such key, it returns nil. +func (s *CheckpointManager) NextKeyToProcess() kv.Key { s.mu.Lock() defer s.mu.Unlock() diff --git a/pkg/ddl/ingest/config.go b/pkg/ddl/ingest/config.go index c6b59a531c5cd..58686c1d918c2 100644 --- a/pkg/ddl/ingest/config.go +++ b/pkg/ddl/ingest/config.go @@ -17,78 +17,91 @@ package ingest import ( "context" "net" + "runtime" "strconv" "sync/atomic" tidb "github.com/pingcap/tidb/pkg/config" "github.com/pingcap/tidb/pkg/lightning/backend" + "github.com/pingcap/tidb/pkg/lightning/backend/local" "github.com/pingcap/tidb/pkg/lightning/checkpoints" "github.com/pingcap/tidb/pkg/lightning/common" lightning "github.com/pingcap/tidb/pkg/lightning/config" "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/util/logutil" "github.com/pingcap/tidb/pkg/util/size" + kvutil "github.com/tikv/client-go/v2/util" "go.uber.org/zap" ) // ImporterRangeConcurrencyForTest is only used for test. var ImporterRangeConcurrencyForTest *atomic.Int32 -// litConfig is the configuration for the lightning local backend used in DDL. -type litConfig struct { - lightning *lightning.Config - keyspaceName string - isRaftKV2 bool - resourceGroup string -} - func genConfig( ctx context.Context, jobSortPath string, memRoot MemRoot, unique bool, resourceGroup string, -) (*litConfig, error) { - tidbCfg := tidb.GetGlobalConfig() - cfg := lightning.NewConfig() - cfg.TikvImporter.Backend = lightning.BackendLocal + concurrency int, +) (*local.BackendConfig, error) { + cfg := &local.BackendConfig{ + LocalStoreDir: jobSortPath, + ResourceGroupName: resourceGroup, + MaxConnPerStore: concurrency, + WorkerConcurrency: concurrency * 2, + KeyspaceName: tidb.GetGlobalKeyspaceName(), + // We disable the switch TiKV mode feature for now, because the impact is not + // fully tested. + ShouldCheckWriteStall: true, + + // lighting default values + CheckpointEnabled: true, + BlockSize: lightning.DefaultBlockSize, + KVWriteBatchSize: lightning.KVWriteBatchSize, + RegionSplitBatchSize: lightning.DefaultRegionSplitBatchSize, + RegionSplitConcurrency: runtime.GOMAXPROCS(0), + MemTableSize: lightning.DefaultEngineMemCacheSize, + LocalWriterMemCacheSize: lightning.DefaultLocalWriterMemCacheSize, + ShouldCheckTiKV: true, + MaxOpenFiles: int(litRLimit), + PausePDSchedulerScope: lightning.PausePDSchedulerScopeTable, + TaskType: kvutil.ExplicitTypeDDL, + DisableAutomaticCompactions: true, + } // Each backend will build a single dir in lightning dir. - cfg.TikvImporter.SortedKVDir = jobSortPath if ImporterRangeConcurrencyForTest != nil { - cfg.TikvImporter.RangeConcurrency = int(ImporterRangeConcurrencyForTest.Load()) - } else { - cfg.TikvImporter.RangeConcurrency = int(variable.GetDDLReorgWorkerCounter()) - } - err := cfg.AdjustForDDL() - if err != nil { - logutil.Logger(ctx).Warn(LitWarnConfigError, zap.Error(err)) - return nil, err + cfg.WorkerConcurrency = int(ImporterRangeConcurrencyForTest.Load()) * 2 } adjustImportMemory(ctx, memRoot, cfg) - cfg.Checkpoint.Enable = true if unique { - cfg.Conflict.Strategy = lightning.ErrorOnDup - cfg.Conflict.Threshold = lightning.DefaultRecordDuplicateThreshold + cfg.DupeDetectEnabled = true + cfg.DuplicateDetectOpt = common.DupDetectOpt{ReportErrOnDup: true} } else { - cfg.Conflict.Strategy = lightning.NoneOnDup + cfg.DupeDetectEnabled = false } - cfg.TiDB.Host = "127.0.0.1" - cfg.TiDB.StatusPort = int(tidbCfg.Status.StatusPort) - // Set TLS related information - cfg.Security.CAPath = tidbCfg.Security.ClusterSSLCA - cfg.Security.CertPath = tidbCfg.Security.ClusterSSLCert - cfg.Security.KeyPath = tidbCfg.Security.ClusterSSLKey - // in DDL scenario, we don't switch import mode - cfg.Cron.SwitchMode = lightning.Duration{Duration: 0} - - c := &litConfig{ - lightning: cfg, - keyspaceName: tidb.GetGlobalKeyspaceName(), - isRaftKV2: false, - resourceGroup: resourceGroup, + + return cfg, nil +} + +// CopReadBatchSize is the batch size of coprocessor read. +// It multiplies the tidb_ddl_reorg_batch_size by 10 to avoid +// sending too many cop requests for the same handle range. +func CopReadBatchSize(hintSize int) int { + if hintSize > 0 { + return hintSize } + return 10 * int(variable.GetDDLReorgBatchSize()) +} - return c, nil +// CopReadChunkPoolSize is the size of chunk pool, which +// represents the max concurrent ongoing coprocessor requests. +// It multiplies the tidb_ddl_reorg_worker_cnt by 10. +func CopReadChunkPoolSize(hintConc int) int { + if hintConc > 0 { + return 10 * hintConc + } + return 10 * int(variable.GetDDLReorgWorkerCounter()) } // NewDDLTLS creates a common.TLS from the tidb config for DDL. @@ -124,19 +137,19 @@ func generateLocalEngineConfig(ts uint64) *backend.EngineConfig { } // adjustImportMemory adjusts the lightning memory parameters according to the memory root's max limitation. -func adjustImportMemory(ctx context.Context, memRoot MemRoot, cfg *lightning.Config) { +func adjustImportMemory(ctx context.Context, memRoot MemRoot, cfg *local.BackendConfig) { var scale int64 // Try aggressive resource usage successful. if tryAggressiveMemory(ctx, memRoot, cfg) { return } - defaultMemSize := int64(cfg.TikvImporter.LocalWriterMemCacheSize) * int64(cfg.TikvImporter.RangeConcurrency) - defaultMemSize += 4 * int64(cfg.TikvImporter.EngineMemCacheSize) + defaultMemSize := int64(int(cfg.LocalWriterMemCacheSize) * cfg.WorkerConcurrency / 2) + defaultMemSize += 4 * int64(cfg.MemTableSize) logutil.Logger(ctx).Info(LitInfoInitMemSetting, - zap.Int64("local writer memory cache size", int64(cfg.TikvImporter.LocalWriterMemCacheSize)), - zap.Int64("engine memory cache size", int64(cfg.TikvImporter.EngineMemCacheSize)), - zap.Int("range concurrency", cfg.TikvImporter.RangeConcurrency)) + zap.Int64("local writer memory cache size", cfg.LocalWriterMemCacheSize), + zap.Int("engine memory cache size", cfg.MemTableSize), + zap.Int("worker concurrency", cfg.WorkerConcurrency)) maxLimit := memRoot.MaxMemoryQuota() scale = defaultMemSize / maxLimit @@ -145,28 +158,28 @@ func adjustImportMemory(ctx context.Context, memRoot MemRoot, cfg *lightning.Con return } - cfg.TikvImporter.LocalWriterMemCacheSize /= lightning.ByteSize(scale) - cfg.TikvImporter.EngineMemCacheSize /= lightning.ByteSize(scale) + cfg.LocalWriterMemCacheSize /= scale + cfg.MemTableSize /= int(scale) logutil.Logger(ctx).Info(LitInfoChgMemSetting, - zap.Int64("local writer memory cache size", int64(cfg.TikvImporter.LocalWriterMemCacheSize)), - zap.Int64("engine memory cache size", int64(cfg.TikvImporter.EngineMemCacheSize)), - zap.Int("range concurrency", cfg.TikvImporter.RangeConcurrency)) + zap.Int64("local writer memory cache size", cfg.LocalWriterMemCacheSize), + zap.Int("engine memory cache size", cfg.MemTableSize), + zap.Int("worker concurrency", cfg.WorkerConcurrency)) } // tryAggressiveMemory lightning memory parameters according memory root's max limitation. -func tryAggressiveMemory(ctx context.Context, memRoot MemRoot, cfg *lightning.Config) bool { +func tryAggressiveMemory(ctx context.Context, memRoot MemRoot, cfg *local.BackendConfig) bool { var defaultMemSize int64 - defaultMemSize = int64(int(cfg.TikvImporter.LocalWriterMemCacheSize) * cfg.TikvImporter.RangeConcurrency) - defaultMemSize += int64(cfg.TikvImporter.EngineMemCacheSize) + defaultMemSize = int64(int(cfg.LocalWriterMemCacheSize) * cfg.WorkerConcurrency / 2) + defaultMemSize += int64(cfg.MemTableSize) if (defaultMemSize + memRoot.CurrentUsage()) > memRoot.MaxMemoryQuota() { return false } logutil.Logger(ctx).Info(LitInfoChgMemSetting, - zap.Int64("local writer memory cache size", int64(cfg.TikvImporter.LocalWriterMemCacheSize)), - zap.Int64("engine memory cache size", int64(cfg.TikvImporter.EngineMemCacheSize)), - zap.Int("range concurrency", cfg.TikvImporter.RangeConcurrency)) + zap.Int64("local writer memory cache size", cfg.LocalWriterMemCacheSize), + zap.Int("engine memory cache size", cfg.MemTableSize), + zap.Int("worker concurrency", cfg.WorkerConcurrency)) return true } diff --git a/pkg/ddl/ingest/engine.go b/pkg/ddl/ingest/engine.go index b48b45f59a4c8..7bcdebce101f8 100644 --- a/pkg/ddl/ingest/engine.go +++ b/pkg/ddl/ingest/engine.go @@ -23,7 +23,6 @@ import ( "github.com/pingcap/tidb/pkg/lightning/backend" "github.com/pingcap/tidb/pkg/lightning/backend/kv" "github.com/pingcap/tidb/pkg/lightning/common" - "github.com/pingcap/tidb/pkg/lightning/config" "github.com/pingcap/tidb/pkg/util/generic" "github.com/pingcap/tidb/pkg/util/logutil" "go.uber.org/zap" @@ -55,7 +54,6 @@ type engineInfo struct { uuid uuid.UUID cfg *backend.EngineConfig - litCfg *config.Config writerCache generic.SyncMap[int, backend.EngineWriter] memRoot MemRoot flushLock *sync.RWMutex @@ -67,7 +65,6 @@ func newEngineInfo( jobID, indexID int64, unique bool, cfg *backend.EngineConfig, - litCfg *config.Config, en *backend.OpenedEngine, uuid uuid.UUID, memRoot MemRoot, @@ -78,7 +75,6 @@ func newEngineInfo( indexID: indexID, unique: unique, cfg: cfg, - litCfg: litCfg, openedEngine: en, uuid: uuid, writerCache: generic.NewSyncMap[int, backend.EngineWriter](4), diff --git a/pkg/ddl/ingest/engine_mgr.go b/pkg/ddl/ingest/engine_mgr.go index b856f7496c37f..a36dad357d74e 100644 --- a/pkg/ddl/ingest/engine_mgr.go +++ b/pkg/ddl/ingest/engine_mgr.go @@ -79,7 +79,6 @@ func (bc *litBackendCtx) Register(indexIDs []int64, uniques []bool, tbl table.Ta indexID, uniques[i], cfg, - bc.cfg, openedEngine, openedEngine.GetEngineUUID(), bc.memRoot, diff --git a/pkg/ddl/ingest/integration_test.go b/pkg/ddl/ingest/integration_test.go index 6cbc5b4380362..e47e955b9450c 100644 --- a/pkg/ddl/ingest/integration_test.go +++ b/pkg/ddl/ingest/integration_test.go @@ -21,12 +21,9 @@ import ( "testing" "github.com/pingcap/failpoint" - "github.com/pingcap/tidb/pkg/ddl" "github.com/pingcap/tidb/pkg/ddl/ingest" ingesttestutil "github.com/pingcap/tidb/pkg/ddl/ingest/testutil" "github.com/pingcap/tidb/pkg/ddl/testutil" - "github.com/pingcap/tidb/pkg/ddl/util/callback" - "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/errno" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/testkit" @@ -90,7 +87,7 @@ func TestIngestError(t *testing.T) { tk.MustExec("set global tidb_enable_dist_task = 0") defer ingesttestutil.InjectMockBackendMgr(t, store)() - tk.MustExec("set @@global.tidb_ddl_reorg_worker_cnt = 1;") + tk.MustExec("set @@tidb_ddl_reorg_worker_cnt = 1;") tk.MustExec("create table t (a int primary key, b int);") for i := 0; i < 4; i++ { tk.MustExec(fmt.Sprintf("insert into t values (%d, %d);", i*10000, i*10000)) @@ -158,10 +155,8 @@ func TestAddIndexIngestCancel(t *testing.T) { tk.MustExec("create table t (a int, b int);") tk.MustExec("insert into t (a, b) values (1, 1), (2, 2), (3, 3);") - defHook := dom.DDL().GetHook() - customHook := newTestCallBack(t, dom) cancelled := false - customHook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if cancelled { return } @@ -178,35 +173,15 @@ func TestAddIndexIngestCancel(t *testing.T) { cancelled = true } } - } - dom.DDL().SetHook(customHook) + }) tk.MustGetErrCode("alter table t add index idx(b);", errno.ErrCancelledDDLJob) require.True(t, cancelled) - dom.DDL().SetHook(defHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore") ok, err := ingest.LitBackCtxMgr.CheckMoreTasksAvailable() require.NoError(t, err) require.True(t, ok) } -type testCallback struct { - ddl.Callback - OnJobRunBeforeExported func(job *model.Job) -} - -func newTestCallBack(t *testing.T, dom *domain.Domain) *testCallback { - defHookFactory, err := ddl.GetCustomizedHook("default_hook") - require.NoError(t, err) - return &testCallback{ - Callback: defHookFactory(dom), - } -} - -func (c *testCallback) OnJobRunBefore(job *model.Job) { - if c.OnJobRunBeforeExported != nil { - c.OnJobRunBeforeExported(job) - } -} - func TestIngestPartitionRowCount(t *testing.T) { store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) @@ -240,7 +215,7 @@ func TestAddIndexIngestClientError(t *testing.T) { } func TestAddIndexCancelOnNoneState(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tkCancel := testkit.NewTestKit(t, store) defer ingesttestutil.InjectMockBackendMgr(t, store)() @@ -249,16 +224,14 @@ func TestAddIndexCancelOnNoneState(t *testing.T) { tk.MustExec(`create table t (c1 int, c2 int, c3 int)`) tk.MustExec("insert into t values(1, 1, 1);") - hook := &callback.TestDDLCallback{Do: dom} first := true - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.SchemaState == model.StateNone && first { _, err := tkCancel.Exec(fmt.Sprintf("admin cancel ddl jobs %d", job.ID)) assert.NoError(t, err) first = false } - } - dom.DDL().SetHook(hook.Clone()) + }) tk.MustGetErrCode("alter table t add index idx1(c1)", errno.ErrCancelledDDLJob) available, err := ingest.LitBackCtxMgr.CheckMoreTasksAvailable() require.NoError(t, err) diff --git a/pkg/ddl/ingest/mock.go b/pkg/ddl/ingest/mock.go index 4d9261ecfc672..8d5fe8744dccf 100644 --- a/pkg/ddl/ingest/mock.go +++ b/pkg/ddl/ingest/mock.go @@ -56,7 +56,8 @@ func (m *MockBackendCtxMgr) CheckMoreTasksAvailable() (bool, error) { } // Register implements BackendCtxMgr.Register interface. -func (m *MockBackendCtxMgr) Register(ctx context.Context, jobID int64, unique bool, etcdClient *clientv3.Client, pdSvcDiscovery pd.ServiceDiscovery, resourceGroupName string) (BackendCtx, error) { +func (m *MockBackendCtxMgr) Register(ctx context.Context, jobID int64, unique bool, etcdClient *clientv3.Client, + pdSvcDiscovery pd.ServiceDiscovery, resourceGroupName string, importConc int) (BackendCtx, error) { logutil.DDLIngestLogger().Info("mock backend mgr register", zap.Int64("jobID", jobID)) if mockCtx, ok := m.runningJobs[jobID]; ok { return mockCtx, nil diff --git a/pkg/ddl/integration_test.go b/pkg/ddl/integration_test.go index e323154dc1bb9..581e6bad3d5e2 100644 --- a/pkg/ddl/integration_test.go +++ b/pkg/ddl/integration_test.go @@ -17,27 +17,22 @@ package ddl_test import ( "testing" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/testkit" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/stretchr/testify/require" ) func TestDDLStatementsBackFill(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") needReorg := false - callback := &callback.TestDDLCallback{ - Do: dom, - } - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if job.SchemaState == model.StateWriteReorganization { needReorg = true } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - dom.DDL().SetHook(callback) + }) tk.MustExec("create table t (a int, b char(65));") tk.MustExec("insert into t values (1, '123');") testCases := []struct { diff --git a/pkg/ddl/job_table.go b/pkg/ddl/job_scheduler.go similarity index 89% rename from pkg/ddl/job_table.go rename to pkg/ddl/job_scheduler.go index 71de6aea62406..a242e45aae41f 100644 --- a/pkg/ddl/job_table.go +++ b/pkg/ddl/job_scheduler.go @@ -33,8 +33,8 @@ import ( "github.com/pingcap/kvproto/pkg/kvrpcpb" "github.com/pingcap/tidb/pkg/ddl/ingest" "github.com/pingcap/tidb/pkg/ddl/logutil" + "github.com/pingcap/tidb/pkg/ddl/serverstate" sess "github.com/pingcap/tidb/pkg/ddl/session" - "github.com/pingcap/tidb/pkg/ddl/syncer" "github.com/pingcap/tidb/pkg/ddl/systable" "github.com/pingcap/tidb/pkg/ddl/util" "github.com/pingcap/tidb/pkg/kv" @@ -58,7 +58,6 @@ var ( // is a new DDL job. addingDDLJobNotifyKey = "/tidb/ddl/add_ddl_job_general" dispatchLoopWaitingDuration = 1 * time.Second - localWorkerWaitingDuration = 10 * time.Millisecond schedulerLoopRetryInterval = time.Second ) @@ -77,8 +76,6 @@ func (t jobType) String() string { return "general" case jobTypeReorg: return "reorg" - case jobTypeLocal: - return "local" } return "unknown job type: " + strconv.Itoa(int(t)) } @@ -86,7 +83,6 @@ func (t jobType) String() string { const ( jobTypeGeneral jobType = iota jobTypeReorg - jobTypeLocal ) type ownerListener struct { @@ -106,12 +102,15 @@ func (l *ownerListener) OnBecomeOwner() { sysTblMgr: sysTblMgr, schemaLoader: l.ddl.schemaLoader, minJobIDRefresher: l.ddl.minJobIDRefresher, + unSyncedTracker: newUnSyncedJobTracker(), + schemaVerMgr: newSchemaVersionManager(l.ddl.store), ddlCtx: l.ddl.ddlCtx, ddlJobNotifyCh: l.ddl.ddlJobNotifyCh, sessPool: l.ddl.sessPool, delRangeMgr: l.ddl.delRangeMgr, } + l.ddl.reorgCtx.setOwnerTS(time.Now().Unix()) l.scheduler.start() } @@ -132,6 +131,8 @@ type jobScheduler struct { sysTblMgr systable.Manager schemaLoader SchemaLoader minJobIDRefresher *systable.MinJobIDRefresher + unSyncedTracker *unSyncedJobTracker + schemaVerMgr *schemaVersionManager // those fields are created or initialized on start reorgWorkerPool *workerPool @@ -167,7 +168,7 @@ func (s *jobScheduler) start() { s.generalDDLWorkerPool = newDDLWorkerPool(pools.NewResourcePool(workerFactory(generalWorker), generalWorkerCnt, generalWorkerCnt, 0), jobTypeGeneral) s.wg.RunWithLog(s.scheduleLoop) s.wg.RunWithLog(func() { - s.schemaSyncer.SyncJobSchemaVerLoop(s.schCtx) + s.schemaVerSyncer.SyncJobSchemaVerLoop(s.schCtx) }) } @@ -193,7 +194,7 @@ func hasSysDB(job *model.Job) bool { } func (s *jobScheduler) processJobDuringUpgrade(sess *sess.Session, job *model.Job) (isRunnable bool, err error) { - if s.stateSyncer.IsUpgradingState() { + if s.serverStateSyncer.IsUpgradingState() { if job.IsPaused() { return false, nil } @@ -245,21 +246,6 @@ func (s *jobScheduler) processJobDuringUpgrade(sess *sess.Session, job *model.Jo return true, nil } -// startLocalWorkerLoop starts the local worker loop to run the DDL job of v2. -func (d *ddl) startLocalWorkerLoop() { - for { - select { - case <-d.ctx.Done(): - return - case jobW, ok := <-d.localJobCh: - if !ok { - return - } - d.delivery2LocalWorker(d.localWorkerPool, jobW) - } - } -} - func (s *jobScheduler) scheduleLoop() { const retryInterval = 3 * time.Second for { @@ -296,8 +282,6 @@ func (s *jobScheduler) schedule() error { } ticker := time.NewTicker(dispatchLoopWaitingDuration) defer ticker.Stop() - // TODO move waitSchemaSyncedController out of ddlCtx. - s.clearOnceMap() s.mustReloadSchemas() for { @@ -339,11 +323,11 @@ func (s *jobScheduler) schedule() error { // TODO make it run in a separate routine. func (s *jobScheduler) checkAndUpdateClusterState(needUpdate bool) error { select { - case _, ok := <-s.stateSyncer.WatchChan(): + case _, ok := <-s.serverStateSyncer.WatchChan(): if !ok { - // TODO stateSyncer should only be started when we are the owner, and use + // TODO serverStateSyncer should only be started when we are the owner, and use // the context of scheduler, will refactor it later. - s.stateSyncer.Rewatch(s.ddlCtx.ctx) + s.serverStateSyncer.Rewatch(s.ddlCtx.ctx) } default: if !needUpdate { @@ -351,17 +335,17 @@ func (s *jobScheduler) checkAndUpdateClusterState(needUpdate bool) error { } } - oldState := s.stateSyncer.IsUpgradingState() - stateInfo, err := s.stateSyncer.GetGlobalState(s.schCtx) + oldState := s.serverStateSyncer.IsUpgradingState() + stateInfo, err := s.serverStateSyncer.GetGlobalState(s.schCtx) if err != nil { logutil.DDLLogger().Warn("get global state failed", zap.Error(err)) return errors.Trace(err) } logutil.DDLLogger().Info("get global state and global state change", - zap.Bool("oldState", oldState), zap.Bool("currState", s.stateSyncer.IsUpgradingState())) + zap.Bool("oldState", oldState), zap.Bool("currState", s.serverStateSyncer.IsUpgradingState())) ownerOp := owner.OpNone - if stateInfo.State == syncer.StateUpgrading { + if stateInfo.State == serverstate.StateUpgrading { ownerOp = owner.OpSyncUpgradingState } err = s.ownerManager.SetOwnerOpValue(s.schCtx, ownerOp) @@ -465,51 +449,6 @@ func (s *jobScheduler) mustReloadSchemas() { } } -// delivery2LocalWorker runs the DDL job of v2 in local. -// send the result to the error channels in the task. -// delivery2Localworker owns the worker, need to put it back to the pool in this function. -func (d *ddl) delivery2LocalWorker(pool *workerPool, jobW *JobWrapper) { - job := jobW.Job - wk, err := pool.get() - if err != nil { - jobW.NotifyError(err) - return - } - for wk == nil { - select { - case <-d.ctx.Done(): - return - case <-time.After(localWorkerWaitingDuration): - } - wk, err = pool.get() - if err != nil { - jobW.NotifyError(err) - return - } - } - d.wg.Run(func() { - metrics.DDLRunningJobCount.WithLabelValues(pool.tp().String()).Inc() - defer func() { - metrics.DDLRunningJobCount.WithLabelValues(pool.tp().String()).Dec() - }() - - for i := int64(0); i < variable.GetDDLErrorCountLimit(); i++ { - err = wk.HandleLocalDDLJob(d.ddlCtx, job) - // since local the job is not inserted into the ddl job queue, we need to add retry logic here. - if err == nil || !isRetryableError(err) { - break - } - logutil.DDLLogger().Info("handle local ddl job", zap.Int64("retry times", i), zap.Error(err)) - time.Sleep(time.Second) - } - pool.put(wk) - if err != nil { - logutil.DDLLogger().Info("handle ddl job failed", zap.Error(err), zap.Stringer("job", job)) - } - jobW.NotifyError(err) - }) -} - // deliveryJob deliver the job to the worker to run it asynchronously. // the worker will run the job until it's finished, paused or another owner takes // over and finished it. @@ -519,6 +458,7 @@ func (s *jobScheduler) deliveryJob(wk *worker, pool *workerPool, job *model.Job) jobID, involvedSchemaInfos := job.ID, job.GetInvolvingSchemaInfo() s.runningJobs.addRunning(jobID, involvedSchemaInfos) metrics.DDLRunningJobCount.WithLabelValues(pool.tp().String()).Inc() + jobCtx := s.getJobRunCtx() s.wg.Run(func() { defer func() { r := recover() @@ -536,7 +476,7 @@ func (s *jobScheduler) deliveryJob(wk *worker, pool *workerPool, job *model.Job) pool.put(wk) }() for { - err := s.transitOneJobStepAndWaitSync(wk, job) + err := s.transitOneJobStepAndWaitSync(wk, jobCtx, job) if err != nil { logutil.DDLLogger().Info("run job failed", zap.Error(err), zap.Stringer("job", job)) } else if job.InFinalState() { @@ -571,14 +511,30 @@ func (s *jobScheduler) deliveryJob(wk *worker, pool *workerPool, job *model.Job) }) } +func (s *jobScheduler) getJobRunCtx() *jobContext { + return &jobContext{ + ctx: s.schCtx, + unSyncedJobTracker: s.unSyncedTracker, + schemaVersionManager: s.schemaVerMgr, + infoCache: s.infoCache, + autoidCli: s.autoidCli, + store: s.store, + + oldDDLCtx: s.ddlCtx, + } +} + // transitOneJobStepAndWaitSync runs one step of the DDL job, persist it and // waits for other TiDB node to synchronize. -func (s *jobScheduler) transitOneJobStepAndWaitSync(wk *worker, job *model.Job) error { +func (s *jobScheduler) transitOneJobStepAndWaitSync(wk *worker, jobCtx *jobContext, job *model.Job) error { failpoint.InjectCall("beforeRunOneJobStep") ownerID := s.ownerManager.ID() // suppose we failed to sync version last time, we need to check and sync it // before run to maintain the 2-version invariant. - if !job.NotStarted() && (!s.isSynced(job) || !s.maybeAlreadyRunOnce(job.ID)) { + // if owner not change, we need try to sync when it's un-synced. + // if owner changed, we need to try sync it if the job is not started by + // current owner. + if jobCtx.isUnSynced(job.ID) || (job.Started() && !jobCtx.maybeAlreadyRunOnce(job.ID)) { if variable.EnableMDL.Load() { version, err := s.sysTblMgr.GetMDLVer(s.schCtx, job.ID) if err == nil { @@ -586,9 +542,7 @@ func (s *jobScheduler) transitOneJobStepAndWaitSync(wk *worker, job *model.Job) if err != nil { return err } - s.setAlreadyRunOnce(job.ID) s.cleanMDLInfo(job, ownerID) - return nil } else if err != systable.ErrNotFound { wk.jobLogger(job).Warn("check MDL info failed", zap.Error(err)) return err @@ -599,11 +553,11 @@ func (s *jobScheduler) transitOneJobStepAndWaitSync(wk *worker, job *model.Job) time.Sleep(time.Second) return err } - s.setAlreadyRunOnce(job.ID) } + jobCtx.setAlreadyRunOnce(job.ID) } - schemaVer, err := wk.transitOneJobStep(s.ddlCtx, job) + schemaVer, err := wk.transitOneJobStep(s.ddlCtx, jobCtx, job) if err != nil { tidblogutil.Logger(wk.logCtx).Info("handle ddl job failed", zap.Error(err), zap.Stringer("job", job)) return err @@ -625,14 +579,44 @@ func (s *jobScheduler) transitOneJobStepAndWaitSync(wk *worker, job *model.Job) return err } s.cleanMDLInfo(job, ownerID) - s.synced(job) + jobCtx.removeUnSynced(job.ID) - s.mu.RLock() - s.mu.hook.OnJobUpdated(job) - s.mu.RUnlock() + failpoint.InjectCall("onJobUpdated", job) return nil } +// cleanMDLInfo cleans metadata lock info. +func (s *jobScheduler) cleanMDLInfo(job *model.Job, ownerID string) { + if !variable.EnableMDL.Load() { + return + } + var sql string + if tidbutil.IsSysDB(strings.ToLower(job.SchemaName)) { + // DDLs that modify system tables could only happen in upgrade process, + // we should not reference 'owner_id'. Otherwise, there is a circular blocking problem. + sql = fmt.Sprintf("delete from mysql.tidb_mdl_info where job_id = %d", job.ID) + } else { + sql = fmt.Sprintf("delete from mysql.tidb_mdl_info where job_id = %d and owner_id = '%s'", job.ID, ownerID) + } + sctx, _ := s.sessPool.Get() + defer s.sessPool.Put(sctx) + se := sess.NewSession(sctx) + se.GetSessionVars().SetDiskFullOpt(kvrpcpb.DiskFullOpt_AllowedOnAlmostFull) + _, err := se.Execute(s.schCtx, sql, "delete-mdl-info") + if err != nil { + logutil.DDLLogger().Warn("unexpected error when clean mdl info", zap.Int64("job ID", job.ID), zap.Error(err)) + return + } + // TODO we need clean it when version of JobStateRollbackDone is synced also. + if job.State == model.JobStateSynced && s.etcdCli != nil { + path := fmt.Sprintf("%s/%d/", util.DDLAllSchemaVersionsByJob, job.ID) + _, err = s.etcdCli.Delete(s.schCtx, path, clientv3.WithPrefix()) + if err != nil { + logutil.DDLLogger().Warn("delete versions failed", zap.Int64("job ID", job.ID), zap.Error(err)) + } + } +} + func (d *ddl) getTableByTxn(r autoid.Requirement, schemaID, tableID int64) (*model.DBInfo, table.Table, error) { var tbl table.Table var dbInfo *model.DBInfo @@ -679,7 +663,7 @@ func insertDDLJobs2Table(ctx context.Context, se *sess.Session, jobWs ...*JobWra } fmt.Fprintf(&sql, "(%d, %t, %s, %s, %s, %d, %t)", jobW.ID, jobW.MayNeedReorg(), strconv.Quote(job2SchemaIDs(jobW.Job)), strconv.Quote(job2TableIDs(jobW.Job)), - util.WrapKey2String(b), jobW.Type, !jobW.NotStarted()) + util.WrapKey2String(b), jobW.Type, jobW.Started()) } se.GetSessionVars().SetDiskFullOpt(kvrpcpb.DiskFullOpt_AllowedOnAlmostFull) _, err := se.Execute(ctx, sql.String(), "insert_job") @@ -727,12 +711,6 @@ func job2UniqueIDs(job *model.Job, schema bool) string { return strconv.FormatInt(job.TableID, 10) } -func (w *worker) deleteDDLJob(job *model.Job) error { - sql := fmt.Sprintf("delete from mysql.tidb_ddl_job where job_id = %d", job.ID) - _, err := w.sess.Execute(context.Background(), sql, "delete_job") - return errors.Trace(err) -} - func updateDDLJob2Table(se *sess.Session, job *model.Job, updateRawArgs bool) error { b, err := job.Encode(updateRawArgs) if err != nil { diff --git a/pkg/ddl/job_scheduler_test.go b/pkg/ddl/job_scheduler_test.go index 1393fe1e9b7d2..4e4f04cb14e32 100644 --- a/pkg/ddl/job_scheduler_test.go +++ b/pkg/ddl/job_scheduler_test.go @@ -61,3 +61,11 @@ func TestMustReloadSchemas(t *testing.T) { sch.mustReloadSchemas() require.True(t, ctrl.Satisfied()) } + +func TestUnSyncedJobTracker(t *testing.T) { + jt := newUnSyncedJobTracker() + jt.addUnSynced(1) + require.True(t, jt.isUnSynced(1)) + jt.removeUnSynced(1) + require.False(t, jt.isUnSynced(1)) +} diff --git a/pkg/ddl/job_table_test.go b/pkg/ddl/job_scheduler_testkit_test.go similarity index 96% rename from pkg/ddl/job_table_test.go rename to pkg/ddl/job_scheduler_testkit_test.go index 7a016e7b223b3..bc5d11d3d90bf 100644 --- a/pkg/ddl/job_table_test.go +++ b/pkg/ddl/job_scheduler_testkit_test.go @@ -24,7 +24,7 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/tidb/pkg/ddl" - "github.com/pingcap/tidb/pkg/ddl/syncer" + "github.com/pingcap/tidb/pkg/ddl/serverstate" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/testkit/testfailpoint" @@ -187,7 +187,7 @@ func TestUpgradingRelatedJobState(t *testing.T) { {"alter table e2 add index idx3(id)", model.JobStateRollbackDone, errors.New("[ddl:8214]Cancelled DDL job")}, } - testfailpoint.Enable(t, "github.com/pingcap/tidb/pkg/ddl/mockUpgradingState", `return(true)`) + testfailpoint.Enable(t, "github.com/pingcap/tidb/pkg/ddl/serverstate/mockUpgradingState", `return(true)`) // TODO this case only checks that when a job cannot be paused, it can still run normally. // we should add a ut for processJobDuringUpgrade, not this complex integration test. @@ -202,7 +202,7 @@ func TestUpgradingRelatedJobState(t *testing.T) { tk2.MustExec(fmt.Sprintf("admin cancel ddl jobs %d", job.ID)) } if job.State == testCases[num].jobState { - dom.DDL().StateSyncer().UpdateGlobalState(context.Background(), &syncer.StateInfo{State: syncer.StateUpgrading}) + dom.DDL().StateSyncer().UpdateGlobalState(context.Background(), &serverstate.StateInfo{State: serverstate.StateUpgrading}) } }) @@ -214,7 +214,7 @@ func TestUpgradingRelatedJobState(t *testing.T) { _, err := tk.Exec(tc.sql) require.Equal(t, tc.err.Error(), err.Error()) } - dom.DDL().StateSyncer().UpdateGlobalState(context.Background(), &syncer.StateInfo{State: syncer.StateNormalRunning}) + dom.DDL().StateSyncer().UpdateGlobalState(context.Background(), &serverstate.StateInfo{State: serverstate.StateNormalRunning}) } } diff --git a/pkg/ddl/job_submitter.go b/pkg/ddl/job_submitter.go new file mode 100644 index 0000000000000..c80232ff5dbca --- /dev/null +++ b/pkg/ddl/job_submitter.go @@ -0,0 +1,669 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package ddl + +import ( + "context" + "fmt" + "math" + "strconv" + "strings" + "time" + + "github.com/pingcap/errors" + "github.com/pingcap/failpoint" + "github.com/pingcap/kvproto/pkg/kvrpcpb" + "github.com/pingcap/tidb/pkg/config" + "github.com/pingcap/tidb/pkg/ddl/logutil" + sess "github.com/pingcap/tidb/pkg/ddl/session" + ddlutil "github.com/pingcap/tidb/pkg/ddl/util" + "github.com/pingcap/tidb/pkg/infoschema" + "github.com/pingcap/tidb/pkg/kv" + "github.com/pingcap/tidb/pkg/meta" + "github.com/pingcap/tidb/pkg/metrics" + "github.com/pingcap/tidb/pkg/parser/ast" + "github.com/pingcap/tidb/pkg/parser/model" + "github.com/pingcap/tidb/pkg/parser/terror" + "github.com/pingcap/tidb/pkg/sessionctx/variable" + "github.com/pingcap/tidb/pkg/util" + "github.com/pingcap/tidb/pkg/util/dbterror" + "github.com/pingcap/tidb/pkg/util/mathutil" + tikv "github.com/tikv/client-go/v2/kv" + "github.com/tikv/client-go/v2/oracle" + "go.uber.org/zap" +) + +func (d *ddl) limitDDLJobs() { + defer util.Recover(metrics.LabelDDL, "limitDDLJobs", nil, true) + + jobWs := make([]*JobWrapper, 0, batchAddingJobs) + ch := d.limitJobCh + for { + select { + // the channel is never closed + case jobW := <-ch: + jobWs = jobWs[:0] + failpoint.InjectCall("afterGetJobFromLimitCh", ch) + jobLen := len(ch) + jobWs = append(jobWs, jobW) + for i := 0; i < jobLen; i++ { + jobWs = append(jobWs, <-ch) + } + d.addBatchDDLJobs(jobWs) + case <-d.ctx.Done(): + return + } + } +} + +// addBatchDDLJobs gets global job IDs and puts the DDL jobs in the DDL queue. +func (d *ddl) addBatchDDLJobs(jobWs []*JobWrapper) { + startTime := time.Now() + var ( + err error + newWs []*JobWrapper + ) + // DDLForce2Queue is a flag to tell DDL worker to always push the job to the DDL queue. + toTable := !variable.DDLForce2Queue.Load() + fastCreate := variable.EnableFastCreateTable.Load() + if toTable { + if fastCreate { + newWs, err = mergeCreateTableJobs(jobWs) + if err != nil { + logutil.DDLLogger().Warn("failed to merge create table jobs", zap.Error(err)) + } else { + jobWs = newWs + } + } + err = d.addBatchDDLJobs2Table(jobWs) + } else { + err = d.addBatchDDLJobs2Queue(jobWs) + } + var jobs string + for _, jobW := range jobWs { + if err == nil { + err = jobW.cacheErr + } + jobW.NotifyResult(err) + jobs += jobW.Job.String() + "; " + metrics.DDLWorkerHistogram.WithLabelValues(metrics.WorkerAddDDLJob, jobW.Job.Type.String(), + metrics.RetLabel(err)).Observe(time.Since(startTime).Seconds()) + } + if err != nil { + logutil.DDLLogger().Warn("add DDL jobs failed", zap.String("jobs", jobs), zap.Error(err)) + } else { + logutil.DDLLogger().Info("add DDL jobs", + zap.Int("batch count", len(jobWs)), + zap.String("jobs", jobs), + zap.Bool("table", toTable), + zap.Bool("fast_create", fastCreate)) + } +} + +// mergeCreateTableJobs merges CreateTable jobs to CreateTables. +func mergeCreateTableJobs(jobWs []*JobWrapper) ([]*JobWrapper, error) { + if len(jobWs) <= 1 { + return jobWs, nil + } + resJobWs := make([]*JobWrapper, 0, len(jobWs)) + mergeableJobWs := make(map[string][]*JobWrapper, len(jobWs)) + for _, jobW := range jobWs { + // we don't merge jobs with ID pre-allocated. + if jobW.Type != model.ActionCreateTable || jobW.IDAllocated { + resJobWs = append(resJobWs, jobW) + continue + } + // ActionCreateTables doesn't support foreign key now. + tbInfo, ok := jobW.Args[0].(*model.TableInfo) + if !ok || len(tbInfo.ForeignKeys) > 0 { + resJobWs = append(resJobWs, jobW) + continue + } + // CreateTables only support tables of same schema now. + mergeableJobWs[jobW.Job.SchemaName] = append(mergeableJobWs[jobW.Job.SchemaName], jobW) + } + + for schema, jobs := range mergeableJobWs { + total := len(jobs) + if total <= 1 { + resJobWs = append(resJobWs, jobs...) + continue + } + const maxBatchSize = 8 + batchCount := (total + maxBatchSize - 1) / maxBatchSize + start := 0 + for _, batchSize := range mathutil.Divide2Batches(total, batchCount) { + batch := jobs[start : start+batchSize] + job, err := mergeCreateTableJobsOfSameSchema(batch) + if err != nil { + return nil, err + } + start += batchSize + logutil.DDLLogger().Info("merge create table jobs", zap.String("schema", schema), + zap.Int("total", total), zap.Int("batch_size", batchSize)) + + newJobW := &JobWrapper{ + Job: job, + ResultCh: make([]chan jobSubmitResult, 0, batchSize), + } + // merge the result channels. + for _, j := range batch { + newJobW.ResultCh = append(newJobW.ResultCh, j.ResultCh...) + } + resJobWs = append(resJobWs, newJobW) + } + } + return resJobWs, nil +} + +// buildQueryStringFromJobs takes a slice of Jobs and concatenates their +// queries into a single query string. +// Each query is separated by a semicolon and a space. +// Trailing spaces are removed from each query, and a semicolon is appended +// if it's not already present. +func buildQueryStringFromJobs(jobs []*JobWrapper) string { + var queryBuilder strings.Builder + for i, job := range jobs { + q := strings.TrimSpace(job.Query) + if !strings.HasSuffix(q, ";") { + q += ";" + } + queryBuilder.WriteString(q) + + if i < len(jobs)-1 { + queryBuilder.WriteString(" ") + } + } + return queryBuilder.String() +} + +// mergeCreateTableJobsOfSameSchema combine CreateTableJobs to BatchCreateTableJob. +func mergeCreateTableJobsOfSameSchema(jobWs []*JobWrapper) (*model.Job, error) { + if len(jobWs) == 0 { + return nil, errors.Trace(fmt.Errorf("expect non-empty jobs")) + } + + var combinedJob *model.Job + + args := make([]*model.TableInfo, 0, len(jobWs)) + involvingSchemaInfo := make([]model.InvolvingSchemaInfo, 0, len(jobWs)) + var foreignKeyChecks bool + + // if there is any duplicated table name + duplication := make(map[string]struct{}) + for _, job := range jobWs { + if combinedJob == nil { + combinedJob = job.Clone() + combinedJob.Type = model.ActionCreateTables + combinedJob.Args = combinedJob.Args[:0] + foreignKeyChecks = job.Args[1].(bool) + } + // append table job args + info, ok := job.Args[0].(*model.TableInfo) + if !ok { + return nil, errors.Trace(fmt.Errorf("expect model.TableInfo, but got %T", job.Args[0])) + } + args = append(args, info) + + if _, ok := duplication[info.Name.L]; ok { + // return err even if create table if not exists + return nil, infoschema.ErrTableExists.FastGenByArgs("can not batch create tables with same name") + } + + duplication[info.Name.L] = struct{}{} + + involvingSchemaInfo = append(involvingSchemaInfo, + model.InvolvingSchemaInfo{ + Database: job.SchemaName, + Table: info.Name.L, + }) + } + + combinedJob.Args = append(combinedJob.Args, args) + combinedJob.Args = append(combinedJob.Args, foreignKeyChecks) + combinedJob.InvolvingSchemaInfo = involvingSchemaInfo + combinedJob.Query = buildQueryStringFromJobs(jobWs) + + return combinedJob, nil +} + +// addBatchDDLJobs2Table gets global job IDs and puts the DDL jobs in the DDL job table. +func (d *ddl) addBatchDDLJobs2Table(jobWs []*JobWrapper) error { + var err error + + if len(jobWs) == 0 { + return nil + } + + ctx := kv.WithInternalSourceType(d.ctx, kv.InternalTxnDDL) + se, err := d.sessPool.Get() + if err != nil { + return errors.Trace(err) + } + defer d.sessPool.Put(se) + found, err := d.sysTblMgr.HasFlashbackClusterJob(ctx, d.minJobIDRefresher.GetCurrMinJobID()) + if err != nil { + return errors.Trace(err) + } + if found { + return errors.Errorf("Can't add ddl job, have flashback cluster job") + } + + var ( + startTS = uint64(0) + bdrRole = string(ast.BDRRoleNone) + ) + + err = kv.RunInNewTxn(ctx, d.store, true, func(_ context.Context, txn kv.Transaction) error { + t := meta.NewMeta(txn) + + bdrRole, err = t.GetBDRRole() + if err != nil { + return errors.Trace(err) + } + startTS = txn.StartTS() + + if variable.DDLForce2Queue.Load() { + if err := d.checkFlashbackJobInQueue(t); err != nil { + return err + } + } + + return nil + }) + if err != nil { + return errors.Trace(err) + } + + for _, jobW := range jobWs { + job := jobW.Job + job.Version = currentVersion + job.StartTS = startTS + job.BDRRole = bdrRole + + // BDR mode only affects the DDL not from CDC + if job.CDCWriteSource == 0 && bdrRole != string(ast.BDRRoleNone) { + if job.Type == model.ActionMultiSchemaChange && job.MultiSchemaInfo != nil { + for _, subJob := range job.MultiSchemaInfo.SubJobs { + if ast.DeniedByBDR(ast.BDRRole(bdrRole), subJob.Type, job) { + return dbterror.ErrBDRRestrictedDDL.FastGenByArgs(bdrRole) + } + } + } else if ast.DeniedByBDR(ast.BDRRole(bdrRole), job.Type, job) { + return dbterror.ErrBDRRestrictedDDL.FastGenByArgs(bdrRole) + } + } + + setJobStateToQueueing(job) + + if d.serverStateSyncer.IsUpgradingState() && !hasSysDB(job) { + if err = pauseRunningJob(sess.NewSession(se), job, model.AdminCommandBySystem); err != nil { + logutil.DDLUpgradingLogger().Warn("pause user DDL by system failed", zap.Stringer("job", job), zap.Error(err)) + jobW.cacheErr = err + continue + } + logutil.DDLUpgradingLogger().Info("pause user DDL by system successful", zap.Stringer("job", job)) + } + } + + se.GetSessionVars().SetDiskFullOpt(kvrpcpb.DiskFullOpt_AllowedOnAlmostFull) + ddlSe := sess.NewSession(se) + if err = GenGIDAndInsertJobsWithRetry(ctx, ddlSe, jobWs); err != nil { + return errors.Trace(err) + } + for _, jobW := range jobWs { + d.initJobDoneCh(jobW.ID) + } + + return nil +} + +func (d *ddl) initJobDoneCh(jobID int64) { + d.ddlJobDoneChMap.Store(jobID, make(chan struct{}, 1)) +} + +func (d *ddl) addBatchDDLJobs2Queue(jobWs []*JobWrapper) error { + ctx := kv.WithInternalSourceType(context.Background(), kv.InternalTxnDDL) + // lock to reduce conflict + d.globalIDLock.Lock() + defer d.globalIDLock.Unlock() + return kv.RunInNewTxn(ctx, d.store, true, func(_ context.Context, txn kv.Transaction) error { + t := meta.NewMeta(txn) + + count := getRequiredGIDCount(jobWs) + ids, err := t.GenGlobalIDs(count) + if err != nil { + return errors.Trace(err) + } + assignGIDsForJobs(jobWs, ids) + + if err := d.checkFlashbackJobInQueue(t); err != nil { + return errors.Trace(err) + } + + for _, jobW := range jobWs { + job := jobW.Job + job.Version = currentVersion + job.StartTS = txn.StartTS() + setJobStateToQueueing(job) + if err = buildJobDependence(t, job); err != nil { + return errors.Trace(err) + } + jobListKey := meta.DefaultJobListKey + if job.MayNeedReorg() { + jobListKey = meta.AddIndexJobListKey + } + if err = t.EnQueueDDLJob(job, jobListKey); err != nil { + return errors.Trace(err) + } + } + failpoint.Inject("mockAddBatchDDLJobsErr", func(val failpoint.Value) { + if val.(bool) { + failpoint.Return(errors.Errorf("mockAddBatchDDLJobsErr")) + } + }) + return nil + }) +} + +func (*ddl) checkFlashbackJobInQueue(t *meta.Meta) error { + jobs, err := t.GetAllDDLJobsInQueue(meta.DefaultJobListKey) + if err != nil { + return errors.Trace(err) + } + for _, job := range jobs { + if job.Type == model.ActionFlashbackCluster { + return errors.Errorf("Can't add ddl job, have flashback cluster job") + } + } + return nil +} + +// GenGIDAndInsertJobsWithRetry generate job related global ID and inserts DDL jobs to the DDL job +// table with retry. job id allocation and job insertion are in the same transaction, +// as we want to make sure DDL jobs are inserted in id order, then we can query from +// a min job ID when scheduling DDL jobs to mitigate https://github.com/pingcap/tidb/issues/52905. +// so this function has side effect, it will set table/db/job id of 'jobs'. +func GenGIDAndInsertJobsWithRetry(ctx context.Context, ddlSe *sess.Session, jobWs []*JobWrapper) error { + count := getRequiredGIDCount(jobWs) + return genGIDAndCallWithRetry(ctx, ddlSe, count, func(ids []int64) error { + failpoint.Inject("mockGenGlobalIDFail", func(val failpoint.Value) { + if val.(bool) { + failpoint.Return(errors.New("gofail genGlobalIDs error")) + } + }) + assignGIDsForJobs(jobWs, ids) + injectModifyJobArgFailPoint(jobWs) + return insertDDLJobs2Table(ctx, ddlSe, jobWs...) + }) +} + +// getRequiredGIDCount returns the count of required global IDs for the jobs. it's calculated +// as: the count of jobs + the count of IDs for the jobs which do NOT have pre-allocated ID. +func getRequiredGIDCount(jobWs []*JobWrapper) int { + count := len(jobWs) + idCountForTable := func(info *model.TableInfo) int { + c := 1 + if partitionInfo := info.GetPartitionInfo(); partitionInfo != nil { + c += len(partitionInfo.Definitions) + } + return c + } + for _, jobW := range jobWs { + if jobW.IDAllocated { + continue + } + switch jobW.Type { + case model.ActionCreateView, model.ActionCreateSequence, model.ActionCreateTable: + info := jobW.Args[0].(*model.TableInfo) + count += idCountForTable(info) + case model.ActionCreateTables: + infos := jobW.Args[0].([]*model.TableInfo) + for _, info := range infos { + count += idCountForTable(info) + } + case model.ActionCreateSchema: + count++ + } + // TODO support other type of jobs + } + return count +} + +// assignGIDsForJobs should be used with getRequiredGIDCount, and len(ids) must equal +// what getRequiredGIDCount returns. +func assignGIDsForJobs(jobWs []*JobWrapper, ids []int64) { + idx := 0 + + assignIDsForTable := func(info *model.TableInfo) { + info.ID = ids[idx] + idx++ + if partitionInfo := info.GetPartitionInfo(); partitionInfo != nil { + for i := range partitionInfo.Definitions { + partitionInfo.Definitions[i].ID = ids[idx] + idx++ + } + } + } + for _, jobW := range jobWs { + switch jobW.Type { + case model.ActionCreateView, model.ActionCreateSequence, model.ActionCreateTable: + info := jobW.Args[0].(*model.TableInfo) + if !jobW.IDAllocated { + assignIDsForTable(info) + } + jobW.TableID = info.ID + case model.ActionCreateTables: + if !jobW.IDAllocated { + infos := jobW.Args[0].([]*model.TableInfo) + for _, info := range infos { + assignIDsForTable(info) + } + } + case model.ActionCreateSchema: + dbInfo := jobW.Args[0].(*model.DBInfo) + if !jobW.IDAllocated { + dbInfo.ID = ids[idx] + idx++ + } + jobW.SchemaID = dbInfo.ID + } + // TODO support other type of jobs + jobW.ID = ids[idx] + idx++ + } +} + +// genGIDAndCallWithRetry generates global IDs and calls the function with retry. +// generate ID and call function runs in the same transaction. +func genGIDAndCallWithRetry(ctx context.Context, ddlSe *sess.Session, count int, fn func(ids []int64) error) error { + var resErr error + for i := uint(0); i < kv.MaxRetryCnt; i++ { + resErr = func() (err error) { + if err := ddlSe.Begin(ctx); err != nil { + return errors.Trace(err) + } + defer func() { + if err != nil { + ddlSe.Rollback() + } + }() + txn, err := ddlSe.Txn() + if err != nil { + return errors.Trace(err) + } + txn.SetOption(kv.Pessimistic, true) + forUpdateTS, err := lockGlobalIDKey(ctx, ddlSe, txn) + if err != nil { + return errors.Trace(err) + } + txn.GetSnapshot().SetOption(kv.SnapshotTS, forUpdateTS) + + m := meta.NewMeta(txn) + ids, err := m.GenGlobalIDs(count) + if err != nil { + return errors.Trace(err) + } + if err = fn(ids); err != nil { + return errors.Trace(err) + } + return ddlSe.Commit(ctx) + }() + + if resErr != nil && kv.IsTxnRetryableError(resErr) { + logutil.DDLLogger().Warn("insert job meet retryable error", zap.Error(resErr)) + kv.BackOff(i) + continue + } + break + } + return resErr +} + +// lockGlobalIDKey locks the global ID key in the meta store. it keeps trying if +// meet write conflict, we cannot have a fixed retry count for this error, see this +// https://github.com/pingcap/tidb/issues/27197#issuecomment-2216315057. +// this part is same as how we implement pessimistic + repeatable read isolation +// level in SQL executor, see doLockKeys. +// NextGlobalID is a meta key, so we cannot use "select xx for update", if we store +// it into a table row or using advisory lock, we will depends on a system table +// that is created by us, cyclic. although we can create a system table without using +// DDL logic, we will only consider change it when we have data dictionary and keep +// it this way now. +// TODO maybe we can unify the lock mechanism with SQL executor in the future, or +// implement it inside TiKV client-go. +func lockGlobalIDKey(ctx context.Context, ddlSe *sess.Session, txn kv.Transaction) (uint64, error) { + var ( + iteration uint + forUpdateTs = txn.StartTS() + ver kv.Version + err error + ) + waitTime := ddlSe.GetSessionVars().LockWaitTimeout + m := meta.NewMeta(txn) + idKey := m.GlobalIDKey() + for { + lockCtx := tikv.NewLockCtx(forUpdateTs, waitTime, time.Now()) + err = txn.LockKeys(ctx, lockCtx, idKey) + if err == nil || !terror.ErrorEqual(kv.ErrWriteConflict, err) { + break + } + // ErrWriteConflict contains a conflict-commit-ts in most case, but it cannot + // be used as forUpdateTs, see comments inside handleAfterPessimisticLockError + ver, err = ddlSe.GetStore().CurrentVersion(oracle.GlobalTxnScope) + if err != nil { + break + } + forUpdateTs = ver.Ver + + kv.BackOff(iteration) + // avoid it keep growing and overflow. + iteration = min(iteration+1, math.MaxInt) + } + return forUpdateTs, err +} + +// TODO this failpoint is only checking how job scheduler handle +// corrupted job args, we should test it there by UT, not here. +func injectModifyJobArgFailPoint(jobWs []*JobWrapper) { + failpoint.Inject("MockModifyJobArg", func(val failpoint.Value) { + if val.(bool) { + for _, jobW := range jobWs { + job := jobW.Job + // Corrupt the DDL job argument. + if job.Type == model.ActionMultiSchemaChange { + if len(job.MultiSchemaInfo.SubJobs) > 0 && len(job.MultiSchemaInfo.SubJobs[0].Args) > 0 { + job.MultiSchemaInfo.SubJobs[0].Args[0] = 1 + } + } else if len(job.Args) > 0 { + job.Args[0] = 1 + } + } + } + }) +} + +func setJobStateToQueueing(job *model.Job) { + if job.Type == model.ActionMultiSchemaChange && job.MultiSchemaInfo != nil { + for _, sub := range job.MultiSchemaInfo.SubJobs { + sub.State = model.JobStateQueueing + } + } + job.State = model.JobStateQueueing +} + +// buildJobDependence sets the curjob's dependency-ID. +// The dependency-job's ID must less than the current job's ID, and we need the largest one in the list. +func buildJobDependence(t *meta.Meta, curJob *model.Job) error { + // Jobs in the same queue are ordered. If we want to find a job's dependency-job, we need to look for + // it from the other queue. So if the job is "ActionAddIndex" job, we need find its dependency-job from DefaultJobList. + jobListKey := meta.DefaultJobListKey + if !curJob.MayNeedReorg() { + jobListKey = meta.AddIndexJobListKey + } + jobs, err := t.GetAllDDLJobsInQueue(jobListKey) + if err != nil { + return errors.Trace(err) + } + + for _, job := range jobs { + if curJob.ID < job.ID { + continue + } + isDependent, err := curJob.IsDependentOn(job) + if err != nil { + return errors.Trace(err) + } + if isDependent { + logutil.DDLLogger().Info("current DDL job depends on other job", + zap.Stringer("currentJob", curJob), + zap.Stringer("dependentJob", job)) + curJob.DependencyID = job.ID + break + } + } + return nil +} + +func (e *executor) notifyNewJobSubmitted(ch chan struct{}, etcdPath string, jobID int64, jobType string) { + // If the workers don't run, we needn't notify workers. + // TODO: It does not affect informing the backfill worker. + if !config.GetGlobalConfig().Instance.TiDBEnableDDL.Load() { + return + } + if e.ownerManager.IsOwner() { + asyncNotify(ch) + } else { + e.notifyNewJobByEtcd(etcdPath, jobID, jobType) + } +} + +func (e *executor) notifyNewJobByEtcd(etcdPath string, jobID int64, jobType string) { + if e.etcdCli == nil { + return + } + + jobIDStr := strconv.FormatInt(jobID, 10) + timeStart := time.Now() + err := ddlutil.PutKVToEtcd(e.ctx, e.etcdCli, 1, etcdPath, jobIDStr) + if err != nil { + logutil.DDLLogger().Info("notify handling DDL job failed", + zap.String("etcdPath", etcdPath), + zap.Int64("jobID", jobID), + zap.String("type", jobType), + zap.Error(err)) + } + metrics.DDLWorkerHistogram.WithLabelValues(metrics.WorkerNotifyDDLJob, jobType, metrics.RetLabel(err)).Observe(time.Since(timeStart).Seconds()) +} diff --git a/pkg/ddl/ddl_worker.go b/pkg/ddl/job_worker.go similarity index 55% rename from pkg/ddl/ddl_worker.go rename to pkg/ddl/job_worker.go index 451b894937d7e..cad1d14d29bc2 100644 --- a/pkg/ddl/ddl_worker.go +++ b/pkg/ddl/job_worker.go @@ -17,10 +17,8 @@ package ddl import ( "context" "fmt" - "math" "math/rand" "os" - "strconv" "strings" "sync" "sync/atomic" @@ -32,11 +30,12 @@ import ( "github.com/pingcap/tidb/pkg/ddl/logutil" sess "github.com/pingcap/tidb/pkg/ddl/session" "github.com/pingcap/tidb/pkg/ddl/util" + "github.com/pingcap/tidb/pkg/infoschema" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/meta" + "github.com/pingcap/tidb/pkg/meta/autoid" "github.com/pingcap/tidb/pkg/metrics" "github.com/pingcap/tidb/pkg/parser" - "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/terror" "github.com/pingcap/tidb/pkg/sessionctx" @@ -49,11 +48,8 @@ import ( "github.com/pingcap/tidb/pkg/util/resourcegrouptag" "github.com/pingcap/tidb/pkg/util/topsql" topsqlstate "github.com/pingcap/tidb/pkg/util/topsql/state" - tikv "github.com/tikv/client-go/v2/kv" - "github.com/tikv/client-go/v2/oracle" "github.com/tikv/client-go/v2/tikvrpc" kvutil "github.com/tikv/client-go/v2/util" - clientv3 "go.etcd.io/etcd/client/v3" atomicutil "go.uber.org/atomic" "go.uber.org/zap" ) @@ -81,6 +77,27 @@ func SetWaitTimeWhenErrorOccurred(dur time.Duration) { atomic.StoreInt64(&WaitTimeWhenErrorOccurred, int64(dur)) } +// jobContext is the context for execution of a DDL job. +type jobContext struct { + // below fields are shared by all DDL jobs + ctx context.Context + *unSyncedJobTracker + *schemaVersionManager + infoCache *infoschema.InfoCache + autoidCli *autoid.ClientDiscover + store kv.Storage + + // TODO reorg part of code couple this struct so much, remove it later. + oldDDLCtx *ddlCtx +} + +func (c *jobContext) getAutoIDRequirement() autoid.Requirement { + return &asAutoIDRequirement{ + store: c.store, + autoidCli: c.autoidCli, + } +} + type workerType byte const ( @@ -88,9 +105,6 @@ const ( generalWorker workerType = 0 // addIdxWorker is the worker who handles the operation of adding indexes. addIdxWorker workerType = 1 - // loaclWorker is the worker who handles the operation in local TiDB. - // currently it only handle CreateTable job of fast create table enabled. - localWorker workerType = 2 ) // worker is used for handling DDL jobs. @@ -100,7 +114,7 @@ type worker struct { tp workerType addingDDLJobKey string ddlJobCh chan struct{} - // for local mode worker, it's ctx of 'ddl', else it's the ctx of 'job scheduler'. + // it's the ctx of 'job scheduler'. ctx context.Context wg sync.WaitGroup @@ -113,8 +127,9 @@ type worker struct { *ddlCtx } -// JobContext is the ddl job execution context. -type JobContext struct { +// ReorgContext contains context info for reorg job. +// TODO there is another reorgCtx, merge them. +type ReorgContext struct { // below fields are cache for top sql ddlJobCtx context.Context cacheSQL string @@ -126,9 +141,9 @@ type JobContext struct { cloudStorageURI string } -// NewJobContext returns a new ddl job context. -func NewJobContext() *JobContext { - return &JobContext{ +// NewReorgContext returns a new ddl job context. +func NewReorgContext() *ReorgContext { + return &ReorgContext{ ddlJobCtx: context.Background(), cacheSQL: "", cacheNormalizedSQL: "", @@ -170,8 +185,6 @@ func (w *worker) typeStr() string { str = "general" case addIdxWorker: str = "add index" - case localWorker: - str = "local worker" default: str = "unknown" } @@ -191,24 +204,6 @@ func (w *worker) Close() { tidblogutil.Logger(w.logCtx).Info("DDL worker closed", zap.Duration("take time", time.Since(startTime))) } -func (e *executor) notifyNewJobByEtcd(etcdPath string, jobID int64, jobType string) { - if e.etcdCli == nil { - return - } - - jobIDStr := strconv.FormatInt(jobID, 10) - timeStart := time.Now() - err := util.PutKVToEtcd(e.ctx, e.etcdCli, 1, etcdPath, jobIDStr) - if err != nil { - logutil.DDLLogger().Info("notify handling DDL job failed", - zap.String("etcdPath", etcdPath), - zap.Int64("jobID", jobID), - zap.String("type", jobType), - zap.Error(err)) - } - metrics.DDLWorkerHistogram.WithLabelValues(metrics.WorkerNotifyDDLJob, jobType, metrics.RetLabel(err)).Observe(time.Since(timeStart).Seconds()) -} - func asyncNotify(ch chan struct{}) { select { case ch <- struct{}{}: @@ -216,537 +211,6 @@ func asyncNotify(ch chan struct{}) { } } -func (d *ddl) limitDDLJobs(ch chan *JobWrapper, handler func([]*JobWrapper)) { - defer tidbutil.Recover(metrics.LabelDDL, "limitDDLJobs", nil, true) - - jobWs := make([]*JobWrapper, 0, batchAddingJobs) - for { - select { - // the channel is never closed - case jobW := <-ch: - jobWs = jobWs[:0] - jobLen := len(ch) - jobWs = append(jobWs, jobW) - for i := 0; i < jobLen; i++ { - jobWs = append(jobWs, <-ch) - } - handler(jobWs) - case <-d.ctx.Done(): - return - } - } -} - -// addBatchDDLJobsV1 gets global job IDs and puts the DDL jobs in the DDL queue. -func (d *ddl) addBatchDDLJobsV1(jobWs []*JobWrapper) { - startTime := time.Now() - var err error - // DDLForce2Queue is a flag to tell DDL worker to always push the job to the DDL queue. - toTable := !variable.DDLForce2Queue.Load() - if toTable { - err = d.addBatchDDLJobs(jobWs) - } else { - err = d.addBatchDDLJobs2Queue(jobWs) - } - var jobs string - for _, jobW := range jobWs { - if err == nil { - err = jobW.cacheErr - } - jobW.NotifyError(err) - jobs += jobW.Job.String() + "; " - metrics.DDLWorkerHistogram.WithLabelValues(metrics.WorkerAddDDLJob, jobW.Job.Type.String(), - metrics.RetLabel(err)).Observe(time.Since(startTime).Seconds()) - } - if err != nil { - logutil.DDLLogger().Warn("add DDL jobs failed", zap.String("jobs", jobs), zap.Error(err)) - } else { - logutil.DDLLogger().Info("add DDL jobs", - zap.Int("batch count", len(jobWs)), - zap.String("jobs", jobs), - zap.Bool("table", toTable)) - } -} - -// addBatchLocalDDLJobs gets global job IDs and delivery the DDL jobs to local TiDB -func (d *ddl) addBatchLocalDDLJobs(jobWs []*JobWrapper) { - if newJobWs, err := combineBatchCreateTableJobs(jobWs); err == nil { - jobWs = newJobWs - } - err := d.addBatchDDLJobs(jobWs) - if err != nil { - for _, jobW := range jobWs { - jobW.NotifyError(err) - } - logutil.DDLLogger().Error("add DDL jobs failed", zap.Bool("local_mode", true), zap.Error(err)) - } else { - logutil.DDLLogger().Info("add DDL jobs", - zap.Bool("local_mode", true), - zap.Int("batch count", len(jobWs))) - } -} - -// buildJobDependence sets the curjob's dependency-ID. -// The dependency-job's ID must less than the current job's ID, and we need the largest one in the list. -func buildJobDependence(t *meta.Meta, curJob *model.Job) error { - // Jobs in the same queue are ordered. If we want to find a job's dependency-job, we need to look for - // it from the other queue. So if the job is "ActionAddIndex" job, we need find its dependency-job from DefaultJobList. - jobListKey := meta.DefaultJobListKey - if !curJob.MayNeedReorg() { - jobListKey = meta.AddIndexJobListKey - } - jobs, err := t.GetAllDDLJobsInQueue(jobListKey) - if err != nil { - return errors.Trace(err) - } - - for _, job := range jobs { - if curJob.ID < job.ID { - continue - } - isDependent, err := curJob.IsDependentOn(job) - if err != nil { - return errors.Trace(err) - } - if isDependent { - logutil.DDLLogger().Info("current DDL job depends on other job", - zap.Stringer("currentJob", curJob), - zap.Stringer("dependentJob", job)) - curJob.DependencyID = job.ID - break - } - } - return nil -} - -func (d *ddl) addBatchDDLJobs2Queue(jobWs []*JobWrapper) error { - ctx := kv.WithInternalSourceType(context.Background(), kv.InternalTxnDDL) - // lock to reduce conflict - d.globalIDLock.Lock() - defer d.globalIDLock.Unlock() - return kv.RunInNewTxn(ctx, d.store, true, func(_ context.Context, txn kv.Transaction) error { - t := meta.NewMeta(txn) - ids, err := t.GenGlobalIDs(len(jobWs)) - if err != nil { - return errors.Trace(err) - } - - if err := d.checkFlashbackJobInQueue(t); err != nil { - return errors.Trace(err) - } - - for i, jobW := range jobWs { - job := jobW.Job - job.Version = currentVersion - job.StartTS = txn.StartTS() - job.ID = ids[i] - setJobStateToQueueing(job) - if err = buildJobDependence(t, job); err != nil { - return errors.Trace(err) - } - jobListKey := meta.DefaultJobListKey - if job.MayNeedReorg() { - jobListKey = meta.AddIndexJobListKey - } - if err = t.EnQueueDDLJob(job, jobListKey); err != nil { - return errors.Trace(err) - } - } - failpoint.Inject("mockAddBatchDDLJobsErr", func(val failpoint.Value) { - if val.(bool) { - failpoint.Return(errors.Errorf("mockAddBatchDDLJobsErr")) - } - }) - return nil - }) -} - -func (*ddl) checkFlashbackJobInQueue(t *meta.Meta) error { - jobs, err := t.GetAllDDLJobsInQueue(meta.DefaultJobListKey) - if err != nil { - return errors.Trace(err) - } - for _, job := range jobs { - if job.Type == model.ActionFlashbackCluster { - return errors.Errorf("Can't add ddl job, have flashback cluster job") - } - } - return nil -} - -// TODO this failpoint is only checking how job scheduler handle -// corrupted job args, we should test it there by UT, not here. -func injectModifyJobArgFailPoint(jobWs []*JobWrapper) { - failpoint.Inject("MockModifyJobArg", func(val failpoint.Value) { - if val.(bool) { - for _, jobW := range jobWs { - job := jobW.Job - // Corrupt the DDL job argument. - if job.Type == model.ActionMultiSchemaChange { - if len(job.MultiSchemaInfo.SubJobs) > 0 && len(job.MultiSchemaInfo.SubJobs[0].Args) > 0 { - job.MultiSchemaInfo.SubJobs[0].Args[0] = 1 - } - } else if len(job.Args) > 0 { - job.Args[0] = 1 - } - } - } - }) -} - -func setJobStateToQueueing(job *model.Job) { - if job.Type == model.ActionMultiSchemaChange && job.MultiSchemaInfo != nil { - for _, sub := range job.MultiSchemaInfo.SubJobs { - sub.State = model.JobStateQueueing - } - } - job.State = model.JobStateQueueing -} - -// addBatchDDLJobs gets global job IDs and puts the DDL jobs in the DDL job table or local worker. -func (d *ddl) addBatchDDLJobs(jobWs []*JobWrapper) error { - var err error - - if len(jobWs) == 0 { - return nil - } - - ctx := kv.WithInternalSourceType(d.ctx, kv.InternalTxnDDL) - se, err := d.sessPool.Get() - if err != nil { - return errors.Trace(err) - } - defer d.sessPool.Put(se) - found, err := d.sysTblMgr.HasFlashbackClusterJob(ctx, d.minJobIDRefresher.GetCurrMinJobID()) - if err != nil { - return errors.Trace(err) - } - if found { - return errors.Errorf("Can't add ddl job, have flashback cluster job") - } - - var ( - startTS = uint64(0) - bdrRole = string(ast.BDRRoleNone) - ) - - err = kv.RunInNewTxn(ctx, d.store, true, func(_ context.Context, txn kv.Transaction) error { - t := meta.NewMeta(txn) - - bdrRole, err = t.GetBDRRole() - if err != nil { - return errors.Trace(err) - } - startTS = txn.StartTS() - - // for localmode, we still need to check this variable if upgrading below v6.2. - if variable.DDLForce2Queue.Load() { - if err := d.checkFlashbackJobInQueue(t); err != nil { - return err - } - } - - return nil - }) - if err != nil { - return errors.Trace(err) - } - - for _, jobW := range jobWs { - job := jobW.Job - job.Version = currentVersion - job.StartTS = startTS - job.BDRRole = bdrRole - - // BDR mode only affects the DDL not from CDC - if job.CDCWriteSource == 0 && bdrRole != string(ast.BDRRoleNone) { - if job.Type == model.ActionMultiSchemaChange && job.MultiSchemaInfo != nil { - for _, subJob := range job.MultiSchemaInfo.SubJobs { - if ast.DeniedByBDR(ast.BDRRole(bdrRole), subJob.Type, job) { - return dbterror.ErrBDRRestrictedDDL.FastGenByArgs(bdrRole) - } - } - } else if ast.DeniedByBDR(ast.BDRRole(bdrRole), job.Type, job) { - return dbterror.ErrBDRRestrictedDDL.FastGenByArgs(bdrRole) - } - } - - setJobStateToQueueing(job) - - // currently doesn't support pause job in local mode. - if d.stateSyncer.IsUpgradingState() && !hasSysDB(job) && !job.LocalMode { - if err = pauseRunningJob(sess.NewSession(se), job, model.AdminCommandBySystem); err != nil { - logutil.DDLUpgradingLogger().Warn("pause user DDL by system failed", zap.Stringer("job", job), zap.Error(err)) - jobW.cacheErr = err - continue - } - logutil.DDLUpgradingLogger().Info("pause user DDL by system successful", zap.Stringer("job", job)) - } - } - - se.GetSessionVars().SetDiskFullOpt(kvrpcpb.DiskFullOpt_AllowedOnAlmostFull) - ddlSe := sess.NewSession(se) - localMode := jobWs[0].Job.LocalMode - if localMode { - if err = fillJobRelatedGIDs(ctx, ddlSe, jobWs); err != nil { - return err - } - for _, jobW := range jobWs { - if _, err := jobW.Encode(true); err != nil { - return err - } - d.localJobCh <- jobW - } - return nil - } - - if err = GenGIDAndInsertJobsWithRetry(ctx, ddlSe, jobWs); err != nil { - return errors.Trace(err) - } - for _, jobW := range jobWs { - d.initJobDoneCh(jobW.ID) - } - - return nil -} - -// GenGIDAndInsertJobsWithRetry generate job related global ID and inserts DDL jobs to the DDL job -// table with retry. job id allocation and job insertion are in the same transaction, -// as we want to make sure DDL jobs are inserted in id order, then we can query from -// a min job ID when scheduling DDL jobs to mitigate https://github.com/pingcap/tidb/issues/52905. -// so this function has side effect, it will set table/db/job id of 'jobs'. -func GenGIDAndInsertJobsWithRetry(ctx context.Context, ddlSe *sess.Session, jobWs []*JobWrapper) error { - count := getRequiredGIDCount(jobWs) - return genGIDAndCallWithRetry(ctx, ddlSe, count, func(ids []int64) error { - failpoint.Inject("mockGenGlobalIDFail", func(val failpoint.Value) { - if val.(bool) { - failpoint.Return(errors.New("gofail genGlobalIDs error")) - } - }) - assignGIDsForJobs(jobWs, ids) - injectModifyJobArgFailPoint(jobWs) - return insertDDLJobs2Table(ctx, ddlSe, jobWs...) - }) -} - -// fillJobRelatedGIDs similar to GenGIDAndInsertJobsWithRetry, but only fill job related global IDs. -func fillJobRelatedGIDs(ctx context.Context, ddlSe *sess.Session, jobWs []*JobWrapper) error { - var allocatedIDs []int64 - count := getRequiredGIDCount(jobWs) - if err := genGIDAndCallWithRetry(ctx, ddlSe, count, func(ids []int64) error { - allocatedIDs = ids - return nil - }); err != nil { - return errors.Trace(err) - } - - assignGIDsForJobs(jobWs, allocatedIDs) - return nil -} - -// getRequiredGIDCount returns the count of required global IDs for the jobs. it's calculated -// as: the count of jobs + the count of IDs for the jobs which do NOT have pre-allocated ID. -func getRequiredGIDCount(jobWs []*JobWrapper) int { - count := len(jobWs) - idCountForTable := func(info *model.TableInfo) int { - c := 1 - if partitionInfo := info.GetPartitionInfo(); partitionInfo != nil { - c += len(partitionInfo.Definitions) - } - return c - } - for _, jobW := range jobWs { - if jobW.IDAllocated { - continue - } - switch jobW.Type { - case model.ActionCreateView, model.ActionCreateSequence, model.ActionCreateTable: - info := jobW.Args[0].(*model.TableInfo) - count += idCountForTable(info) - case model.ActionCreateTables: - infos := jobW.Args[0].([]*model.TableInfo) - for _, info := range infos { - count += idCountForTable(info) - } - case model.ActionCreateSchema: - count++ - } - // TODO support other type of jobs - } - return count -} - -// assignGIDsForJobs should be used with getRequiredGIDCount, and len(ids) must equal -// what getRequiredGIDCount returns. -func assignGIDsForJobs(jobWs []*JobWrapper, ids []int64) { - idx := 0 - - assignIDsForTable := func(info *model.TableInfo) { - info.ID = ids[idx] - idx++ - if partitionInfo := info.GetPartitionInfo(); partitionInfo != nil { - for i := range partitionInfo.Definitions { - partitionInfo.Definitions[i].ID = ids[idx] - idx++ - } - } - } - for _, jobW := range jobWs { - switch jobW.Type { - case model.ActionCreateView, model.ActionCreateSequence, model.ActionCreateTable: - info := jobW.Args[0].(*model.TableInfo) - if !jobW.IDAllocated { - assignIDsForTable(info) - } - jobW.TableID = info.ID - case model.ActionCreateTables: - if !jobW.IDAllocated { - infos := jobW.Args[0].([]*model.TableInfo) - for _, info := range infos { - assignIDsForTable(info) - } - } - case model.ActionCreateSchema: - dbInfo := jobW.Args[0].(*model.DBInfo) - if !jobW.IDAllocated { - dbInfo.ID = ids[idx] - idx++ - } - jobW.SchemaID = dbInfo.ID - } - // TODO support other type of jobs - jobW.ID = ids[idx] - idx++ - } -} - -// genGIDAndCallWithRetry generates global IDs and calls the function with retry. -// generate ID and call function runs in the same transaction. -func genGIDAndCallWithRetry(ctx context.Context, ddlSe *sess.Session, count int, fn func(ids []int64) error) error { - var resErr error - for i := uint(0); i < kv.MaxRetryCnt; i++ { - resErr = func() (err error) { - if err := ddlSe.Begin(ctx); err != nil { - return errors.Trace(err) - } - defer func() { - if err != nil { - ddlSe.Rollback() - } - }() - txn, err := ddlSe.Txn() - if err != nil { - return errors.Trace(err) - } - txn.SetOption(kv.Pessimistic, true) - forUpdateTS, err := lockGlobalIDKey(ctx, ddlSe, txn) - if err != nil { - return errors.Trace(err) - } - txn.GetSnapshot().SetOption(kv.SnapshotTS, forUpdateTS) - - m := meta.NewMeta(txn) - ids, err := m.GenGlobalIDs(count) - if err != nil { - return errors.Trace(err) - } - if err = fn(ids); err != nil { - return errors.Trace(err) - } - return ddlSe.Commit(ctx) - }() - - if resErr != nil && kv.IsTxnRetryableError(resErr) { - logutil.DDLLogger().Warn("insert job meet retryable error", zap.Error(resErr)) - kv.BackOff(i) - continue - } - break - } - return resErr -} - -// lockGlobalIDKey locks the global ID key in the meta store. it keeps trying if -// meet write conflict, we cannot have a fixed retry count for this error, see this -// https://github.com/pingcap/tidb/issues/27197#issuecomment-2216315057. -// this part is same as how we implement pessimistic + repeatable read isolation -// level in SQL executor, see doLockKeys. -// NextGlobalID is a meta key, so we cannot use "select xx for update", if we store -// it into a table row or using advisory lock, we will depends on a system table -// that is created by us, cyclic. although we can create a system table without using -// DDL logic, we will only consider change it when we have data dictionary and keep -// it this way now. -// TODO maybe we can unify the lock mechanism with SQL executor in the future, or -// implement it inside TiKV client-go. -func lockGlobalIDKey(ctx context.Context, ddlSe *sess.Session, txn kv.Transaction) (uint64, error) { - var ( - iteration uint - forUpdateTs = txn.StartTS() - ver kv.Version - err error - ) - waitTime := ddlSe.GetSessionVars().LockWaitTimeout - m := meta.NewMeta(txn) - idKey := m.GlobalIDKey() - for { - lockCtx := tikv.NewLockCtx(forUpdateTs, waitTime, time.Now()) - err = txn.LockKeys(ctx, lockCtx, idKey) - if err == nil || !terror.ErrorEqual(kv.ErrWriteConflict, err) { - break - } - // ErrWriteConflict contains a conflict-commit-ts in most case, but it cannot - // be used as forUpdateTs, see comments inside handleAfterPessimisticLockError - ver, err = ddlSe.GetStore().CurrentVersion(oracle.GlobalTxnScope) - if err != nil { - break - } - forUpdateTs = ver.Ver - - kv.BackOff(iteration) - // avoid it keep growing and overflow. - iteration = min(iteration+1, math.MaxInt) - } - return forUpdateTs, err -} - -// combineBatchCreateTableJobs combine batch jobs to another batch jobs. -// currently it only support combine CreateTable to CreateTables. -func combineBatchCreateTableJobs(jobWs []*JobWrapper) ([]*JobWrapper, error) { - if len(jobWs) <= 1 { - return jobWs, nil - } - var schemaName string - jobs := make([]*model.Job, 0, len(jobWs)) - for i, jobW := range jobWs { - // we don't merge jobs with ID pre-allocated. - if jobW.Job.Type != model.ActionCreateTable || jobW.IDAllocated { - return jobWs, nil - } - if i == 0 { - schemaName = jobW.Job.SchemaName - } else if jobW.Job.SchemaName != schemaName { - return jobWs, nil - } - jobs = append(jobs, jobW.Job) - } - - job, err := BatchCreateTableWithJobs(jobs) - if err != nil { - return jobWs, err - } - logutil.DDLLogger().Info("combine jobs to batch create table job", zap.Int("len", len(jobWs))) - - newJobW := &JobWrapper{ - Job: job, - ErrChs: []chan error{}, - } - // combine the error chans. - for _, j := range jobWs { - newJobW.ErrChs = append(newJobW.ErrChs, j.ErrChs...) - } - return []*JobWrapper{newJobW}, nil -} - func injectFailPointForGetJob(job *model.Job) { if job == nil { return @@ -826,38 +290,6 @@ func (w *worker) registerMDLInfo(job *model.Job, ver int64) error { return err } -// cleanMDLInfo cleans metadata lock info. -func (s *jobScheduler) cleanMDLInfo(job *model.Job, ownerID string) { - if !variable.EnableMDL.Load() { - return - } - var sql string - if tidbutil.IsSysDB(strings.ToLower(job.SchemaName)) { - // DDLs that modify system tables could only happen in upgrade process, - // we should not reference 'owner_id'. Otherwise, there is a circular blocking problem. - sql = fmt.Sprintf("delete from mysql.tidb_mdl_info where job_id = %d", job.ID) - } else { - sql = fmt.Sprintf("delete from mysql.tidb_mdl_info where job_id = %d and owner_id = '%s'", job.ID, ownerID) - } - sctx, _ := s.sessPool.Get() - defer s.sessPool.Put(sctx) - se := sess.NewSession(sctx) - se.GetSessionVars().SetDiskFullOpt(kvrpcpb.DiskFullOpt_AllowedOnAlmostFull) - _, err := se.Execute(s.schCtx, sql, "delete-mdl-info") - if err != nil { - logutil.DDLLogger().Warn("unexpected error when clean mdl info", zap.Int64("job ID", job.ID), zap.Error(err)) - return - } - // TODO we need clean it when version of JobStateRollbackDone is synced also. - if job.State == model.JobStateSynced && s.etcdCli != nil { - path := fmt.Sprintf("%s/%d/", util.DDLAllSchemaVersionsByJob, job.ID) - _, err = s.etcdCli.Delete(s.schCtx, path, clientv3.WithPrefix()) - if err != nil { - logutil.DDLLogger().Warn("delete versions failed", zap.Int64("job ID", job.ID), zap.Error(err)) - } - } -} - // JobNeedGC is called to determine whether delete-ranges need to be generated for the provided job. // // NOTICE: BR also uses jobNeedGC to determine whether delete-ranges need to be generated for the provided job. @@ -925,13 +357,9 @@ func (w *worker) finishDDLJob(t *meta.Meta, job *model.Job) (err error) { if err != nil { return errors.Trace(err) } - // for local mode job, we didn't insert the job to ddl table now. - // so no need to delete it. - if !job.LocalMode { - err = w.deleteDDLJob(job) - if err != nil { - return errors.Trace(err) - } + err = w.deleteDDLJob(job) + if err != nil { + return errors.Trace(err) } job.BinlogInfo.FinishedTS = t.StartTS @@ -949,6 +377,12 @@ func (w *worker) finishDDLJob(t *meta.Meta, job *model.Job) (err error) { return errors.Trace(err) } +func (w *worker) deleteDDLJob(job *model.Job) error { + sql := fmt.Sprintf("delete from mysql.tidb_ddl_job where job_id = %d", job.ID) + _, err := w.sess.Execute(context.Background(), sql, "delete_job") + return errors.Trace(err) +} + func finishRecoverTable(w *worker, job *model.Job) error { var ( recoverInfo *RecoverInfo @@ -985,7 +419,7 @@ func finishRecoverSchema(w *worker, job *model.Job) error { return nil } -func (w *JobContext) setDDLLabelForTopSQL(jobQuery string) { +func (w *ReorgContext) setDDLLabelForTopSQL(jobQuery string) { if !topsqlstate.TopSQLEnabled() || jobQuery == "" { return } @@ -1014,7 +448,7 @@ func getDDLRequestSource(jobType model.ActionType) string { return kv.InternalTxnDDL } -func (w *JobContext) setDDLLabelForDiagnosis(jobType model.ActionType) { +func (w *ReorgContext) setDDLLabelForDiagnosis(jobType model.ActionType) { if w.tp != "" { return } @@ -1077,7 +511,7 @@ func (w *worker) prepareTxn(job *model.Job) (kv.Transaction, error) { // // The first return value is the schema version after running the job. If it's // non-zero, caller should wait for other nodes to catch up. -func (w *worker) transitOneJobStep(d *ddlCtx, job *model.Job) (int64, error) { +func (w *worker) transitOneJobStep(d *ddlCtx, jobCtx *jobContext, job *model.Job) (int64, error) { var ( err error ) @@ -1086,12 +520,7 @@ func (w *worker) transitOneJobStep(d *ddlCtx, job *model.Job) (int64, error) { if err != nil { return 0, err } - var t *meta.Meta - if variable.EnableFastCreateTable.Load() { - t = meta.NewMeta(txn, meta.WithUpdateTableName()) - } else { - t = meta.NewMeta(txn) - } + t := meta.NewMeta(txn) if job.IsDone() || job.IsRollbackDone() || job.IsCancelled() { if job.IsDone() { @@ -1114,26 +543,22 @@ func (w *worker) transitOneJobStep(d *ddlCtx, job *model.Job) (int64, error) { }) return 0, w.handleJobDone(d, job, t) } - d.mu.RLock() - d.mu.hook.OnJobRunBefore(job) - d.mu.RUnlock() + failpoint.InjectCall("onJobRunBefore", job) // If running job meets error, we will save this error in job Error and retry // later if the job is not cancelled. - schemaVer, updateRawArgs, runJobErr := w.runOneJobStep(d, t, job) + schemaVer, updateRawArgs, runJobErr := w.runOneJobStep(jobCtx, t, job) - d.mu.RLock() - d.mu.hook.OnJobRunAfter(job) - d.mu.RUnlock() + failpoint.InjectCall("onJobRunAfter", job) if job.IsCancelled() { - defer d.unlockSchemaVersion(job.ID) + defer jobCtx.unlockSchemaVersion(job.ID) w.sess.Reset() return 0, w.handleJobDone(d, job, t) } if err = w.checkBeforeCommit(); err != nil { - d.unlockSchemaVersion(job.ID) + jobCtx.unlockSchemaVersion(job.ID) return 0, err } @@ -1153,24 +578,24 @@ func (w *worker) transitOneJobStep(d *ddlCtx, job *model.Job) (int64, error) { err = w.registerMDLInfo(job, schemaVer) if err != nil { w.sess.Rollback() - d.unlockSchemaVersion(job.ID) + jobCtx.unlockSchemaVersion(job.ID) return 0, err } err = w.updateDDLJob(job, updateRawArgs) if err = w.handleUpdateJobError(t, job, err); err != nil { w.sess.Rollback() - d.unlockSchemaVersion(job.ID) + jobCtx.unlockSchemaVersion(job.ID) return 0, err } writeBinlog(d.binlogCli, txn, job) // reset the SQL digest to make topsql work right. w.sess.GetSessionVars().StmtCtx.ResetSQLDigest(job.Query) err = w.sess.Commit(w.ctx) - d.unlockSchemaVersion(job.ID) + jobCtx.unlockSchemaVersion(job.ID) if err != nil { return 0, err } - w.registerSync(job) + jobCtx.addUnSynced(job.ID) // If error is non-retryable, we can ignore the sleep. if runJobErr != nil && errorIsRetryable(runJobErr, job) { @@ -1188,7 +613,7 @@ func (w *worker) transitOneJobStep(d *ddlCtx, job *model.Job) (int64, error) { } func (w *worker) checkBeforeCommit() error { - if !w.ddlCtx.isOwner() && w.tp != localWorker { + if !w.ddlCtx.isOwner() { // Since this TiDB instance is not a DDL owner anymore, // it should not commit any transaction. w.sess.Rollback() @@ -1202,54 +627,7 @@ func (w *worker) checkBeforeCommit() error { return nil } -// HandleLocalDDLJob handles local ddl job like fast create table. -// Compare with normal ddl job: -// 1. directly insert the job to history job table(incompatible with CDC). -// 2. no need to wait schema version(only support create table now). -// 3. no register mdl info(only support create table now). -func (w *worker) HandleLocalDDLJob(d *ddlCtx, job *model.Job) (err error) { - txn, err := w.prepareTxn(job) - if err != nil { - return err - } - - t := meta.NewMeta(txn, meta.WithUpdateTableName()) - d.mu.RLock() - d.mu.hook.OnJobRunBefore(job) - d.mu.RUnlock() - - _, _, err = w.runOneJobStep(d, t, job) - defer d.unlockSchemaVersion(job.ID) - if err != nil { - return err - } - // no need to rollback for fast create table now. - if job.IsCancelling() { - job.State = model.JobStateCancelled - job.Error = dbterror.ErrCancelledDDLJob - } - if job.IsCancelled() { - w.sess.Reset() - if err = w.handleJobDone(d, job, t); err != nil { - return err - } - // return job.Error to let caller know the job is cancelled. - return job.Error - } - - d.mu.RLock() - d.mu.hook.OnJobRunAfter(job) - d.mu.RUnlock() - - writeBinlog(d.binlogCli, txn, job) - // reset the SQL digest to make topsql work right. - w.sess.GetSessionVars().StmtCtx.ResetSQLDigest(job.Query) - - job.State = model.JobStateSynced - return w.handleJobDone(d, job, t) -} - -func (w *JobContext) getResourceGroupTaggerForTopSQL() tikvrpc.ResourceGroupTagger { +func (w *ReorgContext) getResourceGroupTaggerForTopSQL() tikvrpc.ResourceGroupTagger { if !topsqlstate.TopSQLEnabled() || w.cacheDigest == nil { return nil } @@ -1262,7 +640,7 @@ func (w *JobContext) getResourceGroupTaggerForTopSQL() tikvrpc.ResourceGroupTagg return tagger } -func (w *JobContext) ddlJobSourceType() string { +func (w *ReorgContext) ddlJobSourceType() string { return w.tp } @@ -1384,7 +762,7 @@ func (w *worker) processJobPausingRequest(d *ddlCtx, job *model.Job) (isRunnable // synchronized. So JobStateSynced *step* is added to make sure there is // waitSchemaChanged to wait for all nodes to catch up JobStateDone. func (w *worker) runOneJobStep( - d *ddlCtx, + jobCtx *jobContext, t *meta.Meta, job *model.Job, ) (ver int64, updateRawArgs bool, err error) { @@ -1409,14 +787,14 @@ func (w *worker) runOneJobStep( if job.IsCancelling() { w.jobLogger(job).Debug("cancel DDL job", zap.String("job", job.String())) - ver, err = convertJob2RollbackJob(w, d, t, job) + ver, err = convertJob2RollbackJob(w, jobCtx, t, job) // if job is converted to rollback job, the job.Args may be changed for the // rollback logic, so we let caller persist the new arguments. updateRawArgs = job.IsRollingback() return } - isRunnable, err := w.processJobPausingRequest(d, job) + isRunnable, err := w.processJobPausingRequest(jobCtx.oldDDLCtx, job) if !isRunnable { return ver, false, err } @@ -1435,128 +813,128 @@ func (w *worker) runOneJobStep( // change has no effect when retrying it. switch job.Type { case model.ActionCreateSchema: - ver, err = onCreateSchema(d, t, job) + ver, err = onCreateSchema(jobCtx, t, job) case model.ActionModifySchemaCharsetAndCollate: - ver, err = onModifySchemaCharsetAndCollate(d, t, job) + ver, err = onModifySchemaCharsetAndCollate(jobCtx, t, job) case model.ActionDropSchema: - ver, err = onDropSchema(d, t, job) + ver, err = onDropSchema(jobCtx, t, job) case model.ActionRecoverSchema: - ver, err = w.onRecoverSchema(d, t, job) + ver, err = w.onRecoverSchema(jobCtx, t, job) case model.ActionModifySchemaDefaultPlacement: - ver, err = onModifySchemaDefaultPlacement(d, t, job) + ver, err = onModifySchemaDefaultPlacement(jobCtx, t, job) case model.ActionCreateTable: - ver, err = onCreateTable(d, t, job) + ver, err = onCreateTable(jobCtx, t, job) case model.ActionCreateTables: - ver, err = onCreateTables(d, t, job) + ver, err = onCreateTables(jobCtx, t, job) case model.ActionRepairTable: - ver, err = onRepairTable(d, t, job) + ver, err = onRepairTable(jobCtx, t, job) case model.ActionCreateView: - ver, err = onCreateView(d, t, job) + ver, err = onCreateView(jobCtx, t, job) case model.ActionDropTable, model.ActionDropView, model.ActionDropSequence: - ver, err = onDropTableOrView(d, t, job) + ver, err = onDropTableOrView(jobCtx, t, job) case model.ActionDropTablePartition: - ver, err = w.onDropTablePartition(d, t, job) + ver, err = w.onDropTablePartition(jobCtx, t, job) case model.ActionTruncateTablePartition: - ver, err = w.onTruncateTablePartition(d, t, job) + ver, err = w.onTruncateTablePartition(jobCtx, t, job) case model.ActionExchangeTablePartition: - ver, err = w.onExchangeTablePartition(d, t, job) + ver, err = w.onExchangeTablePartition(jobCtx, t, job) case model.ActionAddColumn: - ver, err = onAddColumn(d, t, job) + ver, err = onAddColumn(jobCtx, t, job) case model.ActionDropColumn: - ver, err = onDropColumn(d, t, job) + ver, err = onDropColumn(jobCtx, t, job) case model.ActionModifyColumn: - ver, err = w.onModifyColumn(d, t, job) + ver, err = w.onModifyColumn(jobCtx, t, job) case model.ActionSetDefaultValue: - ver, err = onSetDefaultValue(d, t, job) + ver, err = onSetDefaultValue(jobCtx, t, job) case model.ActionAddIndex: - ver, err = w.onCreateIndex(d, t, job, false) + ver, err = w.onCreateIndex(jobCtx, t, job, false) case model.ActionAddPrimaryKey: - ver, err = w.onCreateIndex(d, t, job, true) + ver, err = w.onCreateIndex(jobCtx, t, job, true) case model.ActionDropIndex, model.ActionDropPrimaryKey: - ver, err = onDropIndex(d, t, job) + ver, err = onDropIndex(jobCtx, t, job) case model.ActionRenameIndex: - ver, err = onRenameIndex(d, t, job) + ver, err = onRenameIndex(jobCtx, t, job) case model.ActionAddForeignKey: - ver, err = w.onCreateForeignKey(d, t, job) + ver, err = w.onCreateForeignKey(jobCtx, t, job) case model.ActionDropForeignKey: - ver, err = onDropForeignKey(d, t, job) + ver, err = onDropForeignKey(jobCtx, t, job) case model.ActionTruncateTable: - ver, err = w.onTruncateTable(d, t, job) + ver, err = w.onTruncateTable(jobCtx, t, job) case model.ActionRebaseAutoID: - ver, err = onRebaseAutoIncrementIDType(d, t, job) + ver, err = onRebaseAutoIncrementIDType(jobCtx, t, job) case model.ActionRebaseAutoRandomBase: - ver, err = onRebaseAutoRandomType(d, t, job) + ver, err = onRebaseAutoRandomType(jobCtx, t, job) case model.ActionRenameTable: - ver, err = onRenameTable(d, t, job) + ver, err = onRenameTable(jobCtx, t, job) case model.ActionShardRowID: - ver, err = w.onShardRowID(d, t, job) + ver, err = w.onShardRowID(jobCtx, t, job) case model.ActionModifyTableComment: - ver, err = onModifyTableComment(d, t, job) + ver, err = onModifyTableComment(jobCtx, t, job) case model.ActionModifyTableAutoIdCache: - ver, err = onModifyTableAutoIDCache(d, t, job) + ver, err = onModifyTableAutoIDCache(jobCtx, t, job) case model.ActionAddTablePartition: - ver, err = w.onAddTablePartition(d, t, job) + ver, err = w.onAddTablePartition(jobCtx, t, job) case model.ActionModifyTableCharsetAndCollate: - ver, err = onModifyTableCharsetAndCollate(d, t, job) + ver, err = onModifyTableCharsetAndCollate(jobCtx, t, job) case model.ActionRecoverTable: - ver, err = w.onRecoverTable(d, t, job) + ver, err = w.onRecoverTable(jobCtx, t, job) case model.ActionLockTable: - ver, err = onLockTables(d, t, job) + ver, err = onLockTables(jobCtx, t, job) case model.ActionUnlockTable: - ver, err = onUnlockTables(d, t, job) + ver, err = onUnlockTables(jobCtx, t, job) case model.ActionSetTiFlashReplica: - ver, err = w.onSetTableFlashReplica(d, t, job) + ver, err = w.onSetTableFlashReplica(jobCtx, t, job) case model.ActionUpdateTiFlashReplicaStatus: - ver, err = onUpdateFlashReplicaStatus(d, t, job) + ver, err = onUpdateFlashReplicaStatus(jobCtx, t, job) case model.ActionCreateSequence: - ver, err = onCreateSequence(d, t, job) + ver, err = onCreateSequence(jobCtx, t, job) case model.ActionAlterIndexVisibility: - ver, err = onAlterIndexVisibility(d, t, job) + ver, err = onAlterIndexVisibility(jobCtx, t, job) case model.ActionAlterSequence: - ver, err = onAlterSequence(d, t, job) + ver, err = onAlterSequence(jobCtx, t, job) case model.ActionRenameTables: - ver, err = onRenameTables(d, t, job) + ver, err = onRenameTables(jobCtx, t, job) case model.ActionAlterTableAttributes: - ver, err = onAlterTableAttributes(d, t, job) + ver, err = onAlterTableAttributes(jobCtx, t, job) case model.ActionAlterTablePartitionAttributes: - ver, err = onAlterTablePartitionAttributes(d, t, job) + ver, err = onAlterTablePartitionAttributes(jobCtx, t, job) case model.ActionCreatePlacementPolicy: - ver, err = onCreatePlacementPolicy(d, t, job) + ver, err = onCreatePlacementPolicy(jobCtx, t, job) case model.ActionDropPlacementPolicy: - ver, err = onDropPlacementPolicy(d, t, job) + ver, err = onDropPlacementPolicy(jobCtx, t, job) case model.ActionAlterPlacementPolicy: - ver, err = onAlterPlacementPolicy(d, t, job) + ver, err = onAlterPlacementPolicy(jobCtx, t, job) case model.ActionAlterTablePartitionPlacement: - ver, err = onAlterTablePartitionPlacement(d, t, job) + ver, err = onAlterTablePartitionPlacement(jobCtx, t, job) case model.ActionAlterTablePlacement: - ver, err = onAlterTablePlacement(d, t, job) + ver, err = onAlterTablePlacement(jobCtx, t, job) case model.ActionCreateResourceGroup: - ver, err = onCreateResourceGroup(w.ctx, d, t, job) + ver, err = onCreateResourceGroup(jobCtx, t, job) case model.ActionAlterResourceGroup: - ver, err = onAlterResourceGroup(d, t, job) + ver, err = onAlterResourceGroup(jobCtx, t, job) case model.ActionDropResourceGroup: - ver, err = onDropResourceGroup(d, t, job) + ver, err = onDropResourceGroup(jobCtx, t, job) case model.ActionAlterCacheTable: - ver, err = onAlterCacheTable(d, t, job) + ver, err = onAlterCacheTable(jobCtx, t, job) case model.ActionAlterNoCacheTable: - ver, err = onAlterNoCacheTable(d, t, job) + ver, err = onAlterNoCacheTable(jobCtx, t, job) case model.ActionFlashbackCluster: - ver, err = w.onFlashbackCluster(d, t, job) + ver, err = w.onFlashbackCluster(jobCtx, t, job) case model.ActionMultiSchemaChange: - ver, err = onMultiSchemaChange(w, d, t, job) + ver, err = onMultiSchemaChange(w, jobCtx, t, job) case model.ActionReorganizePartition, model.ActionRemovePartitioning, model.ActionAlterTablePartitioning: - ver, err = w.onReorganizePartition(d, t, job) + ver, err = w.onReorganizePartition(jobCtx, t, job) case model.ActionAlterTTLInfo: - ver, err = onTTLInfoChange(d, t, job) + ver, err = onTTLInfoChange(jobCtx, t, job) case model.ActionAlterTTLRemove: - ver, err = onTTLInfoRemove(d, t, job) + ver, err = onTTLInfoRemove(jobCtx, t, job) case model.ActionAddCheckConstraint: - ver, err = w.onAddCheckConstraint(d, t, job) + ver, err = w.onAddCheckConstraint(jobCtx, t, job) case model.ActionDropCheckConstraint: - ver, err = onDropCheckConstraint(d, t, job) + ver, err = onDropCheckConstraint(jobCtx, t, job) case model.ActionAlterCheckConstraint: - ver, err = w.onAlterCheckConstraint(d, t, job) + ver, err = w.onAlterCheckConstraint(jobCtx, t, job) default: // Invalid job, cancel it. job.State = model.JobStateCancelled @@ -1621,7 +999,7 @@ func waitSchemaChanged(ctx context.Context, d *ddlCtx, latestSchemaVersion int64 return nil } - err = d.schemaSyncer.OwnerUpdateGlobalVersion(ctx, latestSchemaVersion) + err = d.schemaVerSyncer.OwnerUpdateGlobalVersion(ctx, latestSchemaVersion) if err != nil { logutil.DDLLogger().Info("update latest schema version failed", zap.Int64("ver", latestSchemaVersion), zap.Error(err)) if variable.EnableMDL.Load() { diff --git a/pkg/ddl/ddl_worker_test.go b/pkg/ddl/job_worker_test.go similarity index 99% rename from pkg/ddl/ddl_worker_test.go rename to pkg/ddl/job_worker_test.go index 38dff40a70369..66e3e26227744 100644 --- a/pkg/ddl/ddl_worker_test.go +++ b/pkg/ddl/job_worker_test.go @@ -38,7 +38,7 @@ func TestCheckOwner(t *testing.T) { time.Sleep(testLease) require.Equal(t, dom.DDL().OwnerManager().IsOwner(), true) - require.Equal(t, dom.DDL().GetLease(), testLease) + require.Equal(t, dom.GetSchemaLease(), testLease) } func TestInvalidDDLJob(t *testing.T) { diff --git a/pkg/ddl/mock.go b/pkg/ddl/mock.go index 7be8f499fa01e..11e1de3669a88 100644 --- a/pkg/ddl/mock.go +++ b/pkg/ddl/mock.go @@ -16,20 +16,12 @@ package ddl import ( "context" - "sync" - "sync/atomic" - "time" "github.com/pingcap/errors" - "github.com/pingcap/failpoint" - "github.com/pingcap/tidb/pkg/ddl/syncer" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/charset" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/sessionctx" - "github.com/pingcap/tidb/pkg/sessionctx/variable" - clientv3 "go.etcd.io/etcd/client/v3" - atomicutil "go.uber.org/atomic" ) // SetBatchInsertDeleteRangeSize sets the batch insert/delete range size in the test @@ -37,179 +29,6 @@ func SetBatchInsertDeleteRangeSize(i int) { batchInsertDeleteRangeSize = i } -var _ syncer.SchemaSyncer = &MockSchemaSyncer{} - -const mockCheckVersInterval = 2 * time.Millisecond - -// MockSchemaSyncer is a mock schema syncer, it is exported for testing. -type MockSchemaSyncer struct { - selfSchemaVersion int64 - mdlSchemaVersions sync.Map - globalVerCh chan clientv3.WatchResponse - mockSession chan struct{} -} - -// NewMockSchemaSyncer creates a new mock SchemaSyncer. -func NewMockSchemaSyncer() syncer.SchemaSyncer { - return &MockSchemaSyncer{} -} - -// Init implements SchemaSyncer.Init interface. -func (s *MockSchemaSyncer) Init(_ context.Context) error { - s.mdlSchemaVersions = sync.Map{} - s.globalVerCh = make(chan clientv3.WatchResponse, 1) - s.mockSession = make(chan struct{}, 1) - return nil -} - -// GlobalVersionCh implements SchemaSyncer.GlobalVersionCh interface. -func (s *MockSchemaSyncer) GlobalVersionCh() clientv3.WatchChan { - return s.globalVerCh -} - -// WatchGlobalSchemaVer implements SchemaSyncer.WatchGlobalSchemaVer interface. -func (*MockSchemaSyncer) WatchGlobalSchemaVer(context.Context) {} - -// UpdateSelfVersion implements SchemaSyncer.UpdateSelfVersion interface. -func (s *MockSchemaSyncer) UpdateSelfVersion(_ context.Context, jobID int64, version int64) error { - failpoint.Inject("mockUpdateMDLToETCDError", func(val failpoint.Value) { - if val.(bool) { - failpoint.Return(errors.New("mock update mdl to etcd error")) - } - }) - if variable.EnableMDL.Load() { - s.mdlSchemaVersions.Store(jobID, version) - } else { - atomic.StoreInt64(&s.selfSchemaVersion, version) - } - return nil -} - -// Done implements SchemaSyncer.Done interface. -func (s *MockSchemaSyncer) Done() <-chan struct{} { - return s.mockSession -} - -// CloseSession mockSession, it is exported for testing. -func (s *MockSchemaSyncer) CloseSession() { - close(s.mockSession) -} - -// Restart implements SchemaSyncer.Restart interface. -func (s *MockSchemaSyncer) Restart(_ context.Context) error { - s.mockSession = make(chan struct{}, 1) - return nil -} - -// OwnerUpdateGlobalVersion implements SchemaSyncer.OwnerUpdateGlobalVersion interface. -func (s *MockSchemaSyncer) OwnerUpdateGlobalVersion(_ context.Context, _ int64) error { - select { - case s.globalVerCh <- clientv3.WatchResponse{}: - default: - } - return nil -} - -// OwnerCheckAllVersions implements SchemaSyncer.OwnerCheckAllVersions interface. -func (s *MockSchemaSyncer) OwnerCheckAllVersions(ctx context.Context, jobID int64, latestVer int64) error { - ticker := time.NewTicker(mockCheckVersInterval) - defer ticker.Stop() - - failpoint.Inject("mockOwnerCheckAllVersionSlow", func(val failpoint.Value) { - if v, ok := val.(int); ok && v == int(jobID) { - time.Sleep(2 * time.Second) - } - }) - - for { - select { - case <-ctx.Done(): - failpoint.Inject("checkOwnerCheckAllVersionsWaitTime", func(v failpoint.Value) { - if v.(bool) { - panic("shouldn't happen") - } - }) - return errors.Trace(ctx.Err()) - case <-ticker.C: - if variable.EnableMDL.Load() { - ver, ok := s.mdlSchemaVersions.Load(jobID) - if ok && ver.(int64) >= latestVer { - return nil - } - } else { - ver := atomic.LoadInt64(&s.selfSchemaVersion) - if ver >= latestVer { - return nil - } - } - } - } -} - -// SyncJobSchemaVerLoop implements SchemaSyncer.SyncJobSchemaVerLoop interface. -func (*MockSchemaSyncer) SyncJobSchemaVerLoop(context.Context) { -} - -// Close implements SchemaSyncer.Close interface. -func (*MockSchemaSyncer) Close() {} - -// NewMockStateSyncer creates a new mock StateSyncer. -func NewMockStateSyncer() syncer.StateSyncer { - return &MockStateSyncer{} -} - -// clusterState mocks cluster state. -// We move it from MockStateSyncer to here. Because we want to make it unaffected by ddl close. -var clusterState *atomicutil.Pointer[syncer.StateInfo] - -// MockStateSyncer is a mock state syncer, it is exported for testing. -type MockStateSyncer struct { - globalVerCh chan clientv3.WatchResponse - mockSession chan struct{} -} - -// Init implements StateSyncer.Init interface. -func (s *MockStateSyncer) Init(context.Context) error { - s.globalVerCh = make(chan clientv3.WatchResponse, 1) - s.mockSession = make(chan struct{}, 1) - state := syncer.NewStateInfo(syncer.StateNormalRunning) - if clusterState == nil { - clusterState = atomicutil.NewPointer(state) - } - return nil -} - -// UpdateGlobalState implements StateSyncer.UpdateGlobalState interface. -func (s *MockStateSyncer) UpdateGlobalState(_ context.Context, stateInfo *syncer.StateInfo) error { - failpoint.Inject("mockUpgradingState", func(val failpoint.Value) { - if val.(bool) { - clusterState.Store(stateInfo) - failpoint.Return(nil) - } - }) - s.globalVerCh <- clientv3.WatchResponse{} - clusterState.Store(stateInfo) - return nil -} - -// GetGlobalState implements StateSyncer.GetGlobalState interface. -func (*MockStateSyncer) GetGlobalState(context.Context) (*syncer.StateInfo, error) { - return clusterState.Load(), nil -} - -// IsUpgradingState implements StateSyncer.IsUpgradingState interface. -func (*MockStateSyncer) IsUpgradingState() bool { - return clusterState.Load().State == syncer.StateUpgrading -} - -// WatchChan implements StateSyncer.WatchChan interface. -func (s *MockStateSyncer) WatchChan() clientv3.WatchChan { - return s.globalVerCh -} - -// Rewatch implements StateSyncer.Rewatch interface. -func (*MockStateSyncer) Rewatch(context.Context) {} - type mockDelRange struct { } diff --git a/pkg/ddl/modify_column.go b/pkg/ddl/modify_column.go new file mode 100644 index 0000000000000..4978bb73397e1 --- /dev/null +++ b/pkg/ddl/modify_column.go @@ -0,0 +1,1314 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package ddl + +import ( + "bytes" + "context" + "fmt" + "strings" + + "github.com/pingcap/errors" + "github.com/pingcap/failpoint" + "github.com/pingcap/tidb/pkg/ddl/logutil" + sess "github.com/pingcap/tidb/pkg/ddl/session" + "github.com/pingcap/tidb/pkg/errctx" + "github.com/pingcap/tidb/pkg/expression" + exprctx "github.com/pingcap/tidb/pkg/expression/context" + "github.com/pingcap/tidb/pkg/infoschema" + "github.com/pingcap/tidb/pkg/kv" + "github.com/pingcap/tidb/pkg/meta" + "github.com/pingcap/tidb/pkg/meta/autoid" + "github.com/pingcap/tidb/pkg/metrics" + "github.com/pingcap/tidb/pkg/parser" + "github.com/pingcap/tidb/pkg/parser/ast" + "github.com/pingcap/tidb/pkg/parser/charset" + "github.com/pingcap/tidb/pkg/parser/format" + "github.com/pingcap/tidb/pkg/parser/model" + "github.com/pingcap/tidb/pkg/parser/mysql" + "github.com/pingcap/tidb/pkg/sessionctx" + "github.com/pingcap/tidb/pkg/sessionctx/variable" + statsutil "github.com/pingcap/tidb/pkg/statistics/handle/util" + "github.com/pingcap/tidb/pkg/table" + "github.com/pingcap/tidb/pkg/table/tables" + "github.com/pingcap/tidb/pkg/types" + "github.com/pingcap/tidb/pkg/util" + "github.com/pingcap/tidb/pkg/util/dbterror" + "go.uber.org/zap" +) + +type modifyingColInfo struct { + newCol *model.ColumnInfo + oldColName *model.CIStr + modifyColumnTp byte + updatedAutoRandomBits uint64 + changingCol *model.ColumnInfo + changingIdxs []*model.IndexInfo + pos *ast.ColumnPosition + removedIdxs []int64 +} + +func (w *worker) onModifyColumn(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { + dbInfo, tblInfo, oldCol, modifyInfo, err := getModifyColumnInfo(t, job) + if err != nil { + return ver, err + } + + if job.IsRollingback() { + // For those column-type-change jobs which don't reorg the data. + if !needChangeColumnData(oldCol, modifyInfo.newCol) { + return rollbackModifyColumnJob(jobCtx, t, tblInfo, job, modifyInfo.newCol, oldCol, modifyInfo.modifyColumnTp) + } + // For those column-type-change jobs which reorg the data. + return rollbackModifyColumnJobWithData(jobCtx, t, tblInfo, job, oldCol, modifyInfo) + } + + // If we want to rename the column name, we need to check whether it already exists. + if modifyInfo.newCol.Name.L != modifyInfo.oldColName.L { + c := model.FindColumnInfo(tblInfo.Columns, modifyInfo.newCol.Name.L) + if c != nil { + job.State = model.JobStateCancelled + return ver, errors.Trace(infoschema.ErrColumnExists.GenWithStackByArgs(modifyInfo.newCol.Name)) + } + } + + failpoint.Inject("uninitializedOffsetAndState", func(val failpoint.Value) { + //nolint:forcetypeassert + if val.(bool) { + if modifyInfo.newCol.State != model.StatePublic { + failpoint.Return(ver, errors.New("the column state is wrong")) + } + } + }) + + err = checkAndApplyAutoRandomBits(jobCtx, t, dbInfo, tblInfo, oldCol, modifyInfo.newCol, modifyInfo.updatedAutoRandomBits) + if err != nil { + job.State = model.JobStateCancelled + return ver, errors.Trace(err) + } + + if !needChangeColumnData(oldCol, modifyInfo.newCol) { + return w.doModifyColumn(jobCtx, t, job, dbInfo, tblInfo, modifyInfo.newCol, oldCol, modifyInfo.pos) + } + + if err = isGeneratedRelatedColumn(tblInfo, modifyInfo.newCol, oldCol); err != nil { + job.State = model.JobStateCancelled + return ver, errors.Trace(err) + } + if tblInfo.Partition != nil { + job.State = model.JobStateCancelled + return ver, errors.Trace(dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs("table is partition table")) + } + + changingCol := modifyInfo.changingCol + if changingCol == nil { + newColName := model.NewCIStr(genChangingColumnUniqueName(tblInfo, oldCol)) + if mysql.HasPriKeyFlag(oldCol.GetFlag()) { + job.State = model.JobStateCancelled + msg := "this column has primary key flag" + return ver, dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs(msg) + } + + changingCol = modifyInfo.newCol.Clone() + changingCol.Name = newColName + changingCol.ChangeStateInfo = &model.ChangeStateInfo{DependencyColumnOffset: oldCol.Offset} + + originDefVal, err := GetOriginDefaultValueForModifyColumn(newReorgExprCtx(), changingCol, oldCol) + if err != nil { + return ver, errors.Trace(err) + } + if err = changingCol.SetOriginDefaultValue(originDefVal); err != nil { + return ver, errors.Trace(err) + } + + InitAndAddColumnToTable(tblInfo, changingCol) + indexesToChange := FindRelatedIndexesToChange(tblInfo, oldCol.Name) + for _, info := range indexesToChange { + newIdxID := AllocateIndexID(tblInfo) + if !info.isTemp { + // We create a temp index for each normal index. + tmpIdx := info.IndexInfo.Clone() + tmpIdxName := genChangingIndexUniqueName(tblInfo, info.IndexInfo) + setIdxIDName(tmpIdx, newIdxID, model.NewCIStr(tmpIdxName)) + SetIdxColNameOffset(tmpIdx.Columns[info.Offset], changingCol) + tblInfo.Indices = append(tblInfo.Indices, tmpIdx) + } else { + // The index is a temp index created by previous modify column job(s). + // We can overwrite it to reduce reorg cost, because it will be dropped eventually. + tmpIdx := info.IndexInfo + oldTempIdxID := tmpIdx.ID + setIdxIDName(tmpIdx, newIdxID, tmpIdx.Name /* unchanged */) + SetIdxColNameOffset(tmpIdx.Columns[info.Offset], changingCol) + modifyInfo.removedIdxs = append(modifyInfo.removedIdxs, oldTempIdxID) + } + } + } else { + changingCol = model.FindColumnInfoByID(tblInfo.Columns, modifyInfo.changingCol.ID) + if changingCol == nil { + logutil.DDLLogger().Error("the changing column has been removed", zap.Error(err)) + job.State = model.JobStateCancelled + return ver, errors.Trace(infoschema.ErrColumnNotExists.GenWithStackByArgs(oldCol.Name, tblInfo.Name)) + } + } + + return w.doModifyColumnTypeWithData(jobCtx, t, job, dbInfo, tblInfo, changingCol, oldCol, modifyInfo.newCol.Name, modifyInfo.pos, modifyInfo.removedIdxs) +} + +// rollbackModifyColumnJob rollbacks the job when an error occurs. +func rollbackModifyColumnJob(jobCtx *jobContext, t *meta.Meta, tblInfo *model.TableInfo, job *model.Job, newCol, oldCol *model.ColumnInfo, modifyColumnTp byte) (ver int64, _ error) { + var err error + if oldCol.ID == newCol.ID && modifyColumnTp == mysql.TypeNull { + // field NotNullFlag flag reset. + tblInfo.Columns[oldCol.Offset].SetFlag(oldCol.GetFlag() &^ mysql.NotNullFlag) + // field PreventNullInsertFlag flag reset. + tblInfo.Columns[oldCol.Offset].SetFlag(oldCol.GetFlag() &^ mysql.PreventNullInsertFlag) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) + if err != nil { + return ver, errors.Trace(err) + } + } + job.FinishTableJob(model.JobStateRollbackDone, model.StateNone, ver, tblInfo) + // For those column-type-change type which doesn't need reorg data, we should also mock the job args for delete range. + job.Args = []any{[]int64{}, []int64{}} + return ver, nil +} + +func getModifyColumnInfo(t *meta.Meta, job *model.Job) (*model.DBInfo, *model.TableInfo, *model.ColumnInfo, *modifyingColInfo, error) { + modifyInfo := &modifyingColInfo{pos: &ast.ColumnPosition{}} + err := job.DecodeArgs(&modifyInfo.newCol, &modifyInfo.oldColName, modifyInfo.pos, &modifyInfo.modifyColumnTp, + &modifyInfo.updatedAutoRandomBits, &modifyInfo.changingCol, &modifyInfo.changingIdxs, &modifyInfo.removedIdxs) + if err != nil { + job.State = model.JobStateCancelled + return nil, nil, nil, modifyInfo, errors.Trace(err) + } + + dbInfo, err := checkSchemaExistAndCancelNotExistJob(t, job) + if err != nil { + return nil, nil, nil, modifyInfo, errors.Trace(err) + } + + tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) + if err != nil { + return nil, nil, nil, modifyInfo, errors.Trace(err) + } + + oldCol := model.FindColumnInfo(tblInfo.Columns, modifyInfo.oldColName.L) + if oldCol == nil || oldCol.State != model.StatePublic { + job.State = model.JobStateCancelled + return nil, nil, nil, modifyInfo, errors.Trace(infoschema.ErrColumnNotExists.GenWithStackByArgs(*(modifyInfo.oldColName), tblInfo.Name)) + } + + return dbInfo, tblInfo, oldCol, modifyInfo, errors.Trace(err) +} + +// GetOriginDefaultValueForModifyColumn gets the original default value for modifying column. +// Since column type change is implemented as adding a new column then substituting the old one. +// Case exists when update-where statement fetch a NULL for not-null column without any default data, +// it will errors. +// So we set original default value here to prevent this error. If the oldCol has the original default value, we use it. +// Otherwise we set the zero value as original default value. +// Besides, in insert & update records, we have already implement using the casted value of relative column to insert +// rather than the original default value. +func GetOriginDefaultValueForModifyColumn(ctx exprctx.BuildContext, changingCol, oldCol *model.ColumnInfo) (any, error) { + var err error + originDefVal := oldCol.GetOriginDefaultValue() + if originDefVal != nil { + odv, err := table.CastColumnValue(ctx, types.NewDatum(originDefVal), changingCol, false, false) + if err != nil { + logutil.DDLLogger().Info("cast origin default value failed", zap.Error(err)) + } + if !odv.IsNull() { + if originDefVal, err = odv.ToString(); err != nil { + originDefVal = nil + logutil.DDLLogger().Info("convert default value to string failed", zap.Error(err)) + } + } + } + if originDefVal == nil { + originDefVal, err = generateOriginDefaultValue(changingCol, nil) + if err != nil { + return nil, errors.Trace(err) + } + } + return originDefVal, nil +} + +// rollbackModifyColumnJobWithData is used to rollback modify-column job which need to reorg the data. +func rollbackModifyColumnJobWithData(jobCtx *jobContext, t *meta.Meta, tblInfo *model.TableInfo, job *model.Job, oldCol *model.ColumnInfo, modifyInfo *modifyingColInfo) (ver int64, err error) { + // If the not-null change is included, we should clean the flag info in oldCol. + if modifyInfo.modifyColumnTp == mysql.TypeNull { + // Reset NotNullFlag flag. + tblInfo.Columns[oldCol.Offset].SetFlag(oldCol.GetFlag() &^ mysql.NotNullFlag) + // Reset PreventNullInsertFlag flag. + tblInfo.Columns[oldCol.Offset].SetFlag(oldCol.GetFlag() &^ mysql.PreventNullInsertFlag) + } + var changingIdxIDs []int64 + if modifyInfo.changingCol != nil { + changingIdxIDs = buildRelatedIndexIDs(tblInfo, modifyInfo.changingCol.ID) + // The job is in the middle state. The appended changingCol and changingIndex should + // be removed from the tableInfo as well. + removeChangingColAndIdxs(tblInfo, modifyInfo.changingCol.ID) + } + ver, err = updateVersionAndTableInfoWithCheck(jobCtx, t, job, tblInfo, true) + if err != nil { + return ver, errors.Trace(err) + } + job.FinishTableJob(model.JobStateRollbackDone, model.StateNone, ver, tblInfo) + // Reconstruct the job args to add the temporary index ids into delete range table. + job.Args = []any{changingIdxIDs, getPartitionIDs(tblInfo)} + return ver, nil +} + +// doModifyColumn updates the column information and reorders all columns. It does not support modifying column data. +func (w *worker) doModifyColumn( + jobCtx *jobContext, t *meta.Meta, job *model.Job, dbInfo *model.DBInfo, tblInfo *model.TableInfo, + newCol, oldCol *model.ColumnInfo, pos *ast.ColumnPosition) (ver int64, _ error) { + if oldCol.ID != newCol.ID { + job.State = model.JobStateRollingback + return ver, dbterror.ErrColumnInChange.GenWithStackByArgs(oldCol.Name, newCol.ID) + } + // Column from null to not null. + if !mysql.HasNotNullFlag(oldCol.GetFlag()) && mysql.HasNotNullFlag(newCol.GetFlag()) { + noPreventNullFlag := !mysql.HasPreventNullInsertFlag(oldCol.GetFlag()) + + // We need to check after the flag is set + if !noPreventNullFlag { + delayForAsyncCommit() + } + + // Introduce the `mysql.PreventNullInsertFlag` flag to prevent users from inserting or updating null values. + err := modifyColsFromNull2NotNull(w, dbInfo, tblInfo, []*model.ColumnInfo{oldCol}, newCol, oldCol.GetType() != newCol.GetType()) + if err != nil { + if dbterror.ErrWarnDataTruncated.Equal(err) || dbterror.ErrInvalidUseOfNull.Equal(err) { + job.State = model.JobStateRollingback + } + return ver, err + } + // The column should get into prevent null status first. + if noPreventNullFlag { + return updateVersionAndTableInfoWithCheck(jobCtx, t, job, tblInfo, true) + } + } + + if job.MultiSchemaInfo != nil && job.MultiSchemaInfo.Revertible { + job.MarkNonRevertible() + // Store the mark and enter the next DDL handling loop. + return updateVersionAndTableInfoWithCheck(jobCtx, t, job, tblInfo, false) + } + + if err := adjustTableInfoAfterModifyColumn(tblInfo, newCol, oldCol, pos); err != nil { + job.State = model.JobStateRollingback + return ver, errors.Trace(err) + } + + childTableInfos, err := adjustForeignKeyChildTableInfoAfterModifyColumn(jobCtx.infoCache, t, job, tblInfo, newCol, oldCol) + if err != nil { + return ver, errors.Trace(err) + } + ver, err = updateVersionAndTableInfoWithCheck(jobCtx, t, job, tblInfo, true, childTableInfos...) + if err != nil { + // Modified the type definition of 'null' to 'not null' before this, so rollBack the job when an error occurs. + job.State = model.JobStateRollingback + return ver, errors.Trace(err) + } + + job.FinishTableJob(model.JobStateDone, model.StatePublic, ver, tblInfo) + // For those column-type-change type which doesn't need reorg data, we should also mock the job args for delete range. + job.Args = []any{[]int64{}, []int64{}} + return ver, nil +} + +func adjustTableInfoAfterModifyColumn( + tblInfo *model.TableInfo, newCol, oldCol *model.ColumnInfo, pos *ast.ColumnPosition) error { + // We need the latest column's offset and state. This information can be obtained from the store. + newCol.Offset = oldCol.Offset + newCol.State = oldCol.State + if pos != nil && pos.RelativeColumn != nil && oldCol.Name.L == pos.RelativeColumn.Name.L { + // For cases like `modify column b after b`, it should report this error. + return errors.Trace(infoschema.ErrColumnNotExists.GenWithStackByArgs(oldCol.Name, tblInfo.Name)) + } + destOffset, err := LocateOffsetToMove(oldCol.Offset, pos, tblInfo) + if err != nil { + return errors.Trace(infoschema.ErrColumnNotExists.GenWithStackByArgs(oldCol.Name, tblInfo.Name)) + } + tblInfo.Columns[oldCol.Offset] = newCol + tblInfo.MoveColumnInfo(oldCol.Offset, destOffset) + updateNewIdxColsNameOffset(tblInfo.Indices, oldCol.Name, newCol) + updateFKInfoWhenModifyColumn(tblInfo, oldCol.Name, newCol.Name) + updateTTLInfoWhenModifyColumn(tblInfo, oldCol.Name, newCol.Name) + return nil +} + +func updateFKInfoWhenModifyColumn(tblInfo *model.TableInfo, oldCol, newCol model.CIStr) { + if oldCol.L == newCol.L { + return + } + for _, fk := range tblInfo.ForeignKeys { + for i := range fk.Cols { + if fk.Cols[i].L == oldCol.L { + fk.Cols[i] = newCol + } + } + } +} + +func updateTTLInfoWhenModifyColumn(tblInfo *model.TableInfo, oldCol, newCol model.CIStr) { + if oldCol.L == newCol.L { + return + } + if tblInfo.TTLInfo != nil { + if tblInfo.TTLInfo.ColumnName.L == oldCol.L { + tblInfo.TTLInfo.ColumnName = newCol + } + } +} + +func adjustForeignKeyChildTableInfoAfterModifyColumn(infoCache *infoschema.InfoCache, t *meta.Meta, job *model.Job, tblInfo *model.TableInfo, newCol, oldCol *model.ColumnInfo) ([]schemaIDAndTableInfo, error) { + if !variable.EnableForeignKey.Load() || newCol.Name.L == oldCol.Name.L { + return nil, nil + } + is := infoCache.GetLatest() + referredFKs := is.GetTableReferredForeignKeys(job.SchemaName, tblInfo.Name.L) + if len(referredFKs) == 0 { + return nil, nil + } + fkh := newForeignKeyHelper() + fkh.addLoadedTable(job.SchemaName, tblInfo.Name.L, job.SchemaID, tblInfo) + for _, referredFK := range referredFKs { + info, err := fkh.getTableFromStorage(is, t, referredFK.ChildSchema, referredFK.ChildTable) + if err != nil { + if infoschema.ErrTableNotExists.Equal(err) || infoschema.ErrDatabaseNotExists.Equal(err) { + continue + } + return nil, err + } + fkInfo := model.FindFKInfoByName(info.tblInfo.ForeignKeys, referredFK.ChildFKName.L) + if fkInfo == nil { + continue + } + for i := range fkInfo.RefCols { + if fkInfo.RefCols[i].L == oldCol.Name.L { + fkInfo.RefCols[i] = newCol.Name + } + } + } + infoList := make([]schemaIDAndTableInfo, 0, len(fkh.loaded)) + for _, info := range fkh.loaded { + if info.tblInfo.ID == tblInfo.ID { + continue + } + infoList = append(infoList, info) + } + return infoList, nil +} + +func (w *worker) doModifyColumnTypeWithData( + jobCtx *jobContext, t *meta.Meta, job *model.Job, + dbInfo *model.DBInfo, tblInfo *model.TableInfo, changingCol, oldCol *model.ColumnInfo, + colName model.CIStr, pos *ast.ColumnPosition, rmIdxIDs []int64) (ver int64, _ error) { + var err error + originalState := changingCol.State + targetCol := changingCol.Clone() + targetCol.Name = colName + changingIdxs := buildRelatedIndexInfos(tblInfo, changingCol.ID) + switch changingCol.State { + case model.StateNone: + // Column from null to not null. + if !mysql.HasNotNullFlag(oldCol.GetFlag()) && mysql.HasNotNullFlag(changingCol.GetFlag()) { + // Introduce the `mysql.PreventNullInsertFlag` flag to prevent users from inserting or updating null values. + err := modifyColsFromNull2NotNull(w, dbInfo, tblInfo, []*model.ColumnInfo{oldCol}, targetCol, oldCol.GetType() != changingCol.GetType()) + if err != nil { + if dbterror.ErrWarnDataTruncated.Equal(err) || dbterror.ErrInvalidUseOfNull.Equal(err) { + job.State = model.JobStateRollingback + } + return ver, err + } + } + // none -> delete only + updateChangingObjState(changingCol, changingIdxs, model.StateDeleteOnly) + failpoint.Inject("mockInsertValueAfterCheckNull", func(val failpoint.Value) { + if valStr, ok := val.(string); ok { + var sctx sessionctx.Context + sctx, err := w.sessPool.Get() + if err != nil { + failpoint.Return(ver, err) + } + defer w.sessPool.Put(sctx) + + ctx := kv.WithInternalSourceType(context.Background(), kv.InternalTxnDDL) + //nolint:forcetypeassert + _, _, err = sctx.GetRestrictedSQLExecutor().ExecRestrictedSQL(ctx, nil, valStr) + if err != nil { + job.State = model.JobStateCancelled + failpoint.Return(ver, err) + } + } + }) + ver, err = updateVersionAndTableInfoWithCheck(jobCtx, t, job, tblInfo, originalState != changingCol.State) + if err != nil { + return ver, errors.Trace(err) + } + // Make sure job args change after `updateVersionAndTableInfoWithCheck`, otherwise, the job args will + // be updated in `updateDDLJob` even if it meets an error in `updateVersionAndTableInfoWithCheck`. + job.SchemaState = model.StateDeleteOnly + metrics.GetBackfillProgressByLabel(metrics.LblModifyColumn, job.SchemaName, tblInfo.Name.String()).Set(0) + job.Args = append(job.Args, changingCol, changingIdxs, rmIdxIDs) + case model.StateDeleteOnly: + // Column from null to not null. + if !mysql.HasNotNullFlag(oldCol.GetFlag()) && mysql.HasNotNullFlag(changingCol.GetFlag()) { + // Introduce the `mysql.PreventNullInsertFlag` flag to prevent users from inserting or updating null values. + err := modifyColsFromNull2NotNull(w, dbInfo, tblInfo, []*model.ColumnInfo{oldCol}, targetCol, oldCol.GetType() != changingCol.GetType()) + if err != nil { + if dbterror.ErrWarnDataTruncated.Equal(err) || dbterror.ErrInvalidUseOfNull.Equal(err) { + job.State = model.JobStateRollingback + } + return ver, err + } + } + // delete only -> write only + updateChangingObjState(changingCol, changingIdxs, model.StateWriteOnly) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, originalState != changingCol.State) + if err != nil { + return ver, errors.Trace(err) + } + job.SchemaState = model.StateWriteOnly + failpoint.InjectCall("afterModifyColumnStateDeleteOnly", job.ID) + case model.StateWriteOnly: + // write only -> reorganization + updateChangingObjState(changingCol, changingIdxs, model.StateWriteReorganization) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, originalState != changingCol.State) + if err != nil { + return ver, errors.Trace(err) + } + // Initialize SnapshotVer to 0 for later reorganization check. + job.SnapshotVer = 0 + job.SchemaState = model.StateWriteReorganization + case model.StateWriteReorganization: + tbl, err := getTable(jobCtx.getAutoIDRequirement(), dbInfo.ID, tblInfo) + if err != nil { + return ver, errors.Trace(err) + } + + var done bool + if job.MultiSchemaInfo != nil { + done, ver, err = doReorgWorkForModifyColumnMultiSchema(w, jobCtx, t, job, tbl, oldCol, changingCol, changingIdxs) + } else { + done, ver, err = doReorgWorkForModifyColumn(w, jobCtx, t, job, tbl, oldCol, changingCol, changingIdxs) + } + if !done { + return ver, err + } + + rmIdxIDs = append(buildRelatedIndexIDs(tblInfo, oldCol.ID), rmIdxIDs...) + + err = adjustTableInfoAfterModifyColumnWithData(tblInfo, pos, oldCol, changingCol, colName, changingIdxs) + if err != nil { + job.State = model.JobStateRollingback + return ver, errors.Trace(err) + } + + updateChangingObjState(changingCol, changingIdxs, model.StatePublic) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, originalState != changingCol.State) + if err != nil { + return ver, errors.Trace(err) + } + + // Finish this job. + job.FinishTableJob(model.JobStateDone, model.StatePublic, ver, tblInfo) + // Refactor the job args to add the old index ids into delete range table. + job.Args = []any{rmIdxIDs, getPartitionIDs(tblInfo)} + modifyColumnEvent := statsutil.NewModifyColumnEvent( + job.SchemaID, + tblInfo, + []*model.ColumnInfo{changingCol}, + ) + asyncNotifyEvent(jobCtx, modifyColumnEvent) + default: + err = dbterror.ErrInvalidDDLState.GenWithStackByArgs("column", changingCol.State) + } + + return ver, errors.Trace(err) +} + +func doReorgWorkForModifyColumnMultiSchema(w *worker, jobCtx *jobContext, t *meta.Meta, job *model.Job, tbl table.Table, + oldCol, changingCol *model.ColumnInfo, changingIdxs []*model.IndexInfo) (done bool, ver int64, err error) { + if job.MultiSchemaInfo.Revertible { + done, ver, err = doReorgWorkForModifyColumn(w, jobCtx, t, job, tbl, oldCol, changingCol, changingIdxs) + if done { + // We need another round to wait for all the others sub-jobs to finish. + job.MarkNonRevertible() + } + // We need another round to run the reorg process. + return false, ver, err + } + // Non-revertible means all the sub jobs finished. + return true, ver, err +} + +func doReorgWorkForModifyColumn(w *worker, jobCtx *jobContext, t *meta.Meta, job *model.Job, tbl table.Table, + oldCol, changingCol *model.ColumnInfo, changingIdxs []*model.IndexInfo) (done bool, ver int64, err error) { + job.ReorgMeta.ReorgTp = model.ReorgTypeTxn + sctx, err1 := w.sessPool.Get() + if err1 != nil { + err = errors.Trace(err1) + return + } + defer w.sessPool.Put(sctx) + rh := newReorgHandler(sess.NewSession(sctx)) + dbInfo, err := t.GetDatabase(job.SchemaID) + if err != nil { + return false, ver, errors.Trace(err) + } + reorgInfo, err := getReorgInfo(jobCtx.oldDDLCtx.jobContext(job.ID, job.ReorgMeta), + jobCtx, rh, job, dbInfo, tbl, BuildElements(changingCol, changingIdxs), false) + if err != nil || reorgInfo == nil || reorgInfo.first { + // If we run reorg firstly, we should update the job snapshot version + // and then run the reorg next time. + return false, ver, errors.Trace(err) + } + + // Inject a failpoint so that we can pause here and do verification on other components. + // With a failpoint-enabled version of TiDB, you can trigger this failpoint by the following command: + // enable: curl -X PUT -d "pause" "http://127.0.0.1:10080/fail/github.com/pingcap/tidb/pkg/ddl/mockDelayInModifyColumnTypeWithData". + // disable: curl -X DELETE "http://127.0.0.1:10080/fail/github.com/pingcap/tidb/pkg/ddl/mockDelayInModifyColumnTypeWithData" + failpoint.Inject("mockDelayInModifyColumnTypeWithData", func() {}) + err = w.runReorgJob(reorgInfo, tbl.Meta(), func() (addIndexErr error) { + defer util.Recover(metrics.LabelDDL, "onModifyColumn", + func() { + addIndexErr = dbterror.ErrCancelledDDLJob.GenWithStack("modify table `%v` column `%v` panic", tbl.Meta().Name, oldCol.Name) + }, false) + // Use old column name to generate less confusing error messages. + changingColCpy := changingCol.Clone() + changingColCpy.Name = oldCol.Name + return w.updateCurrentElement(tbl, reorgInfo) + }) + if err != nil { + if dbterror.ErrPausedDDLJob.Equal(err) { + return false, ver, nil + } + + if dbterror.ErrWaitReorgTimeout.Equal(err) { + // If timeout, we should return, check for the owner and re-wait job done. + return false, ver, nil + } + if kv.IsTxnRetryableError(err) || dbterror.ErrNotOwner.Equal(err) { + return false, ver, errors.Trace(err) + } + if err1 := rh.RemoveDDLReorgHandle(job, reorgInfo.elements); err1 != nil { + logutil.DDLLogger().Warn("run modify column job failed, RemoveDDLReorgHandle failed, can't convert job to rollback", + zap.String("job", job.String()), zap.Error(err1)) + } + logutil.DDLLogger().Warn("run modify column job failed, convert job to rollback", zap.Stringer("job", job), zap.Error(err)) + job.State = model.JobStateRollingback + return false, ver, errors.Trace(err) + } + return true, ver, nil +} + +func adjustTableInfoAfterModifyColumnWithData(tblInfo *model.TableInfo, pos *ast.ColumnPosition, + oldCol, changingCol *model.ColumnInfo, newName model.CIStr, changingIdxs []*model.IndexInfo) (err error) { + if pos != nil && pos.RelativeColumn != nil && oldCol.Name.L == pos.RelativeColumn.Name.L { + // For cases like `modify column b after b`, it should report this error. + return errors.Trace(infoschema.ErrColumnNotExists.GenWithStackByArgs(oldCol.Name, tblInfo.Name)) + } + internalColName := changingCol.Name + changingCol = replaceOldColumn(tblInfo, oldCol, changingCol, newName) + if len(changingIdxs) > 0 { + updateNewIdxColsNameOffset(changingIdxs, internalColName, changingCol) + indexesToRemove := filterIndexesToRemove(changingIdxs, newName, tblInfo) + replaceOldIndexes(tblInfo, indexesToRemove) + } + if tblInfo.TTLInfo != nil { + updateTTLInfoWhenModifyColumn(tblInfo, oldCol.Name, changingCol.Name) + } + // Move the new column to a correct offset. + destOffset, err := LocateOffsetToMove(changingCol.Offset, pos, tblInfo) + if err != nil { + return errors.Trace(err) + } + tblInfo.MoveColumnInfo(changingCol.Offset, destOffset) + return nil +} + +func checkModifyColumnWithGeneratedColumnsConstraint(allCols []*table.Column, oldColName model.CIStr) error { + for _, col := range allCols { + if col.GeneratedExpr == nil { + continue + } + dependedColNames := FindColumnNamesInExpr(col.GeneratedExpr.Internal()) + for _, name := range dependedColNames { + if name.Name.L == oldColName.L { + if col.Hidden { + return dbterror.ErrDependentByFunctionalIndex.GenWithStackByArgs(oldColName.O) + } + return dbterror.ErrDependentByGeneratedColumn.GenWithStackByArgs(oldColName.O) + } + } + } + return nil +} + +// GetModifiableColumnJob returns a DDL job of model.ActionModifyColumn. +func GetModifiableColumnJob( + ctx context.Context, + sctx sessionctx.Context, + is infoschema.InfoSchema, // WARN: is maybe nil here. + ident ast.Ident, + originalColName model.CIStr, + schema *model.DBInfo, + t table.Table, + spec *ast.AlterTableSpec, +) (*model.Job, error) { + var err error + specNewColumn := spec.NewColumns[0] + + col := table.FindCol(t.Cols(), originalColName.L) + if col == nil { + return nil, infoschema.ErrColumnNotExists.GenWithStackByArgs(originalColName, ident.Name) + } + newColName := specNewColumn.Name.Name + if newColName.L == model.ExtraHandleName.L { + return nil, dbterror.ErrWrongColumnName.GenWithStackByArgs(newColName.L) + } + errG := checkModifyColumnWithGeneratedColumnsConstraint(t.Cols(), originalColName) + + // If we want to rename the column name, we need to check whether it already exists. + if newColName.L != originalColName.L { + c := table.FindCol(t.Cols(), newColName.L) + if c != nil { + return nil, infoschema.ErrColumnExists.GenWithStackByArgs(newColName) + } + + // And also check the generated columns dependency, if some generated columns + // depend on this column, we can't rename the column name. + if errG != nil { + return nil, errors.Trace(errG) + } + } + + // Constraints in the new column means adding new constraints. Errors should thrown, + // which will be done by `processColumnOptions` later. + if specNewColumn.Tp == nil { + // Make sure the column definition is simple field type. + return nil, errors.Trace(dbterror.ErrUnsupportedModifyColumn) + } + + if err = checkColumnAttributes(specNewColumn.Name.OrigColName(), specNewColumn.Tp); err != nil { + return nil, errors.Trace(err) + } + + newCol := table.ToColumn(&model.ColumnInfo{ + ID: col.ID, + // We use this PR(https://github.com/pingcap/tidb/pull/6274) as the dividing line to define whether it is a new version or an old version TiDB. + // The old version TiDB initializes the column's offset and state here. + // The new version TiDB doesn't initialize the column's offset and state, and it will do the initialization in run DDL function. + // When we do the rolling upgrade the following may happen: + // a new version TiDB builds the DDL job that doesn't be set the column's offset and state, + // and the old version TiDB is the DDL owner, it doesn't get offset and state from the store. Then it will encounter errors. + // So here we set offset and state to support the rolling upgrade. + Offset: col.Offset, + State: col.State, + OriginDefaultValue: col.OriginDefaultValue, + OriginDefaultValueBit: col.OriginDefaultValueBit, + FieldType: *specNewColumn.Tp, + Name: newColName, + Version: col.Version, + }) + + if err = ProcessColumnCharsetAndCollation(sctx, col, newCol, t.Meta(), specNewColumn, schema); err != nil { + return nil, err + } + + if err = checkModifyColumnWithForeignKeyConstraint(is, schema.Name.L, t.Meta(), col.ColumnInfo, newCol.ColumnInfo); err != nil { + return nil, errors.Trace(err) + } + + // Copy index related options to the new spec. + indexFlags := col.FieldType.GetFlag() & (mysql.PriKeyFlag | mysql.UniqueKeyFlag | mysql.MultipleKeyFlag) + newCol.FieldType.AddFlag(indexFlags) + if mysql.HasPriKeyFlag(col.FieldType.GetFlag()) { + newCol.FieldType.AddFlag(mysql.NotNullFlag) + // TODO: If user explicitly set NULL, we should throw error ErrPrimaryCantHaveNull. + } + + if err = ProcessModifyColumnOptions(sctx, newCol, specNewColumn.Options); err != nil { + return nil, errors.Trace(err) + } + + if err = checkModifyTypes(&col.FieldType, &newCol.FieldType, isColumnWithIndex(col.Name.L, t.Meta().Indices)); err != nil { + if strings.Contains(err.Error(), "Unsupported modifying collation") { + colErrMsg := "Unsupported modifying collation of column '%s' from '%s' to '%s' when index is defined on it." + err = dbterror.ErrUnsupportedModifyCollation.GenWithStack(colErrMsg, col.Name.L, col.GetCollate(), newCol.GetCollate()) + } + return nil, errors.Trace(err) + } + needChangeColData := needChangeColumnData(col.ColumnInfo, newCol.ColumnInfo) + if needChangeColData { + if err = isGeneratedRelatedColumn(t.Meta(), newCol.ColumnInfo, col.ColumnInfo); err != nil { + return nil, errors.Trace(err) + } + if t.Meta().Partition != nil { + return nil, dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs("table is partition table") + } + } + + // Check that the column change does not affect the partitioning column + // It must keep the same type, int [unsigned], [var]char, date[time] + if t.Meta().Partition != nil { + pt, ok := t.(table.PartitionedTable) + if !ok { + // Should never happen! + return nil, dbterror.ErrNotAllowedTypeInPartition.GenWithStackByArgs(newCol.Name.O) + } + isPartitioningColumn := false + for _, name := range pt.GetPartitionColumnNames() { + if strings.EqualFold(name.L, col.Name.L) { + isPartitioningColumn = true + break + } + } + if isPartitioningColumn { + // TODO: update the partitioning columns with new names if column is renamed + // Would be an extension from MySQL which does not support it. + if col.Name.L != newCol.Name.L { + return nil, dbterror.ErrDependentByPartitionFunctional.GenWithStackByArgs(col.Name.L) + } + if !isColTypeAllowedAsPartitioningCol(t.Meta().Partition.Type, newCol.FieldType) { + return nil, dbterror.ErrNotAllowedTypeInPartition.GenWithStackByArgs(newCol.Name.O) + } + pi := pt.Meta().GetPartitionInfo() + if len(pi.Columns) == 0 { + // non COLUMNS partitioning, only checks INTs, not their actual range + // There are many edge cases, like when truncating SQL Mode is allowed + // which will change the partitioning expression value resulting in a + // different partition. Better be safe and not allow decreasing of length. + // TODO: Should we allow it in strict mode? Wait for a use case / request. + if newCol.FieldType.GetFlen() < col.FieldType.GetFlen() { + return nil, dbterror.ErrUnsupportedModifyCollation.GenWithStack("Unsupported modify column, decreasing length of int may result in truncation and change of partition") + } + } + // Basically only allow changes of the length/decimals for the column + // Note that enum is not allowed, so elems are not checked + // TODO: support partition by ENUM + if newCol.FieldType.EvalType() != col.FieldType.EvalType() || + newCol.FieldType.GetFlag() != col.FieldType.GetFlag() || + newCol.FieldType.GetCollate() != col.FieldType.GetCollate() || + newCol.FieldType.GetCharset() != col.FieldType.GetCharset() { + return nil, dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs("can't change the partitioning column, since it would require reorganize all partitions") + } + // Generate a new PartitionInfo and validate it together with the new column definition + // Checks if all partition definition values are compatible. + // Similar to what buildRangePartitionDefinitions would do in terms of checks. + + tblInfo := pt.Meta() + newTblInfo := *tblInfo + // Replace col with newCol and see if we can generate a new SHOW CREATE TABLE + // and reparse it and build new partition definitions (which will do additional + // checks columns vs partition definition values + newCols := make([]*model.ColumnInfo, 0, len(newTblInfo.Columns)) + for _, c := range newTblInfo.Columns { + if c.ID == col.ID { + newCols = append(newCols, newCol.ColumnInfo) + continue + } + newCols = append(newCols, c) + } + newTblInfo.Columns = newCols + + var buf bytes.Buffer + AppendPartitionInfo(tblInfo.GetPartitionInfo(), &buf, mysql.ModeNone) + // The parser supports ALTER TABLE ... PARTITION BY ... even if the ddl code does not yet :) + // Ignoring warnings + stmt, _, err := parser.New().ParseSQL("ALTER TABLE t " + buf.String()) + if err != nil { + // Should never happen! + return nil, dbterror.ErrUnsupportedModifyColumn.GenWithStack("cannot parse generated PartitionInfo") + } + at, ok := stmt[0].(*ast.AlterTableStmt) + if !ok || len(at.Specs) != 1 || at.Specs[0].Partition == nil { + return nil, dbterror.ErrUnsupportedModifyColumn.GenWithStack("cannot parse generated PartitionInfo") + } + pAst := at.Specs[0].Partition + _, err = buildPartitionDefinitionsInfo( + exprctx.CtxWithHandleTruncateErrLevel(sctx.GetExprCtx(), errctx.LevelError), + pAst.Definitions, &newTblInfo, uint64(len(newTblInfo.Partition.Definitions)), + ) + if err != nil { + return nil, dbterror.ErrUnsupportedModifyColumn.GenWithStack("New column does not match partition definitions: %s", err.Error()) + } + } + } + + // We don't support modifying column from not_auto_increment to auto_increment. + if !mysql.HasAutoIncrementFlag(col.GetFlag()) && mysql.HasAutoIncrementFlag(newCol.GetFlag()) { + return nil, dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs("can't set auto_increment") + } + // Not support auto id with default value. + if mysql.HasAutoIncrementFlag(newCol.GetFlag()) && newCol.GetDefaultValue() != nil { + return nil, dbterror.ErrInvalidDefaultValue.GenWithStackByArgs(newCol.Name) + } + // Disallow modifying column from auto_increment to not auto_increment if the session variable `AllowRemoveAutoInc` is false. + if !sctx.GetSessionVars().AllowRemoveAutoInc && mysql.HasAutoIncrementFlag(col.GetFlag()) && !mysql.HasAutoIncrementFlag(newCol.GetFlag()) { + return nil, dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs("can't remove auto_increment without @@tidb_allow_remove_auto_inc enabled") + } + + // We support modifying the type definitions of 'null' to 'not null' now. + var modifyColumnTp byte + if !mysql.HasNotNullFlag(col.GetFlag()) && mysql.HasNotNullFlag(newCol.GetFlag()) { + if err = checkForNullValue(ctx, sctx, true, ident.Schema, ident.Name, newCol.ColumnInfo, col.ColumnInfo); err != nil { + return nil, errors.Trace(err) + } + // `modifyColumnTp` indicates that there is a type modification. + modifyColumnTp = mysql.TypeNull + } + + if err = checkColumnWithIndexConstraint(t.Meta(), col.ColumnInfo, newCol.ColumnInfo); err != nil { + return nil, err + } + + // As same with MySQL, we don't support modifying the stored status for generated columns. + if err = checkModifyGeneratedColumn(sctx, schema.Name, t, col, newCol, specNewColumn, spec.Position); err != nil { + return nil, errors.Trace(err) + } + if errG != nil { + // According to issue https://github.com/pingcap/tidb/issues/24321, + // changing the type of a column involving generating a column is prohibited. + return nil, dbterror.ErrUnsupportedOnGeneratedColumn.GenWithStackByArgs(errG.Error()) + } + + if t.Meta().TTLInfo != nil { + // the column referenced by TTL should be a time type + if t.Meta().TTLInfo.ColumnName.L == originalColName.L && !types.IsTypeTime(newCol.ColumnInfo.FieldType.GetType()) { + return nil, errors.Trace(dbterror.ErrUnsupportedColumnInTTLConfig.GenWithStackByArgs(newCol.ColumnInfo.Name.O)) + } + } + + var newAutoRandBits uint64 + if newAutoRandBits, err = checkAutoRandom(t.Meta(), col, specNewColumn); err != nil { + return nil, errors.Trace(err) + } + + txn, err := sctx.Txn(true) + if err != nil { + return nil, errors.Trace(err) + } + bdrRole, err := meta.NewMeta(txn).GetBDRRole() + if err != nil { + return nil, errors.Trace(err) + } + if bdrRole == string(ast.BDRRolePrimary) && + deniedByBDRWhenModifyColumn(newCol.FieldType, col.FieldType, specNewColumn.Options) { + return nil, dbterror.ErrBDRRestrictedDDL.FastGenByArgs(bdrRole) + } + + job := &model.Job{ + SchemaID: schema.ID, + TableID: t.Meta().ID, + SchemaName: schema.Name.L, + TableName: t.Meta().Name.L, + Type: model.ActionModifyColumn, + BinlogInfo: &model.HistoryInfo{}, + ReorgMeta: NewDDLReorgMeta(sctx), + CtxVars: []any{needChangeColData}, + Args: []any{&newCol.ColumnInfo, originalColName, spec.Position, modifyColumnTp, newAutoRandBits}, + CDCWriteSource: sctx.GetSessionVars().CDCWriteSource, + SQLMode: sctx.GetSessionVars().SQLMode, + } + return job, nil +} + +func needChangeColumnData(oldCol, newCol *model.ColumnInfo) bool { + toUnsigned := mysql.HasUnsignedFlag(newCol.GetFlag()) + originUnsigned := mysql.HasUnsignedFlag(oldCol.GetFlag()) + needTruncationOrToggleSign := func() bool { + return (newCol.GetFlen() > 0 && (newCol.GetFlen() < oldCol.GetFlen() || newCol.GetDecimal() < oldCol.GetDecimal())) || + (toUnsigned != originUnsigned) + } + // Ignore the potential max display length represented by integer's flen, use default flen instead. + defaultOldColFlen, _ := mysql.GetDefaultFieldLengthAndDecimal(oldCol.GetType()) + defaultNewColFlen, _ := mysql.GetDefaultFieldLengthAndDecimal(newCol.GetType()) + needTruncationOrToggleSignForInteger := func() bool { + return (defaultNewColFlen > 0 && defaultNewColFlen < defaultOldColFlen) || (toUnsigned != originUnsigned) + } + + // Deal with the same type. + if oldCol.GetType() == newCol.GetType() { + switch oldCol.GetType() { + case mysql.TypeNewDecimal: + // Since type decimal will encode the precision, frac, negative(signed) and wordBuf into storage together, there is no short + // cut to eliminate data reorg change for column type change between decimal. + return oldCol.GetFlen() != newCol.GetFlen() || oldCol.GetDecimal() != newCol.GetDecimal() || toUnsigned != originUnsigned + case mysql.TypeEnum, mysql.TypeSet: + return IsElemsChangedToModifyColumn(oldCol.GetElems(), newCol.GetElems()) + case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong: + return toUnsigned != originUnsigned + case mysql.TypeString: + // Due to the behavior of padding \x00 at binary type, always change column data when binary length changed + if types.IsBinaryStr(&oldCol.FieldType) { + return newCol.GetFlen() != oldCol.GetFlen() + } + } + + return needTruncationOrToggleSign() + } + + if ConvertBetweenCharAndVarchar(oldCol.GetType(), newCol.GetType()) { + return true + } + + // Deal with the different type. + switch oldCol.GetType() { + case mysql.TypeVarchar, mysql.TypeString, mysql.TypeVarString, mysql.TypeBlob, mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob: + switch newCol.GetType() { + case mysql.TypeVarchar, mysql.TypeString, mysql.TypeVarString, mysql.TypeBlob, mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob: + return needTruncationOrToggleSign() + } + case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong: + switch newCol.GetType() { + case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong: + return needTruncationOrToggleSignForInteger() + } + // conversion between float and double needs reorganization, see issue #31372 + } + + return true +} + +// ConvertBetweenCharAndVarchar check whether column converted between char and varchar +// TODO: it is used for plugins. so change plugin's using and remove it. +func ConvertBetweenCharAndVarchar(oldCol, newCol byte) bool { + return types.ConvertBetweenCharAndVarchar(oldCol, newCol) +} + +// IsElemsChangedToModifyColumn check elems changed +func IsElemsChangedToModifyColumn(oldElems, newElems []string) bool { + if len(newElems) < len(oldElems) { + return true + } + for index, oldElem := range oldElems { + newElem := newElems[index] + if oldElem != newElem { + return true + } + } + return false +} + +// ProcessColumnCharsetAndCollation process column charset and collation +func ProcessColumnCharsetAndCollation(sctx sessionctx.Context, col *table.Column, newCol *table.Column, meta *model.TableInfo, specNewColumn *ast.ColumnDef, schema *model.DBInfo) error { + var chs, coll string + var err error + // TODO: Remove it when all table versions are greater than or equal to TableInfoVersion1. + // If newCol's charset is empty and the table's version less than TableInfoVersion1, + // we will not modify the charset of the column. This behavior is not compatible with MySQL. + if len(newCol.FieldType.GetCharset()) == 0 && meta.Version < model.TableInfoVersion1 { + chs = col.FieldType.GetCharset() + coll = col.FieldType.GetCollate() + } else { + chs, coll, err = getCharsetAndCollateInColumnDef(sctx.GetSessionVars(), specNewColumn) + if err != nil { + return errors.Trace(err) + } + chs, coll, err = ResolveCharsetCollation(sctx.GetSessionVars(), + ast.CharsetOpt{Chs: chs, Col: coll}, + ast.CharsetOpt{Chs: meta.Charset, Col: meta.Collate}, + ast.CharsetOpt{Chs: schema.Charset, Col: schema.Collate}, + ) + chs, coll = OverwriteCollationWithBinaryFlag(sctx.GetSessionVars(), specNewColumn, chs, coll) + if err != nil { + return errors.Trace(err) + } + } + + if err = setCharsetCollationFlenDecimal(&newCol.FieldType, newCol.Name.O, chs, coll, sctx.GetSessionVars()); err != nil { + return errors.Trace(err) + } + decodeEnumSetBinaryLiteralToUTF8(&newCol.FieldType, chs) + return nil +} + +// checkColumnWithIndexConstraint is used to check the related index constraint of the modified column. +// Index has a max-prefix-length constraint. eg: a varchar(100), index idx(a), modifying column a to a varchar(4000) +// will cause index idx to break the max-prefix-length constraint. +func checkColumnWithIndexConstraint(tbInfo *model.TableInfo, originalCol, newCol *model.ColumnInfo) error { + columns := make([]*model.ColumnInfo, 0, len(tbInfo.Columns)) + columns = append(columns, tbInfo.Columns...) + // Replace old column with new column. + for i, col := range columns { + if col.Name.L != originalCol.Name.L { + continue + } + columns[i] = newCol.Clone() + columns[i].Name = originalCol.Name + break + } + + pkIndex := tables.FindPrimaryIndex(tbInfo) + + checkOneIndex := func(indexInfo *model.IndexInfo) (err error) { + var modified bool + for _, col := range indexInfo.Columns { + if col.Name.L == originalCol.Name.L { + modified = true + break + } + } + if !modified { + return + } + err = checkIndexInModifiableColumns(columns, indexInfo.Columns) + if err != nil { + return + } + err = checkIndexPrefixLength(columns, indexInfo.Columns) + return + } + + // Check primary key first. + var err error + + if pkIndex != nil { + err = checkOneIndex(pkIndex) + if err != nil { + return err + } + } + + // Check secondary indexes. + for _, indexInfo := range tbInfo.Indices { + if indexInfo.Primary { + continue + } + // the second param should always be set to true, check index length only if it was modified + // checkOneIndex needs one param only. + err = checkOneIndex(indexInfo) + if err != nil { + return err + } + } + return nil +} + +func checkIndexInModifiableColumns(columns []*model.ColumnInfo, idxColumns []*model.IndexColumn) error { + for _, ic := range idxColumns { + col := model.FindColumnInfo(columns, ic.Name.L) + if col == nil { + return dbterror.ErrKeyColumnDoesNotExits.GenWithStack("column does not exist: %s", ic.Name) + } + + prefixLength := types.UnspecifiedLength + if types.IsTypePrefixable(col.FieldType.GetType()) && col.FieldType.GetFlen() > ic.Length { + // When the index column is changed, prefix length is only valid + // if the type is still prefixable and larger than old prefix length. + prefixLength = ic.Length + } + if err := checkIndexColumn(nil, col, prefixLength); err != nil { + return err + } + } + return nil +} + +// checkModifyTypes checks if the 'origin' type can be modified to 'to' type no matter directly change +// or change by reorg. It returns error if the two types are incompatible and correlated change are not +// supported. However, even the two types can be change, if the "origin" type contains primary key, error will be returned. +func checkModifyTypes(origin *types.FieldType, to *types.FieldType, needRewriteCollationData bool) error { + canReorg, err := types.CheckModifyTypeCompatible(origin, to) + if err != nil { + if !canReorg { + return errors.Trace(dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs(err.Error())) + } + if mysql.HasPriKeyFlag(origin.GetFlag()) { + msg := "this column has primary key flag" + return dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs(msg) + } + } + + err = checkModifyCharsetAndCollation(to.GetCharset(), to.GetCollate(), origin.GetCharset(), origin.GetCollate(), needRewriteCollationData) + + if err != nil { + if to.GetCharset() == charset.CharsetGBK || origin.GetCharset() == charset.CharsetGBK { + return errors.Trace(err) + } + // column type change can handle the charset change between these two types in the process of the reorg. + if dbterror.ErrUnsupportedModifyCharset.Equal(err) && canReorg { + return nil + } + } + return errors.Trace(err) +} + +// ProcessModifyColumnOptions process column options. +func ProcessModifyColumnOptions(ctx sessionctx.Context, col *table.Column, options []*ast.ColumnOption) error { + var sb strings.Builder + restoreFlags := format.RestoreStringSingleQuotes | format.RestoreKeyWordLowercase | format.RestoreNameBackQuotes | + format.RestoreSpacesAroundBinaryOperation | format.RestoreWithoutSchemaName | format.RestoreWithoutSchemaName + restoreCtx := format.NewRestoreCtx(restoreFlags, &sb) + + var hasDefaultValue, setOnUpdateNow bool + var err error + var hasNullFlag bool + for _, opt := range options { + switch opt.Tp { + case ast.ColumnOptionDefaultValue: + hasDefaultValue, err = SetDefaultValue(ctx, col, opt) + if err != nil { + return errors.Trace(err) + } + case ast.ColumnOptionComment: + err := setColumnComment(ctx, col, opt) + if err != nil { + return errors.Trace(err) + } + case ast.ColumnOptionNotNull: + col.AddFlag(mysql.NotNullFlag) + case ast.ColumnOptionNull: + hasNullFlag = true + col.DelFlag(mysql.NotNullFlag) + case ast.ColumnOptionAutoIncrement: + col.AddFlag(mysql.AutoIncrementFlag) + case ast.ColumnOptionPrimaryKey: + return errors.Trace(dbterror.ErrUnsupportedModifyColumn.GenWithStack("can't change column constraint (PRIMARY KEY)")) + case ast.ColumnOptionUniqKey: + return errors.Trace(dbterror.ErrUnsupportedModifyColumn.GenWithStack("can't change column constraint (UNIQUE KEY)")) + case ast.ColumnOptionOnUpdate: + // TODO: Support other time functions. + if !(col.GetType() == mysql.TypeTimestamp || col.GetType() == mysql.TypeDatetime) { + return dbterror.ErrInvalidOnUpdate.GenWithStackByArgs(col.Name) + } + if !expression.IsValidCurrentTimestampExpr(opt.Expr, &col.FieldType) { + return dbterror.ErrInvalidOnUpdate.GenWithStackByArgs(col.Name) + } + col.AddFlag(mysql.OnUpdateNowFlag) + setOnUpdateNow = true + case ast.ColumnOptionGenerated: + sb.Reset() + err = opt.Expr.Restore(restoreCtx) + if err != nil { + return errors.Trace(err) + } + col.GeneratedExprString = sb.String() + col.GeneratedStored = opt.Stored + col.Dependences = make(map[string]struct{}) + // Only used by checkModifyGeneratedColumn, there is no need to set a ctor for it. + col.GeneratedExpr = table.NewClonableExprNode(nil, opt.Expr) + for _, colName := range FindColumnNamesInExpr(opt.Expr) { + col.Dependences[colName.Name.L] = struct{}{} + } + case ast.ColumnOptionCollate: + col.SetCollate(opt.StrValue) + case ast.ColumnOptionReference: + return errors.Trace(dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs("can't modify with references")) + case ast.ColumnOptionFulltext: + return errors.Trace(dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs("can't modify with full text")) + case ast.ColumnOptionCheck: + return errors.Trace(dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs("can't modify with check")) + // Ignore ColumnOptionAutoRandom. It will be handled later. + case ast.ColumnOptionAutoRandom: + default: + return errors.Trace(dbterror.ErrUnsupportedModifyColumn.GenWithStackByArgs(fmt.Sprintf("unknown column option type: %d", opt.Tp))) + } + } + + if err = processAndCheckDefaultValueAndColumn(ctx, col, nil, hasDefaultValue, setOnUpdateNow, hasNullFlag); err != nil { + return errors.Trace(err) + } + + return nil +} + +func checkAutoRandom(tableInfo *model.TableInfo, originCol *table.Column, specNewColumn *ast.ColumnDef) (uint64, error) { + var oldShardBits, oldRangeBits uint64 + if isClusteredPKColumn(originCol, tableInfo) { + oldShardBits = tableInfo.AutoRandomBits + oldRangeBits = tableInfo.AutoRandomRangeBits + } + newShardBits, newRangeBits, err := extractAutoRandomBitsFromColDef(specNewColumn) + if err != nil { + return 0, errors.Trace(err) + } + switch { + case oldShardBits == newShardBits: + case oldShardBits < newShardBits: + addingAutoRandom := oldShardBits == 0 + if addingAutoRandom { + convFromAutoInc := mysql.HasAutoIncrementFlag(originCol.GetFlag()) && originCol.IsPKHandleColumn(tableInfo) + if !convFromAutoInc { + return 0, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomAlterChangeFromAutoInc) + } + } + if autoid.AutoRandomShardBitsMax < newShardBits { + errMsg := fmt.Sprintf(autoid.AutoRandomOverflowErrMsg, + autoid.AutoRandomShardBitsMax, newShardBits, specNewColumn.Name.Name.O) + return 0, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(errMsg) + } + // increasing auto_random shard bits is allowed. + case oldShardBits > newShardBits: + if newShardBits == 0 { + return 0, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomAlterErrMsg) + } + return 0, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomDecreaseBitErrMsg) + } + + modifyingAutoRandCol := oldShardBits > 0 || newShardBits > 0 + if modifyingAutoRandCol { + // Disallow changing the column field type. + if originCol.GetType() != specNewColumn.Tp.GetType() { + return 0, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomModifyColTypeErrMsg) + } + if originCol.GetType() != mysql.TypeLonglong { + return 0, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(fmt.Sprintf(autoid.AutoRandomOnNonBigIntColumn, types.TypeStr(originCol.GetType()))) + } + // Disallow changing from auto_random to auto_increment column. + if containsColumnOption(specNewColumn, ast.ColumnOptionAutoIncrement) { + return 0, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomIncompatibleWithAutoIncErrMsg) + } + // Disallow specifying a default value on auto_random column. + if containsColumnOption(specNewColumn, ast.ColumnOptionDefaultValue) { + return 0, dbterror.ErrInvalidAutoRandom.GenWithStackByArgs(autoid.AutoRandomIncompatibleWithDefaultValueErrMsg) + } + } + if rangeBitsIsChanged(oldRangeBits, newRangeBits) { + return 0, dbterror.ErrInvalidAutoRandom.FastGenByArgs(autoid.AutoRandomUnsupportedAlterRangeBits) + } + return newShardBits, nil +} + +func isClusteredPKColumn(col *table.Column, tblInfo *model.TableInfo) bool { + switch { + case tblInfo.PKIsHandle: + return mysql.HasPriKeyFlag(col.GetFlag()) + case tblInfo.IsCommonHandle: + pk := tables.FindPrimaryIndex(tblInfo) + for _, c := range pk.Columns { + if c.Name.L == col.Name.L { + return true + } + } + return false + default: + return false + } +} + +func rangeBitsIsChanged(oldBits, newBits uint64) bool { + if oldBits == 0 { + oldBits = autoid.AutoRandomRangeBitsDefault + } + if newBits == 0 { + newBits = autoid.AutoRandomRangeBitsDefault + } + return oldBits != newBits +} diff --git a/pkg/ddl/modify_column_test.go b/pkg/ddl/modify_column_test.go index c951bf7c5e75b..450be74cda387 100644 --- a/pkg/ddl/modify_column_test.go +++ b/pkg/ddl/modify_column_test.go @@ -24,7 +24,6 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/ddl" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/meta" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/model" @@ -33,6 +32,7 @@ import ( "github.com/pingcap/tidb/pkg/sessiontxn" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/testkit/external" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/util/mock" "github.com/stretchr/testify/require" ) @@ -49,7 +49,7 @@ func batchInsert(tk *testkit.TestKit, tbl string, start, end int) { } func TestModifyColumnReorgInfo(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) originalTimeout := ddl.ReorgWaitTimeout ddl.ReorgWaitTimeout = 10 * time.Millisecond @@ -75,14 +75,13 @@ func TestModifyColumnReorgInfo(t *testing.T) { tbl := external.GetTableByName(t, tk, "test", "t1") // Check insert null before job first update. - hook := &callback.TestDDLCallback{Do: dom} var checkErr error var currJob *model.Job var elements []*meta.Element ctx := mock.NewContext() ctx.Store = store times := 0 - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if tbl.Meta().ID != job.TableID || checkErr != nil || job.SchemaState != model.StateWriteReorganization { return } @@ -113,9 +112,8 @@ func TestModifyColumnReorgInfo(t *testing.T) { indexInfo := tbl.Meta().FindIndexByName("idx2") elements = []*meta.Element{{ID: indexInfo.ID, TypeKey: meta.IndexElementKey}} } - } + }) require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/ddl/MockGetIndexRecordErr", `return("cantDecodeRecordErr")`)) - dom.DDL().SetHook(hook) err := tk.ExecToErr(sql) require.EqualError(t, err, "[ddl:8202]Cannot decode index value, because mock can't decode record error") require.NoError(t, checkErr) @@ -189,7 +187,7 @@ func TestModifyColumnNullToNotNullWithChangingVal2(t *testing.T) { } func TestModifyColumnNullToNotNull(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, 600*time.Millisecond) + store := testkit.CreateMockStoreWithSchemaLease(t, 600*time.Millisecond) tk1 := testkit.NewTestKit(t, store) tk2 := testkit.NewTestKit(t, store) @@ -201,19 +199,17 @@ func TestModifyColumnNullToNotNull(t *testing.T) { tbl := external.GetTableByName(t, tk1, "test", "t1") // Check insert null before job first update. - hook := &callback.TestDDLCallback{Do: dom} tk1.MustExec("delete from t1") once := sync.Once{} var checkErr error - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if tbl.Meta().ID != job.TableID { return } once.Do(func() { checkErr = tk2.ExecToErr("insert into t1 values ()") }) - } - dom.DDL().SetHook(hook) + }) err := tk1.ExecToErr("alter table t1 change c2 c2 int not null") require.NoError(t, checkErr) require.EqualError(t, err, "[ddl:1138]Invalid use of NULL value") @@ -221,7 +217,7 @@ func TestModifyColumnNullToNotNull(t *testing.T) { // Check insert error when column has PreventNullInsertFlag. tk1.MustExec("delete from t1") - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if tbl.Meta().ID != job.TableID { return } @@ -231,8 +227,7 @@ func TestModifyColumnNullToNotNull(t *testing.T) { } // now c2 has PreventNullInsertFlag, an error is expected. checkErr = tk2.ExecToErr("insert into t1 values ()") - } - dom.DDL().SetHook(hook) + }) tk1.MustExec("alter table t1 change c2 c2 int not null") require.EqualError(t, checkErr, "[table:1048]Column 'c2' cannot be null") @@ -244,7 +239,7 @@ func TestModifyColumnNullToNotNull(t *testing.T) { } func TestModifyColumnNullToNotNullWithChangingVal(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, 600*time.Millisecond) + store := testkit.CreateMockStoreWithSchemaLease(t, 600*time.Millisecond) tk1 := testkit.NewTestKit(t, store) tk2 := testkit.NewTestKit(t, store) @@ -256,19 +251,17 @@ func TestModifyColumnNullToNotNullWithChangingVal(t *testing.T) { tbl := external.GetTableByName(t, tk1, "test", "t1") // Check insert null before job first update. - hook := &callback.TestDDLCallback{Do: dom} tk1.MustExec("delete from t1") once := sync.Once{} var checkErr error - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if tbl.Meta().ID != job.TableID { return } once.Do(func() { checkErr = tk2.ExecToErr("insert into t1 values ()") }) - } - dom.DDL().SetHook(hook) + }) err := tk1.ExecToErr("alter table t1 change c2 c2 tinyint not null") require.NoError(t, checkErr) require.EqualError(t, err, "[ddl:1265]Data truncated for column 'c2' at row 1") @@ -276,7 +269,7 @@ func TestModifyColumnNullToNotNullWithChangingVal(t *testing.T) { // Check insert error when column has PreventNullInsertFlag. tk1.MustExec("delete from t1") - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if tbl.Meta().ID != job.TableID { return } @@ -286,8 +279,7 @@ func TestModifyColumnNullToNotNullWithChangingVal(t *testing.T) { } // now c2 has PreventNullInsertFlag, an error is expected. checkErr = tk2.ExecToErr("insert into t1 values ()") - } - dom.DDL().SetHook(hook) + }) tk1.MustExec("alter table t1 change c2 c2 tinyint not null") require.EqualError(t, checkErr, "[table:1048]Column 'c2' cannot be null") diff --git a/pkg/ddl/multi_schema_change.go b/pkg/ddl/multi_schema_change.go index e2186fdea00f3..4edf6b171de44 100644 --- a/pkg/ddl/multi_schema_change.go +++ b/pkg/ddl/multi_schema_change.go @@ -15,10 +15,6 @@ package ddl import ( - "fmt" - - "github.com/pingcap/errors" - ddllogutil "github.com/pingcap/tidb/pkg/ddl/logutil" "github.com/pingcap/tidb/pkg/meta" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/model" @@ -26,129 +22,9 @@ import ( "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/table" "github.com/pingcap/tidb/pkg/util/dbterror" - "github.com/pingcap/tidb/pkg/util/intest" - "go.uber.org/zap" ) -func (e *executor) MultiSchemaChange(ctx sessionctx.Context, ti ast.Ident, info *model.MultiSchemaInfo) error { - subJobs := info.SubJobs - if len(subJobs) == 0 { - return nil - } - schema, t, err := e.getSchemaAndTableByIdent(ti) - if err != nil { - return errors.Trace(err) - } - - logFn := ddllogutil.DDLLogger().Warn - if intest.InTest { - logFn = ddllogutil.DDLLogger().Fatal - } - - var involvingSchemaInfo []model.InvolvingSchemaInfo - for _, j := range subJobs { - switch j.Type { - case model.ActionAlterTablePlacement: - ref, ok := j.Args[0].(*model.PolicyRefInfo) - if !ok { - logFn("unexpected type of policy reference info", - zap.Any("args[0]", j.Args[0]), - zap.String("type", fmt.Sprintf("%T", j.Args[0]))) - continue - } - if ref == nil { - continue - } - involvingSchemaInfo = append(involvingSchemaInfo, model.InvolvingSchemaInfo{ - Policy: ref.Name.L, - Mode: model.SharedInvolving, - }) - case model.ActionAddForeignKey: - ref, ok := j.Args[0].(*model.FKInfo) - if !ok { - logFn("unexpected type of foreign key info", - zap.Any("args[0]", j.Args[0]), - zap.String("type", fmt.Sprintf("%T", j.Args[0]))) - continue - } - involvingSchemaInfo = append(involvingSchemaInfo, model.InvolvingSchemaInfo{ - Database: ref.RefSchema.L, - Table: ref.RefTable.L, - Mode: model.SharedInvolving, - }) - case model.ActionAlterTablePartitionPlacement: - if len(j.Args) < 2 { - logFn("unexpected number of arguments for partition placement", - zap.Int("len(args)", len(j.Args)), - zap.Any("args", j.Args)) - continue - } - ref, ok := j.Args[1].(*model.PolicyRefInfo) - if !ok { - logFn("unexpected type of policy reference info", - zap.Any("args[0]", j.Args[0]), - zap.String("type", fmt.Sprintf("%T", j.Args[0]))) - continue - } - if ref == nil { - continue - } - involvingSchemaInfo = append(involvingSchemaInfo, model.InvolvingSchemaInfo{ - Policy: ref.Name.L, - Mode: model.SharedInvolving, - }) - } - } - - if len(involvingSchemaInfo) > 0 { - involvingSchemaInfo = append(involvingSchemaInfo, model.InvolvingSchemaInfo{ - Database: schema.Name.L, - Table: t.Meta().Name.L, - }) - } - - job := &model.Job{ - SchemaID: schema.ID, - TableID: t.Meta().ID, - SchemaName: schema.Name.L, - TableName: t.Meta().Name.L, - Type: model.ActionMultiSchemaChange, - BinlogInfo: &model.HistoryInfo{}, - Args: nil, - MultiSchemaInfo: info, - ReorgMeta: nil, - CDCWriteSource: ctx.GetSessionVars().CDCWriteSource, - InvolvingSchemaInfo: involvingSchemaInfo, - SQLMode: ctx.GetSessionVars().SQLMode, - } - if containsDistTaskSubJob(subJobs) { - job.ReorgMeta, err = newReorgMetaFromVariables(job, ctx) - if err != nil { - return err - } - } else { - job.ReorgMeta = NewDDLReorgMeta(ctx) - } - - err = checkMultiSchemaInfo(info, t) - if err != nil { - return errors.Trace(err) - } - mergeAddIndex(info) - return e.DoDDLJob(ctx, job) -} - -func containsDistTaskSubJob(subJobs []*model.SubJob) bool { - for _, sub := range subJobs { - if sub.Type == model.ActionAddIndex || - sub.Type == model.ActionAddPrimaryKey { - return true - } - } - return false -} - -func onMultiSchemaChange(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) { +func onMultiSchemaChange(w *worker, jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, err error) { if job.MultiSchemaInfo.Revertible { // Handle the rolling back job. if job.IsRollingback() { @@ -159,7 +35,7 @@ func onMultiSchemaChange(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job) (ve continue } proxyJob := sub.ToProxyJob(job, i) - ver, _, err = w.runOneJobStep(d, t, &proxyJob) + ver, _, err = w.runOneJobStep(jobCtx, t, &proxyJob) err = handleRollbackException(err, proxyJob.Error) if err != nil { return ver, err @@ -182,7 +58,7 @@ func onMultiSchemaChange(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job) (ve continue } proxyJob := sub.ToProxyJob(job, i) - ver, _, err = w.runOneJobStep(d, t, &proxyJob) + ver, _, err = w.runOneJobStep(jobCtx, t, &proxyJob) sub.FromProxyJob(&proxyJob, ver) handleRevertibleException(job, sub, proxyJob.Error) return ver, err @@ -208,7 +84,7 @@ func onMultiSchemaChange(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job) (ve if schemaVersionGenerated { proxyJob.MultiSchemaInfo.SkipVersion = true } - proxyJobVer, _, err := w.runOneJobStep(d, t, &proxyJob) + proxyJobVer, _, err := w.runOneJobStep(jobCtx, t, &proxyJob) if !schemaVersionGenerated && proxyJobVer != 0 { schemaVersionGenerated = true ver = proxyJobVer @@ -228,7 +104,7 @@ func onMultiSchemaChange(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job) (ve // if we fail on "add column c int", the allocator is rebased to 100 // which cannot be rollback, but it's table-info.AutoIncID is rollback by below call. // TODO we should also change schema diff of 'ver' if len(actionTypes) > 1. - return updateVersionAndTableInfo(d, t, job, tblInfo, true) + return updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) } actionTypes = append(actionTypes, sub.Type) } @@ -257,7 +133,7 @@ func onMultiSchemaChange(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job) (ve continue } proxyJob := sub.ToProxyJob(job, i) - ver, _, err = w.runOneJobStep(d, t, &proxyJob) + ver, _, err = w.runOneJobStep(jobCtx, t, &proxyJob) sub.FromProxyJob(&proxyJob, ver) return ver, err } @@ -473,7 +349,6 @@ func mergeAddIndex(info *model.MultiSchemaInfo) { var indexPartSpecifications [][]*ast.IndexPartSpecification var indexOption []*ast.IndexOption var hiddenCols [][]*model.ColumnInfo - var global []bool newSubJobs := make([]*model.SubJob, 0, len(info.SubJobs)) for _, subJob := range info.SubJobs { @@ -483,13 +358,12 @@ func mergeAddIndex(info *model.MultiSchemaInfo) { indexPartSpecifications = append(indexPartSpecifications, subJob.Args[2].([]*ast.IndexPartSpecification)) indexOption = append(indexOption, subJob.Args[3].(*ast.IndexOption)) hiddenCols = append(hiddenCols, subJob.Args[4].([]*model.ColumnInfo)) - global = append(global, subJob.Args[5].(bool)) } else { newSubJobs = append(newSubJobs, subJob) } } - mergedSubJob.Args = []any{unique, indexNames, indexPartSpecifications, indexOption, hiddenCols, global} + mergedSubJob.Args = []any{unique, indexNames, indexPartSpecifications, indexOption, hiddenCols} // place the merged add index job at the end of the sub-jobs. newSubJobs = append(newSubJobs, mergedSubJob) info.SubJobs = newSubJobs diff --git a/pkg/ddl/multi_schema_change_test.go b/pkg/ddl/multi_schema_change_test.go index 7202d9bb99bec..6812af5c41567 100644 --- a/pkg/ddl/multi_schema_change_test.go +++ b/pkg/ddl/multi_schema_change_test.go @@ -20,8 +20,6 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/ddl" - "github.com/pingcap/tidb/pkg/ddl/util/callback" - "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/errno" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/parser/model" @@ -34,14 +32,13 @@ import ( ) func TestMultiSchemaChangeAddColumnsCancelled(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") - originHook := dom.DDL().GetHook() tk.MustExec("create table t (a int);") tk.MustExec("insert into t values (1);") - hook := newCancelJobHook(t, store, dom, func(job *model.Job) bool { + hook := newCancelJobHook(t, store, func(job *model.Job) bool { // Cancel job when the column 'c' is in write-reorg. if job.Type != model.ActionMultiSchemaChange { return false @@ -49,10 +46,10 @@ func TestMultiSchemaChangeAddColumnsCancelled(t *testing.T) { assertMultiSchema(t, job, 3) return job.MultiSchemaInfo.SubJobs[1].SchemaState == model.StateWriteReorganization }) - dom.DDL().SetHook(hook) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", hook.OnJobUpdated) sql := "alter table t add column b int default 2, add column c int default 3, add column d int default 4;" tk.MustGetErrCode(sql, errno.ErrCancelledDDLJob) - dom.DDL().SetHook(originHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") hook.MustCancelDone(t) tk.MustQuery("select * from t;").Check(testkit.Rows("1")) } @@ -80,15 +77,14 @@ func TestMultiSchemaChangeAddColumnsParallel(t *testing.T) { } func TestMultiSchemaChangeDropColumnsCancelled(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") - originHook := dom.DDL().GetHook() // Test for cancelling the job in a middle state. tk.MustExec("create table t (a int default 1, b int default 2, c int default 3, d int default 4);") tk.MustExec("insert into t values ();") - hook := newCancelJobHook(t, store, dom, func(job *model.Job) bool { + hook := newCancelJobHook(t, store, func(job *model.Job) bool { // Cancel job when the column 'a' is in delete-reorg. if job.Type != model.ActionMultiSchemaChange { return false @@ -96,9 +92,9 @@ func TestMultiSchemaChangeDropColumnsCancelled(t *testing.T) { assertMultiSchema(t, job, 3) return job.MultiSchemaInfo.SubJobs[1].SchemaState == model.StateDeleteReorganization }) - dom.DDL().SetHook(hook) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", hook.OnJobUpdated) tk.MustExec("alter table t drop column b, drop column a, drop column d;") - dom.DDL().SetHook(originHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") hook.MustCancelFailed(t) tk.MustQuery("select * from t;").Check(testkit.Rows("3")) @@ -106,7 +102,7 @@ func TestMultiSchemaChangeDropColumnsCancelled(t *testing.T) { tk.MustExec("drop table if exists t;") tk.MustExec("create table t (a int default 1, b int default 2, c int default 3, d int default 4);") tk.MustExec("insert into t values ();") - hook = newCancelJobHook(t, store, dom, func(job *model.Job) bool { + hook = newCancelJobHook(t, store, func(job *model.Job) bool { // Cancel job when the column 'a' is in public. if job.Type != model.ActionMultiSchemaChange { return false @@ -114,24 +110,23 @@ func TestMultiSchemaChangeDropColumnsCancelled(t *testing.T) { assertMultiSchema(t, job, 3) return job.MultiSchemaInfo.SubJobs[1].SchemaState == model.StatePublic }) - dom.DDL().SetHook(hook) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", hook.OnJobUpdated) tk.MustGetErrCode("alter table t drop column b, drop column a, drop column d;", errno.ErrCancelledDDLJob) - dom.DDL().SetHook(originHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") hook.MustCancelDone(t) tk.MustQuery("select * from t;").Check(testkit.Rows("1 2 3 4")) } func TestMultiSchemaChangeDropIndexedColumnsCancelled(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") - originHook := dom.DDL().GetHook() // Test for cancelling the job in a middle state. tk.MustExec("create table t (a int default 1, b int default 2, c int default 3, d int default 4, " + "index(a), index(b), index(c), index(d));") tk.MustExec("insert into t values ();") - hook := newCancelJobHook(t, store, dom, func(job *model.Job) bool { + hook := newCancelJobHook(t, store, func(job *model.Job) bool { // Cancel job when the column 'a' is in delete-reorg. if job.Type != model.ActionMultiSchemaChange { return false @@ -139,9 +134,8 @@ func TestMultiSchemaChangeDropIndexedColumnsCancelled(t *testing.T) { assertMultiSchema(t, job, 3) return job.MultiSchemaInfo.SubJobs[1].SchemaState == model.StateDeleteReorganization }) - dom.DDL().SetHook(hook) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", hook.OnJobUpdated) tk.MustExec("alter table t drop column b, drop column a, drop column d;") - dom.DDL().SetHook(originHook) hook.MustCancelFailed(t) tk.MustQuery("select * from t;").Check(testkit.Rows("3")) } @@ -165,8 +159,7 @@ func TestMultiSchemaChangeDropColumnsParallel(t *testing.T) { } func TestMultiSchemaChangeRenameColumns(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) - originHook := dom.DDL().GetHook() + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -209,7 +202,7 @@ func TestMultiSchemaChangeRenameColumns(t *testing.T) { tk.MustExec("drop table if exists t") tk.MustExec("create table t (a int default 1, b int default 2)") tk.MustExec("insert into t values ()") - hook := newCancelJobHook(t, store, dom, func(job *model.Job) bool { + hook := newCancelJobHook(t, store, func(job *model.Job) bool { // Cancel job when the column 'c' is in write-reorg. if job.Type != model.ActionMultiSchemaChange { return false @@ -217,9 +210,9 @@ func TestMultiSchemaChangeRenameColumns(t *testing.T) { assertMultiSchema(t, job, 2) return job.MultiSchemaInfo.SubJobs[0].SchemaState == model.StateWriteReorganization }) - dom.DDL().SetHook(hook) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", hook.OnJobUpdated) tk.MustGetErrCode("alter table t add column c int default 3, rename column b to d;", errno.ErrCancelledDDLJob) - dom.DDL().SetHook(originHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") tk.MustQuery("select b from t").Check(testkit.Rows("2")) tk.MustGetErrCode("select d from t", errno.ErrBadField) @@ -227,24 +220,21 @@ func TestMultiSchemaChangeRenameColumns(t *testing.T) { tk.MustExec("drop table if exists t") tk.MustExec("create table t (a int default 1, b int default 2)") tk.MustExec("insert into t values ()") - hook1 := &callback.TestDDLCallback{Do: dom} - hook1.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { assert.Equal(t, model.ActionMultiSchemaChange, job.Type) if job.MultiSchemaInfo.SubJobs[0].SchemaState == model.StateWriteReorganization { rs, _ := tk.Exec("select b from t") assert.Equal(t, tk.ResultSetToResult(rs, "").Rows()[0][0], "2") } - } - dom.DDL().SetHook(hook1) + }) tk.MustExec("alter table t add column c int default 3, rename column b to d;") - dom.DDL().SetHook(originHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore") tk.MustQuery("select d from t").Check(testkit.Rows("2")) tk.MustGetErrCode("select b from t", errno.ErrBadField) } func TestMultiSchemaChangeAlterColumns(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) - originHook := dom.DDL().GetHook() + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -281,7 +271,7 @@ func TestMultiSchemaChangeAlterColumns(t *testing.T) { // Test cancel job with alter columns tk.MustExec("drop table if exists t") tk.MustExec("create table t (a int default 1, b int default 2)") - hook := newCancelJobHook(t, store, dom, func(job *model.Job) bool { + hook := newCancelJobHook(t, store, func(job *model.Job) bool { // Cancel job when the column 'a' is in write-reorg. if job.Type != model.ActionMultiSchemaChange { return false @@ -289,32 +279,28 @@ func TestMultiSchemaChangeAlterColumns(t *testing.T) { assertMultiSchema(t, job, 2) return job.MultiSchemaInfo.SubJobs[0].SchemaState == model.StateWriteReorganization }) - dom.DDL().SetHook(hook) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", hook.OnJobUpdated) tk.MustGetErrCode("alter table t add column c int default 3, alter column b set default 3;", errno.ErrCancelledDDLJob) - dom.DDL().SetHook(originHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") tk.MustExec("insert into t values ()") tk.MustQuery("select * from t").Check(testkit.Rows("1 2")) // Test dml stmts when do alter tk.MustExec("drop table if exists t") tk.MustExec("create table t (a int default 1, b int default 2)") - hook1 := &callback.TestDDLCallback{Do: dom} - hook1.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { assert.Equal(t, model.ActionMultiSchemaChange, job.Type) if job.MultiSchemaInfo.SubJobs[0].SchemaState == model.StateWriteOnly { tk2 := testkit.NewTestKit(t, store) tk2.MustExec("insert into test.t values ()") } - } - dom.DDL().SetHook(hook1) + }) tk.MustExec("alter table t add column c int default 3, alter column b set default 3;") - dom.DDL().SetHook(originHook) tk.MustQuery("select * from t").Check(testkit.Rows("1 2 3")) } func TestMultiSchemaChangeChangeColumns(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) - originHook := dom.DDL().GetHook() + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -353,7 +339,7 @@ func TestMultiSchemaChangeChangeColumns(t *testing.T) { tk.MustExec("drop table if exists t") tk.MustExec("create table t (a int default 1, b int default 2)") tk.MustExec("insert into t values ()") - hook := newCancelJobHook(t, store, dom, func(job *model.Job) bool { + hook := newCancelJobHook(t, store, func(job *model.Job) bool { // Cancel job when the column 'c' is in write-reorg. if job.Type != model.ActionMultiSchemaChange { return false @@ -361,24 +347,23 @@ func TestMultiSchemaChangeChangeColumns(t *testing.T) { assertMultiSchema(t, job, 2) return job.MultiSchemaInfo.SubJobs[0].SchemaState == model.StateWriteReorganization }) - dom.DDL().SetHook(hook) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", hook.OnJobUpdated) tk.MustGetErrCode("alter table t add column c int default 3, change column b d bigint default 4;", errno.ErrCancelledDDLJob) - dom.DDL().SetHook(originHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") tk.MustQuery("select b from t").Check(testkit.Rows("2")) tk.MustGetErrCode("select d from t", errno.ErrBadField) } func TestMultiSchemaChangeAddIndexesCancelled(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") - originHook := dom.DDL().GetHook() // Test cancel successfully. tk.MustExec("drop table if exists t;") tk.MustExec("create table t (a int, b int, c int);") tk.MustExec("insert into t values (1, 2, 3);") - cancelHook := newCancelJobHook(t, store, dom, func(job *model.Job) bool { + cancelHook := newCancelJobHook(t, store, func(job *model.Job) bool { // Cancel the job when index 't2' is in write-reorg. if job.Type != model.ActionMultiSchemaChange { return false @@ -386,11 +371,11 @@ func TestMultiSchemaChangeAddIndexesCancelled(t *testing.T) { assertMultiSchema(t, job, 1) return job.MultiSchemaInfo.SubJobs[0].SchemaState == model.StateWriteReorganization }) - dom.DDL().SetHook(cancelHook) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", cancelHook.OnJobUpdated) tk.MustGetErrCode("alter table t "+ "add index t(a, b), add index t1(a), "+ "add index t2(a), add index t3(a, b);", errno.ErrCancelledDDLJob) - dom.DDL().SetHook(originHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") cancelHook.MustCancelDone(t) tk.MustQuery("show index from t;").Check(testkit.Rows( /* no index */ )) tk.MustQuery("select * from t;").Check(testkit.Rows("1 2 3")) @@ -400,7 +385,7 @@ func TestMultiSchemaChangeAddIndexesCancelled(t *testing.T) { tk.MustExec("drop table if exists t;") tk.MustExec("create table t (a int, b int, c int);") tk.MustExec("insert into t values (1, 2, 3);") - cancelHook = newCancelJobHook(t, store, dom, func(job *model.Job) bool { + cancelHook = newCancelJobHook(t, store, func(job *model.Job) bool { // Cancel the job when index 't1' is in public. if job.Type != model.ActionMultiSchemaChange { return false @@ -408,33 +393,32 @@ func TestMultiSchemaChangeAddIndexesCancelled(t *testing.T) { assertMultiSchema(t, job, 1) return job.MultiSchemaInfo.SubJobs[0].SchemaState == model.StatePublic }) - dom.DDL().SetHook(cancelHook) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", cancelHook.OnJobUpdated) tk.MustExec("alter table t add index t(a, b), add index t1(a), " + "add index t2(a), add index t3(a, b);") - dom.DDL().SetHook(originHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") cancelHook.MustCancelFailed(t) tk.MustQuery("select * from t use index(t, t1, t2, t3);").Check(testkit.Rows("1 2 3")) tk.MustExec("admin check table t;") } func TestMultiSchemaChangeDropIndexesCancelled(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") - originHook := dom.DDL().GetHook() // Test for cancelling the job in a middle state. tk.MustExec("create table t (a int, b int, index(a), unique index(b), index idx(a, b));") - hook := newCancelJobHook(t, store, dom, func(job *model.Job) bool { + hook := newCancelJobHook(t, store, func(job *model.Job) bool { if job.Type != model.ActionMultiSchemaChange { return false } assertMultiSchema(t, job, 3) return job.MultiSchemaInfo.SubJobs[1].SchemaState == model.StateDeleteOnly }) - dom.DDL().SetHook(hook) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", hook.OnJobUpdated) tk.MustExec("alter table t drop index a, drop index b, drop index idx;") - dom.DDL().SetHook(originHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") hook.MustCancelFailed(t) tk.MustGetErrCode("select * from t use index (a);", errno.ErrKeyDoesNotExist) tk.MustGetErrCode("select * from t use index (b);", errno.ErrKeyDoesNotExist) @@ -443,16 +427,16 @@ func TestMultiSchemaChangeDropIndexesCancelled(t *testing.T) { // Test for cancelling the job in none state. tk.MustExec("drop table if exists t;") tk.MustExec("create table t (a int, b int, index(a), unique index(b), index idx(a, b));") - hook = newCancelJobHook(t, store, dom, func(job *model.Job) bool { + hook = newCancelJobHook(t, store, func(job *model.Job) bool { if job.Type != model.ActionMultiSchemaChange { return false } assertMultiSchema(t, job, 3) return job.MultiSchemaInfo.SubJobs[1].SchemaState == model.StatePublic }) - dom.DDL().SetHook(hook) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", hook.OnJobUpdated) tk.MustGetErrCode("alter table t drop index a, drop index b, drop index idx;", errno.ErrCancelledDDLJob) - dom.DDL().SetHook(originHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") hook.MustCancelDone(t) tk.MustQuery("select * from t use index (a);").Check(testkit.Rows()) tk.MustQuery("select * from t use index (b);").Check(testkit.Rows()) @@ -478,10 +462,9 @@ func TestMultiSchemaChangeDropIndexesParallel(t *testing.T) { } func TestMultiSchemaChangeRenameIndexes(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") - originHook := dom.DDL().GetHook() // Test rename index. tk.MustExec("drop table if exists t") @@ -514,7 +497,7 @@ func TestMultiSchemaChangeRenameIndexes(t *testing.T) { tk.MustExec("drop table if exists t") tk.MustExec("create table t (a int default 1, b int default 2, index t(a))") tk.MustExec("insert into t values ()") - hook := newCancelJobHook(t, store, dom, func(job *model.Job) bool { + hook := newCancelJobHook(t, store, func(job *model.Job) bool { // Cancel job when the column 'c' is in write-reorg. if job.Type != model.ActionMultiSchemaChange { return false @@ -522,33 +505,32 @@ func TestMultiSchemaChangeRenameIndexes(t *testing.T) { assertMultiSchema(t, job, 2) return job.MultiSchemaInfo.SubJobs[0].SchemaState == model.StateWriteReorganization }) - dom.DDL().SetHook(hook) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", hook.OnJobUpdated) tk.MustGetErrCode("alter table t add column c int default 3, rename index t to t1;", errno.ErrCancelledDDLJob) - dom.DDL().SetHook(originHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") tk.MustQuery("select * from t use index (t);").Check(testkit.Rows("1 2")) tk.MustGetErrCode("select * from t use index (t1);", errno.ErrKeyDoesNotExist) } func TestMultiSchemaChangeModifyColumnsCancelled(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") - originHook := dom.DDL().GetHook() // Test for cancelling the job in a middle state. tk.MustExec("create table t (a int, b int, c int, index i1(a), unique index i2(b), index i3(a, b));") tk.MustExec("insert into t values (1, 2, 3);") - hook := newCancelJobHook(t, store, dom, func(job *model.Job) bool { + hook := newCancelJobHook(t, store, func(job *model.Job) bool { if job.Type != model.ActionMultiSchemaChange { return false } assertMultiSchema(t, job, 3) return job.MultiSchemaInfo.SubJobs[2].SchemaState == model.StateWriteReorganization }) - dom.DDL().SetHook(hook) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", hook.OnJobUpdated) sql := "alter table t modify column a tinyint, modify column b bigint, modify column c char(20);" tk.MustGetErrCode(sql, errno.ErrCancelledDDLJob) - dom.DDL().SetHook(originHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") hook.MustCancelDone(t) tk.MustQuery("select * from t;").Check(testkit.Rows("1 2 3")) tk.MustQuery("select * from t use index (i1, i2, i3);").Check(testkit.Rows("1 2 3")) @@ -558,7 +540,7 @@ func TestMultiSchemaChangeModifyColumnsCancelled(t *testing.T) { } func TestMultiSchemaChangeAlterIndex(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") @@ -592,10 +574,8 @@ func TestMultiSchemaChangeAlterIndex(t *testing.T) { tk.MustExec("drop table t;") tk.MustExec("create table t (a int, b int, index i1(a, b), index i2(b));") tk.MustExec("insert into t values (1, 2);") - originHook := dom.DDL().GetHook() var checked bool - callback := &callback.TestDDLCallback{Do: dom} - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if job.MultiSchemaInfo == nil { return } @@ -606,11 +586,9 @@ func TestMultiSchemaChangeAlterIndex(t *testing.T) { assert.NoError(t, err) assert.NoError(t, rs.Close()) } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - dom.DDL().SetHook(callback) + }) tk.MustExec("alter table t alter index i1 invisible, modify column a tinyint, alter index i2 invisible;") - dom.DDL().SetHook(originHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") require.True(t, checked) tk.MustGetErrCode("select * from t use index (i1);", errno.ErrKeyDoesNotExist) tk.MustGetErrCode("select * from t use index (i2);", errno.ErrKeyDoesNotExist) @@ -619,7 +597,7 @@ func TestMultiSchemaChangeAlterIndex(t *testing.T) { } func TestMultiSchemaChangeMixCancelled(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") tk.MustExec("set global tidb_enable_dist_task = 0;") @@ -627,18 +605,17 @@ func TestMultiSchemaChangeMixCancelled(t *testing.T) { tk.MustExec("create table t (a int, b int, c int, index i1(c), index i2(c));") tk.MustExec("insert into t values (1, 2, 3);") - origin := dom.DDL().GetHook() - cancelHook := newCancelJobHook(t, store, dom, func(job *model.Job) bool { + cancelHook := newCancelJobHook(t, store, func(job *model.Job) bool { return job.MultiSchemaInfo != nil && len(job.MultiSchemaInfo.SubJobs) > 8 && job.MultiSchemaInfo.SubJobs[8].SchemaState == model.StateWriteReorganization }) - dom.DDL().SetHook(cancelHook) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", cancelHook.OnJobUpdated) tk.MustGetErrCode("alter table t add column d int default 4, add index i3(c), "+ "drop column a, drop column if exists z, add column if not exists e int default 5, "+ "drop index i2, add column f int default 6, drop column b, drop index i1, add column if not exists g int;", errno.ErrCancelledDDLJob) - dom.DDL().SetHook(origin) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") cancelHook.MustCancelDone(t) tk.MustQuery("select * from t;").Check(testkit.Rows("1 2 3")) tk.MustQuery("select * from t use index(i1, i2);").Check(testkit.Rows("1 2 3")) @@ -646,14 +623,15 @@ func TestMultiSchemaChangeMixCancelled(t *testing.T) { } func TestMultiSchemaChangeAdminShowDDLJobs(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("set global tidb_ddl_enable_fast_reorg = 1;") - originHook := dom.DDL().GetHook() - hook := &callback.TestDDLCallback{Do: dom} - hook.OnJobRunBeforeExported = func(job *model.Job) { + tk.MustExec("create table t (a int, b int, c int)") + tk.MustExec("insert into t values (1, 2, 3)") + + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { assert.Equal(t, model.ActionMultiSchemaChange, job.Type) if job.MultiSchemaInfo.SubJobs[0].SchemaState == model.StateDeleteOnly { newTk := testkit.NewTestKit(t, store) @@ -670,18 +648,13 @@ func TestMultiSchemaChangeAdminShowDDLJobs(t *testing.T) { assert.True(t, len(rows[1][10].(string)) > 0) assert.Equal(t, "create table", rows[2][3]) } - } - - tk.MustExec("create table t (a int, b int, c int)") - tk.MustExec("insert into t values (1, 2, 3)") + }) - dom.DDL().SetHook(hook) tk.MustExec("alter table t add index t(a), add index t1(b)") - dom.DDL().SetHook(originHook) } func TestMultiSchemaChangeWithExpressionIndex(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") tk.MustExec("create table t (a int, b int);") @@ -692,10 +665,8 @@ func TestMultiSchemaChangeWithExpressionIndex(t *testing.T) { errno.ErrDupEntry) tk.MustQuery("select * from t;").Check(testkit.Rows("1 2", "2 1")) - originHook := dom.DDL().GetHook() - hook := &callback.TestDDLCallback{Do: dom} var checkErr error - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if checkErr != nil { return } @@ -709,11 +680,10 @@ func TestMultiSchemaChangeWithExpressionIndex(t *testing.T) { } _, checkErr = tk2.Exec("insert into t values (10, 10);") } - } - dom.DDL().SetHook(hook) + }) tk.MustExec("alter table t add column c int default 10, add index idx1((a + b)), add unique index idx2((a + b));") require.NoError(t, checkErr) - dom.DDL().SetHook(originHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore") tk.MustExec("drop table if exists t;") tk.MustExec("create table t (a int, b int);") @@ -759,7 +729,7 @@ func TestMultiSchemaChangeSchemaVersion(t *testing.T) { } func TestMultiSchemaChangeMixedWithUpdate(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test;") tk.MustExec("create table t (c_1 int, c_2 char(20), c_pos_1 int, c_idx_visible int, c_3 decimal(5, 3), " + @@ -769,10 +739,8 @@ func TestMultiSchemaChangeMixedWithUpdate(t *testing.T) { tk.MustExec("insert into t values (100, 'c_2_insert', 101, 12, 2.1, '10:00:00', " + "'2020-01-01 10:00:00', 'wer', '10:00:00', 2.1, 12, 'qwer', 12, 'asdf');") - originHook := dom.DDL().GetHook() - hook := &callback.TestDDLCallback{Do: dom} var checkErr error - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if checkErr != nil { return } @@ -788,8 +756,7 @@ func TestMultiSchemaChangeMixedWithUpdate(t *testing.T) { return } } - } - dom.DDL().SetHook(hook) + }) tk.MustExec("alter table t " + "add index i_add_1(c_add_idx_1), " + "drop index idx_drop, " + @@ -806,7 +773,6 @@ func TestMultiSchemaChangeMixedWithUpdate(t *testing.T) { "alter index idx_visible invisible, " + "modify column c_3 decimal(10, 2);") require.NoError(t, checkErr) - dom.DDL().SetHook(originHook) } func TestMultiSchemaChangeBlockedByRowLevelChecksum(t *testing.T) { @@ -836,8 +802,6 @@ type cancelOnceHook struct { cancelErr error pred func(job *model.Job) bool s sessionctx.Context - - callback.TestDDLCallback } func (c *cancelOnceHook) OnJobUpdated(job *model.Job) { @@ -863,15 +827,14 @@ func (c *cancelOnceHook) MustCancelFailed(t *testing.T) { require.Contains(t, c.cancelErr.Error(), strconv.Itoa(errno.ErrCannotCancelDDLJob)) } -func newCancelJobHook(t *testing.T, store kv.Storage, dom *domain.Domain, +func newCancelJobHook(t *testing.T, store kv.Storage, pred func(job *model.Job) bool) *cancelOnceHook { tk := testkit.NewTestKit(t, store) tk.MustExec("use test") return &cancelOnceHook{ - store: store, - pred: pred, - TestDDLCallback: callback.TestDDLCallback{Do: dom}, - s: tk.Session(), + store: store, + pred: pred, + s: tk.Session(), } } diff --git a/pkg/ddl/mv_index_test.go b/pkg/ddl/mv_index_test.go index 1891d5bdbc62a..9fe51ece6d5c2 100644 --- a/pkg/ddl/mv_index_test.go +++ b/pkg/ddl/mv_index_test.go @@ -19,14 +19,14 @@ import ( "strings" "testing" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/errno" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/testkit" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" ) func TestMultiValuedIndexOnlineDDL(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -45,20 +45,17 @@ func TestMultiValuedIndexOnlineDDL(t *testing.T) { internalTK := testkit.NewTestKit(t, store) internalTK.MustExec("use test") - hook := &callback.TestDDLCallback{Do: dom} n := 100 - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { internalTK.MustExec(fmt.Sprintf("insert into t values (%d, '[%d, %d, %d]')", n, n, n+1, n+2)) internalTK.MustExec(fmt.Sprintf("delete from t where pk = %d", n-4)) internalTK.MustExec(fmt.Sprintf("update t set a = '[%d, %d, %d]' where pk = %d", n-3, n-2, n+1000, n-3)) n++ - } - o := dom.DDL().GetHook() - dom.DDL().SetHook(hook) + }) tk.MustExec("alter table t add index idx((cast(a as signed array)))") tk.MustExec("admin check table t") - dom.DDL().SetHook(o) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore") tk.MustExec("drop table if exists t;") tk.MustExec("create table t (pk int primary key, a json);") diff --git a/pkg/ddl/options.go b/pkg/ddl/options.go index 6340b7ac4058d..8712cda792f1b 100644 --- a/pkg/ddl/options.go +++ b/pkg/ddl/options.go @@ -32,7 +32,6 @@ type Options struct { Store kv.Storage AutoIDClient *autoid.ClientDiscover InfoCache *infoschema.InfoCache - Hook Callback Lease time.Duration SchemaLoader SchemaLoader } @@ -65,13 +64,6 @@ func WithAutoIDClient(cli *autoid.ClientDiscover) Option { } } -// WithHook specifies the `Callback` of DDL used to notify the outer module when events are triggered -func WithHook(callback Callback) Option { - return func(options *Options) { - options.Hook = callback - } -} - // WithLease specifies the schema lease duration func WithLease(lease time.Duration) Option { return func(options *Options) { diff --git a/pkg/ddl/options_test.go b/pkg/ddl/options_test.go index a7a299c1515e7..7463674f1489f 100644 --- a/pkg/ddl/options_test.go +++ b/pkg/ddl/options_test.go @@ -32,14 +32,12 @@ func TestOptions(t *testing.T) { err := client.Close() require.NoError(t, err) }() - callback := &ddl.BaseCallback{} lease := time.Second * 3 store := &mock.Store{} infoHandle := infoschema.NewCache(nil, 16) options := []ddl.Option{ ddl.WithEtcdClient(client), - ddl.WithHook(callback), ddl.WithLease(lease), ddl.WithStore(store), ddl.WithInfoCache(infoHandle), @@ -51,7 +49,6 @@ func TestOptions(t *testing.T) { } require.Equal(t, client, opt.EtcdCli) - require.Equal(t, callback, opt.Hook) require.Equal(t, lease, opt.Lease) require.Equal(t, store, opt.Store) require.Equal(t, infoHandle, opt.InfoCache) diff --git a/pkg/ddl/partition.go b/pkg/ddl/partition.go index 55ce25396fd1f..2c7582df789e6 100644 --- a/pkg/ddl/partition.go +++ b/pkg/ddl/partition.go @@ -45,6 +45,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/parser/opcode" "github.com/pingcap/tidb/pkg/parser/terror" + field_types "github.com/pingcap/tidb/pkg/parser/types" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/sessionctx/variable" statsutil "github.com/pingcap/tidb/pkg/statistics/handle/util" @@ -61,6 +62,7 @@ import ( "github.com/pingcap/tidb/pkg/util/mathutil" decoder "github.com/pingcap/tidb/pkg/util/rowDecoder" "github.com/pingcap/tidb/pkg/util/slice" + "github.com/pingcap/tidb/pkg/util/sqlkiller" "github.com/pingcap/tidb/pkg/util/stringutil" "github.com/tikv/client-go/v2/tikv" kvutil "github.com/tikv/client-go/v2/util" @@ -91,10 +93,10 @@ func checkAddPartition(t *meta.Meta, job *model.Job) (*model.TableInfo, *model.P } // TODO: Move this into reorganize partition! -func (w *worker) onAddTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func (w *worker) onAddTablePartition(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { // Handle the rolling back job if job.IsRollingback() { - ver, err := w.onDropTablePartition(d, t, job) + ver, err := w.onDropTablePartition(jobCtx, t, job) if err != nil { return ver, errors.Trace(err) } @@ -133,7 +135,7 @@ func (w *worker) onAddTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job) (v // move the adding definition into tableInfo. updateAddingPartitionInfo(partInfo, tblInfo) - ver, err = updateVersionAndTableInfoWithCheck(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfoWithCheck(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -186,9 +188,9 @@ func (w *worker) onAddTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job) (v if tblInfo.TiFlashReplica != nil && tblInfo.TiFlashReplica.Available { // For available state, the new added partition should wait it's replica to // be finished. Otherwise the query to this partition will be blocked. - needRetry, err := checkPartitionReplica(tblInfo.TiFlashReplica.Count, addingDefinitions, d) + needRetry, err := checkPartitionReplica(tblInfo.TiFlashReplica.Count, addingDefinitions, jobCtx) if err != nil { - return convertAddTablePartitionJob2RollbackJob(d, t, job, err, tblInfo) + return convertAddTablePartitionJob2RollbackJob(jobCtx, t, job, err, tblInfo) } if needRetry { // The new added partition hasn't been replicated. @@ -217,9 +219,9 @@ func (w *worker) onAddTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job) (v // For normal and replica finished table, move the `addingDefinitions` into `Definitions`. updatePartitionInfo(tblInfo) - preSplitAndScatter(w.sess.Context, d.store, tblInfo, addingDefinitions) + preSplitAndScatter(w.sess.Context, jobCtx.store, tblInfo, addingDefinitions) - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -231,7 +233,7 @@ func (w *worker) onAddTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job) (v tblInfo, partInfo, ) - asyncNotifyEvent(d, addPartitionEvent) + asyncNotifyEvent(jobCtx, addPartitionEvent) default: err = dbterror.ErrInvalidDDLState.GenWithStackByArgs("partition", job.SchemaState) } @@ -407,7 +409,7 @@ func checkAddPartitionValue(meta *model.TableInfo, part *model.PartitionInfo) er return nil } -func checkPartitionReplica(replicaCount uint64, addingDefinitions []model.PartitionDefinition, d *ddlCtx) (needWait bool, err error) { +func checkPartitionReplica(replicaCount uint64, addingDefinitions []model.PartitionDefinition, jobCtx *jobContext) (needWait bool, err error) { failpoint.Inject("mockWaitTiFlashReplica", func(val failpoint.Value) { if val.(bool) { failpoint.Return(true, nil) @@ -420,7 +422,7 @@ func checkPartitionReplica(replicaCount uint64, addingDefinitions []model.Partit }) ctx := context.Background() - pdCli := d.store.(tikv.Storage).GetRegionCache().PDClient() + pdCli := jobCtx.store.(tikv.Storage).GetRegionCache().PDClient() stores, err := pdCli.GetAllStores(ctx) if err != nil { return needWait, errors.Trace(err) @@ -621,16 +623,83 @@ func buildTablePartitionInfo(ctx sessionctx.Context, s *ast.PartitionOptions, tb } } - partCols, err := getPartitionColSlices(exprCtx, tbInfo, s) - if err != nil { - return errors.Trace(err) + if len(s.UpdateIndexes) > 0 { + updateIndexes := make([]model.UpdateIndexInfo, 0, len(s.UpdateIndexes)) + dupCheck := make(map[string]struct{}) + for _, idxUpdate := range s.UpdateIndexes { + idxOffset := -1 + for i := range tbInfo.Indices { + if strings.EqualFold(tbInfo.Indices[i].Name.L, idxUpdate.Name) { + idxOffset = i + break + } + } + if idxOffset == -1 { + if strings.EqualFold("primary", idxUpdate.Name) && + tbInfo.PKIsHandle { + return dbterror.ErrUniqueKeyNeedAllFieldsInPf.GenWithStackByArgs("CLUSTERED INDEX") + } + return dbterror.ErrWrongNameForIndex.GenWithStackByArgs(idxUpdate.Name) + } + if _, ok := dupCheck[strings.ToLower(idxUpdate.Name)]; ok { + return dbterror.ErrWrongNameForIndex.GenWithStackByArgs(idxUpdate.Name) + } + dupCheck[strings.ToLower(idxUpdate.Name)] = struct{}{} + if idxUpdate.Option != nil && idxUpdate.Option.Global { + tbInfo.Indices[idxOffset].Global = true + } else { + tbInfo.Indices[idxOffset].Global = false + } + updateIndexes = append(updateIndexes, model.UpdateIndexInfo{IndexName: idxUpdate.Name, Global: tbInfo.Indices[idxOffset].Global}) + tbInfo.Partition.DDLUpdateIndexes = updateIndexes + } } for _, index := range tbInfo.Indices { - if index.Unique && !checkUniqueKeyIncludePartKey(partCols, index.Columns) { - index.Global = ctx.GetSessionVars().EnableGlobalIndex + if index.Unique { + ck, err := checkPartitionKeysConstraint(pi, index.Columns, tbInfo) + if err != nil { + return err + } + if !ck { + indexTp := "" + if !ctx.GetSessionVars().EnableGlobalIndex { + if index.Primary { + indexTp = "PRIMARY KEY" + if tbInfo.IsCommonHandle { + indexTp = "CLUSTERED INDEX" + } + } else { + indexTp = "UNIQUE INDEX" + } + } else if index.Primary && tbInfo.IsCommonHandle { + indexTp = "CLUSTERED INDEX" + } + if indexTp != "" { + return dbterror.ErrUniqueKeyNeedAllFieldsInPf.GenWithStackByArgs(indexTp) + } + if !index.Global { + return dbterror.ErrGlobalIndexNotExplicitlySet.GenWithStackByArgs(index.Name.O) + } + } } } + if tbInfo.PKIsHandle { + // This case is covers when the Handle is the PK (only ints), since it would not + // have an entry in the tblInfo.Indices + indexCols := []*model.IndexColumn{{ + Name: tbInfo.GetPkName(), + Length: types.UnspecifiedLength, + }} + ck, err := checkPartitionKeysConstraint(pi, indexCols, tbInfo) + if err != nil { + return err + } + if !ck { + return dbterror.ErrUniqueKeyNeedAllFieldsInPf.GenWithStackByArgs("CLUSTERED INDEX") + } + } + return nil } @@ -659,6 +728,50 @@ func getPartitionColSlices(sctx expression.BuildContext, tblInfo *model.TableInf return nil, errors.Errorf("Table partition metadata not correct, neither partition expression or list of partition columns") } +func checkColumnsPartitionType(tbInfo *model.TableInfo) error { + for _, col := range tbInfo.Partition.Columns { + colInfo := tbInfo.FindPublicColumnByName(col.L) + if colInfo == nil { + return errors.Trace(dbterror.ErrFieldNotFoundPart) + } + if !isColTypeAllowedAsPartitioningCol(tbInfo.Partition.Type, colInfo.FieldType) { + return dbterror.ErrNotAllowedTypeInPartition.GenWithStackByArgs(col.O) + } + } + return nil +} + +func isValidKeyPartitionColType(fieldType types.FieldType) bool { + switch fieldType.GetType() { + case mysql.TypeBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob, mysql.TypeJSON, mysql.TypeGeometry, mysql.TypeTiDBVectorFloat32: + return false + default: + return true + } +} + +func isColTypeAllowedAsPartitioningCol(partType model.PartitionType, fieldType types.FieldType) bool { + // For key partition, the permitted partition field types can be all field types except + // BLOB, JSON, Geometry + if partType == model.PartitionTypeKey { + return isValidKeyPartitionColType(fieldType) + } + // The permitted data types are shown in the following list: + // All integer types + // DATE and DATETIME + // CHAR, VARCHAR, BINARY, and VARBINARY + // See https://dev.mysql.com/doc/mysql-partitioning-excerpt/5.7/en/partitioning-columns.html + // Note that also TIME is allowed in MySQL. Also see https://bugs.mysql.com/bug.php?id=84362 + switch fieldType.GetType() { + case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong: + case mysql.TypeDate, mysql.TypeDatetime, mysql.TypeDuration: + case mysql.TypeVarchar, mysql.TypeString: + default: + return false + } + return true +} + // getPartitionIntervalFromTable checks if a partitioned table matches a generated INTERVAL partitioned scheme // will return nil if error occurs, i.e. not an INTERVAL partitioned table func getPartitionIntervalFromTable(ctx expression.BuildContext, tbInfo *model.TableInfo) *ast.PartitionInterval { @@ -1030,6 +1143,66 @@ func generatePartitionDefinitionsFromInterval(ctx expression.BuildContext, partO return nil } +func checkAndGetColumnsTypeAndValuesMatch(ctx expression.BuildContext, colTypes []types.FieldType, exprs []ast.ExprNode) ([]types.Datum, error) { + // Validate() has already checked len(colNames) = len(exprs) + // create table ... partition by range columns (cols) + // partition p0 values less than (expr) + // check the type of cols[i] and expr is consistent. + valDatums := make([]types.Datum, 0, len(colTypes)) + for i, colExpr := range exprs { + if _, ok := colExpr.(*ast.MaxValueExpr); ok { + valDatums = append(valDatums, types.NewStringDatum(partitionMaxValue)) + continue + } + if d, ok := colExpr.(*ast.DefaultExpr); ok { + if d.Name != nil { + return nil, dbterror.ErrWrongTypeColumnValue.GenWithStackByArgs() + } + continue + } + colType := colTypes[i] + val, err := expression.EvalSimpleAst(ctx, colExpr) + if err != nil { + return nil, err + } + // Check val.ConvertTo(colType) doesn't work, so we need this case by case check. + vkind := val.Kind() + switch colType.GetType() { + case mysql.TypeDate, mysql.TypeDatetime, mysql.TypeDuration: + switch vkind { + case types.KindString, types.KindBytes, types.KindNull: + default: + return nil, dbterror.ErrWrongTypeColumnValue.GenWithStackByArgs() + } + case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong: + switch vkind { + case types.KindInt64, types.KindUint64, types.KindNull: + default: + return nil, dbterror.ErrWrongTypeColumnValue.GenWithStackByArgs() + } + case mysql.TypeFloat, mysql.TypeDouble: + switch vkind { + case types.KindFloat32, types.KindFloat64, types.KindNull: + default: + return nil, dbterror.ErrWrongTypeColumnValue.GenWithStackByArgs() + } + case mysql.TypeString, mysql.TypeVarString: + switch vkind { + case types.KindString, types.KindBytes, types.KindNull, types.KindBinaryLiteral: + default: + return nil, dbterror.ErrWrongTypeColumnValue.GenWithStackByArgs() + } + } + evalCtx := ctx.GetEvalCtx() + newVal, err := val.ConvertTo(evalCtx.TypeCtx(), &colType) + if err != nil { + return nil, dbterror.ErrWrongTypeColumnValue.GenWithStackByArgs() + } + valDatums = append(valDatums, newVal) + } + return valDatums, nil +} + func astIntValueExprFromStr(s string, unsigned bool) (ast.ExprNode, error) { if unsigned { u, err := strconv.ParseUint(s, 10, 64) @@ -1200,6 +1373,10 @@ func GeneratePartDefsFromInterval(ctx expression.BuildContext, tp ast.AlterTable // Last partition! break } + // The last loop still not reach the max value, return error. + if i == mysql.PartitionCountLimit-1 { + return errors.Trace(dbterror.ErrTooManyPartitions) + } } if len(tbInfo.Partition.Definitions)+len(partDefs) > mysql.PartitionCountLimit { return errors.Trace(dbterror.ErrTooManyPartitions) @@ -1975,7 +2152,7 @@ func dropLabelRules(ctx context.Context, schemaName, tableName string, partNames } // onDropTablePartition deletes old partition meta. -func (w *worker) onDropTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func (w *worker) onDropTablePartition(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { var partNames []string partInfo := model.PartitionInfo{} if err := job.DecodeArgs(&partNames, &partInfo); err != nil { @@ -2023,7 +2200,7 @@ func (w *worker) onDropTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job) ( tblInfo.Partition.ClearReorgIntermediateInfo() } - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -2083,17 +2260,17 @@ func (w *worker) onDropTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job) ( } job.SchemaState = model.StateDeleteOnly - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, originalState != job.SchemaState) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, originalState != job.SchemaState) case model.StateDeleteOnly: // This state is not a real 'DeleteOnly' state, because tidb does not maintaining the state check in partitionDefinition. // Insert this state to confirm all servers can not see the old partitions when reorg is running, // so that no new data will be inserted into old partitions when reorganizing. job.SchemaState = model.StateDeleteReorganization - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, originalState != job.SchemaState) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, originalState != job.SchemaState) case model.StateDeleteReorganization: oldTblInfo := getTableInfoWithDroppingPartitions(tblInfo) physicalTableIDs = getPartitionIDsFromDefinitions(tblInfo.Partition.DroppingDefinitions) - tbl, err := getTable(d.getAutoIDRequirement(), job.SchemaID, oldTblInfo) + tbl, err := getTable(jobCtx.getAutoIDRequirement(), job.SchemaID, oldTblInfo) if err != nil { return ver, errors.Trace(err) } @@ -2116,14 +2293,14 @@ func (w *worker) onDropTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job) ( } defer w.sessPool.Put(sctx) rh := newReorgHandler(sess.NewSession(sctx)) - reorgInfo, err := getReorgInfoFromPartitions(d.jobContext(job.ID, job.ReorgMeta), d, rh, job, dbInfo, pt, physicalTableIDs, elements) + reorgInfo, err := getReorgInfoFromPartitions(jobCtx.oldDDLCtx.jobContext(job.ID, job.ReorgMeta), jobCtx, rh, job, dbInfo, pt, physicalTableIDs, elements) if err != nil || reorgInfo.first { // If we run reorg firstly, we should update the job snapshot version // and then run the reorg next time. return ver, errors.Trace(err) } - err = w.runReorgJob(reorgInfo, tbl.Meta(), d.lease, func() (dropIndexErr error) { + err = w.runReorgJob(reorgInfo, tbl.Meta(), func() (dropIndexErr error) { defer tidbutil.Recover(metrics.LabelDDL, "onDropTablePartition", func() { dropIndexErr = dbterror.ErrCancelledDDLJob.GenWithStack("drop partition panic") @@ -2149,7 +2326,7 @@ func (w *worker) onDropTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job) ( tblInfo.Partition.DroppingDefinitions = nil // used by ApplyDiff in updateSchemaVersion job.CtxVars = []any{physicalTableIDs} - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -2160,7 +2337,7 @@ func (w *worker) onDropTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job) ( tblInfo, &model.PartitionInfo{Definitions: droppedDefs}, ) - asyncNotifyEvent(d, dropPartitionEvent) + asyncNotifyEvent(jobCtx, dropPartitionEvent) // A background job will be created to delete old partition data. job.Args = []any{physicalTableIDs} default: @@ -2187,7 +2364,7 @@ func removeTiFlashAvailablePartitionIDs(tblInfo *model.TableInfo, pids []int64) } // onTruncateTablePartition truncates old partition meta. -func (w *worker) onTruncateTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job) (int64, error) { +func (w *worker) onTruncateTablePartition(jobCtx *jobContext, t *meta.Meta, job *model.Job) (int64, error) { var ver int64 var oldIDs, newIDs []int64 if err := job.DecodeArgs(&oldIDs, &newIDs); err != nil { @@ -2237,10 +2414,10 @@ func (w *worker) onTruncateTablePartition(d *ddlCtx, t *meta.Meta, job *model.Jo return ver, err } - preSplitAndScatter(w.sess.Context, d.store, tblInfo, newPartitions) + preSplitAndScatter(w.sess.Context, jobCtx.store, tblInfo, newPartitions) job.CtxVars = []any{oldIDs, newIDs} - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -2253,7 +2430,7 @@ func (w *worker) onTruncateTablePartition(d *ddlCtx, t *meta.Meta, job *model.Jo &model.PartitionInfo{Definitions: newPartitions}, &model.PartitionInfo{Definitions: oldPartitions}, ) - asyncNotifyEvent(d, truncatePartitionEvent) + asyncNotifyEvent(jobCtx, truncatePartitionEvent) // A background job will be created to delete old partition data. job.Args = []any{oldIDs} @@ -2279,19 +2456,19 @@ func (w *worker) onTruncateTablePartition(d *ddlCtx, t *meta.Meta, job *model.Jo pi.NewPartitionIDs = newIDs[:] job.SchemaState = model.StateDeleteOnly - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) case model.StateDeleteOnly: // This state is not a real 'DeleteOnly' state, because tidb does not maintaining the state check in partitionDefinition. // Insert this state to confirm all servers can not see the old partitions when reorg is running, // so that no new data will be inserted into old partitions when reorganizing. job.SchemaState = model.StateDeleteReorganization - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) case model.StateDeleteReorganization: // Step2: clear global index rows. physicalTableIDs := oldIDs oldTblInfo := getTableInfoWithOriginalPartitions(tblInfo, oldIDs, newIDs) - tbl, err := getTable(d.getAutoIDRequirement(), job.SchemaID, oldTblInfo) + tbl, err := getTable(jobCtx.getAutoIDRequirement(), job.SchemaID, oldTblInfo) if err != nil { return ver, errors.Trace(err) } @@ -2314,14 +2491,14 @@ func (w *worker) onTruncateTablePartition(d *ddlCtx, t *meta.Meta, job *model.Jo } defer w.sessPool.Put(sctx) rh := newReorgHandler(sess.NewSession(sctx)) - reorgInfo, err := getReorgInfoFromPartitions(d.jobContext(job.ID, job.ReorgMeta), d, rh, job, dbInfo, pt, physicalTableIDs, elements) + reorgInfo, err := getReorgInfoFromPartitions(jobCtx.oldDDLCtx.jobContext(job.ID, job.ReorgMeta), jobCtx, rh, job, dbInfo, pt, physicalTableIDs, elements) if err != nil || reorgInfo.first { // If we run reorg firstly, we should update the job snapshot version // and then run the reorg next time. return ver, errors.Trace(err) } - err = w.runReorgJob(reorgInfo, tbl.Meta(), d.lease, func() (dropIndexErr error) { + err = w.runReorgJob(reorgInfo, tbl.Meta(), func() (dropIndexErr error) { defer tidbutil.Recover(metrics.LabelDDL, "onDropTablePartition", func() { dropIndexErr = dbterror.ErrCancelledDDLJob.GenWithStack("drop partition panic") @@ -2376,11 +2553,11 @@ func (w *worker) onTruncateTablePartition(d *ddlCtx, t *meta.Meta, job *model.Jo tblInfo.Partition.DroppingDefinitions = nil tblInfo.Partition.NewPartitionIDs = nil - preSplitAndScatter(w.sess.Context, d.store, tblInfo, newPartitions) + preSplitAndScatter(w.sess.Context, jobCtx.store, tblInfo, newPartitions) // used by ApplyDiff in updateSchemaVersion job.CtxVars = []any{oldIDs, newIDs} - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -2392,7 +2569,7 @@ func (w *worker) onTruncateTablePartition(d *ddlCtx, t *meta.Meta, job *model.Jo &model.PartitionInfo{Definitions: newPartitions}, &model.PartitionInfo{Definitions: oldPartitions}, ) - asyncNotifyEvent(d, truncatePartitionEvent) + asyncNotifyEvent(jobCtx, truncatePartitionEvent) // A background job will be created to delete old partition data. job.Args = []any{oldIDs} default: @@ -2484,7 +2661,7 @@ func updateTruncatePartitionLabelRules(job *model.Job, t *meta.Meta, oldPartitio } // onExchangeTablePartition exchange partition data -func (w *worker) onExchangeTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func (w *worker) onExchangeTablePartition(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { var ( // defID only for updateSchemaVersion defID int64 @@ -2517,7 +2694,7 @@ func (w *worker) onExchangeTablePartition(d *ddlCtx, t *meta.Meta, job *model.Jo } if job.IsRollingback() { - return rollbackExchangeTablePartition(d, t, job, nt) + return rollbackExchangeTablePartition(jobCtx, t, job, nt) } pt, err := getTableInfo(t, ptID, ptSchemaID) if err != nil { @@ -2584,7 +2761,7 @@ func (w *worker) onExchangeTablePartition(d *ddlCtx, t *meta.Meta, job *model.Jo // into the table using the schema version // before the exchange is made. job.SchemaState = model.StateWriteOnly - return updateVersionAndTableInfoWithCheck(d, t, job, nt, true, ptInfo...) + return updateVersionAndTableInfoWithCheck(jobCtx, t, job, nt, true, ptInfo...) } // From now on, nt (the non-partitioned table) has // ExchangePartitionInfo set, meaning it is restricted @@ -2592,9 +2769,7 @@ func (w *worker) onExchangeTablePartition(d *ddlCtx, t *meta.Meta, job *model.Jo // partition to be exchange with. // So we need to rollback that change, instead of just cancelling. - if d.lease > 0 { - delayForAsyncCommit() - } + delayForAsyncCommit() if defID != partDef.ID { // Should never happen, should have been updated above, in previous state! @@ -2609,11 +2784,11 @@ func (w *worker) onExchangeTablePartition(d *ddlCtx, t *meta.Meta, job *model.Jo } if withValidation { - ntbl, err := getTable(d.getAutoIDRequirement(), job.SchemaID, nt) + ntbl, err := getTable(jobCtx.getAutoIDRequirement(), job.SchemaID, nt) if err != nil { return ver, errors.Trace(err) } - ptbl, err := getTable(d.getAutoIDRequirement(), ptSchemaID, pt) + ptbl, err := getTable(jobCtx.getAutoIDRequirement(), ptSchemaID, pt) if err != nil { return ver, errors.Trace(err) } @@ -2646,7 +2821,7 @@ func (w *worker) onExchangeTablePartition(d *ddlCtx, t *meta.Meta, job *model.Jo // Recreate non-partition table meta info, // by first delete it with the old table id - err = t.DropTableOrView(job.SchemaID, job.SchemaName, nt.ID, nt.Name.L) + err = t.DropTableOrView(job.SchemaID, nt.ID) if err != nil { return ver, errors.Trace(err) } @@ -2663,7 +2838,7 @@ func (w *worker) onExchangeTablePartition(d *ddlCtx, t *meta.Meta, job *model.Jo return ver, errors.Trace(err) } - err = t.CreateTableOrView(job.SchemaID, job.SchemaName, nt) + err = t.CreateTableOrView(job.SchemaID, nt) if err != nil { return ver, errors.Trace(err) } @@ -2755,7 +2930,7 @@ func (w *worker) onExchangeTablePartition(d *ddlCtx, t *meta.Meta, job *model.Jo job.SchemaState = model.StatePublic nt.ExchangePartitionInfo = nil - ver, err = updateVersionAndTableInfoWithCheck(d, t, job, nt, true) + ver, err = updateVersionAndTableInfoWithCheck(jobCtx, t, job, nt, true) if err != nil { return ver, errors.Trace(err) } @@ -2767,10 +2942,22 @@ func (w *worker) onExchangeTablePartition(d *ddlCtx, t *meta.Meta, job *model.Jo &model.PartitionInfo{Definitions: []model.PartitionDefinition{originalPartitionDef}}, originalNt, ) - asyncNotifyEvent(d, exchangePartitionEvent) + asyncNotifyEvent(jobCtx, exchangePartitionEvent) return ver, nil } +func getNewGlobal(partInfo *model.PartitionInfo, idx *model.IndexInfo) bool { + if len(partInfo.DDLUpdateIndexes) == 0 { + return idx.Global + } + for _, newIdx := range partInfo.DDLUpdateIndexes { + if strings.EqualFold(idx.Name.L, newIdx.IndexName) { + return newIdx.Global + } + } + return idx.Global +} + func getReorgPartitionInfo(t *meta.Meta, job *model.Job) (*model.TableInfo, []string, *model.PartitionInfo, []model.PartitionDefinition, []model.PartitionDefinition, error) { schemaID := job.SchemaID tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, schemaID) @@ -2874,10 +3061,10 @@ func getReorgPartitionInfo(t *meta.Meta, job *model.Job) (*model.TableInfo, []st // // Everything now looks as it should, no memory of old partitions/indexes, // and no more double writing, since the previous state is only reading the new partitions/indexes. -func (w *worker) onReorganizePartition(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func (w *worker) onReorganizePartition(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { // Handle the rolling back job if job.IsRollingback() { - ver, err := w.onDropTablePartition(d, t, job) + ver, err := w.onDropTablePartition(jobCtx, t, job) if err != nil { return ver, errors.Trace(err) } @@ -2941,28 +3128,56 @@ func (w *worker) onReorganizePartition(d *ddlCtx, t *meta.Meta, job *model.Job) // All global indexes must be recreated, we cannot update them in-place, since we must have // both old and new set of partition ids in the unique index at the same time! for _, index := range tblInfo.Indices { + newGlobal := getNewGlobal(partInfo, index) + if job.Type == model.ActionRemovePartitioning { + // When removing partitioning, set all indexes to 'local' since it will become a non-partitioned table! + newGlobal = false + } if !index.Unique { // for now, only unique index can be global, non-unique indexes are 'local' + // TODO: For the future loosen this restriction and allow non-unique global indexes + if newGlobal { + job.State = model.JobStateCancelled + return ver, dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs(fmt.Sprintf("PARTITION BY, index '%v' is not unique, but has Global Index set", index.Name.O)) + } continue } inAllPartitionColumns, err := checkPartitionKeysConstraint(partInfo, index.Columns, tblInfo) if err != nil { return ver, errors.Trace(err) } - if index.Global || !inAllPartitionColumns { + if !inAllPartitionColumns { + // Currently only support Explicit Global indexes. + if !newGlobal { + job.State = model.JobStateCancelled + return ver, dbterror.ErrGlobalIndexNotExplicitlySet.GenWithStackByArgs(index.Name.O) + } // Duplicate the unique indexes with new index ids. // If previously was Global or will be Global: // it must be recreated with new index ID + // TODO: Could we allow that session in StateWriteReorganization, when StateDeleteReorganization + // has started, may not find changes through the global index that sessions in StateDeleteReorganization made? + // If so, then we could avoid copying the full Global Index if it has not changed from LOCAL! + // It might be possible to use the new, not yet public partitions to access those rows?! + // Just that it would not work with explicit partition select SELECT FROM t PARTITION (p,...) newIndex := index.Clone() newIndex.State = model.StateDeleteOnly newIndex.ID = AllocateIndexID(tblInfo) - if inAllPartitionColumns { + newIndex.Global = true + tblInfo.Indices = append(tblInfo.Indices, newIndex) + } else { + if newGlobal { + // TODO: For the future loosen this restriction and allow global indexes for unique keys also including all partitioning columns + return ver, dbterror.ErrGeneralUnsupportedDDL.GenWithStackByArgs(fmt.Sprintf("PARTITION BY, index '%v' is unique and contains all partitioning columns, but has Global Index set", index.Name.O)) + } + if index.Global { + // Index was previously Global, now it needs to be duplicated and become a local index. + newIndex := index.Clone() + newIndex.State = model.StateDeleteOnly + newIndex.ID = AllocateIndexID(tblInfo) newIndex.Global = false - } else { - // If not including all partitioning columns, make it Global - newIndex.Global = true + tblInfo.Indices = append(tblInfo.Indices, newIndex) } - tblInfo.Indices = append(tblInfo.Indices, newIndex) } } // From now on we cannot just cancel the DDL, we must roll back if changesMade! @@ -2984,7 +3199,7 @@ func (w *worker) onReorganizePartition(d *ddlCtx, t *meta.Meta, job *model.Job) job.State = model.JobStateCancelled return ver, errors.Trace(err) } - return convertAddTablePartitionJob2RollbackJob(d, t, job, err, tblInfo) + return convertAddTablePartitionJob2RollbackJob(jobCtx, t, job, err, tblInfo) } if len(bundles) > 0 { @@ -2993,7 +3208,7 @@ func (w *worker) onReorganizePartition(d *ddlCtx, t *meta.Meta, job *model.Job) job.State = model.JobStateCancelled return ver, errors.Wrapf(err, "failed to notify PD the placement rules") } - return convertAddTablePartitionJob2RollbackJob(d, t, job, err, tblInfo) + return convertAddTablePartitionJob2RollbackJob(jobCtx, t, job, err, tblInfo) } changesMade = true } @@ -3009,12 +3224,12 @@ func (w *worker) onReorganizePartition(d *ddlCtx, t *meta.Meta, job *model.Job) job.State = model.JobStateCancelled return ver, err } - return convertAddTablePartitionJob2RollbackJob(d, t, job, err, tblInfo) + return convertAddTablePartitionJob2RollbackJob(jobCtx, t, job, err, tblInfo) } // Doing the preSplitAndScatter here, since all checks are completed, // and we will soon start writing to the new partitions. - if s, ok := d.store.(kv.SplittableStore); ok && s != nil { + if s, ok := jobCtx.store.(kv.SplittableStore); ok && s != nil { // partInfo only contains the AddingPartitions splitPartitionTableRegion(w.sess.Context, s, tblInfo, partInfo.Definitions, true) } @@ -3023,7 +3238,7 @@ func (w *worker) onReorganizePartition(d *ddlCtx, t *meta.Meta, job *model.Job) metrics.GetBackfillProgressByLabel(metrics.LblReorgPartition, job.SchemaName, tblInfo.Name.String()).Set(0.1 / float64(math.MaxUint64)) job.SchemaState = model.StateDeleteOnly tblInfo.Partition.DDLState = model.StateDeleteOnly - ver, err = updateVersionAndTableInfoWithCheck(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfoWithCheck(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -3053,11 +3268,11 @@ func (w *worker) onReorganizePartition(d *ddlCtx, t *meta.Meta, job *model.Job) // For available state, the new added partition should wait its replica to // be finished, otherwise the query to this partition will be blocked. count := tblInfo.TiFlashReplica.Count - needRetry, err := checkPartitionReplica(count, addingDefinitions, d) + needRetry, err := checkPartitionReplica(count, addingDefinitions, jobCtx) if err != nil { // need to rollback, since we tried to register the new // partitions before! - return convertAddTablePartitionJob2RollbackJob(d, t, job, err, tblInfo) + return convertAddTablePartitionJob2RollbackJob(jobCtx, t, job, err, tblInfo) } if needRetry { // The new added partition hasn't been replicated. @@ -3081,7 +3296,7 @@ func (w *worker) onReorganizePartition(d *ddlCtx, t *meta.Meta, job *model.Job) } tblInfo.Partition.DDLState = model.StateWriteOnly metrics.GetBackfillProgressByLabel(metrics.LblReorgPartition, job.SchemaName, tblInfo.Name.String()).Set(0.2 / float64(math.MaxUint64)) - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) job.SchemaState = model.StateWriteOnly case model.StateWriteOnly: // Insert this state to confirm all servers can see the new partitions when reorg is running, @@ -3094,16 +3309,16 @@ func (w *worker) onReorganizePartition(d *ddlCtx, t *meta.Meta, job *model.Job) } tblInfo.Partition.DDLState = model.StateWriteReorganization metrics.GetBackfillProgressByLabel(metrics.LblReorgPartition, job.SchemaName, tblInfo.Name.String()).Set(0.3 / float64(math.MaxUint64)) - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) job.SchemaState = model.StateWriteReorganization case model.StateWriteReorganization: physicalTableIDs := getPartitionIDsFromDefinitions(tblInfo.Partition.DroppingDefinitions) - tbl, err2 := getTable(d.getAutoIDRequirement(), job.SchemaID, tblInfo) + tbl, err2 := getTable(jobCtx.getAutoIDRequirement(), job.SchemaID, tblInfo) if err2 != nil { return ver, errors.Trace(err2) } var done bool - done, ver, err = doPartitionReorgWork(w, d, t, job, tbl, physicalTableIDs) + done, ver, err = doPartitionReorgWork(w, jobCtx, t, job, tbl, physicalTableIDs) if !done { return ver, err @@ -3160,7 +3375,7 @@ func (w *worker) onReorganizePartition(d *ddlCtx, t *meta.Meta, job *model.Job) // since they are a part of the normal Definitions that other nodes with // the current schema version. So we need to double write for one more schema version tblInfo.Partition.DDLState = model.StateDeleteReorganization - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) job.SchemaState = model.StateDeleteReorganization case model.StateDeleteReorganization: @@ -3213,7 +3428,7 @@ func (w *worker) onReorganizePartition(d *ddlCtx, t *meta.Meta, job *model.Job) job.State = model.JobStateCancelled return ver, errors.Trace(err) } - err = t.DropTableOrView(job.SchemaID, job.SchemaName, tblInfo.ID, tblInfo.Name.L) + err = t.DropTableOrView(job.SchemaID, tblInfo.ID) if err != nil { job.State = model.JobStateCancelled return ver, errors.Trace(err) @@ -3236,14 +3451,14 @@ func (w *worker) onReorganizePartition(d *ddlCtx, t *meta.Meta, job *model.Job) return ver, errors.Trace(err) } // TODO: Add failpoint here? - err = t.CreateTableOrView(job.SchemaID, job.SchemaName, tblInfo) + err = t.CreateTableOrView(job.SchemaID, tblInfo) if err != nil { job.State = model.JobStateCancelled return ver, errors.Trace(err) } } job.CtxVars = []any{physicalTableIDs, newIDs} - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) failpoint.Inject("reorgPartWriteReorgSchemaVersionUpdateFail", func(val failpoint.Value) { if val.(bool) { err = errors.New("Injected error by reorgPartWriteReorgSchemaVersionUpdateFail") @@ -3265,7 +3480,7 @@ func (w *worker) onReorganizePartition(d *ddlCtx, t *meta.Meta, job *model.Job) if err != nil { return ver, errors.Trace(err) } - asyncNotifyEvent(d, event) + asyncNotifyEvent(jobCtx, event) // A background job will be created to delete old partition data. job.Args = []any{physicalTableIDs} @@ -3315,7 +3530,7 @@ func newStatsDDLEventForJob( return event, nil } -func doPartitionReorgWork(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job, tbl table.Table, physTblIDs []int64) (done bool, ver int64, err error) { +func doPartitionReorgWork(w *worker, jobCtx *jobContext, t *meta.Meta, job *model.Job, tbl table.Table, physTblIDs []int64) (done bool, ver int64, err error) { job.ReorgMeta.ReorgTp = model.ReorgTypeTxn sctx, err1 := w.sessPool.Get() if err1 != nil { @@ -3340,8 +3555,8 @@ func doPartitionReorgWork(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job, tb if err != nil { return false, ver, errors.Trace(err) } - reorgInfo, err := getReorgInfoFromPartitions(d.jobContext(job.ID, job.ReorgMeta), d, rh, job, dbInfo, partTbl, physTblIDs, elements) - err = w.runReorgJob(reorgInfo, tbl.Meta(), d.lease, func() (reorgErr error) { + reorgInfo, err := getReorgInfoFromPartitions(jobCtx.oldDDLCtx.jobContext(job.ID, job.ReorgMeta), jobCtx, rh, job, dbInfo, partTbl, physTblIDs, elements) + err = w.runReorgJob(reorgInfo, tbl.Meta(), func() (reorgErr error) { defer tidbutil.Recover(metrics.LabelDDL, "doPartitionReorgWork", func() { reorgErr = dbterror.ErrCancelledDDLJob.GenWithStack("reorganize partition for table `%v` panic", tbl.Meta().Name) @@ -3366,7 +3581,7 @@ func doPartitionReorgWork(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job, tb } logutil.DDLLogger().Warn("reorg partition job failed, convert job to rollback", zap.Stringer("job", job), zap.Error(err)) // TODO: rollback new global indexes! TODO: How to handle new index ids? - ver, err = convertAddTablePartitionJob2RollbackJob(d, t, job, err, tbl.Meta()) + ver, err = convertAddTablePartitionJob2RollbackJob(jobCtx, t, job, err, tbl.Meta()) return false, ver, errors.Trace(err) } return true, ver, err @@ -3383,7 +3598,7 @@ type reorgPartitionWorker struct { reorgedTbl table.PartitionedTable } -func newReorgPartitionWorker(i int, t table.PhysicalTable, decodeColMap map[int64]decoder.Column, reorgInfo *reorgInfo, jc *JobContext) (*reorgPartitionWorker, error) { +func newReorgPartitionWorker(i int, t table.PhysicalTable, decodeColMap map[int64]decoder.Column, reorgInfo *reorgInfo, jc *ReorgContext) (*reorgPartitionWorker, error) { bCtx, err := newBackfillCtx(i, reorgInfo, reorgInfo.SchemaName, t, jc, "reorg_partition_rate", false) if err != nil { return nil, err @@ -3627,11 +3842,11 @@ func (w *worker) reorgPartitionDataAndIndex(t table.Table, reorgInfo *reorgInfo) physTbl = tbl } // Get the original start handle and end handle. - currentVer, err := getValidCurrentVersion(reorgInfo.d.store) + currentVer, err := getValidCurrentVersion(reorgInfo.jobCtx.store) if err != nil { return errors.Trace(err) } - startHandle, endHandle, err := getTableRange(reorgInfo.NewJobContext(), reorgInfo.d, physTbl, currentVer.Ver, reorgInfo.Job.Priority) + startHandle, endHandle, err := getTableRange(reorgInfo.NewJobContext(), reorgInfo.jobCtx.store, physTbl, currentVer.Ver, reorgInfo.Job.Priority) if err != nil { return errors.Trace(err) } @@ -3695,11 +3910,11 @@ func (w *worker) reorgPartitionDataAndIndex(t table.Table, reorgInfo *reorgInfo) physTbl = tbl } // Get the original start handle and end handle. - currentVer, err := getValidCurrentVersion(reorgInfo.d.store) + currentVer, err := getValidCurrentVersion(reorgInfo.jobCtx.store) if err != nil { return errors.Trace(err) } - startHandle, endHandle, err := getTableRange(reorgInfo.NewJobContext(), reorgInfo.d, physTbl, currentVer.Ver, reorgInfo.Job.Priority) + startHandle, endHandle, err := getTableRange(reorgInfo.NewJobContext(), reorgInfo.jobCtx.store, physTbl, currentVer.Ver, reorgInfo.Job.Priority) if err != nil { return errors.Trace(err) } @@ -4657,3 +4872,156 @@ func generatePartValuesWithTp(partVal types.Datum, tp types.FieldType) (string, return "", dbterror.ErrWrongTypeColumnValue.GenWithStackByArgs() } + +func checkPartitionDefinitionConstraints(ctx sessionctx.Context, tbInfo *model.TableInfo) error { + var err error + if err = checkPartitionNameUnique(tbInfo.Partition); err != nil { + return errors.Trace(err) + } + if err = checkAddPartitionTooManyPartitions(uint64(len(tbInfo.Partition.Definitions))); err != nil { + return err + } + if err = checkAddPartitionOnTemporaryMode(tbInfo); err != nil { + return err + } + if err = checkPartitionColumnsUnique(tbInfo); err != nil { + return err + } + + switch tbInfo.Partition.Type { + case model.PartitionTypeRange: + err = checkPartitionByRange(ctx, tbInfo) + case model.PartitionTypeHash, model.PartitionTypeKey: + err = checkPartitionByHash(ctx, tbInfo) + case model.PartitionTypeList: + err = checkPartitionByList(ctx, tbInfo) + } + return errors.Trace(err) +} + +func checkPartitionByHash(ctx sessionctx.Context, tbInfo *model.TableInfo) error { + return checkNoHashPartitions(ctx, tbInfo.Partition.Num) +} + +// checkPartitionByRange checks validity of a "BY RANGE" partition. +func checkPartitionByRange(ctx sessionctx.Context, tbInfo *model.TableInfo) error { + failpoint.Inject("CheckPartitionByRangeErr", func() { + ctx.GetSessionVars().SQLKiller.SendKillSignal(sqlkiller.QueryMemoryExceeded) + panic(ctx.GetSessionVars().SQLKiller.HandleSignal()) + }) + pi := tbInfo.Partition + + if len(pi.Columns) == 0 { + return checkRangePartitionValue(ctx, tbInfo) + } + + return checkRangeColumnsPartitionValue(ctx, tbInfo) +} + +func checkRangeColumnsPartitionValue(ctx sessionctx.Context, tbInfo *model.TableInfo) error { + // Range columns partition key supports multiple data types with integer、datetime、string. + pi := tbInfo.Partition + defs := pi.Definitions + if len(defs) < 1 { + return ast.ErrPartitionsMustBeDefined.GenWithStackByArgs("RANGE") + } + + curr := &defs[0] + if len(curr.LessThan) != len(pi.Columns) { + return errors.Trace(ast.ErrPartitionColumnList) + } + var prev *model.PartitionDefinition + for i := 1; i < len(defs); i++ { + prev, curr = curr, &defs[i] + succ, err := checkTwoRangeColumns(ctx, curr, prev, pi, tbInfo) + if err != nil { + return err + } + if !succ { + return errors.Trace(dbterror.ErrRangeNotIncreasing) + } + } + return nil +} + +func checkTwoRangeColumns(ctx sessionctx.Context, curr, prev *model.PartitionDefinition, pi *model.PartitionInfo, tbInfo *model.TableInfo) (bool, error) { + if len(curr.LessThan) != len(pi.Columns) { + return false, errors.Trace(ast.ErrPartitionColumnList) + } + for i := 0; i < len(pi.Columns); i++ { + // Special handling for MAXVALUE. + if strings.EqualFold(curr.LessThan[i], partitionMaxValue) && !strings.EqualFold(prev.LessThan[i], partitionMaxValue) { + // If current is maxvalue, it certainly >= previous. + return true, nil + } + if strings.EqualFold(prev.LessThan[i], partitionMaxValue) { + // Current is not maxvalue, and previous is maxvalue. + return false, nil + } + + // The tuples of column values used to define the partitions are strictly increasing: + // PARTITION p0 VALUES LESS THAN (5,10,'ggg') + // PARTITION p1 VALUES LESS THAN (10,20,'mmm') + // PARTITION p2 VALUES LESS THAN (15,30,'sss') + colInfo := findColumnByName(pi.Columns[i].L, tbInfo) + cmp, err := parseAndEvalBoolExpr(ctx.GetExprCtx(), curr.LessThan[i], prev.LessThan[i], colInfo, tbInfo) + if err != nil { + return false, err + } + + if cmp > 0 { + return true, nil + } + + if cmp < 0 { + return false, nil + } + } + return false, nil +} + +// equal, return 0 +// greater, return 1 +// less, return -1 +func parseAndEvalBoolExpr(ctx expression.BuildContext, l, r string, colInfo *model.ColumnInfo, tbInfo *model.TableInfo) (int64, error) { + lexpr, err := expression.ParseSimpleExpr(ctx, l, expression.WithTableInfo("", tbInfo), expression.WithCastExprTo(&colInfo.FieldType)) + if err != nil { + return 0, err + } + rexpr, err := expression.ParseSimpleExpr(ctx, r, expression.WithTableInfo("", tbInfo), expression.WithCastExprTo(&colInfo.FieldType)) + if err != nil { + return 0, err + } + + e, err := expression.NewFunctionBase(ctx, ast.EQ, field_types.NewFieldType(mysql.TypeLonglong), lexpr, rexpr) + if err != nil { + return 0, err + } + e.SetCharsetAndCollation(colInfo.GetCharset(), colInfo.GetCollate()) + res, _, err1 := e.EvalInt(ctx.GetEvalCtx(), chunk.Row{}) + if err1 != nil { + return 0, err1 + } + if res == 1 { + return 0, nil + } + + e, err = expression.NewFunctionBase(ctx, ast.GT, field_types.NewFieldType(mysql.TypeLonglong), lexpr, rexpr) + if err != nil { + return 0, err + } + e.SetCharsetAndCollation(colInfo.GetCharset(), colInfo.GetCollate()) + res, _, err1 = e.EvalInt(ctx.GetEvalCtx(), chunk.Row{}) + if err1 != nil { + return 0, err1 + } + if res > 0 { + return 1, nil + } + return -1, nil +} + +// checkPartitionByList checks validity of a "BY LIST" partition. +func checkPartitionByList(ctx sessionctx.Context, tbInfo *model.TableInfo) error { + return checkListPartitionValue(ctx.GetExprCtx(), tbInfo) +} diff --git a/pkg/ddl/partition_test.go b/pkg/ddl/partition_test.go index c221a7be568f3..29a0b7ec8b4ac 100644 --- a/pkg/ddl/partition_test.go +++ b/pkg/ddl/partition_test.go @@ -20,12 +20,12 @@ import ( "time" "github.com/pingcap/tidb/pkg/ddl" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/testkit" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/types" "github.com/stretchr/testify/require" ) @@ -177,14 +177,12 @@ func TestReorganizePartitionRollback(t *testing.T) { defer close(wait) ddlDone := make(chan error) defer close(ddlDone) - hook := &callback.TestDDLCallback{Do: do} - hook.OnJobRunAfterExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunAfter", func(job *model.Job) { if job.Type == model.ActionReorganizePartition && job.SchemaState == model.StateWriteReorganization { <-wait <-wait } - } - do.DDL().SetHook(hook) + }) go func() { tk2 := testkit.NewTestKit(t, store) diff --git a/pkg/ddl/placement_policy.go b/pkg/ddl/placement_policy.go index 2277ab3199fe2..53983b06c7f59 100644 --- a/pkg/ddl/placement_policy.go +++ b/pkg/ddl/placement_policy.go @@ -24,11 +24,15 @@ import ( "github.com/pingcap/tidb/pkg/domain/infosync" "github.com/pingcap/tidb/pkg/infoschema" "github.com/pingcap/tidb/pkg/meta" + "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/model" + "github.com/pingcap/tidb/pkg/sessionctx" + "github.com/pingcap/tidb/pkg/sessionctx/variable" + "github.com/pingcap/tidb/pkg/sessiontxn" "github.com/pingcap/tidb/pkg/util/dbterror" ) -func onCreatePlacementPolicy(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func onCreatePlacementPolicy(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { policyInfo := &model.PolicyInfo{} var orReplace bool if err := job.DecodeArgs(policyInfo, &orReplace); err != nil { @@ -42,7 +46,7 @@ func onCreatePlacementPolicy(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64 return ver, errors.Trace(err) } - existPolicy, err := getPlacementPolicyByName(d, t, policyInfo.Name) + existPolicy, err := getPlacementPolicyByName(jobCtx.infoCache, t, policyInfo.Name) if err != nil { job.State = model.JobStateCancelled return ver, errors.Trace(err) @@ -62,7 +66,7 @@ func onCreatePlacementPolicy(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64 } job.SchemaID = replacePolicy.ID - ver, err = updateSchemaVersion(d, t, job) + ver, err = updateSchemaVersion(jobCtx, t, job) if err != nil { return ver, errors.Trace(err) } @@ -81,7 +85,7 @@ func onCreatePlacementPolicy(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64 } job.SchemaID = policyInfo.ID - ver, err = updateSchemaVersion(d, t, job) + ver, err = updateSchemaVersion(jobCtx, t, job) if err != nil { return ver, errors.Trace(err) } @@ -112,13 +116,13 @@ func getPolicyInfo(t *meta.Meta, policyID int64) (*model.PolicyInfo, error) { return policy, nil } -func getPlacementPolicyByName(d *ddlCtx, t *meta.Meta, policyName model.CIStr) (*model.PolicyInfo, error) { +func getPlacementPolicyByName(infoCache *infoschema.InfoCache, t *meta.Meta, policyName model.CIStr) (*model.PolicyInfo, error) { currVer, err := t.GetSchemaVersion() if err != nil { return nil, err } - is := d.infoCache.GetLatest() + is := infoCache.GetLatest() if is != nil && is.SchemaMetaVersion() == currVer { // Use cached policy. policy, ok := is.PolicyByName(policyName) @@ -177,13 +181,13 @@ func checkAllTablePlacementPoliciesExistAndCancelNonExistJob(t *meta.Meta, job * return nil } -func onDropPlacementPolicy(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func onDropPlacementPolicy(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { policyInfo, err := checkPlacementPolicyExistAndCancelNonExistJob(t, job, job.SchemaID) if err != nil { return ver, errors.Trace(err) } - err = checkPlacementPolicyNotInUse(d, t, policyInfo) + err = checkPlacementPolicyNotInUse(jobCtx.infoCache, t, policyInfo) if err != nil { if dbterror.ErrPlacementPolicyInUse.Equal(err) { job.State = model.JobStateCancelled @@ -199,7 +203,7 @@ func onDropPlacementPolicy(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, if err != nil { return ver, errors.Trace(err) } - ver, err = updateSchemaVersion(d, t, job) + ver, err = updateSchemaVersion(jobCtx, t, job) if err != nil { return ver, errors.Trace(err) } @@ -212,7 +216,7 @@ func onDropPlacementPolicy(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, if err != nil { return ver, errors.Trace(err) } - ver, err = updateSchemaVersion(d, t, job) + ver, err = updateSchemaVersion(jobCtx, t, job) if err != nil { return ver, errors.Trace(err) } @@ -223,7 +227,7 @@ func onDropPlacementPolicy(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, if err = t.DropPolicy(policyInfo.ID); err != nil { return ver, errors.Trace(err) } - ver, err = updateSchemaVersion(d, t, job) + ver, err = updateSchemaVersion(jobCtx, t, job) if err != nil { return ver, errors.Trace(err) } @@ -235,7 +239,7 @@ func onDropPlacementPolicy(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, return ver, errors.Trace(err) } -func onAlterPlacementPolicy(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func onAlterPlacementPolicy(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { alterPolicy := &model.PolicyInfo{} if err := job.DecodeArgs(alterPolicy); err != nil { job.State = model.JobStateCancelled @@ -260,7 +264,7 @@ func onAlterPlacementPolicy(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, return ver, errors.Trace(err) } - ver, err = updateSchemaVersion(d, t, job) + ver, err = updateSchemaVersion(jobCtx, t, job) if err != nil { return ver, errors.Trace(err) } @@ -340,12 +344,12 @@ func updateExistPlacementPolicy(t *meta.Meta, policy *model.PolicyInfo) error { return nil } -func checkPlacementPolicyNotInUse(d *ddlCtx, t *meta.Meta, policy *model.PolicyInfo) error { +func checkPlacementPolicyNotInUse(infoCache *infoschema.InfoCache, t *meta.Meta, policy *model.PolicyInfo) error { currVer, err := t.GetSchemaVersion() if err != nil { return err } - is := d.infoCache.GetLatest() + is := infoCache.GetLatest() if is != nil && is.SchemaMetaVersion() == currVer { err = CheckPlacementPolicyNotInUseFromInfoSchema(is, policy) } else { @@ -489,3 +493,174 @@ func GetRangePlacementPolicyName(ctx context.Context, rangeBundleID string) (str } return "", nil } + +func buildPolicyInfo(name model.CIStr, options []*ast.PlacementOption) (*model.PolicyInfo, error) { + policyInfo := &model.PolicyInfo{PlacementSettings: &model.PlacementSettings{}} + policyInfo.Name = name + for _, opt := range options { + err := SetDirectPlacementOpt(policyInfo.PlacementSettings, opt.Tp, opt.StrValue, opt.UintValue) + if err != nil { + return nil, err + } + } + return policyInfo, nil +} + +func removeTablePlacement(tbInfo *model.TableInfo) bool { + hasPlacementSettings := false + if tbInfo.PlacementPolicyRef != nil { + tbInfo.PlacementPolicyRef = nil + hasPlacementSettings = true + } + + if removePartitionPlacement(tbInfo.Partition) { + hasPlacementSettings = true + } + + return hasPlacementSettings +} + +func removePartitionPlacement(partInfo *model.PartitionInfo) bool { + if partInfo == nil { + return false + } + + hasPlacementSettings := false + for i := range partInfo.Definitions { + def := &partInfo.Definitions[i] + if def.PlacementPolicyRef != nil { + def.PlacementPolicyRef = nil + hasPlacementSettings = true + } + } + return hasPlacementSettings +} + +func handleDatabasePlacement(ctx sessionctx.Context, dbInfo *model.DBInfo) error { + if dbInfo.PlacementPolicyRef == nil { + return nil + } + + sessVars := ctx.GetSessionVars() + if sessVars.PlacementMode == variable.PlacementModeIgnore { + dbInfo.PlacementPolicyRef = nil + sessVars.StmtCtx.AppendNote( + errors.NewNoStackErrorf("Placement is ignored when TIDB_PLACEMENT_MODE is '%s'", variable.PlacementModeIgnore), + ) + return nil + } + + var err error + dbInfo.PlacementPolicyRef, err = checkAndNormalizePlacementPolicy(ctx, dbInfo.PlacementPolicyRef) + return err +} + +func handleTablePlacement(ctx sessionctx.Context, tbInfo *model.TableInfo) error { + sessVars := ctx.GetSessionVars() + if sessVars.PlacementMode == variable.PlacementModeIgnore && removeTablePlacement(tbInfo) { + sessVars.StmtCtx.AppendNote( + errors.NewNoStackErrorf("Placement is ignored when TIDB_PLACEMENT_MODE is '%s'", variable.PlacementModeIgnore), + ) + return nil + } + + var err error + tbInfo.PlacementPolicyRef, err = checkAndNormalizePlacementPolicy(ctx, tbInfo.PlacementPolicyRef) + if err != nil { + return err + } + + if tbInfo.Partition != nil { + for i := range tbInfo.Partition.Definitions { + partition := &tbInfo.Partition.Definitions[i] + partition.PlacementPolicyRef, err = checkAndNormalizePlacementPolicy(ctx, partition.PlacementPolicyRef) + if err != nil { + return err + } + } + } + return nil +} + +func handlePartitionPlacement(ctx sessionctx.Context, partInfo *model.PartitionInfo) error { + sessVars := ctx.GetSessionVars() + if sessVars.PlacementMode == variable.PlacementModeIgnore && removePartitionPlacement(partInfo) { + sessVars.StmtCtx.AppendNote( + errors.NewNoStackErrorf("Placement is ignored when TIDB_PLACEMENT_MODE is '%s'", variable.PlacementModeIgnore), + ) + return nil + } + + var err error + for i := range partInfo.Definitions { + partition := &partInfo.Definitions[i] + partition.PlacementPolicyRef, err = checkAndNormalizePlacementPolicy(ctx, partition.PlacementPolicyRef) + if err != nil { + return err + } + } + return nil +} + +func checkAndNormalizePlacementPolicy(ctx sessionctx.Context, placementPolicyRef *model.PolicyRefInfo) (*model.PolicyRefInfo, error) { + if placementPolicyRef == nil { + return nil, nil + } + + if placementPolicyRef.Name.L == defaultPlacementPolicyName { + // When policy name is 'default', it means to remove the placement settings + return nil, nil + } + + policy, ok := sessiontxn.GetTxnManager(ctx).GetTxnInfoSchema().PolicyByName(placementPolicyRef.Name) + if !ok { + return nil, errors.Trace(infoschema.ErrPlacementPolicyNotExists.GenWithStackByArgs(placementPolicyRef.Name)) + } + + placementPolicyRef.ID = policy.ID + return placementPolicyRef, nil +} + +func checkIgnorePlacementDDL(ctx sessionctx.Context) bool { + sessVars := ctx.GetSessionVars() + if sessVars.PlacementMode == variable.PlacementModeIgnore { + sessVars.StmtCtx.AppendNote( + errors.NewNoStackErrorf("Placement is ignored when TIDB_PLACEMENT_MODE is '%s'", variable.PlacementModeIgnore), + ) + return true + } + return false +} + +// SetDirectPlacementOpt tries to make the PlacementSettings assignments generic for Schema/Table/Partition +func SetDirectPlacementOpt(placementSettings *model.PlacementSettings, placementOptionType ast.PlacementOptionType, stringVal string, uintVal uint64) error { + switch placementOptionType { + case ast.PlacementOptionPrimaryRegion: + placementSettings.PrimaryRegion = stringVal + case ast.PlacementOptionRegions: + placementSettings.Regions = stringVal + case ast.PlacementOptionFollowerCount: + placementSettings.Followers = uintVal + case ast.PlacementOptionVoterCount: + placementSettings.Voters = uintVal + case ast.PlacementOptionLearnerCount: + placementSettings.Learners = uintVal + case ast.PlacementOptionSchedule: + placementSettings.Schedule = stringVal + case ast.PlacementOptionConstraints: + placementSettings.Constraints = stringVal + case ast.PlacementOptionLeaderConstraints: + placementSettings.LeaderConstraints = stringVal + case ast.PlacementOptionLearnerConstraints: + placementSettings.LearnerConstraints = stringVal + case ast.PlacementOptionFollowerConstraints: + placementSettings.FollowerConstraints = stringVal + case ast.PlacementOptionVoterConstraints: + placementSettings.VoterConstraints = stringVal + case ast.PlacementOptionSurvivalPreferences: + placementSettings.SurvivalPreferences = stringVal + default: + return errors.Trace(errors.New("unknown placement policy option")) + } + return nil +} diff --git a/pkg/ddl/placement_policy_ddl_test.go b/pkg/ddl/placement_policy_ddl_test.go index 603a41a502828..379e5c62f6c1c 100644 --- a/pkg/ddl/placement_policy_ddl_test.go +++ b/pkg/ddl/placement_policy_ddl_test.go @@ -24,6 +24,7 @@ import ( "github.com/pingcap/tidb/pkg/meta" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/sessionctx" + "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/util/dbterror" "github.com/stretchr/testify/require" @@ -91,21 +92,21 @@ func TestPlacementPolicyInUse(t *testing.T) { t1.PlacementPolicyRef = &model.PolicyRefInfo{ID: p1.ID, Name: p1.Name} testCreateTable(t, sctx, d, db1, t1) t1.State = model.StatePublic - db1.Tables = append(db1.Tables, t1) + db1.Deprecated.Tables = append(db1.Deprecated.Tables, t1) t2, err := testTableInfo(store, "t2", 1) require.NoError(t, err) t2.PlacementPolicyRef = &model.PolicyRefInfo{ID: p1.ID, Name: p1.Name} testCreateTable(t, sctx, d, db2, t2) t2.State = model.StatePublic - db2.Tables = append(db2.Tables, t2) + db2.Deprecated.Tables = append(db2.Deprecated.Tables, t2) t3, err := testTableInfo(store, "t3", 1) require.NoError(t, err) t3.PlacementPolicyRef = &model.PolicyRefInfo{ID: p2.ID, Name: p2.Name} testCreateTable(t, sctx, d, db1, t3) t3.State = model.StatePublic - db1.Tables = append(db1.Tables, t3) + db1.Deprecated.Tables = append(db1.Deprecated.Tables, t3) dbP, err := testSchemaInfo(store, "db_p") require.NoError(t, err) @@ -117,9 +118,10 @@ func TestPlacementPolicyInUse(t *testing.T) { t4.Partition.Definitions[0].PlacementPolicyRef = &model.PolicyRefInfo{ID: p5.ID, Name: p5.Name} testCreateTable(t, sctx, d, db1, t4) t4.State = model.StatePublic - db1.Tables = append(db1.Tables, t4) + db1.Deprecated.Tables = append(db1.Deprecated.Tables, t4) - builder, err := infoschema.NewBuilder(dom, nil, infoschema.NewData()).InitWithDBInfos( + builder := infoschema.NewBuilder(dom, nil, infoschema.NewData(), variable.SchemaCacheSize.Load() > 0) + err = builder.InitWithDBInfos( []*model.DBInfo{db1, db2, dbP}, []*model.PolicyInfo{p1, p2, p3, p4, p5}, nil, diff --git a/pkg/ddl/placement_policy_test.go b/pkg/ddl/placement_policy_test.go index ba9aac2ca6e5b..ddbb7e4a6543d 100644 --- a/pkg/ddl/placement_policy_test.go +++ b/pkg/ddl/placement_policy_test.go @@ -26,7 +26,6 @@ import ( "github.com/pingcap/tidb/pkg/ddl" "github.com/pingcap/tidb/pkg/ddl/placement" "github.com/pingcap/tidb/pkg/ddl/util" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/domain/infosync" mysql "github.com/pingcap/tidb/pkg/errno" @@ -180,15 +179,14 @@ func TestPlacementPolicy(t *testing.T) { } func testPlacementPolicy(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) // clearAllBundles(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop placement policy if exists x") - hook := &callback.TestDDLCallback{Do: dom} var policyID int64 - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if policyID != 0 { return } @@ -197,9 +195,7 @@ func testPlacementPolicy(t *testing.T) { policyID = job.SchemaID return } - } - hook.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - dom.DDL().SetHook(hook) + }) tk.MustExec("create placement policy x " + "LEARNERS=1 " + diff --git a/pkg/ddl/primary_key_handle_test.go b/pkg/ddl/primary_key_handle_test.go index 4db5759915e39..6265a8e7154a0 100644 --- a/pkg/ddl/primary_key_handle_test.go +++ b/pkg/ddl/primary_key_handle_test.go @@ -38,7 +38,7 @@ import ( func getTableMaxHandle(t *testing.T, d ddl.DDL, tbl table.Table, store kv.Storage) (kv.Handle, bool) { ver, err := store.CurrentVersion(kv.GlobalTxnScope) require.NoError(t, err) - maxHandle, emptyTable, err := d.GetTableMaxHandle(ddl.NewJobContext(), ver.Ver, tbl.(table.PhysicalTable)) + maxHandle, emptyTable, err := ddl.GetTableMaxHandle(ddl.NewReorgContext(), store, ver.Ver, tbl.(table.PhysicalTable)) require.NoError(t, err) return maxHandle, emptyTable } diff --git a/pkg/ddl/reorg.go b/pkg/ddl/reorg.go index c5295281ee686..8d2df7ca83e4a 100644 --- a/pkg/ddl/reorg.go +++ b/pkg/ddl/reorg.go @@ -65,7 +65,7 @@ type reorgCtx struct { // If the reorganization job is done, we will use this channel to notify outer. // TODO: Now we use goroutine to simulate reorganization jobs, later we may // use a persistent job list. - doneCh chan error + doneCh chan reorgFnResult // rowCount is used to simulate a job's row count. rowCount int64 jobState model.JobState @@ -80,6 +80,13 @@ type reorgCtx struct { references atomicutil.Int32 } +// reorgFnResult records the DDL owner TS before executing reorg function, in order to help +// receiver determine if the result is from reorg function of previous DDL owner in this instance. +type reorgFnResult struct { + ownerTS int64 + err error +} + func newReorgExprCtx() exprctx.ExprContext { evalCtx := contextstatic.NewStaticEvalContext( contextstatic.WithSQLMode(mysql.ModeNone), @@ -133,9 +140,8 @@ func newReorgSessCtx(store kv.Storage) sessionctx.Context { return c } -const defaultWaitReorgTimeout = 10 * time.Second - // ReorgWaitTimeout is the timeout that wait ddl in write reorganization stage. +// make it a var for testing. var ReorgWaitTimeout = 5 * time.Second func (rc *reorgCtx) notifyJobState(state model.JobState) { @@ -219,11 +225,10 @@ func (rc *reorgCtx) getRowCount() int64 { func (w *worker) runReorgJob( reorgInfo *reorgInfo, tblInfo *model.TableInfo, - lease time.Duration, reorgFn func() error, ) error { job := reorgInfo.Job - d := reorgInfo.d + d := reorgInfo.jobCtx.oldDDLCtx // This is for tests compatible, because most of the early tests try to build the reorg job manually // without reorg meta info, which will cause nil pointer in here. if job.ReorgMeta == nil { @@ -251,27 +256,29 @@ func (w *worker) runReorgJob( return dbterror.ErrCancelledDDLJob } + beOwnerTS := w.ddlCtx.reorgCtx.getOwnerTS() rc = w.newReorgCtx(reorgInfo.Job.ID, reorgInfo.Job.GetRowCount()) w.wg.Add(1) go func() { defer w.wg.Done() - rc.doneCh <- reorgFn() + err := reorgFn() + rc.doneCh <- reorgFnResult{ownerTS: beOwnerTS, err: err} }() } - waitTimeout := defaultWaitReorgTimeout - // if lease is 0, we are using a local storage, - // and we can wait the reorganization to be done here. - // if lease > 0, we don't need to wait here because - // we should update some job's progress context and try checking again, - // so we use a very little timeout here. - if lease > 0 { - waitTimeout = ReorgWaitTimeout - } - + waitTimeout := ReorgWaitTimeout // wait reorganization job done or timeout select { - case err := <-rc.doneCh: + case res := <-rc.doneCh: + err := res.err + curTS := w.ddlCtx.reorgCtx.getOwnerTS() + if res.ownerTS != curTS { + d.removeReorgCtx(job.ID) + logutil.DDLLogger().Warn("owner ts mismatch, return timeout error and retry", + zap.Int64("prevTS", res.ownerTS), + zap.Int64("curTS", curTS)) + return dbterror.ErrWaitReorgTimeout + } // Since job is cancelled,we don't care about its partial counts. if rc.isReorgCanceled() || terror.ErrorEqual(err, dbterror.ErrCancelledDDLJob) { d.removeReorgCtx(job.ID) @@ -482,7 +489,7 @@ type reorgInfo struct { StartKey kv.Key EndKey kv.Key - d *ddlCtx + jobCtx *jobContext first bool mergingTmpIdx bool // PhysicalTableID is used for partitioned table. @@ -495,8 +502,8 @@ type reorgInfo struct { currElement *meta.Element } -func (r *reorgInfo) NewJobContext() *JobContext { - return r.d.jobContext(r.Job.ID, r.Job.ReorgMeta) +func (r *reorgInfo) NewJobContext() *ReorgContext { + return r.jobCtx.oldDDLCtx.jobContext(r.Job.ID, r.Job.ReorgMeta) } func (r *reorgInfo) String() string { @@ -514,7 +521,7 @@ func (r *reorgInfo) String() string { } func constructDescTableScanPB(physicalTableID int64, tblInfo *model.TableInfo, handleCols []*model.ColumnInfo) *tipb.Executor { - tblScan := tables.BuildTableScanFromInfos(tblInfo, handleCols) + tblScan := tables.BuildTableScanFromInfos(tblInfo, handleCols, false) tblScan.TableId = physicalTableID tblScan.Desc = true return &tipb.Executor{Tp: tipb.ExecType_TypeTableScan, TblScan: tblScan} @@ -552,9 +559,9 @@ func getColumnsTypes(columns []*model.ColumnInfo) []*types.FieldType { } // buildDescTableScan builds a desc table scan upon tblInfo. -func (dc *ddlCtx) buildDescTableScan(ctx *JobContext, startTS uint64, tbl table.PhysicalTable, +func buildDescTableScan(ctx *ReorgContext, store kv.Storage, startTS uint64, tbl table.PhysicalTable, handleCols []*model.ColumnInfo, limit uint64) (distsql.SelectResult, error) { - distSQLCtx := newDefaultReorgDistSQLCtx(dc.store.GetClient()) + distSQLCtx := newDefaultReorgDistSQLCtx(store.GetClient()) dagPB, err := buildDescTableScanDAG(distSQLCtx, tbl, handleCols, limit) if err != nil { return nil, errors.Trace(err) @@ -594,7 +601,7 @@ func (dc *ddlCtx) buildDescTableScan(ctx *JobContext, startTS uint64, tbl table. } // GetTableMaxHandle gets the max handle of a PhysicalTable. -func (dc *ddlCtx) GetTableMaxHandle(ctx *JobContext, startTS uint64, tbl table.PhysicalTable) (maxHandle kv.Handle, emptyTable bool, err error) { +func GetTableMaxHandle(ctx *ReorgContext, store kv.Storage, startTS uint64, tbl table.PhysicalTable) (maxHandle kv.Handle, emptyTable bool, err error) { var handleCols []*model.ColumnInfo var pkIdx *model.IndexInfo tblInfo := tbl.Meta() @@ -617,7 +624,7 @@ func (dc *ddlCtx) GetTableMaxHandle(ctx *JobContext, startTS uint64, tbl table.P } // build a desc scan of tblInfo, which limit is 1, we can use it to retrieve the last handle of the table. - result, err := dc.buildDescTableScan(ctx, startTS, tbl, handleCols, 1) + result, err := buildDescTableScan(ctx, store, startTS, tbl, handleCols, 1) if err != nil { return nil, false, errors.Trace(err) } @@ -659,9 +666,9 @@ func buildCommonHandleFromChunkRow(loc *time.Location, tblInfo *model.TableInfo, } // getTableRange gets the start and end handle of a table (or partition). -func getTableRange(ctx *JobContext, d *ddlCtx, tbl table.PhysicalTable, snapshotVer uint64, priority int) (startHandleKey, endHandleKey kv.Key, err error) { +func getTableRange(ctx *ReorgContext, store kv.Storage, tbl table.PhysicalTable, snapshotVer uint64, priority int) (startHandleKey, endHandleKey kv.Key, err error) { // Get the start handle of this partition. - err = iterateSnapshotKeys(ctx, d.store, priority, tbl.RecordPrefix(), snapshotVer, nil, nil, + err = iterateSnapshotKeys(ctx, store, priority, tbl.RecordPrefix(), snapshotVer, nil, nil, func(_ kv.Handle, rowKey kv.Key, _ []byte) (bool, error) { startHandleKey = rowKey return false, nil @@ -669,7 +676,7 @@ func getTableRange(ctx *JobContext, d *ddlCtx, tbl table.PhysicalTable, snapshot if err != nil { return startHandleKey, endHandleKey, errors.Trace(err) } - maxHandle, isEmptyTable, err := d.GetTableMaxHandle(ctx, snapshotVer, tbl) + maxHandle, isEmptyTable, err := GetTableMaxHandle(ctx, store, snapshotVer, tbl) if err != nil { return startHandleKey, nil, errors.Trace(err) } @@ -702,7 +709,7 @@ func getValidCurrentVersion(store kv.Storage) (ver kv.Version, err error) { return ver, nil } -func getReorgInfo(ctx *JobContext, d *ddlCtx, rh *reorgHandler, job *model.Job, dbInfo *model.DBInfo, +func getReorgInfo(ctx *ReorgContext, jobCtx *jobContext, rh *reorgHandler, job *model.Job, dbInfo *model.DBInfo, tbl table.Table, elements []*meta.Element, mergingTmpIdx bool) (*reorgInfo, error) { var ( element *meta.Element @@ -726,10 +733,8 @@ func getReorgInfo(ctx *JobContext, d *ddlCtx, rh *reorgHandler, job *model.Job, }) info.first = true - if d.lease > 0 { // Only delay when it's not in test. - delayForAsyncCommit() - } - ver, err := getValidCurrentVersion(d.store) + delayForAsyncCommit() + ver, err := getValidCurrentVersion(jobCtx.store) if err != nil { return nil, errors.Trace(err) } @@ -748,7 +753,7 @@ func getReorgInfo(ctx *JobContext, d *ddlCtx, rh *reorgHandler, job *model.Job, start = tablecodec.EncodeIndexSeekKey(pid, firstElemTempID, nil) end = tablecodec.EncodeIndexSeekKey(pid, lastElemTempID, []byte{255}) } else { - start, end, err = getTableRange(ctx, d, tb, ver.Ver, job.Priority) + start, end, err = getTableRange(ctx, jobCtx.store, tb, ver.Ver, job.Priority) if err != nil { return nil, errors.Trace(err) } @@ -797,7 +802,7 @@ func getReorgInfo(ctx *JobContext, d *ddlCtx, rh *reorgHandler, job *model.Job, } } info.Job = job - info.d = d + info.jobCtx = jobCtx info.StartKey = start info.EndKey = end info.PhysicalTableID = pid @@ -809,7 +814,7 @@ func getReorgInfo(ctx *JobContext, d *ddlCtx, rh *reorgHandler, job *model.Job, return &info, nil } -func getReorgInfoFromPartitions(ctx *JobContext, d *ddlCtx, rh *reorgHandler, job *model.Job, dbInfo *model.DBInfo, tbl table.PartitionedTable, partitionIDs []int64, elements []*meta.Element) (*reorgInfo, error) { +func getReorgInfoFromPartitions(ctx *ReorgContext, jobCtx *jobContext, rh *reorgHandler, job *model.Job, dbInfo *model.DBInfo, tbl table.PartitionedTable, partitionIDs []int64, elements []*meta.Element) (*reorgInfo, error) { var ( element *meta.Element start kv.Key @@ -819,17 +824,15 @@ func getReorgInfoFromPartitions(ctx *JobContext, d *ddlCtx, rh *reorgHandler, jo ) if job.SnapshotVer == 0 { info.first = true - if d.lease > 0 { // Only delay when it's not in test. - delayForAsyncCommit() - } - ver, err := getValidCurrentVersion(d.store) + delayForAsyncCommit() + ver, err := getValidCurrentVersion(jobCtx.store) if err != nil { return nil, errors.Trace(err) } pid = partitionIDs[0] physTbl := tbl.GetPartition(pid) - start, end, err = getTableRange(ctx, d, physTbl, ver.Ver, job.Priority) + start, end, err = getTableRange(ctx, jobCtx.store, physTbl, ver.Ver, job.Priority) if err != nil { return nil, errors.Trace(err) } @@ -860,7 +863,7 @@ func getReorgInfoFromPartitions(ctx *JobContext, d *ddlCtx, rh *reorgHandler, jo } } info.Job = job - info.d = d + info.jobCtx = jobCtx info.StartKey = start info.EndKey = end info.PhysicalTableID = pid diff --git a/pkg/ddl/reorg_partition_test.go b/pkg/ddl/reorg_partition_test.go index a39280c4c1727..1425642551e7d 100644 --- a/pkg/ddl/reorg_partition_test.go +++ b/pkg/ddl/reorg_partition_test.go @@ -23,7 +23,6 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/ddl/logutil" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/errno" "github.com/pingcap/tidb/pkg/parser/model" @@ -141,10 +140,6 @@ func getAllDataForPhysicalTable(t *testing.T, ctx sessionctx.Context, physTable return all } -type TestReorgDDLCallback struct { - *callback.TestDDLCallback -} - func TestReorgPartitionConcurrent(t *testing.T) { store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) @@ -157,13 +152,8 @@ func TestReorgPartitionConcurrent(t *testing.T) { ` partition p1 values less than (20),` + ` partition pMax values less than (MAXVALUE))`) tk.MustExec(`insert into t values (1,"1",1), (10,"10",10),(23,"23",32),(34,"34",43),(45,"45",54),(56,"56",65)`) - dom := domain.GetDomain(tk.Session()) - originHook := dom.DDL().GetHook() - defer dom.DDL().SetHook(originHook) syncOnChanged := make(chan bool) defer close(syncOnChanged) - hook := &TestReorgDDLCallback{TestDDLCallback: &callback.TestDDLCallback{Do: dom}} - dom.DDL().SetHook(hook) testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/afterReorganizePartition", func() { <-syncOnChanged // We want to wait here @@ -174,7 +164,7 @@ func TestReorgPartitionConcurrent(t *testing.T) { defer close(wait) currState := model.StateNone - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.Type == model.ActionReorganizePartition && (job.SchemaState == model.StateDeleteOnly || job.SchemaState == model.StateWriteOnly || @@ -185,7 +175,7 @@ func TestReorgPartitionConcurrent(t *testing.T) { <-wait <-wait } - } + }) alterErr := make(chan error, 1) go backgroundExec(store, schemaName, "alter table t reorganize partition p1 into (partition p1a values less than (15), partition p1b values less than (20))", alterErr) @@ -341,24 +331,19 @@ func TestReorgPartitionFailConcurrent(t *testing.T) { ` partition p1 values less than (20),` + ` partition pMax values less than (MAXVALUE))`) tk.MustExec(`insert into t values (1,"1",1), (12,"12",21),(23,"23",32),(34,"34",43),(45,"45",54),(56,"56",65)`) - dom := domain.GetDomain(tk.Session()) - originHook := dom.DDL().GetHook() - defer dom.DDL().SetHook(originHook) - hook := &callback.TestDDLCallback{Do: dom} - dom.DDL().SetHook(hook) wait := make(chan bool) defer close(wait) // Test insert of duplicate key during copy phase injected := false - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.Type == model.ActionReorganizePartition && job.SchemaState == model.StateWriteReorganization && !injected { injected = true <-wait <-wait } - } + }) alterErr := make(chan error, 1) go backgroundExec(store, schemaName, "alter table t reorganize partition p1 into (partition p1a values less than (15), partition p1b values less than (20))", alterErr) wait <- true @@ -389,7 +374,7 @@ func TestReorgPartitionFailConcurrent(t *testing.T) { // Test reorg of duplicate key prevState := model.StateNone - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.Type == model.ActionReorganizePartition && job.SchemaState == model.StateWriteReorganization && job.SnapshotVer == 0 && @@ -405,7 +390,7 @@ func TestReorgPartitionFailConcurrent(t *testing.T) { <-wait <-wait } - } + }) go backgroundExec(store, schemaName, "alter table t reorganize partition p1a,p1b into (partition p1a values less than (14), partition p1b values less than (17), partition p1c values less than (20))", alterErr) wait <- true infoSchema := sessiontxn.GetTxnManager(tk.Session()).GetTxnInfoSchema() @@ -483,23 +468,17 @@ func TestReorgPartitionFailInject(t *testing.T) { ` partition pMax values less than (MAXVALUE))`) tk.MustExec(`insert into t values (1,"1",1), (12,"12",21),(23,"23",32),(34,"34",43),(45,"45",54),(56,"56",65)`) - dom := domain.GetDomain(tk.Session()) - originHook := dom.DDL().GetHook() - defer dom.DDL().SetHook(originHook) - hook := &callback.TestDDLCallback{Do: dom} - dom.DDL().SetHook(hook) - wait := make(chan bool) defer close(wait) injected := false - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.Type == model.ActionReorganizePartition && job.SchemaState == model.StateWriteReorganization && !injected { injected = true <-wait <-wait } - } + }) alterErr := make(chan error, 1) go backgroundExec(store, schemaName, "alter table t reorganize partition p1 into (partition p1a values less than (15), partition p1b values less than (20))", alterErr) wait <- true diff --git a/pkg/ddl/repair_table_test.go b/pkg/ddl/repair_table_test.go index 0246b3bb6e5ad..bffd508172aca 100644 --- a/pkg/ddl/repair_table_test.go +++ b/pkg/ddl/repair_table_test.go @@ -20,13 +20,13 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/failpoint" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/infoschema" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/parser/terror" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/testkit/external" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/util/domainutil" "github.com/stretchr/testify/require" ) @@ -39,7 +39,7 @@ func TestRepairTable(t *testing.T) { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/infoschema/repairFetchCreateTable")) }() - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, repairTableLease) + store := testkit.CreateMockStoreWithSchemaLease(t, repairTableLease) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -101,9 +101,8 @@ func TestRepairTable(t *testing.T) { // Repaired tableInfo has been filtered by `domain.InfoSchema()`, so get it in repairInfo. originTableInfo, _ := domainutil.RepairInfo.GetRepairedTableInfoByTableName("test", "origin") - hook := &callback.TestDDLCallback{Do: dom} var repairErr error - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.Type != model.ActionRepairTable { return } @@ -123,10 +122,7 @@ func TestRepairTable(t *testing.T) { if repairErr != nil && terror.ErrorEqual(repairErr, infoschema.ErrTableNotExists) { repairErr = nil } - } - originalHook := dom.DDL().GetHook() - defer dom.DDL().SetHook(originalHook) - dom.DDL().SetHook(hook) + }) // Exec the repair statement to override the tableInfo. tk.MustExec("admin repair table origin CREATE TABLE origin (a int primary key nonclustered auto_increment, b varchar(5), c int);") diff --git a/pkg/ddl/resource_group.go b/pkg/ddl/resource_group.go index 39265a46dee6a..4a4d6914e0ded 100644 --- a/pkg/ddl/resource_group.go +++ b/pkg/ddl/resource_group.go @@ -16,6 +16,8 @@ package ddl import ( "context" + "math" + "slices" "strings" "time" @@ -26,8 +28,10 @@ import ( rg "github.com/pingcap/tidb/pkg/domain/resourcegroup" "github.com/pingcap/tidb/pkg/infoschema" "github.com/pingcap/tidb/pkg/meta" + "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/util/dbterror" + kvutil "github.com/tikv/client-go/v2/util" "go.uber.org/zap" ) @@ -38,7 +42,7 @@ const ( alreadyExists = "already exists" ) -func onCreateResourceGroup(ctx context.Context, d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func onCreateResourceGroup(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { groupInfo := &model.ResourceGroupInfo{} if err := job.DecodeArgs(groupInfo); err != nil { job.State = model.JobStateCancelled @@ -63,7 +67,7 @@ func onCreateResourceGroup(ctx context.Context, d *ddlCtx, t *meta.Meta, job *mo return ver, errors.Trace(err) } - ctx, cancel := context.WithTimeout(ctx, defaultInfosyncTimeout) + ctx, cancel := context.WithTimeout(jobCtx.ctx, defaultInfosyncTimeout) defer cancel() err = infosync.AddResourceGroup(ctx, protoGroup) if err != nil { @@ -75,7 +79,7 @@ func onCreateResourceGroup(ctx context.Context, d *ddlCtx, t *meta.Meta, job *mo } } job.SchemaID = groupInfo.ID - ver, err = updateSchemaVersion(d, t, job) + ver, err = updateSchemaVersion(jobCtx, t, job) if err != nil { return ver, errors.Trace(err) } @@ -87,7 +91,7 @@ func onCreateResourceGroup(ctx context.Context, d *ddlCtx, t *meta.Meta, job *mo } } -func onAlterResourceGroup(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func onAlterResourceGroup(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { alterGroupInfo := &model.ResourceGroupInfo{} if err := job.DecodeArgs(alterGroupInfo); err != nil { job.State = model.JobStateCancelled @@ -122,7 +126,7 @@ func onAlterResourceGroup(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ return ver, errors.Trace(err) } - ver, err = updateSchemaVersion(d, t, job) + ver, err = updateSchemaVersion(jobCtx, t, job) if err != nil { return ver, errors.Trace(err) } @@ -142,7 +146,7 @@ func checkResourceGroupExist(t *meta.Meta, job *model.Job, groupID int64) (*mode return nil, err } -func onDropResourceGroup(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func onDropResourceGroup(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { groupInfo, err := checkResourceGroupExist(t, job, job.SchemaID) if err != nil { return ver, errors.Trace(err) @@ -161,7 +165,7 @@ func onDropResourceGroup(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ if err != nil { return ver, errors.Trace(err) } - ver, err = updateSchemaVersion(d, t, job) + ver, err = updateSchemaVersion(jobCtx, t, job) if err != nil { return ver, errors.Trace(err) } @@ -172,3 +176,156 @@ func onDropResourceGroup(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ } return ver, errors.Trace(err) } + +func buildResourceGroup(oldGroup *model.ResourceGroupInfo, options []*ast.ResourceGroupOption) (*model.ResourceGroupInfo, error) { + groupInfo := &model.ResourceGroupInfo{Name: oldGroup.Name, ID: oldGroup.ID, ResourceGroupSettings: model.NewResourceGroupSettings()} + if oldGroup.ResourceGroupSettings != nil { + *groupInfo.ResourceGroupSettings = *oldGroup.ResourceGroupSettings + } + for _, opt := range options { + err := SetDirectResourceGroupSettings(groupInfo, opt) + if err != nil { + return nil, err + } + } + groupInfo.ResourceGroupSettings.Adjust() + return groupInfo, nil +} + +// SetDirectResourceGroupSettings tries to set the ResourceGroupSettings. +func SetDirectResourceGroupSettings(groupInfo *model.ResourceGroupInfo, opt *ast.ResourceGroupOption) error { + resourceGroupSettings := groupInfo.ResourceGroupSettings + switch opt.Tp { + case ast.ResourceRURate: + return SetDirectResourceGroupRUSecondOption(resourceGroupSettings, opt.UintValue, opt.BoolValue) + case ast.ResourcePriority: + resourceGroupSettings.Priority = opt.UintValue + case ast.ResourceUnitCPU: + resourceGroupSettings.CPULimiter = opt.StrValue + case ast.ResourceUnitIOReadBandwidth: + resourceGroupSettings.IOReadBandwidth = opt.StrValue + case ast.ResourceUnitIOWriteBandwidth: + resourceGroupSettings.IOWriteBandwidth = opt.StrValue + case ast.ResourceBurstableOpiton: + // Some about BurstLimit(b): + // - If b == 0, that means the limiter is unlimited capacity. default use in resource controller (burst with a rate within a unlimited capacity). + // - If b < 0, that means the limiter is unlimited capacity and fillrate(r) is ignored, can be seen as r == Inf (burst with a inf rate within a unlimited capacity). + // - If b > 0, that means the limiter is limited capacity. (current not used). + limit := int64(0) + if opt.BoolValue { + limit = -1 + } + resourceGroupSettings.BurstLimit = limit + case ast.ResourceGroupRunaway: + if len(opt.RunawayOptionList) == 0 { + resourceGroupSettings.Runaway = nil + } + for _, opt := range opt.RunawayOptionList { + if err := SetDirectResourceGroupRunawayOption(resourceGroupSettings, opt); err != nil { + return err + } + } + case ast.ResourceGroupBackground: + if groupInfo.Name.L != rg.DefaultResourceGroupName { + // FIXME: this is a temporary restriction, so we don't add a error-code for it. + return errors.New("unsupported operation. Currently, only the default resource group support change background settings") + } + if len(opt.BackgroundOptions) == 0 { + resourceGroupSettings.Background = nil + } + for _, opt := range opt.BackgroundOptions { + if err := SetDirectResourceGroupBackgroundOption(resourceGroupSettings, opt); err != nil { + return err + } + } + default: + return errors.Trace(errors.New("unknown resource unit type")) + } + return nil +} + +// SetDirectResourceGroupRUSecondOption tries to set ru second part of the ResourceGroupSettings. +func SetDirectResourceGroupRUSecondOption(resourceGroupSettings *model.ResourceGroupSettings, intVal uint64, unlimited bool) error { + if unlimited { + resourceGroupSettings.RURate = uint64(math.MaxInt32) + resourceGroupSettings.BurstLimit = -1 + } else { + resourceGroupSettings.RURate = intVal + } + return nil +} + +// SetDirectResourceGroupRunawayOption tries to set runaway part of the ResourceGroupSettings. +func SetDirectResourceGroupRunawayOption(resourceGroupSettings *model.ResourceGroupSettings, opt *ast.ResourceGroupRunawayOption) error { + if resourceGroupSettings.Runaway == nil { + resourceGroupSettings.Runaway = &model.ResourceGroupRunawaySettings{} + } + settings := resourceGroupSettings.Runaway + switch opt.Tp { + case ast.RunawayRule: + // because execute time won't be too long, we use `time` pkg which does not support to parse unit 'd'. + dur, err := time.ParseDuration(opt.RuleOption.ExecElapsed) + if err != nil { + return err + } + settings.ExecElapsedTimeMs = uint64(dur.Milliseconds()) + case ast.RunawayAction: + settings.Action = opt.ActionOption.Type + case ast.RunawayWatch: + settings.WatchType = opt.WatchOption.Type + if dur := opt.WatchOption.Duration; len(dur) > 0 { + dur, err := time.ParseDuration(dur) + if err != nil { + return err + } + settings.WatchDurationMs = dur.Milliseconds() + } else { + settings.WatchDurationMs = 0 + } + default: + return errors.Trace(errors.New("unknown runaway option type")) + } + return nil +} + +// SetDirectResourceGroupBackgroundOption set background configs of the ResourceGroupSettings. +func SetDirectResourceGroupBackgroundOption(resourceGroupSettings *model.ResourceGroupSettings, opt *ast.ResourceGroupBackgroundOption) error { + if resourceGroupSettings.Background == nil { + resourceGroupSettings.Background = &model.ResourceGroupBackgroundSettings{} + } + switch opt.Type { + case ast.BackgroundOptionTaskNames: + jobTypes, err := parseBackgroundJobTypes(opt.StrValue) + if err != nil { + return err + } + resourceGroupSettings.Background.JobTypes = jobTypes + default: + return errors.Trace(errors.New("unknown background option type")) + } + return nil +} + +func parseBackgroundJobTypes(t string) ([]string, error) { + if len(t) == 0 { + return []string{}, nil + } + + segs := strings.Split(t, ",") + res := make([]string, 0, len(segs)) + for _, s := range segs { + ty := strings.ToLower(strings.TrimSpace(s)) + if len(ty) > 0 { + if !slices.Contains(kvutil.ExplicitTypeList, ty) { + return nil, infoschema.ErrResourceGroupInvalidBackgroundTaskName.GenWithStackByArgs(ty) + } + res = append(res, ty) + } + } + return res, nil +} + +func checkResourceGroupValidation(groupInfo *model.ResourceGroupInfo) error { + _, err := resourcegroup.NewGroupFromOptions(groupInfo.Name.L, groupInfo.ResourceGroupSettings) + return err +} diff --git a/pkg/ddl/restart_test.go b/pkg/ddl/restart_test.go index 19aee4f68b5d6..f0cb18bbb4425 100644 --- a/pkg/ddl/restart_test.go +++ b/pkg/ddl/restart_test.go @@ -46,7 +46,7 @@ func restartWorkers(t *testing.T, store kv.Storage, d *domain.Domain) { newDDL, newDDLExecutor := ddl.NewDDL(context.Background(), ddl.WithStore(d.Store()), ddl.WithInfoCache(d.InfoCache()), - ddl.WithLease(d.DDL().GetLease()), + ddl.WithLease(d.GetSchemaLease()), ddl.WithSchemaLoader(d), ) d.SetDDL(newDDL, newDDLExecutor) @@ -92,7 +92,7 @@ func testRunInterruptedJob(t *testing.T, store kv.Storage, d *domain.Domain, job done := make(chan error, 1) go runInterruptedJob(t, store, d.DDLExecutor(), job, done) - ticker := time.NewTicker(d.DDL().GetLease()) + ticker := time.NewTicker(d.GetSchemaLease()) defer ticker.Stop() for { select { @@ -140,7 +140,7 @@ func TestStat(t *testing.T) { done := make(chan error, 1) go runInterruptedJob(t, store, dom.DDLExecutor(), job, done) - ticker := time.NewTicker(dom.DDL().GetLease() * 1) + ticker := time.NewTicker(dom.GetSchemaLease() * 1) defer ticker.Stop() ver := getDDLSchemaVer(t, dom.DDL()) LOOP: diff --git a/pkg/ddl/rollingback.go b/pkg/ddl/rollingback.go index b72b2ee76d392..0676e708a4917 100644 --- a/pkg/ddl/rollingback.go +++ b/pkg/ddl/rollingback.go @@ -45,7 +45,7 @@ func UpdateColsNull2NotNull(tblInfo *model.TableInfo, indexInfo *model.IndexInfo } func convertAddIdxJob2RollbackJob( - d *ddlCtx, + jobCtx *jobContext, t *meta.Meta, job *model.Job, tblInfo *model.TableInfo, @@ -84,7 +84,7 @@ func convertAddIdxJob2RollbackJob( // the second and the third args will be used in onDropIndex. job.Args = []any{idxNames, ifExists, getPartitionIDs(tblInfo)} job.SchemaState = model.StateDeleteOnly - ver, err1 := updateVersionAndTableInfo(d, t, job, tblInfo, originalState != model.StateDeleteOnly) + ver, err1 := updateVersionAndTableInfo(jobCtx, t, job, tblInfo, originalState != model.StateDeleteOnly) if err1 != nil { return ver, errors.Trace(err1) } @@ -99,7 +99,7 @@ func convertAddIdxJob2RollbackJob( // convertNotReorgAddIdxJob2RollbackJob converts the add index job that are not started workers to rollingbackJob, // to rollback add index operations. job.SnapshotVer == 0 indicates the workers are not started. -func convertNotReorgAddIdxJob2RollbackJob(d *ddlCtx, t *meta.Meta, job *model.Job, occuredErr error) (ver int64, err error) { +func convertNotReorgAddIdxJob2RollbackJob(jobCtx *jobContext, t *meta.Meta, job *model.Job, occuredErr error) (ver int64, err error) { defer func() { if ingest.LitBackCtxMgr != nil { ingest.LitBackCtxMgr.Unregister(job.ID) @@ -136,20 +136,20 @@ func convertNotReorgAddIdxJob2RollbackJob(d *ddlCtx, t *meta.Meta, job *model.Jo job.State = model.JobStateCancelled return ver, dbterror.ErrCancelledDDLJob } - return convertAddIdxJob2RollbackJob(d, t, job, tblInfo, indexesInfo, occuredErr) + return convertAddIdxJob2RollbackJob(jobCtx, t, job, tblInfo, indexesInfo, occuredErr) } // rollingbackModifyColumn change the modifying-column job into rolling back state. // Since modifying column job has two types: normal-type and reorg-type, we should handle it respectively. // normal-type has only two states: None -> Public // reorg-type has five states: None -> Delete-only -> Write-only -> Write-org -> Public -func rollingbackModifyColumn(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) { +func rollingbackModifyColumn(w *worker, jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, err error) { if needNotifyAndStopReorgWorker(job) { // column type change workers are started. we have to ask them to exit. w.jobLogger(job).Info("run the cancelling DDL job", zap.String("job", job.String())) - d.notifyReorgWorkerJobStateChange(job) + jobCtx.oldDDLCtx.notifyReorgWorkerJobStateChange(job) // Give the this kind of ddl one more round to run, the dbterror.ErrCancelledDDLJob should be fetched from the bottom up. - return w.onModifyColumn(d, t, job) + return w.onModifyColumn(jobCtx, t, job) } _, tblInfo, oldCol, jp, err := getModifyColumnInfo(t, job) if err != nil { @@ -183,7 +183,7 @@ func rollingbackModifyColumn(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job) return ver, dbterror.ErrCancelledDDLJob } -func rollingbackAddColumn(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) { +func rollingbackAddColumn(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, err error) { tblInfo, columnInfo, col, _, _, err := checkAddColumn(t, job) if err != nil { return ver, errors.Trace(err) @@ -198,7 +198,7 @@ func rollingbackAddColumn(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, e job.SchemaState = model.StateDeleteOnly job.Args = []any{col.Name} - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, originalState != columnInfo.State) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, originalState != columnInfo.State) if err != nil { return ver, errors.Trace(err) } @@ -207,8 +207,8 @@ func rollingbackAddColumn(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, e return ver, dbterror.ErrCancelledDDLJob } -func rollingbackDropColumn(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) { - _, colInfo, idxInfos, _, err := checkDropColumn(d, t, job) +func rollingbackDropColumn(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, err error) { + _, colInfo, idxInfos, _, err := checkDropColumn(jobCtx, t, job) if err != nil { return ver, errors.Trace(err) } @@ -239,8 +239,8 @@ func rollingbackDropColumn(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, return ver, nil } -func rollingbackDropIndex(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) { - _, indexInfo, _, err := checkDropIndex(d, t, job) +func rollingbackDropIndex(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, err error) { + _, indexInfo, _, err := checkDropIndex(jobCtx.infoCache, t, job) if err != nil { return ver, errors.Trace(err) } @@ -259,15 +259,15 @@ func rollingbackDropIndex(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, e } } -func rollingbackAddIndex(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job, isPK bool) (ver int64, err error) { +func rollingbackAddIndex(w *worker, jobCtx *jobContext, t *meta.Meta, job *model.Job, isPK bool) (ver int64, err error) { if needNotifyAndStopReorgWorker(job) { // add index workers are started. need to ask them to exit. w.jobLogger(job).Info("run the cancelling DDL job", zap.String("job", job.String())) - d.notifyReorgWorkerJobStateChange(job) - ver, err = w.onCreateIndex(d, t, job, isPK) + jobCtx.oldDDLCtx.notifyReorgWorkerJobStateChange(job) + ver, err = w.onCreateIndex(jobCtx, t, job, isPK) } else { // add index's reorg workers are not running, remove the indexInfo in tableInfo. - ver, err = convertNotReorgAddIdxJob2RollbackJob(d, t, job, dbterror.ErrCancelledDDLJob) + ver, err = convertNotReorgAddIdxJob2RollbackJob(jobCtx, t, job, dbterror.ErrCancelledDDLJob) } return } @@ -287,12 +287,12 @@ func needNotifyAndStopReorgWorker(job *model.Job) bool { // rollbackExchangeTablePartition will clear the non-partitioned // table's ExchangePartitionInfo state. -func rollbackExchangeTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job, tblInfo *model.TableInfo) (ver int64, err error) { +func rollbackExchangeTablePartition(jobCtx *jobContext, t *meta.Meta, job *model.Job, tblInfo *model.TableInfo) (ver int64, err error) { tblInfo.ExchangePartitionInfo = nil job.State = model.JobStateRollbackDone job.SchemaState = model.StatePublic if len(tblInfo.Constraints) == 0 { - return updateVersionAndTableInfo(d, t, job, tblInfo, true) + return updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) } var ( defID int64 @@ -314,11 +314,11 @@ func rollbackExchangeTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job, tbl schemaID: ptSchemaID, tblInfo: pt, }) - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true, ptInfo...) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true, ptInfo...) return ver, errors.Trace(err) } -func rollingbackExchangeTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) { +func rollingbackExchangeTablePartition(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, err error) { if job.SchemaState == model.StateNone { // Nothing is changed job.State = model.JobStateCancelled @@ -329,11 +329,11 @@ func rollingbackExchangeTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job) if err != nil { return ver, errors.Trace(err) } - ver, err = rollbackExchangeTablePartition(d, t, job, nt) + ver, err = rollbackExchangeTablePartition(jobCtx, t, job, nt) return ver, errors.Trace(err) } -func convertAddTablePartitionJob2RollbackJob(d *ddlCtx, t *meta.Meta, job *model.Job, otherwiseErr error, tblInfo *model.TableInfo) (ver int64, err error) { +func convertAddTablePartitionJob2RollbackJob(jobCtx *jobContext, t *meta.Meta, job *model.Job, otherwiseErr error, tblInfo *model.TableInfo) (ver int64, err error) { addingDefinitions := tblInfo.Partition.AddingDefinitions partNames := make([]string, 0, len(addingDefinitions)) for _, pd := range addingDefinitions { @@ -352,7 +352,7 @@ func convertAddTablePartitionJob2RollbackJob(d *ddlCtx, t *meta.Meta, job *model } else { job.Args = []any{partNames} } - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -360,7 +360,7 @@ func convertAddTablePartitionJob2RollbackJob(d *ddlCtx, t *meta.Meta, job *model return ver, errors.Trace(otherwiseErr) } -func rollingbackAddTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) { +func rollingbackAddTablePartition(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, err error) { tblInfo, _, addingDefinitions, err := checkAddPartition(t, job) if err != nil { return ver, errors.Trace(err) @@ -371,7 +371,7 @@ func rollingbackAddTablePartition(d *ddlCtx, t *meta.Meta, job *model.Job) (ver return ver, errors.Trace(dbterror.ErrCancelledDDLJob) } // addingDefinitions is also in tblInfo, here pass the tblInfo as parameter directly. - return convertAddTablePartitionJob2RollbackJob(d, t, job, dbterror.ErrCancelledDDLJob, tblInfo) + return convertAddTablePartitionJob2RollbackJob(jobCtx, t, job, dbterror.ErrCancelledDDLJob, tblInfo) } func rollingbackDropTableOrView(t *meta.Meta, job *model.Job) error { @@ -447,7 +447,7 @@ func rollingbackTruncateTable(t *meta.Meta, job *model.Job) (ver int64, err erro return cancelOnlyNotHandledJob(job, model.StateNone) } -func rollingbackReorganizePartition(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) { +func rollingbackReorganizePartition(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, err error) { if job.SchemaState == model.StateNone { job.State = model.JobStateCancelled return ver, dbterror.ErrCancelledDDLJob @@ -460,7 +460,7 @@ func rollingbackReorganizePartition(d *ddlCtx, t *meta.Meta, job *model.Job) (ve // addingDefinitions is also in tblInfo, here pass the tblInfo as parameter directly. // TODO: Test this with reorganize partition p1 into (partition p1 ...)! - return convertAddTablePartitionJob2RollbackJob(d, t, job, dbterror.ErrCancelledDDLJob, tblInfo) + return convertAddTablePartitionJob2RollbackJob(jobCtx, t, job, dbterror.ErrCancelledDDLJob, tblInfo) } func pauseReorgWorkers(w *worker, d *ddlCtx, job *model.Job) (err error) { @@ -472,29 +472,29 @@ func pauseReorgWorkers(w *worker, d *ddlCtx, job *model.Job) (err error) { return dbterror.ErrPausedDDLJob.GenWithStackByArgs(job.ID) } -func convertJob2RollbackJob(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) { +func convertJob2RollbackJob(w *worker, jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, err error) { switch job.Type { case model.ActionAddColumn: - ver, err = rollingbackAddColumn(d, t, job) + ver, err = rollingbackAddColumn(jobCtx, t, job) case model.ActionAddIndex: - ver, err = rollingbackAddIndex(w, d, t, job, false) + ver, err = rollingbackAddIndex(w, jobCtx, t, job, false) case model.ActionAddPrimaryKey: - ver, err = rollingbackAddIndex(w, d, t, job, true) + ver, err = rollingbackAddIndex(w, jobCtx, t, job, true) case model.ActionAddTablePartition: - ver, err = rollingbackAddTablePartition(d, t, job) + ver, err = rollingbackAddTablePartition(jobCtx, t, job) case model.ActionReorganizePartition, model.ActionRemovePartitioning, model.ActionAlterTablePartitioning: - ver, err = rollingbackReorganizePartition(d, t, job) + ver, err = rollingbackReorganizePartition(jobCtx, t, job) case model.ActionDropColumn: - ver, err = rollingbackDropColumn(d, t, job) + ver, err = rollingbackDropColumn(jobCtx, t, job) case model.ActionDropIndex, model.ActionDropPrimaryKey: - ver, err = rollingbackDropIndex(d, t, job) + ver, err = rollingbackDropIndex(jobCtx, t, job) case model.ActionDropTable, model.ActionDropView, model.ActionDropSequence: err = rollingbackDropTableOrView(t, job) case model.ActionDropTablePartition: ver, err = rollingbackDropTablePartition(t, job) case model.ActionExchangeTablePartition: - ver, err = rollingbackExchangeTablePartition(d, t, job) + ver, err = rollingbackExchangeTablePartition(jobCtx, t, job) case model.ActionDropSchema: err = rollingbackDropSchema(t, job) case model.ActionRenameIndex: @@ -502,7 +502,7 @@ func convertJob2RollbackJob(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job) case model.ActionTruncateTable: ver, err = rollingbackTruncateTable(t, job) case model.ActionModifyColumn: - ver, err = rollingbackModifyColumn(w, d, t, job) + ver, err = rollingbackModifyColumn(w, jobCtx, t, job) case model.ActionDropForeignKey, model.ActionTruncateTablePartition: ver, err = cancelOnlyNotHandledJob(job, model.StatePublic) case model.ActionRebaseAutoID, model.ActionShardRowID, model.ActionAddForeignKey, @@ -515,11 +515,11 @@ func convertJob2RollbackJob(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job) case model.ActionMultiSchemaChange: err = rollingBackMultiSchemaChange(job) case model.ActionAddCheckConstraint: - ver, err = rollingBackAddConstraint(d, t, job) + ver, err = rollingBackAddConstraint(jobCtx, t, job) case model.ActionDropCheckConstraint: ver, err = rollingBackDropConstraint(t, job) case model.ActionAlterCheckConstraint: - ver, err = rollingBackAlterConstraint(d, t, job) + ver, err = rollingBackAlterConstraint(jobCtx, t, job) default: job.State = model.JobStateCancelled err = dbterror.ErrCancelledDDLJob @@ -566,7 +566,7 @@ func convertJob2RollbackJob(w *worker, d *ddlCtx, t *meta.Meta, job *model.Job) return } -func rollingBackAddConstraint(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) { +func rollingBackAddConstraint(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, err error) { _, tblInfo, constrInfoInMeta, _, err := checkAddCheckConstraint(t, job) if err != nil { return ver, errors.Trace(err) @@ -586,7 +586,7 @@ func rollingBackAddConstraint(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int6 if job.IsRollingback() { job.State = model.JobStateRollbackDone } - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) return ver, errors.Trace(err) } @@ -606,7 +606,7 @@ func rollingBackDropConstraint(t *meta.Meta, job *model.Job) (ver int64, err err return ver, nil } -func rollingBackAlterConstraint(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) { +func rollingBackAlterConstraint(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, err error) { _, tblInfo, constraintInfo, enforced, err := checkAlterCheckConstraint(t, job) if err != nil { return ver, errors.Trace(err) @@ -624,6 +624,6 @@ func rollingBackAlterConstraint(d *ddlCtx, t *meta.Meta, job *model.Job) (ver in if job.IsRollingback() { job.State = model.JobStateRollbackDone } - ver, err = updateVersionAndTableInfoWithCheck(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfoWithCheck(jobCtx, t, job, tblInfo, true) return ver, errors.Trace(err) } diff --git a/pkg/ddl/rollingback_test.go b/pkg/ddl/rollingback_test.go index bbd78be112372..7e10f00072c4c 100644 --- a/pkg/ddl/rollingback_test.go +++ b/pkg/ddl/rollingback_test.go @@ -22,17 +22,17 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/ddl" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/testkit/external" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/util/sqlexec" "github.com/stretchr/testify/require" ) // TestCancelJobMeetError is used to test canceling ddl job failure when convert ddl job to a rolling back job. func TestCancelAddIndexJobError(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk1 := testkit.NewTestKit(t, store) @@ -51,14 +51,12 @@ func TestCancelAddIndexJobError(t *testing.T) { tbl := external.GetTableByName(t, tk, "test", "t_cancel_add_index") //nolint:typecheck require.NotNil(t, tbl) - d := dom.DDL() - hook := &callback.TestDDLCallback{Do: dom} var ( checkErr error jobID atomic.Int64 res sqlexec.RecordSet ) - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if job.TableID != tbl.Meta().ID { return } @@ -78,9 +76,7 @@ func TestCancelAddIndexJobError(t *testing.T) { checkErr = err } } - } - hook.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(hook) + }) // This will hang on stateDeleteOnly, and the job will be canceled. err := tk.ExecToErr("alter table t_cancel_add_index add index idx(a)") diff --git a/pkg/ddl/sanity_check.go b/pkg/ddl/sanity_check.go index 53d446191d9f1..9f8086beefedd 100644 --- a/pkg/ddl/sanity_check.go +++ b/pkg/ddl/sanity_check.go @@ -109,9 +109,10 @@ func expectedDeleteRangeCnt(ctx delRangeCntCtx, job *model.Job) (int, error) { case model.ActionAddIndex, model.ActionAddPrimaryKey: indexID := make([]int64, 1) ifExists := make([]bool, 1) + isGlobal := make([]bool, 0, 1) var partitionIDs []int64 if err := job.DecodeArgs(&indexID[0], &ifExists[0], &partitionIDs); err != nil { - if err := job.DecodeArgs(&indexID, &ifExists, &partitionIDs); err != nil { + if err := job.DecodeArgs(&indexID, &ifExists, &partitionIDs, &isGlobal); err != nil { var unique bool if err := job.DecodeArgs(&unique); err == nil { // The first argument is bool means nothing need to be added to delete-range table. @@ -120,11 +121,18 @@ func expectedDeleteRangeCnt(ctx delRangeCntCtx, job *model.Job) (int, error) { return 0, errors.Trace(err) } } - idxIDNumFactor := len(indexID) // Add temporary index to del-range table. - if job.State == model.JobStateRollbackDone { - idxIDNumFactor = 2 * len(indexID) // Add origin index to del-range table. + ret := 0 + for i := 0; i < len(indexID); i++ { + num := mathutil.Max(len(partitionIDs), 1) // Add temporary index to del-range table. + if len(isGlobal) != 0 && isGlobal[i] { + num = 1 // Global index only has one del-range. + } + if job.State == model.JobStateRollbackDone { + num *= 2 // Add origin index to del-range table. + } + ret += num } - return mathutil.Max(len(partitionIDs)*idxIDNumFactor, idxIDNumFactor), nil + return ret, nil case model.ActionDropIndex, model.ActionDropPrimaryKey: var indexName any ifNotExists := make([]bool, 1) diff --git a/pkg/ddl/schema.go b/pkg/ddl/schema.go index 590b3be5e8c2a..5e8551a43cec1 100644 --- a/pkg/ddl/schema.go +++ b/pkg/ddl/schema.go @@ -27,7 +27,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/model" ) -func onCreateSchema(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func onCreateSchema(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { schemaID := job.SchemaID dbInfo := &model.DBInfo{} if err := job.DecodeArgs(dbInfo); err != nil { @@ -39,7 +39,7 @@ func onCreateSchema(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error dbInfo.ID = schemaID dbInfo.State = model.StateNone - err := checkSchemaNotExists(d, schemaID, dbInfo) + err := checkSchemaNotExists(jobCtx.infoCache, schemaID, dbInfo) if err != nil { if infoschema.ErrDatabaseExists.Equal(err) { // The database already exists, can't create it, we should cancel this job now. @@ -48,7 +48,7 @@ func onCreateSchema(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error return ver, errors.Trace(err) } - ver, err = updateSchemaVersion(d, t, job) + ver, err = updateSchemaVersion(jobCtx, t, job) if err != nil { return ver, errors.Trace(err) } @@ -72,8 +72,8 @@ func onCreateSchema(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error // checkSchemaNotExists checks whether the database already exists. // see checkTableNotExists for the rationale of why we check using info schema only. -func checkSchemaNotExists(d *ddlCtx, schemaID int64, dbInfo *model.DBInfo) error { - is := d.infoCache.GetLatest() +func checkSchemaNotExists(infoCache *infoschema.InfoCache, schemaID int64, dbInfo *model.DBInfo) error { + is := infoCache.GetLatest() // Check database exists by name. if is.SchemaExists(dbInfo.Name) { return infoschema.ErrDatabaseExists.GenWithStackByArgs(dbInfo.Name) @@ -85,7 +85,7 @@ func checkSchemaNotExists(d *ddlCtx, schemaID int64, dbInfo *model.DBInfo) error return nil } -func onModifySchemaCharsetAndCollate(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func onModifySchemaCharsetAndCollate(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { var toCharset, toCollate string if err := job.DecodeArgs(&toCharset, &toCollate); err != nil { job.State = model.JobStateCancelled @@ -108,14 +108,14 @@ func onModifySchemaCharsetAndCollate(d *ddlCtx, t *meta.Meta, job *model.Job) (v if err = t.UpdateDatabase(dbInfo); err != nil { return ver, errors.Trace(err) } - if ver, err = updateSchemaVersion(d, t, job); err != nil { + if ver, err = updateSchemaVersion(jobCtx, t, job); err != nil { return ver, errors.Trace(err) } job.FinishDBJob(model.JobStateDone, model.StatePublic, ver, dbInfo) return ver, nil } -func onModifySchemaDefaultPlacement(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func onModifySchemaDefaultPlacement(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { var placementPolicyRef *model.PolicyRefInfo if err := job.DecodeArgs(&placementPolicyRef); err != nil { job.State = model.JobStateCancelled @@ -144,26 +144,26 @@ func onModifySchemaDefaultPlacement(d *ddlCtx, t *meta.Meta, job *model.Job) (ve if err = t.UpdateDatabase(dbInfo); err != nil { return ver, errors.Trace(err) } - if ver, err = updateSchemaVersion(d, t, job); err != nil { + if ver, err = updateSchemaVersion(jobCtx, t, job); err != nil { return ver, errors.Trace(err) } job.FinishDBJob(model.JobStateDone, model.StatePublic, ver, dbInfo) return ver, nil } -func onDropSchema(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func onDropSchema(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { dbInfo, err := checkSchemaExistAndCancelNotExistJob(t, job) if err != nil { return ver, errors.Trace(err) } if dbInfo.State == model.StatePublic { - err = checkDatabaseHasForeignKeyReferredInOwner(d, t, job) + err = checkDatabaseHasForeignKeyReferredInOwner(jobCtx, job) if err != nil { return ver, errors.Trace(err) } } - ver, err = updateSchemaVersion(d, t, job) + ver, err = updateSchemaVersion(jobCtx, t, job) if err != nil { return ver, errors.Trace(err) } @@ -210,7 +210,7 @@ func onDropSchema(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) if err != nil { return ver, errors.Trace(err) } - if err = t.DropDatabase(dbInfo.ID, dbInfo.Name.L); err != nil { + if err = t.DropDatabase(dbInfo.ID); err != nil { break } @@ -227,7 +227,7 @@ func onDropSchema(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) return ver, errors.Trace(err) } -func (w *worker) onRecoverSchema(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func (w *worker) onRecoverSchema(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { var ( recoverSchemaInfo *RecoverSchemaInfo recoverSchemaCheckFlag int64 @@ -321,7 +321,7 @@ func (w *worker) onRecoverSchema(d *ddlCtx, t *meta.Meta, job *model.Job) (ver i schemaInfo.State = model.StatePublic // use to update InfoSchema job.SchemaID = schemaInfo.ID - ver, err = updateSchemaVersion(d, t, job) + ver, err = updateSchemaVersion(jobCtx, t, job) if err != nil { return ver, errors.Trace(err) } diff --git a/pkg/ddl/schema_test.go b/pkg/ddl/schema_test.go index 8403e6f3d26dd..39e4ed6d70274 100644 --- a/pkg/ddl/schema_test.go +++ b/pkg/ddl/schema_test.go @@ -31,7 +31,6 @@ import ( "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/parser/terror" "github.com/pingcap/tidb/pkg/sessionctx" - "github.com/pingcap/tidb/pkg/sessiontxn" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/types" "github.com/stretchr/testify/require" @@ -240,10 +239,10 @@ func TestSchema(t *testing.T) { testCheckTableState(t, store, dbInfo, tblInfo1, model.StatePublic) testCheckJobDone(t, store, tJob1.ID, true) tbl1 := testGetTable(t, domain, tblInfo1.ID) - err = sessiontxn.NewTxn(context.Background(), tk.Session()) + txn, err := newTxn(tk.Session()) require.NoError(t, err) for i := 1; i <= 100; i++ { - _, err := tbl1.AddRecord(tk.Session().GetTableCtx(), types.MakeDatums(i, i, i)) + _, err := tbl1.AddRecord(tk.Session().GetTableCtx(), txn, types.MakeDatums(i, i, i)) require.NoError(t, err) } // create table t1 with 1034 records. @@ -254,10 +253,10 @@ func TestSchema(t *testing.T) { testCheckTableState(t, store, dbInfo, tblInfo2, model.StatePublic) testCheckJobDone(t, store, tJob2.ID, true) tbl2 := testGetTable(t, domain, tblInfo2.ID) - err = sessiontxn.NewTxn(context.Background(), tk2.Session()) + txn, err = newTxn(tk.Session()) require.NoError(t, err) for i := 1; i <= 1034; i++ { - _, err := tbl2.AddRecord(tk2.Session().GetTableCtx(), types.MakeDatums(i, i, i)) + _, err := tbl2.AddRecord(tk2.Session().GetTableCtx(), txn, types.MakeDatums(i, i, i)) require.NoError(t, err) } tk3 := testkit.NewTestKit(t, store) diff --git a/pkg/ddl/schema_version.go b/pkg/ddl/schema_version.go index 96fbdad427d81..a2464aec88c6f 100644 --- a/pkg/ddl/schema_version.go +++ b/pkg/ddl/schema_version.go @@ -313,8 +313,8 @@ func SetSchemaDiffForMultiInfos(diff *model.SchemaDiff, multiInfos ...schemaIDAn } // updateSchemaVersion increments the schema version by 1 and sets SchemaDiff. -func updateSchemaVersion(d *ddlCtx, t *meta.Meta, job *model.Job, multiInfos ...schemaIDAndTableInfo) (int64, error) { - schemaVersion, err := d.setSchemaVersion(job, d.store) +func updateSchemaVersion(jobCtx *jobContext, t *meta.Meta, job *model.Job, multiInfos ...schemaIDAndTableInfo) (int64, error) { + schemaVersion, err := jobCtx.setSchemaVersion(job) if err != nil { return 0, errors.Trace(err) } @@ -372,7 +372,7 @@ func checkAllVersions(ctx context.Context, d *ddlCtx, job *model.Job, latestSche }) // OwnerCheckAllVersions returns only when all TiDB schemas are synced(exclude the isolated TiDB). - err := d.schemaSyncer.OwnerCheckAllVersions(ctx, job.ID, latestSchemaVersion) + err := d.schemaVerSyncer.OwnerCheckAllVersions(ctx, job.ID, latestSchemaVersion) if err != nil { logutil.DDLLogger().Info("wait latest schema version encounter error", zap.Int64("ver", latestSchemaVersion), zap.Int64("jobID", job.ID), zap.Duration("take time", time.Since(timeStart)), zap.Error(err)) diff --git a/pkg/ddl/schematracker/BUILD.bazel b/pkg/ddl/schematracker/BUILD.bazel index 8a721b4a0c524..a364d002f6e28 100644 --- a/pkg/ddl/schematracker/BUILD.bazel +++ b/pkg/ddl/schematracker/BUILD.bazel @@ -11,7 +11,8 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/ddl", - "//pkg/ddl/syncer", + "//pkg/ddl/schemaver", + "//pkg/ddl/serverstate", "//pkg/ddl/systable", "//pkg/infoschema", "//pkg/kv", diff --git a/pkg/ddl/schematracker/checker.go b/pkg/ddl/schematracker/checker.go index f8ffeb46919d1..721a9a25f78c4 100644 --- a/pkg/ddl/schematracker/checker.go +++ b/pkg/ddl/schematracker/checker.go @@ -20,11 +20,11 @@ import ( "fmt" "strings" "sync/atomic" - "time" "github.com/ngaut/pools" "github.com/pingcap/tidb/pkg/ddl" - "github.com/pingcap/tidb/pkg/ddl/syncer" + "github.com/pingcap/tidb/pkg/ddl/schemaver" + "github.com/pingcap/tidb/pkg/ddl/serverstate" "github.com/pingcap/tidb/pkg/ddl/systable" "github.com/pingcap/tidb/pkg/infoschema" "github.com/pingcap/tidb/pkg/kv" @@ -38,7 +38,6 @@ import ( "github.com/pingcap/tidb/pkg/statistics/handle" "github.com/pingcap/tidb/pkg/store/helper" "github.com/pingcap/tidb/pkg/store/mockstore" - "github.com/pingcap/tidb/pkg/table" pumpcli "github.com/pingcap/tidb/pkg/tidb-binlog/pump_client" ) @@ -490,11 +489,6 @@ func (d *Checker) Start(ctxPool *pools.ResourcePool) error { return d.realDDL.Start(ctxPool) } -// GetLease implements the DDL interface. -func (d *Checker) GetLease() time.Duration { - return d.realDDL.GetLease() -} - // Stats implements the DDL interface. func (d *Checker) Stats(vars *variable.SessionVars) (map[string]any, error) { return d.realDDL.Stats(vars) @@ -516,12 +510,12 @@ func (d *Checker) RegisterStatsHandle(h *handle.Handle) { } // SchemaSyncer implements the DDL interface. -func (d *Checker) SchemaSyncer() syncer.SchemaSyncer { +func (d *Checker) SchemaSyncer() schemaver.Syncer { return d.realDDL.SchemaSyncer() } // StateSyncer implements the DDL interface. -func (d *Checker) StateSyncer() syncer.StateSyncer { +func (d *Checker) StateSyncer() serverstate.Syncer { return d.realDDL.StateSyncer() } @@ -535,26 +529,11 @@ func (d *Checker) GetID() string { return d.realDDL.GetID() } -// GetTableMaxHandle implements the DDL interface. -func (d *Checker) GetTableMaxHandle(ctx *ddl.JobContext, startTS uint64, tbl table.PhysicalTable) (kv.Handle, bool, error) { - return d.realDDL.GetTableMaxHandle(ctx, startTS, tbl) -} - // SetBinlogClient implements the DDL interface. func (d *Checker) SetBinlogClient(client *pumpcli.PumpsClient) { d.realDDL.SetBinlogClient(client) } -// GetHook implements the DDL interface. -func (d *Checker) GetHook() ddl.Callback { - return d.realDDL.GetHook() -} - -// SetHook implements the DDL interface. -func (d *Checker) SetHook(h ddl.Callback) { - d.realDDL.SetHook(h) -} - // DoDDLJob implements the DDL interface. func (d *Checker) DoDDLJob(ctx sessionctx.Context, job *model.Job) error { de := d.realExecutor.(ddl.ExecutorForTest) diff --git a/pkg/ddl/schematracker/dm_tracker.go b/pkg/ddl/schematracker/dm_tracker.go index d66c66f780e57..5c01159af7092 100644 --- a/pkg/ddl/schematracker/dm_tracker.go +++ b/pkg/ddl/schematracker/dm_tracker.go @@ -38,11 +38,14 @@ import ( "github.com/pingcap/tidb/pkg/util/dbterror" ) -// SchemaTracker is used to track schema changes by DM. It implements DDL interface and by applying DDL, it updates the -// table structure to keep tracked with upstream changes. -// It embeds an InfoStore which stores DBInfo and TableInfo. The DBInfo and TableInfo can be treated as immutable, so -// after reading them by SchemaByName or TableByName, later modifications made by SchemaTracker will not change them. -// SchemaTracker is not thread-safe. +// SchemaTracker is used to track schema changes by DM. It implements +// ddl.Executor interface and by applying DDL, it updates the table structure to +// keep tracked with upstream changes. +// +// It embeds an InfoStore which stores DBInfo and TableInfo. The DBInfo and +// TableInfo can be treated as immutable, so after reading them by SchemaByName +// or TableByName, later modifications made by SchemaTracker will not change +// them. SchemaTracker is not thread-safe. type SchemaTracker struct { *InfoStore } @@ -427,7 +430,6 @@ func (d *SchemaTracker) createIndex( indexName, false, unique, - false, indexPartSpecifications, indexOption, model.StatePublic, @@ -872,7 +874,6 @@ func (d *SchemaTracker) createPrimaryKey( indexName, true, true, - false, indexPartSpecifications, indexOption, model.StatePublic, diff --git a/pkg/ddl/schematracker/dm_tracker_test.go b/pkg/ddl/schematracker/dm_tracker_test.go index b438d59a5d913..ca0ec21499173 100644 --- a/pkg/ddl/schematracker/dm_tracker_test.go +++ b/pkg/ddl/schematracker/dm_tracker_test.go @@ -86,6 +86,10 @@ func TestCreateTableLongIndex(t *testing.T) { tracker := schematracker.NewSchemaTracker(2) tracker.CreateTestDB(nil) execCreate(t, tracker, sql) + sql2 := "create table test.t2 (c1 int, c2 blob, c3 varchar(64), unique index idx_c2(c2(555555)));" + execCreate(t, tracker, sql2) + sql3 := "create table test.t3 (c1 int, c2 blob, c3 varchar(64), index idx_c2_c3(c3, c2(555555)));" + execCreate(t, tracker, sql3) } func execAlter(t *testing.T, tracker schematracker.SchemaTracker, sql string) { diff --git a/pkg/ddl/syncer/BUILD.bazel b/pkg/ddl/schemaver/BUILD.bazel similarity index 85% rename from pkg/ddl/syncer/BUILD.bazel rename to pkg/ddl/schemaver/BUILD.bazel index 9f125f09c825a..db28e7939d2b7 100644 --- a/pkg/ddl/syncer/BUILD.bazel +++ b/pkg/ddl/schemaver/BUILD.bazel @@ -1,12 +1,12 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") go_library( - name = "syncer", + name = "schemaver", srcs = [ - "state_syncer.go", + "mem_syncer.go", "syncer.go", ], - importpath = "github.com/pingcap/tidb/pkg/ddl/syncer", + importpath = "github.com/pingcap/tidb/pkg/ddl/schemaver", visibility = ["//visibility:public"], deps = [ "//pkg/ddl/logutil", @@ -21,22 +21,20 @@ go_library( "@io_etcd_go_etcd_api_v3//mvccpb", "@io_etcd_go_etcd_client_v3//:client", "@io_etcd_go_etcd_client_v3//concurrency", - "@org_uber_go_atomic//:atomic", "@org_uber_go_zap//:zap", ], ) go_test( - name = "syncer_test", + name = "schemaver_test", timeout = "short", srcs = [ - "state_syncer_test.go", "syncer_nokit_test.go", "syncer_test.go", ], - embed = [":syncer"], + embed = [":schemaver"], flaky = True, - shard_count = 6, + shard_count = 5, deps = [ "//pkg/ddl", "//pkg/ddl/util", diff --git a/pkg/ddl/schemaver/mem_syncer.go b/pkg/ddl/schemaver/mem_syncer.go new file mode 100644 index 0000000000000..41d7969de878e --- /dev/null +++ b/pkg/ddl/schemaver/mem_syncer.go @@ -0,0 +1,140 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package schemaver + +import ( + "context" + "sync" + "sync/atomic" + "time" + + "github.com/pingcap/errors" + "github.com/pingcap/failpoint" + "github.com/pingcap/tidb/pkg/sessionctx/variable" + clientv3 "go.etcd.io/etcd/client/v3" +) + +const checkVersionsInterval = 2 * time.Millisecond + +// MemSyncer is in memory schema version syncer, used for uni-store where there is +// only 1 TiDB instance. it's mainly for test. +// exported for testing. +type MemSyncer struct { + selfSchemaVersion int64 + mdlSchemaVersions sync.Map + globalVerCh chan clientv3.WatchResponse + mockSession chan struct{} +} + +var _ Syncer = &MemSyncer{} + +// NewMemSyncer creates a new memory Syncer. +func NewMemSyncer() Syncer { + return &MemSyncer{} +} + +// Init implements Syncer.Init interface. +func (s *MemSyncer) Init(_ context.Context) error { + s.mdlSchemaVersions = sync.Map{} + s.globalVerCh = make(chan clientv3.WatchResponse, 1) + s.mockSession = make(chan struct{}, 1) + return nil +} + +// GlobalVersionCh implements Syncer.GlobalVersionCh interface. +func (s *MemSyncer) GlobalVersionCh() clientv3.WatchChan { + return s.globalVerCh +} + +// WatchGlobalSchemaVer implements Syncer.WatchGlobalSchemaVer interface. +func (*MemSyncer) WatchGlobalSchemaVer(context.Context) {} + +// UpdateSelfVersion implements Syncer.UpdateSelfVersion interface. +func (s *MemSyncer) UpdateSelfVersion(_ context.Context, jobID int64, version int64) error { + failpoint.Inject("mockUpdateMDLToETCDError", func(val failpoint.Value) { + if val.(bool) { + failpoint.Return(errors.New("mock update mdl to etcd error")) + } + }) + if variable.EnableMDL.Load() { + s.mdlSchemaVersions.Store(jobID, version) + } else { + atomic.StoreInt64(&s.selfSchemaVersion, version) + } + return nil +} + +// Done implements Syncer.Done interface. +func (s *MemSyncer) Done() <-chan struct{} { + return s.mockSession +} + +// CloseSession mockSession, it is exported for testing. +func (s *MemSyncer) CloseSession() { + close(s.mockSession) +} + +// Restart implements Syncer.Restart interface. +func (s *MemSyncer) Restart(_ context.Context) error { + s.mockSession = make(chan struct{}, 1) + return nil +} + +// OwnerUpdateGlobalVersion implements Syncer.OwnerUpdateGlobalVersion interface. +func (s *MemSyncer) OwnerUpdateGlobalVersion(_ context.Context, _ int64) error { + select { + case s.globalVerCh <- clientv3.WatchResponse{}: + default: + } + return nil +} + +// OwnerCheckAllVersions implements Syncer.OwnerCheckAllVersions interface. +func (s *MemSyncer) OwnerCheckAllVersions(ctx context.Context, jobID int64, latestVer int64) error { + ticker := time.NewTicker(checkVersionsInterval) + defer ticker.Stop() + + failpoint.Inject("mockOwnerCheckAllVersionSlow", func(val failpoint.Value) { + if v, ok := val.(int); ok && v == int(jobID) { + time.Sleep(2 * time.Second) + } + }) + + for { + select { + case <-ctx.Done(): + return errors.Trace(ctx.Err()) + case <-ticker.C: + if variable.EnableMDL.Load() { + ver, ok := s.mdlSchemaVersions.Load(jobID) + if ok && ver.(int64) >= latestVer { + return nil + } + } else { + ver := atomic.LoadInt64(&s.selfSchemaVersion) + if ver >= latestVer { + return nil + } + } + } + } +} + +// SyncJobSchemaVerLoop implements Syncer.SyncJobSchemaVerLoop interface. +func (*MemSyncer) SyncJobSchemaVerLoop(context.Context) { +} + +// Close implements Syncer.Close interface. +func (*MemSyncer) Close() {} diff --git a/pkg/ddl/syncer/syncer.go b/pkg/ddl/schemaver/syncer.go similarity index 81% rename from pkg/ddl/syncer/syncer.go rename to pkg/ddl/schemaver/syncer.go index 818d4747eed06..b1df3c9b50fcb 100644 --- a/pkg/ddl/syncer/syncer.go +++ b/pkg/ddl/schemaver/syncer.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package syncer +package schemaver import ( "context" @@ -57,58 +57,13 @@ var ( CheckVersFirstWaitTime = 50 * time.Millisecond ) -// Watcher is responsible for watching the etcd path related operations. -type Watcher interface { - // WatchChan returns the chan for watching etcd path. - WatchChan() clientv3.WatchChan - // Watch watches the etcd path. - Watch(ctx context.Context, etcdCli *clientv3.Client, path string) - // Rewatch rewatches the etcd path. - Rewatch(ctx context.Context, etcdCli *clientv3.Client, path string) -} - -type watcher struct { - sync.RWMutex - wCh clientv3.WatchChan -} - -// WatchChan implements SyncerWatch.WatchChan interface. -func (w *watcher) WatchChan() clientv3.WatchChan { - w.RLock() - defer w.RUnlock() - return w.wCh -} - -// Watch implements SyncerWatch.Watch interface. -func (w *watcher) Watch(ctx context.Context, etcdCli *clientv3.Client, path string) { - w.Lock() - w.wCh = etcdCli.Watch(ctx, path) - w.Unlock() -} - -// Rewatch implements SyncerWatch.Rewatch interface. -func (w *watcher) Rewatch(ctx context.Context, etcdCli *clientv3.Client, path string) { - startTime := time.Now() - // Make sure the wCh doesn't receive the information of 'close' before we finish the rewatch. - w.Lock() - w.wCh = nil - w.Unlock() - - go func() { - defer func() { - metrics.DeploySyncerHistogram.WithLabelValues(metrics.SyncerRewatch, metrics.RetLabel(nil)).Observe(time.Since(startTime).Seconds()) - }() - wCh := etcdCli.Watch(ctx, path) - - w.Lock() - w.wCh = wCh - w.Unlock() - logutil.DDLLogger().Info("syncer rewatch global info finished") - }() -} - -// SchemaSyncer is used to synchronize schema version between the DDL worker leader and followers through etcd. -type SchemaSyncer interface { +// Syncer is used to synchronize schema version between the DDL owner and follower. +// DDL owner and follower only depends on a subset of the methods of Syncer. +// DDL owner will use this interface to update the global schema version, and wait +// all followers to update schema to the target version. +// followers use it to receive version change events, reload schema and update their +// version. +type Syncer interface { // Init sets the global schema version path to etcd if it isn't exist, // then watch this path, and initializes the self schema version to etcd. Init(ctx context.Context) error @@ -130,7 +85,7 @@ type SchemaSyncer interface { OwnerCheckAllVersions(ctx context.Context, jobID int64, latestVer int64) error // SyncJobSchemaVerLoop syncs the schema versions on all TiDB nodes for DDL jobs. SyncJobSchemaVerLoop(ctx context.Context) - // Close ends SchemaSyncer. + // Close ends Syncer. Close() } @@ -210,11 +165,12 @@ func (v *nodeVersions) getMatchFn() func(map[string]int64) bool { return v.onceMatchFn } -type schemaVersionSyncer struct { +// etcdSyncer is a Syncer based on etcd. used for TiKV store. +type etcdSyncer struct { selfSchemaVerPath string etcdCli *clientv3.Client session unsafe.Pointer - globalVerWatcher watcher + globalVerWatcher util.Watcher ddlID string mu sync.RWMutex @@ -222,11 +178,12 @@ type schemaVersionSyncer struct { jobNodeVerPrefix string } -// NewSchemaSyncer creates a new SchemaSyncer. -func NewSchemaSyncer(etcdCli *clientv3.Client, id string) SchemaSyncer { - return &schemaVersionSyncer{ +// NewEtcdSyncer creates a new Syncer. +func NewEtcdSyncer(etcdCli *clientv3.Client, id string) Syncer { + return &etcdSyncer{ etcdCli: etcdCli, selfSchemaVerPath: fmt.Sprintf("%s/%s", util.DDLAllSchemaVersions, id), + globalVerWatcher: util.NewWatcher(), ddlID: id, jobNodeVersions: make(map[int64]*nodeVersions), @@ -234,8 +191,8 @@ func NewSchemaSyncer(etcdCli *clientv3.Client, id string) SchemaSyncer { } } -// Init implements SchemaSyncer.Init interface. -func (s *schemaVersionSyncer) Init(ctx context.Context) error { +// Init implements Syncer.Init interface. +func (s *etcdSyncer) Init(ctx context.Context) error { startTime := time.Now() var err error defer func() { @@ -263,16 +220,16 @@ func (s *schemaVersionSyncer) Init(ctx context.Context) error { return errors.Trace(err) } -func (s *schemaVersionSyncer) loadSession() *concurrency.Session { +func (s *etcdSyncer) loadSession() *concurrency.Session { return (*concurrency.Session)(atomic.LoadPointer(&s.session)) } -func (s *schemaVersionSyncer) storeSession(session *concurrency.Session) { +func (s *etcdSyncer) storeSession(session *concurrency.Session) { atomic.StorePointer(&s.session, (unsafe.Pointer)(session)) } -// Done implements SchemaSyncer.Done interface. -func (s *schemaVersionSyncer) Done() <-chan struct{} { +// Done implements Syncer.Done interface. +func (s *etcdSyncer) Done() <-chan struct{} { failpoint.Inject("ErrorMockSessionDone", func(val failpoint.Value) { if val.(bool) { err := s.loadSession().Close() @@ -283,8 +240,8 @@ func (s *schemaVersionSyncer) Done() <-chan struct{} { return s.loadSession().Done() } -// Restart implements SchemaSyncer.Restart interface. -func (s *schemaVersionSyncer) Restart(ctx context.Context) error { +// Restart implements Syncer.Restart interface. +func (s *etcdSyncer) Restart(ctx context.Context) error { startTime := time.Now() var err error defer func() { @@ -307,18 +264,18 @@ func (s *schemaVersionSyncer) Restart(ctx context.Context) error { return errors.Trace(err) } -// GlobalVersionCh implements SchemaSyncer.GlobalVersionCh interface. -func (s *schemaVersionSyncer) GlobalVersionCh() clientv3.WatchChan { +// GlobalVersionCh implements Syncer.GlobalVersionCh interface. +func (s *etcdSyncer) GlobalVersionCh() clientv3.WatchChan { return s.globalVerWatcher.WatchChan() } -// WatchGlobalSchemaVer implements SchemaSyncer.WatchGlobalSchemaVer interface. -func (s *schemaVersionSyncer) WatchGlobalSchemaVer(ctx context.Context) { +// WatchGlobalSchemaVer implements Syncer.WatchGlobalSchemaVer interface. +func (s *etcdSyncer) WatchGlobalSchemaVer(ctx context.Context) { s.globalVerWatcher.Rewatch(ctx, s.etcdCli, util.DDLGlobalSchemaVersion) } -// UpdateSelfVersion implements SchemaSyncer.UpdateSelfVersion interface. -func (s *schemaVersionSyncer) UpdateSelfVersion(ctx context.Context, jobID int64, version int64) error { +// UpdateSelfVersion implements Syncer.UpdateSelfVersion interface. +func (s *etcdSyncer) UpdateSelfVersion(ctx context.Context, jobID int64, version int64) error { startTime := time.Now() ver := strconv.FormatInt(version, 10) var err error @@ -336,8 +293,8 @@ func (s *schemaVersionSyncer) UpdateSelfVersion(ctx context.Context, jobID int64 return errors.Trace(err) } -// OwnerUpdateGlobalVersion implements SchemaSyncer.OwnerUpdateGlobalVersion interface. -func (s *schemaVersionSyncer) OwnerUpdateGlobalVersion(ctx context.Context, version int64) error { +// OwnerUpdateGlobalVersion implements Syncer.OwnerUpdateGlobalVersion interface. +func (s *etcdSyncer) OwnerUpdateGlobalVersion(ctx context.Context, version int64) error { startTime := time.Now() ver := strconv.FormatInt(version, 10) // TODO: If the version is larger than the original global version, we need set the version. @@ -348,7 +305,7 @@ func (s *schemaVersionSyncer) OwnerUpdateGlobalVersion(ctx context.Context, vers } // removeSelfVersionPath remove the self path from etcd. -func (s *schemaVersionSyncer) removeSelfVersionPath() error { +func (s *etcdSyncer) removeSelfVersionPath() error { startTime := time.Now() var err error defer func() { @@ -359,8 +316,8 @@ func (s *schemaVersionSyncer) removeSelfVersionPath() error { return errors.Trace(err) } -// OwnerCheckAllVersions implements SchemaSyncer.OwnerCheckAllVersions interface. -func (s *schemaVersionSyncer) OwnerCheckAllVersions(ctx context.Context, jobID int64, latestVer int64) error { +// OwnerCheckAllVersions implements Syncer.OwnerCheckAllVersions interface. +func (s *etcdSyncer) OwnerCheckAllVersions(ctx context.Context, jobID int64, latestVer int64) error { startTime := time.Now() if !variable.EnableMDL.Load() { time.Sleep(CheckVersFirstWaitTime) @@ -478,8 +435,8 @@ func (s *schemaVersionSyncer) OwnerCheckAllVersions(ctx context.Context, jobID i } } -// SyncJobSchemaVerLoop implements SchemaSyncer.SyncJobSchemaVerLoop interface. -func (s *schemaVersionSyncer) SyncJobSchemaVerLoop(ctx context.Context) { +// SyncJobSchemaVerLoop implements Syncer.SyncJobSchemaVerLoop interface. +func (s *etcdSyncer) SyncJobSchemaVerLoop(ctx context.Context) { for { s.syncJobSchemaVer(ctx) logutil.DDLLogger().Info("schema version sync loop interrupted, retrying...") @@ -491,7 +448,7 @@ func (s *schemaVersionSyncer) SyncJobSchemaVerLoop(ctx context.Context) { } } -func (s *schemaVersionSyncer) syncJobSchemaVer(ctx context.Context) { +func (s *etcdSyncer) syncJobSchemaVer(ctx context.Context) { resp, err := s.etcdCli.Get(ctx, s.jobNodeVerPrefix, clientv3.WithPrefix()) if err != nil { logutil.DDLLogger().Info("get all job versions failed", zap.Error(err)) @@ -543,7 +500,7 @@ func (s *schemaVersionSyncer) syncJobSchemaVer(ctx context.Context) { } } -func (s *schemaVersionSyncer) handleJobSchemaVerKV(kv *mvccpb.KeyValue, tp mvccpb.Event_EventType) { +func (s *etcdSyncer) handleJobSchemaVerKV(kv *mvccpb.KeyValue, tp mvccpb.Event_EventType) { jobID, tidbID, schemaVer, valid := decodeJobVersionEvent(kv, tp, s.jobNodeVerPrefix) if !valid { logutil.DDLLogger().Error("invalid job version kv", zap.Stringer("kv", kv), zap.Stringer("type", tp)) @@ -570,7 +527,7 @@ func (s *schemaVersionSyncer) handleJobSchemaVerKV(kv *mvccpb.KeyValue, tp mvccp } } -func (s *schemaVersionSyncer) jobSchemaVerMatchOrSet(jobID int64, matchFn func(map[string]int64) bool) *nodeVersions { +func (s *etcdSyncer) jobSchemaVerMatchOrSet(jobID int64, matchFn func(map[string]int64) bool) *nodeVersions { s.mu.Lock() defer s.mu.Unlock() @@ -621,7 +578,7 @@ func isUpdatedLatestVersion(key, val string, latestVer int64, notMatchVerCnt, in return true } -func (s *schemaVersionSyncer) Close() { +func (s *etcdSyncer) Close() { err := s.removeSelfVersionPath() if err != nil { logutil.DDLLogger().Error("remove self version path failed", zap.Error(err)) diff --git a/pkg/ddl/syncer/syncer_nokit_test.go b/pkg/ddl/schemaver/syncer_nokit_test.go similarity index 97% rename from pkg/ddl/syncer/syncer_nokit_test.go rename to pkg/ddl/schemaver/syncer_nokit_test.go index 15d0cbf0eac44..21dc98ad7cf2a 100644 --- a/pkg/ddl/syncer/syncer_nokit_test.go +++ b/pkg/ddl/schemaver/syncer_nokit_test.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package syncer +package schemaver import ( "context" @@ -95,7 +95,7 @@ func TestSyncJobSchemaVerLoop(t *testing.T) { etcdCli := mockCluster.RandClient() _, err := etcdCli.Put(ctx, util.DDLAllSchemaVersionsByJob+"/1/aa", "123") require.NoError(t, err) - s := NewSchemaSyncer(etcdCli, "1111").(*schemaVersionSyncer) + s := NewEtcdSyncer(etcdCli, "1111").(*etcdSyncer) var wg sync.WaitGroup wg.Add(1) go func() { @@ -150,9 +150,9 @@ func TestSyncJobSchemaVerLoop(t *testing.T) { require.NoError(t, err) // job 3 is matched after restart from a compaction error - require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/ddl/syncer/mockCompaction", `1*return(true)`)) + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/ddl/schemaver/mockCompaction", `1*return(true)`)) t.Cleanup(func() { - require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/syncer/mockCompaction")) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/schemaver/mockCompaction")) }) notifyCh = make(chan struct{}, 1) item = s.jobSchemaVerMatchOrSet(3, func(m map[string]int64) bool { diff --git a/pkg/ddl/syncer/syncer_test.go b/pkg/ddl/schemaver/syncer_test.go similarity index 96% rename from pkg/ddl/syncer/syncer_test.go rename to pkg/ddl/schemaver/syncer_test.go index 4add1837ce0c5..6f16930c916f2 100644 --- a/pkg/ddl/syncer/syncer_test.go +++ b/pkg/ddl/schemaver/syncer_test.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package syncer_test +package schemaver_test import ( "context" @@ -24,7 +24,7 @@ import ( "github.com/pingcap/errors" . "github.com/pingcap/tidb/pkg/ddl" - "github.com/pingcap/tidb/pkg/ddl/syncer" + "github.com/pingcap/tidb/pkg/ddl/schemaver" util2 "github.com/pingcap/tidb/pkg/ddl/util" "github.com/pingcap/tidb/pkg/infoschema" "github.com/pingcap/tidb/pkg/parser/terror" @@ -51,10 +51,10 @@ func TestSyncerSimple(t *testing.T) { } integration.BeforeTestExternal(t) - origin := syncer.CheckVersFirstWaitTime - syncer.CheckVersFirstWaitTime = 0 + origin := schemaver.CheckVersFirstWaitTime + schemaver.CheckVersFirstWaitTime = 0 defer func() { - syncer.CheckVersFirstWaitTime = origin + schemaver.CheckVersFirstWaitTime = origin }() store, err := mockstore.NewMockStore() @@ -91,7 +91,7 @@ func TestSyncerSimple(t *testing.T) { defer d.SchemaSyncer().Close() key := util2.DDLAllSchemaVersions + "/" + d.OwnerManager().ID() - checkRespKV(t, 1, key, syncer.InitialVersion, resp.Kvs...) + checkRespKV(t, 1, key, schemaver.InitialVersion, resp.Kvs...) ic2 := infoschema.NewCache(nil, 2) ic2.Insert(infoschema.MockInfoSchemaWithSchemaVer(nil, 0), 0) diff --git a/pkg/ddl/sequence.go b/pkg/ddl/sequence.go index 8e5a0c77fad9b..9eff78a2cc0ff 100644 --- a/pkg/ddl/sequence.go +++ b/pkg/ddl/sequence.go @@ -27,7 +27,7 @@ import ( "github.com/pingcap/tidb/pkg/util/mathutil" ) -func onCreateSequence(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func onCreateSequence(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { schemaID := job.SchemaID tbInfo := &model.TableInfo{} if err := job.DecodeArgs(tbInfo); err != nil { @@ -37,7 +37,7 @@ func onCreateSequence(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ err } tbInfo.State = model.StateNone - err := checkTableNotExists(d, schemaID, tbInfo.Name.L) + err := checkTableNotExists(jobCtx.infoCache, schemaID, tbInfo.Name.L) if err != nil { if infoschema.ErrDatabaseNotExists.Equal(err) || infoschema.ErrTableExists.Equal(err) { job.State = model.JobStateCancelled @@ -50,7 +50,7 @@ func onCreateSequence(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ err return ver, errors.Trace(err) } - ver, err = updateSchemaVersion(d, t, job) + ver, err = updateSchemaVersion(jobCtx, t, job) if err != nil { return ver, errors.Trace(err) } @@ -75,7 +75,7 @@ func createSequenceWithCheck(t *meta.Meta, job *model.Job, tbInfo *model.TableIn } else { sequenceBase = tbInfo.Sequence.Start + 1 } - return t.CreateSequenceAndSetSeqValue(job.SchemaID, job.SchemaName, tbInfo, sequenceBase) + return t.CreateSequenceAndSetSeqValue(job.SchemaID, tbInfo, sequenceBase) default: return dbterror.ErrInvalidDDLState.GenWithStackByArgs("sequence", tbInfo.State) } @@ -231,7 +231,7 @@ func alterSequenceOptions(sequenceOptions []*ast.SequenceOption, ident ast.Ident return false, 0, nil } -func onAlterSequence(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func onAlterSequence(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { schemaID := job.SchemaID var ( sequenceOpts []*ast.SequenceOption @@ -279,7 +279,7 @@ func onAlterSequence(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ erro // Store the sequence info into kv. // Set shouldUpdateVer always to be true even altering doesn't take effect, since some tools like drainer won't take // care of SchemaVersion=0. - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } diff --git a/pkg/ddl/serverstate/BUILD.bazel b/pkg/ddl/serverstate/BUILD.bazel new file mode 100644 index 0000000000000..9c983d8036b30 --- /dev/null +++ b/pkg/ddl/serverstate/BUILD.bazel @@ -0,0 +1,45 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "serverstate", + srcs = [ + "mem_syncer.go", + "syncer.go", + ], + importpath = "github.com/pingcap/tidb/pkg/ddl/serverstate", + visibility = ["//visibility:public"], + deps = [ + "//pkg/ddl/logutil", + "//pkg/ddl/util", + "//pkg/metrics", + "//pkg/util", + "@com_github_pingcap_errors//:errors", + "@com_github_pingcap_failpoint//:failpoint", + "@io_etcd_go_etcd_api_v3//mvccpb", + "@io_etcd_go_etcd_client_v3//:client", + "@io_etcd_go_etcd_client_v3//concurrency", + "@org_uber_go_atomic//:atomic", + "@org_uber_go_zap//:zap", + ], +) + +go_test( + name = "serverstate_test", + timeout = "short", + srcs = ["syncer_test.go"], + flaky = True, + deps = [ + ":serverstate", + "//pkg/ddl", + "//pkg/ddl/schemaver", + "//pkg/ddl/util", + "//pkg/infoschema", + "//pkg/session", + "//pkg/sessionctx/variable", + "//pkg/store/mockstore", + "//pkg/util", + "@com_github_stretchr_testify//require", + "@io_etcd_go_etcd_api_v3//mvccpb", + "@io_etcd_go_etcd_tests_v3//integration", + ], +) diff --git a/pkg/ddl/serverstate/mem_syncer.go b/pkg/ddl/serverstate/mem_syncer.go new file mode 100644 index 0000000000000..6489e99e057e1 --- /dev/null +++ b/pkg/ddl/serverstate/mem_syncer.go @@ -0,0 +1,81 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package serverstate + +import ( + "context" + + "github.com/pingcap/failpoint" + clientv3 "go.etcd.io/etcd/client/v3" + atomicutil "go.uber.org/atomic" +) + +// NewMemSyncer creates a new memSyncer. +func NewMemSyncer() Syncer { + return &memSyncer{} +} + +// clusterState mocks cluster state. +// We move it from memSyncer to here. Because we want to make it unaffected by ddl close. +var clusterState *atomicutil.Pointer[StateInfo] + +// memSyncer is memory based server state syncer used for uni-store. +// it's mainly for test as there is only 1 instance for uni-store. +type memSyncer struct { + globalVerCh chan clientv3.WatchResponse + mockSession chan struct{} +} + +// Init implements Syncer.Init interface. +func (s *memSyncer) Init(context.Context) error { + s.globalVerCh = make(chan clientv3.WatchResponse, 1) + s.mockSession = make(chan struct{}, 1) + state := NewStateInfo(StateNormalRunning) + if clusterState == nil { + clusterState = atomicutil.NewPointer(state) + } + return nil +} + +// UpdateGlobalState implements Syncer.UpdateGlobalState interface. +func (s *memSyncer) UpdateGlobalState(_ context.Context, stateInfo *StateInfo) error { + failpoint.Inject("mockUpgradingState", func(val failpoint.Value) { + if val.(bool) { + clusterState.Store(stateInfo) + failpoint.Return(nil) + } + }) + s.globalVerCh <- clientv3.WatchResponse{} + clusterState.Store(stateInfo) + return nil +} + +// GetGlobalState implements Syncer.GetGlobalState interface. +func (*memSyncer) GetGlobalState(context.Context) (*StateInfo, error) { + return clusterState.Load(), nil +} + +// IsUpgradingState implements Syncer.IsUpgradingState interface. +func (*memSyncer) IsUpgradingState() bool { + return clusterState.Load().State == StateUpgrading +} + +// WatchChan implements Syncer.WatchChan interface. +func (s *memSyncer) WatchChan() clientv3.WatchChan { + return s.globalVerCh +} + +// Rewatch implements Syncer.Rewatch interface. +func (*memSyncer) Rewatch(context.Context) {} diff --git a/pkg/ddl/syncer/state_syncer.go b/pkg/ddl/serverstate/syncer.go similarity index 77% rename from pkg/ddl/syncer/state_syncer.go rename to pkg/ddl/serverstate/syncer.go index d65a7b6585911..f603ea8b0e084 100644 --- a/pkg/ddl/syncer/state_syncer.go +++ b/pkg/ddl/serverstate/syncer.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package syncer +package serverstate import ( "context" @@ -33,6 +33,7 @@ import ( ) const ( + keyOpDefaultRetryCnt = 3 // keyOpDefaultTimeout is the default time out for etcd store. keyOpDefaultTimeout = 1 * time.Second statePrompt = "global-state-syncer" @@ -42,8 +43,10 @@ const ( StateNormalRunning = "" ) -// StateSyncer is used to synchronize schema version between the DDL worker leader and followers through etcd. -type StateSyncer interface { +// Syncer is used to synchronize server state. +// currently there are only 2 states: running/upgrading, and is only used for the +// 'smooth upgrade' feature. +type Syncer interface { // Init sets the global schema version path to etcd if it isn't exist, // then watch this path, and initializes the self schema version to etcd. Init(ctx context.Context) error @@ -82,27 +85,29 @@ func (info *StateInfo) Unmarshal(v []byte) error { return json.Unmarshal(v, info) } -type serverStateSyncer struct { +// etcdSyncer is a Syncer implementation based on etcd. +type etcdSyncer struct { etcdPath string prompt string etcdCli *clientv3.Client session *concurrency.Session clusterState *atomicutil.Pointer[StateInfo] - globalStateWatcher watcher + globalStateWatcher util.Watcher } -// NewStateSyncer creates a new StateSyncer. -func NewStateSyncer(etcdCli *clientv3.Client, etcdPath string) StateSyncer { - return &serverStateSyncer{ - etcdCli: etcdCli, - etcdPath: etcdPath, - clusterState: atomicutil.NewPointer(NewStateInfo(StateNormalRunning)), - prompt: statePrompt, +// NewEtcdSyncer creates a new Syncer. +func NewEtcdSyncer(etcdCli *clientv3.Client, etcdPath string) Syncer { + return &etcdSyncer{ + etcdCli: etcdCli, + etcdPath: etcdPath, + clusterState: atomicutil.NewPointer(NewStateInfo(StateNormalRunning)), + prompt: statePrompt, + globalStateWatcher: util.NewWatcher(), } } -// Init implements StateSyncer.Init interface. -func (s *serverStateSyncer) Init(ctx context.Context) error { +// Init implements Syncer.Init interface. +func (s *etcdSyncer) Init(ctx context.Context) error { startTime := time.Now() var err error defer func() { @@ -125,22 +130,22 @@ func (s *serverStateSyncer) Init(ctx context.Context) error { return errors.Trace(err) } -// WatchChan implements StateSyncer.WatchChan interface. -func (s *serverStateSyncer) WatchChan() clientv3.WatchChan { +// WatchChan implements Syncer.WatchChan interface. +func (s *etcdSyncer) WatchChan() clientv3.WatchChan { return s.globalStateWatcher.WatchChan() } -// Rewatch implements StateSyncer.Rewatch interface. -func (s *serverStateSyncer) Rewatch(ctx context.Context) { +// Rewatch implements Syncer.Rewatch interface. +func (s *etcdSyncer) Rewatch(ctx context.Context) { s.globalStateWatcher.Rewatch(ctx, s.etcdCli, s.etcdPath) } -// IsUpgradingState implements StateSyncer.IsUpgradingState interface. -func (s *serverStateSyncer) IsUpgradingState() bool { +// IsUpgradingState implements Syncer.IsUpgradingState interface. +func (s *etcdSyncer) IsUpgradingState() bool { return s.clusterState.Load().State == StateUpgrading } -func (*serverStateSyncer) getKeyValue(ctx context.Context, etcdCli *clientv3.Client, key string, retryCnt int, timeout time.Duration, opts ...clientv3.OpOption) ([]*mvccpb.KeyValue, error) { +func (*etcdSyncer) getKeyValue(ctx context.Context, etcdCli *clientv3.Client, key string, retryCnt int, timeout time.Duration, opts ...clientv3.OpOption) ([]*mvccpb.KeyValue, error) { var err error var resp *clientv3.GetResponse for i := 0; i < retryCnt; i++ { @@ -167,8 +172,8 @@ func (*serverStateSyncer) getKeyValue(ctx context.Context, etcdCli *clientv3.Cli return nil, errors.Trace(err) } -// GetGlobalState implements StateSyncer.GetGlobalState interface. -func (s *serverStateSyncer) GetGlobalState(ctx context.Context) (*StateInfo, error) { +// GetGlobalState implements Syncer.GetGlobalState interface. +func (s *etcdSyncer) GetGlobalState(ctx context.Context) (*StateInfo, error) { startTime := time.Now() kvs, err := s.getKeyValue(ctx, s.etcdCli, s.etcdPath, keyOpDefaultRetryCnt, keyOpDefaultTimeout) if err != nil { @@ -192,8 +197,8 @@ func (s *serverStateSyncer) GetGlobalState(ctx context.Context) (*StateInfo, err return state, nil } -// UpdateGlobalState implements StateSyncer.UpdateGlobalState interface. -func (s *serverStateSyncer) UpdateGlobalState(ctx context.Context, stateInfo *StateInfo) error { +// UpdateGlobalState implements Syncer.UpdateGlobalState interface. +func (s *etcdSyncer) UpdateGlobalState(ctx context.Context, stateInfo *StateInfo) error { startTime := time.Now() stateStr, err := stateInfo.Marshal() if err != nil { diff --git a/pkg/ddl/syncer/state_syncer_test.go b/pkg/ddl/serverstate/syncer_test.go similarity index 76% rename from pkg/ddl/syncer/state_syncer_test.go rename to pkg/ddl/serverstate/syncer_test.go index 8a6c3952f694e..0c24430ce6bc9 100644 --- a/pkg/ddl/syncer/state_syncer_test.go +++ b/pkg/ddl/serverstate/syncer_test.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package syncer_test +package serverstate_test import ( "context" @@ -21,7 +21,8 @@ import ( "time" . "github.com/pingcap/tidb/pkg/ddl" - "github.com/pingcap/tidb/pkg/ddl/syncer" + "github.com/pingcap/tidb/pkg/ddl/schemaver" + "github.com/pingcap/tidb/pkg/ddl/serverstate" util2 "github.com/pingcap/tidb/pkg/ddl/util" "github.com/pingcap/tidb/pkg/infoschema" "github.com/pingcap/tidb/pkg/session" @@ -29,9 +30,22 @@ import ( "github.com/pingcap/tidb/pkg/store/mockstore" "github.com/pingcap/tidb/pkg/util" "github.com/stretchr/testify/require" + "go.etcd.io/etcd/api/v3/mvccpb" "go.etcd.io/etcd/tests/v3/integration" ) +func checkRespKV(t *testing.T, kvCount int, key, val string, kvs ...*mvccpb.KeyValue) { + require.Len(t, kvs, kvCount) + + if kvCount == 0 { + return + } + + kv := kvs[0] + require.Equal(t, key, string(kv.Key)) + require.Equal(t, val, string(kv.Value)) +} + func TestStateSyncerSimple(t *testing.T) { variable.EnableMDL.Store(false) if runtime.GOOS == "windows" { @@ -39,10 +53,10 @@ func TestStateSyncerSimple(t *testing.T) { } integration.BeforeTestExternal(t) - origin := syncer.CheckVersFirstWaitTime - syncer.CheckVersFirstWaitTime = 0 + origin := schemaver.CheckVersFirstWaitTime + schemaver.CheckVersFirstWaitTime = 0 defer func() { - syncer.CheckVersFirstWaitTime = origin + schemaver.CheckVersFirstWaitTime = origin }() store, err := mockstore.NewMockStore() @@ -62,7 +76,7 @@ func TestStateSyncerSimple(t *testing.T) { ctx, WithEtcdClient(cli), WithStore(store), - WithLease(testLease), + WithLease(5*time.Millisecond), WithInfoCache(ic), WithSchemaLoader(domain), ) @@ -76,14 +90,14 @@ func TestStateSyncerSimple(t *testing.T) { // for GetGlobalState // for the initial state - stateInfo := &syncer.StateInfo{State: syncer.StateNormalRunning} + stateInfo := &serverstate.StateInfo{State: serverstate.StateNormalRunning} respState, err := d.StateSyncer().GetGlobalState(ctx) require.Nil(t, err) require.Equal(t, stateInfo, respState) require.False(t, d.StateSyncer().IsUpgradingState()) // for watchCh var checkErr string - stateInfo.State = syncer.StateUpgrading + stateInfo.State = serverstate.StateUpgrading stateInfoByte, err := stateInfo.Marshal() require.Nil(t, err) checkValue := func() { @@ -94,7 +108,7 @@ func TestStateSyncerSimple(t *testing.T) { return } checkRespKV(t, 1, util2.ServerGlobalState, string(stateInfoByte), resp.Events[0].Kv) - if stateInfo.State == syncer.StateUpgrading { + if stateInfo.State == serverstate.StateUpgrading { require.False(t, d.StateSyncer().IsUpgradingState()) } else { require.True(t, d.StateSyncer().IsUpgradingState()) @@ -103,7 +117,7 @@ func TestStateSyncerSimple(t *testing.T) { respState, err := d.StateSyncer().GetGlobalState(ctx) require.Nil(t, err) require.Equal(t, stateInfo, respState) - if stateInfo.State == syncer.StateUpgrading { + if stateInfo.State == serverstate.StateUpgrading { require.True(t, d.StateSyncer().IsUpgradingState()) } else { require.False(t, d.StateSyncer().IsUpgradingState()) @@ -117,15 +131,15 @@ func TestStateSyncerSimple(t *testing.T) { // for update UpdateGlobalState // for StateUpgrading wg.Run(checkValue) - require.NoError(t, d.StateSyncer().UpdateGlobalState(ctx, &syncer.StateInfo{State: syncer.StateUpgrading})) + require.NoError(t, d.StateSyncer().UpdateGlobalState(ctx, &serverstate.StateInfo{State: serverstate.StateUpgrading})) wg.Wait() require.Equal(t, "", checkErr) // for StateNormalRunning - stateInfo.State = syncer.StateNormalRunning + stateInfo.State = serverstate.StateNormalRunning stateInfoByte, err = stateInfo.Marshal() require.Nil(t, err) wg.Run(checkValue) - require.NoError(t, d.StateSyncer().UpdateGlobalState(ctx, &syncer.StateInfo{State: syncer.StateNormalRunning})) + require.NoError(t, d.StateSyncer().UpdateGlobalState(ctx, &serverstate.StateInfo{State: serverstate.StateNormalRunning})) wg.Wait() require.Equal(t, "", checkErr) } diff --git a/pkg/ddl/stat_test.go b/pkg/ddl/stat_test.go index 562e51e155545..b46350cbe1132 100644 --- a/pkg/ddl/stat_test.go +++ b/pkg/ddl/stat_test.go @@ -23,7 +23,6 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/tidb/pkg/ddl" "github.com/pingcap/tidb/pkg/ddl/util" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/model" @@ -32,6 +31,7 @@ import ( sessiontypes "github.com/pingcap/tidb/pkg/session/types" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/testkit/external" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/types" "github.com/stretchr/testify/require" ) @@ -114,7 +114,7 @@ func buildCreateIdxJob(dbInfo *model.DBInfo, tblInfo *model.TableInfo, unique bo func TestIssue42268(t *testing.T) { // issue 42268 missing table name in 'admin show ddl' result during drop table - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("drop table if exists t_0") @@ -127,8 +127,7 @@ func TestIssue42268(t *testing.T) { tk1 := testkit.NewTestKit(t, store) tk1.MustExec("use test") - hook := &callback.TestDDLCallback{Do: dom} - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if tbl.Meta().ID != job.TableID { return } @@ -139,8 +138,7 @@ func TestIssue42268(t *testing.T) { tblName := fmt.Sprintf("%s", rs.Rows()[0][2]) require.Equal(t, tblName, "t_0") } - } - dom.DDL().SetHook(hook) + }) tk.MustExec("drop table t_0") } diff --git a/pkg/ddl/table.go b/pkg/ddl/table.go index 0603b5b524e78..b32e9e6e83134 100644 --- a/pkg/ddl/table.go +++ b/pkg/ddl/table.go @@ -30,7 +30,6 @@ import ( sess "github.com/pingcap/tidb/pkg/ddl/session" "github.com/pingcap/tidb/pkg/domain/infosync" "github.com/pingcap/tidb/pkg/infoschema" - "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/meta" "github.com/pingcap/tidb/pkg/meta/autoid" "github.com/pingcap/tidb/pkg/parser/ast" @@ -50,251 +49,6 @@ import ( const tiflashCheckTiDBHTTPAPIHalfInterval = 2500 * time.Millisecond -// DANGER: it is an internal function used by onCreateTable and onCreateTables, for reusing code. Be careful. -// 1. it expects the argument of job has been deserialized. -// 2. it won't call updateSchemaVersion, FinishTableJob and asyncNotifyEvent. -func createTable(d *ddlCtx, t *meta.Meta, job *model.Job, fkCheck bool) (*model.TableInfo, error) { - schemaID := job.SchemaID - tbInfo := job.Args[0].(*model.TableInfo) - - tbInfo.State = model.StateNone - var err error - if variable.EnableFastCreateTable.Load() { - err = checkTableNotExistsByName(d, t, schemaID, job.SchemaName, tbInfo.Name.L) - } else { - err = checkTableNotExists(d, schemaID, tbInfo.Name.L) - } - if err != nil { - if infoschema.ErrDatabaseNotExists.Equal(err) || infoschema.ErrTableExists.Equal(err) { - job.State = model.JobStateCancelled - } - return tbInfo, errors.Trace(err) - } - - err = checkConstraintNamesNotExists(t, schemaID, tbInfo.Constraints) - if err != nil { - if infoschema.ErrCheckConstraintDupName.Equal(err) { - job.State = model.JobStateCancelled - } - return tbInfo, errors.Trace(err) - } - - retryable, err := checkTableForeignKeyValidInOwner(d, t, job, tbInfo, fkCheck) - if err != nil { - if !retryable { - job.State = model.JobStateCancelled - } - return tbInfo, errors.Trace(err) - } - // Allocate foreign key ID. - for _, fkInfo := range tbInfo.ForeignKeys { - fkInfo.ID = allocateFKIndexID(tbInfo) - fkInfo.State = model.StatePublic - } - switch tbInfo.State { - case model.StateNone: - // none -> public - tbInfo.State = model.StatePublic - tbInfo.UpdateTS = t.StartTS - err = createTableOrViewWithCheck(t, job, schemaID, tbInfo) - if err != nil { - return tbInfo, errors.Trace(err) - } - - failpoint.Inject("checkOwnerCheckAllVersionsWaitTime", func(val failpoint.Value) { - if val.(bool) { - failpoint.Return(tbInfo, errors.New("mock create table error")) - } - }) - - // build table & partition bundles if any. - if err = checkAllTablePlacementPoliciesExistAndCancelNonExistJob(t, job, tbInfo); err != nil { - return tbInfo, errors.Trace(err) - } - - if tbInfo.TiFlashReplica != nil { - replicaInfo := tbInfo.TiFlashReplica - if pi := tbInfo.GetPartitionInfo(); pi != nil { - logutil.DDLLogger().Info("Set TiFlash replica pd rule for partitioned table when creating", zap.Int64("tableID", tbInfo.ID)) - if e := infosync.ConfigureTiFlashPDForPartitions(false, &pi.Definitions, replicaInfo.Count, &replicaInfo.LocationLabels, tbInfo.ID); e != nil { - job.State = model.JobStateCancelled - return tbInfo, errors.Trace(e) - } - // Partitions that in adding mid-state. They have high priorities, so we should set accordingly pd rules. - if e := infosync.ConfigureTiFlashPDForPartitions(true, &pi.AddingDefinitions, replicaInfo.Count, &replicaInfo.LocationLabels, tbInfo.ID); e != nil { - job.State = model.JobStateCancelled - return tbInfo, errors.Trace(e) - } - } else { - logutil.DDLLogger().Info("Set TiFlash replica pd rule when creating", zap.Int64("tableID", tbInfo.ID)) - if e := infosync.ConfigureTiFlashPDForTable(tbInfo.ID, replicaInfo.Count, &replicaInfo.LocationLabels); e != nil { - job.State = model.JobStateCancelled - return tbInfo, errors.Trace(e) - } - } - } - - bundles, err := placement.NewFullTableBundles(t, tbInfo) - if err != nil { - job.State = model.JobStateCancelled - return tbInfo, errors.Trace(err) - } - - // Send the placement bundle to PD. - err = infosync.PutRuleBundlesWithDefaultRetry(context.TODO(), bundles) - if err != nil { - job.State = model.JobStateCancelled - return tbInfo, errors.Wrapf(err, "failed to notify PD the placement rules") - } - - return tbInfo, nil - default: - return tbInfo, dbterror.ErrInvalidDDLState.GenWithStackByArgs("table", tbInfo.State) - } -} - -func onCreateTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { - failpoint.Inject("mockExceedErrorLimit", func(val failpoint.Value) { - if val.(bool) { - failpoint.Return(ver, errors.New("mock do job error")) - } - }) - - // just decode, createTable will use it as Args[0] - tbInfo := &model.TableInfo{} - fkCheck := false - if err := job.DecodeArgs(tbInfo, &fkCheck); err != nil { - // Invalid arguments, cancel this job. - job.State = model.JobStateCancelled - return ver, errors.Trace(err) - } - - if len(tbInfo.ForeignKeys) > 0 { - return createTableWithForeignKeys(d, t, job, tbInfo, fkCheck) - } - - tbInfo, err := createTable(d, t, job, fkCheck) - if err != nil { - return ver, errors.Trace(err) - } - - ver, err = updateSchemaVersion(d, t, job) - if err != nil { - return ver, errors.Trace(err) - } - - // Finish this job. - job.FinishTableJob(model.JobStateDone, model.StatePublic, ver, tbInfo) - createTableEvent := statsutil.NewCreateTableEvent( - job.SchemaID, - tbInfo, - ) - asyncNotifyEvent(d, createTableEvent) - return ver, errors.Trace(err) -} - -func createTableWithForeignKeys(d *ddlCtx, t *meta.Meta, job *model.Job, tbInfo *model.TableInfo, fkCheck bool) (ver int64, err error) { - switch tbInfo.State { - case model.StateNone, model.StatePublic: - // create table in non-public or public state. The function `createTable` will always reset - // the `tbInfo.State` with `model.StateNone`, so it's fine to just call the `createTable` with - // public state. - // when `br` restores table, the state of `tbInfo` will be public. - tbInfo, err = createTable(d, t, job, fkCheck) - if err != nil { - return ver, errors.Trace(err) - } - tbInfo.State = model.StateWriteOnly - ver, err = updateVersionAndTableInfo(d, t, job, tbInfo, true) - if err != nil { - return ver, errors.Trace(err) - } - job.SchemaState = model.StateWriteOnly - case model.StateWriteOnly: - tbInfo.State = model.StatePublic - ver, err = updateVersionAndTableInfo(d, t, job, tbInfo, true) - if err != nil { - return ver, errors.Trace(err) - } - job.FinishTableJob(model.JobStateDone, model.StatePublic, ver, tbInfo) - createTableEvent := statsutil.NewCreateTableEvent( - job.SchemaID, - tbInfo, - ) - asyncNotifyEvent(d, createTableEvent) - return ver, nil - default: - return ver, errors.Trace(dbterror.ErrInvalidDDLJob.GenWithStackByArgs("table", tbInfo.State)) - } - return ver, errors.Trace(err) -} - -func onCreateTables(d *ddlCtx, t *meta.Meta, job *model.Job) (int64, error) { - var ver int64 - - var args []*model.TableInfo - fkCheck := false - err := job.DecodeArgs(&args, &fkCheck) - if err != nil { - // Invalid arguments, cancel this job. - job.State = model.JobStateCancelled - return ver, errors.Trace(err) - } - - // We don't construct jobs for every table, but only tableInfo - // The following loop creates a stub job for every table - // - // it clones a stub job from the ActionCreateTables job - stubJob := job.Clone() - stubJob.Args = make([]any, 1) - for i := range args { - stubJob.TableID = args[i].ID - stubJob.Args[0] = args[i] - if args[i].Sequence != nil { - err := createSequenceWithCheck(t, stubJob, args[i]) - if err != nil { - job.State = model.JobStateCancelled - return ver, errors.Trace(err) - } - } else { - tbInfo, err := createTable(d, t, stubJob, fkCheck) - if err != nil { - job.State = model.JobStateCancelled - return ver, errors.Trace(err) - } - args[i] = tbInfo - } - } - - ver, err = updateSchemaVersion(d, t, job) - if err != nil { - return ver, errors.Trace(err) - } - - job.State = model.JobStateDone - job.SchemaState = model.StatePublic - job.BinlogInfo.SetTableInfos(ver, args) - - for i := range args { - createTableEvent := statsutil.NewCreateTableEvent( - job.SchemaID, - args[i], - ) - asyncNotifyEvent(d, createTableEvent) - } - - return ver, errors.Trace(err) -} - -func createTableOrViewWithCheck(t *meta.Meta, job *model.Job, schemaID int64, tbInfo *model.TableInfo) error { - err := checkTableInfoValid(tbInfo) - if err != nil { - job.State = model.JobStateCancelled - return errors.Trace(err) - } - return t.CreateTableOrView(schemaID, job.SchemaName, tbInfo) -} - func repairTableOrViewWithCheck(t *meta.Meta, job *model.Job, schemaID int64, tbInfo *model.TableInfo) error { err := checkTableInfoValid(tbInfo) if err != nil { @@ -304,70 +58,7 @@ func repairTableOrViewWithCheck(t *meta.Meta, job *model.Job, schemaID int64, tb return t.UpdateTable(schemaID, tbInfo) } -func onCreateView(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { - schemaID := job.SchemaID - tbInfo := &model.TableInfo{} - var orReplace bool - var _placeholder int64 // oldTblInfoID - if err := job.DecodeArgs(tbInfo, &orReplace, &_placeholder); err != nil { - // Invalid arguments, cancel this job. - job.State = model.JobStateCancelled - return ver, errors.Trace(err) - } - tbInfo.State = model.StateNone - - oldTableID, err := findTableIDByName(d, t, schemaID, tbInfo.Name.L) - if infoschema.ErrTableNotExists.Equal(err) { - err = nil - } - failpoint.InjectCall("onDDLCreateView", job) - if err != nil { - if infoschema.ErrDatabaseNotExists.Equal(err) { - job.State = model.JobStateCancelled - return ver, errors.Trace(err) - } else if !infoschema.ErrTableExists.Equal(err) { - return ver, errors.Trace(err) - } - if !orReplace { - job.State = model.JobStateCancelled - return ver, errors.Trace(err) - } - } - ver, err = updateSchemaVersion(d, t, job) - if err != nil { - return ver, errors.Trace(err) - } - switch tbInfo.State { - case model.StateNone: - // none -> public - tbInfo.State = model.StatePublic - tbInfo.UpdateTS = t.StartTS - if oldTableID > 0 && orReplace { - err = t.DropTableOrView(schemaID, job.SchemaName, oldTableID, tbInfo.Name.L) - if err != nil { - job.State = model.JobStateCancelled - return ver, errors.Trace(err) - } - err = t.GetAutoIDAccessors(schemaID, oldTableID).Del() - if err != nil { - job.State = model.JobStateCancelled - return ver, errors.Trace(err) - } - } - err = createTableOrViewWithCheck(t, job, schemaID, tbInfo) - if err != nil { - job.State = model.JobStateCancelled - return ver, errors.Trace(err) - } - // Finish this job. - job.FinishTableJob(model.JobStateDone, model.StatePublic, ver, tbInfo) - return ver, nil - default: - return ver, dbterror.ErrInvalidDDLState.GenWithStackByArgs("table", tbInfo.State) - } -} - -func onDropTableOrView(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func onDropTableOrView(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { tblInfo, err := checkTableExistAndCancelNonExistJob(t, job, job.SchemaID) if err != nil { return ver, errors.Trace(err) @@ -378,20 +69,20 @@ func onDropTableOrView(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ er case model.StatePublic: // public -> write only if job.Type == model.ActionDropTable { - err = checkDropTableHasForeignKeyReferredInOwner(d, t, job) + err = checkDropTableHasForeignKeyReferredInOwner(jobCtx.infoCache, job) if err != nil { return ver, err } } tblInfo.State = model.StateWriteOnly - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, originalState != tblInfo.State) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, originalState != tblInfo.State) if err != nil { return ver, errors.Trace(err) } case model.StateWriteOnly: // write only -> delete only tblInfo.State = model.StateDeleteOnly - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, originalState != tblInfo.State) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, originalState != tblInfo.State) if err != nil { return ver, errors.Trace(err) } @@ -401,16 +92,16 @@ func onDropTableOrView(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ er ruleIDs := append(getPartitionRuleIDs(job.SchemaName, tblInfo), fmt.Sprintf(label.TableIDFormat, label.IDPrefix, job.SchemaName, tblInfo.Name.L)) job.CtxVars = []any{oldIDs} - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, originalState != tblInfo.State) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, originalState != tblInfo.State) if err != nil { return ver, errors.Trace(err) } if tblInfo.IsSequence() { - if err = t.DropSequence(job.SchemaID, job.SchemaName, job.TableID, job.TableName); err != nil { + if err = t.DropSequence(job.SchemaID, job.TableID); err != nil { return ver, errors.Trace(err) } } else { - if err = t.DropTableOrView(job.SchemaID, job.SchemaName, job.TableID, job.TableName); err != nil { + if err = t.DropTableOrView(job.SchemaID, job.TableID); err != nil { return ver, errors.Trace(err) } if err = t.GetAutoIDAccessors(job.SchemaID, job.TableID).Del(); err != nil { @@ -435,7 +126,7 @@ func onDropTableOrView(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ er job.SchemaID, tblInfo, ) - asyncNotifyEvent(d, dropTableEvent) + asyncNotifyEvent(jobCtx, dropTableEvent) } default: return ver, errors.Trace(dbterror.ErrInvalidDDLState.GenWithStackByArgs("table", tblInfo.State)) @@ -444,7 +135,7 @@ func onDropTableOrView(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ er return ver, errors.Trace(err) } -func (w *worker) onRecoverTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) { +func (w *worker) onRecoverTable(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, err error) { var ( recoverInfo *RecoverInfo recoverTableCheckFlag int64 @@ -469,7 +160,7 @@ func (w *worker) onRecoverTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver in return ver, errors.Trace(err) } - err = checkTableNotExists(d, schemaID, tblInfo.Name.L) + err = checkTableNotExists(jobCtx.infoCache, schemaID, tblInfo.Name.L) if err != nil { if infoschema.ErrDatabaseNotExists.Equal(err) || infoschema.ErrTableExists.Equal(err) { job.State = model.JobStateCancelled @@ -536,7 +227,7 @@ func (w *worker) onRecoverTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver in tableInfo := tblInfo.Clone() tableInfo.State = model.StatePublic tableInfo.UpdateTS = t.StartTS - ver, err = updateVersionAndTableInfo(d, t, job, tableInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tableInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -576,7 +267,7 @@ func (w *worker) recoverTable(t *meta.Meta, job *model.Job, recoverInfo *Recover tableInfo := recoverInfo.TableInfo.Clone() tableInfo.State = model.StatePublic tableInfo.UpdateTS = t.StartTS - err = t.CreateTableAndSetAutoID(recoverInfo.SchemaID, recoverInfo.OldSchemaName, tableInfo, recoverInfo.AutoIDs) + err = t.CreateTableAndSetAutoID(recoverInfo.SchemaID, tableInfo, recoverInfo.AutoIDs) if err != nil { return ver, errors.Trace(err) } @@ -732,7 +423,7 @@ func getTableInfo(t *meta.Meta, tableID, schemaID int64) (*model.TableInfo, erro // onTruncateTable delete old table meta, and creates a new table identical to old table except for table ID. // As all the old data is encoded with old table ID, it can not be accessed anymore. // A background job will be created to delete old data. -func (w *worker) onTruncateTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func (w *worker) onTruncateTable(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { schemaID := job.SchemaID tableID := job.TableID var newTableID int64 @@ -753,11 +444,11 @@ func (w *worker) onTruncateTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver i } // Copy the old tableInfo for later usage. oldTblInfo := tblInfo.Clone() - err = checkTruncateTableHasForeignKeyReferredInOwner(d, t, job, tblInfo, fkCheck) + err = checkTruncateTableHasForeignKeyReferredInOwner(jobCtx.infoCache, job, tblInfo, fkCheck) if err != nil { return ver, err } - err = t.DropTableOrView(schemaID, job.SchemaName, tblInfo.ID, tblInfo.Name.L) + err = t.DropTableOrView(schemaID, tblInfo.ID) if err != nil { job.State = model.JobStateCancelled return ver, errors.Trace(err) @@ -854,7 +545,7 @@ func (w *worker) onTruncateTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver i return 0, errors.Wrapf(err, "failed to notify PD the placement rules") } - err = t.CreateTableOrView(schemaID, job.SchemaName, tblInfo) + err = t.CreateTableOrView(schemaID, tblInfo) if err != nil { job.State = model.JobStateCancelled return ver, errors.Trace(err) @@ -870,9 +561,9 @@ func (w *worker) onTruncateTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver i if pi := tblInfo.GetPartitionInfo(); pi != nil { partitions = tblInfo.GetPartitionInfo().Definitions } - preSplitAndScatter(w.sess.Context, d.store, tblInfo, partitions) + preSplitAndScatter(w.sess.Context, jobCtx.store, tblInfo, partitions) - ver, err = updateSchemaVersion(d, t, job) + ver, err = updateSchemaVersion(jobCtx, t, job) if err != nil { return ver, errors.Trace(err) } @@ -882,21 +573,21 @@ func (w *worker) onTruncateTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver i tblInfo, oldTblInfo, ) - asyncNotifyEvent(d, truncateTableEvent) + asyncNotifyEvent(jobCtx, truncateTableEvent) startKey := tablecodec.EncodeTablePrefix(tableID) job.Args = []any{startKey, oldPartitionIDs} return ver, nil } -func onRebaseAutoIncrementIDType(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { - return onRebaseAutoID(d, d.store, t, job, autoid.AutoIncrementType) +func onRebaseAutoIncrementIDType(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { + return onRebaseAutoID(jobCtx, t, job, autoid.AutoIncrementType) } -func onRebaseAutoRandomType(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { - return onRebaseAutoID(d, d.store, t, job, autoid.AutoRandomType) +func onRebaseAutoRandomType(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { + return onRebaseAutoID(jobCtx, t, job, autoid.AutoRandomType) } -func onRebaseAutoID(d *ddlCtx, _ kv.Storage, t *meta.Meta, job *model.Job, tp autoid.AllocatorType) (ver int64, _ error) { +func onRebaseAutoID(jobCtx *jobContext, t *meta.Meta, job *model.Job, tp autoid.AllocatorType) (ver int64, _ error) { schemaID := job.SchemaID var ( newBase int64 @@ -919,7 +610,7 @@ func onRebaseAutoID(d *ddlCtx, _ kv.Storage, t *meta.Meta, job *model.Job, tp au return ver, errors.Trace(err) } - tbl, err := getTable(d.getAutoIDRequirement(), schemaID, tblInfo) + tbl, err := getTable(jobCtx.getAutoIDRequirement(), schemaID, tblInfo) if err != nil { job.State = model.JobStateCancelled return ver, errors.Trace(err) @@ -957,7 +648,7 @@ func onRebaseAutoID(d *ddlCtx, _ kv.Storage, t *meta.Meta, job *model.Job, tp au return ver, errors.Trace(err) } } - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -965,7 +656,7 @@ func onRebaseAutoID(d *ddlCtx, _ kv.Storage, t *meta.Meta, job *model.Job, tp au return ver, nil } -func onModifyTableAutoIDCache(d *ddlCtx, t *meta.Meta, job *model.Job) (int64, error) { +func onModifyTableAutoIDCache(jobCtx *jobContext, t *meta.Meta, job *model.Job) (int64, error) { var cache int64 if err := job.DecodeArgs(&cache); err != nil { job.State = model.JobStateCancelled @@ -978,7 +669,7 @@ func onModifyTableAutoIDCache(d *ddlCtx, t *meta.Meta, job *model.Job) (int64, e } tblInfo.AutoIdCache = cache - ver, err := updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err := updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -986,7 +677,7 @@ func onModifyTableAutoIDCache(d *ddlCtx, t *meta.Meta, job *model.Job) (int64, e return ver, nil } -func (w *worker) onShardRowID(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func (w *worker) onShardRowID(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { var shardRowIDBits uint64 err := job.DecodeArgs(&shardRowIDBits) if err != nil { @@ -1001,7 +692,7 @@ func (w *worker) onShardRowID(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int6 if shardRowIDBits < tblInfo.ShardRowIDBits { tblInfo.ShardRowIDBits = shardRowIDBits } else { - tbl, err := getTable(d.getAutoIDRequirement(), job.SchemaID, tblInfo) + tbl, err := getTable(jobCtx.getAutoIDRequirement(), job.SchemaID, tblInfo) if err != nil { return ver, errors.Trace(err) } @@ -1014,7 +705,7 @@ func (w *worker) onShardRowID(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int6 // MaxShardRowIDBits use to check the overflow of auto ID. tblInfo.MaxShardRowIDBits = shardRowIDBits } - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { job.State = model.JobStateCancelled return ver, errors.Trace(err) @@ -1043,7 +734,7 @@ func verifyNoOverflowShardBits(s *sess.Pool, tbl table.Table, shardRowIDBits uin return nil } -func onRenameTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func onRenameTable(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { var oldSchemaID int64 var oldSchemaName model.CIStr var tableName model.CIStr @@ -1054,10 +745,10 @@ func onRenameTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) } if job.SchemaState == model.StatePublic { - return finishJobRenameTable(d, t, job) + return finishJobRenameTable(jobCtx, t, job) } newSchemaID := job.SchemaID - err := checkTableNotExists(d, newSchemaID, tableName.L) + err := checkTableNotExists(jobCtx.infoCache, newSchemaID, tableName.L) if err != nil { if infoschema.ErrDatabaseNotExists.Equal(err) || infoschema.ErrTableExists.Equal(err) { job.State = model.JobStateCancelled @@ -1075,11 +766,11 @@ func onRenameTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) return ver, errors.Trace(err) } fkh := newForeignKeyHelper() - err = adjustForeignKeyChildTableInfoAfterRenameTable(d, t, job, &fkh, tblInfo, oldSchemaName, oldTableName, tableName, newSchemaID) + err = adjustForeignKeyChildTableInfoAfterRenameTable(jobCtx.infoCache, t, job, &fkh, tblInfo, oldSchemaName, oldTableName, tableName, newSchemaID) if err != nil { return ver, errors.Trace(err) } - ver, err = updateSchemaVersion(d, t, job, fkh.getLoadedTables()...) + ver, err = updateSchemaVersion(jobCtx, t, job, fkh.getLoadedTables()...) if err != nil { return ver, errors.Trace(err) } @@ -1087,7 +778,7 @@ func onRenameTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) return ver, nil } -func onRenameTables(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func onRenameTables(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { oldSchemaIDs := []int64{} newSchemaIDs := []int64{} tableNames := []*model.CIStr{} @@ -1100,7 +791,7 @@ func onRenameTables(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error } if job.SchemaState == model.StatePublic { - return finishJobRenameTables(d, t, job, tableNames, tableIDs, newSchemaIDs) + return finishJobRenameTables(jobCtx, t, job, tableNames, tableIDs, newSchemaIDs) } var err error @@ -1116,13 +807,13 @@ func onRenameTables(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error if err != nil { return ver, errors.Trace(err) } - err = adjustForeignKeyChildTableInfoAfterRenameTable(d, t, job, &fkh, tblInfo, *oldSchemaNames[i], *oldTableNames[i], *tableNames[i], newSchemaIDs[i]) + err = adjustForeignKeyChildTableInfoAfterRenameTable(jobCtx.infoCache, t, job, &fkh, tblInfo, *oldSchemaNames[i], *oldTableNames[i], *tableNames[i], newSchemaIDs[i]) if err != nil { return ver, errors.Trace(err) } } - ver, err = updateSchemaVersion(d, t, job, fkh.getLoadedTables()...) + ver, err = updateSchemaVersion(jobCtx, t, job, fkh.getLoadedTables()...) if err != nil { return ver, errors.Trace(err) } @@ -1131,7 +822,7 @@ func onRenameTables(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error } func checkAndRenameTables(t *meta.Meta, job *model.Job, tblInfo *model.TableInfo, oldSchemaID, newSchemaID int64, oldSchemaName, tableName *model.CIStr) (ver int64, _ error) { - err := t.DropTableOrView(oldSchemaID, oldSchemaName.L, tblInfo.ID, tblInfo.Name.L) + err := t.DropTableOrView(oldSchemaID, tblInfo.ID) if err != nil { job.State = model.JobStateCancelled return ver, errors.Trace(err) @@ -1166,7 +857,7 @@ func checkAndRenameTables(t *meta.Meta, job *model.Job, tblInfo *model.TableInfo } tblInfo.Name = *tableName - err = t.CreateTableOrView(newSchemaID, job.SchemaName, tblInfo) + err = t.CreateTableOrView(newSchemaID, tblInfo) if err != nil { job.State = model.JobStateCancelled return ver, errors.Trace(err) @@ -1181,14 +872,11 @@ func checkAndRenameTables(t *meta.Meta, job *model.Job, tblInfo *model.TableInfo return ver, nil } -func adjustForeignKeyChildTableInfoAfterRenameTable(d *ddlCtx, t *meta.Meta, job *model.Job, fkh *foreignKeyHelper, tblInfo *model.TableInfo, oldSchemaName, oldTableName, newTableName model.CIStr, newSchemaID int64) error { +func adjustForeignKeyChildTableInfoAfterRenameTable(infoCache *infoschema.InfoCache, t *meta.Meta, job *model.Job, fkh *foreignKeyHelper, tblInfo *model.TableInfo, oldSchemaName, oldTableName, newTableName model.CIStr, newSchemaID int64) error { if !variable.EnableForeignKey.Load() || newTableName.L == oldTableName.L { return nil } - is, err := getAndCheckLatestInfoSchema(d, t) - if err != nil { - return err - } + is := infoCache.GetLatest() newDB, ok := is.SchemaByID(newSchemaID) if !ok { job.State = model.JobStateCancelled @@ -1215,7 +903,7 @@ func adjustForeignKeyChildTableInfoAfterRenameTable(d *ddlCtx, t *meta.Meta, job childFKInfo.RefTable = newTableName } for _, info := range fkh.loaded { - err = updateTable(t, info.schemaID, info.tblInfo) + err := updateTable(t, info.schemaID, info.tblInfo) if err != nil { return err } @@ -1233,7 +921,7 @@ func adjustForeignKeyChildTableInfoAfterRenameTable(d *ddlCtx, t *meta.Meta, job // there may be DMLs that use the old schema. // - TiCDC cannot handle the DMLs that use the old schema, because // the commit TS of the DMLs are greater than the job state updating TS. -func finishJobRenameTable(d *ddlCtx, t *meta.Meta, job *model.Job) (int64, error) { +func finishJobRenameTable(jobCtx *jobContext, t *meta.Meta, job *model.Job) (int64, error) { tblInfo, err := getTableInfo(t, job.TableID, job.SchemaID) if err != nil { job.State = model.JobStateCancelled @@ -1248,7 +936,7 @@ func finishJobRenameTable(d *ddlCtx, t *meta.Meta, job *model.Job) (int64, error if err != nil { return 0, errors.Trace(err) } - ver, err := updateSchemaVersion(d, t, job) + ver, err := updateSchemaVersion(jobCtx, t, job) if err != nil { return ver, errors.Trace(err) } @@ -1257,7 +945,7 @@ func finishJobRenameTable(d *ddlCtx, t *meta.Meta, job *model.Job) (int64, error return ver, nil } -func finishJobRenameTables(d *ddlCtx, t *meta.Meta, job *model.Job, +func finishJobRenameTables(jobCtx *jobContext, t *meta.Meta, job *model.Job, tableNames []*model.CIStr, tableIDs, newSchemaIDs []int64) (int64, error) { tblSchemaIDs := make(map[int64]int64, len(tableIDs)) for i := range tableIDs { @@ -1283,7 +971,7 @@ func finishJobRenameTables(d *ddlCtx, t *meta.Meta, job *model.Job, if err != nil { return 0, errors.Trace(err) } - ver, err := updateSchemaVersion(d, t, job) + ver, err := updateSchemaVersion(jobCtx, t, job) if err != nil { return ver, errors.Trace(err) } @@ -1292,7 +980,7 @@ func finishJobRenameTables(d *ddlCtx, t *meta.Meta, job *model.Job, return ver, nil } -func onModifyTableComment(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func onModifyTableComment(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { var comment string if err := job.DecodeArgs(&comment); err != nil { job.State = model.JobStateCancelled @@ -1310,7 +998,7 @@ func onModifyTableComment(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ } tblInfo.Comment = comment - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -1318,7 +1006,7 @@ func onModifyTableComment(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ return ver, nil } -func onModifyTableCharsetAndCollate(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func onModifyTableCharsetAndCollate(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { var toCharset, toCollate string var needsOverwriteCols bool if err := job.DecodeArgs(&toCharset, &toCollate, &needsOverwriteCols); err != nil { @@ -1364,7 +1052,7 @@ func onModifyTableCharsetAndCollate(d *ddlCtx, t *meta.Meta, job *model.Job) (ve } } - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -1372,7 +1060,7 @@ func onModifyTableCharsetAndCollate(d *ddlCtx, t *meta.Meta, job *model.Job) (ve return ver, nil } -func (w *worker) onSetTableFlashReplica(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func (w *worker) onSetTableFlashReplica(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { var replicaInfo ast.TiFlashReplicaSpec if err := job.DecodeArgs(&replicaInfo); err != nil { job.State = model.JobStateCancelled @@ -1434,7 +1122,7 @@ func (w *worker) onSetTableFlashReplica(d *ddlCtx, t *meta.Meta, job *model.Job) tblInfo.TiFlashReplica = nil } - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -1452,7 +1140,7 @@ func (w *worker) checkTiFlashReplicaCount(replicaCount uint64) error { return checkTiFlashReplicaCount(ctx, replicaCount) } -func onUpdateFlashReplicaStatus(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func onUpdateFlashReplicaStatus(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { var available bool var physicalID int64 if err := job.DecodeArgs(&available, &physicalID); err != nil { @@ -1504,7 +1192,7 @@ func onUpdateFlashReplicaStatus(d *ddlCtx, t *meta.Meta, job *model.Job) (ver in if tblInfo.TiFlashReplica.Available { logutil.DDLLogger().Info("TiFlash replica available", zap.Int64("tableID", tblInfo.ID)) } - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -1525,24 +1213,11 @@ func onUpdateFlashReplicaStatus(d *ddlCtx, t *meta.Meta, job *model.Job) (ver in // jobs in the order of job id. During syncing J1, B should have synced the schema // with the latest schema version, so when B runs J2, below check will see the table // T already exists, and J2 will fail. -func checkTableNotExists(d *ddlCtx, schemaID int64, tableName string) error { - is := d.infoCache.GetLatest() +func checkTableNotExists(infoCache *infoschema.InfoCache, schemaID int64, tableName string) error { + is := infoCache.GetLatest() return checkTableNotExistsFromInfoSchema(is, schemaID, tableName) } -func checkTableNotExistsByName(d *ddlCtx, t *meta.Meta, schemaID int64, schemaName, tableName string) error { - // Try to use memory schema info to check first. - currVer, err := t.GetSchemaVersion() - if err != nil { - return err - } - is := d.infoCache.GetLatest() - if is != nil && is.SchemaMetaVersion() == currVer { - return checkTableNotExistsFromInfoSchema(is, schemaID, tableName) - } - return t.CheckTableNameNotExists(t.TableNameKey(schemaName, tableName)) -} - func checkConstraintNamesNotExists(t *meta.Meta, schemaID int64, constraints []*model.ConstraintInfo) error { if len(constraints) == 0 { return nil @@ -1591,50 +1266,8 @@ func checkTableNotExistsFromInfoSchema(is infoschema.InfoSchema, schemaID int64, return nil } -func findTableIDByName(d *ddlCtx, t *meta.Meta, schemaID int64, tableName string) (int64, error) { - // Try to use memory schema info to check first. - currVer, err := t.GetSchemaVersion() - if err != nil { - return 0, err - } - is := d.infoCache.GetLatest() - if is != nil && is.SchemaMetaVersion() == currVer { - return findTableIDFromInfoSchema(is, schemaID, tableName) - } - - return findTableIDFromStore(t, schemaID, tableName) -} - -func findTableIDFromInfoSchema(is infoschema.InfoSchema, schemaID int64, tableName string) (int64, error) { - schema, ok := is.SchemaByID(schemaID) - if !ok { - return 0, infoschema.ErrDatabaseNotExists.GenWithStackByArgs("") - } - tbl, err := is.TableByName(context.Background(), schema.Name, model.NewCIStr(tableName)) - if err != nil { - return 0, err - } - return tbl.Meta().ID, nil -} - -func findTableIDFromStore(t *meta.Meta, schemaID int64, tableName string) (int64, error) { - tbls, err := t.ListSimpleTables(schemaID) - if err != nil { - if meta.ErrDBNotExists.Equal(err) { - return 0, infoschema.ErrDatabaseNotExists.GenWithStackByArgs("") - } - return 0, errors.Trace(err) - } - for _, tbl := range tbls { - if tbl.Name.L == tableName { - return tbl.ID, nil - } - } - return 0, infoschema.ErrTableNotExists.FastGenByArgs(tableName) -} - // updateVersionAndTableInfoWithCheck checks table info validate and updates the schema version and the table information -func updateVersionAndTableInfoWithCheck(d *ddlCtx, t *meta.Meta, job *model.Job, tblInfo *model.TableInfo, shouldUpdateVer bool, multiInfos ...schemaIDAndTableInfo) ( +func updateVersionAndTableInfoWithCheck(jobCtx *jobContext, t *meta.Meta, job *model.Job, tblInfo *model.TableInfo, shouldUpdateVer bool, multiInfos ...schemaIDAndTableInfo) ( ver int64, err error) { err = checkTableInfoValid(tblInfo) if err != nil { @@ -1648,11 +1281,11 @@ func updateVersionAndTableInfoWithCheck(d *ddlCtx, t *meta.Meta, job *model.Job, return ver, errors.Trace(err) } } - return updateVersionAndTableInfo(d, t, job, tblInfo, shouldUpdateVer, multiInfos...) + return updateVersionAndTableInfo(jobCtx, t, job, tblInfo, shouldUpdateVer, multiInfos...) } // updateVersionAndTableInfo updates the schema version and the table information. -func updateVersionAndTableInfo(d *ddlCtx, t *meta.Meta, job *model.Job, tblInfo *model.TableInfo, shouldUpdateVer bool, multiInfos ...schemaIDAndTableInfo) ( +func updateVersionAndTableInfo(jobCtx *jobContext, t *meta.Meta, job *model.Job, tblInfo *model.TableInfo, shouldUpdateVer bool, multiInfos ...schemaIDAndTableInfo) ( ver int64, err error) { failpoint.Inject("mockUpdateVersionAndTableInfoErr", func(val failpoint.Value) { switch val.(int) { @@ -1667,7 +1300,7 @@ func updateVersionAndTableInfo(d *ddlCtx, t *meta.Meta, job *model.Job, tblInfo } }) if shouldUpdateVer && (job.MultiSchemaInfo == nil || !job.MultiSchemaInfo.SkipVersion) { - ver, err = updateSchemaVersion(d, t, job, multiInfos...) + ver, err = updateSchemaVersion(jobCtx, t, job, multiInfos...) if err != nil { return 0, errors.Trace(err) } @@ -1698,7 +1331,7 @@ type schemaIDAndTableInfo struct { tblInfo *model.TableInfo } -func onRepairTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) { +func onRepairTable(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) { schemaID := job.SchemaID tblInfo := &model.TableInfo{} @@ -1719,7 +1352,7 @@ func onRepairTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) // When in repair mode, the repaired table in a server is not access to user, // the table after repairing will be removed from repair list. Other server left // behind alive may need to restart to get the latest schema version. - ver, err = updateSchemaVersion(d, t, job) + ver, err = updateSchemaVersion(jobCtx, t, job) if err != nil { return ver, errors.Trace(err) } @@ -1740,7 +1373,7 @@ func onRepairTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error) } } -func onAlterTableAttributes(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) { +func onAlterTableAttributes(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, err error) { rule := label.NewRule() err = job.DecodeArgs(rule) if err != nil { @@ -1763,7 +1396,7 @@ func onAlterTableAttributes(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, job.State = model.JobStateCancelled return 0, errors.Wrapf(err, "failed to notify PD the label rules") } - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -1772,7 +1405,7 @@ func onAlterTableAttributes(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, return ver, nil } -func onAlterTablePartitionAttributes(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) { +func onAlterTablePartitionAttributes(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, err error) { var partitionID int64 rule := label.NewRule() err = job.DecodeArgs(&partitionID, rule) @@ -1801,7 +1434,7 @@ func onAlterTablePartitionAttributes(d *ddlCtx, t *meta.Meta, job *model.Job) (v job.State = model.JobStateCancelled return 0, errors.Wrapf(err, "failed to notify PD the label rules") } - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -1810,7 +1443,7 @@ func onAlterTablePartitionAttributes(d *ddlCtx, t *meta.Meta, job *model.Job) (v return ver, nil } -func onAlterTablePartitionPlacement(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) { +func onAlterTablePartitionPlacement(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, err error) { var partitionID int64 policyRefInfo := &model.PolicyRefInfo{} err = job.DecodeArgs(&partitionID, &policyRefInfo) @@ -1842,7 +1475,7 @@ func onAlterTablePartitionPlacement(d *ddlCtx, t *meta.Meta, job *model.Job) (ve return 0, errors.Trace(table.ErrUnknownPartition.GenWithStackByArgs("drop?", tblInfo.Name.O)) } - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -1875,7 +1508,7 @@ func onAlterTablePartitionPlacement(d *ddlCtx, t *meta.Meta, job *model.Job) (ve return ver, nil } -func onAlterTablePlacement(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) { +func onAlterTablePlacement(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, err error) { policyRefInfo := &model.PolicyRefInfo{} err = job.DecodeArgs(&policyRefInfo) if err != nil { @@ -1894,7 +1527,7 @@ func onAlterTablePlacement(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, oldTableEnablesPlacement := tblInfo.PlacementPolicyRef != nil tblInfo.PlacementPolicyRef = policyRefInfo - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -1965,7 +1598,7 @@ func updateLabelRules(job *model.Job, tblInfo *model.TableInfo, oldRules map[str return infosync.UpdateLabelRules(context.TODO(), patch) } -func onAlterCacheTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) { +func onAlterCacheTable(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, err error) { tbInfo, err := GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) if err != nil { return 0, errors.Trace(err) @@ -1988,14 +1621,14 @@ func onAlterCacheTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err case model.TableCacheStatusDisable: // disable -> switching tbInfo.TableCacheStatusType = model.TableCacheStatusSwitching - ver, err = updateVersionAndTableInfoWithCheck(d, t, job, tbInfo, true) + ver, err = updateVersionAndTableInfoWithCheck(jobCtx, t, job, tbInfo, true) if err != nil { return ver, err } case model.TableCacheStatusSwitching: // switching -> enable tbInfo.TableCacheStatusType = model.TableCacheStatusEnable - ver, err = updateVersionAndTableInfoWithCheck(d, t, job, tbInfo, true) + ver, err = updateVersionAndTableInfoWithCheck(jobCtx, t, job, tbInfo, true) if err != nil { return ver, err } @@ -2008,7 +1641,7 @@ func onAlterCacheTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err return ver, err } -func onAlterNoCacheTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) { +func onAlterNoCacheTable(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, err error) { tbInfo, err := GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) if err != nil { return 0, errors.Trace(err) @@ -2023,14 +1656,14 @@ func onAlterNoCacheTable(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, er case model.TableCacheStatusEnable: // enable -> switching tbInfo.TableCacheStatusType = model.TableCacheStatusSwitching - ver, err = updateVersionAndTableInfoWithCheck(d, t, job, tbInfo, true) + ver, err = updateVersionAndTableInfoWithCheck(jobCtx, t, job, tbInfo, true) if err != nil { return ver, err } case model.TableCacheStatusSwitching: // switching -> disable tbInfo.TableCacheStatusType = model.TableCacheStatusDisable - ver, err = updateVersionAndTableInfoWithCheck(d, t, job, tbInfo, true) + ver, err = updateVersionAndTableInfoWithCheck(jobCtx, t, job, tbInfo, true) if err != nil { return ver, err } diff --git a/pkg/ddl/table_lock.go b/pkg/ddl/table_lock.go index ba2648d227e36..65f722732e200 100644 --- a/pkg/ddl/table_lock.go +++ b/pkg/ddl/table_lock.go @@ -22,7 +22,7 @@ import ( "github.com/pingcap/tidb/pkg/util/dbterror" ) -func onLockTables(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) { +func onLockTables(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, err error) { arg := &LockTablesArg{} if err := job.DecodeArgs(arg); err != nil { // Invalid arguments, cancel this job. @@ -32,7 +32,7 @@ func onLockTables(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error // Unlock table first. if arg.IndexOfUnlock < len(arg.UnlockTables) { - return unlockTables(d, t, job, arg) + return unlockTables(jobCtx, t, job, arg) } // Check table locked by other, this can be only checked at the first time. @@ -75,13 +75,13 @@ func onLockTables(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error // none -> pre_lock tbInfo.Lock.State = model.TableLockStatePreLock tbInfo.Lock.TS = t.StartTS - ver, err = updateVersionAndTableInfo(d, t, job, tbInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tbInfo, true) // If the state of the lock is public, it means the lock is a read lock and already locked by other session, // so this request of lock table doesn't need pre-lock state, just update the TS and table info is ok. case model.TableLockStatePreLock, model.TableLockStatePublic: tbInfo.Lock.State = model.TableLockStatePublic tbInfo.Lock.TS = t.StartTS - ver, err = updateVersionAndTableInfo(d, t, job, tbInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tbInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -167,7 +167,7 @@ func checkTableLocked(tbInfo *model.TableInfo, lockTp model.TableLockType, sessi } // unlockTables uses unlock a batch of table lock one by one. -func unlockTables(d *ddlCtx, t *meta.Meta, job *model.Job, arg *LockTablesArg) (ver int64, err error) { +func unlockTables(jobCtx *jobContext, t *meta.Meta, job *model.Job, arg *LockTablesArg) (ver int64, err error) { if arg.IndexOfUnlock >= len(arg.UnlockTables) { return ver, nil } @@ -186,7 +186,7 @@ func unlockTables(d *ddlCtx, t *meta.Meta, job *model.Job, arg *LockTablesArg) ( needUpdateTableInfo := unlockTable(tbInfo, arg) if needUpdateTableInfo { - ver, err = updateVersionAndTableInfo(d, t, job, tbInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tbInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -222,7 +222,7 @@ func unlockTable(tbInfo *model.TableInfo, arg *LockTablesArg) (needUpdateTableIn return true } -func onUnlockTables(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) { +func onUnlockTables(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, err error) { arg := &LockTablesArg{} if err := job.DecodeArgs(arg); err != nil { // Invalid arguments, cancel this job. @@ -230,7 +230,7 @@ func onUnlockTables(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err err return ver, errors.Trace(err) } - ver, err = unlockTables(d, t, job, arg) + ver, err = unlockTables(jobCtx, t, job, arg) if arg.IndexOfUnlock == len(arg.UnlockTables) { job.FinishTableJob(model.JobStateDone, model.StateNone, ver, nil) } diff --git a/pkg/ddl/table_modify_test.go b/pkg/ddl/table_modify_test.go index 1b69aed2d66e1..03f14eddbe53b 100644 --- a/pkg/ddl/table_modify_test.go +++ b/pkg/ddl/table_modify_test.go @@ -20,8 +20,6 @@ import ( "time" "github.com/pingcap/tidb/pkg/ddl" - "github.com/pingcap/tidb/pkg/ddl/util/callback" - "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/infoschema" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/parser/model" @@ -29,6 +27,7 @@ import ( sessiontypes "github.com/pingcap/tidb/pkg/session/types" "github.com/pingcap/tidb/pkg/sessiontxn" "github.com/pingcap/tidb/pkg/testkit" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/util" "github.com/stretchr/testify/require" ) @@ -88,7 +87,7 @@ func TestLockTableReadOnly(t *testing.T) { // TestConcurrentLockTables test concurrent lock/unlock tables. func TestConcurrentLockTables(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, tableModifyLease) + store := testkit.CreateMockStoreWithSchemaLease(t, tableModifyLease) tk1 := testkit.NewTestKit(t, store) tk2 := testkit.NewTestKit(t, store) tk1.MustExec("use test") @@ -98,7 +97,7 @@ func TestConcurrentLockTables(t *testing.T) { // Test concurrent lock tables read. sql1 := "lock tables t1 read" sql2 := "lock tables t1 read" - testParallelExecSQL(t, store, dom, sql1, sql2, tk1.Session(), tk2.Session(), func(t *testing.T, err1, err2 error) { + testParallelExecSQL(t, store, sql1, sql2, tk1.Session(), tk2.Session(), func(t *testing.T, err1, err2 error) { require.NoError(t, err1) require.NoError(t, err2) }) @@ -108,7 +107,7 @@ func TestConcurrentLockTables(t *testing.T) { // Test concurrent lock tables write. sql1 = "lock tables t1 write" sql2 = "lock tables t1 write" - testParallelExecSQL(t, store, dom, sql1, sql2, tk1.Session(), tk2.Session(), func(t *testing.T, err1, err2 error) { + testParallelExecSQL(t, store, sql1, sql2, tk1.Session(), tk2.Session(), func(t *testing.T, err1, err2 error) { require.NoError(t, err1) require.True(t, terror.ErrorEqual(err2, infoschema.ErrTableLocked)) }) @@ -118,7 +117,7 @@ func TestConcurrentLockTables(t *testing.T) { // Test concurrent lock tables write local. sql1 = "lock tables t1 write local" sql2 = "lock tables t1 write local" - testParallelExecSQL(t, store, dom, sql1, sql2, tk1.Session(), tk2.Session(), func(t *testing.T, err1, err2 error) { + testParallelExecSQL(t, store, sql1, sql2, tk1.Session(), tk2.Session(), func(t *testing.T, err1, err2 error) { require.NoError(t, err1) require.True(t, terror.ErrorEqual(err2, infoschema.ErrTableLocked)) }) @@ -127,10 +126,9 @@ func TestConcurrentLockTables(t *testing.T) { tk2.MustExec("unlock tables") } -func testParallelExecSQL(t *testing.T, store kv.Storage, dom *domain.Domain, sql1, sql2 string, se1, se2 sessiontypes.Session, f func(t *testing.T, err1, err2 error)) { - callback := &callback.TestDDLCallback{} +func testParallelExecSQL(t *testing.T, store kv.Storage, sql1, sql2 string, se1, se2 sessiontypes.Session, f func(t *testing.T, err1, err2 error)) { times := 0 - callback.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if times != 0 { return } @@ -148,11 +146,8 @@ func testParallelExecSQL(t *testing.T, store kv.Storage, dom *domain.Domain, sql time.Sleep(5 * time.Millisecond) } times++ - } - d := dom.DDL() - originalCallback := d.GetHook() - defer d.SetHook(originalCallback) - d.SetHook(callback) + }) + defer testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore") var wg util.WaitGroupWrapper var err1 error diff --git a/pkg/ddl/table_test.go b/pkg/ddl/table_test.go index 2f514bfcf30a4..7b0d4268b877a 100644 --- a/pkg/ddl/table_test.go +++ b/pkg/ddl/table_test.go @@ -24,7 +24,6 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/tidb/pkg/ddl" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/infoschema" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/meta" @@ -33,7 +32,6 @@ import ( "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/sessionctx" - "github.com/pingcap/tidb/pkg/sessiontxn" "github.com/pingcap/tidb/pkg/table" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/testkit/testfailpoint" @@ -222,11 +220,12 @@ func TestTable(t *testing.T) { []any{newTblInfo}, ctx, de, store) ctx = testkit.NewTestKit(t, store).Session() - require.NoError(t, sessiontxn.NewTxn(context.Background(), ctx)) + txn, err := newTxn(ctx) + require.NoError(t, err) count := 2000 tbl := testGetTable(t, domain, tblInfo.ID) for i := 1; i <= count; i++ { - _, err := tbl.AddRecord(ctx.GetTableCtx(), types.MakeDatums(i, i, i)) + _, err := tbl.AddRecord(ctx.GetTableCtx(), txn, types.MakeDatums(i, i, i)) require.NoError(t, err) } require.NoError(t, ctx.CommitTxn(context.Background())) @@ -600,10 +599,9 @@ func TestAlterTTL(t *testing.T) { } func TestRenameTableIntermediateState(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk2 := testkit.NewTestKit(t, store) - originHook := dom.DDL().GetHook() tk.MustExec("create database db1;") tk.MustExec("create database db2;") tk.MustExec("create table db1.t(a int);") @@ -622,10 +620,9 @@ func TestRenameTableIntermediateState(t *testing.T) { var finishedJobID int64 for _, tc := range testCases { - hook := &callback.TestDDLCallback{Do: dom} runInsert := false var jobID int64 = 0 - fn := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if job.ID <= finishedJobID { // The job has been done, OnJobUpdated may be invoked later asynchronously. // We should skip the done job. @@ -646,9 +643,7 @@ func TestRenameTableIntermediateState(t *testing.T) { runInsert = true jobID = job.ID } - } - hook.OnJobUpdatedExported.Store(&fn) - dom.DDL().SetHook(hook) + }) tk.MustExec(tc.renameSQL) result := tk.MustQuery(fmt.Sprintf("select * from %s;", tc.finalDB)) if len(tc.errMsg) > 0 { @@ -659,7 +654,6 @@ func TestRenameTableIntermediateState(t *testing.T) { tk.MustExec(fmt.Sprintf("delete from %s;", tc.finalDB)) finishedJobID = jobID } - dom.DDL().SetHook(originHook) } func TestCreateSameTableOrDBOnOwnerChange(t *testing.T) { diff --git a/pkg/ddl/tests/adminpause/BUILD.bazel b/pkg/ddl/tests/adminpause/BUILD.bazel index 3650c5b1c36c2..c11bac8d47f86 100644 --- a/pkg/ddl/tests/adminpause/BUILD.bazel +++ b/pkg/ddl/tests/adminpause/BUILD.bazel @@ -34,7 +34,6 @@ go_test( "//pkg/config", "//pkg/ddl", "//pkg/ddl/testutil", - "//pkg/ddl/util/callback", "//pkg/domain", "//pkg/errno", "//pkg/parser/model", diff --git a/pkg/ddl/tests/adminpause/global.go b/pkg/ddl/tests/adminpause/global.go index c75a2ee4d1afc..2d6bd9aa79c0d 100644 --- a/pkg/ddl/tests/adminpause/global.go +++ b/pkg/ddl/tests/adminpause/global.go @@ -35,8 +35,8 @@ func prepareDomain(t *testing.T) (*domain.Domain, *testkit.TestKit, *testkit.Tes adminCommandKit := testkit.NewTestKit(t, store) ddlctrl.ReorgWaitTimeout = 10 * time.Millisecond - stmtKit.MustExec("set @@global.tidb_ddl_reorg_batch_size = 2") - stmtKit.MustExec("set @@global.tidb_ddl_reorg_worker_cnt = 1") + stmtKit.MustExec("set @@tidb_ddl_reorg_batch_size = 2") + stmtKit.MustExec("set @@tidb_ddl_reorg_worker_cnt = 1") stmtKit = testkit.NewTestKit(t, store) stmtKit.MustExec("use test") diff --git a/pkg/ddl/tests/adminpause/pause_cancel_test.go b/pkg/ddl/tests/adminpause/pause_cancel_test.go index 7f7f642c68913..3a4c33c3d3fd9 100644 --- a/pkg/ddl/tests/adminpause/pause_cancel_test.go +++ b/pkg/ddl/tests/adminpause/pause_cancel_test.go @@ -22,7 +22,6 @@ import ( "testing" testddlutil "github.com/pingcap/tidb/pkg/ddl/testutil" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/errno" "github.com/pingcap/tidb/pkg/parser/model" @@ -127,11 +126,7 @@ func pauseAndCancelStmt(t *testing.T, stmtKit *testkit.TestKit, adminCommandKit stmtKit.MustExec(prepareStmt) } - var hook = &callback.TestDDLCallback{Do: dom} - originalHook := dom.DDL().GetHook() - - hook.OnJobRunBeforeExported = pauseFunc - dom.DDL().SetHook(hook.Clone()) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", pauseFunc) isPaused.Store(false) isCancelled.Store(false) @@ -151,7 +146,7 @@ func pauseAndCancelStmt(t *testing.T, stmtKit *testkit.TestKit, adminCommandKit } // Release the hook, so that we could run the `rollbackStmts` successfully. - dom.DDL().SetHook(originalHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore") testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/beforeRefreshJob") for _, rollbackStmt := range stmtCase.rollbackStmts { diff --git a/pkg/ddl/tests/adminpause/pause_negative_test.go b/pkg/ddl/tests/adminpause/pause_negative_test.go index f283d96d2c2ba..eb1383778ba1f 100644 --- a/pkg/ddl/tests/adminpause/pause_negative_test.go +++ b/pkg/ddl/tests/adminpause/pause_negative_test.go @@ -23,17 +23,17 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/ddl" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/errno" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/testkit" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/util/sqlexec" "github.com/stretchr/testify/require" "go.uber.org/atomic" ) func TestPauseOnWriteConflict(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, dbTestLease) + store := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) tk1 := testkit.NewTestKit(t, store) tk2 := testkit.NewTestKit(t, store) @@ -44,16 +44,11 @@ func TestPauseOnWriteConflict(t *testing.T) { var pauseErr error var pauseRS []sqlexec.RecordSet - hook := &callback.TestDDLCallback{Do: dom} - d := dom.DDL() - originalHook := d.GetHook() - defer d.SetHook(originalHook) - var adminMutex sync.RWMutex jobID := atomic.NewInt64(0) // Test when pause cannot be retried and adding index succeeds. - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { adminMutex.Lock() if job.Type == model.ActionAddIndex && job.State == model.JobStateRunning && job.SchemaState == model.StateWriteReorganization { @@ -69,14 +64,13 @@ func TestPauseOnWriteConflict(t *testing.T) { pauseRS, pauseErr = tk2.Session().Execute(context.Background(), stmt) } adminMutex.Unlock() - } - d.SetHook(hook.Clone()) + }) tk1.MustExec("alter table t add index (id)") require.EqualError(t, pauseErr, "mock failed admin command on ddl jobs") var cancelRS []sqlexec.RecordSet var cancelErr error - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { adminMutex.Lock() if job.Type == model.ActionAddIndex && job.State == model.JobStateRunning && job.SchemaState == model.StateWriteReorganization { @@ -89,8 +83,7 @@ func TestPauseOnWriteConflict(t *testing.T) { cancelRS, cancelErr = tk2.Session().Execute(context.Background(), stmt) } adminMutex.Unlock() - } - d.SetHook(hook.Clone()) + }) tk1.MustGetErrCode("alter table t add index (id)", errno.ErrCancelledDDLJob) require.NoError(t, pauseErr) @@ -102,7 +95,7 @@ func TestPauseOnWriteConflict(t *testing.T) { } func TestPauseFailedOnCommit(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, dbTestLease) + store := testkit.CreateMockStoreWithSchemaLease(t, dbTestLease) tk1 := testkit.NewTestKit(t, store) tk2 := testkit.NewTestKit(t, store) @@ -110,18 +103,13 @@ func TestPauseFailedOnCommit(t *testing.T) { tk1.MustExec("use test") tk1.MustExec("create table t(id int)") - d := dom.DDL() - jobID := atomic.NewInt64(0) var pauseErr error var jobErrs []error var adminMutex sync.RWMutex - hook := &callback.TestDDLCallback{Do: dom} - originalHook := d.GetHook() - defer d.SetHook(originalHook) // Test when pause cannot be retried and adding index succeeds. - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { adminMutex.Lock() if job.Type == model.ActionAddIndex && job.State == model.JobStateRunning && job.SchemaState == model.StateWriteReorganization { @@ -134,8 +122,7 @@ func TestPauseFailedOnCommit(t *testing.T) { jobErrs, pauseErr = ddl.PauseJobs(tk2.Session(), []int64{jobID.Load()}) } adminMutex.Unlock() - } - d.SetHook(hook.Clone()) + }) tk1.MustExec("alter table t add index (id)") require.EqualError(t, pauseErr, "mock commit failed on admin command on ddl jobs") diff --git a/pkg/ddl/tests/adminpause/pause_resume_test.go b/pkg/ddl/tests/adminpause/pause_resume_test.go index 323d85238d9aa..ba3a6d26175ef 100644 --- a/pkg/ddl/tests/adminpause/pause_resume_test.go +++ b/pkg/ddl/tests/adminpause/pause_resume_test.go @@ -24,7 +24,6 @@ import ( "github.com/pingcap/failpoint" testddlutil "github.com/pingcap/tidb/pkg/ddl/testutil" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/errno" "github.com/pingcap/tidb/pkg/parser/model" @@ -158,12 +157,7 @@ func pauseResumeAndCancel(t *testing.T, stmtKit *testkit.TestKit, adminCommandKi stmtKit.MustExec(prepareStmt) } - var hook = &callback.TestDDLCallback{Do: dom} - originalHook := dom.DDL().GetHook() - - hook.OnJobRunBeforeExported = pauseFunc - var rf = resumeFunc - hook.OnJobUpdatedExported.Store(&rf) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", resumeFunc) Logger.Debug("pauseResumeAndCancel: statement execute", zap.String("DDL Statement", stmtCase.stmt)) if stmtCase.isJobPausable { @@ -171,7 +165,7 @@ func pauseResumeAndCancel(t *testing.T, stmtKit *testkit.TestKit, adminCommandKi testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/beforeLoadAndDeliverJobs", func() { cancelFunc() }) - dom.DDL().SetHook(hook.Clone()) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", pauseFunc) stmtKit.MustGetErrCode(stmtCase.stmt, errno.ErrCancelledDDLJob) testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/beforeLoadAndDeliverJobs") @@ -179,7 +173,7 @@ func pauseResumeAndCancel(t *testing.T, stmtKit *testkit.TestKit, adminCommandKi verifyCancelResult(t, adminCommandKit) } else { - dom.DDL().SetHook(hook.Clone()) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", pauseFunc) stmtKit.MustExec(stmtCase.stmt) Logger.Info("pauseResumeAndCancel: statement execution should finish successfully.") @@ -193,7 +187,7 @@ func pauseResumeAndCancel(t *testing.T, stmtKit *testkit.TestKit, adminCommandKi verifyPauseResult(t, adminCommandKit) verifyResumeResult(t, adminCommandKit) } else { - dom.DDL().SetHook(hook.Clone()) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", pauseFunc) stmtKit.MustExec(stmtCase.stmt) require.False(t, isPaused) @@ -202,7 +196,8 @@ func pauseResumeAndCancel(t *testing.T, stmtKit *testkit.TestKit, adminCommandKi } // Should not affect the 'stmtCase.rollbackStmts' - dom.DDL().SetHook(originalHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore") + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") // Statement in `stmtCase` will be finished successfully all the way, need to roll it back. for _, rollbackStmt := range stmtCase.rollbackStmts { diff --git a/pkg/ddl/tests/fail/BUILD.bazel b/pkg/ddl/tests/fail/BUILD.bazel index 7a35750149f79..ffd6263510607 100644 --- a/pkg/ddl/tests/fail/BUILD.bazel +++ b/pkg/ddl/tests/fail/BUILD.bazel @@ -14,6 +14,7 @@ go_test( "//pkg/config", "//pkg/ddl", "//pkg/ddl/schematracker", + "//pkg/ddl/schemaver", "//pkg/ddl/testutil", "//pkg/ddl/util", "//pkg/domain", diff --git a/pkg/ddl/tests/fail/fail_db_test.go b/pkg/ddl/tests/fail/fail_db_test.go index a8c4b3959ce42..a8dc18190451b 100644 --- a/pkg/ddl/tests/fail/fail_db_test.go +++ b/pkg/ddl/tests/fail/fail_db_test.go @@ -25,6 +25,7 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/ddl" "github.com/pingcap/tidb/pkg/ddl/schematracker" + "github.com/pingcap/tidb/pkg/ddl/schemaver" "github.com/pingcap/tidb/pkg/ddl/testutil" ddlutil "github.com/pingcap/tidb/pkg/ddl/util" "github.com/pingcap/tidb/pkg/domain" @@ -48,6 +49,10 @@ type failedSuite struct { } func createFailDBSuite(t *testing.T) (s *failedSuite) { + return createFailDBSuiteWithLease(t, 200*time.Millisecond) +} + +func createFailDBSuiteWithLease(t *testing.T, lease time.Duration) (s *failedSuite) { s = new(failedSuite) var err error s.store, err = mockstore.NewMockStore( @@ -57,7 +62,7 @@ func createFailDBSuite(t *testing.T) (s *failedSuite) { }), ) require.NoError(t, err) - session.SetSchemaLease(200 * time.Millisecond) + session.SetSchemaLease(lease) s.dom, err = session.BootstrapSession(s.store) require.NoError(t, err) @@ -220,7 +225,7 @@ func TestAddIndexFailed(t *testing.T) { // TestFailSchemaSyncer test when the schema syncer is done, // should prohibit DML executing until the syncer is restartd by loadSchemaInLoop. func TestFailSchemaSyncer(t *testing.T) { - s := createFailDBSuite(t) + s := createFailDBSuiteWithLease(t, 10*time.Second) tk := testkit.NewTestKit(t, s.store) tk.MustExec("use test") tk.MustExec("drop table if exists t") @@ -232,7 +237,7 @@ func TestFailSchemaSyncer(t *testing.T) { domain.SchemaOutOfDateRetryTimes.Store(originalRetryTimes) }() require.True(t, s.dom.SchemaValidator.IsStarted()) - mockSyncer, ok := s.dom.DDL().SchemaSyncer().(*ddl.MockSchemaSyncer) + mockSyncer, ok := s.dom.DDL().SchemaSyncer().(*schemaver.MemSyncer) require.True(t, ok) // make reload failed. diff --git a/pkg/ddl/tests/fastcreatetable/BUILD.bazel b/pkg/ddl/tests/fastcreatetable/BUILD.bazel index 85bdc4df8ad74..88429b3a0829d 100644 --- a/pkg/ddl/tests/fastcreatetable/BUILD.bazel +++ b/pkg/ddl/tests/fastcreatetable/BUILD.bazel @@ -8,12 +8,17 @@ go_test( "main_test.go", ], flaky = True, + shard_count = 3, deps = [ "//pkg/config", "//pkg/ddl", + "//pkg/parser/model", "//pkg/server", "//pkg/testkit", + "//pkg/testkit/testfailpoint", "//pkg/testkit/testsetup", + "//pkg/util", + "@com_github_stretchr_testify//require", "@org_uber_go_goleak//:goleak", ], ) diff --git a/pkg/ddl/tests/fastcreatetable/fastcreatetable_test.go b/pkg/ddl/tests/fastcreatetable/fastcreatetable_test.go index df47fb3dda5fc..1b20945b6e9ac 100644 --- a/pkg/ddl/tests/fastcreatetable/fastcreatetable_test.go +++ b/pkg/ddl/tests/fastcreatetable/fastcreatetable_test.go @@ -16,9 +16,15 @@ package fastcreatetable import ( "testing" + "time" + "github.com/pingcap/tidb/pkg/ddl" + "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/server" "github.com/pingcap/tidb/pkg/testkit" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" + "github.com/pingcap/tidb/pkg/util" + "github.com/stretchr/testify/require" ) func TestSwitchFastCreateTable(t *testing.T) { @@ -87,3 +93,55 @@ func TestDDL(t *testing.T) { tk.MustExec("create table db.tb1(id int)") tk.MustExec("create table db.tb2(id int)") } + +func TestMergedJob(t *testing.T) { + store := testkit.CreateMockStore(t) + var wg util.WaitGroupWrapper + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("set global tidb_enable_fast_create_table=ON") + + startSchedule := make(chan struct{}) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/beforeLoadAndDeliverJobs", func() { + <-startSchedule + }) + + // this job will be run first. + wg.Run(func() { + tk1 := testkit.NewTestKit(t, store) + tk1.MustExec("use test") + tk1.MustExec("create table t(a int)") + }) + require.Eventually(t, func() bool { + gotJobs, err := ddl.GetAllDDLJobs(tk.Session()) + require.NoError(t, err) + return len(gotJobs) == 1 + }, 10*time.Second, 100*time.Millisecond) + + // below 2 jobs are merged into 1, they will fail together. + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/afterGetJobFromLimitCh", func(ch chan *ddl.JobWrapper) { + require.Eventually(t, func() bool { + return len(ch) == 1 + }, 10*time.Second, 100*time.Millisecond) + }) + wg.Run(func() { + tk1 := testkit.NewTestKit(t, store) + tk1.MustExec("use test") + tk1.MustExecToErr("create table t(a int)") + }) + wg.Run(func() { + tk1 := testkit.NewTestKit(t, store) + tk1.MustExec("use test") + tk1.MustExecToErr("create table t1(a int)") + }) + require.Eventually(t, func() bool { + gotJobs, err := ddl.GetAllDDLJobs(tk.Session()) + require.NoError(t, err) + return len(gotJobs) == 2 && gotJobs[1].Type == model.ActionCreateTables + }, 10*time.Second, 100*time.Millisecond) + + // start to run the jobs + close(startSchedule) + wg.Wait() +} diff --git a/pkg/ddl/tests/fk/foreign_key_test.go b/pkg/ddl/tests/fk/foreign_key_test.go index 108c298f23a88..0a7f56d5f5f74 100644 --- a/pkg/ddl/tests/fk/foreign_key_test.go +++ b/pkg/ddl/tests/fk/foreign_key_test.go @@ -960,7 +960,7 @@ func getTableInfo(t *testing.T, dom *domain.Domain, db, tb string) *model.TableI is := dom.InfoSchema() tbl, err := is.TableByName(context.Background(), model.NewCIStr(db), model.NewCIStr(tb)) require.NoError(t, err) - _, exist := is.TableByID(tbl.Meta().ID) + _, exist := is.TableByID(context.Background(), tbl.Meta().ID) require.True(t, exist) return tbl.Meta() } diff --git a/pkg/ddl/tests/indexmerge/BUILD.bazel b/pkg/ddl/tests/indexmerge/BUILD.bazel index fe7c4a1464af3..ede375edfed6e 100644 --- a/pkg/ddl/tests/indexmerge/BUILD.bazel +++ b/pkg/ddl/tests/indexmerge/BUILD.bazel @@ -15,7 +15,6 @@ go_test( "//pkg/ddl", "//pkg/ddl/ingest", "//pkg/ddl/testutil", - "//pkg/ddl/util/callback", "//pkg/domain", "//pkg/errno", "//pkg/kv", diff --git a/pkg/ddl/tests/indexmerge/merge_test.go b/pkg/ddl/tests/indexmerge/merge_test.go index 712578aea4a80..1504c50fb27b1 100644 --- a/pkg/ddl/tests/indexmerge/merge_test.go +++ b/pkg/ddl/tests/indexmerge/merge_test.go @@ -23,7 +23,6 @@ import ( "github.com/pingcap/tidb/pkg/ddl" "github.com/pingcap/tidb/pkg/ddl/ingest" "github.com/pingcap/tidb/pkg/ddl/testutil" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/errno" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/parser/model" @@ -48,11 +47,7 @@ func TestAddIndexMergeProcess(t *testing.T) { var checkErr error var runDML, backfillDone bool - originHook := dom.DDL().GetHook() - callback := &callback.TestDDLCallback{ - Do: dom, - } - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if !runDML && job.Type == model.ActionAddIndex && job.SchemaState == model.StateWriteReorganization { idx := testutil.FindIdxInfo(dom, "test", "t", "idx") if idx == nil || idx.BackfillState != model.BackfillStateRunning { @@ -67,11 +62,9 @@ func TestAddIndexMergeProcess(t *testing.T) { // Write record 7 to the temporary index. _, checkErr = tk2.Exec("insert into t values (7, 8, 9);") } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - dom.DDL().SetHook(callback) + }) tk.MustExec("alter table t add index idx(c1);") - dom.DDL().SetHook(originHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") require.True(t, backfillDone) require.True(t, runDML) require.NoError(t, checkErr) @@ -81,7 +74,7 @@ func TestAddIndexMergeProcess(t *testing.T) { } func TestAddPrimaryKeyMergeProcess(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, 0) + store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, time.Second) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk2 := testkit.NewTestKit(t, store) @@ -136,11 +129,7 @@ func TestAddIndexMergeVersionIndexValue(t *testing.T) { var checkErr error var runDML bool var tblID, idxID int64 - originHook := dom.DDL().GetHook() - callback := &callback.TestDDLCallback{ - Do: dom, - } - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if !runDML && job.Type == model.ActionAddIndex && job.SchemaState == model.StateWriteReorganization { idx := testutil.FindIdxInfo(dom, "test", "t", "idx") if idx == nil || idx.BackfillState != model.BackfillStateReadyToMerge { @@ -151,11 +140,9 @@ func TestAddIndexMergeVersionIndexValue(t *testing.T) { idxID = idx.ID _, checkErr = tk2.Exec("insert into t values (1);") } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - dom.DDL().SetHook(callback) + }) tk.MustExec("alter table t add unique index idx(c1);") - dom.DDL().SetHook(originHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") require.True(t, runDML) require.NoError(t, checkErr) tk.MustExec("admin check table t;") @@ -191,11 +178,7 @@ func TestAddIndexMergeIndexUntouchedValue(t *testing.T) { var checkErrs []error var runInsert bool var runUpdate bool - originHook := dom.DDL().GetHook() - callback := &callback.TestDDLCallback{ - Do: dom, - } - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if job.Type != model.ActionAddIndex || job.SchemaState != model.StateWriteReorganization { return } @@ -223,11 +206,9 @@ func TestAddIndexMergeIndexUntouchedValue(t *testing.T) { _, err = tk2.Exec("commit;") checkErrs = append(checkErrs, err) } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - dom.DDL().SetHook(callback) + }) tk.MustExec("alter table t add index idx(c);") - dom.DDL().SetHook(originHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") require.True(t, runUpdate) for _, err := range checkErrs { require.NoError(t, err) @@ -247,7 +228,7 @@ func TestAddIndexMergeIndexUntouchedValue(t *testing.T) { // // [kv:1062]Duplicate entry '1' for key 't.idx' func TestCreateUniqueIndexKeyExist(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -261,11 +242,7 @@ func TestCreateUniqueIndexKeyExist(t *testing.T) { // If waitReorg timeout, the worker may enter writeReorg more than 2 times. reorgTime := 0 - d := dom.DDL() - originalCallback := d.GetHook() - defer d.SetHook(originalCallback) - callback := &callback.TestDDLCallback{} - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if t.Failed() { return } @@ -300,16 +277,14 @@ func TestCreateUniqueIndexKeyExist(t *testing.T) { assert.NoError(t, err) // (1, 7), (2, 7), (5, 7), (8, 8), (10, 10), (0, 9) } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(callback) + }) tk.MustExec("alter table t add unique index idx((a*b+1))") tk.MustExec("admin check table t") tk.MustQuery("select * from t order by a, b").Check(testkit.Rows("0 9", "1 7", "2 7", "5 7", "8 8", "10 10")) } func TestAddIndexMergeIndexUpdateOnDeleteOnly(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk2 := testkit.NewTestKit(t, store) @@ -329,11 +304,7 @@ func TestAddIndexMergeIndexUpdateOnDeleteOnly(t *testing.T) { tk.MustExec("set @@global.tidb_txn_assertion_level = 'STRICT';") var checkErrs []error - originHook := dom.DDL().GetHook() - callback := &callback.TestDDLCallback{ - Do: dom, - } - onJobUpdatedBefore := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if job.SchemaState == model.StateDeleteOnly { for _, sql := range updateSQLs { _, err := tk2.Exec(sql) @@ -342,11 +313,9 @@ func TestAddIndexMergeIndexUpdateOnDeleteOnly(t *testing.T) { } } } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedBefore) - dom.DDL().SetHook(callback) + }) tk.MustExec("alter table t add index idx(b);") - dom.DDL().SetHook(originHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") for _, err := range checkErrs { require.NoError(t, err) } @@ -354,7 +323,7 @@ func TestAddIndexMergeIndexUpdateOnDeleteOnly(t *testing.T) { } func TestAddIndexMergeDeleteUniqueOnWriteOnly(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -364,11 +333,7 @@ func TestAddIndexMergeDeleteUniqueOnWriteOnly(t *testing.T) { tk1 := testkit.NewTestKit(t, store) tk1.MustExec("use test") - d := dom.DDL() - originalCallback := d.GetHook() - defer d.SetHook(originalCallback) - callback := &callback.TestDDLCallback{} - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if t.Failed() { return } @@ -383,9 +348,7 @@ func TestAddIndexMergeDeleteUniqueOnWriteOnly(t *testing.T) { _, err = tk1.Exec("delete from t where b = 7;") assert.NoError(t, err) } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(callback) + }) tk.MustExec("alter table t add unique index idx(a);") tk.MustExec("admin check table t;") } @@ -413,7 +376,7 @@ func TestAddIndexMergeDeleteNullUnique(t *testing.T) { } func TestAddIndexMergeDoubleDelete(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -422,11 +385,7 @@ func TestAddIndexMergeDoubleDelete(t *testing.T) { tk1 := testkit.NewTestKit(t, store) tk1.MustExec("use test") - d := dom.DDL() - originalCallback := d.GetHook() - defer d.SetHook(originalCallback) - callback := &callback.TestDDLCallback{} - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if t.Failed() { return } @@ -435,9 +394,7 @@ func TestAddIndexMergeDoubleDelete(t *testing.T) { _, err := tk1.Exec("insert into t values (1, 1);") assert.NoError(t, err) } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(callback) + }) ddl.MockDMLExecution = func() { _, err := tk1.Exec("delete from t where id = 1;") @@ -473,12 +430,9 @@ func TestAddIndexMergeConflictWithPessimistic(t *testing.T) { tk.MustExec("set @@global.tidb_ddl_enable_fast_reorg = 1;") tk.MustExec("set @@global.tidb_enable_metadata_lock = 0;") - originHook := dom.DDL().GetHook() - callback := &callback.TestDDLCallback{Do: dom} - runPessimisticTxn := false afterPessDML := make(chan struct{}, 1) - callback.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if t.Failed() { return } @@ -502,8 +456,7 @@ func TestAddIndexMergeConflictWithPessimistic(t *testing.T) { assert.NoError(t, err) afterPessDML <- struct{}{} } - } - dom.DDL().SetHook(callback) + }) afterCommit := make(chan struct{}, 1) go func() { tk.MustExec("alter table t add index idx(a);") @@ -519,13 +472,13 @@ func TestAddIndexMergeConflictWithPessimistic(t *testing.T) { <-afterPessDML tk2.MustExec("rollback;") <-afterCommit - dom.DDL().SetHook(originHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore") tk.MustExec("admin check table t;") tk.MustQuery("select * from t;").Check(testkit.Rows("1 2")) } func TestAddIndexMergeInsertOnMerging(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -534,11 +487,7 @@ func TestAddIndexMergeInsertOnMerging(t *testing.T) { tk1 := testkit.NewTestKit(t, store) tk1.MustExec("use test") - d := dom.DDL() - originalCallback := d.GetHook() - defer d.SetHook(originalCallback) - callback := &callback.TestDDLCallback{} - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if t.Failed() { return } @@ -553,9 +502,7 @@ func TestAddIndexMergeInsertOnMerging(t *testing.T) { _, err = tk1.Exec("delete from t where b = 7") assert.NoError(t, err) } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(callback) + }) ddl.MockDMLExecutionStateMerging = func() { _, err := tk1.Exec("insert into t values (5, 8);") @@ -602,7 +549,7 @@ func TestAddIndexMergeReplaceOnMerging(t *testing.T) { } func TestAddIndexMergeInsertToDeletedTempIndex(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -612,11 +559,7 @@ func TestAddIndexMergeInsertToDeletedTempIndex(t *testing.T) { tk1 := testkit.NewTestKit(t, store) tk1.MustExec("use test") - d := dom.DDL() - originalCallback := d.GetHook() - defer d.SetHook(originalCallback) - callback := &callback.TestDDLCallback{} - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if t.Failed() { return } @@ -636,9 +579,7 @@ func TestAddIndexMergeInsertToDeletedTempIndex(t *testing.T) { _, err = tk1.Exec("insert into t values (5, 8);") assert.Error(t, err) } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(callback) + }) tk.MustExec("alter table t add unique index idx(a);") tk.MustExec("admin check table t;") @@ -646,7 +587,7 @@ func TestAddIndexMergeInsertToDeletedTempIndex(t *testing.T) { } func TestAddIndexMergeReplaceDelete(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -655,11 +596,7 @@ func TestAddIndexMergeReplaceDelete(t *testing.T) { tk1 := testkit.NewTestKit(t, store) tk1.MustExec("use test") - d := dom.DDL() - originalCallback := d.GetHook() - defer d.SetHook(originalCallback) - callback := &callback.TestDDLCallback{} - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if t.Failed() { return } @@ -668,9 +605,7 @@ func TestAddIndexMergeReplaceDelete(t *testing.T) { _, err := tk1.Exec("insert into t values (1, 1);") assert.NoError(t, err) } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(callback) + }) ddl.MockDMLExecutionMerging = func() { _, err := tk1.Exec("replace into t values (2, 1);") @@ -686,7 +621,7 @@ func TestAddIndexMergeReplaceDelete(t *testing.T) { } func TestAddIndexMergeDeleteDifferentHandle(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -696,12 +631,8 @@ func TestAddIndexMergeDeleteDifferentHandle(t *testing.T) { tk1 := testkit.NewTestKit(t, store) tk1.MustExec("use test") - d := dom.DDL() - originalCallback := d.GetHook() - defer d.SetHook(originalCallback) - callback := &callback.TestDDLCallback{} runDML := false - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if t.Failed() || runDML { return } @@ -716,9 +647,7 @@ func TestAddIndexMergeDeleteDifferentHandle(t *testing.T) { assert.NoError(t, err) runDML = true } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(callback) + }) ddl.MockDMLExecution = func() { // It is too late to remove the duplicated index value. @@ -733,7 +662,7 @@ func TestAddIndexMergeDeleteDifferentHandle(t *testing.T) { } func TestAddIndexDecodeTempIndexCommonHandle(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -743,12 +672,8 @@ func TestAddIndexDecodeTempIndexCommonHandle(t *testing.T) { tk1 := testkit.NewTestKit(t, store) tk1.MustExec("use test") - d := dom.DDL() - originalCallback := d.GetHook() - defer d.SetHook(originalCallback) - callback := &callback.TestDDLCallback{} runDML := false - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if t.Failed() || runDML { return } @@ -763,9 +688,7 @@ func TestAddIndexDecodeTempIndexCommonHandle(t *testing.T) { assert.NoError(t, err) runDML = true } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(callback) + }) tk.MustExec("alter table t add unique index idx(c);") tk.MustExec("admin check table t;") @@ -773,7 +696,7 @@ func TestAddIndexDecodeTempIndexCommonHandle(t *testing.T) { } func TestAddIndexInsertIgnoreOnBackfill(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -782,12 +705,8 @@ func TestAddIndexInsertIgnoreOnBackfill(t *testing.T) { tk1 := testkit.NewTestKit(t, store) tk1.MustExec("use test") - d := dom.DDL() - originalCallback := d.GetHook() - defer d.SetHook(originalCallback) - callback := &callback.TestDDLCallback{} runDML := false - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if t.Failed() || runDML { return } @@ -801,9 +720,7 @@ func TestAddIndexInsertIgnoreOnBackfill(t *testing.T) { assert.NoError(t, err) runDML = true } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(callback) + }) tk.MustExec("alter table t add unique index idx(b);") tk.MustExec("admin check table t;") @@ -811,7 +728,7 @@ func TestAddIndexInsertIgnoreOnBackfill(t *testing.T) { } func TestAddIndexMultipleDelete(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -821,11 +738,7 @@ func TestAddIndexMultipleDelete(t *testing.T) { tk1 := testkit.NewTestKit(t, store) tk1.MustExec("use test") - d := dom.DDL() - originalCallback := d.GetHook() - defer d.SetHook(originalCallback) - callback := &callback.TestDDLCallback{} - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if t.Failed() { return } @@ -837,9 +750,7 @@ func TestAddIndexMultipleDelete(t *testing.T) { _, err := tk1.Exec("delete from t where id in (2, 3);") assert.NoError(t, err) } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(callback) + }) ddl.MockDMLExecution = func() { _, err := tk1.Exec("delete from t where id = 1;") @@ -853,7 +764,7 @@ func TestAddIndexMultipleDelete(t *testing.T) { } func TestAddIndexDuplicateAndWriteConflict(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -863,12 +774,8 @@ func TestAddIndexDuplicateAndWriteConflict(t *testing.T) { tk1 := testkit.NewTestKit(t, store) tk1.MustExec("use test") - d := dom.DDL() - originalCallback := d.GetHook() - defer d.SetHook(originalCallback) - callback := &callback.TestDDLCallback{} var runCancel bool - callback.OnJobRunAfterExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunAfter", func(job *model.Job) { if t.Failed() || runCancel { return } @@ -882,8 +789,7 @@ func TestAddIndexDuplicateAndWriteConflict(t *testing.T) { assert.NoError(t, err) runCancel = true } - } - d.SetHook(callback) + }) tk.MustGetErrCode("alter table t add unique index idx(b);", errno.ErrCancelledDDLJob) tk.MustExec("admin check table t;") @@ -891,7 +797,7 @@ func TestAddIndexDuplicateAndWriteConflict(t *testing.T) { } func TestAddIndexUpdateUntouchedValues(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -901,12 +807,8 @@ func TestAddIndexUpdateUntouchedValues(t *testing.T) { tk1 := testkit.NewTestKit(t, store) tk1.MustExec("use test") - d := dom.DDL() - originalCallback := d.GetHook() - defer d.SetHook(originalCallback) - callback := &callback.TestDDLCallback{} var runDML bool - callback.OnJobRunAfterExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunAfter", func(job *model.Job) { if t.Failed() || runDML { return } @@ -923,8 +825,7 @@ func TestAddIndexUpdateUntouchedValues(t *testing.T) { assert.NoError(t, err) runDML = true } - } - d.SetHook(callback) + }) tk.MustGetErrCode("alter table t add unique index idx(b);", errno.ErrDupEntry) tk.MustExec("admin check table t;") diff --git a/pkg/ddl/tests/metadatalock/BUILD.bazel b/pkg/ddl/tests/metadatalock/BUILD.bazel index 0314bcf91fd6d..bc8fc8a444520 100644 --- a/pkg/ddl/tests/metadatalock/BUILD.bazel +++ b/pkg/ddl/tests/metadatalock/BUILD.bazel @@ -16,8 +16,8 @@ go_test( "//pkg/errno", "//pkg/server", "//pkg/testkit", + "//pkg/testkit/testfailpoint", "//pkg/testkit/testsetup", - "@com_github_pingcap_failpoint//:failpoint", "@com_github_stretchr_testify//require", "@org_uber_go_goleak//:goleak", ], diff --git a/pkg/ddl/tests/metadatalock/mdl_test.go b/pkg/ddl/tests/metadatalock/mdl_test.go index 4f5bbc7d622ed..262cb745e7a63 100644 --- a/pkg/ddl/tests/metadatalock/mdl_test.go +++ b/pkg/ddl/tests/metadatalock/mdl_test.go @@ -20,11 +20,11 @@ import ( "testing" "time" - "github.com/pingcap/failpoint" ingesttestutil "github.com/pingcap/tidb/pkg/ddl/ingest/testutil" mysql "github.com/pingcap/tidb/pkg/errno" "github.com/pingcap/tidb/pkg/server" "github.com/pingcap/tidb/pkg/testkit" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/stretchr/testify/require" ) @@ -1360,10 +1360,7 @@ func TestMDLUpdateEtcdFail(t *testing.T) { tk.MustExec("use test") tk.MustExec("create table t(a int);") - require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/ddl/mockUpdateMDLToETCDError", `3*return(true)`)) - defer func() { - require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/mockUpdateMDLToETCDError")) - }() + testfailpoint.Enable(t, "github.com/pingcap/tidb/pkg/ddl/schemaver/mockUpdateMDLToETCDError", `3*return(true)`) tk.MustExec("alter table test.t add column c int") } diff --git a/pkg/ddl/tests/partition/BUILD.bazel b/pkg/ddl/tests/partition/BUILD.bazel index 4470dc519eeb9..714e27cca252a 100644 --- a/pkg/ddl/tests/partition/BUILD.bazel +++ b/pkg/ddl/tests/partition/BUILD.bazel @@ -14,7 +14,6 @@ go_test( "//pkg/ddl", "//pkg/ddl/logutil", "//pkg/ddl/testutil", - "//pkg/ddl/util/callback", "//pkg/domain", "//pkg/errno", "//pkg/kv", @@ -32,6 +31,7 @@ go_test( "//pkg/tablecodec", "//pkg/testkit", "//pkg/testkit/external", + "//pkg/testkit/testfailpoint", "//pkg/testkit/testsetup", "//pkg/types", "//pkg/util/codec", diff --git a/pkg/ddl/tests/partition/db_partition_test.go b/pkg/ddl/tests/partition/db_partition_test.go index f2ceb62b8250f..bc189f6e0c742 100644 --- a/pkg/ddl/tests/partition/db_partition_test.go +++ b/pkg/ddl/tests/partition/db_partition_test.go @@ -30,7 +30,6 @@ import ( "github.com/pingcap/tidb/pkg/ddl" "github.com/pingcap/tidb/pkg/ddl/logutil" "github.com/pingcap/tidb/pkg/ddl/testutil" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/errno" "github.com/pingcap/tidb/pkg/kv" @@ -48,6 +47,7 @@ import ( "github.com/pingcap/tidb/pkg/tablecodec" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/testkit/external" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/codec" "github.com/pingcap/tidb/pkg/util/dbterror" @@ -1280,8 +1280,8 @@ func TestDropPartitionWithGlobalIndex(t *testing.T) { pid := tt.Meta().Partition.Definitions[1].ID tk.MustExec(`INSERT INTO test_global VALUES (1, 1, 1), (2, 2, 2), (11, 3, 3), (12, 4, 4)`) - tk.MustExec("Alter Table test_global Add Unique Index idx_b (b);") - tk.MustExec("Alter Table test_global Add Unique Index idx_c (c);") + tk.MustExec("Alter Table test_global Add Unique Index idx_b (b) GLOBAL") + tk.MustExec("Alter Table test_global Add Unique Index idx_c (c) global") tk.MustExec("alter table test_global drop partition p2;") result := tk.MustQuery("select * from test_global;") @@ -1317,8 +1317,8 @@ func TestDropMultiPartitionWithGlobalIndex(t *testing.T) { tt := external.GetTableByName(t, tk, "test", "test_global") pid := tt.Meta().Partition.Definitions[1].ID - tk.MustExec("Alter Table test_global Add Unique Index idx_b (b);") - tk.MustExec("Alter Table test_global Add Unique Index idx_c (c);") + tk.MustExec("Alter Table test_global Add Unique Index idx_b (b) global") + tk.MustExec("Alter Table test_global Add Unique Index idx_c (c) global") tk.MustExec(`INSERT INTO test_global VALUES (1, 1, 1), (2, 2, 2), (11, 3, 3), (12, 4, 4), (21, 21, 21), (29, 29, 29)`) tk.MustExec("alter table test_global drop partition p1, p2;") @@ -1338,7 +1338,7 @@ func TestDropMultiPartitionWithGlobalIndex(t *testing.T) { } func TestGlobalIndexInsertInDropPartition(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("set tidb_enable_global_index=true") @@ -1352,19 +1352,17 @@ func TestGlobalIndexInsertInDropPartition(t *testing.T) { partition p2 values less than (20), partition p3 values less than (30) );`) - tk.MustExec("alter table test_global add unique index idx_b (b);") + tk.MustExec("alter table test_global add unique index idx_b (b) global") tk.MustExec("insert into test_global values (1, 1, 1), (8, 8, 8), (11, 11, 11), (12, 12, 12);") - hook := &callback.TestDDLCallback{Do: dom} - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { assert.Equal(t, model.ActionDropTablePartition, job.Type) if job.SchemaState == model.StateDeleteOnly { tk2 := testkit.NewTestKit(t, store) tk2.MustExec("use test") tk2.MustExec("insert into test_global values (9, 9, 9)") } - } - dom.DDL().SetHook(hook) + }) tk1 := testkit.NewTestKit(t, store) tk1.MustExec("use test") @@ -1375,7 +1373,7 @@ func TestGlobalIndexInsertInDropPartition(t *testing.T) { } func TestGlobalIndexUpdateInDropPartition(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("set tidb_enable_global_index=true") @@ -1389,19 +1387,17 @@ func TestGlobalIndexUpdateInDropPartition(t *testing.T) { partition p2 values less than (20), partition p3 values less than (30) );`) - tk.MustExec("alter table test_global add unique index idx_b (b);") + tk.MustExec("alter table test_global add unique index idx_b (b) global") tk.MustExec("insert into test_global values (1, 1, 1), (8, 8, 8), (11, 11, 11), (12, 12, 12);") - hook := &callback.TestDDLCallback{Do: dom} - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { assert.Equal(t, model.ActionDropTablePartition, job.Type) if job.SchemaState == model.StateDeleteOnly { tk2 := testkit.NewTestKit(t, store) tk2.MustExec("use test") tk2.MustExec("update test_global set a = 2 where a = 11") } - } - dom.DDL().SetHook(hook) + }) tk1 := testkit.NewTestKit(t, store) tk1.MustExec("use test") @@ -1428,8 +1424,8 @@ func TestTruncatePartitionWithGlobalIndex(t *testing.T) { tt := external.GetTableByName(t, tk, "test", "test_global") pid := tt.Meta().Partition.Definitions[1].ID - tk.MustExec("Alter Table test_global Add Unique Index idx_b (b);") - tk.MustExec("Alter Table test_global Add Unique Index idx_c (c);") + tk.MustExec("Alter Table test_global Add Unique Index idx_b (b) global") + tk.MustExec("Alter Table test_global Add Unique Index idx_c (c) global") tk.MustExec(`INSERT INTO test_global VALUES (1, 1, 1), (2, 2, 2), (11, 3, 3), (12, 4, 4), (15, 15, 15)`) tk2 := testkit.NewTestKit(t, store) @@ -1496,7 +1492,7 @@ func TestTruncatePartitionWithGlobalIndex(t *testing.T) { } func TestGlobalIndexUpdateInTruncatePartition(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("set tidb_enable_global_index=true") @@ -1512,15 +1508,11 @@ func TestGlobalIndexUpdateInTruncatePartition(t *testing.T) { partition p2 values less than (20), partition p3 values less than (30) );`) - tk.MustExec("alter table test_global add unique index idx_b (b);") + tk.MustExec("alter table test_global add unique index idx_b (b) global") tk.MustExec("insert into test_global values (1, 1, 1), (8, 8, 8), (11, 11, 11), (12, 12, 12);") tk.MustExec("analyze table test_global") - originalHook := dom.DDL().GetHook() - defer dom.DDL().SetHook(originalHook) - - hook := &callback.TestDDLCallback{Do: dom} - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { assert.Equal(t, model.ActionTruncateTablePartition, job.Type) if job.SchemaState == model.StateDeleteOnly { tk1 := testkit.NewTestKit(t, store) @@ -1528,15 +1520,14 @@ func TestGlobalIndexUpdateInTruncatePartition(t *testing.T) { err := tk1.ExecToErr("update test_global set a = 2 where a = 11") assert.NotNil(t, err) } - } - dom.DDL().SetHook(hook) + }) tk.MustExec("alter table test_global truncate partition p1") tk.MustQuery("select * from test_global use index(idx_b) order by a").Check(testkit.Rows("11 11 11", "12 12 12")) } func TestGlobalIndexUpdateInTruncatePartition4Hash(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("set tidb_enable_global_index=true") @@ -1548,16 +1539,12 @@ func TestGlobalIndexUpdateInTruncatePartition4Hash(t *testing.T) { tk.MustExec("drop table if exists test_global") tk.MustExec(`create table test_global ( a int, b int, c int) partition by hash(a) partitions 4;`) - tk.MustExec("alter table test_global add unique index idx_b (b);") + tk.MustExec("alter table test_global add unique index idx_b (b) global") tk.MustExec("insert into test_global values (1, 1, 1), (8, 8, 8), (11, 11, 11), (12, 12, 12);") tk.MustExec("analyze table test_global") - originalHook := dom.DDL().GetHook() - defer dom.DDL().SetHook(originalHook) - var err error - hook := &callback.TestDDLCallback{Do: dom} - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { assert.Equal(t, model.ActionTruncateTablePartition, job.Type) if job.SchemaState == model.StateDeleteOnly { tk1 := testkit.NewTestKit(t, store) @@ -1565,14 +1552,13 @@ func TestGlobalIndexUpdateInTruncatePartition4Hash(t *testing.T) { err = tk1.ExecToErr("update test_global set a = 1 where a = 12") assert.NotNil(t, err) } - } - dom.DDL().SetHook(hook) + }) tk.MustExec("alter table test_global truncate partition p1") } func TestGlobalIndexReaderAndIndexLookUpInTruncatePartition(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("set tidb_enable_global_index=true") @@ -1586,12 +1572,11 @@ func TestGlobalIndexReaderAndIndexLookUpInTruncatePartition(t *testing.T) { partition p2 values less than (20), partition p3 values less than (30) );`) - tk.MustExec("alter table test_global add unique index idx_b (b);") + tk.MustExec("alter table test_global add unique index idx_b (b) global") tk.MustExec("insert into test_global values (1, 1, 1), (8, 8, 8), (11, 11, 11), (12, 12, 12);") tk.MustExec("analyze table test_global") - hook := &callback.TestDDLCallback{Do: dom} - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { assert.Equal(t, model.ActionTruncateTablePartition, job.Type) if job.SchemaState == model.StateDeleteOnly { tk1 := testkit.NewTestKit(t, store) @@ -1602,14 +1587,13 @@ func TestGlobalIndexReaderAndIndexLookUpInTruncatePartition(t *testing.T) { tk1.MustQuery("select * from test_global use index(idx_b) order by a").Check(testkit.Rows("11 11 11", "12 12 12")) tk1.MustQuery("select * from test_global use index(idx_b) order by b").Check(testkit.Rows("11 11 11", "12 12 12")) } - } - dom.DDL().SetHook(hook) + }) tk.MustExec("alter table test_global truncate partition p1") } func TestGlobalIndexInsertInTruncatePartition(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("set tidb_enable_global_index=true") @@ -1625,13 +1609,12 @@ func TestGlobalIndexInsertInTruncatePartition(t *testing.T) { partition p2 values less than (20), partition p3 values less than (30) );`) - tk.MustExec("alter table test_global add unique index idx_b (b);") + tk.MustExec("alter table test_global add unique index idx_b (b) global") tk.MustExec("insert into test_global values (1, 1, 1), (8, 8, 8), (11, 11, 11), (12, 12, 12);") tk.MustExec("analyze table test_global") var err error - hook := &callback.TestDDLCallback{Do: dom} - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { assert.Equal(t, model.ActionTruncateTablePartition, job.Type) if job.SchemaState == model.StateDeleteOnly { tk1 := testkit.NewTestKit(t, store) @@ -1639,14 +1622,13 @@ func TestGlobalIndexInsertInTruncatePartition(t *testing.T) { err = tk1.ExecToErr("insert into test_global values(2, 2, 2)") assert.NotNil(t, err) } - } - dom.DDL().SetHook(hook) + }) tk.MustExec("alter table test_global truncate partition p1") } func TestGlobalIndexReaderInDropPartition(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("set tidb_enable_global_index=true") @@ -1660,12 +1642,11 @@ func TestGlobalIndexReaderInDropPartition(t *testing.T) { partition p2 values less than (20), partition p3 values less than (30) );`) - tk.MustExec("alter table test_global add unique index idx_b (b);") + tk.MustExec("alter table test_global add unique index idx_b (b) global") tk.MustExec("insert into test_global values (1, 1, 1), (8, 8, 8), (11, 11, 11), (12, 12, 12);") var indexScanResult *testkit.Result - hook := &callback.TestDDLCallback{Do: dom} - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { assert.Equal(t, model.ActionDropTablePartition, job.Type) if job.SchemaState == model.StateDeleteOnly { tk1 := testkit.NewTestKit(t, store) @@ -1673,8 +1654,7 @@ func TestGlobalIndexReaderInDropPartition(t *testing.T) { indexScanResult = tk1.MustQuery("select b from test_global use index(idx_b)").Sort() } - } - dom.DDL().SetHook(hook) + }) tk.MustExec("alter table test_global drop partition p1") @@ -1682,7 +1662,7 @@ func TestGlobalIndexReaderInDropPartition(t *testing.T) { } func TestGlobalIndexLookUpInDropPartition(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("set tidb_enable_global_index=true") @@ -1696,12 +1676,11 @@ func TestGlobalIndexLookUpInDropPartition(t *testing.T) { partition p2 values less than (20), partition p3 values less than (30) );`) - tk.MustExec("alter table test_global add unique index idx_b (b);") + tk.MustExec("alter table test_global add unique index idx_b (b) global") tk.MustExec("insert into test_global values (1, 1, 1), (8, 8, 8), (11, 11, 11), (12, 12, 12);") var indexLookupResult *testkit.Result - hook := &callback.TestDDLCallback{Do: dom} - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { assert.Equal(t, model.ActionDropTablePartition, job.Type) if job.SchemaState == model.StateDeleteOnly { tk1 := testkit.NewTestKit(t, store) @@ -1709,8 +1688,7 @@ func TestGlobalIndexLookUpInDropPartition(t *testing.T) { tk1.MustExec("analyze table test_global") indexLookupResult = tk1.MustQuery("select * from test_global use index(idx_b)").Sort() } - } - dom.DDL().SetHook(hook) + }) tk.MustExec("alter table test_global drop partition p1") @@ -1738,7 +1716,7 @@ partition p2 values less than (10))`) rs = tk.MustQuery("show table p index uidx regions").Rows() require.Equal(t, len(rs), 3) - tk.MustExec("alter table p add unique idx(id)") + tk.MustExec("alter table p add unique idx(id) global") rs = tk.MustQuery("show table p regions").Rows() require.Equal(t, len(rs), 4) rs = tk.MustQuery("show table p index idx regions").Rows() @@ -1790,6 +1768,9 @@ func TestAlterTableExchangePartition(t *testing.T) { tk.MustExec("ALTER TABLE e3 EXCHANGE PARTITION p1 WITH TABLE e2;") tk.MustQuery("select * from e3 partition(p0)").Check(testkit.Rows()) + tk.MustQuery("select * from e3 partition(p1)").Check(testkit.Rows()) + tk.MustQuery("select * from e3 partition(p2)").Check(testkit.Rows()) + tk.MustQuery("select * from e3 partition(p3)").Check(testkit.Rows()) tk.MustQuery("select * from e2").Check(testkit.Rows("1", "5")) // validation test for hash partition @@ -2079,7 +2060,7 @@ func TestExchangePartitionMultiTable(t *testing.T) { } func TestExchangePartitionHook(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) // why use tkCancel, not tk. tkCancel := testkit.NewTestKit(t, store) @@ -2099,16 +2080,12 @@ func TestExchangePartitionHook(t *testing.T) { tk.MustExec(`insert into pt values (0), (4), (7)`) tk.MustExec("insert into nt values (1)") - hook := &callback.TestDDLCallback{Do: dom} - dom.DDL().SetHook(hook) - - hookFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if job.Type == model.ActionExchangeTablePartition && job.SchemaState != model.StateNone { tkCancel.MustExec("use test") tkCancel.MustGetErrCode("insert into nt values (5)", errno.ErrRowDoesNotMatchGivenPartitionSet) } - } - hook.OnJobUpdatedExported.Store(&hookFunc) + }) tk.MustExec("alter table pt exchange partition p0 with table nt") tk.MustQuery("select * from pt partition(p0)").Check(testkit.Rows("1")) @@ -2755,25 +2732,19 @@ func TestTruncatePartitionMultipleTimes(t *testing.T) { tk.MustExec(`create table test.t (a int primary key) partition by range (a) ( partition p0 values less than (10), partition p1 values less than (maxvalue));`) - dom := domain.GetDomain(tk.Session()) - originHook := dom.DDL().GetHook() - defer dom.DDL().SetHook(originHook) - hook := &callback.TestDDLCallback{} - dom.DDL().SetHook(hook) injected := false - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.Type == model.ActionTruncateTablePartition && job.SnapshotVer == 0 && !injected { injected = true time.Sleep(30 * time.Millisecond) } - } + }) var errCount atomic.Int32 - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if job.Type == model.ActionTruncateTablePartition && job.Error != nil { errCount.Add(1) } - } - hook.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) + }) done1 := make(chan error, 1) go backgroundExec(store, "test", "alter table test.t truncate partition p0;", done1) done2 := make(chan error, 1) @@ -2944,7 +2915,7 @@ func TestReorgPartitionTiFlash(t *testing.T) { } func TestIssue40135Ver2(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -2957,11 +2928,10 @@ func TestIssue40135Ver2(t *testing.T) { tk.MustExec("CREATE TABLE t40135 ( a int DEFAULT NULL, b varchar(32) DEFAULT 'md', index(a)) PARTITION BY HASH (a) PARTITIONS 6") tk.MustExec("insert into t40135 values (1, 'md'), (2, 'ma'), (3, 'md'), (4, 'ma'), (5, 'md'), (6, 'ma')") one := true - hook := &callback.TestDDLCallback{Do: dom} var checkErr error var wg sync.WaitGroup wg.Add(1) - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.SchemaState == model.StateDeleteOnly { tk3.MustExec("delete from t40135 where a = 1") } @@ -2972,8 +2942,7 @@ func TestIssue40135Ver2(t *testing.T) { wg.Done() }() } - } - dom.DDL().SetHook(hook) + }) tk.MustExec("alter table t40135 modify column a bigint NULL DEFAULT '6243108' FIRST") wg.Wait() require.ErrorContains(t, checkErr, "[ddl:8200]Unsupported modify column: table is partition table") @@ -3492,10 +3461,10 @@ func TestReorgPartitionGlobalIndex(t *testing.T) { require.Equal(t, 0, len(tt.Meta().Indices)) pid1 := tt.Meta().Partition.Definitions[1].ID - tk.MustExec("Alter Table t Add Unique Index idx_b (b)") + tk.MustExec("Alter Table t Add Unique Index idx_b (b) global") tk.MustExec(`INSERT INTO t VALUES (4, 5, 6), (6, 4, 5), (11, 6, 4), (12, 7, 7)`) tk.MustExec(`INSERT INTO t VALUES (8, 8, 9), (9, 9, 8), (18, 18, 17), (19, 17, 18)`) - tk.MustExec("Alter Table t Add Unique Index idx_c (c)") + tk.MustExec("Alter Table t Add Unique Index idx_c (c) global") tk.MustExec("alter table t reorganize partition p2 into (partition p2 values less than (15), partition p3 values less than (20), partition pMax values less than (maxvalue))") result := tk.MustQuery("select * from t") @@ -3530,7 +3499,7 @@ func TestReorgPartitionGlobalIndex(t *testing.T) { require.False(t, idxInfo.Global) require.True(t, idxInfo.Unique) // This should replace the unique index with a global index - tk.MustExec(`alter table t partition by range (a) (partition p1 values less than (10), partition p2 values less than (20))`) + tk.MustExec(`alter table t partition by range (a) (partition p1 values less than (10), partition p2 values less than (20)) update indexes (idx_b global, idx_c global)`) tt = external.GetTableByName(t, tk, "test", "t") require.Equal(t, 2, len(tt.Meta().Indices)) idxInfo = tt.Meta().FindIndexByName("idx_b") @@ -3539,7 +3508,7 @@ func TestReorgPartitionGlobalIndex(t *testing.T) { idxInfo = tt.Meta().FindIndexByName("idx_c") require.True(t, idxInfo.Global) require.True(t, idxInfo.Unique) - tk.MustExec(`alter table t partition by hash (b) partitions 3`) + tk.MustExec(`alter table t partition by hash (b) partitions 3 update indexes (idx_b local)`) tt = external.GetTableByName(t, tk, "test", "t") require.Equal(t, 2, len(tt.Meta().Indices)) idxInfo = tt.Meta().FindIndexByName("idx_b") @@ -3549,7 +3518,7 @@ func TestReorgPartitionGlobalIndex(t *testing.T) { require.True(t, idxInfo.Global) require.True(t, idxInfo.Unique) tk.MustExec(`alter table t remove partitioning`) - tk.MustExec(`alter table t partition by range columns (c) (partition p0 values less than (10), partition pMax values less than (maxvalue))`) + tk.MustExec(`alter table t partition by range columns (c) (partition p0 values less than (10), partition pMax values less than (maxvalue)) update indexes (idx_b global, idx_c local)`) tt = external.GetTableByName(t, tk, "test", "t") require.Equal(t, 2, len(tt.Meta().Indices)) idxInfo = tt.Meta().FindIndexByName("idx_b") @@ -3568,7 +3537,7 @@ func TestRemovePartitioningGlobalIndex(t *testing.T) { defer func() { tk.MustExec("set tidb_enable_global_index=default") }() - tk.MustExec(`create table t (a int unsigned not null, b varchar(255), unique key idx_b(b), unique key idx_a(a)) partition by key(b) partitions 3`) + tk.MustExec(`create table t (a int unsigned not null, b varchar(255), unique key idx_b(b), unique key idx_a(a) global) partition by key(b) partitions 3`) tk.MustExec(`create table t2 (a int unsigned not null, b varchar(255), unique key idx_b(b), unique key idx_a(a))`) tk.MustExec(`INSERT INTO t VALUES (1,1),(2,2),(3,"Hello, World!")`) tk.MustExec(`INSERT INTO t2 select * from t`) @@ -3600,7 +3569,7 @@ func TestRemovePartitioningGlobalIndex(t *testing.T) { tk.MustQuery(`select a from t order by a`).Check(testkit.Rows("1", "2", "3")) tk.MustQuery(`select b from t order by b`).Check(testkit.Rows("1", "2", "Hello, World!")) - tk.MustExec(`alter table t partition by key(b) partitions 3`) + tk.MustExec(`alter table t partition by key(b) partitions 3 update indexes (idx_a global)`) tt = external.GetTableByName(t, tk, "test", "t") require.Equal(t, 2, len(tt.Meta().Indices)) idxInfo = tt.Meta().FindIndexByName("idx_a") @@ -3639,13 +3608,13 @@ func TestPrimaryGlobalIndex(t *testing.T) { // Clustered table where PKIsHandle and listed in tableInfo.Indices tk.MustExec(`create table t (a varchar(255), b varchar(255), primary key (a) clustered)`) tk.MustContainErrMsg(`alter table t drop primary key`, "Unsupported drop primary key when the table is using clustered index") - tk.MustContainErrMsg(`alter table t partition by key(b) partitions 3`, `A CLUSTERED INDEX must include all columns in the table's partitioning function`) + tk.MustContainErrMsg(`alter table t partition by key(b) partitions 3`, `[ddl:1503]A CLUSTERED INDEX must include all columns in the table's partitioning function`) checkGlobalAndPK(t, tk, "t", 1, false, true, false) tk.MustExec(`drop table t`) // Clustered table where IsCommonHandle and listed in tableInfo.Indices tk.MustExec(`create table t (a varchar(255), b varchar(255), c int, primary key (a,c) clustered)`) checkGlobalAndPK(t, tk, "t", 1, false, true, false) - tk.MustContainErrMsg(`alter table t partition by key(b) partitions 3`, `A CLUSTERED INDEX must include all columns in the table's partitioning function`) + tk.MustContainErrMsg(`alter table t partition by key(b) partitions 3`, `[ddl:1503]A CLUSTERED INDEX must include all columns in the table's partitioning function`) checkGlobalAndPK(t, tk, "t", 1, false, true, false) tk.MustExec(`drop table t`) // It can be clustered if the PK contains all the partitioning columns. @@ -3657,20 +3626,20 @@ func TestPrimaryGlobalIndex(t *testing.T) { tk.MustExec(`drop table t`) // NONCLUSTERED tables can have PK as global index. - tk.MustExec(`create table t (a int primary key nonclustered, b varchar(255)) partition by key(b) partitions 3`) + tk.MustExec(`create table t (a int primary key nonclustered global, b varchar(255)) partition by key(b) partitions 3`) checkGlobalAndPK(t, tk, "t", 1, false, false, true) tk.MustExec(`alter table t drop primary key`) - tk.MustExec(`alter table t add primary key (a)`) + tk.MustExec(`alter table t add primary key (a) global`) checkGlobalAndPK(t, tk, "t", 1, false, false, true) tk.MustExec(`drop table t`) tk.MustExec(`create table t (a int primary key nonclustered, b varchar(255))`) checkGlobalAndPK(t, tk, "t", 1, false, false, false) - tk.MustExec(`alter table t partition by key(b) partitions 3`) + tk.MustExec("alter table t partition by key(b) partitions 3 update indexes (`primary` global)") checkGlobalAndPK(t, tk, "t", 1, false, false, true) tk.MustExec(`alter table t drop primary key`) - tk.MustExec(`alter table t add primary key (a)`) + tk.MustExec(`alter table t add primary key (a) global`) checkGlobalAndPK(t, tk, "t", 1, false, false, true) - tk.MustExec(`alter table t partition by hash(a) partitions 3`) + tk.MustExec("alter table t partition by hash(a) partitions 3 update indexes (`primary` local)") checkGlobalAndPK(t, tk, "t", 1, false, false, false) tk.MustExec(`alter table t drop primary key`) tk.MustExec(`alter table t add primary key (a)`) @@ -3678,10 +3647,10 @@ func TestPrimaryGlobalIndex(t *testing.T) { tk.MustExec(`drop table t`) tk.MustExec(`create table t (a varchar(255), b varchar(255), primary key (a) nonclustered)`) checkGlobalAndPK(t, tk, "t", 1, false, false, false) - tk.MustExec(`alter table t partition by key(b) partitions 3`) + tk.MustExec("alter table t partition by key(b) partitions 3 update indexes (`primary` global)") checkGlobalAndPK(t, tk, "t", 1, false, false, true) tk.MustExec(`alter table t drop primary key`) - tk.MustExec(`alter table t add primary key (a)`) + tk.MustExec(`alter table t add primary key (a) global`) checkGlobalAndPK(t, tk, "t", 1, false, false, true) tk.MustExec(`drop table t`) tk.MustExec(`create table t (a varchar(255), b varchar(255), primary key (a, b) nonclustered)`) @@ -3690,7 +3659,7 @@ func TestPrimaryGlobalIndex(t *testing.T) { tk.MustExec(`alter table t partition by key(b) partitions 3`) checkGlobalAndPK(t, tk, "t", 1, false, false, false) tk.MustExec(`alter table t drop primary key`) - tk.MustExec(`alter table t add primary key (a)`) + tk.MustExec(`alter table t add primary key (a) global`) } func TestPrimaryNoGlobalIndex(t *testing.T) { @@ -3711,17 +3680,17 @@ func TestPrimaryNoGlobalIndex(t *testing.T) { // Clustered table where PKIsHandle, but the primary key is not listed in tableInfo.Indices tk.MustExec(`create table t (a int primary key clustered, b varchar(255))`) checkGlobalAndPK(t, tk, "t", 0, true, false, false) - tk.MustContainErrMsg(`alter table t partition by key(b) partitions 3`, `A PRIMARY KEY must include all columns in the table's partitioning function`) + tk.MustContainErrMsg(`alter table t partition by key(b) partitions 3`, `A CLUSTERED INDEX must include all columns in the table's partitioning function`) tk.MustExec(`drop table t`) // Clustered table where PKIsHandle and listed in tableInfo.Indices tk.MustExec(`create table t (a varchar(255), b varchar(255), primary key (a) clustered)`) - tk.MustContainErrMsg(`alter table t partition by key(b) partitions 3`, `A PRIMARY KEY must include all columns in the table's partitioning function`) + tk.MustContainErrMsg(`alter table t partition by key(b) partitions 3`, `A CLUSTERED INDEX must include all columns in the table's partitioning function`) checkGlobalAndPK(t, tk, "t", 1, false, true, false) tk.MustExec(`drop table t`) // Clustered table where IsCommonHandle and listed in tableInfo.Indices tk.MustExec(`create table t (a varchar(255), b varchar(255), c int, primary key (a,c) clustered)`) checkGlobalAndPK(t, tk, "t", 1, false, true, false) - tk.MustContainErrMsg(`alter table t partition by key(b) partitions 3`, `A PRIMARY KEY must include all columns in the table's partitioning function`) + tk.MustContainErrMsg(`alter table t partition by key(b) partitions 3`, `A CLUSTERED INDEX must include all columns in the table's partitioning function`) checkGlobalAndPK(t, tk, "t", 1, false, true, false) tk.MustExec(`drop table t`) // It can be clustered if the PK contains all the partitioning columns. diff --git a/pkg/ddl/tests/resourcegroup/BUILD.bazel b/pkg/ddl/tests/resourcegroup/BUILD.bazel index c29f275b5b85d..647c6e100598c 100644 --- a/pkg/ddl/tests/resourcegroup/BUILD.bazel +++ b/pkg/ddl/tests/resourcegroup/BUILD.bazel @@ -6,17 +6,18 @@ go_test( srcs = ["resource_group_test.go"], flaky = True, race = "on", - shard_count = 5, + shard_count = 6, deps = [ "//pkg/ddl/resourcegroup", - "//pkg/ddl/util/callback", "//pkg/domain", "//pkg/domain/infosync", "//pkg/errno", "//pkg/parser/auth", "//pkg/parser/model", + "//pkg/server", "//pkg/sessionctx", "//pkg/testkit", + "//pkg/testkit/testfailpoint", "@com_github_pingcap_failpoint//:failpoint", "@com_github_pingcap_kvproto//pkg/resource_manager", "@com_github_stretchr_testify//require", diff --git a/pkg/ddl/tests/resourcegroup/resource_group_test.go b/pkg/ddl/tests/resourcegroup/resource_group_test.go index d0bc799add24b..653bed499cce7 100644 --- a/pkg/ddl/tests/resourcegroup/resource_group_test.go +++ b/pkg/ddl/tests/resourcegroup/resource_group_test.go @@ -17,6 +17,7 @@ package resourcegrouptest_test import ( "context" "fmt" + "math" "sync/atomic" "testing" "time" @@ -24,34 +25,32 @@ import ( "github.com/pingcap/failpoint" rmpb "github.com/pingcap/kvproto/pkg/resource_manager" "github.com/pingcap/tidb/pkg/ddl/resourcegroup" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/domain/infosync" mysql "github.com/pingcap/tidb/pkg/errno" "github.com/pingcap/tidb/pkg/parser/auth" "github.com/pingcap/tidb/pkg/parser/model" + "github.com/pingcap/tidb/pkg/server" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/testkit" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/stretchr/testify/require" ) func TestResourceGroupBasic(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") re := require.New(t) - hook := &callback.TestDDLCallback{Do: dom} var groupID atomic.Int64 - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { // job.SchemaID will be assigned when the group is created. if (job.SchemaName == "x" || job.SchemaName == "y") && job.Type == model.ActionCreateResourceGroup && job.SchemaID != 0 { groupID.Store(job.SchemaID) return } - } - hook.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - dom.DDL().SetHook(hook) + }) tk.MustExec("set global tidb_enable_resource_control = 'off'") tk.MustGetErrCode("create user usr1 resource group rg1", mysql.ErrResourceGroupSupportDisabled) @@ -92,11 +91,13 @@ func TestResourceGroupBasic(t *testing.T) { tk.MustExec("set global tidb_enable_resource_control = off") tk.MustGetErrCode("alter resource group x RU_PER_SEC=2000 ", mysql.ErrResourceGroupSupportDisabled) + tk.MustGetErrCode("alter resource group x RU_PER_SEC=unlimited ", mysql.ErrResourceGroupSupportDisabled) tk.MustGetErrCode("drop resource group x ", mysql.ErrResourceGroupSupportDisabled) tk.MustExec("set global tidb_enable_resource_control = DEFAULT") tk.MustGetErrCode("create resource group x RU_PER_SEC=1000 ", mysql.ErrResourceGroupExists) + tk.MustGetErrCode("create resource group x RU_PER_SEC=UNLIMITED ", mysql.ErrResourceGroupExists) tk.MustExec("alter resource group x RU_PER_SEC=2000 BURSTABLE QUERY_LIMIT=(EXEC_ELAPSED='15s' ACTION DRYRUN WATCH SIMILAR DURATION '10m0s')") g = testResourceGroupNameFromIS(t, tk.Session(), "x") @@ -107,16 +108,27 @@ func TestResourceGroupBasic(t *testing.T) { re.Equal(model.WatchSimilar, g.Runaway.WatchType) re.Equal(int64(time.Minute*10/time.Millisecond), g.Runaway.WatchDurationMs) - tk.MustExec("alter resource group x QUERY_LIMIT=(EXEC_ELAPSED='20s' ACTION DRYRUN WATCH SIMILAR)") + tk.MustExec("alter resource group x QUERY_LIMIT=(EXEC_ELAPSED='20s' ACTION DRYRUN WATCH SIMILAR) BURSTABLE=FALSE") g = testResourceGroupNameFromIS(t, tk.Session(), "x") re.Equal(uint64(2000), g.RURate) - re.Equal(int64(-1), g.BurstLimit) + re.Equal(int64(2000), g.BurstLimit) re.Equal(uint64(time.Second*20/time.Millisecond), g.Runaway.ExecElapsedTimeMs) re.Equal(model.RunawayActionDryRun, g.Runaway.Action) re.Equal(model.WatchSimilar, g.Runaway.WatchType) re.Equal(int64(0), g.Runaway.WatchDurationMs) - tk.MustQuery("select * from information_schema.resource_groups where name = 'x'").Check(testkit.Rows("x 2000 MEDIUM YES EXEC_ELAPSED='20s', ACTION=DRYRUN, WATCH=SIMILAR DURATION=UNLIMITED ")) + tk.MustQuery("select * from information_schema.resource_groups where name = 'x'").Check(testkit.Rows("x 2000 MEDIUM NO EXEC_ELAPSED='20s', ACTION=DRYRUN, WATCH=SIMILAR DURATION=UNLIMITED ")) + + tk.MustExec("alter resource group x RU_PER_SEC= unlimited QUERY_LIMIT=(EXEC_ELAPSED='15s' ACTION DRYRUN WATCH SIMILAR DURATION '10m0s')") + g = testResourceGroupNameFromIS(t, tk.Session(), "x") + re.Equal(uint64(math.MaxInt32), g.RURate) + re.Equal(int64(-1), g.BurstLimit) + re.Equal(uint64(time.Second*15/time.Millisecond), g.Runaway.ExecElapsedTimeMs) + re.Equal(model.RunawayActionDryRun, g.Runaway.Action) + re.Equal(model.WatchSimilar, g.Runaway.WatchType) + re.Equal(int64(time.Minute*10/time.Millisecond), g.Runaway.WatchDurationMs) + + tk.MustQuery("select * from information_schema.resource_groups where name = 'x'").Check(testkit.Rows("x UNLIMITED MEDIUM YES EXEC_ELAPSED='15s', ACTION=DRYRUN, WATCH=SIMILAR DURATION='10m0s' ")) tk.MustExec("drop resource group x") g = testResourceGroupNameFromIS(t, tk.Session(), "x") @@ -310,7 +322,6 @@ func TestResourceGroupRunaway(t *testing.T) { maxWaitDuration := time.Second * 5 tk.EventuallyMustQueryAndCheck("select SQL_NO_CACHE resource_group_name, original_sql, match_type from mysql.tidb_runaway_queries", nil, testkit.Rows("rg1 select /*+ resource_group(rg1) */ * from t identify"), maxWaitDuration, tryInterval) - // require.Len(t, tk.MustQuery("select SQL_NO_CACHE resource_group_name, original_sql, time from mysql.tidb_runaway_queries").Rows(), 0) tk.EventuallyMustQueryAndCheck("select SQL_NO_CACHE resource_group_name, original_sql, time from mysql.tidb_runaway_queries", nil, nil, maxWaitDuration, tryInterval) tk.MustExec("alter resource group rg1 RU_PER_SEC=1000 QUERY_LIMIT=(EXEC_ELAPSED='100ms' ACTION=COOLDOWN)") @@ -363,6 +374,43 @@ func TestResourceGroupRunaway(t *testing.T) { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/store/copr/sleepCoprAfterReq")) } +func TestResourceGroupRunawayExceedTiDBSide(t *testing.T) { + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/domain/FastRunawayGC", `return(true)`)) + defer func() { + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/domain/FastRunawayGC")) + }() + store, dom := testkit.CreateMockStoreAndDomain(t) + sv := server.CreateMockServer(t, store) + sv.SetDomain(dom) + defer sv.Close() + + conn1 := server.CreateMockConn(t, sv) + tk := testkit.NewTestKitWithSession(t, store, conn1.Context().Session) + + go dom.ExpensiveQueryHandle().SetSessionManager(sv).Run() + tk.MustExec("set global tidb_enable_resource_control='on'") + require.NoError(t, tk.Session().Auth(&auth.UserIdentity{Username: "root", Hostname: "localhost"}, nil, nil, nil)) + + tk.MustExec("use test") + tk.MustExec("create table t(a int)") + tk.MustExec("insert into t values(1)") + tk.MustExec("create resource group rg1 RU_PER_SEC=1000 QUERY_LIMIT=(EXEC_ELAPSED='50ms' ACTION=KILL)") + + require.Eventually(t, func() bool { + return dom.RunawayManager().IsSyncerInitialized() + }, 20*time.Second, 300*time.Millisecond) + + err := tk.QueryToErr("select /*+ resource_group(rg1) */ sleep(0.5) from t") + require.ErrorContains(t, err, "[executor:8253]Query execution was interrupted, identified as runaway query") + + tryInterval := time.Millisecond * 100 + maxWaitDuration := time.Second * 5 + tk.EventuallyMustQueryAndCheck("select SQL_NO_CACHE resource_group_name, original_sql, match_type from mysql.tidb_runaway_queries", nil, + testkit.Rows("rg1 select /*+ resource_group(rg1) */ sleep(0.5) from t identify"), maxWaitDuration, tryInterval) + tk.EventuallyMustQueryAndCheck("select SQL_NO_CACHE resource_group_name, original_sql, time from mysql.tidb_runaway_queries", nil, + nil, maxWaitDuration, tryInterval) +} + func TestAlreadyExistsDefaultResourceGroup(t *testing.T) { require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/domain/infosync/managerAlreadyCreateSomeGroups", `return(true)`)) defer func() { diff --git a/pkg/ddl/tests/serial/BUILD.bazel b/pkg/ddl/tests/serial/BUILD.bazel index 7cf13791302f5..e8c736ec88ebf 100644 --- a/pkg/ddl/tests/serial/BUILD.bazel +++ b/pkg/ddl/tests/serial/BUILD.bazel @@ -13,7 +13,6 @@ go_test( "//pkg/config", "//pkg/ddl", "//pkg/ddl/util", - "//pkg/ddl/util/callback", "//pkg/domain", "//pkg/domain/infosync", "//pkg/errno", @@ -32,6 +31,7 @@ go_test( "//pkg/tablecodec", "//pkg/testkit", "//pkg/testkit/external", + "//pkg/testkit/testfailpoint", "//pkg/testkit/testsetup", "//pkg/util/dbterror", "//pkg/util/dbterror/plannererrors", diff --git a/pkg/ddl/tests/serial/serial_test.go b/pkg/ddl/tests/serial/serial_test.go index 3edfbd6355f68..a548e1bc74bbc 100644 --- a/pkg/ddl/tests/serial/serial_test.go +++ b/pkg/ddl/tests/serial/serial_test.go @@ -28,7 +28,6 @@ import ( "github.com/pingcap/tidb/pkg/config" "github.com/pingcap/tidb/pkg/ddl" "github.com/pingcap/tidb/pkg/ddl/util" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/errno" "github.com/pingcap/tidb/pkg/infoschema" @@ -45,6 +44,7 @@ import ( "github.com/pingcap/tidb/pkg/tablecodec" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/testkit/external" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/util/dbterror" "github.com/pingcap/tidb/pkg/util/dbterror/plannererrors" "github.com/pingcap/tidb/pkg/util/gcutil" @@ -54,7 +54,7 @@ import ( // GetMaxRowID is used for test. func GetMaxRowID(store kv.Storage, priority int, t table.Table, startHandle, endHandle kv.Key) (kv.Key, error) { - return ddl.GetRangeEndKey(ddl.NewJobContext(), store, priority, t.RecordPrefix(), startHandle, endHandle) + return ddl.GetRangeEndKey(ddl.NewReorgContext(), store, priority, t.RecordPrefix(), startHandle, endHandle) } func TestIssue23872(t *testing.T) { @@ -410,7 +410,7 @@ func TestCreateTableWithLikeAtTemporaryMode(t *testing.T) { require.Equal(t, plannererrors.ErrOptOnTemporaryTable.GenWithStackByArgs("placement").Error(), err.Error()) } -func createMockStoreAndDomain(t *testing.T) (store kv.Storage, dom *domain.Domain) { +func createMockStore(t *testing.T) (store kv.Storage) { session.SetSchemaLease(200 * time.Millisecond) session.DisableStats4Test() ddl.SetWaitTimeWhenErrorOccurred(1 * time.Microsecond) @@ -418,7 +418,7 @@ func createMockStoreAndDomain(t *testing.T) (store kv.Storage, dom *domain.Domai var err error store, err = mockstore.NewMockStore() require.NoError(t, err) - dom, err = session.BootstrapSession(store) + dom, err := session.BootstrapSession(store) require.NoError(t, err) t.Cleanup(func() { dom.Close() @@ -429,7 +429,7 @@ func createMockStoreAndDomain(t *testing.T) (store kv.Storage, dom *domain.Domai // TestCancelAddIndex1 tests canceling ddl job when the add index worker is not started. func TestCancelAddIndexPanic(t *testing.T) { - store, dom := createMockStoreAndDomain(t) + store := createMockStore(t) tk := testkit.NewTestKit(t, store) require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/ddl/errorMockPanic", `return(true)`)) defer func() { @@ -448,13 +448,11 @@ func TestCancelAddIndexPanic(t *testing.T) { oldReorgWaitTimeout := ddl.ReorgWaitTimeout ddl.ReorgWaitTimeout = 50 * time.Millisecond defer func() { ddl.ReorgWaitTimeout = oldReorgWaitTimeout }() - hook := &callback.TestDDLCallback{Do: dom} - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.Type == model.ActionAddIndex && job.State == model.JobStateRunning && job.SchemaState == model.StateWriteReorganization && job.SnapshotVer != 0 { tkCancel.MustQuery(fmt.Sprintf("admin cancel ddl jobs %d", job.ID)) } - } - dom.DDL().SetHook(hook) + }) rs, err := tk.Exec("alter table t add index idx_c2(c2)") if rs != nil { require.NoError(t, rs.Close()) @@ -466,7 +464,7 @@ func TestCancelAddIndexPanic(t *testing.T) { } func TestRecoverTableWithTTL(t *testing.T) { - store, _ := createMockStoreAndDomain(t) + store := createMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("create database if not exists test_recover") tk.MustExec("use test_recover") @@ -530,7 +528,7 @@ func TestRecoverTableWithTTL(t *testing.T) { } func TestRecoverTableByJobID(t *testing.T) { - store, _ := createMockStoreAndDomain(t) + store := createMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("create database if not exists test_recover") tk.MustExec("use test_recover") @@ -646,7 +644,7 @@ func TestRecoverTableByJobID(t *testing.T) { } func TestRecoverTableByJobIDFail(t *testing.T) { - store, dom := createMockStoreAndDomain(t) + store := createMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("create database if not exists test_recover") tk.MustExec("use test_recover") @@ -687,14 +685,12 @@ func TestRecoverTableByJobIDFail(t *testing.T) { tk.MustExec(fmt.Sprintf(safePointSQL, timeBeforeDrop)) // set hook - hook := &callback.TestDDLCallback{} - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.Type == model.ActionRecoverTable { require.NoError(t, failpoint.Enable("tikvclient/mockCommitError", `return(true)`)) require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/ddl/mockRecoverTableCommitErr", `return(true)`)) } - } - dom.DDL().SetHook(hook) + }) // do recover table. tk.MustExec(fmt.Sprintf("recover table by job %d", jobID)) @@ -714,7 +710,7 @@ func TestRecoverTableByJobIDFail(t *testing.T) { } func TestRecoverTableByTableNameFail(t *testing.T) { - store, dom := createMockStoreAndDomain(t) + store := createMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("create database if not exists test_recover") tk.MustExec("use test_recover") @@ -746,14 +742,12 @@ func TestRecoverTableByTableNameFail(t *testing.T) { tk.MustExec(fmt.Sprintf(safePointSQL, timeBeforeDrop)) // set hook - hook := &callback.TestDDLCallback{} - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.Type == model.ActionRecoverTable { require.NoError(t, failpoint.Enable("tikvclient/mockCommitError", `return(true)`)) require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/ddl/mockRecoverTableCommitErr", `return(true)`)) } - } - dom.DDL().SetHook(hook) + }) // do recover table. tk.MustExec("recover table t_recover") @@ -773,7 +767,7 @@ func TestRecoverTableByTableNameFail(t *testing.T) { } func TestCancelJobByErrorCountLimit(t *testing.T) { - store, _ := createMockStoreAndDomain(t) + store := createMockStore(t) tk := testkit.NewTestKit(t, store) require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/ddl/mockExceedErrorLimit", `return(true)`)) defer func() { @@ -814,14 +808,13 @@ func TestTruncateTableUpdateSchemaVersionErr(t *testing.T) { } func TestCanceledJobTakeTime(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("create table t_cjtt(a int)") - hook := &callback.TestDDLCallback{} once := sync.Once{} - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { once.Do(func() { ctx := kv.WithInternalSourceType(context.Background(), kv.InternalTxnDDL) err := kv.RunInNewTxn(ctx, store, false, func(ctx context.Context, txn kv.Transaction) error { @@ -830,12 +823,11 @@ func TestCanceledJobTakeTime(t *testing.T) { if err != nil { return err } - return m.DropTableOrView(job.SchemaID, job.SchemaName, job.TableID, job.TableName) + return m.DropTableOrView(job.SchemaID, job.TableID) }) require.NoError(t, err) }) - } - dom.DDL().SetHook(hook) + }) originalWT := ddl.GetWaitTimeWhenErrorOccurred() ddl.SetWaitTimeWhenErrorOccurred(1 * time.Second) diff --git a/pkg/ddl/tests/tiflash/BUILD.bazel b/pkg/ddl/tests/tiflash/BUILD.bazel index 3827bfd8d7140..e3d7289f33f94 100644 --- a/pkg/ddl/tests/tiflash/BUILD.bazel +++ b/pkg/ddl/tests/tiflash/BUILD.bazel @@ -28,6 +28,7 @@ go_test( "//pkg/tablecodec", "//pkg/testkit", "//pkg/testkit/external", + "//pkg/testkit/testfailpoint", "//pkg/testkit/testsetup", "//pkg/types", "//pkg/util", diff --git a/pkg/ddl/tests/tiflash/ddl_tiflash_test.go b/pkg/ddl/tests/tiflash/ddl_tiflash_test.go index 3aca7f8fc3224..a5578277cf6c2 100644 --- a/pkg/ddl/tests/tiflash/ddl_tiflash_test.go +++ b/pkg/ddl/tests/tiflash/ddl_tiflash_test.go @@ -45,6 +45,7 @@ import ( "github.com/pingcap/tidb/pkg/tablecodec" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/testkit/external" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/sqlkiller" @@ -95,7 +96,6 @@ func createTiFlashContext(t *testing.T) (*tiflashContext, func()) { ) require.NoError(t, err) - session.SetSchemaLease(0) session.DisableStats4Test() s.dom, err = session.BootstrapSession(s.store) infosync.SetMockTiFlash(s.tiflash) @@ -1386,28 +1386,6 @@ func TestTiFlashAvailableAfterDownOneStore(t *testing.T) { CheckTableAvailable(s.dom, t, 1, []string{}) } -// TestDLLCallback copied from ddl.TestDDLCallback, but smaller -type TestDDLCallback struct { - *ddl.BaseCallback - // We recommended to pass the domain parameter to the test ddl callback, it will ensure - // domain to reload schema before your ddl stepping into the next state change. - Do ddl.SchemaLoader - - // Only need this for now - OnJobRunBeforeExported func(*model.Job) -} - -// OnJobRunBefore is used to run the user customized logic of `onJobRunBefore` first. -func (tc *TestDDLCallback) OnJobRunBefore(job *model.Job) { - logutil.DDLLogger().Info("on job run before", zap.String("job", job.String())) - if tc.OnJobRunBeforeExported != nil { - tc.OnJobRunBeforeExported(job) - return - } - - tc.BaseCallback.OnJobRunBefore(job) -} - func TestTiFlashReorgPartition(t *testing.T) { s, teardown := createTiFlashContext(t) defer teardown() @@ -1430,14 +1408,9 @@ func TestTiFlashReorgPartition(t *testing.T) { require.True(t, ok) // Note that the mock TiFlash does not have any data or regions, so the wait for regions being available will fail - dom := domain.GetDomain(tk.Session()) - originHook := dom.DDL().GetHook() - defer dom.DDL().SetHook(originHook) - hook := &TestDDLCallback{Do: dom} - dom.DDL().SetHook(hook) done := false - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if !done && job.Type == model.ActionReorganizePartition && job.SchemaState == model.StateDeleteOnly { // Let it fail once (to check that code path) then increase the count to skip retry if job.ErrorCount > 0 { @@ -1445,11 +1418,11 @@ func TestTiFlashReorgPartition(t *testing.T) { done = true } } - } + }) tk.MustContainErrMsg(`alter table ddltiflash reorganize partition p0 into (partition p0 values less than (500000), partition p500k values less than (1000000))`, "[ddl] add partition wait for tiflash replica to complete") done = false - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if !done && job.Type == model.ActionReorganizePartition && job.SchemaState == model.StateDeleteOnly { // Let it fail once (to check that code path) then mock the regions into the partitions if job.ErrorCount > 0 { @@ -1479,7 +1452,7 @@ func TestTiFlashReorgPartition(t *testing.T) { done = true } } - } + }) tk.MustExec(`alter table ddltiflash reorganize partition p0 into (partition p0 values less than (500000), partition p500k values less than (1000000))`) tk.MustExec(`admin check table ddltiflash`) _, ok = s.tiflash.GetPlacementRule(ruleName) diff --git a/pkg/ddl/testutil/BUILD.bazel b/pkg/ddl/testutil/BUILD.bazel index 4cfa751c86c17..cee0cfee17fcc 100644 --- a/pkg/ddl/testutil/BUILD.bazel +++ b/pkg/ddl/testutil/BUILD.bazel @@ -2,11 +2,15 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( name = "testutil", - srcs = ["testutil.go"], + srcs = [ + "operator.go", + "testutil.go", + ], importpath = "github.com/pingcap/tidb/pkg/ddl/testutil", visibility = ["//visibility:public"], deps = [ "//pkg/ddl/logutil", + "//pkg/disttask/operator", "//pkg/domain", "//pkg/kv", "//pkg/parser/model", @@ -18,6 +22,7 @@ go_library( "//pkg/types", "@com_github_pingcap_errors//:errors", "@com_github_stretchr_testify//require", + "@org_golang_x_sync//errgroup", "@org_uber_go_zap//:zap", ], ) diff --git a/pkg/ddl/testutil/operator.go b/pkg/ddl/testutil/operator.go new file mode 100644 index 0000000000000..90ba745bc387d --- /dev/null +++ b/pkg/ddl/testutil/operator.go @@ -0,0 +1,107 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package testutil + +import ( + "github.com/pingcap/tidb/pkg/disttask/operator" + "golang.org/x/sync/errgroup" +) + +// OperatorTestSource is used for dist task operator test. +type OperatorTestSource[T any] struct { + errGroup errgroup.Group + ch chan T + toBeSent []T +} + +// NewOperatorTestSource creates a new OperatorTestSource. +func NewOperatorTestSource[T any](toBeSent ...T) *OperatorTestSource[T] { + return &OperatorTestSource[T]{ + ch: make(chan T), + toBeSent: toBeSent, + } +} + +// SetSink implements disttask/operator.Operator. +func (s *OperatorTestSource[T]) SetSink(sink operator.DataChannel[T]) { + s.ch = sink.Channel() +} + +// Open implements disttask/operator.Operator. +func (s *OperatorTestSource[T]) Open() error { + s.errGroup.Go(func() error { + for _, data := range s.toBeSent { + s.ch <- data + } + close(s.ch) + return nil + }) + return nil +} + +// Close implements disttask/operator.Operator. +func (s *OperatorTestSource[T]) Close() error { + return s.errGroup.Wait() +} + +// String implements disttask/operator.Operator. +func (*OperatorTestSource[T]) String() string { + return "testSource" +} + +// OperatorTestSink is used for dist task operator test. +type OperatorTestSink[T any] struct { + errGroup errgroup.Group + ch chan T + collected []T +} + +// NewOperatorTestSink creates a new OperatorTestSink. +func NewOperatorTestSink[T any]() *OperatorTestSink[T] { + return &OperatorTestSink[T]{ + ch: make(chan T), + } +} + +// Open implements disttask/operator.Operator. +func (s *OperatorTestSink[T]) Open() error { + s.errGroup.Go(func() error { + for data := range s.ch { + s.collected = append(s.collected, data) + } + return nil + }) + return nil +} + +// Close implements disttask/operator.Operator. +func (s *OperatorTestSink[T]) Close() error { + return s.errGroup.Wait() +} + +// SetSource implements disttask/operator.Operator. +func (s *OperatorTestSink[T]) SetSource(dataCh operator.DataChannel[T]) { + s.ch = dataCh.Channel() +} + +// String implements disttask/operator.Operator. +func (*OperatorTestSink[T]) String() string { + return "testSink" +} + +// Collect the result from OperatorTestSink. +func (s *OperatorTestSink[T]) Collect() []T { + return s.collected +} diff --git a/pkg/ddl/tiflash_replica_test.go b/pkg/ddl/tiflash_replica_test.go index 815ab8f00791d..bb122027fdf05 100644 --- a/pkg/ddl/tiflash_replica_test.go +++ b/pkg/ddl/tiflash_replica_test.go @@ -26,7 +26,6 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/config" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/errno" "github.com/pingcap/tidb/pkg/kv" @@ -38,6 +37,7 @@ import ( "github.com/pingcap/tidb/pkg/tablecodec" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/testkit/external" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/dbterror" "github.com/stretchr/testify/require" @@ -303,16 +303,15 @@ func TestSkipSchemaChecker(t *testing.T) { // TestCreateTableWithLike2 tests create table with like when refer table have non-public column/index. func TestCreateTableWithLike2(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomainWithSchemaLease(t, tiflashReplicaLease) + store := testkit.CreateMockStoreWithSchemaLease(t, tiflashReplicaLease) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("create table t1 (a int, b int, c int, index idx1(c));") tbl1 := external.GetTableByName(t, tk, "test", "t1") doneCh := make(chan error, 2) - hook := &callback.TestDDLCallback{Do: dom} var onceChecker sync.Map - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.Type != model.ActionAddColumn && job.Type != model.ActionDropColumn && job.Type != model.ActionAddIndex && job.Type != model.ActionDropIndex { return @@ -329,10 +328,7 @@ func TestCreateTableWithLike2(t *testing.T) { onceChecker.Store(job.ID, true) go backgroundExec(store, "test", "create table t2 like t1", doneCh) } - } - originalHook := dom.DDL().GetHook() - defer dom.DDL().SetHook(originalHook) - dom.DDL().SetHook(hook) + }) // create table when refer table add column tk.MustExec("alter table t1 add column d int") @@ -378,7 +374,7 @@ func TestCreateTableWithLike2(t *testing.T) { require.NoError(t, err) }() - dom.DDL().SetHook(originalHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore") tk.MustExec("drop table if exists t1,t2;") tk.MustExec("create table t1 (a int) partition by hash(a) partitions 2;") tk.MustExec("alter table t1 set tiflash replica 3 location labels 'a','b';") diff --git a/pkg/ddl/ttl.go b/pkg/ddl/ttl.go index a21b4e801f56e..1a616448b5ee6 100644 --- a/pkg/ddl/ttl.go +++ b/pkg/ddl/ttl.go @@ -34,14 +34,14 @@ import ( // DefaultTTLJobInterval is the default value for ttl job interval. const DefaultTTLJobInterval = "1h" -func onTTLInfoRemove(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) { +func onTTLInfoRemove(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, err error) { tblInfo, err := GetTableInfoAndCancelFaultJob(t, job, job.SchemaID) if err != nil { return ver, errors.Trace(err) } tblInfo.TTLInfo = nil - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } @@ -49,7 +49,7 @@ func onTTLInfoRemove(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err er return ver, nil } -func onTTLInfoChange(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err error) { +func onTTLInfoChange(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, err error) { // at least one for them is not nil var ttlInfo *model.TTLInfo var ttlInfoEnable *bool @@ -90,7 +90,7 @@ func onTTLInfoChange(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, err er tblInfo.TTLInfo.JobInterval = *ttlInfoJobInterval } - ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true) + ver, err = updateVersionAndTableInfo(jobCtx, t, job, tblInfo, true) if err != nil { return ver, errors.Trace(err) } diff --git a/pkg/ddl/util/BUILD.bazel b/pkg/ddl/util/BUILD.bazel index e03ba28d779a7..dee960f99a863 100644 --- a/pkg/ddl/util/BUILD.bazel +++ b/pkg/ddl/util/BUILD.bazel @@ -6,12 +6,15 @@ go_library( "dead_table_lock_checker.go", "mock.go", "util.go", + "watcher.go", ], importpath = "github.com/pingcap/tidb/pkg/ddl/util", visibility = ["//visibility:public"], deps = [ "//pkg/ddl/logutil", + "//pkg/infoschema/context", "//pkg/kv", + "//pkg/metrics", "//pkg/parser/model", "//pkg/parser/terror", "//pkg/sessionctx", diff --git a/pkg/ddl/util/callback/BUILD.bazel b/pkg/ddl/util/callback/BUILD.bazel deleted file mode 100644 index 4ae863b270d46..0000000000000 --- a/pkg/ddl/util/callback/BUILD.bazel +++ /dev/null @@ -1,23 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") - -go_library( - name = "callback", - srcs = ["callback.go"], - importpath = "github.com/pingcap/tidb/pkg/ddl/util/callback", - visibility = ["//visibility:public"], - deps = [ - "//pkg/ddl", - "//pkg/ddl/logutil", - "//pkg/parser/model", - "@org_uber_go_zap//:zap", - ], -) - -go_test( - name = "callback_test", - timeout = "short", - srcs = ["callback_test.go"], - embed = [":callback"], - flaky = True, - deps = ["//pkg/ddl"], -) diff --git a/pkg/ddl/util/callback/callback.go b/pkg/ddl/util/callback/callback.go deleted file mode 100644 index addc26e53799e..0000000000000 --- a/pkg/ddl/util/callback/callback.go +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2023 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package callback - -import ( - "sync/atomic" - - "github.com/pingcap/tidb/pkg/ddl" - "github.com/pingcap/tidb/pkg/ddl/logutil" - "github.com/pingcap/tidb/pkg/parser/model" - "go.uber.org/zap" -) - -// TestDDLCallback is used to customize user callback themselves. -type TestDDLCallback struct { - *ddl.BaseCallback - // We recommended to pass the domain parameter to the test ddl callback, it will ensure - // domain to reload schema before your ddl stepping into the next state change. - Do ddl.SchemaLoader - - OnJobRunBeforeExported func(*model.Job) - OnJobRunAfterExported func(*model.Job) - OnJobUpdatedExported atomic.Pointer[func(*model.Job)] -} - -// OnJobRunBefore is used to run the user customized logic of `onJobRunBefore` first. -func (tc *TestDDLCallback) OnJobRunBefore(job *model.Job) { - logutil.DDLLogger().Info("on job run before", zap.String("job", job.String())) - if tc.OnJobRunBeforeExported != nil { - tc.OnJobRunBeforeExported(job) - return - } - - tc.BaseCallback.OnJobRunBefore(job) -} - -// OnJobRunAfter is used to run the user customized logic of `OnJobRunAfter` first. -func (tc *TestDDLCallback) OnJobRunAfter(job *model.Job) { - logutil.DDLLogger().Info("on job run after", zap.String("job", job.String())) - if tc.OnJobRunAfterExported != nil { - tc.OnJobRunAfterExported(job) - return - } - - tc.BaseCallback.OnJobRunAfter(job) -} - -// OnJobUpdated is used to run the user customized logic of `OnJobUpdated` first. -func (tc *TestDDLCallback) OnJobUpdated(job *model.Job) { - logutil.DDLLogger().Info("on job updated", zap.String("job", job.String())) - if onJobUpdatedExportedFunc := tc.OnJobUpdatedExported.Load(); onJobUpdatedExportedFunc != nil { - (*onJobUpdatedExportedFunc)(job) - return - } - if job.State == model.JobStateSynced { - return - } - - tc.BaseCallback.OnJobUpdated(job) -} - -// Clone copies the callback and take its reference -func (tc *TestDDLCallback) Clone() *TestDDLCallback { - return &*tc -} diff --git a/pkg/ddl/util/dead_table_lock_checker.go b/pkg/ddl/util/dead_table_lock_checker.go index f0236e164ca6c..24ea730d3a014 100644 --- a/pkg/ddl/util/dead_table_lock_checker.go +++ b/pkg/ddl/util/dead_table_lock_checker.go @@ -21,6 +21,7 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/tidb/pkg/ddl/logutil" + infoschema "github.com/pingcap/tidb/pkg/infoschema/context" "github.com/pingcap/tidb/pkg/parser/model" clientv3 "go.etcd.io/etcd/client/v3" "go.uber.org/zap" @@ -73,7 +74,7 @@ func (d *DeadTableLockChecker) getAliveServers(ctx context.Context) (map[string] } // GetDeadLockedTables gets dead locked tables. -func (d *DeadTableLockChecker) GetDeadLockedTables(ctx context.Context, schemas []*model.DBInfo) (map[model.SessionInfo][]model.TableLockTpInfo, error) { +func (d *DeadTableLockChecker) GetDeadLockedTables(ctx context.Context, is infoschema.MetaOnlyInfoSchema) (map[model.SessionInfo][]model.TableLockTpInfo, error) { if d.etcdCli == nil { return nil, nil } @@ -82,13 +83,17 @@ func (d *DeadTableLockChecker) GetDeadLockedTables(ctx context.Context, schemas return nil, err } deadLockTables := make(map[model.SessionInfo][]model.TableLockTpInfo) - for _, schema := range schemas { + for _, schema := range is.AllSchemas() { select { case <-ctx.Done(): return nil, ctx.Err() default: } - for _, tbl := range schema.Tables { + tblInfos, err := is.SchemaTableInfos(ctx, schema.Name) + if err != nil { + return nil, errors.Trace(err) + } + for _, tbl := range tblInfos { if tbl.Lock == nil { continue } diff --git a/pkg/ddl/util/watcher.go b/pkg/ddl/util/watcher.go new file mode 100644 index 0000000000000..f8d92a320c5de --- /dev/null +++ b/pkg/ddl/util/watcher.go @@ -0,0 +1,80 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package util + +import ( + "context" + "sync" + "time" + + "github.com/pingcap/tidb/pkg/ddl/logutil" + "github.com/pingcap/tidb/pkg/metrics" + clientv3 "go.etcd.io/etcd/client/v3" +) + +// Watcher is responsible for watching the etcd path related operations. +type Watcher interface { + // WatchChan returns the chan for watching etcd path. + WatchChan() clientv3.WatchChan + // Watch watches the etcd path. + Watch(ctx context.Context, etcdCli *clientv3.Client, path string) + // Rewatch rewatches the etcd path. + Rewatch(ctx context.Context, etcdCli *clientv3.Client, path string) +} + +type watcher struct { + wCh clientv3.WatchChan + sync.RWMutex +} + +// NewWatcher creates a new watcher. +func NewWatcher() Watcher { + return &watcher{} +} + +// WatchChan implements SyncerWatch.WatchChan interface. +func (w *watcher) WatchChan() clientv3.WatchChan { + w.RLock() + defer w.RUnlock() + return w.wCh +} + +// Watch implements SyncerWatch.Watch interface. +func (w *watcher) Watch(ctx context.Context, etcdCli *clientv3.Client, path string) { + w.Lock() + w.wCh = etcdCli.Watch(ctx, path) + w.Unlock() +} + +// Rewatch implements SyncerWatch.Rewatch interface. +func (w *watcher) Rewatch(ctx context.Context, etcdCli *clientv3.Client, path string) { + startTime := time.Now() + // Make sure the wCh doesn't receive the information of 'close' before we finish the rewatch. + w.Lock() + w.wCh = nil + w.Unlock() + + go func() { + defer func() { + metrics.DeploySyncerHistogram.WithLabelValues(metrics.SyncerRewatch, metrics.RetLabel(nil)).Observe(time.Since(startTime).Seconds()) + }() + wCh := etcdCli.Watch(ctx, path) + + w.Lock() + w.wCh = wCh + w.Unlock() + logutil.DDLLogger().Info("syncer rewatch global info finished") + }() +} diff --git a/pkg/distsql/BUILD.bazel b/pkg/distsql/BUILD.bazel index 7caa213b87619..fe5073763908d 100644 --- a/pkg/distsql/BUILD.bazel +++ b/pkg/distsql/BUILD.bazel @@ -48,7 +48,6 @@ go_library( "@com_github_tikv_client_go_v2//tikvrpc/interceptor", "@com_github_tikv_client_go_v2//util", "@org_golang_google_grpc//metadata", - "@org_golang_x_exp//maps", "@org_uber_go_zap//:zap", ], ) diff --git a/pkg/distsql/request_builder.go b/pkg/distsql/request_builder.go index f5058361c860c..9f0b8b24a2a18 100644 --- a/pkg/distsql/request_builder.go +++ b/pkg/distsql/request_builder.go @@ -47,6 +47,9 @@ type RequestBuilder struct { kv.Request is infoschema.MetaOnlyInfoSchema err error + + // When SetDAGRequest is called, builder will also this field. + dag *tipb.DAGRequest } // Build builds a "kv.Request". @@ -75,6 +78,29 @@ func (builder *RequestBuilder) Build() (*kv.Request, error) { if builder.Request.KeyRanges == nil { builder.Request.KeyRanges = kv.NewNonPartitionedKeyRanges(nil) } + + if dag := builder.dag; dag != nil { + if execCnt := len(dag.Executors); execCnt == 1 { + oldConcurrency := builder.Request.Concurrency + // select * from t order by id + if builder.Request.KeepOrder { + // When the DAG is just simple scan and keep order, set concurrency to 2. + // If a lot data are returned to client, mysql protocol is the bottleneck so concurrency 2 is enough. + // If very few data are returned to client, the speed is not optimal but good enough. + switch dag.Executors[0].Tp { + case tipb.ExecType_TypeTableScan, tipb.ExecType_TypeIndexScan, tipb.ExecType_TypePartitionTableScan: + builder.Request.Concurrency = 2 + failpoint.Inject("testRateLimitActionMockConsumeAndAssert", func(val failpoint.Value) { + if val.(bool) { + // When the concurrency is too small, test case tests/realtikvtest/sessiontest.TestCoprocessorOOMAction can't trigger OOM condition + builder.Request.Concurrency = oldConcurrency + } + }) + } + } + } + } + return &builder.Request, builder.err } @@ -154,17 +180,18 @@ func (builder *RequestBuilder) SetDAGRequest(dag *tipb.DAGRequest) *RequestBuild builder.Request.Tp = kv.ReqTypeDAG builder.Request.Cacheable = true builder.Request.Data, builder.err = dag.Marshal() - } - if execCnt := len(dag.Executors); execCnt != 0 && dag.Executors[execCnt-1].GetLimit() != nil { - limit := dag.Executors[execCnt-1].GetLimit() - builder.Request.LimitSize = limit.GetLimit() - // When the DAG is just simple scan and small limit, set concurrency to 1 would be sufficient. - if execCnt == 2 { - if limit.Limit < estimatedRegionRowCount { - if kr := builder.Request.KeyRanges; kr != nil { - builder.Request.Concurrency = kr.PartitionNum() - } else { - builder.Request.Concurrency = 1 + builder.dag = dag + if execCnt := len(dag.Executors); execCnt != 0 && dag.Executors[execCnt-1].GetLimit() != nil { + limit := dag.Executors[execCnt-1].GetLimit() + builder.Request.LimitSize = limit.GetLimit() + // When the DAG is just simple scan and small limit, set concurrency to 1 would be sufficient. + if execCnt == 2 { + if limit.Limit < estimatedRegionRowCount { + if kr := builder.Request.KeyRanges; kr != nil { + builder.Request.Concurrency = kr.PartitionNum() + } else { + builder.Request.Concurrency = 1 + } } } } diff --git a/pkg/distsql/select_result.go b/pkg/distsql/select_result.go index 5d485d4cf1483..26369c7b1285e 100644 --- a/pkg/distsql/select_result.go +++ b/pkg/distsql/select_result.go @@ -19,6 +19,7 @@ import ( "container/heap" "context" "fmt" + "maps" "strconv" "sync/atomic" "time" @@ -46,7 +47,6 @@ import ( "github.com/tikv/client-go/v2/tikv" clientutil "github.com/tikv/client-go/v2/util" "go.uber.org/zap" - "golang.org/x/exp/maps" ) var ( diff --git a/pkg/disttask/framework/storage/BUILD.bazel b/pkg/disttask/framework/storage/BUILD.bazel index f9b0edf64bc11..d1dc457934de7 100644 --- a/pkg/disttask/framework/storage/BUILD.bazel +++ b/pkg/disttask/framework/storage/BUILD.bazel @@ -17,13 +17,13 @@ go_library( "//pkg/kv", "//pkg/sessionctx", "//pkg/sessionctx/variable", + "//pkg/util", "//pkg/util/chunk", "//pkg/util/cpu", "//pkg/util/logutil", "//pkg/util/sqlescape", "//pkg/util/sqlexec", "@com_github_docker_go_units//:go-units", - "@com_github_ngaut_pools//:pools", "@com_github_pingcap_errors//:errors", "@com_github_pingcap_failpoint//:failpoint", "@com_github_tikv_client_go_v2//util", diff --git a/pkg/disttask/framework/storage/task_table.go b/pkg/disttask/framework/storage/task_table.go index 1fb3e1b0746cd..d2c6f77e232c3 100644 --- a/pkg/disttask/framework/storage/task_table.go +++ b/pkg/disttask/framework/storage/task_table.go @@ -21,16 +21,16 @@ import ( "sync/atomic" "github.com/docker/go-units" - "github.com/ngaut/pools" "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/disttask/framework/proto" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/sessionctx/variable" + "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/chunk" "github.com/pingcap/tidb/pkg/util/sqlexec" - "github.com/tikv/client-go/v2/util" + clitutil "github.com/tikv/client-go/v2/util" ) const ( @@ -99,12 +99,7 @@ type TaskHandle interface { // TaskManager is the manager of task and subtask. type TaskManager struct { - sePool sessionPool -} - -type sessionPool interface { - Get() (pools.Resource, error) - Put(resource pools.Resource) + sePool util.SessionPool } var _ SessionExecutor = &TaskManager{} @@ -117,7 +112,7 @@ var ( ) // NewTaskManager creates a new task manager. -func NewTaskManager(sePool sessionPool) *TaskManager { +func NewTaskManager(sePool util.SessionPool) *TaskManager { return &TaskManager{ sePool: sePool, } @@ -149,7 +144,7 @@ func (mgr *TaskManager) WithNewSession(fn func(se sessionctx.Context) error) err // WithNewTxn executes the fn in a new transaction. func (mgr *TaskManager) WithNewTxn(ctx context.Context, fn func(se sessionctx.Context) error) error { - ctx = util.WithInternalSourceType(ctx, kv.InternalDistTask) + ctx = clitutil.WithInternalSourceType(ctx, kv.InternalDistTask) return mgr.WithNewSession(func(se sessionctx.Context) (err error) { _, err = sqlexec.ExecSQL(ctx, se.GetSQLExecutor(), "begin") if err != nil { diff --git a/pkg/domain/BUILD.bazel b/pkg/domain/BUILD.bazel index 57c3ee876f8ff..d369511566fd9 100644 --- a/pkg/domain/BUILD.bazel +++ b/pkg/domain/BUILD.bazel @@ -53,6 +53,7 @@ go_library( "//pkg/parser/model", "//pkg/parser/mysql", "//pkg/parser/terror", + "//pkg/planner/core/metrics", "//pkg/privilege/privileges", "//pkg/sessionctx", "//pkg/sessionctx/sessionstates", @@ -60,6 +61,8 @@ go_library( "//pkg/sessionctx/variable", "//pkg/statistics", "//pkg/statistics/handle", + "//pkg/statistics/handle/autoanalyze", + "//pkg/statistics/handle/initstats", "//pkg/statistics/handle/logutil", "//pkg/statistics/handle/util", "//pkg/store/helper", @@ -81,6 +84,7 @@ go_library( "//pkg/util/globalconn", "//pkg/util/intest", "//pkg/util/logutil", + "//pkg/util/mathutil", "//pkg/util/memory", "//pkg/util/memoryusagealarm", "//pkg/util/printer", @@ -129,12 +133,11 @@ go_test( "ru_stats_test.go", "schema_checker_test.go", "schema_validator_test.go", - "session_pool_test.go", "topn_slow_query_test.go", ], embed = [":domain"], flaky = True, - shard_count = 29, + shard_count = 28, deps = [ "//pkg/config", "//pkg/ddl", @@ -151,7 +154,6 @@ go_test( "//pkg/parser/terror", "//pkg/server", "//pkg/session", - "//pkg/sessionctx", "//pkg/sessionctx/variable", "//pkg/store/mockstore", "//pkg/testkit", diff --git a/pkg/domain/db_test.go b/pkg/domain/db_test.go index 983e526745c93..60d5003374ce4 100644 --- a/pkg/domain/db_test.go +++ b/pkg/domain/db_test.go @@ -119,9 +119,9 @@ func TestAbnormalSessionPool(t *testing.T) { info.SetSessionManager(svr) pool := domain.SysSessionPool() - failpoint.Enable("github.com/pingcap/tidb/pkg/domain/mockSessionPoolReturnError", "return") + failpoint.Enable("github.com/pingcap/tidb/pkg/util/mockSessionPoolReturnError", "return") se, err := pool.Get() require.Error(t, err) - failpoint.Disable("github.com/pingcap/tidb/pkg/domain/mockSessionPoolReturnError") + failpoint.Disable("github.com/pingcap/tidb/pkg/util/mockSessionPoolReturnError") require.Equal(t, svr.InternalSessionExists(se), false) } diff --git a/pkg/domain/domain.go b/pkg/domain/domain.go index 49866feb5b0fe..239bab3ff1be8 100644 --- a/pkg/domain/domain.go +++ b/pkg/domain/domain.go @@ -62,13 +62,17 @@ import ( "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/parser/terror" + metrics2 "github.com/pingcap/tidb/pkg/planner/core/metrics" "github.com/pingcap/tidb/pkg/privilege/privileges" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/sessionctx/sessionstates" "github.com/pingcap/tidb/pkg/sessionctx/sysproctrack" "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/statistics/handle" + "github.com/pingcap/tidb/pkg/statistics/handle/autoanalyze" + "github.com/pingcap/tidb/pkg/statistics/handle/initstats" statslogutil "github.com/pingcap/tidb/pkg/statistics/handle/logutil" + handleutil "github.com/pingcap/tidb/pkg/statistics/handle/util" "github.com/pingcap/tidb/pkg/store/helper" "github.com/pingcap/tidb/pkg/ttl/ttlworker" "github.com/pingcap/tidb/pkg/types" @@ -83,6 +87,7 @@ import ( "github.com/pingcap/tidb/pkg/util/globalconn" "github.com/pingcap/tidb/pkg/util/intest" "github.com/pingcap/tidb/pkg/util/logutil" + "github.com/pingcap/tidb/pkg/util/mathutil" "github.com/pingcap/tidb/pkg/util/memory" "github.com/pingcap/tidb/pkg/util/memoryusagealarm" "github.com/pingcap/tidb/pkg/util/replayer" @@ -147,7 +152,8 @@ type Domain struct { globalCfgSyncer *globalconfigsync.GlobalConfigSyncer m syncutil.Mutex SchemaValidator SchemaValidator - sysSessionPool *sessionPool + schemaLease time.Duration + sysSessionPool util.SessionPool exit chan struct{} // `etcdClient` must be used when keyspace is not set, or when the logic to each etcd path needs to be separated by keyspace. etcdClient *clientv3.Client @@ -166,7 +172,12 @@ type Domain struct { // TODO: use Run for each process in future pr wg *util.WaitGroupEnhancedWrapper statsUpdating atomicutil.Int32 - cancelFns struct { + // this is the parent context of DDL, and also used by other loops such as closestReplicaReadCheckLoop. + // there are other top level contexts in the domain, such as the ones used in + // InitDistTaskLoop and loadStatsWorker, domain only stores the cancelFns of them. + // TODO unify top level context. + ctx context.Context + cancelFns struct { mu sync.Mutex fns []context.CancelFunc } @@ -199,11 +210,6 @@ type Domain struct { mdlCheckTableInfo *mdlCheckTableInfo - analyzeMu struct { - sync.Mutex - sctxs map[sessionctx.Context]bool - } - mdlCheckCh chan struct{} stopAutoAnalyze atomicutil.Bool minJobIDRefresher *systable.MinJobIDRefresher @@ -273,7 +279,7 @@ func (do *Domain) EtcdClient() *clientv3.Client { // 3. currentSchemaVersion(before loading) // 4. the changed table IDs if it is not full load // 5. an error if any -func (do *Domain) loadInfoSchema(startTS uint64) (infoschema.InfoSchema, bool, int64, *transaction.RelatedSchemaChange, error) { +func (do *Domain) loadInfoSchema(startTS uint64, isSnapshot bool) (infoschema.InfoSchema, bool, int64, *transaction.RelatedSchemaChange, error) { beginTime := time.Now() defer func() { infoschema_metrics.LoadSchemaDurationTotal.Observe(time.Since(beginTime).Seconds()) @@ -294,7 +300,6 @@ func (do *Domain) loadInfoSchema(startTS uint64) (infoschema.InfoSchema, bool, i schemaTs = 0 } - enableV2 := variable.SchemaCacheSize.Load() > 0 if is := do.infoCache.GetByVersion(neededSchemaVersion); is != nil { isV2, raw := infoschema.IsV2(is) if isV2 { @@ -310,18 +315,17 @@ func (do *Domain) loadInfoSchema(startTS uint64) (infoschema.InfoSchema, bool, i // the insert method check if schemaTs is zero do.infoCache.Insert(is, schemaTs) - if enableV2 == isV2 { - return is, true, 0, nil, nil - } + return is, true, 0, nil, nil } - var isV1V2Switch bool + var oldIsV2 bool + enableV2 := variable.SchemaCacheSize.Load() > 0 currentSchemaVersion := int64(0) if oldInfoSchema := do.infoCache.GetLatest(); oldInfoSchema != nil { currentSchemaVersion = oldInfoSchema.SchemaMetaVersion() - isV2, _ := infoschema.IsV2(oldInfoSchema) - isV1V2Switch = enableV2 != isV2 + oldIsV2, _ = infoschema.IsV2(oldInfoSchema) } + useV2, isV1V2Switch := shouldUseV2(enableV2, oldIsV2, isSnapshot) // TODO: tryLoadSchemaDiffs has potential risks of failure. And it becomes worse in history reading cases. // It is only kept because there is no alternative diff/partial loading solution. @@ -331,8 +335,8 @@ func (do *Domain) loadInfoSchema(startTS uint64) (infoschema.InfoSchema, bool, i // 3. There are less 100 diffs. // 4. No regenerated schema diff. startTime := time.Now() - if currentSchemaVersion != 0 && neededSchemaVersion > currentSchemaVersion && neededSchemaVersion-currentSchemaVersion < LoadSchemaDiffVersionGapThreshold { - is, relatedChanges, diffTypes, err := do.tryLoadSchemaDiffs(m, currentSchemaVersion, neededSchemaVersion, startTS) + if !isV1V2Switch && currentSchemaVersion != 0 && neededSchemaVersion > currentSchemaVersion && neededSchemaVersion-currentSchemaVersion < LoadSchemaDiffVersionGapThreshold { + is, relatedChanges, diffTypes, err := do.tryLoadSchemaDiffs(useV2, m, currentSchemaVersion, neededSchemaVersion, startTS) if err == nil { infoschema_metrics.LoadSchemaDurationLoadDiff.Observe(time.Since(startTime).Seconds()) isV2, _ := infoschema.IsV2(is) @@ -368,11 +372,12 @@ func (do *Domain) loadInfoSchema(startTS uint64) (infoschema.InfoSchema, bool, i } infoschema_metrics.LoadSchemaDurationLoadAll.Observe(time.Since(startTime).Seconds()) - newISBuilder, err := infoschema.NewBuilder(do, do.sysFacHack, do.infoCache.Data).InitWithDBInfos(schemas, policies, resourceGroups, neededSchemaVersion) + builder := infoschema.NewBuilder(do, do.sysFacHack, do.infoCache.Data, useV2) + err = builder.InitWithDBInfos(schemas, policies, resourceGroups, neededSchemaVersion) if err != nil { return nil, false, currentSchemaVersion, nil, err } - is := newISBuilder.Build(startTS) + is := builder.Build(startTS) isV2, _ := infoschema.IsV2(is) logutil.BgLogger().Info("full load InfoSchema success", zap.Bool("isV2", isV2), @@ -458,20 +463,22 @@ func (do *Domain) fetchAllSchemasWithTables(m *meta.Meta) ([]*model.DBInfo, erro const fetchSchemaConcurrency = 1 func (*Domain) splitForConcurrentFetch(schemas []*model.DBInfo) [][]*model.DBInfo { - groupSize := (len(schemas) + fetchSchemaConcurrency - 1) / fetchSchemaConcurrency - if variable.SchemaCacheSize.Load() > 0 && len(schemas) > 1000 { + groupCnt := fetchSchemaConcurrency + schemaCnt := len(schemas) + if variable.SchemaCacheSize.Load() > 0 && schemaCnt > 1000 { // TODO: Temporary solution to speed up when too many databases, will refactor it later. - groupSize = 8 + groupCnt = 8 } - splitted := make([][]*model.DBInfo, 0, fetchSchemaConcurrency) - schemaCnt := len(schemas) - for i := 0; i < schemaCnt; i += groupSize { - end := i + groupSize - if end > schemaCnt { - end = schemaCnt - } - splitted = append(splitted, schemas[i:end]) + + splitted := make([][]*model.DBInfo, 0, groupCnt) + groupSizes := mathutil.Divide2Batches(schemaCnt, groupCnt) + + start := 0 + for _, groupSize := range groupSizes { + splitted = append(splitted, schemas[start:start+groupSize]) + start += groupSize } + return splitted } @@ -484,7 +491,7 @@ func (*Domain) fetchSchemasWithTables(schemas []*model.DBInfo, m *meta.Meta, don var tables []*model.TableInfo var err error if variable.SchemaCacheSize.Load() > 0 && !infoschema.IsSpecialDB(di.Name.L) { - name2ID, specialTableInfos, err := meta.GetAllNameToIDAndSpecialAttributeInfo(m, di.ID) + name2ID, specialTableInfos, err := meta.GetAllNameToIDAndTheMustLoadedTableInfo(m, di.ID) if err != nil { done <- err return @@ -504,7 +511,7 @@ func (*Domain) fetchSchemasWithTables(schemas []*model.DBInfo, m *meta.Meta, don infoschema.ConvertOldVersionUTF8ToUTF8MB4IfNeed(tbInfo) } } - di.Tables = make([]*model.TableInfo, 0, len(tables)) + diTables := make([]*model.TableInfo, 0, len(tables)) for _, tbl := range tables { if tbl.State != model.StatePublic { // schema is not public, can't be used outside. @@ -522,17 +529,28 @@ func (*Domain) fetchSchemasWithTables(schemas []*model.DBInfo, m *meta.Meta, don // haven't been deleted from the repair table list. // Since the repairment is done and table is visible, we should load it. } - di.Tables = append(di.Tables, tbl) + diTables = append(diTables, tbl) } + di.Deprecated.Tables = diTables } done <- nil } +// shouldUseV2 decides whether to use infoschema v2. +// When loading snapshot, infoschema should keep the same as before to avoid v1/v2 switch. +// Otherwise, it is decided by enabledV2. +func shouldUseV2(enableV2 bool, oldIsV2 bool, isSnapshot bool) (useV2 bool, isV1V2Switch bool) { + if isSnapshot { + return oldIsV2, false + } + return enableV2, enableV2 != oldIsV2 +} + // tryLoadSchemaDiffs tries to only load latest schema changes. // Return true if the schema is loaded successfully. // Return false if the schema can not be loaded by schema diff, then we need to do full load. // The second returned value is the delta updated table and partition IDs. -func (do *Domain) tryLoadSchemaDiffs(m *meta.Meta, usedVersion, newVersion int64, startTS uint64) (infoschema.InfoSchema, *transaction.RelatedSchemaChange, []string, error) { +func (do *Domain) tryLoadSchemaDiffs(useV2 bool, m *meta.Meta, usedVersion, newVersion int64, startTS uint64) (infoschema.InfoSchema, *transaction.RelatedSchemaChange, []string, error) { var diffs []*model.SchemaDiff for usedVersion < newVersion { usedVersion++ @@ -567,17 +585,18 @@ func (do *Domain) tryLoadSchemaDiffs(m *meta.Meta, usedVersion, newVersion int64 } }) - builder, err := infoschema.NewBuilder(do, do.sysFacHack, do.infoCache.Data).InitWithOldInfoSchema(do.infoCache.GetLatest()) + builder := infoschema.NewBuilder(do, do.sysFacHack, do.infoCache.Data, useV2) + err := builder.InitWithOldInfoSchema(do.infoCache.GetLatest()) if err != nil { return nil, nil, nil, errors.Trace(err) } + builder.WithStore(do.store).SetDeltaUpdateBundles() phyTblIDs := make([]int64, 0, len(diffs)) actions := make([]uint64, 0, len(diffs)) diffTypes := make([]string, 0, len(diffs)) for _, diff := range diffs { if diff.RegenerateSchemaMap { - do.infoCache.Data = infoschema.NewData() return nil, nil, nil, errors.Errorf("Meets a schema diff with RegenerateSchemaMap flag") } ids, err := builder.ApplyDiff(m, diff) @@ -620,7 +639,7 @@ func (do *Domain) GetSnapshotInfoSchema(snapshotTS uint64) (infoschema.InfoSchem if is := do.infoCache.GetBySnapshotTS(snapshotTS); is != nil { return is, nil } - is, _, _, _, err := do.loadInfoSchema(snapshotTS) + is, _, _, _, err := do.loadInfoSchema(snapshotTS, true) infoschema_metrics.LoadSchemaCounterSnapshot.Inc() return is, err } @@ -721,12 +740,12 @@ func (do *Domain) Reload() error { } version := ver.Ver - is, hitCache, oldSchemaVersion, changes, err := do.loadInfoSchema(version) + is, hitCache, oldSchemaVersion, changes, err := do.loadInfoSchema(version, false) if err != nil { if version = getFlashbackStartTSFromErrorMsg(err); version != 0 { // use the latest available version to create domain version-- - is, hitCache, oldSchemaVersion, changes, err = do.loadInfoSchema(version) + is, hitCache, oldSchemaVersion, changes, err = do.loadInfoSchema(version, false) } } if err != nil { @@ -757,7 +776,7 @@ func (do *Domain) Reload() error { // lease renew, so it must be executed despite it is cache or not do.SchemaValidator.Update(version, oldSchemaVersion, is.SchemaMetaVersion(), changes) - lease := do.DDL().GetLease() + lease := do.GetSchemaLease() sub := time.Since(startTime) // Reload interval is lease / 2, if load schema time elapses more than this interval, // some query maybe responded by ErrInfoSchemaExpired error. @@ -899,6 +918,24 @@ func (do *Domain) topologySyncerKeeper() { } } +// CheckAutoAnalyzeWindows checks the auto analyze windows and kill the auto analyze process if it is not in the window. +func (do *Domain) CheckAutoAnalyzeWindows() { + se, err := do.sysSessionPool.Get() + + if err != nil { + logutil.BgLogger().Warn("get system session failed", zap.Error(err)) + return + } + // Make sure the session is new. + sctx := se.(sessionctx.Context) + defer do.sysSessionPool.Put(se) + if !autoanalyze.CheckAutoAnalyzeWindow(sctx) { + for _, id := range handleutil.GlobalAutoAnalyzeProcessList.All() { + do.SysProcTracker().KillSysProcess(id) + } + } +} + func (do *Domain) refreshMDLCheckTableInfo() { se, err := do.sysSessionPool.Get() @@ -1018,11 +1055,11 @@ func (do *Domain) mdlCheckLoop() { } } -func (do *Domain) loadSchemaInLoop(ctx context.Context, lease time.Duration) { +func (do *Domain) loadSchemaInLoop(ctx context.Context) { defer util.Recover(metrics.LabelDomain, "loadSchemaInLoop", nil, true) // Lease renewal can run at any frequency. // Use lease/2 here as recommend by paper. - ticker := time.NewTicker(lease / 2) + ticker := time.NewTicker(do.schemaLease / 2) defer func() { ticker.Stop() logutil.BgLogger().Info("loadSchemaInLoop exited.") @@ -1203,13 +1240,27 @@ func (do *Domain) Close() { const resourceIdleTimeout = 3 * time.Minute // resources in the ResourcePool will be recycled after idleTimeout // NewDomain creates a new domain. Should not create multiple domains for the same store. -func NewDomain(store kv.Storage, ddlLease time.Duration, statsLease time.Duration, dumpFileGcLease time.Duration, factory pools.Factory) *Domain { +func NewDomain(store kv.Storage, schemaLease time.Duration, statsLease time.Duration, dumpFileGcLease time.Duration, factory pools.Factory) *Domain { + intest.Assert(schemaLease > 0, "schema lease should be a positive duration") capacity := 200 // capacity of the sysSessionPool size do := &Domain{ - store: store, - exit: make(chan struct{}), - sysSessionPool: newSessionPool(capacity, factory), + store: store, + exit: make(chan struct{}), + sysSessionPool: util.NewSessionPool( + capacity, factory, + func(r pools.Resource) { + _, ok := r.(sessionctx.Context) + intest.Assert(ok) + infosync.StoreInternalSession(r) + }, + func(r pools.Resource) { + _, ok := r.(sessionctx.Context) + intest.Assert(ok) + infosync.DeleteInternalSession(r) + }, + ), statsLease: statsLease, + schemaLease: schemaLease, slowQuery: newTopNSlowQueries(config.GetGlobalConfig().InMemSlowQueryTopNNum, time.Hour*24*7, config.GetGlobalConfig().InMemSlowQueryRecentNum), dumpFileGcChecker: &dumpFileGcChecker{gcLease: dumpFileGcLease, paths: []string{replayer.GetPlanReplayerDirName(), GetOptimizerTraceDirName(), GetExtractTaskDirName()}}, mdlCheckTableInfo: &mdlCheckTableInfo{ @@ -1223,7 +1274,7 @@ func NewDomain(store kv.Storage, ddlLease time.Duration, statsLease time.Duratio do.infoCache = infoschema.NewCache(do, int(variable.SchemaVersionCacheLimit.Load())) do.stopAutoAnalyze.Store(false) do.wg = util.NewWaitGroupEnhancedWrapper("domain", do.exit, config.GetGlobalConfig().TiDBEnableExitCheck) - do.SchemaValidator = NewSchemaValidator(ddlLease, do) + do.SchemaValidator = NewSchemaValidator(schemaLease, do) do.expensiveQueryHandle = expensivequery.NewExpensiveQueryHandle(do.exit) do.memoryUsageAlarmHandle = memoryusagealarm.NewMemoryUsageAlarmHandle(do.exit) do.serverMemoryLimitHandle = servermemorylimit.NewServerMemoryLimitHandle(do.exit) @@ -1260,9 +1311,9 @@ func newEtcdCli(addrs []string, ebd kv.EtcdBackend) (*clientv3.Client, error) { return cli, err } -// Init initializes a domain. +// Init initializes a domain. after return, session can be used to do DMLs but not +// DDLs which can be used after domain Start. func (do *Domain) Init( - ddlLease time.Duration, sysExecutorFactory func(*Domain) (pools.Resource, error), ddlInjector func(ddl.DDL, ddl.Executor, *infoschema.InfoCache) *schematracker.Checker, ) error { @@ -1294,27 +1345,11 @@ func (do *Domain) Init( } } - // TODO: Here we create new sessions with sysFac in DDL, - // which will use `do` as Domain instead of call `domap.Get`. - // That's because `domap.Get` requires a lock, but before - // we initialize Domain finish, we can't require that again. - // After we remove the lazy logic of creating Domain, we - // can simplify code here. - sysFac := func() (pools.Resource, error) { - return sysExecutorFactory(do) - } - sysCtxPool := pools.NewResourcePool(sysFac, 512, 512, resourceIdleTimeout) - ctx, cancelFunc := context.WithCancel(context.Background()) + do.ctx = ctx do.cancelFns.mu.Lock() do.cancelFns.fns = append(do.cancelFns.fns, cancelFunc) do.cancelFns.mu.Unlock() - var callback ddl.Callback - newCallbackFunc, err := ddl.GetCustomizedHook("default_hook") - if err != nil { - return errors.Trace(err) - } - callback = newCallbackFunc(do) d := do.ddl eBak := do.ddlExecutor do.ddl, do.ddlExecutor = ddl.NewDDL( @@ -1323,8 +1358,7 @@ func (do *Domain) Init( ddl.WithStore(do.store), ddl.WithAutoIDClient(do.autoidClient), ddl.WithInfoCache(do.infoCache), - ddl.WithHook(callback), - ddl.WithLease(ddlLease), + ddl.WithLease(do.schemaLease), ddl.WithSchemaLoader(do), ) @@ -1344,6 +1378,7 @@ func (do *Domain) Init( // step 1: prepare the info/schema syncer which domain reload needed. pdCli, pdHTTPCli := do.GetPDClient(), do.GetPDHTTPClient() skipRegisterToDashboard := config.GetGlobalConfig().SkipRegisterToDashboard + var err error do.info, err = infosync.GlobalInfoSyncerInit(ctx, do.ddl.GetID(), do.ServerID, do.etcdClient, do.unprefixedEtcdCli, pdCli, pdHTTPCli, do.Store().GetCodec(), skipRegisterToDashboard) @@ -1371,9 +1406,6 @@ func (do *Domain) Init( } do.isLostConnectionToPD.Store(0) } - - do.wg.Add(1) - go do.serverIDKeeper() } else { // set serverID for standalone deployment to enable 'KILL'. atomic.StoreUint64(&do.serverID, serverIDForStandalone) @@ -1395,33 +1427,49 @@ func (do *Domain) Init( return err } - // step 4: start the ddl after the domain reload, avoiding some internal sql running before infoSchema construction. - err = do.ddl.Start(sysCtxPool) - if err != nil { - return err - } - do.minJobIDRefresher = do.ddl.GetMinJobIDRefresher() - - // TODO there are many place set ddlLease to 0, remove them completely, we want - // UT and even local uni-store to run similar code path as normal. - if ddlLease == 0 { - ddlLease = time.Second - } - sub := time.Since(startReloadTime) // The reload(in step 2) operation takes more than ddlLease and a new reload operation was not performed, // the next query will respond by ErrInfoSchemaExpired error. So we do a new reload to update schemaValidator.latestSchemaExpire. - if sub > (ddlLease / 2) { + if sub > (do.schemaLease / 2) { logutil.BgLogger().Warn("loading schema and starting ddl take a long time, we do a new reload", zap.Duration("take time", sub)) err = do.Reload() if err != nil { return err } } + return nil +} + +// Start starts the domain. After start, DDLs can be executed using session, see +// Init also. +func (do *Domain) Start() error { + gCfg := config.GetGlobalConfig() + if gCfg.EnableGlobalKill && do.etcdClient != nil { + do.wg.Add(1) + go do.serverIDKeeper() + } + + // TODO: Here we create new sessions with sysFac in DDL, + // which will use `do` as Domain instead of call `domap.Get`. + // That's because `domap.Get` requires a lock, but before + // we initialize Domain finish, we can't require that again. + // After we remove the lazy logic of creating Domain, we + // can simplify code here. + sysFac := func() (pools.Resource, error) { + return do.sysExecutorFactory(do) + } + sysCtxPool := pools.NewResourcePool(sysFac, 512, 512, resourceIdleTimeout) + + // start the ddl after the domain reload, avoiding some internal sql running before infoSchema construction. + err := do.ddl.Start(sysCtxPool) + if err != nil { + return err + } + do.minJobIDRefresher = do.ddl.GetMinJobIDRefresher() // Local store needs to get the change information for every DDL state in each session. do.wg.Run(func() { - do.loadSchemaInLoop(ctx, ddlLease) + do.loadSchemaInLoop(do.ctx) }, "loadSchemaInLoop") do.wg.Run(do.mdlCheckLoop, "mdlCheckLoop") do.wg.Run(do.topNSlowQueryLoop, "topNSlowQueryLoop") @@ -1429,16 +1477,18 @@ func (do *Domain) Init( do.wg.Run(do.globalConfigSyncerKeeper, "globalConfigSyncerKeeper") do.wg.Run(do.runawayStartLoop, "runawayStartLoop") do.wg.Run(do.requestUnitsWriterLoop, "requestUnitsWriterLoop") + skipRegisterToDashboard := gCfg.SkipRegisterToDashboard if !skipRegisterToDashboard { do.wg.Run(do.topologySyncerKeeper, "topologySyncerKeeper") } + pdCli := do.GetPDClient() if pdCli != nil { do.wg.Run(func() { - do.closestReplicaReadCheckLoop(ctx, pdCli) + do.closestReplicaReadCheckLoop(do.ctx, pdCli) }, "closestReplicaReadCheckLoop") } - err = do.initLogBackup(ctx, pdCli) + err = do.initLogBackup(do.ctx, pdCli) if err != nil { return err } @@ -1446,6 +1496,11 @@ func (do *Domain) Init( return nil } +// GetSchemaLease return the schema lease. +func (do *Domain) GetSchemaLease() time.Duration { + return do.schemaLease +} + // InitInfo4Test init infosync for distributed execution test. func (do *Domain) InitInfo4Test() { infosync.MockGlobalServerInfoManagerEntry.Add(do.ddl.GetID(), do.ServerID) @@ -1699,84 +1754,8 @@ func (do *Domain) distTaskFrameworkLoop(ctx context.Context, taskManager *storag } } -type sessionPool struct { - resources chan pools.Resource - factory pools.Factory - mu struct { - sync.RWMutex - closed bool - } -} - -func newSessionPool(capacity int, factory pools.Factory) *sessionPool { - return &sessionPool{ - resources: make(chan pools.Resource, capacity), - factory: factory, - } -} - -func (p *sessionPool) Get() (resource pools.Resource, err error) { - var ok bool - select { - case resource, ok = <-p.resources: - if !ok { - err = errors.New("session pool closed") - } - default: - resource, err = p.factory() - } - - // Put the internal session to the map of SessionManager - failpoint.Inject("mockSessionPoolReturnError", func() { - err = errors.New("mockSessionPoolReturnError") - }) - - if nil == err { - _, ok = resource.(sessionctx.Context) - intest.Assert(ok) - infosync.StoreInternalSession(resource) - } - - return -} - -func (p *sessionPool) Put(resource pools.Resource) { - _, ok := resource.(sessionctx.Context) - intest.Assert(ok) - - p.mu.RLock() - defer p.mu.RUnlock() - // Delete the internal session to the map of SessionManager - infosync.DeleteInternalSession(resource) - if p.mu.closed { - resource.Close() - return - } - - select { - case p.resources <- resource: - default: - resource.Close() - } -} - -func (p *sessionPool) Close() { - p.mu.Lock() - if p.mu.closed { - p.mu.Unlock() - return - } - p.mu.closed = true - close(p.resources) - p.mu.Unlock() - - for r := range p.resources { - r.Close() - } -} - // SysSessionPool returns the system session pool. -func (do *Domain) SysSessionPool() *sessionPool { +func (do *Domain) SysSessionPool() util.SessionPool { return do.sysSessionPool } @@ -2124,7 +2103,7 @@ func (do *Domain) SetupDumpFileGCChecker(ctx sessionctx.Context) { // SetupExtractHandle setups extract handler func (do *Domain) SetupExtractHandle(sctxs []sessionctx.Context) { - do.extractTaskHandle = NewExtractHandler(sctxs) + do.extractTaskHandle = newExtractHandler(do.ctx, sctxs) } var planReplayerHandleLease atomic.Uint64 @@ -2269,7 +2248,7 @@ func (do *Domain) StatsHandle() *handle.Handle { // CreateStatsHandle is used only for test. func (do *Domain) CreateStatsHandle(ctx, initStatsCtx sessionctx.Context) error { - h, err := handle.NewHandle(ctx, initStatsCtx, do.statsLease, do.sysSessionPool, &do.sysProcesses, do.GetAutoAnalyzeProcID) + h, err := handle.NewHandle(ctx, initStatsCtx, do.statsLease, do.sysSessionPool, &do.sysProcesses, do.NextConnID, do.ReleaseConnID) if err != nil { return err } @@ -2292,46 +2271,6 @@ func (do *Domain) SetStatsUpdating(val bool) { } } -// ReleaseAnalyzeExec returned extra exec for Analyze -func (do *Domain) ReleaseAnalyzeExec(sctxs []sessionctx.Context) { - do.analyzeMu.Lock() - defer do.analyzeMu.Unlock() - for _, ctx := range sctxs { - do.analyzeMu.sctxs[ctx] = false - } -} - -// FetchAnalyzeExec get needed exec for analyze -func (do *Domain) FetchAnalyzeExec(need int) []sessionctx.Context { - if need < 1 { - return nil - } - count := 0 - r := make([]sessionctx.Context, 0) - do.analyzeMu.Lock() - defer do.analyzeMu.Unlock() - for sctx, used := range do.analyzeMu.sctxs { - if used { - continue - } - r = append(r, sctx) - do.analyzeMu.sctxs[sctx] = true - count++ - if count >= need { - break - } - } - return r -} - -// SetupAnalyzeExec setups exec for Analyze Executor -func (do *Domain) SetupAnalyzeExec(ctxs []sessionctx.Context) { - do.analyzeMu.sctxs = make(map[sessionctx.Context]bool) - for _, ctx := range ctxs { - do.analyzeMu.sctxs[ctx] = false - } -} - // LoadAndUpdateStatsLoop loads and updates stats info. func (do *Domain) LoadAndUpdateStatsLoop(ctxs []sessionctx.Context, initStatsCtx sessionctx.Context) error { if err := do.UpdateTableStatsLoop(ctxs[0], initStatsCtx); err != nil { @@ -2346,7 +2285,7 @@ func (do *Domain) LoadAndUpdateStatsLoop(ctxs []sessionctx.Context, initStatsCtx // It should be called only once in BootstrapSession. func (do *Domain) UpdateTableStatsLoop(ctx, initStatsCtx sessionctx.Context) error { ctx.GetSessionVars().InRestrictedSQL = true - statsHandle, err := handle.NewHandle(ctx, initStatsCtx, do.statsLease, do.sysSessionPool, &do.sysProcesses, do.GetAutoAnalyzeProcID) + statsHandle, err := handle.NewHandle(ctx, initStatsCtx, do.statsLease, do.sysSessionPool, &do.sysProcesses, do.NextConnID, do.ReleaseConnID) if err != nil { return err } @@ -2466,12 +2405,14 @@ func (do *Domain) initStats(ctx context.Context) { }() t := time.Now() liteInitStats := config.GetGlobalConfig().Performance.LiteInitStats + initstats.InitStatsPercentage.Store(0) var err error if liteInitStats { err = statsHandle.InitStatsLite(ctx, do.InfoSchema()) } else { err = statsHandle.InitStats(ctx, do.InfoSchema()) } + initstats.InitStatsPercentage.Store(100) if err != nil { logutil.BgLogger().Error("init stats info failed", zap.Bool("lite", liteInitStats), zap.Duration("take time", time.Since(t)), zap.Error(err)) } else { @@ -2613,10 +2554,11 @@ func (do *Domain) updateStatsWorker(_ sessionctx.Context, owner owner.Manager) { if !owner.IsOwner() { continue } - err := statsHandle.GCStats(do.InfoSchema(), do.DDL().GetLease()) + err := statsHandle.GCStats(do.InfoSchema(), do.GetSchemaLease()) if err != nil { logutil.BgLogger().Debug("GC stats failed", zap.Error(err)) } + do.CheckAutoAnalyzeWindows() case <-dumpColStatsUsageTicker.C: err := statsHandle.DumpColStatsUsageToKV() if err != nil { @@ -2769,12 +2711,11 @@ func (do *Domain) NotifyUpdatePrivilege() error { } // update locally - sysSessionPool := do.SysSessionPool() - ctx, err := sysSessionPool.Get() + ctx, err := do.sysSessionPool.Get() if err != nil { return err } - defer sysSessionPool.Put(ctx) + defer do.sysSessionPool.Put(ctx) return do.PrivilegeHandle().Update(ctx.(sessionctx.Context)) } @@ -2839,12 +2780,6 @@ func (do *Domain) ReleaseConnID(connID uint64) { do.connIDAllocator.Release(connID) } -// GetAutoAnalyzeProcID returns processID for auto analyze -// TODO: support IDs for concurrent auto-analyze -func (do *Domain) GetAutoAnalyzeProcID() uint64 { - return do.connIDAllocator.GetReservedConnID(reservedConnAnalyze) -} - const ( serverIDEtcdPath = "/tidb/server_id" refreshServerIDRetryCnt = 3 @@ -2853,9 +2788,6 @@ const ( retrieveServerIDSessionTimeout = 10 * time.Second acquire32BitsServerIDRetryCnt = 3 - - // reservedConnXXX must be within [0, globalconn.ReservedCount) - reservedConnAnalyze = 0 ) var ( @@ -3160,9 +3092,13 @@ func (do *Domain) StopAutoAnalyze() { } // InitInstancePlanCache initializes the instance level plan cache for this Domain. -func (do *Domain) InitInstancePlanCache(softMemLimit, hardMemLimit int64) { - do.instancePlanCache = NewInstancePlanCache(softMemLimit, hardMemLimit) +func (do *Domain) InitInstancePlanCache() { + softLimit := variable.InstancePlanCacheTargetMemSize.Load() + hardLimit := variable.InstancePlanCacheMaxMemSize.Load() + do.instancePlanCache = NewInstancePlanCache(softLimit, hardLimit) + // use a separate goroutine to avoid the eviction blocking other operations. do.wg.Run(do.planCacheEvictTrigger, "planCacheEvictTrigger") + do.wg.Run(do.planCacheMetricsAndVars, "planCacheMetricsAndVars") } // GetInstancePlanCache returns the instance level plan cache in this Domain. @@ -3170,10 +3106,41 @@ func (do *Domain) GetInstancePlanCache() sessionctx.InstancePlanCache { return do.instancePlanCache } +// planCacheMetricsAndVars updates metrics and variables for Instance Plan Cache periodically. +func (do *Domain) planCacheMetricsAndVars() { + defer util.Recover(metrics.LabelDomain, "planCacheMetricsAndVars", nil, false) + ticker := time.NewTicker(time.Second * 15) // 15s by default + defer func() { + ticker.Stop() + logutil.BgLogger().Info("planCacheMetricsAndVars exited.") + }() + + for { + select { + case <-ticker.C: + // update limits + softLimit := variable.InstancePlanCacheTargetMemSize.Load() + hardLimit := variable.InstancePlanCacheMaxMemSize.Load() + curSoft, curHard := do.instancePlanCache.GetLimits() + if curSoft != softLimit || curHard != hardLimit { + do.instancePlanCache.SetLimits(softLimit, hardLimit) + } + + // update the metrics + size := do.instancePlanCache.Size() + memUsage := do.instancePlanCache.MemUsage() + metrics2.GetPlanCacheInstanceNumCounter(true).Set(float64(size)) + metrics2.GetPlanCacheInstanceMemoryUsage(true).Set(float64(memUsage)) + case <-do.exit: + return + } + } +} + // planCacheEvictTrigger triggers the plan cache eviction periodically. func (do *Domain) planCacheEvictTrigger() { defer util.Recover(metrics.LabelDomain, "planCacheEvictTrigger", nil, false) - ticker := time.NewTicker(time.Second * 5) // 5s by default + ticker := time.NewTicker(time.Second * 30) // 30s by default defer func() { ticker.Stop() logutil.BgLogger().Info("planCacheEvictTrigger exited.") @@ -3182,8 +3149,14 @@ func (do *Domain) planCacheEvictTrigger() { for { select { case <-ticker.C: - do.instancePlanCache.Evict() - // TODO: update the metrics + // trigger the eviction + begin := time.Now() + detailInfo, numEvicted := do.instancePlanCache.Evict() + metrics2.GetPlanCacheInstanceEvict().Set(float64(numEvicted)) + logutil.BgLogger().Info("instance plan eviction", + zap.String("detail", detailInfo), + zap.Int64("num_evicted", int64(numEvicted)), + zap.Duration("time_spent", time.Since(begin))) case <-do.exit: return } diff --git a/pkg/domain/domain_test.go b/pkg/domain/domain_test.go index bd064e26f34a1..db521e24a7951 100644 --- a/pkg/domain/domain_test.go +++ b/pkg/domain/domain_test.go @@ -93,7 +93,8 @@ func TestInfo(t *testing.T) { ddl.DisableTiFlashPoll(dom.ddl) require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/domain/MockReplaceDDL", `return(true)`)) require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/ddl/NoDDLDispatchLoop", `return(true)`)) - require.NoError(t, dom.Init(ddlLease, sysMockFactory, nil)) + require.NoError(t, dom.Init(sysMockFactory, nil)) + require.NoError(t, dom.Start()) require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/NoDDLDispatchLoop")) require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/domain/MockReplaceDDL")) @@ -120,9 +121,9 @@ func TestInfo(t *testing.T) { require.Equalf(t, info.ID, infos[ddlID].ID, "server one info %v, info %v", infos[ddlID], info) // Test the scene where syncer.Done() gets the information. - require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/ddl/syncer/ErrorMockSessionDone", `return(true)`)) + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/ddl/schemaver/ErrorMockSessionDone", `return(true)`)) <-dom.ddl.SchemaSyncer().Done() - require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/syncer/ErrorMockSessionDone")) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/schemaver/ErrorMockSessionDone")) time.Sleep(15 * time.Millisecond) syncerStarted := false for i := 0; i < 1000; i++ { diff --git a/pkg/domain/extract.go b/pkg/domain/extract.go index fdb79e657ed13..7bef58b6939ab 100644 --- a/pkg/domain/extract.go +++ b/pkg/domain/extract.go @@ -75,10 +75,10 @@ type ExtractHandle struct { worker *extractWorker } -// NewExtractHandler new extract handler -func NewExtractHandler(sctxs []sessionctx.Context) *ExtractHandle { +// newExtractHandler new extract handler +func newExtractHandler(ctx context.Context, sctxs []sessionctx.Context) *ExtractHandle { h := &ExtractHandle{} - h.worker = newExtractWorker(sctxs[0], false) + h.worker = newExtractWorker(ctx, sctxs[0], false) return h } @@ -121,8 +121,13 @@ func NewExtractPlanTask(begin, end time.Time) *ExtractTask { } } -func newExtractWorker(sctx sessionctx.Context, isBackgroundWorker bool) *extractWorker { +func newExtractWorker( + ctx context.Context, + sctx sessionctx.Context, + isBackgroundWorker bool, +) *extractWorker { return &extractWorker{ + ctx: ctx, sctx: sctx, isBackgroundWorker: isBackgroundWorker, } diff --git a/pkg/domain/historical_stats.go b/pkg/domain/historical_stats.go index 9b4dd016d2711..e865cfc0f0048 100644 --- a/pkg/domain/historical_stats.go +++ b/pkg/domain/historical_stats.go @@ -15,6 +15,8 @@ package domain import ( + "context" + "github.com/pingcap/errors" "github.com/pingcap/failpoint" domain_metrics "github.com/pingcap/tidb/pkg/domain/metrics" @@ -64,7 +66,7 @@ func (w *HistoricalStatsWorker) DumpHistoricalStats(tableID int64, statsHandle * is := GetDomain(sctx).InfoSchema() isPartition := false var tblInfo *model.TableInfo - tbl, existed := is.TableByID(tableID) + tbl, existed := is.TableByID(context.Background(), tableID) if !existed { tbl, db, p := is.FindTableByPartitionID(tableID) if !(tbl != nil && db != nil && p != nil) { diff --git a/pkg/domain/infosync/label_manager.go b/pkg/domain/infosync/label_manager.go index 711a0a651ee0b..fb842bbdf72c6 100644 --- a/pkg/domain/infosync/label_manager.go +++ b/pkg/domain/infosync/label_manager.go @@ -60,8 +60,8 @@ func (lm *PDLabelManager) GetAllLabelRules(ctx context.Context) ([]*label.Rule, } // GetLabelRules implements GetLabelRules -func (lm *PDLabelManager) GetLabelRules(ctx context.Context, _ []string) (map[string]*label.Rule, error) { - labelRules, err := lm.pdHTTPCli.GetAllRegionLabelRules(ctx) +func (lm *PDLabelManager) GetLabelRules(ctx context.Context, ruleIDs []string) (map[string]*label.Rule, error) { + labelRules, err := lm.pdHTTPCli.GetRegionLabelRulesByIDs(ctx, ruleIDs) if err != nil { return nil, err } diff --git a/pkg/domain/plan_replayer_dump.go b/pkg/domain/plan_replayer_dump.go index 1a5b95e4eb0c2..29601e6d7f667 100644 --- a/pkg/domain/plan_replayer_dump.go +++ b/pkg/domain/plan_replayer_dump.go @@ -440,16 +440,17 @@ func dumpMeta(zw *zip.Writer) error { return nil } -func dumpTiFlashReplica(ctx sessionctx.Context, zw *zip.Writer, pairs map[tableNamePair]struct{}) error { +func dumpTiFlashReplica(sctx sessionctx.Context, zw *zip.Writer, pairs map[tableNamePair]struct{}) error { bf, err := zw.Create(PlanReplayerTiFlashReplicasFile) if err != nil { return errors.AddStack(err) } - is := GetDomain(ctx).InfoSchema() + is := GetDomain(sctx).InfoSchema() + ctx := infoschema.WithRefillOption(context.Background(), false) for pair := range pairs { dbName := model.NewCIStr(pair.DBName) tableName := model.NewCIStr(pair.TableName) - t, err := is.TableByName(context.Background(), dbName, tableName) + t, err := is.TableByName(ctx, dbName, tableName) if err != nil { logutil.BgLogger().Warn("failed to find table info", zap.Error(err), zap.String("dbName", dbName.L), zap.String("tableName", tableName.L)) @@ -496,11 +497,12 @@ func dumpSchemaMeta(zw *zip.Writer, tables map[tableNamePair]struct{}) error { func dumpStatsMemStatus(zw *zip.Writer, pairs map[tableNamePair]struct{}, do *Domain) error { statsHandle := do.StatsHandle() is := do.InfoSchema() + ctx := infoschema.WithRefillOption(context.Background(), false) for pair := range pairs { if pair.IsView { continue } - tbl, err := is.TableByName(context.Background(), model.NewCIStr(pair.DBName), model.NewCIStr(pair.TableName)) + tbl, err := is.TableByName(ctx, model.NewCIStr(pair.DBName), model.NewCIStr(pair.TableName)) if err != nil { return err } diff --git a/pkg/domain/resourcegroup/runaway.go b/pkg/domain/resourcegroup/runaway.go index f19adec9568ea..b7260bd2725c0 100644 --- a/pkg/domain/resourcegroup/runaway.go +++ b/pkg/domain/resourcegroup/runaway.go @@ -16,6 +16,7 @@ package resourcegroup import ( "context" + "fmt" "strings" "sync" "sync/atomic" @@ -53,27 +54,6 @@ const ( // NullTime is a zero time.Time. var NullTime time.Time -// RunawayMatchType is used to indicate whether query was interrupted by runaway identification or quarantine watch. -type RunawayMatchType uint - -const ( - // RunawayMatchTypeWatch shows quarantine watch. - RunawayMatchTypeWatch RunawayMatchType = iota - // RunawayMatchTypeIdentify shows identification. - RunawayMatchTypeIdentify -) - -func (t RunawayMatchType) String() string { - switch t { - case RunawayMatchTypeWatch: - return "watch" - case RunawayMatchTypeIdentify: - return "identify" - default: - panic("unknown type") - } -} - // RunawayRecord is used to save records which will be insert into mysql.tidb_runaway_queries. type RunawayRecord struct { ResourceGroupName string @@ -399,7 +379,7 @@ func (rm *RunawayManager) getWatchFromWatchList(key string) *QuarantineRecord { return nil } -func (rm *RunawayManager) markRunaway(resourceGroupName, originalSQL, planDigest string, action string, matchType RunawayMatchType, now *time.Time) { +func (rm *RunawayManager) markRunaway(resourceGroupName, originalSQL, planDigest, action, matchType string, now *time.Time) { source := rm.serverID if !rm.syncerInitialized.Load() { rm.logOnce.Do(func() { @@ -411,7 +391,7 @@ func (rm *RunawayManager) markRunaway(resourceGroupName, originalSQL, planDigest case rm.runawayQueriesChan <- &RunawayRecord{ ResourceGroupName: resourceGroupName, Time: *now, - Match: matchType.String(), + Match: matchType, Action: action, SQLText: originalSQL, PlanDigest: planDigest, @@ -470,26 +450,31 @@ type RunawayChecker struct { planDigest string deadline time.Time - setting *rmpb.RunawaySettings + // From the group runaway settings, which will be applied when a query lacks a specified watch rule. + settings *rmpb.RunawaySettings - markedByRule atomic.Bool + // markedByRule is set to true when the query matches the group runaway settings. + markedByRule atomic.Bool + // markedByWatch is set to true when the query matches the specified watch rules. markedByWatch bool watchAction rmpb.RunawayAction } -func newRunawayChecker(manager *RunawayManager, resourceGroupName string, setting *rmpb.RunawaySettings, originalSQL, sqlDigest, planDigest string, startTime time.Time) *RunawayChecker { +func newRunawayChecker( + manager *RunawayManager, + resourceGroupName string, settings *rmpb.RunawaySettings, + originalSQL, sqlDigest, planDigest string, startTime time.Time, +) *RunawayChecker { c := &RunawayChecker{ manager: manager, resourceGroupName: resourceGroupName, originalSQL: originalSQL, sqlDigest: sqlDigest, planDigest: planDigest, - setting: setting, - markedByRule: atomic.Bool{}, - markedByWatch: false, + settings: settings, } - if setting != nil { - c.deadline = startTime.Add(time.Duration(setting.Rule.ExecElapsedTimeMs) * time.Millisecond) + if settings != nil { + c.deadline = startTime.Add(time.Duration(settings.Rule.ExecElapsedTimeMs) * time.Millisecond) } return c } @@ -499,50 +484,96 @@ func (r *RunawayChecker) BeforeExecutor() error { if r == nil { return nil } + // Check if the query matches any specified watch rules. for _, convict := range r.getConvictIdentifiers() { watched, action := r.manager.examineWatchList(r.resourceGroupName, convict) - if watched { - if action == rmpb.RunawayAction_NoneAction && r.setting != nil { - action = r.setting.Action - } - r.markedByWatch = true - now := time.Now() - r.watchAction = action - r.markRunaway(RunawayMatchTypeWatch, action, &now) - // If no match action, it will do nothing. - switch action { - case rmpb.RunawayAction_Kill: - return exeerrors.ErrResourceGroupQueryRunawayQuarantine - case rmpb.RunawayAction_CoolDown: - // This action should be done in BeforeCopRequest. - return nil - case rmpb.RunawayAction_DryRun: - return nil - default: - } + if !watched { + continue + } + // Use the group runaway settings if none are provided. + if action == rmpb.RunawayAction_NoneAction && r.settings != nil { + action = r.settings.Action + } + // Mark it if this is the first time being watched. + r.markRunawayByWatch(action) + // Take action if needed. + switch action { + case rmpb.RunawayAction_Kill: + // Return an error to interrupt the query. + return exeerrors.ErrResourceGroupQueryRunawayQuarantine + case rmpb.RunawayAction_CoolDown: + // This action will be handled in `BeforeCopRequest`. + return nil + case rmpb.RunawayAction_DryRun: + // Noop. + return nil + default: + // Continue to examine other convicts. } } return nil } +// CheckAction is used to check current action of the query. +// It's safe to call this method concurrently. +func (r *RunawayChecker) CheckAction() rmpb.RunawayAction { + if r == nil { + return rmpb.RunawayAction_NoneAction + } + if r.markedByWatch { + return r.watchAction + } + if r.markedByRule.Load() { + return r.settings.Action + } + return rmpb.RunawayAction_NoneAction +} + +// CheckRuleKillAction checks whether the query should be killed according to the group settings. +func (r *RunawayChecker) CheckRuleKillAction() bool { + // If the group settings are not available and it's not marked by watch, skip this part. + if r.settings == nil && !r.markedByWatch { + return false + } + // If the group settings are available and it's not marked by rule, check the execution time. + if r.settings != nil && !r.markedByRule.Load() { + now := time.Now() + until := r.deadline.Sub(now) + if until > 0 { + return false + } + r.markRunawayByIdentify(r.settings.Action, &now) + return r.settings.Action == rmpb.RunawayAction_Kill + } + return false +} + +// Rule returns the rule of the runaway checker. +func (r *RunawayChecker) Rule() string { + var execElapsedTime time.Duration + if r.settings != nil { + execElapsedTime = time.Duration(r.settings.Rule.ExecElapsedTimeMs) * time.Millisecond + } + return fmt.Sprintf("execElapsedTime:%s", execElapsedTime) +} + // BeforeCopRequest checks runaway and modifies the request if necessary before sending coprocessor request. func (r *RunawayChecker) BeforeCopRequest(req *tikvrpc.Request) error { - if r.setting == nil && !r.markedByWatch { + // If the group settings are not available and it's not marked by watch, skip this part. + if r.settings == nil && !r.markedByWatch { return nil } - marked := r.markedByRule.Load() - if !marked { - // note: now we don't check whether query is in watch list again. - if r.markedByWatch { - if r.watchAction == rmpb.RunawayAction_CoolDown { - req.ResourceControlContext.OverridePriority = 1 // set priority to lowest - } - } - + // If it's marked by watch and the action is cooldown, override the priority, + if r.markedByWatch && r.watchAction == rmpb.RunawayAction_CoolDown { + req.ResourceControlContext.OverridePriority = 1 // set priority to lowest + } + // If group settings are available and the query is not marked by a rule, + // verify if it matches any rules in the settings. + if r.settings != nil && !r.markedByRule.Load() { now := time.Now() until := r.deadline.Sub(now) if until > 0 { - if r.setting.Action == rmpb.RunawayAction_Kill { + if r.settings.Action == rmpb.RunawayAction_Kill { // if the execution time is close to the threshold, set a timeout if until < tikv.ReadTimeoutMedium { req.Context.MaxExecutionDurationMs = uint64(until.Milliseconds()) @@ -551,39 +582,30 @@ func (r *RunawayChecker) BeforeCopRequest(req *tikvrpc.Request) error { return nil } // execution time exceeds the threshold, mark the query as runaway - if r.markedByRule.CompareAndSwap(false, true) { - r.markRunaway(RunawayMatchTypeIdentify, r.setting.Action, &now) - if !r.markedByWatch { - r.markQuarantine(&now) - } + r.markRunawayByIdentify(r.settings.Action, &now) + // Take action if needed. + switch r.settings.Action { + case rmpb.RunawayAction_Kill: + return exeerrors.ErrResourceGroupQueryRunawayInterrupted + case rmpb.RunawayAction_CoolDown: + req.ResourceControlContext.OverridePriority = 1 // set priority to lowest + return nil + default: + return nil } } - switch r.setting.Action { - case rmpb.RunawayAction_Kill: - return exeerrors.ErrResourceGroupQueryRunawayInterrupted - case rmpb.RunawayAction_CoolDown: - req.ResourceControlContext.OverridePriority = 1 // set priority to lowest - return nil - case rmpb.RunawayAction_DryRun: - return nil - default: - return nil - } + return nil } // CheckCopRespError checks TiKV error after receiving coprocessor response. func (r *RunawayChecker) CheckCopRespError(err error) error { - if err == nil || r.setting == nil || r.setting.Action != rmpb.RunawayAction_Kill { + if err == nil || r.settings == nil || r.settings.Action != rmpb.RunawayAction_Kill { return err } if strings.HasPrefix(err.Error(), "Coprocessor task terminated due to exceeding the deadline") { if !r.markedByRule.Load() { now := time.Now() - if r.deadline.Before(now) && r.markedByRule.CompareAndSwap(false, true) { - r.markRunaway(RunawayMatchTypeIdentify, r.setting.Action, &now) - if !r.markedByWatch { - r.markQuarantine(&now) - } + if r.deadline.Before(now) && r.markRunawayByIdentify(r.settings.Action, &now) { return exeerrors.ErrResourceGroupQueryRunawayInterrupted } } @@ -596,25 +618,43 @@ func (r *RunawayChecker) CheckCopRespError(err error) error { } func (r *RunawayChecker) markQuarantine(now *time.Time) { - if r.setting.Watch == nil { + if r.settings == nil || r.settings.Watch == nil { return } - ttl := time.Duration(r.setting.Watch.LastingDurationMs) * time.Millisecond + ttl := time.Duration(r.settings.Watch.LastingDurationMs) * time.Millisecond + + r.manager.markQuarantine(r.resourceGroupName, r.getSettingConvictIdentifier(), r.settings.Watch.Type, r.settings.Action, ttl, now) +} + +func (r *RunawayChecker) markRunawayByIdentify(action rmpb.RunawayAction, now *time.Time) bool { + swapped := r.markedByRule.CompareAndSwap(false, true) + if swapped { + r.markRunaway("identify", action, now) + if !r.markedByWatch { + r.markQuarantine(now) + } + } + return swapped +} - r.manager.markQuarantine(r.resourceGroupName, r.getSettingConvictIdentifier(), r.setting.Watch.Type, r.setting.Action, ttl, now) +func (r *RunawayChecker) markRunawayByWatch(action rmpb.RunawayAction) { + r.markedByWatch = true + r.watchAction = action + now := time.Now() + r.markRunaway("watch", action, &now) } -func (r *RunawayChecker) markRunaway(matchType RunawayMatchType, action rmpb.RunawayAction, now *time.Time) { - actionStr := strings.ToLower(rmpb.RunawayAction_name[int32(action)]) - metrics.RunawayCheckerCounter.WithLabelValues(r.resourceGroupName, matchType.String(), actionStr).Inc() +func (r *RunawayChecker) markRunaway(matchType string, action rmpb.RunawayAction, now *time.Time) { + actionStr := strings.ToLower(action.String()) + metrics.RunawayCheckerCounter.WithLabelValues(r.resourceGroupName, matchType, actionStr).Inc() r.manager.markRunaway(r.resourceGroupName, r.originalSQL, r.planDigest, actionStr, matchType, now) } func (r *RunawayChecker) getSettingConvictIdentifier() string { - if r.setting.Watch == nil { + if r == nil || r.settings == nil || r.settings.Watch == nil { return "" } - switch r.setting.Watch.Type { + switch r.settings.Watch.Type { case rmpb.RunawayWatchType_Plan: return r.planDigest case rmpb.RunawayWatchType_Similar: diff --git a/pkg/domain/ru_stats.go b/pkg/domain/ru_stats.go index 68a308ac3bfc9..1dd64e969b68b 100644 --- a/pkg/domain/ru_stats.go +++ b/pkg/domain/ru_stats.go @@ -25,6 +25,7 @@ import ( "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/meta" "github.com/pingcap/tidb/pkg/parser/model" + "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/intest" "github.com/pingcap/tidb/pkg/util/logutil" pd "github.com/tikv/pd/client" @@ -46,7 +47,7 @@ type RUStatsWriter struct { RMClient pd.ResourceManagerClient InfoCache *infoschema.InfoCache store kv.Storage - sessPool *sessionPool + sessPool util.SessionPool // current time, cache it here to make unit test easier. StartTime time.Time } diff --git a/pkg/domain/runaway.go b/pkg/domain/runaway.go index 37cc6061ca12b..ae5d50724a047 100644 --- a/pkg/domain/runaway.go +++ b/pkg/domain/runaway.go @@ -216,7 +216,7 @@ func (do *Domain) GetRunawayWatchList() []*resourcegroup.QuarantineRecord { return do.runawayManager.GetWatchList() } -// TryToUpdateRunawayWatch is used to to update watch list including +// TryToUpdateRunawayWatch is used to update watch list including // creation and deletion by manual trigger. func (do *Domain) TryToUpdateRunawayWatch() error { return do.updateNewAndDoneWatch() @@ -440,7 +440,7 @@ func (do *Domain) handleRemoveStaleRunawayWatch(record *resourcegroup.Quarantine return err } -func execRestrictedSQL(sessPool *sessionPool, sql string, params []any) ([]chunk.Row, error) { +func execRestrictedSQL(sessPool util.SessionPool, sql string, params []any) ([]chunk.Row, error) { se, err := sessPool.Get() defer func() { sessPool.Put(se) @@ -484,11 +484,11 @@ func (do *Domain) initResourceGroupsController(ctx context.Context, pdClient pd. type runawaySyncer struct { newWatchReader *SystemTableReader deletionWatchReader *SystemTableReader - sysSessionPool *sessionPool + sysSessionPool util.SessionPool mu sync.Mutex } -func newRunawaySyncer(sysSessionPool *sessionPool) *runawaySyncer { +func newRunawaySyncer(sysSessionPool util.SessionPool) *runawaySyncer { return &runawaySyncer{ sysSessionPool: sysSessionPool, newWatchReader: &SystemTableReader{ diff --git a/pkg/domain/schema_validator.go b/pkg/domain/schema_validator.go index 726ce050e9c0b..d33b548af6f0f 100644 --- a/pkg/domain/schema_validator.go +++ b/pkg/domain/schema_validator.go @@ -22,6 +22,7 @@ import ( "github.com/pingcap/tidb/pkg/metrics" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/sessionctx/variable" + "github.com/pingcap/tidb/pkg/util/intest" "github.com/pingcap/tidb/pkg/util/logutil" "github.com/tikv/client-go/v2/oracle" "github.com/tikv/client-go/v2/txnkv/transaction" @@ -78,6 +79,7 @@ type schemaValidator struct { // NewSchemaValidator returns a SchemaValidator structure. func NewSchemaValidator(lease time.Duration, do *Domain) SchemaValidator { + intest.Assert(lease > 0, "lease should be greater than 0") return &schemaValidator{ isStarted: true, lease: lease, @@ -237,9 +239,6 @@ func (s *schemaValidator) Check(txnTS uint64, schemaVer int64, relatedPhysicalTa zap.Int64("schemaVer", schemaVer)) return nil, ResultFail } - if s.lease == 0 { - return nil, ResultSucc - } // Schema changed, result decided by whether related tables change. if schemaVer < s.latestSchemaVer { diff --git a/pkg/domain/sysvar_cache.go b/pkg/domain/sysvar_cache.go index 0adce1e4bb926..6294aa8260080 100644 --- a/pkg/domain/sysvar_cache.go +++ b/pkg/domain/sysvar_cache.go @@ -64,9 +64,7 @@ func (do *Domain) GetSessionCache() (map[string]string, error) { do.sysVarCache.RLock() defer do.sysVarCache.RUnlock() // Perform a deep copy since this will be assigned directly to the session - newMap := make(map[string]string, len(do.sysVarCache.session)) - maps.Copy(newMap, do.sysVarCache.session) - return newMap, nil + return maps.Clone(do.sysVarCache.session), nil } // GetGlobalVar gets an individual global var from the sysvar cache. @@ -107,12 +105,11 @@ func (do *Domain) rebuildSysVarCache(ctx sessionctx.Context) error { newSessionCache := make(map[string]string) newGlobalCache := make(map[string]string) if ctx == nil { - sysSessionPool := do.SysSessionPool() - res, err := sysSessionPool.Get() + res, err := do.sysSessionPool.Get() if err != nil { return err } - defer sysSessionPool.Put(res) + defer do.sysSessionPool.Put(res) ctx = res.(sessionctx.Context) } // Only one rebuild can be in progress at a time, this prevents a lost update race diff --git a/pkg/errno/errcode.go b/pkg/errno/errcode.go index d6581b10fe3cf..5d56f339273ff 100644 --- a/pkg/errno/errcode.go +++ b/pkg/errno/errcode.go @@ -1140,6 +1140,8 @@ const ( ErrPausedDDLJob = 8262 ErrBDRRestrictedDDL = 8263 + ErrGlobalIndexNotExplicitlySet = 8264 + // Resource group errors. ErrResourceGroupExists = 8248 ErrResourceGroupNotExists = 8249 diff --git a/pkg/errno/errname.go b/pkg/errno/errname.go index 4c6cb61004b00..aadcbb3dfcbca 100644 --- a/pkg/errno/errname.go +++ b/pkg/errno/errname.go @@ -1171,4 +1171,6 @@ var MySQLErrName = map[uint16]*mysql.ErrMessage{ ErrCannotResumeDDLJob: mysql.Message("Job [%v] can't be resumed: %s", nil), ErrPausedDDLJob: mysql.Message("Job [%v] has already been paused", nil), ErrBDRRestrictedDDL: mysql.Message("The operation is not allowed while the bdr role of this cluster is set to %s.", nil), + + ErrGlobalIndexNotExplicitlySet: mysql.Message("Global Index is needed for index '%-.192s', since the unique index is not including all partitioning columns, and GLOBAL is not given as IndexOption", nil), } diff --git a/pkg/executor/BUILD.bazel b/pkg/executor/BUILD.bazel index b6a11412a5d39..886c06820877b 100644 --- a/pkg/executor/BUILD.bazel +++ b/pkg/executor/BUILD.bazel @@ -154,6 +154,7 @@ go_library( "//pkg/planner/context", "//pkg/planner/core", "//pkg/planner/core/base", + "//pkg/planner/core/operator/logicalop", "//pkg/planner/util", "//pkg/planner/util/coreusage", "//pkg/planner/util/fixcontrol", @@ -410,6 +411,7 @@ go_test( "//pkg/planner", "//pkg/planner/core", "//pkg/planner/core/base", + "//pkg/planner/core/operator/logicalop", "//pkg/planner/property", "//pkg/planner/util", "//pkg/planner/util/coretestsdk", @@ -474,6 +476,7 @@ go_test( "@com_github_pingcap_kvproto//pkg/brpb", "@com_github_pingcap_kvproto//pkg/diagnosticspb", "@com_github_pingcap_kvproto//pkg/encryptionpb", + "@com_github_pingcap_kvproto//pkg/errorpb", "@com_github_pingcap_kvproto//pkg/kvrpcpb", "@com_github_pingcap_kvproto//pkg/metapb", "@com_github_pingcap_log//:log", @@ -487,6 +490,7 @@ go_test( "@com_github_tikv_client_go_v2//testutils", "@com_github_tikv_client_go_v2//tikv", "@com_github_tikv_client_go_v2//tikvrpc", + "@com_github_tikv_client_go_v2//tikvrpc/interceptor", "@com_github_tikv_client_go_v2//util", "@com_github_tikv_pd_client//http", "@org_golang_google_grpc//:grpc", diff --git a/pkg/executor/adapter.go b/pkg/executor/adapter.go index 4b5329bf8487c..2a452e4c21604 100644 --- a/pkg/executor/adapter.go +++ b/pkg/executor/adapter.go @@ -49,6 +49,7 @@ import ( "github.com/pingcap/tidb/pkg/planner" plannercore "github.com/pingcap/tidb/pkg/planner/core" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/plugin" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/sessionctx/sessionstates" @@ -852,7 +853,7 @@ func isNoResultPlan(p base.Plan) bool { // the Projection has two expressions and two columns in the schema, but we should // not return the result of the two expressions. switch raw := p.(type) { - case *plannercore.LogicalProjection: + case *logicalop.LogicalProjection: if raw.CalculateNoDelay { return true } @@ -984,6 +985,8 @@ func (a *ExecStmt) handleNoDelayExecutor(ctx context.Context, e exec.Executor) ( // Check if "tidb_snapshot" is set for the write executors. // In history read mode, we can not do write operations. + // TODO: it's better to use a.ReadOnly to check if the statement is a write statement + // instead of listing executor types here. switch e.(type) { case *DeleteExec, *InsertExec, *UpdateExec, *ReplaceExec, *LoadDataExec, *DDLExec, *ImportIntoExec: snapshotTS := sctx.GetSessionVars().SnapshotTS diff --git a/pkg/executor/admin.go b/pkg/executor/admin.go index f38b8bb42eba7..0fc1baa912261 100644 --- a/pkg/executor/admin.go +++ b/pkg/executor/admin.go @@ -163,7 +163,7 @@ func (e *CheckIndexRangeExec) constructIndexScanPB() *tipb.Executor { idxExec := &tipb.IndexScan{ TableId: e.table.ID, IndexId: e.index.ID, - Columns: util.ColumnsToProto(e.cols, e.table.PKIsHandle, true), + Columns: util.ColumnsToProto(e.cols, e.table.PKIsHandle, true, false), } return &tipb.Executor{Tp: tipb.ExecType_TypeIndexScan, IdxScan: idxExec} } @@ -228,7 +228,7 @@ func (e *RecoverIndexExec) Open(ctx context.Context) error { } func (e *RecoverIndexExec) constructTableScanPB(tblInfo *model.TableInfo, colInfos []*model.ColumnInfo) (*tipb.Executor, error) { - tblScan := tables.BuildTableScanFromInfos(tblInfo, colInfos) + tblScan := tables.BuildTableScanFromInfos(tblInfo, colInfos, false) tblScan.TableId = e.physicalID err := tables.SetPBColumnsDefaultValue(e.Ctx().GetExprCtx(), tblScan.Columns, colInfos) return &tipb.Executor{Tp: tipb.ExecType_TypeTableScan, TblScan: tblScan}, err @@ -513,8 +513,6 @@ func (e *RecoverIndexExec) backfillIndexInTxn(ctx context.Context, txn kv.Transa return result, err } - // Constrains is already checked. - e.Ctx().GetSessionVars().StmtCtx.BatchCheck = true for _, row := range rows { if row.skip { continue @@ -526,7 +524,11 @@ func (e *RecoverIndexExec) backfillIndexInTxn(ctx context.Context, txn kv.Transa return result, err } - _, err = e.index.Create(e.Ctx().GetTableCtx(), txn, row.idxVals, row.handle, row.rsData, table.WithIgnoreAssertion) + _, err = e.index.Create(e.Ctx().GetTableCtx(), txn, row.idxVals, row.handle, row.rsData, + table.WithIgnoreAssertion, + // Constrains have already been checked. + table.DupKeyCheckSkip, + ) if err != nil { return result, err } @@ -878,7 +880,7 @@ func (e *CleanupIndexExec) constructIndexScanPB() *tipb.Executor { idxExec := &tipb.IndexScan{ TableId: e.physicalID, IndexId: e.index.Meta().ID, - Columns: util.ColumnsToProto(e.columns, e.table.Meta().PKIsHandle, true), + Columns: util.ColumnsToProto(e.columns, e.table.Meta().PKIsHandle, true, false), PrimaryColumnIds: tables.TryGetCommonPkColumnIds(e.table.Meta()), } return &tipb.Executor{Tp: tipb.ExecType_TypeIndexScan, IdxScan: idxExec} diff --git a/pkg/executor/aggfuncs/aggfuncs.go b/pkg/executor/aggfuncs/aggfuncs.go index 586666554b9e6..bf3bbfc8e56fd 100644 --- a/pkg/executor/aggfuncs/aggfuncs.go +++ b/pkg/executor/aggfuncs/aggfuncs.go @@ -73,6 +73,7 @@ var ( _ AggFunc = (*maxMin4Float64)(nil) _ AggFunc = (*maxMin4Decimal)(nil) _ AggFunc = (*maxMin4String)(nil) + _ AggFunc = (*maxMin4Time)(nil) _ AggFunc = (*maxMin4Duration)(nil) _ AggFunc = (*maxMin4JSON)(nil) _ AggFunc = (*maxMin4VectorFloat32)(nil) diff --git a/pkg/executor/aggfuncs/func_count.go b/pkg/executor/aggfuncs/func_count.go index 3f111b9f2b187..3d5db1181e5ca 100644 --- a/pkg/executor/aggfuncs/func_count.go +++ b/pkg/executor/aggfuncs/func_count.go @@ -58,8 +58,8 @@ func (e *baseCount) DeserializePartialResult(src *chunk.Chunk) ([]PartialResult, func (e *baseCount) deserializeForSpill(helper *deserializeHelper) (PartialResult, int64) { pr, memDelta := e.AllocPartialResult() - result := *(*partialResult4Count)(pr) - success := helper.deserializePartialResult4Count(&result) + result := (*partialResult4Count)(pr) + success := helper.deserializePartialResult4Count(result) if !success { return nil, 0 } diff --git a/pkg/executor/aggfuncs/func_max_min.go b/pkg/executor/aggfuncs/func_max_min.go index 2eb975051545e..96375f0c8b544 100644 --- a/pkg/executor/aggfuncs/func_max_min.go +++ b/pkg/executor/aggfuncs/func_max_min.go @@ -1294,6 +1294,26 @@ func (e *maxMin4Time) MergePartialResult(_ AggFuncUpdateContext, src, dst Partia return 0, nil } +func (e *maxMin4Time) SerializePartialResult(partialResult PartialResult, chk *chunk.Chunk, spillHelper *SerializeHelper) { + pr := (*partialResult4MaxMinTime)(partialResult) + resBuf := spillHelper.serializePartialResult4MaxMinTime(*pr) + chk.AppendBytes(e.ordinal, resBuf) +} + +func (e *maxMin4Time) DeserializePartialResult(src *chunk.Chunk) ([]PartialResult, int64) { + return deserializePartialResultCommon(src, e.ordinal, e.deserializeForSpill) +} + +func (e *maxMin4Time) deserializeForSpill(helper *deserializeHelper) (PartialResult, int64) { + pr, memDelta := e.AllocPartialResult() + result := (*partialResult4MaxMinTime)(pr) + success := helper.deserializePartialResult4MaxMinTime(result) + if !success { + return nil, 0 + } + return pr, memDelta +} + type maxMin4TimeSliding struct { maxMin4Time windowInfo diff --git a/pkg/executor/aggregate/agg_hash_executor.go b/pkg/executor/aggregate/agg_hash_executor.go index 9b05153015803..a24e4d0a394b4 100644 --- a/pkg/executor/aggregate/agg_hash_executor.go +++ b/pkg/executor/aggregate/agg_hash_executor.go @@ -397,10 +397,15 @@ func (e *HashAggExec) initForParallelExec(ctx sessionctx.Context) error { for i := 0; i < baseRetTypeNum; i++ { spillChunkFieldTypes[i] = types.NewFieldType(mysql.TypeVarString) } + + var err error spillChunkFieldTypes[baseRetTypeNum] = types.NewFieldType(mysql.TypeString) - e.spillHelper = newSpillHelper(e.memTracker, e.PartialAggFuncs, func() *chunk.Chunk { + e.spillHelper, err = newSpillHelper(e.memTracker, e.PartialAggFuncs, e.FinalAggFuncs, func() *chunk.Chunk { return chunk.New(spillChunkFieldTypes, e.InitCap(), e.MaxChunkSize()) }, spillChunkFieldTypes) + if err != nil { + return err + } if isTrackerEnabled && isParallelHashAggSpillEnabled { if e.diskTracker != nil { diff --git a/pkg/executor/aggregate/agg_spill.go b/pkg/executor/aggregate/agg_spill.go index 187b4d2c8e690..c383fa3ce7c6e 100644 --- a/pkg/executor/aggregate/agg_spill.go +++ b/pkg/executor/aggregate/agg_spill.go @@ -18,6 +18,7 @@ import ( "sync" "sync/atomic" + "github.com/pingcap/errors" "github.com/pingcap/tidb/pkg/executor/aggfuncs" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/types" @@ -66,6 +67,8 @@ type parallelHashAggSpillHelper struct { // They only be used for restoring data that are spilled to disk in partial stage. aggFuncsForRestoring []aggfuncs.AggFunc + finalWorkerAggFuncs []aggfuncs.AggFunc + getNewSpillChunkFunc func() *chunk.Chunk spillChunkFieldTypes []*types.FieldType } @@ -73,8 +76,13 @@ type parallelHashAggSpillHelper struct { func newSpillHelper( tracker *memory.Tracker, aggFuncsForRestoring []aggfuncs.AggFunc, + finalWorkerAggFuncs []aggfuncs.AggFunc, getNewSpillChunkFunc func() *chunk.Chunk, - spillChunkFieldTypes []*types.FieldType) *parallelHashAggSpillHelper { + spillChunkFieldTypes []*types.FieldType) (*parallelHashAggSpillHelper, error) { + if len(aggFuncsForRestoring) != len(finalWorkerAggFuncs) { + return nil, errors.NewNoStackError("len(aggFuncsForRestoring) != len(finalWorkerAggFuncs)") + } + mu := new(sync.Mutex) helper := ¶llelHashAggSpillHelper{ lock: struct { @@ -97,11 +105,12 @@ func newSpillHelper( memTracker: tracker, hasError: atomic.Bool{}, aggFuncsForRestoring: aggFuncsForRestoring, + finalWorkerAggFuncs: finalWorkerAggFuncs, getNewSpillChunkFunc: getNewSpillChunkFunc, spillChunkFieldTypes: spillChunkFieldTypes, } - return helper + return helper, nil } func (p *parallelHashAggSpillHelper) close() { @@ -294,7 +303,7 @@ func (p *parallelHashAggSpillHelper) processRow(context *processRowContext) (tot exprCtx := context.ctx.GetExprCtx() // The key has appeared before, merge results. for aggPos := 0; aggPos < context.aggFuncNum; aggPos++ { - memDelta, err := p.aggFuncsForRestoring[aggPos].MergePartialResult(exprCtx.GetEvalCtx(), context.partialResultsRestored[aggPos][context.rowPos], prs[aggPos]) + memDelta, err := p.finalWorkerAggFuncs[aggPos].MergePartialResult(exprCtx.GetEvalCtx(), context.partialResultsRestored[aggPos][context.rowPos], prs[aggPos]) if err != nil { return totalMemDelta, 0, err } diff --git a/pkg/executor/aggregate/agg_spill_test.go b/pkg/executor/aggregate/agg_spill_test.go index 5d0f16c67df3c..9504a7fa89304 100644 --- a/pkg/executor/aggregate/agg_spill_test.go +++ b/pkg/executor/aggregate/agg_spill_test.go @@ -18,7 +18,7 @@ import ( "context" "fmt" "math/rand" - "strconv" + "sort" "sync" "sync/atomic" "testing" @@ -46,49 +46,6 @@ import ( const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" -type resultsContainer struct { - rows []chunk.Row -} - -func (r *resultsContainer) add(chk *chunk.Chunk) { - iter := chunk.NewIterator4Chunk(chk.CopyConstruct()) - for row := iter.Begin(); row != iter.End(); row = iter.Next() { - r.rows = append(r.rows, row) - } -} - -func (r *resultsContainer) check(expectRes map[string]float64) bool { - if len(r.rows) != len(expectRes) { - return false - } - - cols := getColumns() - retFields := []*types.FieldType{cols[0].RetType, cols[1].RetType} - for _, row := range r.rows { - key := "" - for i, field := range retFields { - d := row.GetDatum(i, field) - resStr, err := d.ToString() - if err != nil { - panic("Fail to convert to string") - } - - if i == 0 { - key = resStr - } else { - expectVal, ok := expectRes[key] - if !ok { - return false - } - if resStr != strconv.Itoa(int(expectVal)) { - return false - } - } - } - } - return true -} - func getRandString() string { b := make([]byte, 5) for i := range b { @@ -108,9 +65,9 @@ func generateData(rowNum int, ndv int) ([]string, []float64) { // Generate data for i := 0; i < rowNum; i++ { - key := keys[i%ndv] + key := keys[rand.Intn(ndv)] col0Data = append(col0Data, key) - col1Data = append(col1Data, 1) // Always 1 + col1Data = append(col1Data, float64(rand.Intn(10000000))) } // Shuffle data @@ -146,25 +103,78 @@ func buildMockDataSource(opt testutil.MockDataSourceParameters, col0Data []strin return mockDatasource } -func generateResult(col0 []string) map[string]float64 { - result := make(map[string]float64, 0) - length := len(col0) +func generateCMPFunc(fieldTypes []*types.FieldType) func(chunk.Row, chunk.Row) int { + cmpFuncs := make([]chunk.CompareFunc, 0, len(fieldTypes)) + for _, colType := range fieldTypes { + cmpFuncs = append(cmpFuncs, chunk.GetCompareFunc(colType)) + } + + cmp := func(rowI, rowJ chunk.Row) int { + for i, cmpFunc := range cmpFuncs { + cmp := cmpFunc(rowI, i, rowJ, i) + if cmp != 0 { + return cmp + } + } + return 0 + } + + return cmp +} + +func sortRows(rows []chunk.Row, fieldTypes []*types.FieldType) []chunk.Row { + cmp := generateCMPFunc(fieldTypes) + + sort.Slice(rows, func(i, j int) bool { + return cmp(rows[i], rows[j]) < 0 + }) + return rows +} + +func generateResult(t *testing.T, ctx *mock.Context, dataSource *testutil.MockDataSource) []chunk.Row { + aggExec := buildHashAggExecutor(t, ctx, dataSource) + dataSource.PrepareChunks() + tmpCtx := context.Background() + resultRows := make([]chunk.Row, 0) + aggExec.Open(tmpCtx) + for { + chk := exec.NewFirstChunk(aggExec) + err := aggExec.Next(tmpCtx, chk) + require.Equal(t, nil, err) + if chk.NumRows() == 0 { + break + } - for i := 0; i < length; i++ { - _, ok := result[col0[i]] - if ok { - result[col0[i]]++ - } else { - result[col0[i]] = 1 + rowNum := chk.NumRows() + for i := 0; i < rowNum; i++ { + resultRows = append(resultRows, chk.GetRow(i)) } } - return result + aggExec.Close() + + require.False(t, aggExec.IsSpillTriggeredForTest()) + return sortRows(resultRows, getRetTypes()) +} + +func getRetTypes() []*types.FieldType { + return []*types.FieldType{ + types.NewFieldType(mysql.TypeVarString), + types.NewFieldType(mysql.TypeDouble), + types.NewFieldType(mysql.TypeLonglong), + types.NewFieldType(mysql.TypeDouble), + types.NewFieldType(mysql.TypeDouble), + types.NewFieldType(mysql.TypeDouble), + } } func getColumns() []*expression.Column { return []*expression.Column{ {Index: 0, RetType: types.NewFieldType(mysql.TypeVarString)}, {Index: 1, RetType: types.NewFieldType(mysql.TypeDouble)}, + {Index: 1, RetType: types.NewFieldType(mysql.TypeDouble)}, + {Index: 1, RetType: types.NewFieldType(mysql.TypeDouble)}, + {Index: 1, RetType: types.NewFieldType(mysql.TypeDouble)}, + {Index: 1, RetType: types.NewFieldType(mysql.TypeDouble)}, } } @@ -191,22 +201,50 @@ func buildHashAggExecutor(t *testing.T, ctx sessionctx.Context, child exec.Execu schema := expression.NewSchema(childCols...) groupItems := []expression.Expression{childCols[0]} - aggFirstRow, err := aggregation.NewAggFuncDesc(ctx.GetExprCtx(), ast.AggFuncFirstRow, []expression.Expression{childCols[0]}, false) + var err error + var aggFirstRow *aggregation.AggFuncDesc + var aggSum *aggregation.AggFuncDesc + var aggCount *aggregation.AggFuncDesc + var aggAvg *aggregation.AggFuncDesc + var aggMin *aggregation.AggFuncDesc + var aggMax *aggregation.AggFuncDesc + aggFirstRow, err = aggregation.NewAggFuncDesc(ctx.GetExprCtx(), ast.AggFuncFirstRow, []expression.Expression{childCols[0]}, false) + if err != nil { + t.Fatal(err) + } + + aggSum, err = aggregation.NewAggFuncDesc(ctx.GetExprCtx(), ast.AggFuncSum, []expression.Expression{childCols[1]}, false) + if err != nil { + t.Fatal(err) + } + + aggCount, err = aggregation.NewAggFuncDesc(ctx.GetExprCtx(), ast.AggFuncCount, []expression.Expression{childCols[1]}, false) if err != nil { t.Fatal(err) } - aggFunc, err := aggregation.NewAggFuncDesc(ctx.GetExprCtx(), ast.AggFuncSum, []expression.Expression{childCols[1]}, false) + aggAvg, err = aggregation.NewAggFuncDesc(ctx.GetExprCtx(), ast.AggFuncAvg, []expression.Expression{childCols[1]}, false) if err != nil { t.Fatal(err) } - aggFuncs := []*aggregation.AggFuncDesc{aggFirstRow, aggFunc} + aggMin, err = aggregation.NewAggFuncDesc(ctx.GetExprCtx(), ast.AggFuncMin, []expression.Expression{childCols[1]}, false) + if err != nil { + t.Fatal(err) + } + + aggMax, err = aggregation.NewAggFuncDesc(ctx.GetExprCtx(), ast.AggFuncMax, []expression.Expression{childCols[1]}, false) + if err != nil { + t.Fatal(err) + } + + aggFuncs := []*aggregation.AggFuncDesc{aggFirstRow, aggSum, aggCount, aggAvg, aggMin, aggMax} aggExec := &aggregate.HashAggExec{ BaseExecutor: exec.NewBaseExecutor(ctx, schema, 0, child), Sc: ctx.GetSessionVars().StmtCtx, PartialAggFuncs: make([]aggfuncs.AggFunc, 0, len(aggFuncs)), + FinalAggFuncs: make([]aggfuncs.AggFunc, 0, len(aggFuncs)), GroupByItems: groupItems, IsUnparallelExec: false, } @@ -215,6 +253,10 @@ func buildHashAggExecutor(t *testing.T, ctx sessionctx.Context, child exec.Execu for i, aggDesc := range aggFuncs { ordinal := []int{partialOrdinal} partialOrdinal++ + if aggDesc.Name == ast.AggFuncAvg { + ordinal = append(ordinal, partialOrdinal+1) + partialOrdinal++ + } partialAggDesc, finalDesc := aggDesc.Split(ordinal) partialAggFunc := aggfuncs.Build(ctx.GetExprCtx(), partialAggDesc, i) finalAggFunc := aggfuncs.Build(ctx.GetExprCtx(), finalDesc, i) @@ -237,30 +279,48 @@ func initCtx(ctx *mock.Context, newRootExceedAction *testutil.MockActionOnExceed ctx.GetSessionVars().MemTracker.SetActionOnExceed(newRootExceedAction) } -// select t0, sum(t1) from t group by t0; -func executeCorrecResultTest(t *testing.T, ctx *mock.Context, aggExec *aggregate.HashAggExec, dataSource *testutil.MockDataSource, result map[string]float64) { +func checkResult(expectResult []chunk.Row, actualResult []chunk.Row, retTypes []*types.FieldType) bool { + if len(expectResult) != len(actualResult) { + return false + } + + rowNum := len(expectResult) + for i := 0; i < rowNum; i++ { + if expectResult[i].ToString(retTypes) != actualResult[i].ToString(retTypes) { + return false + } + } + + return true +} + +func executeCorrecResultTest(t *testing.T, ctx *mock.Context, aggExec *aggregate.HashAggExec, dataSource *testutil.MockDataSource, expectResult []chunk.Row) { if aggExec == nil { aggExec = buildHashAggExecutor(t, ctx, dataSource) } dataSource.PrepareChunks() tmpCtx := context.Background() - chk := exec.NewFirstChunk(aggExec) - resContainer := resultsContainer{} + resultRows := make([]chunk.Row, 0) aggExec.Open(tmpCtx) - for { + chk := exec.NewFirstChunk(aggExec) err := aggExec.Next(tmpCtx, chk) require.Equal(t, nil, err) if chk.NumRows() == 0 { break } - resContainer.add(chk) - chk.Reset() + + rowNum := chk.NumRows() + for i := 0; i < rowNum; i++ { + resultRows = append(resultRows, chk.GetRow(i)) + } } aggExec.Close() require.True(t, aggExec.IsSpillTriggeredForTest()) - require.True(t, resContainer.check(result)) + retTypes := getRetTypes() + resultRows = sortRows(resultRows, retTypes) + require.True(t, checkResult(expectResult, resultRows, retTypes)) } func fallBackActionTest(t *testing.T) { @@ -283,15 +343,12 @@ func fallBackActionTest(t *testing.T) { dataSource.PrepareChunks() tmpCtx := context.Background() chk := exec.NewFirstChunk(aggExec) - resContainer := resultsContainer{} aggExec.Open(tmpCtx) - for { aggExec.Next(tmpCtx, chk) if chk.NumRows() == 0 { break } - resContainer.add(chk) chk.Reset() } aggExec.Close() @@ -340,21 +397,26 @@ func randomFailTest(t *testing.T, ctx *mock.Context, aggExec *aggregate.HashAggE }) } +// sql: select col0, sum(col1), count(col1), avg(col1), min(col1), max(col1) from t group by t.col0; func TestGetCorrectResult(t *testing.T) { newRootExceedAction := new(testutil.MockActionOnExceed) - hardLimitBytesNum := int64(6000000) ctx := mock.NewContext() - initCtx(ctx, newRootExceedAction, hardLimitBytesNum, 256) + initCtx(ctx, newRootExceedAction, -1, 1024) rowNum := 100000 ndv := 50000 - col1, col2 := generateData(rowNum, ndv) - result := generateResult(col1) + col0, col1 := generateData(rowNum, ndv) opt := getMockDataSourceParameters(ctx) - dataSource := buildMockDataSource(opt, col1, col2) + dataSource := buildMockDataSource(opt, col0, col1) + result := generateResult(t, ctx, dataSource) + + err := failpoint.Enable("github.com/pingcap/tidb/pkg/executor/aggregate/slowSomePartialWorkers", `return(true)`) + require.NoError(t, err) + defer require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/executor/aggregate/slowSomePartialWorkers")) - failpoint.Enable("github.com/pingcap/tidb/pkg/executor/aggregate/slowSomePartialWorkers", `return(true)`) + hardLimitBytesNum := int64(6000000) + initCtx(ctx, newRootExceedAction, hardLimitBytesNum, 256) finished := atomic.Bool{} wg := sync.WaitGroup{} @@ -380,7 +442,6 @@ func TestGetCorrectResult(t *testing.T) { finished.Store(true) wg.Wait() - require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/executor/aggregate/slowSomePartialWorkers")) } func TestFallBackAction(t *testing.T) { diff --git a/pkg/executor/analyze.go b/pkg/executor/analyze.go index 14d4296d370ba..5fd61796dd07c 100644 --- a/pkg/executor/analyze.go +++ b/pkg/executor/analyze.go @@ -22,7 +22,6 @@ import ( "net" "strconv" "strings" - "time" "github.com/pingcap/errors" "github.com/pingcap/failpoint" @@ -41,12 +40,10 @@ import ( "github.com/pingcap/tidb/pkg/statistics/handle" statstypes "github.com/pingcap/tidb/pkg/statistics/handle/types" handleutil "github.com/pingcap/tidb/pkg/statistics/handle/util" - "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/chunk" "github.com/pingcap/tidb/pkg/util/logutil" "github.com/pingcap/tidb/pkg/util/sqlescape" - "github.com/pingcap/tidb/pkg/util/sqlexec" "github.com/pingcap/tipb/go-tipb" "github.com/tiancaiamao/gp" "go.uber.org/zap" @@ -103,16 +100,16 @@ func (e *AnalyzeExec) Next(ctx context.Context, _ *chunk.Chunk) error { } // Get the min number of goroutines for parallel execution. - concurrency, err := getBuildStatsConcurrency(e.Ctx()) + buildStatsConcurrency, err := getBuildStatsConcurrency(e.Ctx()) if err != nil { return err } - concurrency = min(len(tasks), concurrency) + buildStatsConcurrency = min(len(tasks), buildStatsConcurrency) // Start workers with channel to collect results. - taskCh := make(chan *analyzeTask, concurrency) + taskCh := make(chan *analyzeTask, buildStatsConcurrency) resultsCh := make(chan *statistics.AnalyzeResults, 1) - for i := 0; i < concurrency; i++ { + for i := 0; i < buildStatsConcurrency; i++ { e.wg.Run(func() { e.analyzeWorker(taskCh, resultsCh) }) } pruneMode := variable.PartitionPruneMode(sessionVars.PartitionPruneMode.Load()) @@ -121,7 +118,7 @@ func (e *AnalyzeExec) Next(ctx context.Context, _ *chunk.Chunk) error { globalStatsMap := make(map[globalStatsKey]statstypes.GlobalStatsInfo) g, gctx := errgroup.WithContext(ctx) g.Go(func() error { - return e.handleResultsError(ctx, concurrency, needGlobalStats, globalStatsMap, resultsCh, len(tasks)) + return e.handleResultsError(buildStatsConcurrency, needGlobalStats, globalStatsMap, resultsCh, len(tasks)) }) for _, task := range tasks { prepareV2AnalyzeJobInfo(task.colExec) @@ -129,7 +126,9 @@ func (e *AnalyzeExec) Next(ctx context.Context, _ *chunk.Chunk) error { } failpoint.Inject("mockKillPendingAnalyzeJob", func() { dom := domain.GetDomain(e.Ctx()) - dom.SysProcTracker().KillSysProcess(dom.GetAutoAnalyzeProcID()) + for _, id := range handleutil.GlobalAutoAnalyzeProcessList.All() { + dom.SysProcTracker().KillSysProcess(id) + } }) TASKLOOP: for _, task := range tasks { @@ -157,11 +156,13 @@ TASKLOOP: failpoint.Inject("mockKillFinishedAnalyzeJob", func() { dom := domain.GetDomain(e.Ctx()) - dom.SysProcTracker().KillSysProcess(dom.GetAutoAnalyzeProcID()) + for _, id := range handleutil.GlobalAutoAnalyzeProcessList.All() { + dom.SysProcTracker().KillSysProcess(id) + } }) // If we enabled dynamic prune mode, then we need to generate global stats here for partition tables. if needGlobalStats { - err = e.handleGlobalStats(globalStatsMap) + err = e.handleGlobalStats(statsHandle, globalStatsMap) if err != nil { return err } @@ -242,7 +243,7 @@ func filterAndCollectTasks(tasks []*analyzeTask, statsHandle *handle.Handle, is skippedTables = append(skippedTables, fmt.Sprintf("%s.%s partition (%s)", schema.Name, tbl.Meta().Name.O, def.Name.O)) } } else { - tbl, ok := is.TableByID(physicalTableID) + tbl, ok := is.TableByID(context.Background(), physicalTableID) if !ok { logutil.BgLogger().Warn("Unknown table ID in analyze task", zap.Int64("tid", physicalTableID)) } else { @@ -367,8 +368,7 @@ func recordHistoricalStats(sctx sessionctx.Context, tableID int64) error { // handleResultsError will handle the error fetch from resultsCh and record it in log func (e *AnalyzeExec) handleResultsError( - ctx context.Context, - concurrency int, + buildStatsConcurrency int, needGlobalStats bool, globalStatsMap globalStatsMap, resultsCh <-chan *statistics.AnalyzeResults, @@ -384,91 +384,47 @@ func (e *AnalyzeExec) handleResultsError( } } }() - partitionStatsConcurrency := e.Ctx().GetSessionVars().AnalyzePartitionConcurrency - // the concurrency of handleResultsError cannot be more than partitionStatsConcurrency - partitionStatsConcurrency = min(taskNum, partitionStatsConcurrency) - // If partitionStatsConcurrency > 1, we will try to demand extra session from Domain to save Analyze results in concurrency. - // If there is no extra session we can use, we will save analyze results in single-thread. - if partitionStatsConcurrency > 1 { - dom := domain.GetDomain(e.Ctx()) - subSctxs := dom.FetchAnalyzeExec(partitionStatsConcurrency) - if len(subSctxs) > 0 { - defer func() { - dom.ReleaseAnalyzeExec(subSctxs) - }() - internalCtx := kv.WithInternalSourceType(ctx, kv.InternalTxnStats) - err := e.handleResultsErrorWithConcurrency(internalCtx, concurrency, needGlobalStats, subSctxs, globalStatsMap, resultsCh) - return err - } - } + saveStatsConcurrency := e.Ctx().GetSessionVars().AnalyzePartitionConcurrency + // The buildStatsConcurrency of saving partition-level stats should not exceed the total number of tasks. + saveStatsConcurrency = min(taskNum, saveStatsConcurrency) + if saveStatsConcurrency > 1 { + logutil.BgLogger().Info("save analyze results concurrently", + zap.Int("buildStatsConcurrency", buildStatsConcurrency), + zap.Int("saveStatsConcurrency", saveStatsConcurrency), + ) + return e.handleResultsErrorWithConcurrency(buildStatsConcurrency, saveStatsConcurrency, needGlobalStats, globalStatsMap, resultsCh) + } + logutil.BgLogger().Info("save analyze results in single-thread", + zap.Int("buildStatsConcurrency", buildStatsConcurrency), + zap.Int("saveStatsConcurrency", saveStatsConcurrency), + ) failpoint.Inject("handleResultsErrorSingleThreadPanic", nil) - tableIDs := map[int64]struct{}{} - - // save analyze results in single-thread. - statsHandle := domain.GetDomain(e.Ctx()).StatsHandle() - panicCnt := 0 - for panicCnt < concurrency { - results, ok := <-resultsCh - if !ok { - break - } - if results.Err != nil { - err = results.Err - if isAnalyzeWorkerPanic(err) { - panicCnt++ - } else { - logutil.Logger(ctx).Error("analyze failed", zap.Error(err)) - } - finishJobWithLog(e.Ctx(), results.Job, err) - continue - } - handleGlobalStats(needGlobalStats, globalStatsMap, results) - tableIDs[results.TableID.GetStatisticsID()] = struct{}{} - - if err1 := statsHandle.SaveTableStatsToStorage(results, e.Ctx().GetSessionVars().EnableAnalyzeSnapshot, handleutil.StatsMetaHistorySourceAnalyze); err1 != nil { - tableID := results.TableID.TableID - err = err1 - logutil.Logger(ctx).Error("save table stats to storage failed", zap.Error(err), zap.Int64("tableID", tableID)) - finishJobWithLog(e.Ctx(), results.Job, err) - } else { - finishJobWithLog(e.Ctx(), results.Job, nil) - } - if err := e.Ctx().GetSessionVars().SQLKiller.HandleSignal(); err != nil { - finishJobWithLog(e.Ctx(), results.Job, err) - results.DestroyAndPutToPool() - return err - } - results.DestroyAndPutToPool() - } - // Dump stats to historical storage. - for tableID := range tableIDs { - if err := recordHistoricalStats(e.Ctx(), tableID); err != nil { - logutil.BgLogger().Error("record historical stats failed", zap.Error(err)) - } - } - - return err + return e.handleResultsErrorWithConcurrency(buildStatsConcurrency, saveStatsConcurrency, needGlobalStats, globalStatsMap, resultsCh) } -func (e *AnalyzeExec) handleResultsErrorWithConcurrency(ctx context.Context, statsConcurrency int, needGlobalStats bool, - subSctxs []sessionctx.Context, - globalStatsMap globalStatsMap, resultsCh <-chan *statistics.AnalyzeResults) error { - partitionStatsConcurrency := len(subSctxs) - +func (e *AnalyzeExec) handleResultsErrorWithConcurrency( + buildStatsConcurrency int, + saveStatsConcurrency int, + needGlobalStats bool, + globalStatsMap globalStatsMap, + resultsCh <-chan *statistics.AnalyzeResults, +) error { + statsHandle := domain.GetDomain(e.Ctx()).StatsHandle() wg := util.NewWaitGroupPool(e.gp) - saveResultsCh := make(chan *statistics.AnalyzeResults, partitionStatsConcurrency) - errCh := make(chan error, partitionStatsConcurrency) - for i := 0; i < partitionStatsConcurrency; i++ { - worker := newAnalyzeSaveStatsWorker(saveResultsCh, subSctxs[i], errCh, &e.Ctx().GetSessionVars().SQLKiller) + saveResultsCh := make(chan *statistics.AnalyzeResults, saveStatsConcurrency) + errCh := make(chan error, saveStatsConcurrency) + for i := 0; i < saveStatsConcurrency; i++ { + worker := newAnalyzeSaveStatsWorker(saveResultsCh, errCh, &e.Ctx().GetSessionVars().SQLKiller) ctx1 := kv.WithInternalSourceType(context.Background(), kv.InternalTxnStats) wg.Run(func() { - worker.run(ctx1, e.Ctx().GetSessionVars().EnableAnalyzeSnapshot) + worker.run(ctx1, statsHandle, e.Ctx().GetSessionVars().EnableAnalyzeSnapshot) }) } tableIDs := map[int64]struct{}{} panicCnt := 0 var err error - for panicCnt < statsConcurrency { + // Only if all the analyze workers exit can we close the saveResultsCh. + for panicCnt < buildStatsConcurrency { if err := e.Ctx().GetSessionVars().SQLKiller.HandleSignal(); err != nil { close(saveResultsCh) return err @@ -482,9 +438,9 @@ func (e *AnalyzeExec) handleResultsErrorWithConcurrency(ctx context.Context, sta if isAnalyzeWorkerPanic(err) { panicCnt++ } else { - logutil.Logger(ctx).Error("analyze failed", zap.Error(err)) + logutil.BgLogger().Error("receive error when saving analyze results", zap.Error(err)) } - finishJobWithLog(e.Ctx(), results.Job, err) + finishJobWithLog(statsHandle, results.Job, err) continue } handleGlobalStats(needGlobalStats, globalStatsMap, results) @@ -512,6 +468,7 @@ func (e *AnalyzeExec) handleResultsErrorWithConcurrency(ctx context.Context, sta func (e *AnalyzeExec) analyzeWorker(taskCh <-chan *analyzeTask, resultsCh chan<- *statistics.AnalyzeResults) { var task *analyzeTask + statsHandle := domain.GetDomain(e.Ctx()).StatsHandle() defer func() { if r := recover(); r != nil { logutil.BgLogger().Error("analyze worker panicked", zap.Any("recover", r), zap.Stack("stack")) @@ -535,7 +492,7 @@ func (e *AnalyzeExec) analyzeWorker(taskCh <-chan *analyzeTask, resultsCh chan<- break } failpoint.Inject("handleAnalyzeWorkerPanic", nil) - StartAnalyzeJob(e.Ctx(), task.job) + statsHandle.StartAnalyzeJob(task.job) switch task.taskType { case colTask: select { @@ -590,147 +547,8 @@ func AddNewAnalyzeJob(ctx sessionctx.Context, job *statistics.AnalyzeJob) { } } -// StartAnalyzeJob marks the state of the analyze job as running and sets the start time. -func StartAnalyzeJob(sctx sessionctx.Context, job *statistics.AnalyzeJob) { - if job == nil || job.ID == nil { - return - } - job.StartTime = time.Now() - job.Progress.SetLastDumpTime(job.StartTime) - exec := sctx.GetRestrictedSQLExecutor() - ctx := kv.WithInternalSourceType(context.Background(), kv.InternalTxnStats) - const sql = "UPDATE mysql.analyze_jobs SET start_time = CONVERT_TZ(%?, '+00:00', @@TIME_ZONE), state = %? WHERE id = %?" - _, _, err := exec.ExecRestrictedSQL(ctx, []sqlexec.OptionFuncAlias{sqlexec.ExecOptionUseSessionPool}, sql, job.StartTime.UTC().Format(types.TimeFormat), statistics.AnalyzeRunning, *job.ID) - if err != nil { - logutil.BgLogger().Warn("failed to update analyze job", zap.String("update", fmt.Sprintf("%s->%s", statistics.AnalyzePending, statistics.AnalyzeRunning)), zap.Error(err)) - } - failpoint.Inject("DebugAnalyzeJobOperations", func(val failpoint.Value) { - if val.(bool) { - logutil.BgLogger().Info("StartAnalyzeJob", - zap.Time("start_time", job.StartTime), - zap.Uint64("job id", *job.ID), - ) - } - }) -} - -// UpdateAnalyzeJob updates count of the processed rows when increment reaches a threshold. -func UpdateAnalyzeJob(sctx sessionctx.Context, job *statistics.AnalyzeJob, rowCount int64) { - if job == nil || job.ID == nil { - return - } - delta := job.Progress.Update(rowCount) - if delta == 0 { - return - } - exec := sctx.GetRestrictedSQLExecutor() - ctx := kv.WithInternalSourceType(context.Background(), kv.InternalTxnStats) - const sql = "UPDATE mysql.analyze_jobs SET processed_rows = processed_rows + %? WHERE id = %?" - _, _, err := exec.ExecRestrictedSQL(ctx, []sqlexec.OptionFuncAlias{sqlexec.ExecOptionUseSessionPool}, sql, delta, *job.ID) - if err != nil { - logutil.BgLogger().Warn("failed to update analyze job", zap.String("update", fmt.Sprintf("process %v rows", delta)), zap.Error(err)) - } - failpoint.Inject("DebugAnalyzeJobOperations", func(val failpoint.Value) { - if val.(bool) { - logutil.BgLogger().Info("UpdateAnalyzeJob", - zap.Int64("increase processed_rows", delta), - zap.Uint64("job id", *job.ID), - ) - } - }) -} - -// FinishAnalyzeMergeJob finishes analyze merge job -func FinishAnalyzeMergeJob(sctx sessionctx.Context, job *statistics.AnalyzeJob, analyzeErr error) { - if job == nil || job.ID == nil { - return - } - - job.EndTime = time.Now() - var sql string - var args []any - if analyzeErr != nil { - failReason := analyzeErr.Error() - const textMaxLength = 65535 - if len(failReason) > textMaxLength { - failReason = failReason[:textMaxLength] - } - sql = "UPDATE mysql.analyze_jobs SET end_time = CONVERT_TZ(%?, '+00:00', @@TIME_ZONE), state = %?, fail_reason = %?, process_id = NULL WHERE id = %?" - args = []any{job.EndTime.UTC().Format(types.TimeFormat), statistics.AnalyzeFailed, failReason, *job.ID} - } else { - sql = "UPDATE mysql.analyze_jobs SET end_time = CONVERT_TZ(%?, '+00:00', @@TIME_ZONE), state = %?, process_id = NULL WHERE id = %?" - args = []any{job.EndTime.UTC().Format(types.TimeFormat), statistics.AnalyzeFinished, *job.ID} - } - exec := sctx.GetRestrictedSQLExecutor() - ctx := kv.WithInternalSourceType(context.Background(), kv.InternalTxnStats) - _, _, err := exec.ExecRestrictedSQL(ctx, []sqlexec.OptionFuncAlias{sqlexec.ExecOptionUseSessionPool}, sql, args...) - if err != nil { - var state string - if analyzeErr != nil { - state = statistics.AnalyzeFailed - } else { - state = statistics.AnalyzeFinished - } - logutil.BgLogger().Warn("failed to update analyze job", zap.String("update", fmt.Sprintf("%s->%s", statistics.AnalyzeRunning, state)), zap.Error(err)) - } - failpoint.Inject("DebugAnalyzeJobOperations", func(val failpoint.Value) { - if val.(bool) { - logutil.BgLogger().Info("FinishAnalyzeMergeJob", - zap.Time("end_time", job.EndTime), - zap.Uint64("job id", *job.ID), - ) - } - }) -} - -// FinishAnalyzeJob updates the state of the analyze job to finished/failed according to `meetError` and sets the end time. -func FinishAnalyzeJob(sctx sessionctx.Context, job *statistics.AnalyzeJob, analyzeErr error) { - if job == nil || job.ID == nil { - return - } - job.EndTime = time.Now() - var sql string - var args []any - // process_id is used to see which process is running the analyze job and kill the analyze job. After the analyze job - // is finished(or failed), process_id is useless and we set it to NULL to avoid `kill tidb process_id` wrongly. - if analyzeErr != nil { - failReason := analyzeErr.Error() - const textMaxLength = 65535 - if len(failReason) > textMaxLength { - failReason = failReason[:textMaxLength] - } - sql = "UPDATE mysql.analyze_jobs SET processed_rows = processed_rows + %?, end_time = CONVERT_TZ(%?, '+00:00', @@TIME_ZONE), state = %?, fail_reason = %?, process_id = NULL WHERE id = %?" - args = []any{job.Progress.GetDeltaCount(), job.EndTime.UTC().Format(types.TimeFormat), statistics.AnalyzeFailed, failReason, *job.ID} - } else { - sql = "UPDATE mysql.analyze_jobs SET processed_rows = processed_rows + %?, end_time = CONVERT_TZ(%?, '+00:00', @@TIME_ZONE), state = %?, process_id = NULL WHERE id = %?" - args = []any{job.Progress.GetDeltaCount(), job.EndTime.UTC().Format(types.TimeFormat), statistics.AnalyzeFinished, *job.ID} - } - exec := sctx.GetRestrictedSQLExecutor() - ctx := kv.WithInternalSourceType(context.Background(), kv.InternalTxnStats) - _, _, err := exec.ExecRestrictedSQL(ctx, []sqlexec.OptionFuncAlias{sqlexec.ExecOptionUseSessionPool}, sql, args...) - if err != nil { - var state string - if analyzeErr != nil { - state = statistics.AnalyzeFailed - } else { - state = statistics.AnalyzeFinished - } - logutil.BgLogger().Warn("failed to update analyze job", zap.String("update", fmt.Sprintf("%s->%s", statistics.AnalyzeRunning, state)), zap.Error(err)) - } - failpoint.Inject("DebugAnalyzeJobOperations", func(val failpoint.Value) { - if val.(bool) { - logutil.BgLogger().Info("FinishAnalyzeJob", - zap.Int64("increase processed_rows", job.Progress.GetDeltaCount()), - zap.Time("end_time", job.EndTime), - zap.Uint64("job id", *job.ID), - zap.Error(analyzeErr), - ) - } - }) -} - -func finishJobWithLog(sctx sessionctx.Context, job *statistics.AnalyzeJob, analyzeErr error) { - FinishAnalyzeJob(sctx, job, analyzeErr) +func finishJobWithLog(statsHandle *handle.Handle, job *statistics.AnalyzeJob, analyzeErr error) { + statsHandle.FinishAnalyzeJob(job, analyzeErr, statistics.TableAnalysisJob) if job != nil { var state string if analyzeErr != nil { diff --git a/pkg/executor/analyze_col.go b/pkg/executor/analyze_col.go index c1d1dc46770d2..78a5190b8d21b 100644 --- a/pkg/executor/analyze_col.go +++ b/pkg/executor/analyze_col.go @@ -32,6 +32,7 @@ import ( "github.com/pingcap/tidb/pkg/planner/core" plannerutil "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/statistics" + handleutil "github.com/pingcap/tidb/pkg/statistics/handle/util" "github.com/pingcap/tidb/pkg/tablecodec" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util" @@ -173,10 +174,13 @@ func (e *AnalyzeColumnsExec) buildStats(ranges []*ranger.Range, needExtStats boo CMSketch: statistics.NewCMSketch(int32(e.opts[ast.AnalyzeOptCMSketchDepth]), int32(e.opts[ast.AnalyzeOptCMSketchWidth])), } } + statsHandle := domain.GetDomain(e.ctx).StatsHandle() for { failpoint.Inject("mockKillRunningV1AnalyzeJob", func() { dom := domain.GetDomain(e.ctx) - dom.SysProcTracker().KillSysProcess(dom.GetAutoAnalyzeProcID()) + for _, id := range handleutil.GlobalAutoAnalyzeProcessList.All() { + dom.SysProcTracker().KillSysProcess(id) + } }) if err := e.ctx.GetSessionVars().SQLKiller.HandleSignal(); err != nil { return nil, nil, nil, nil, nil, err @@ -225,7 +229,7 @@ func (e *AnalyzeColumnsExec) buildStats(ranges []*ranger.Range, needExtStats boo rowCount = respSample.Count + respSample.NullCount collectors[i].MergeSampleCollector(sc, respSample) } - UpdateAnalyzeJob(e.ctx, e.job, rowCount) + statsHandle.UpdateAnalyzeJobProgress(e.job, rowCount) } timeZone := e.ctx.GetSessionVars().Location() if hasPkHist(e.handleCols) { diff --git a/pkg/executor/analyze_col_v2.go b/pkg/executor/analyze_col_v2.go index 479cefe37917b..6eefe269fc865 100644 --- a/pkg/executor/analyze_col_v2.go +++ b/pkg/executor/analyze_col_v2.go @@ -30,6 +30,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/statistics" + handleutil "github.com/pingcap/tidb/pkg/statistics/handle/util" "github.com/pingcap/tidb/pkg/table" "github.com/pingcap/tidb/pkg/tablecodec" "github.com/pingcap/tidb/pkg/types" @@ -472,6 +473,7 @@ func (e *AnalyzeColumnsExecV2) handleNDVForSpecialIndexes(indexInfos []*model.In results: make(map[int64]*statistics.AnalyzeResults, len(indexInfos)), } var err error + statsHandle := domain.GetDomain(e.ctx).StatsHandle() for panicCnt < statsConcurrncy { results, ok := <-resultsCh if !ok { @@ -479,13 +481,13 @@ func (e *AnalyzeColumnsExecV2) handleNDVForSpecialIndexes(indexInfos []*model.In } if results.Err != nil { err = results.Err - FinishAnalyzeJob(e.ctx, results.Job, err) + statsHandle.FinishAnalyzeJob(results.Job, err, statistics.TableAnalysisJob) if isAnalyzeWorkerPanic(err) { panicCnt++ } continue } - FinishAnalyzeJob(e.ctx, results.Job, nil) + statsHandle.FinishAnalyzeJob(results.Job, nil, statistics.TableAnalysisJob) totalResult.results[results.Ars[0].Hist[0].ID] = results } if err != nil { @@ -497,6 +499,7 @@ func (e *AnalyzeColumnsExecV2) handleNDVForSpecialIndexes(indexInfos []*model.In // subIndexWorker receive the task for each index and return the result for them. func (e *AnalyzeColumnsExecV2) subIndexWorkerForNDV(taskCh chan *analyzeTask, resultsCh chan *statistics.AnalyzeResults) { var task *analyzeTask + statsHandle := domain.GetDomain(e.ctx).StatsHandle() defer func() { if r := recover(); r != nil { logutil.BgLogger().Error("analyze worker panicked", zap.Any("recover", r), zap.Stack("stack")) @@ -513,7 +516,7 @@ func (e *AnalyzeColumnsExecV2) subIndexWorkerForNDV(taskCh chan *analyzeTask, re if !ok { break } - StartAnalyzeJob(e.ctx, task.job) + statsHandle.StartAnalyzeJob(task.job) if task.taskType != idxTask { resultsCh <- &statistics.AnalyzeResults{ Err: errors.Errorf("incorrect analyze type"), @@ -627,6 +630,7 @@ func (e *AnalyzeColumnsExecV2) subMergeWorker(resultCh chan<- *samplingMergeResu for i := 0; i < l; i++ { retCollector.Base().FMSketches = append(retCollector.Base().FMSketches, statistics.NewFMSketch(statistics.MaxSketchSize)) } + statsHandle := domain.GetDomain(e.ctx).StatsHandle() for { data, ok := <-taskCh if !ok { @@ -648,7 +652,7 @@ func (e *AnalyzeColumnsExecV2) subMergeWorker(resultCh chan<- *samplingMergeResu // Update processed rows. subCollector := statistics.NewRowSampleCollector(int(e.analyzePB.ColReq.SampleSize), e.analyzePB.ColReq.GetSampleRate(), l) subCollector.Base().FromProto(colResp.RowCollector, e.memTracker) - UpdateAnalyzeJob(e.ctx, e.job, subCollector.Base().Count) + statsHandle.UpdateAnalyzeJobProgress(e.job, subCollector.Base().Count) // Print collect log. oldRetCollectorSize := retCollector.Base().MemSize @@ -854,7 +858,9 @@ func readDataAndSendTask(ctx sessionctx.Context, handler *tableResultHandler, me for { failpoint.Inject("mockKillRunningV2AnalyzeJob", func() { dom := domain.GetDomain(ctx) - dom.SysProcTracker().KillSysProcess(dom.GetAutoAnalyzeProcID()) + for _, id := range handleutil.GlobalAutoAnalyzeProcessList.All() { + dom.SysProcTracker().KillSysProcess(id) + } }) if err := ctx.GetSessionVars().SQLKiller.HandleSignal(); err != nil { return err diff --git a/pkg/executor/analyze_global_stats.go b/pkg/executor/analyze_global_stats.go index 29801ca35fda8..f9a055072c17e 100644 --- a/pkg/executor/analyze_global_stats.go +++ b/pkg/executor/analyze_global_stats.go @@ -15,11 +15,13 @@ package executor import ( + "context" "fmt" "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/infoschema" "github.com/pingcap/tidb/pkg/statistics" + "github.com/pingcap/tidb/pkg/statistics/handle" statstypes "github.com/pingcap/tidb/pkg/statistics/handle/types" "github.com/pingcap/tidb/pkg/util/logutil" "go.uber.org/zap" @@ -35,13 +37,12 @@ type globalStatsKey struct { // The meaning of value in map is some additional information needed to build global-level stats. type globalStatsMap map[globalStatsKey]statstypes.GlobalStatsInfo -func (e *AnalyzeExec) handleGlobalStats(globalStatsMap globalStatsMap) error { +func (e *AnalyzeExec) handleGlobalStats(statsHandle *handle.Handle, globalStatsMap globalStatsMap) error { globalStatsTableIDs := make(map[int64]struct{}, len(globalStatsMap)) for globalStatsID := range globalStatsMap { globalStatsTableIDs[globalStatsID.tableID] = struct{}{} } - statsHandle := domain.GetDomain(e.Ctx()).StatsHandle() tableIDs := make(map[int64]struct{}, len(globalStatsTableIDs)) for tableID := range globalStatsTableIDs { tableIDs[tableID] = struct{}{} @@ -55,7 +56,7 @@ func (e *AnalyzeExec) handleGlobalStats(globalStatsMap globalStatsMap) error { continue } AddNewAnalyzeJob(e.Ctx(), job) - StartAnalyzeJob(e.Ctx(), job) + statsHandle.StartAnalyzeJob(job) mergeStatsErr := func() error { globalOpts := e.opts @@ -76,7 +77,7 @@ func (e *AnalyzeExec) handleGlobalStats(globalStatsMap globalStatsMap) error { } return err }() - FinishAnalyzeMergeJob(e.Ctx(), job, mergeStatsErr) + statsHandle.FinishAnalyzeJob(job, mergeStatsErr, statistics.GlobalStatsMergeJob) } } @@ -93,7 +94,7 @@ func (e *AnalyzeExec) handleGlobalStats(globalStatsMap globalStatsMap) error { func (e *AnalyzeExec) newAnalyzeHandleGlobalStatsJob(key globalStatsKey) *statistics.AnalyzeJob { dom := domain.GetDomain(e.Ctx()) is := dom.InfoSchema() - table, ok := is.TableByID(key.tableID) + table, ok := is.TableByID(context.Background(), key.tableID) if !ok { return nil } diff --git a/pkg/executor/analyze_idx.go b/pkg/executor/analyze_idx.go index a7c0a4b86fb71..1c26be7782d4f 100644 --- a/pkg/executor/analyze_idx.go +++ b/pkg/executor/analyze_idx.go @@ -29,6 +29,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/statistics" + handleutil "github.com/pingcap/tidb/pkg/statistics/handle/util" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/logutil" "github.com/pingcap/tidb/pkg/util/ranger" @@ -199,7 +200,9 @@ func (e *AnalyzeIndexExec) buildStatsFromResult(result distsql.SelectResult, nee for { failpoint.Inject("mockKillRunningAnalyzeIndexJob", func() { dom := domain.GetDomain(e.ctx) - dom.SysProcTracker().KillSysProcess(dom.GetAutoAnalyzeProcID()) + for _, id := range handleutil.GlobalAutoAnalyzeProcessList.All() { + dom.SysProcTracker().KillSysProcess(id) + } }) if err := e.ctx.GetSessionVars().SQLKiller.HandleSignal(); err != nil { return nil, nil, nil, nil, err @@ -316,7 +319,8 @@ func updateIndexResult( needCMS := cms != nil respHist := statistics.HistogramFromProto(resp.Hist) if job != nil { - UpdateAnalyzeJob(ctx, job, int64(respHist.TotalRowCount())) + statsHandle := domain.GetDomain(ctx).StatsHandle() + statsHandle.UpdateAnalyzeJobProgress(job, int64(respHist.TotalRowCount())) } hist, err = statistics.MergeHistograms(ctx.GetSessionVars().StmtCtx, hist, respHist, numBuckets, statsVer) if err != nil { diff --git a/pkg/executor/analyze_test.go b/pkg/executor/analyze_test.go index 8c424a33e6679..fbbf1bcc0d930 100644 --- a/pkg/executor/analyze_test.go +++ b/pkg/executor/analyze_test.go @@ -63,7 +63,6 @@ func TestAnalyzeIndexExtractTopN(t *testing.T) { }() var dom *domain.Domain session.DisableStats4Test() - session.SetSchemaLease(0) dom, err = session.BootstrapSession(store) require.NoError(t, err) defer dom.Close() diff --git a/pkg/executor/analyze_worker.go b/pkg/executor/analyze_worker.go index d92df2a1da266..e5fab8af9539c 100644 --- a/pkg/executor/analyze_worker.go +++ b/pkg/executor/analyze_worker.go @@ -17,9 +17,8 @@ package executor import ( "context" - "github.com/pingcap/tidb/pkg/domain" - "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/statistics" + "github.com/pingcap/tidb/pkg/statistics/handle" "github.com/pingcap/tidb/pkg/statistics/handle/util" "github.com/pingcap/tidb/pkg/util/logutil" "github.com/pingcap/tidb/pkg/util/sqlkiller" @@ -28,26 +27,23 @@ import ( type analyzeSaveStatsWorker struct { resultsCh <-chan *statistics.AnalyzeResults - sctx sessionctx.Context errCh chan<- error killer *sqlkiller.SQLKiller } func newAnalyzeSaveStatsWorker( resultsCh <-chan *statistics.AnalyzeResults, - sctx sessionctx.Context, errCh chan<- error, killer *sqlkiller.SQLKiller) *analyzeSaveStatsWorker { worker := &analyzeSaveStatsWorker{ resultsCh: resultsCh, - sctx: sctx, errCh: errCh, killer: killer, } return worker } -func (worker *analyzeSaveStatsWorker) run(ctx context.Context, analyzeSnapshot bool) { +func (worker *analyzeSaveStatsWorker) run(ctx context.Context, statsHandle *handle.Handle, analyzeSnapshot bool) { defer func() { if r := recover(); r != nil { logutil.BgLogger().Error("analyze save stats worker panicked", zap.Any("recover", r), zap.Stack("stack")) @@ -56,17 +52,18 @@ func (worker *analyzeSaveStatsWorker) run(ctx context.Context, analyzeSnapshot b }() for results := range worker.resultsCh { if err := worker.killer.HandleSignal(); err != nil { + finishJobWithLog(statsHandle, results.Job, err) + results.DestroyAndPutToPool() worker.errCh <- err return } - statsHandle := domain.GetDomain(worker.sctx).StatsHandle() err := statsHandle.SaveTableStatsToStorage(results, analyzeSnapshot, util.StatsMetaHistorySourceAnalyze) if err != nil { logutil.Logger(ctx).Error("save table stats to storage failed", zap.Error(err)) - finishJobWithLog(worker.sctx, results.Job, err) + finishJobWithLog(statsHandle, results.Job, err) worker.errCh <- err } else { - finishJobWithLog(worker.sctx, results.Job, nil) + finishJobWithLog(statsHandle, results.Job, nil) } results.DestroyAndPutToPool() if err != nil { diff --git a/pkg/executor/batch_checker.go b/pkg/executor/batch_checker.go index 5bec8e3837558..a3aed84315672 100644 --- a/pkg/executor/batch_checker.go +++ b/pkg/executor/batch_checker.go @@ -280,7 +280,7 @@ func getOldRow(ctx context.Context, sctx sessionctx.Context, txn kv.Transaction, } cols := t.WritableCols() - oldRow, oldRowMap, err := tables.DecodeRawRowData(sctx, t.Meta(), handle, cols, oldValue) + oldRow, oldRowMap, err := tables.DecodeRawRowData(sctx.GetExprCtx(), t.Meta(), handle, cols, oldValue) if err != nil { return nil, err } diff --git a/pkg/executor/benchmark_test.go b/pkg/executor/benchmark_test.go index 5d15670d25038..dfe65f0954bb3 100644 --- a/pkg/executor/benchmark_test.go +++ b/pkg/executor/benchmark_test.go @@ -40,6 +40,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/planner/core" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/sessionctx" @@ -278,7 +279,7 @@ func BenchmarkAggDistinct(b *testing.B) { } } -func buildWindowExecutor(ctx sessionctx.Context, windowFunc string, funcs int, frame *core.WindowFrame, srcExec exec.Executor, schema *expression.Schema, partitionBy []*expression.Column, concurrency int, dataSourceSorted bool) exec.Executor { +func buildWindowExecutor(ctx sessionctx.Context, windowFunc string, funcs int, frame *logicalop.WindowFrame, srcExec exec.Executor, schema *expression.Schema, partitionBy []*expression.Column, concurrency int, dataSourceSorted bool) exec.Executor { src := testutil.BuildMockDataPhysicalPlan(ctx, srcExec) win := new(core.PhysicalWindow) win.WindowFuncDescs = make([]*aggregation.WindowFuncDesc, 0) @@ -476,8 +477,8 @@ func baseBenchmarkWindowFunctionsWithFrame(b *testing.B, pipelined int) { ast.AggFuncBitXor, } numFuncs := []int{1, 5} - frames := []*core.WindowFrame{ - {Type: ast.Rows, Start: &core.FrameBound{UnBounded: true}, End: &core.FrameBound{Type: ast.CurrentRow}}, + frames := []*logicalop.WindowFrame{ + {Type: ast.Rows, Start: &logicalop.FrameBound{UnBounded: true}, End: &logicalop.FrameBound{Type: ast.CurrentRow}}, } sortTypes := []bool{false, true} concs := []int{1, 2, 3, 4, 5, 6} @@ -513,7 +514,7 @@ func BenchmarkWindowFunctionsWithFrame(b *testing.B) { func baseBenchmarkWindowFunctionsAggWindowProcessorAboutFrame(b *testing.B, pipelined int) { b.ReportAllocs() windowFunc := ast.AggFuncMax - frame := &core.WindowFrame{Type: ast.Rows, Start: &core.FrameBound{UnBounded: true}, End: &core.FrameBound{UnBounded: true}} + frame := &logicalop.WindowFrame{Type: ast.Rows, Start: &logicalop.FrameBound{UnBounded: true}, End: &logicalop.FrameBound{UnBounded: true}} cas := testutil.DefaultWindowTestCase() cas.Rows = 10000 cas.Ndv = 10 @@ -552,10 +553,10 @@ func baseBenchmarkWindowFunctionsWithSlidingWindow(b *testing.B, frameType ast.F } row := 100000 ndv := 100 - frame := &core.WindowFrame{ + frame := &logicalop.WindowFrame{ Type: frameType, - Start: &core.FrameBound{Type: ast.Preceding, Num: 10}, - End: &core.FrameBound{Type: ast.Following, Num: 10}, + Start: &logicalop.FrameBound{Type: ast.Preceding, Num: 10}, + End: &logicalop.FrameBound{Type: ast.Following, Num: 10}, } for _, windowFunc := range windowFuncs { cas := testutil.DefaultWindowTestCase() @@ -585,7 +586,7 @@ type hashJoinTestCase struct { concurrency int ctx sessionctx.Context keyIdx []int - joinType core.JoinType + joinType logicalop.JoinType disk bool useOuterToBuild bool rawData string @@ -606,7 +607,7 @@ func (tc hashJoinTestCase) String() string { tc.rows, tc.cols, tc.concurrency, tc.keyIdx, tc.disk) } -func defaultHashJoinTestCase(cols []*types.FieldType, joinType core.JoinType, useOuterToBuild bool) *hashJoinTestCase { +func defaultHashJoinTestCase(cols []*types.FieldType, joinType logicalop.JoinType, useOuterToBuild bool) *hashJoinTestCase { ctx := mock.NewContext() ctx.GetSessionVars().InitChunkSize = variable.DefInitChunkSize ctx.GetSessionVars().MaxChunkSize = variable.DefMaxChunkSize @@ -620,10 +621,10 @@ func defaultHashJoinTestCase(cols []*types.FieldType, joinType core.JoinType, us return tc } -func prepareResolveIndices(joinSchema, lSchema, rSchema *expression.Schema, joinType core.JoinType) *expression.Schema { +func prepareResolveIndices(joinSchema, lSchema, rSchema *expression.Schema, joinType logicalop.JoinType) *expression.Schema { colsNeedResolving := joinSchema.Len() // The last output column of this two join is the generated column to indicate whether the row is matched or not. - if joinType == core.LeftOuterSemiJoin || joinType == core.AntiLeftOuterSemiJoin { + if joinType == logicalop.LeftOuterSemiJoin || joinType == logicalop.AntiLeftOuterSemiJoin { colsNeedResolving-- } mergedSchema := expression.MergeSchema(lSchema, rSchema) @@ -686,7 +687,7 @@ func prepare4HashJoinV2(testCase *hashJoinTestCase, innerExec, outerExec exec.Ex // todo: need systematic way to protect. // physical join should resolveIndices to get right schema column index. // otherwise, markChildrenUsedColsForTest will fail below. - joinSchema = prepareResolveIndices(joinSchema, innerExec.Schema(), outerExec.Schema(), core.InnerJoin) + joinSchema = prepareResolveIndices(joinSchema, innerExec.Schema(), outerExec.Schema(), logicalop.InnerJoin) joinKeysColIdx := make([]int, 0, len(testCase.keyIdx)) joinKeysColIdx = append(joinKeysColIdx, testCase.keyIdx...) @@ -775,7 +776,7 @@ func prepare4HashJoin(testCase *hashJoinTestCase, innerExec, outerExec exec.Exec // todo: need systematic way to protect. // physical join should resolveIndices to get right schema column index. // otherwise, markChildrenUsedColsForTest will fail below. - joinSchema = prepareResolveIndices(joinSchema, innerExec.Schema(), outerExec.Schema(), core.InnerJoin) + joinSchema = prepareResolveIndices(joinSchema, innerExec.Schema(), outerExec.Schema(), logicalop.InnerJoin) joinKeysColIdx := make([]int, 0, len(testCase.keyIdx)) joinKeysColIdx = append(joinKeysColIdx, testCase.keyIdx...) diff --git a/pkg/executor/bind.go b/pkg/executor/bind.go index fef5c9d7ad538..7cfbf32c39647 100644 --- a/pkg/executor/bind.go +++ b/pkg/executor/bind.go @@ -22,7 +22,6 @@ import ( "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/executor/internal/exec" "github.com/pingcap/tidb/pkg/parser" - "github.com/pingcap/tidb/pkg/parser/ast" plannercore "github.com/pingcap/tidb/pkg/planner/core" "github.com/pingcap/tidb/pkg/util/chunk" ) @@ -31,18 +30,9 @@ import ( type SQLBindExec struct { exec.BaseExecutor - sqlBindOp plannercore.SQLBindOpType - normdOrigSQL string - bindSQL string - charset string - collation string - db string - isGlobal bool - bindAst ast.StmtNode - newStatus string - source string // by manual or from history, only in create stmt - sqlDigest string - planDigest string + isGlobal bool + sqlBindOp plannercore.SQLBindOpType + details []*plannercore.SQLBindOpDetail } // Next implements the Executor Next interface. @@ -74,33 +64,43 @@ func (e *SQLBindExec) Next(_ context.Context, req *chunk.Chunk) error { } func (e *SQLBindExec) dropSQLBind() error { + if len(e.details) != 1 { + return errors.New("SQLBindExec: dropSQLBind should only have one SQLBindOpDetail") + } if !e.isGlobal { handle := e.Ctx().Value(bindinfo.SessionBindInfoKeyType).(bindinfo.SessionBindingHandle) - err := handle.DropSessionBinding(e.sqlDigest) + err := handle.DropSessionBinding([]string{e.details[0].SQLDigest}) return err } - affectedRows, err := domain.GetDomain(e.Ctx()).BindHandle().DropGlobalBinding(e.sqlDigest) + affectedRows, err := domain.GetDomain(e.Ctx()).BindHandle().DropGlobalBinding([]string{e.details[0].SQLDigest}) e.Ctx().GetSessionVars().StmtCtx.AddAffectedRows(affectedRows) return err } func (e *SQLBindExec) dropSQLBindByDigest() error { - if e.sqlDigest == "" { - return errors.New("sql digest is empty") + sqlDigests := make([]string, 0, len(e.details)) + for _, detail := range e.details { + if detail.SQLDigest == "" { + return errors.New("SQLBindExec: dropSQLBindByDigest shouldn't contain empty SQLDigest") + } + sqlDigests = append(sqlDigests, detail.SQLDigest) } if !e.isGlobal { handle := e.Ctx().Value(bindinfo.SessionBindInfoKeyType).(bindinfo.SessionBindingHandle) - err := handle.DropSessionBinding(e.sqlDigest) + err := handle.DropSessionBinding(sqlDigests) return err } - affectedRows, err := domain.GetDomain(e.Ctx()).BindHandle().DropGlobalBinding(e.sqlDigest) + affectedRows, err := domain.GetDomain(e.Ctx()).BindHandle().DropGlobalBinding(sqlDigests) e.Ctx().GetSessionVars().StmtCtx.AddAffectedRows(affectedRows) return err } func (e *SQLBindExec) setBindingStatus() error { - _, sqlDigest := parser.NormalizeDigestForBinding(e.normdOrigSQL) - ok, err := domain.GetDomain(e.Ctx()).BindHandle().SetGlobalBindingStatus(e.newStatus, sqlDigest.String()) + if len(e.details) != 1 { + return errors.New("SQLBindExec: setBindingStatus should only have one SQLBindOpDetail") + } + _, sqlDigest := parser.NormalizeDigestForBinding(e.details[0].NormdOrigSQL) + ok, err := domain.GetDomain(e.Ctx()).BindHandle().SetGlobalBindingStatus(e.details[0].NewStatus, sqlDigest.String()) if err == nil && !ok { warningMess := errors.NewNoStackError("There are no bindings can be set the status. Please check the SQL text") e.Ctx().GetSessionVars().StmtCtx.AppendWarning(warningMess) @@ -109,7 +109,13 @@ func (e *SQLBindExec) setBindingStatus() error { } func (e *SQLBindExec) setBindingStatusByDigest() error { - ok, err := domain.GetDomain(e.Ctx()).BindHandle().SetGlobalBindingStatus(e.newStatus, e.sqlDigest) + if len(e.details) != 1 { + return errors.New("SQLBindExec: setBindingStatusByDigest should only have one SQLBindOpDetail") + } + ok, err := domain.GetDomain(e.Ctx()).BindHandle().SetGlobalBindingStatus( + e.details[0].NewStatus, + e.details[0].SQLDigest, + ) if err == nil && !ok { warningMess := errors.NewNoStackError("There are no bindings can be set the status. Please check the SQL text") e.Ctx().GetSessionVars().StmtCtx.AppendWarning(warningMess) @@ -129,22 +135,27 @@ func (e *SQLBindExec) createSQLBind() error { e.Ctx().GetSessionVars().StmtCtx = saveStmtCtx }() - binding := bindinfo.Binding{ - OriginalSQL: e.normdOrigSQL, - Db: e.db, - BindSQL: e.bindSQL, - Charset: e.charset, - Collation: e.collation, - Status: bindinfo.Enabled, - Source: e.source, - SQLDigest: e.sqlDigest, - PlanDigest: e.planDigest, + bindings := make([]*bindinfo.Binding, 0, len(e.details)) + for _, detail := range e.details { + binding := bindinfo.Binding{ + OriginalSQL: detail.NormdOrigSQL, + Db: detail.Db, + BindSQL: detail.BindSQL, + Charset: detail.Charset, + Collation: detail.Collation, + Status: bindinfo.Enabled, + Source: detail.Source, + SQLDigest: detail.SQLDigest, + PlanDigest: detail.PlanDigest, + } + bindings = append(bindings, &binding) } + if !e.isGlobal { handle := e.Ctx().Value(bindinfo.SessionBindInfoKeyType).(bindinfo.SessionBindingHandle) - return handle.CreateSessionBinding(e.Ctx(), binding) + return handle.CreateSessionBinding(e.Ctx(), bindings) } - return domain.GetDomain(e.Ctx()).BindHandle().CreateGlobalBinding(e.Ctx(), binding) + return domain.GetDomain(e.Ctx()).BindHandle().CreateGlobalBinding(e.Ctx(), bindings) } func (e *SQLBindExec) flushBindings() error { diff --git a/pkg/executor/brie.go b/pkg/executor/brie.go index 130f627bc6609..dd019e30b67b3 100644 --- a/pkg/executor/brie.go +++ b/pkg/executor/brie.go @@ -753,6 +753,10 @@ func (gs *tidbGlue) UseOneShotSession(_ kv.Storage, _ bool, fn func(se glue.Sess return fn(glueSession) } +func (*tidbGlue) GetClient() glue.GlueClient { + return glue.ClientSql +} + type tidbGlueSession struct { // the session context of the brie task's subtask, such as `CREATE TABLE`. se sessionctx.Context diff --git a/pkg/executor/builder.go b/pkg/executor/builder.go index d54046b2d0186..469682d1a4a10 100644 --- a/pkg/executor/builder.go +++ b/pkg/executor/builder.go @@ -62,6 +62,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/terror" plannercore "github.com/pingcap/tidb/pkg/planner/core" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" plannerutil "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/planner/util/coreusage" "github.com/pingcap/tidb/pkg/sessionctx" @@ -787,7 +788,7 @@ func (b *executorBuilder) buildSelectLock(v *plannercore.PhysicalLock) exec.Exec // filter out temporary tables because they do not store any record in tikv and should not write any lock is := e.Ctx().GetInfoSchema().(infoschema.InfoSchema) for tblID := range e.tblID2Handle { - tblInfo, ok := is.TableByID(tblID) + tblInfo, ok := is.TableByID(context.Background(), tblID) if !ok { b.err = errors.Errorf("Can not get table %d", tblID) } @@ -998,6 +999,7 @@ func (b *executorBuilder) buildInsert(v *plannercore.Insert) exec.Executor { insert := &InsertExec{ InsertValues: ivs, OnDuplicate: append(v.OnDuplicate, v.GenCols.OnDuplicates...), + IgnoreErr: v.IgnoreErr, } return insert } @@ -1005,7 +1007,7 @@ func (b *executorBuilder) buildInsert(v *plannercore.Insert) exec.Executor { func (b *executorBuilder) buildImportInto(v *plannercore.ImportInto) exec.Executor { // see planBuilder.buildImportInto for detail why we use the latest schema here. latestIS := b.ctx.GetDomainInfoSchema().(infoschema.InfoSchema) - tbl, ok := latestIS.TableByID(v.Table.TableInfo.ID) + tbl, ok := latestIS.TableByID(context.Background(), v.Table.TableInfo.ID) if !ok { b.err = errors.Errorf("Can not get table %d", v.Table.TableInfo.ID) return nil @@ -1038,7 +1040,7 @@ func (b *executorBuilder) buildImportInto(v *plannercore.ImportInto) exec.Execut } func (b *executorBuilder) buildLoadData(v *plannercore.LoadData) exec.Executor { - tbl, ok := b.is.TableByID(v.Table.TableInfo.ID) + tbl, ok := b.is.TableByID(context.Background(), v.Table.TableInfo.ID) if !ok { b.err = errors.Errorf("Can not get table %d", v.Table.TableInfo.ID) return nil @@ -1426,7 +1428,7 @@ func (b *executorBuilder) buildMergeJoin(v *plannercore.PhysicalMergeJoin) exec. defaultValues := v.DefaultValues if defaultValues == nil { - if v.JoinType == plannercore.RightOuterJoin { + if v.JoinType == logicalop.RightOuterJoin { defaultValues = make([]types.Datum, leftExec.Schema().Len()) } else { defaultValues = make([]types.Datum, rightExec.Schema().Len()) @@ -1434,7 +1436,7 @@ func (b *executorBuilder) buildMergeJoin(v *plannercore.PhysicalMergeJoin) exec. } colsFromChildren := v.Schema().Columns - if v.JoinType == plannercore.LeftOuterSemiJoin || v.JoinType == plannercore.AntiLeftOuterSemiJoin { + if v.JoinType == logicalop.LeftOuterSemiJoin || v.JoinType == logicalop.AntiLeftOuterSemiJoin { colsFromChildren = colsFromChildren[:len(colsFromChildren)-1] } @@ -1445,7 +1447,7 @@ func (b *executorBuilder) buildMergeJoin(v *plannercore.PhysicalMergeJoin) exec. Joiner: join.NewJoiner( b.ctx, v.JoinType, - v.JoinType == plannercore.RightOuterJoin, + v.JoinType == logicalop.RightOuterJoin, defaultValues, v.OtherConditions, exec.RetTypes(leftExec), @@ -1468,7 +1470,7 @@ func (b *executorBuilder) buildMergeJoin(v *plannercore.PhysicalMergeJoin) exec. Filters: v.RightConditions, } - if v.JoinType == plannercore.RightOuterJoin { + if v.JoinType == logicalop.RightOuterJoin { e.InnerTable = leftTable e.OuterTable = rightTable } else { @@ -1601,7 +1603,7 @@ func (b *executorBuilder) buildHashJoinV2(v *plannercore.PhysicalHashJoin) exec. } colsFromChildren := v.Schema().Columns - if v.JoinType == plannercore.LeftOuterSemiJoin || v.JoinType == plannercore.AntiLeftOuterSemiJoin { + if v.JoinType == logicalop.LeftOuterSemiJoin || v.JoinType == logicalop.AntiLeftOuterSemiJoin { // the matched column is added inside join colsFromChildren = colsFromChildren[:len(colsFromChildren)-1] } @@ -1770,7 +1772,7 @@ func (b *executorBuilder) buildHashJoin(v *plannercore.PhysicalHashJoin) exec.Ex } isNAJoin := len(v.LeftNAJoinKeys) > 0 colsFromChildren := v.Schema().Columns - if v.JoinType == plannercore.LeftOuterSemiJoin || v.JoinType == plannercore.AntiLeftOuterSemiJoin { + if v.JoinType == logicalop.LeftOuterSemiJoin || v.JoinType == logicalop.AntiLeftOuterSemiJoin { colsFromChildren = colsFromChildren[:len(colsFromChildren)-1] } childrenUsedSchema := markChildrenUsedCols(colsFromChildren, v.Children()[0].Schema(), v.Children()[1].Schema()) @@ -2330,7 +2332,7 @@ func (b *executorBuilder) buildMemTable(v *plannercore.PhysicalMemTable) exec.Ex retriever: &hugeMemTableRetriever{ table: v.Table, columns: v.Columns, - extractor: v.Extractor.(*plannercore.ColumnsTableExtractor), + extractor: v.Extractor.(*plannercore.InfoSchemaColumnsExtractor), viewSchemaMap: make(map[int64]*expression.Schema), viewOutputNamesMap: make(map[int64]types.NameSlice), }, @@ -2379,7 +2381,7 @@ func (b *executorBuilder) buildMemTable(v *plannercore.PhysicalMemTable) exec.Ex } } } - tb, _ := b.is.TableByID(v.Table.ID) + tb, _ := b.is.TableByID(context.Background(), v.Table.ID) return &TableScanExec{ BaseExecutor: exec.NewBaseExecutor(b.ctx, v.Schema(), v.ID()), t: tb, @@ -2462,7 +2464,7 @@ func (b *executorBuilder) buildApply(v *plannercore.PhysicalApply) exec.Executor OuterExec: outerExec, OuterFilter: outerFilter, InnerFilter: innerFilter, - Outer: v.JoinType != plannercore.InnerJoin, + Outer: v.JoinType != logicalop.InnerJoin, Joiner: tupleJoiner, OuterSchema: v.OuterSchema, Sctx: b.ctx, @@ -2503,7 +2505,7 @@ func (b *executorBuilder) buildApply(v *plannercore.PhysicalApply) exec.Executor outerExec: outerExec, outerFilter: outerFilter, innerFilter: innerFilters, - outer: v.JoinType != plannercore.InnerJoin, + outer: v.JoinType != logicalop.InnerJoin, joiners: joiners, corCols: corCols, concurrency: v.Concurrency, @@ -2603,7 +2605,7 @@ func (b *executorBuilder) buildUpdate(v *plannercore.Update) exec.Executor { tblID2table := make(map[int64]table.Table, len(v.TblColPosInfos)) multiUpdateOnSameTable := make(map[int64]bool) for _, info := range v.TblColPosInfos { - tbl, _ := b.is.TableByID(info.TblID) + tbl, _ := b.is.TableByID(context.Background(), info.TblID) if _, ok := tblID2table[info.TblID]; ok { multiUpdateOnSameTable[info.TblID] = true } @@ -2649,6 +2651,7 @@ func (b *executorBuilder) buildUpdate(v *plannercore.Update) exec.Executor { tblID2table: tblID2table, tblColPosInfos: v.TblColPosInfos, assignFlag: assignFlag, + IgnoreError: v.IgnoreError, } updateExec.fkChecks, b.err = buildTblID2FKCheckExecs(b.ctx, tblID2table, v.FKChecks) if b.err != nil { @@ -2683,7 +2686,7 @@ func (b *executorBuilder) buildDelete(v *plannercore.Delete) exec.Executor { b.inDeleteStmt = true tblID2table := make(map[int64]table.Table, len(v.TblColPosInfos)) for _, info := range v.TblColPosInfos { - tblID2table[info.TblID], _ = b.is.TableByID(info.TblID) + tblID2table[info.TblID], _ = b.is.TableByID(context.Background(), info.TblID) } if b.err = b.updateForUpdateTS(); b.err != nil { @@ -2878,7 +2881,7 @@ func (b *executorBuilder) buildAnalyzeSamplingPushdown( SampleSize: int64(opts[ast.AnalyzeOptNumSamples]), SampleRate: sampleRate, SketchSize: statistics.MaxSketchSize, - ColumnsInfo: util.ColumnsToProto(task.ColsInfo, task.TblInfo.PKIsHandle, false), + ColumnsInfo: util.ColumnsToProto(task.ColsInfo, task.TblInfo.PKIsHandle, false, false), ColumnGroups: colGroups, } if task.TblInfo != nil { @@ -3008,7 +3011,7 @@ func (b *executorBuilder) buildAnalyzeColumnsPushdown( BucketSize: int64(opts[ast.AnalyzeOptNumBuckets]), SampleSize: MaxRegionSampleSize, SketchSize: statistics.MaxSketchSize, - ColumnsInfo: util.ColumnsToProto(cols, task.HandleCols != nil && task.HandleCols.IsInt(), false), + ColumnsInfo: util.ColumnsToProto(cols, task.HandleCols != nil && task.HandleCols.IsInt(), false, false), CmsketchDepth: &depth, CmsketchWidth: &width, } @@ -3291,7 +3294,7 @@ func (b *executorBuilder) buildIndexLookUpJoin(v *plannercore.PhysicalIndexJoin) Finished: &atomic.Value{}, } colsFromChildren := v.Schema().Columns - if v.JoinType == plannercore.LeftOuterSemiJoin || v.JoinType == plannercore.AntiLeftOuterSemiJoin { + if v.JoinType == logicalop.LeftOuterSemiJoin || v.JoinType == logicalop.AntiLeftOuterSemiJoin { colsFromChildren = colsFromChildren[:len(colsFromChildren)-1] } childrenUsedSchema := markChildrenUsedCols(colsFromChildren, v.Children()[0].Schema(), v.Children()[1].Schema()) @@ -3417,7 +3420,7 @@ func (b *executorBuilder) buildIndexLookUpMergeJoin(v *plannercore.PhysicalIndex LastColHelper: v.CompareFilters, } colsFromChildren := v.Schema().Columns - if v.JoinType == plannercore.LeftOuterSemiJoin || v.JoinType == plannercore.AntiLeftOuterSemiJoin { + if v.JoinType == logicalop.LeftOuterSemiJoin || v.JoinType == logicalop.AntiLeftOuterSemiJoin { colsFromChildren = colsFromChildren[:len(colsFromChildren)-1] } childrenUsedSchema := markChildrenUsedCols(colsFromChildren, v.Children()[0].Schema(), v.Children()[1].Schema()) @@ -3464,7 +3467,7 @@ func buildNoRangeTableReader(b *executorBuilder, v *plannercore.PhysicalTableRea return nil, err } - tbl, _ := b.is.TableByID(ts.Table.ID) + tbl, _ := b.is.TableByID(context.Background(), ts.Table.ID) isPartition, physicalTableID := ts.IsPartition() if isPartition { pt := tbl.(table.PartitionedTable) @@ -3573,7 +3576,7 @@ func (b *executorBuilder) buildMPPGather(v *plannercore.PhysicalTableReader) exe if hasVirtualCol { gather.virtualColumnIndex, gather.virtualColumnRetFieldTypes = buildVirtualColumnInfo(gather.Schema(), gather.columns) } - tbl, _ := b.is.TableByID(ts.Table.ID) + tbl, _ := b.is.TableByID(context.Background(), ts.Table.ID) isPartition, physicalTableID := ts.IsPartition() if isPartition { // Only for static pruning partition table. @@ -3648,7 +3651,7 @@ func (b *executorBuilder) buildTableReader(v *plannercore.PhysicalTableReader) e return ret } - tmp, _ := b.is.TableByID(ts.Table.ID) + tmp, _ := b.is.TableByID(context.Background(), ts.Table.ID) tbl := tmp.(table.PartitionedTable) partitions, err := partitionPruning(b.ctx, tbl, v.PlanPartInfo) if err != nil { @@ -3800,7 +3803,7 @@ func buildNoRangeIndexReader(b *executorBuilder, v *plannercore.PhysicalIndexRea return nil, err } is := v.IndexPlans[0].(*plannercore.PhysicalIndexScan) - tbl, _ := b.is.TableByID(is.Table.ID) + tbl, _ := b.is.TableByID(context.Background(), is.Table.ID) isPartition, physicalTableID := is.IsPartition() if isPartition { pt := tbl.(table.PartitionedTable) @@ -3890,7 +3893,7 @@ func (b *executorBuilder) buildIndexReader(v *plannercore.PhysicalIndexReader) e return ret } - tmp, _ := b.is.TableByID(is.Table.ID) + tmp, _ := b.is.TableByID(context.Background(), is.Table.ID) tbl := tmp.(table.PartitionedTable) partitions, err := partitionPruning(b.ctx, tbl, v.PlanPartInfo) if err != nil { @@ -3910,7 +3913,7 @@ func buildTableReq(b *executorBuilder, schemaLen int, plans []base.PhysicalPlan) tableReq.OutputOffsets = append(tableReq.OutputOffsets, uint32(i)) } ts := plans[0].(*plannercore.PhysicalTableScan) - tbl, _ := b.is.TableByID(ts.Table.ID) + tbl, _ := b.is.TableByID(context.Background(), ts.Table.ID) isPartition, physicalTableID := ts.IsPartition() if isPartition { pt := tbl.(table.PartitionedTable) @@ -4081,7 +4084,7 @@ func (b *executorBuilder) buildIndexLookUpReader(v *plannercore.PhysicalIndexLoo return ret } - tmp, _ := b.is.TableByID(is.Table.ID) + tmp, _ := b.is.TableByID(context.Background(), is.Table.ID) tbl := tmp.(table.PartitionedTable) partitions, err := partitionPruning(b.ctx, tbl, v.PlanPartInfo) if err != nil { @@ -4237,7 +4240,7 @@ func (b *executorBuilder) buildIndexMergeReader(v *plannercore.PhysicalIndexMerg return ret } - tmp, _ := b.is.TableByID(ts.Table.ID) + tmp, _ := b.is.TableByID(context.Background(), ts.Table.ID) partitions, err := partitionPruning(b.ctx, tmp.(table.PartitionedTable), v.PlanPartInfo) if err != nil { b.err = err @@ -4383,7 +4386,7 @@ func (builder *dataReaderBuilder) buildTableReaderForIndexJoin(ctx context.Conte handles, _ := dedupHandles(lookUpContents) return builder.buildTableReaderFromHandles(ctx, e, handles, canReorderHandles) } - tbl, _ := builder.is.TableByID(tbInfo.ID) + tbl, _ := builder.is.TableByID(ctx, tbInfo.ID) pt := tbl.(table.PartitionedTable) usedPartitionList, err := builder.partitionPruning(pt, v.PlanPartInfo) if err != nil { @@ -4655,7 +4658,7 @@ func (builder *dataReaderBuilder) buildIndexReaderForIndexJoin(ctx context.Conte return e, nil } - tbl, _ := builder.executorBuilder.is.TableByID(tbInfo.ID) + tbl, _ := builder.executorBuilder.is.TableByID(ctx, tbInfo.ID) usedPartition, canPrune, contentPos, err := builder.prunePartitionForInnerExecutor(tbl, v.PlanPartInfo, lookUpContents) if err != nil { return nil, err @@ -4718,7 +4721,7 @@ func (builder *dataReaderBuilder) buildIndexLookUpReaderForIndexJoin(ctx context return e, err } - tbl, _ := builder.executorBuilder.is.TableByID(tbInfo.ID) + tbl, _ := builder.executorBuilder.is.TableByID(ctx, tbInfo.ID) usedPartition, canPrune, contentPos, err := builder.prunePartitionForInnerExecutor(tbl, v.PlanPartInfo, lookUpContents) if err != nil { return nil, err @@ -4956,16 +4959,21 @@ func (b *executorBuilder) buildWindow(v *plannercore.PhysicalWindow) exec.Execut BaseExecutor: base, groupChecker: vecgroupchecker.NewVecGroupChecker(b.ctx.GetExprCtx().GetEvalCtx(), b.ctx.GetSessionVars().EnableVectorizedExpression, groupByItems), numWindowFuncs: len(v.WindowFuncDescs), + windowFuncs: windowFuncs, + partialResults: partialResults, + } + exec.slidingWindowFuncs = make([]aggfuncs.SlidingWindowAggFunc, len(exec.windowFuncs)) + for i, windowFunc := range exec.windowFuncs { + if slidingWindowAggFunc, ok := windowFunc.(aggfuncs.SlidingWindowAggFunc); ok { + exec.slidingWindowFuncs[i] = slidingWindowAggFunc + } } - - exec.windowFuncs = windowFuncs - exec.partialResults = partialResults if v.Frame == nil { - exec.start = &plannercore.FrameBound{ + exec.start = &logicalop.FrameBound{ Type: ast.Preceding, UnBounded: true, } - exec.end = &plannercore.FrameBound{ + exec.end = &logicalop.FrameBound{ Type: ast.Following, UnBounded: true, } @@ -5121,18 +5129,9 @@ func (b *executorBuilder) buildSQLBindExec(v *plannercore.SQLBindPlan) exec.Exec e := &SQLBindExec{ BaseExecutor: base, - sqlBindOp: v.SQLBindOp, - normdOrigSQL: v.NormdOrigSQL, - bindSQL: v.BindSQL, - charset: v.Charset, - collation: v.Collation, - db: v.Db, isGlobal: v.IsGlobal, - bindAst: v.BindStmt, - newStatus: v.NewStatus, - source: v.Source, - sqlDigest: v.SQLDigest, - planDigest: v.PlanDigest, + sqlBindOp: v.SQLBindOp, + details: v.Details, } return e } @@ -5590,7 +5589,7 @@ func (b *executorBuilder) validCanReadTemporaryTable(tbl *model.TableInfo) error } func (b *executorBuilder) getCacheTable(tblInfo *model.TableInfo, startTS uint64) kv.MemBuffer { - tbl, ok := b.is.TableByID(tblInfo.ID) + tbl, ok := b.is.TableByID(context.Background(), tblInfo.ID) if !ok { b.err = errors.Trace(infoschema.ErrTableNotExists.GenWithStackByArgs(b.ctx.GetSessionVars().CurrentDB, tblInfo.Name)) return nil diff --git a/pkg/executor/coprocessor.go b/pkg/executor/coprocessor.go index 8487e547affb6..218d16627bd0f 100644 --- a/pkg/executor/coprocessor.go +++ b/pkg/executor/coprocessor.go @@ -256,7 +256,7 @@ func (h *CoprocessorDAGHandler) buildStreamResponse(chunk *tipb.Chunk) *coproces func (*CoprocessorDAGHandler) buildErrorResponse(err error) *coprocessor.Response { return &coprocessor.Response{ - OtherError: err.Error(), + OtherError: errors.ErrorStack(err), } } diff --git a/pkg/executor/ddl.go b/pkg/executor/ddl.go index 70cbfd5472e04..bf935d2f77bb6 100644 --- a/pkg/executor/ddl.go +++ b/pkg/executor/ddl.go @@ -408,7 +408,7 @@ func (e *DDLExec) executeRecoverTable(s *ast.RecoverTableStmt) error { return err } // Check the table ID was not exists. - tbl, ok := dom.InfoSchema().TableByID(tblInfo.ID) + tbl, ok := dom.InfoSchema().TableByID(context.Background(), tblInfo.ID) if ok { return infoschema.ErrTableExists.GenWithStack("Table '%-.192s' already been recover to '%-.192s', can't be recover repeatedly", s.Table.Name.O, tbl.Meta().Name.O) } @@ -463,14 +463,16 @@ func (e *DDLExec) getRecoverTableByJobID(s *ast.RecoverTableStmt, dom *domain.Do return nil, nil, err } // Get table meta from snapshot infoSchema. - table, ok := snapInfo.TableByID(job.TableID) + table, ok := snapInfo.TableByID(ctx, job.TableID) if !ok { return nil, nil, infoschema.ErrTableNotExists.GenWithStackByArgs( fmt.Sprintf("(Schema ID %d)", job.SchemaID), fmt.Sprintf("(Table ID %d)", job.TableID), ) } - return job, table.Meta(), nil + // Return the cloned meta here, since meta will be modified later. + // This may corrupt the infocache. + return job, table.Meta().Clone(), nil } // GetDropOrTruncateTableInfoFromJobs gets the dropped/truncated table information from DDL jobs, @@ -563,7 +565,7 @@ func (e *DDLExec) executeFlashbackTable(s *ast.FlashBackTableStmt) error { } // Check the table ID was not exists. is := domain.GetDomain(e.Ctx()).InfoSchema() - tbl, ok := is.TableByID(tblInfo.ID) + tbl, ok := is.TableByID(context.Background(), tblInfo.ID) if ok { return infoschema.ErrTableExists.GenWithStack("Table '%-.192s' already been flashback to '%-.192s', can't be flashback repeatedly", s.Table.Name.O, tbl.Meta().Name.O) } diff --git a/pkg/executor/delete.go b/pkg/executor/delete.go index 40b441c624dfc..ede6be8faa853 100644 --- a/pkg/executor/delete.go +++ b/pkg/executor/delete.go @@ -251,7 +251,12 @@ func (e *DeleteExec) removeRowsInTblRowMap(tblRowMap tableRowMapType) error { } func (e *DeleteExec) removeRow(ctx sessionctx.Context, t table.Table, h kv.Handle, data []types.Datum) error { - err := t.RemoveRecord(ctx.GetTableCtx(), h, data) + txn, err := e.Ctx().Txn(true) + if err != nil { + return err + } + + err = t.RemoveRecord(ctx.GetTableCtx(), txn, h, data) if err != nil { return err } diff --git a/pkg/executor/detach.go b/pkg/executor/detach.go index 8baf207bf1f6c..727503c60e24a 100644 --- a/pkg/executor/detach.go +++ b/pkg/executor/detach.go @@ -16,6 +16,7 @@ package executor import ( "github.com/pingcap/tidb/pkg/executor/internal/exec" + "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/expression/contextsession" ) @@ -86,6 +87,24 @@ func (iluCtx indexLookUpExecutorContext) Detach() indexLookUpExecutorContext { return iluCtx } +func (pCtx projectionExecutorContext) Detach() projectionExecutorContext { + newCtx := pCtx + if ctx, ok := pCtx.evalCtx.(*contextsession.SessionEvalContext); ok { + newCtx.evalCtx = ctx.IntoStatic() + } + + return newCtx +} + +func (sCtx selectionExecutorContext) Detach() selectionExecutorContext { + newCtx := sCtx + if ctx, ok := sCtx.evalCtx.(*contextsession.SessionEvalContext); ok { + newCtx.evalCtx = ctx.IntoStatic() + } + + return newCtx +} + // Detach detaches the current executor from the session context. func (e *TableReaderExecutor) Detach() (exec.Executor, bool) { newExec := new(TableReaderExecutor) @@ -115,3 +134,39 @@ func (e *IndexLookUpExecutor) Detach() (exec.Executor, bool) { return newExec, true } + +// Detach detaches the current executor from the session context. +func (e *ProjectionExec) Detach() (exec.Executor, bool) { + // check whether the `Projection` requires any optional property + // Now, no optional property is copied, so if it requires any optional property, it should return false. + // TODO: some optional property can be detached. If they are implemented in the future, this check needs to be changed. + if !e.evaluatorSuit.RequiredOptionalEvalProps().IsEmpty() { + return nil, false + } + + newExec := new(ProjectionExec) + *newExec = *e + + newExec.projectionExecutorContext = newExec.projectionExecutorContext.Detach() + + return newExec, true +} + +// Detach detaches the current executor from the session context. +func (e *SelectionExec) Detach() (exec.Executor, bool) { + // check whether the `Selection` requires any optional property + // Now, no optional property is copied, so if it requires any optional property, it should return false. + // TODO: some optional property can be detached. If they are implemented in the future, this check needs to be changed. + for _, expr := range e.filters { + if !expression.GetOptionalEvalPropsForExpr(expr).IsEmpty() { + return nil, false + } + } + + newExec := new(SelectionExec) + *newExec = *e + + newExec.selectionExecutorContext = newExec.selectionExecutorContext.Detach() + + return newExec, true +} diff --git a/pkg/executor/detach_integration_test.go b/pkg/executor/detach_integration_test.go index 7a8de51af47db..c4dd85f7ee790 100644 --- a/pkg/executor/detach_integration_test.go +++ b/pkg/executor/detach_integration_test.go @@ -231,3 +231,116 @@ func TestDetachIndexReaderAndIndexLookUp(t *testing.T) { } } } + +func TestDetachSelection(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + + tk.MustExec("use test") + tk.Session().GetSessionVars().SetStatusFlag(mysql.ServerStatusCursorExists, true) + tk.MustExec("create table t (a int, b int, c int, key idx_a_b (a,b), key idx_b (b))") + for i := 0; i < 10000; i++ { + tk.MustExec("insert into t values (?, ?, ?)", i, i, i) + } + + tk.MustHavePlan("select a, b from t where c > 100 and c < 200", "Selection") + rs, err := tk.Exec("select a, b from t where c > ? and c < ?", 100, 200) + require.NoError(t, err) + drs, ok, err := rs.(sqlexec.DetachableRecordSet).TryDetach() + require.NoError(t, err) + require.True(t, ok) + + chk := drs.NewChunk(nil) + expectedSelect := 101 + for { + err = drs.Next(context.Background(), chk) + require.NoError(t, err) + + if chk.NumRows() == 0 { + break + } + for i := 0; i < chk.NumRows(); i++ { + require.Equal(t, int64(expectedSelect), chk.GetRow(i).GetInt64(0)) + require.Equal(t, int64(expectedSelect), chk.GetRow(i).GetInt64(1)) + expectedSelect++ + } + } + + // Selection with optional property is not allowed + tk.MustExec("set @a = 1") + tk.MustHavePlan("select a from t where a + @a > 100 and a < 200", "Selection") + rs, err = tk.Exec("select a from t where a + @a > ? and a < ?", 100, 200) + require.NoError(t, err) + drs, ok, _ = rs.(sqlexec.DetachableRecordSet).TryDetach() + require.False(t, ok) + require.Nil(t, drs) + require.NoError(t, rs.Close()) +} + +func TestDetachProjection(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + + tk.MustExec("use test") + tk.Session().GetSessionVars().SetStatusFlag(mysql.ServerStatusCursorExists, true) + tk.MustExec("create table t (a int, b int, c int, key idx_a_b (a,b), key idx_b (b))") + for i := 0; i < 10000; i++ { + tk.MustExec("insert into t values (?, ?, ?)", i, i, i) + } + + tk.MustHavePlan("select a + b from t where a > 100 and a < 200", "Projection") + rs, err := tk.Exec("select a + b from t where a > ? and a < ?", 100, 200) + require.NoError(t, err) + drs, ok, err := rs.(sqlexec.DetachableRecordSet).TryDetach() + require.NoError(t, err) + require.True(t, ok) + + chk := drs.NewChunk(nil) + expectedSelect := 101 + for { + err = drs.Next(context.Background(), chk) + require.NoError(t, err) + + if chk.NumRows() == 0 { + break + } + for i := 0; i < chk.NumRows(); i++ { + require.Equal(t, int64(2*expectedSelect), chk.GetRow(i).GetInt64(0)) + expectedSelect++ + } + } + + // Projection with optional property is not allowed + tk.MustExec("set @a = 1") + tk.MustHavePlan("select a + @a from t where a > 100 and a < 200", "Projection") + rs, err = tk.Exec("select a + @a from t where a > ? and a < ?", 100, 200) + require.NoError(t, err) + drs, ok, _ = rs.(sqlexec.DetachableRecordSet).TryDetach() + require.False(t, ok) + require.Nil(t, drs) + require.NoError(t, rs.Close()) + + // Projection with Selection is also allowed + tk.MustHavePlan("select a + b from t where c > 100 and c < 200", "Projection") + tk.MustHavePlan("select a + b from t where c > 100 and c < 200", "Selection") + rs, err = tk.Exec("select a + b from t where c > ? and c < ?", 100, 200) + require.NoError(t, err) + drs, ok, err = rs.(sqlexec.DetachableRecordSet).TryDetach() + require.NoError(t, err) + require.True(t, ok) + + chk = drs.NewChunk(nil) + expectedSelect = 101 + for { + err = drs.Next(context.Background(), chk) + require.NoError(t, err) + + if chk.NumRows() == 0 { + break + } + for i := 0; i < chk.NumRows(); i++ { + require.Equal(t, int64(2*expectedSelect), chk.GetRow(i).GetInt64(0)) + expectedSelect++ + } + } +} diff --git a/pkg/executor/executor.go b/pkg/executor/executor.go index 104c06e6982f1..fad66b9050f9a 100644 --- a/pkg/executor/executor.go +++ b/pkg/executor/executor.go @@ -55,6 +55,7 @@ import ( planctx "github.com/pingcap/tidb/pkg/planner/context" plannercore "github.com/pingcap/tidb/pkg/planner/core" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" plannerutil "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/planner/util/fixcontrol" "github.com/pingcap/tidb/pkg/privilege" @@ -824,7 +825,7 @@ func getSchemaName(is infoschema.InfoSchema, id int64) string { func getTableName(is infoschema.InfoSchema, id int64) string { var tableName string - table, ok := is.TableByID(id) + table, ok := is.TableByID(context.Background(), id) if ok { tableName = table.Meta().Name.O return tableName @@ -1150,8 +1151,8 @@ func (e *SelectLockExec) Next(ctx context.Context, req *chunk.Chunk) error { if err != nil { return err } - // If there's no handle or it's not a `SELECT FOR UPDATE` statement. - if len(e.tblID2Handle) == 0 || (!plannercore.IsSelectForUpdateLockType(e.Lock.LockType)) { + // If there's no handle or it's not a `SELECT FOR UPDATE` or `SELECT FOR SHARE` statement. + if len(e.tblID2Handle) == 0 || (!logicalop.IsSupportedSelectLockType(e.Lock.LockType)) { return nil } @@ -1184,7 +1185,7 @@ func (e *SelectLockExec) Next(ctx context.Context, req *chunk.Chunk) error { return nil } lockWaitTime := e.Ctx().GetSessionVars().LockWaitTimeout - if e.Lock.LockType == ast.SelectLockForUpdateNoWait { + if e.Lock.LockType == ast.SelectLockForUpdateNoWait || e.Lock.LockType == ast.SelectLockForShareNoWait { lockWaitTime = tikvstore.LockNoWait } else if e.Lock.LockType == ast.SelectLockForUpdateWaitN { lockWaitTime = int64(e.Lock.WaitSec) * 1000 diff --git a/pkg/executor/executor_required_rows_test.go b/pkg/executor/executor_required_rows_test.go index 734f67859636e..a81dda7e1512a 100644 --- a/pkg/executor/executor_required_rows_test.go +++ b/pkg/executor/executor_required_rows_test.go @@ -31,6 +31,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/mysql" plannercore "github.com/pingcap/tidb/pkg/planner/core" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/sessionctx/variable" @@ -697,8 +698,8 @@ func TestMergeJoinRequiredRows(t *testing.T) { panic("not support") } } - joinTypes := []plannercore.JoinType{plannercore.RightOuterJoin, plannercore.LeftOuterJoin, - plannercore.LeftOuterSemiJoin, plannercore.AntiLeftOuterSemiJoin} + joinTypes := []logicalop.JoinType{logicalop.RightOuterJoin, logicalop.LeftOuterJoin, + logicalop.LeftOuterSemiJoin, logicalop.AntiLeftOuterSemiJoin} for _, joinType := range joinTypes { ctx := defaultCtx() required := make([]int, 100) @@ -720,8 +721,8 @@ func TestMergeJoinRequiredRows(t *testing.T) { } } -func buildMergeJoinExec(ctx sessionctx.Context, joinType plannercore.JoinType, innerSrc, outerSrc exec.Executor) exec.Executor { - if joinType == plannercore.RightOuterJoin { +func buildMergeJoinExec(ctx sessionctx.Context, joinType logicalop.JoinType, innerSrc, outerSrc exec.Executor) exec.Executor { + if joinType == logicalop.RightOuterJoin { innerSrc, outerSrc = outerSrc, innerSrc } diff --git a/pkg/executor/historical_stats_test.go b/pkg/executor/historical_stats_test.go index e5b659f2672f2..c448eb628c10f 100644 --- a/pkg/executor/historical_stats_test.go +++ b/pkg/executor/historical_stats_test.go @@ -75,6 +75,7 @@ func TestRecordHistoryStatsAfterAnalyze(t *testing.T) { // 3. dump current stats json dumpJSONTable, err := h.DumpStatsToJSON("test", tableInfo.Meta(), nil, true) require.NoError(t, err) + dumpJSONTable.Sort() jsOrigin, _ := json.Marshal(dumpJSONTable) // 4. get the historical stats json @@ -89,6 +90,7 @@ func TestRecordHistoryStatsAfterAnalyze(t *testing.T) { } jsonTbl, err := storage.BlocksToJSONTable(data) require.NoError(t, err) + jsonTbl.Sort() jsCur, err := json.Marshal(jsonTbl) require.NoError(t, err) // 5. historical stats must be equal to the current stats diff --git a/pkg/executor/import_into.go b/pkg/executor/import_into.go index 7d9a4f92efd95..c41d708d705cb 100644 --- a/pkg/executor/import_into.go +++ b/pkg/executor/import_into.go @@ -151,7 +151,7 @@ func (e *ImportIntoExec) fillJobInfo(ctx context.Context, jobID int64, req *chun }); err != nil { return err } - fillOneImportJobInfo(info, req, unknownImportedRowCount) + FillOneImportJobInfo(info, req, unknownImportedRowCount) return nil } diff --git a/pkg/executor/importer/BUILD.bazel b/pkg/executor/importer/BUILD.bazel index 4ae10013e1088..bfec2f2411196 100644 --- a/pkg/executor/importer/BUILD.bazel +++ b/pkg/executor/importer/BUILD.bazel @@ -44,6 +44,7 @@ go_library( "//pkg/parser/model", "//pkg/parser/mysql", "//pkg/parser/terror", + "//pkg/planner/context", "//pkg/planner/core", "//pkg/planner/util", "//pkg/sessionctx", diff --git a/pkg/executor/importer/import.go b/pkg/executor/importer/import.go index e95eb79faf97d..be3dfb5f434e6 100644 --- a/pkg/executor/importer/import.go +++ b/pkg/executor/importer/import.go @@ -45,6 +45,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/parser/terror" + planctx "github.com/pingcap/tidb/pkg/planner/context" plannercore "github.com/pingcap/tidb/pkg/planner/core" plannerutil "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/sessionctx" @@ -1291,17 +1292,17 @@ func (p *Plan) IsGlobalSort() bool { // CreateColAssignExprs creates the column assignment expressions using session context. // RewriteAstExpr will write ast node in place(due to xxNode.Accept), but it doesn't change node content, // so we sync it. -func (e *LoadDataController) CreateColAssignExprs(sctx sessionctx.Context) ([]expression.Expression, []contextutil.SQLWarn, error) { +func (e *LoadDataController) CreateColAssignExprs(planCtx planctx.PlanContext) ([]expression.Expression, []contextutil.SQLWarn, error) { e.colAssignMu.Lock() defer e.colAssignMu.Unlock() res := make([]expression.Expression, 0, len(e.ColumnAssignments)) allWarnings := []contextutil.SQLWarn{} for _, assign := range e.ColumnAssignments { - newExpr, err := plannerutil.RewriteAstExprWithPlanCtx(sctx.GetPlanCtx(), assign.Expr, nil, nil, false) + newExpr, err := plannerutil.RewriteAstExprWithPlanCtx(planCtx, assign.Expr, nil, nil, false) // col assign expr warnings is static, we should generate it for each row processed. // so we save it and clear it here. - allWarnings = append(allWarnings, sctx.GetSessionVars().StmtCtx.GetWarnings()...) - sctx.GetSessionVars().StmtCtx.SetWarnings(nil) + allWarnings = append(allWarnings, planCtx.GetSessionVars().StmtCtx.GetWarnings()...) + planCtx.GetSessionVars().StmtCtx.SetWarnings(nil) if err != nil { return nil, nil, err } diff --git a/pkg/executor/importer/kv_encode.go b/pkg/executor/importer/kv_encode.go index a7ea8d89b59e0..6a6d66af42671 100644 --- a/pkg/executor/importer/kv_encode.go +++ b/pkg/executor/importer/kv_encode.go @@ -27,7 +27,6 @@ import ( "github.com/pingcap/tidb/pkg/meta/autoid" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/mysql" //nolint: goimports - "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/table" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/chunk" @@ -64,8 +63,8 @@ func NewTableKVEncoder( return nil, err } // we need a non-nil TxnCtx to avoid panic when evaluating set clause - baseKVEncoder.SessionCtx.Vars.TxnCtx = new(variable.TransactionContext) - colAssignExprs, _, err := ti.CreateColAssignExprs(baseKVEncoder.SessionCtx) + baseKVEncoder.SessionCtx.SetTxnCtxNotNil() + colAssignExprs, _, err := ti.CreateColAssignExprs(baseKVEncoder.SessionCtx.GetPlanCtx()) if err != nil { return nil, err } @@ -95,24 +94,20 @@ func (en *tableKVEncoder) Encode(row []types.Datum, rowID int64) (*kv.Pairs, err } func (en *tableKVEncoder) GetColumnSize() map[int64]int64 { - sessionVars := en.SessionCtx.GetSessionVars() - sessionVars.TxnCtxMu.Lock() - defer sessionVars.TxnCtxMu.Unlock() - return sessionVars.TxnCtx.TableDeltaMap[en.TableMeta().ID].ColSize + return en.SessionCtx.GetColumnSize(en.TableMeta().ID) } // todo merge with code in load_data.go func (en *tableKVEncoder) parserData2TableData(parserData []types.Datum, rowID int64) ([]types.Datum, error) { row := make([]types.Datum, 0, len(en.insertColumns)) - sessionVars := en.SessionCtx.GetSessionVars() setVar := func(name string, col *types.Datum) { // User variable names are not case-sensitive // https://dev.mysql.com/doc/refman/8.0/en/user-variables.html name = strings.ToLower(name) if col == nil || col.IsNull() { - sessionVars.UnsetUserVar(name) + en.SessionCtx.UnsetUserVar(name) } else { - sessionVars.SetUserVarVal(name, *col) + en.SessionCtx.SetUserVarVal(name, *col) } } @@ -166,7 +161,7 @@ func (en *tableKVEncoder) getRow(vals []types.Datum, rowID int64) ([]types.Datum row := make([]types.Datum, len(en.Columns)) hasValue := make([]bool, len(en.Columns)) for i := 0; i < len(en.insertColumns); i++ { - casted, err := table.CastValue(en.SessionCtx, vals[i], en.insertColumns[i].ToInfo(), false, false) + casted, err := table.CastColumnValue(en.SessionCtx.GetExprCtx(), vals[i], en.insertColumns[i].ToInfo(), false, false) if err != nil { return nil, err } diff --git a/pkg/executor/infoschema_cluster_table_test.go b/pkg/executor/infoschema_cluster_table_test.go index 89cbfc62aecb4..cb63dfed7d6a6 100644 --- a/pkg/executor/infoschema_cluster_table_test.go +++ b/pkg/executor/infoschema_cluster_table_test.go @@ -348,7 +348,7 @@ func TestTikvRegionStatus(t *testing.T) { "1 test test_t2 1 p_a 1 p1", )) - tk.MustExec("alter table test_t2 add unique p_b (b);") + tk.MustExec("alter table test_t2 add unique p_b (b) global") tk.MustQuery("select REGION_ID, DB_NAME, TABLE_NAME, IS_INDEX, INDEX_NAME, IS_PARTITION, PARTITION_NAME from information_schema.TIKV_REGION_STATUS where DB_NAME = 'test' and TABLE_NAME = 'test_t2' order by IS_INDEX, IS_PARTITION desc, PARTITION_NAME").Check(testkit.Rows( "1 test test_t2 0 1 p0", "1 test test_t2 0 1 p1", diff --git a/pkg/executor/infoschema_reader.go b/pkg/executor/infoschema_reader.go index 0356f6e5e7cd1..2e29e9aba12d0 100644 --- a/pkg/executor/infoschema_reader.go +++ b/pkg/executor/infoschema_reader.go @@ -47,7 +47,6 @@ import ( "github.com/pingcap/tidb/pkg/parser/charset" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/mysql" - "github.com/pingcap/tidb/pkg/parser/terror" plannercore "github.com/pingcap/tidb/pkg/planner/core" "github.com/pingcap/tidb/pkg/planner/core/base" "github.com/pingcap/tidb/pkg/privilege" @@ -87,6 +86,8 @@ import ( "go.uber.org/zap" ) +var lowerPrimaryKeyName = strings.ToLower(mysql.PrimaryKeyName) + type memtableRetriever struct { dummyCloser table *model.TableInfo @@ -113,32 +114,37 @@ func (e *memtableRetriever) retrieve(ctx context.Context, sctx sessionctx.Contex if !e.initialized { is := sctx.GetInfoSchema().(infoschema.InfoSchema) e.is = is - dbs := is.AllSchemaNames() - slices.SortFunc(dbs, func(a, b model.CIStr) int { - return strings.Compare(a.L, b.L) - }) + + var getAllSchemas = func() []model.CIStr { + dbs := is.AllSchemaNames() + slices.SortFunc(dbs, func(a, b model.CIStr) int { + return strings.Compare(a.L, b.L) + }) + return dbs + } + var err error switch e.table.Name.O { case infoschema.TableSchemata: - e.setDataFromSchemata(sctx, dbs) + err = e.setDataFromSchemata(sctx) case infoschema.TableStatistics: - err = e.setDataForStatistics(ctx, sctx, dbs) + err = e.setDataForStatistics(ctx, sctx) case infoschema.TableTables: - err = e.setDataFromTables(ctx, sctx, dbs) + err = e.setDataFromTables(ctx, sctx) case infoschema.TableReferConst: - err = e.setDataFromReferConst(ctx, sctx, dbs) + err = e.setDataFromReferConst(ctx, sctx) case infoschema.TableSequences: - err = e.setDataFromSequences(ctx, sctx, dbs) + err = e.setDataFromSequences(ctx, sctx) case infoschema.TablePartitions: - err = e.setDataFromPartitions(ctx, sctx, dbs) + err = e.setDataFromPartitions(ctx, sctx) case infoschema.TableClusterInfo: err = e.dataForTiDBClusterInfo(sctx) case infoschema.TableAnalyzeStatus: err = e.setDataForAnalyzeStatus(ctx, sctx) case infoschema.TableTiDBIndexes: - err = e.setDataFromIndexes(ctx, sctx, dbs) + err = e.setDataFromIndexes(ctx, sctx) case infoschema.TableViews: - err = e.setDataFromViews(ctx, sctx, dbs) + err = e.setDataFromViews(ctx, sctx) case infoschema.TableEngines: e.setDataFromEngines() case infoschema.TableCharacterSets: @@ -146,7 +152,7 @@ func (e *memtableRetriever) retrieve(ctx context.Context, sctx sessionctx.Contex case infoschema.TableCollations: e.setDataFromCollations() case infoschema.TableKeyColumn: - err = e.setDataFromKeyColumnUsage(ctx, sctx, dbs) + err = e.setDataFromKeyColumnUsage(ctx, sctx) case infoschema.TableMetricTables: e.setDataForMetricTables() case infoschema.TableProfiling: @@ -164,12 +170,13 @@ func (e *memtableRetriever) retrieve(ctx context.Context, sctx sessionctx.Contex case infoschema.TableTiDBHotRegions: err = e.setDataForTiDBHotRegions(ctx, sctx) case infoschema.TableConstraints: - err = e.setDataFromTableConstraints(ctx, sctx, dbs) + err = e.setDataFromTableConstraints(ctx, sctx) case infoschema.TableSessionVar: e.rows, err = infoschema.GetDataFromSessionVariables(ctx, sctx) case infoschema.TableTiDBServersInfo: err = e.setDataForServersInfo(sctx) case infoschema.TableTiFlashReplica: + dbs := getAllSchemas() err = e.dataForTableTiFlashReplica(ctx, sctx, dbs) case infoschema.TableTiKVStoreStatus: err = e.dataForTiKVStoreStatus(ctx, sctx) @@ -202,15 +209,15 @@ func (e *memtableRetriever) retrieve(ctx context.Context, sctx sessionctx.Contex case infoschema.TableRunawayWatches: err = e.setDataFromRunawayWatches(sctx) case infoschema.TableCheckConstraints: - err = e.setDataFromCheckConstraints(ctx, sctx, dbs) + err = e.setDataFromCheckConstraints(ctx, sctx) case infoschema.TableTiDBCheckConstraints: - err = e.setDataFromTiDBCheckConstraints(ctx, sctx, dbs) + err = e.setDataFromTiDBCheckConstraints(ctx, sctx) case infoschema.TableKeywords: err = e.setDataFromKeywords() case infoschema.TableTiDBIndexUsage: - err = e.setDataFromIndexUsage(ctx, sctx, dbs) + err = e.setDataFromIndexUsage(ctx, sctx) case infoschema.ClusterTableTiDBIndexUsage: - err = e.setDataForClusterIndexUsage(ctx, sctx, dbs) + err = e.setDataFromClusterIndexUsage(ctx, sctx) } if err != nil { return nil, err @@ -236,13 +243,16 @@ func (e *memtableRetriever) retrieve(ctx context.Context, sctx sessionctx.Contex return adjustColumns(ret, e.columns, e.table), nil } -func getAutoIncrementID(ctx context.Context, sctx sessionctx.Context, schema model.CIStr, tblInfo *model.TableInfo) (int64, error) { - is := sctx.GetInfoSchema().(infoschema.InfoSchema) - tbl, err := is.TableByName(ctx, schema, tblInfo.Name) - if err != nil { - return 0, err +func getAutoIncrementID( + is infoschema.InfoSchema, + sctx sessionctx.Context, + tblInfo *model.TableInfo, +) int64 { + tbl, ok := is.TableByID(context.Background(), tblInfo.ID) + if !ok { + return 0 } - return tbl.Allocators(sctx.GetTableCtx()).Get(autoid.AutoIncrementType).Base() + 1, nil + return tbl.Allocators(sctx.GetTableCtx()).Get(autoid.AutoIncrementType).Base() + 1 } func hasPriv(ctx sessionctx.Context, priv mysql.PrivilegeType) bool { @@ -336,18 +346,19 @@ func (e *memtableRetriever) setDataForUserAttributes(ctx context.Context, sctx s return nil } -func (e *memtableRetriever) setDataFromSchemata(ctx sessionctx.Context, schemas []model.CIStr) { +func (e *memtableRetriever) setDataFromSchemata(ctx sessionctx.Context) error { checker := privilege.GetPrivilegeManager(ctx) - extractor, ok := e.extractor.(*plannercore.InfoSchemaTablesExtractor) - if ok && extractor.SkipRequest { - return + ex, ok := e.extractor.(*plannercore.InfoSchemaSchemataExtractor) + if !ok { + return errors.Errorf("wrong extractor type: %T, expected InfoSchemaSchemataExtractor", e.extractor) + } + if ex.SkipRequest { + return nil } + schemas := ex.ListSchemas(e.is) rows := make([][]types.Datum, 0, len(schemas)) for _, schemaName := range schemas { - if ok && extractor.Filter("schema_name", schemaName.L) { - continue - } schema, _ := e.is.SchemaByName(schemaName) charset := mysql.DefaultCharset collation := mysql.DefaultCollationName @@ -378,36 +389,33 @@ func (e *memtableRetriever) setDataFromSchemata(ctx sessionctx.Context, schemas rows = append(rows, record) } e.rows = rows + return nil } -func (e *memtableRetriever) setDataForStatistics(ctx context.Context, sctx sessionctx.Context, schemas []model.CIStr) error { +func (e *memtableRetriever) setDataForStatistics(ctx context.Context, sctx sessionctx.Context) error { checker := privilege.GetPrivilegeManager(sctx) - extractor, ok := e.extractor.(*plannercore.InfoSchemaTablesExtractor) - if ok && extractor.SkipRequest { + ex, ok := e.extractor.(*plannercore.InfoSchemaStatisticsExtractor) + if !ok { + return errors.Errorf("wrong extractor type: %T, expected InfoSchemaStatisticsExtractor", e.extractor) + } + if ex.SkipRequest { return nil } - for _, schema := range schemas { - if ok && extractor.Filter("table_schema", schema.L) { + schemas, tables, err := ex.ListSchemasAndTables(ctx, e.is) + if err != nil { + return errors.Trace(err) + } + for i, table := range tables { + schema := schemas[i] + if checker != nil && !checker.RequestVerification(sctx.GetSessionVars().ActiveRoles, schema.L, table.Name.L, "", mysql.AllPrivMask) { continue } - tables, err := e.is.SchemaTableInfos(ctx, schema) - if err != nil { - return errors.Trace(err) - } - for _, table := range tables { - if ok && extractor.Filter("table_name", table.Name.L) { - continue - } - if checker != nil && !checker.RequestVerification(sctx.GetSessionVars().ActiveRoles, schema.L, table.Name.L, "", mysql.AllPrivMask) { - continue - } - e.setDataForStatisticsInTable(schema, table, extractor) - } + e.setDataForStatisticsInTable(schema, table, ex) } return nil } -func (e *memtableRetriever) setDataForStatisticsInTable(schema model.CIStr, table *model.TableInfo, extractor *plannercore.InfoSchemaTablesExtractor) { +func (e *memtableRetriever) setDataForStatisticsInTable(schema model.CIStr, table *model.TableInfo, extractor *plannercore.InfoSchemaStatisticsExtractor) { var rows [][]types.Datum if table.PKIsHandle { if !extractor.Filter("index_name", "primary") { @@ -497,57 +505,53 @@ func (e *memtableRetriever) setDataForStatisticsInTable(schema model.CIStr, tabl e.rows = append(e.rows, rows...) } -func (e *memtableRetriever) setDataFromReferConst(ctx context.Context, sctx sessionctx.Context, schemas []model.CIStr) error { +func (e *memtableRetriever) setDataFromReferConst(ctx context.Context, sctx sessionctx.Context) error { checker := privilege.GetPrivilegeManager(sctx) var rows [][]types.Datum - extractor, ok := e.extractor.(*plannercore.InfoSchemaTablesExtractor) - if ok && extractor.SkipRequest { + ex, ok := e.extractor.(*plannercore.InfoSchemaReferConstExtractor) + if !ok { + return errors.Errorf("wrong extractor type: %T, expected InfoSchemaReferConstExtractor", e.extractor) + } + if ex.SkipRequest { return nil } - for _, schema := range schemas { - if ok && extractor.Filter("constraint_schema", schema.L) { + schemas, tables, err := ex.ListSchemasAndTables(ctx, e.is) + if err != nil { + return errors.Trace(err) + } + for i, table := range tables { + schema := schemas[i] + if !table.IsBaseTable() { continue } - tables, err := e.is.SchemaTableInfos(ctx, schema) - if err != nil { - return errors.Trace(err) + if checker != nil && !checker.RequestVerification(sctx.GetSessionVars().ActiveRoles, schema.L, table.Name.L, "", mysql.AllPrivMask) { + continue } - for _, table := range tables { - if ok && extractor.Filter("table_name", table.Name.L) { + for _, fk := range table.ForeignKeys { + if ok && ex.Filter("constraint_name", fk.Name.L) { continue } - if !table.IsBaseTable() { - continue + updateRule, deleteRule := "NO ACTION", "NO ACTION" + if model.ReferOptionType(fk.OnUpdate) != 0 { + updateRule = model.ReferOptionType(fk.OnUpdate).String() } - if checker != nil && !checker.RequestVerification(sctx.GetSessionVars().ActiveRoles, schema.L, table.Name.L, "", mysql.AllPrivMask) { - continue - } - for _, fk := range table.ForeignKeys { - if ok && extractor.Filter("constraint_name", fk.Name.L) { - continue - } - updateRule, deleteRule := "NO ACTION", "NO ACTION" - if model.ReferOptionType(fk.OnUpdate) != 0 { - updateRule = model.ReferOptionType(fk.OnUpdate).String() - } - if model.ReferOptionType(fk.OnDelete) != 0 { - deleteRule = model.ReferOptionType(fk.OnDelete).String() - } - record := types.MakeDatums( - infoschema.CatalogVal, // CONSTRAINT_CATALOG - schema.O, // CONSTRAINT_SCHEMA - fk.Name.O, // CONSTRAINT_NAME - infoschema.CatalogVal, // UNIQUE_CONSTRAINT_CATALOG - schema.O, // UNIQUE_CONSTRAINT_SCHEMA - "PRIMARY", // UNIQUE_CONSTRAINT_NAME - "NONE", // MATCH_OPTION - updateRule, // UPDATE_RULE - deleteRule, // DELETE_RULE - table.Name.O, // TABLE_NAME - fk.RefTable.O, // REFERENCED_TABLE_NAME - ) - rows = append(rows, record) + if model.ReferOptionType(fk.OnDelete) != 0 { + deleteRule = model.ReferOptionType(fk.OnDelete).String() } + record := types.MakeDatums( + infoschema.CatalogVal, // CONSTRAINT_CATALOG + schema.O, // CONSTRAINT_SCHEMA + fk.Name.O, // CONSTRAINT_NAME + infoschema.CatalogVal, // UNIQUE_CONSTRAINT_CATALOG + schema.O, // UNIQUE_CONSTRAINT_SCHEMA + "PRIMARY", // UNIQUE_CONSTRAINT_NAME + "NONE", // MATCH_OPTION + updateRule, // UPDATE_RULE + deleteRule, // DELETE_RULE + table.Name.O, // TABLE_NAME + fk.RefTable.O, // REFERENCED_TABLE_NAME + ) + rows = append(rows, record) } } e.rows = rows @@ -564,153 +568,160 @@ func (e *memtableRetriever) updateStatsCacheIfNeed() bool { return false } -func (e *memtableRetriever) setDataFromTables(ctx context.Context, sctx sessionctx.Context, schemas []model.CIStr) error { +func (e *memtableRetriever) setDataFromOneTable( + sctx sessionctx.Context, + loc *time.Location, + checker privilege.Manager, + schema model.CIStr, + table *model.TableInfo, + rows [][]types.Datum, + useStatsCache bool, +) ([][]types.Datum, error) { + collation := table.Collate + if collation == "" { + collation = mysql.DefaultCollationName + } + createTime := types.NewTime(types.FromGoTime(table.GetUpdateTime().In(loc)), mysql.TypeDatetime, types.DefaultFsp) + + createOptions := "" + + if checker != nil && !checker.RequestVerification(sctx.GetSessionVars().ActiveRoles, schema.L, table.Name.L, "", mysql.AllPrivMask) { + return rows, nil + } + pkType := "NONCLUSTERED" + if !table.IsView() { + if table.GetPartitionInfo() != nil { + createOptions = "partitioned" + } else if table.TableCacheStatusType == model.TableCacheStatusEnable { + createOptions = "cached=on" + } + var autoIncID any + hasAutoIncID, _ := infoschema.HasAutoIncrementColumn(table) + if hasAutoIncID { + autoIncID = getAutoIncrementID(e.is, sctx, table) + } + tableType := "BASE TABLE" + if util.IsSystemView(schema.L) { + tableType = "SYSTEM VIEW" + } + if table.IsSequence() { + tableType = "SEQUENCE" + } + if table.HasClusteredIndex() { + pkType = "CLUSTERED" + } + shardingInfo := infoschema.GetShardingInfo(schema, table) + var policyName any + if table.PlacementPolicyRef != nil { + policyName = table.PlacementPolicyRef.Name.O + } + + var rowCount, avgRowLength, dataLength, indexLength uint64 + if useStatsCache { + if table.GetPartitionInfo() == nil { + err := cache.TableRowStatsCache.UpdateByID(sctx, table.ID) + if err != nil { + return rows, err + } + } else { + // needs to update all partitions for partition table. + for _, pi := range table.GetPartitionInfo().Definitions { + err := cache.TableRowStatsCache.UpdateByID(sctx, pi.ID) + if err != nil { + return rows, err + } + } + } + rowCount, avgRowLength, dataLength, indexLength = cache.TableRowStatsCache.EstimateDataLength(table) + } + + record := types.MakeDatums( + infoschema.CatalogVal, // TABLE_CATALOG + schema.O, // TABLE_SCHEMA + table.Name.O, // TABLE_NAME + tableType, // TABLE_TYPE + "InnoDB", // ENGINE + uint64(10), // VERSION + "Compact", // ROW_FORMAT + rowCount, // TABLE_ROWS + avgRowLength, // AVG_ROW_LENGTH + dataLength, // DATA_LENGTH + uint64(0), // MAX_DATA_LENGTH + indexLength, // INDEX_LENGTH + uint64(0), // DATA_FREE + autoIncID, // AUTO_INCREMENT + createTime, // CREATE_TIME + nil, // UPDATE_TIME + nil, // CHECK_TIME + collation, // TABLE_COLLATION + nil, // CHECKSUM + createOptions, // CREATE_OPTIONS + table.Comment, // TABLE_COMMENT + table.ID, // TIDB_TABLE_ID + shardingInfo, // TIDB_ROW_ID_SHARDING_INFO + pkType, // TIDB_PK_TYPE + policyName, // TIDB_PLACEMENT_POLICY_NAME + ) + rows = append(rows, record) + } else { + record := types.MakeDatums( + infoschema.CatalogVal, // TABLE_CATALOG + schema.O, // TABLE_SCHEMA + table.Name.O, // TABLE_NAME + "VIEW", // TABLE_TYPE + nil, // ENGINE + nil, // VERSION + nil, // ROW_FORMAT + nil, // TABLE_ROWS + nil, // AVG_ROW_LENGTH + nil, // DATA_LENGTH + nil, // MAX_DATA_LENGTH + nil, // INDEX_LENGTH + nil, // DATA_FREE + nil, // AUTO_INCREMENT + createTime, // CREATE_TIME + nil, // UPDATE_TIME + nil, // CHECK_TIME + nil, // TABLE_COLLATION + nil, // CHECKSUM + nil, // CREATE_OPTIONS + "VIEW", // TABLE_COMMENT + table.ID, // TIDB_TABLE_ID + nil, // TIDB_ROW_ID_SHARDING_INFO + pkType, // TIDB_PK_TYPE + nil, // TIDB_PLACEMENT_POLICY_NAME + ) + rows = append(rows, record) + } + return rows, nil +} + +func (e *memtableRetriever) setDataFromTables(ctx context.Context, sctx sessionctx.Context) error { useStatsCache := e.updateStatsCacheIfNeed() checker := privilege.GetPrivilegeManager(sctx) var rows [][]types.Datum - createTimeTp := mysql.TypeDatetime loc := sctx.GetSessionVars().TimeZone if loc == nil { loc = time.Local } - extractor, ok := e.extractor.(*plannercore.InfoSchemaTablesExtractor) - if ok && extractor.SkipRequest { + ex, ok := e.extractor.(*plannercore.InfoSchemaTablesExtractor) + if !ok { + return errors.Errorf("wrong extractor type: %T, expected InfoSchemaTablesExtractor", e.extractor) + } + if ex.SkipRequest { return nil } - for _, schema := range schemas { - if ok && extractor.Filter("table_schema", schema.L) { - continue - } - tables, err := e.is.SchemaTableInfos(ctx, schema) + + schemas, tables, err := ex.ListSchemasAndTables(ctx, e.is) + if err != nil { + return errors.Trace(err) + } + for i, table := range tables { + rows, err = e.setDataFromOneTable(sctx, loc, checker, schemas[i], table, rows, useStatsCache) if err != nil { return errors.Trace(err) } - for _, table := range tables { - if ok && extractor.Filter("table_name", table.Name.L) { - continue - } - collation := table.Collate - if collation == "" { - collation = mysql.DefaultCollationName - } - createTime := types.NewTime(types.FromGoTime(table.GetUpdateTime().In(loc)), createTimeTp, types.DefaultFsp) - - createOptions := "" - - if checker != nil && !checker.RequestVerification(sctx.GetSessionVars().ActiveRoles, schema.L, table.Name.L, "", mysql.AllPrivMask) { - continue - } - pkType := "NONCLUSTERED" - if !table.IsView() { - if table.GetPartitionInfo() != nil { - createOptions = "partitioned" - } else if table.TableCacheStatusType == model.TableCacheStatusEnable { - createOptions = "cached=on" - } - var err error - var autoIncID any - hasAutoIncID, _ := infoschema.HasAutoIncrementColumn(table) - if hasAutoIncID { - autoIncID, err = getAutoIncrementID(ctx, sctx, schema, table) - if err != nil { - return err - } - } - tableType := "BASE TABLE" - if util.IsSystemView(schema.L) { - tableType = "SYSTEM VIEW" - } - if table.IsSequence() { - tableType = "SEQUENCE" - } - if table.HasClusteredIndex() { - pkType = "CLUSTERED" - } - shardingInfo := infoschema.GetShardingInfo(schema, table) - var policyName any - if table.PlacementPolicyRef != nil { - policyName = table.PlacementPolicyRef.Name.O - } - - var rowCount, avgRowLength, dataLength, indexLength uint64 - if useStatsCache { - if table.GetPartitionInfo() == nil { - err := cache.TableRowStatsCache.UpdateByID(sctx, table.ID) - if err != nil { - return err - } - } else { - // needs to update all partitions for partition table. - for _, pi := range table.GetPartitionInfo().Definitions { - err := cache.TableRowStatsCache.UpdateByID(sctx, pi.ID) - if err != nil { - return err - } - } - } - rowCount, avgRowLength, dataLength, indexLength = cache.TableRowStatsCache.EstimateDataLength(table) - } - - record := types.MakeDatums( - infoschema.CatalogVal, // TABLE_CATALOG - schema.O, // TABLE_SCHEMA - table.Name.O, // TABLE_NAME - tableType, // TABLE_TYPE - "InnoDB", // ENGINE - uint64(10), // VERSION - "Compact", // ROW_FORMAT - rowCount, // TABLE_ROWS - avgRowLength, // AVG_ROW_LENGTH - dataLength, // DATA_LENGTH - uint64(0), // MAX_DATA_LENGTH - indexLength, // INDEX_LENGTH - uint64(0), // DATA_FREE - autoIncID, // AUTO_INCREMENT - createTime, // CREATE_TIME - nil, // UPDATE_TIME - nil, // CHECK_TIME - collation, // TABLE_COLLATION - nil, // CHECKSUM - createOptions, // CREATE_OPTIONS - table.Comment, // TABLE_COMMENT - table.ID, // TIDB_TABLE_ID - shardingInfo, // TIDB_ROW_ID_SHARDING_INFO - pkType, // TIDB_PK_TYPE - policyName, // TIDB_PLACEMENT_POLICY_NAME - ) - rows = append(rows, record) - } else { - record := types.MakeDatums( - infoschema.CatalogVal, // TABLE_CATALOG - schema.O, // TABLE_SCHEMA - table.Name.O, // TABLE_NAME - "VIEW", // TABLE_TYPE - nil, // ENGINE - nil, // VERSION - nil, // ROW_FORMAT - nil, // TABLE_ROWS - nil, // AVG_ROW_LENGTH - nil, // DATA_LENGTH - nil, // MAX_DATA_LENGTH - nil, // INDEX_LENGTH - nil, // DATA_FREE - nil, // AUTO_INCREMENT - createTime, // CREATE_TIME - nil, // UPDATE_TIME - nil, // CHECK_TIME - nil, // TABLE_COLLATION - nil, // CHECKSUM - nil, // CREATE_OPTIONS - "VIEW", // TABLE_COMMENT - table.ID, // TIDB_TABLE_ID - nil, // TIDB_ROW_ID_SHARDING_INFO - pkType, // TIDB_PK_TYPE - nil, // TIDB_PLACEMENT_POLICY_NAME - ) - rows = append(rows, record) - } - } } e.rows = rows return nil @@ -718,17 +729,17 @@ func (e *memtableRetriever) setDataFromTables(ctx context.Context, sctx sessionc // Data for inforation_schema.CHECK_CONSTRAINTS // This is standards (ISO/IEC 9075-11) compliant and is compatible with the implementation in MySQL as well. -func (e *memtableRetriever) setDataFromCheckConstraints(ctx context.Context, sctx sessionctx.Context, schemas []model.CIStr) error { +func (e *memtableRetriever) setDataFromCheckConstraints(ctx context.Context, sctx sessionctx.Context) error { var rows [][]types.Datum checker := privilege.GetPrivilegeManager(sctx) - extractor, ok := e.extractor.(*plannercore.InfoSchemaTablesExtractor) - if ok && extractor.SkipRequest { + ex, ok := e.extractor.(*plannercore.InfoSchemaCheckConstraintsExtractor) + if !ok { + return errors.Errorf("wrong extractor type: %T, expected InfoSchemaCheckConstraintsExtractor", e.extractor) + } + if ex.SkipRequest { return nil } - for _, schema := range schemas { - if ok && extractor.Filter("constraint_schema", schema.L) { - continue - } + for _, schema := range ex.ListSchemas(e.is) { tables, err := e.is.SchemaTableInfos(ctx, schema) if err != nil { return errors.Trace(err) @@ -742,7 +753,7 @@ func (e *memtableRetriever) setDataFromCheckConstraints(ctx context.Context, sct if constraint.State != model.StatePublic { continue } - if ok && extractor.Filter("constraint_name", constraint.Name.L) { + if ok && ex.Filter("constraint_name", constraint.Name.L) { continue } record := types.MakeDatums( @@ -762,43 +773,42 @@ func (e *memtableRetriever) setDataFromCheckConstraints(ctx context.Context, sct // Data for inforation_schema.TIDB_CHECK_CONSTRAINTS // This has non-standard TiDB specific extensions. -func (e *memtableRetriever) setDataFromTiDBCheckConstraints(ctx context.Context, sctx sessionctx.Context, schemas []model.CIStr) error { +func (e *memtableRetriever) setDataFromTiDBCheckConstraints(ctx context.Context, sctx sessionctx.Context) error { var rows [][]types.Datum checker := privilege.GetPrivilegeManager(sctx) - extractor, ok := e.extractor.(*plannercore.InfoSchemaTablesExtractor) - if ok && extractor.SkipRequest { + ex, ok := e.extractor.(*plannercore.InfoSchemaTiDBCheckConstraintsExtractor) + if !ok { + return errors.Errorf("wrong extractor type: %T, expected InfoSchemaTiDBCheckConstraintsExtractor", e.extractor) + } + if ex.SkipRequest { return nil } - for _, schema := range schemas { - if ok && extractor.Filter("constraint_schema", schema.L) { - continue - } - tables, err := e.is.SchemaTableInfos(ctx, schema) - if err != nil { - return errors.Trace(err) - } - for _, table := range tables { - if len(table.Constraints) > 0 { - if checker != nil && !checker.RequestVerification(sctx.GetSessionVars().ActiveRoles, schema.L, table.Name.L, "", mysql.SelectPriv) { + schemas, tables, err := ex.ListSchemasAndTables(ctx, e.is) + if err != nil { + return errors.Trace(err) + } + for i, table := range tables { + schema := schemas[i] + if len(table.Constraints) > 0 { + if checker != nil && !checker.RequestVerification(sctx.GetSessionVars().ActiveRoles, schema.L, table.Name.L, "", mysql.SelectPriv) { + continue + } + for _, constraint := range table.Constraints { + if constraint.State != model.StatePublic { continue } - for _, constraint := range table.Constraints { - if constraint.State != model.StatePublic { - continue - } - if ok && extractor.Filter("constraint_name", constraint.Name.L) { - continue - } - record := types.MakeDatums( - infoschema.CatalogVal, // CONSTRAINT_CATALOG - schema.O, // CONSTRAINT_SCHEMA - constraint.Name.O, // CONSTRAINT_NAME - fmt.Sprintf("(%s)", constraint.ExprString), // CHECK_CLAUSE - table.Name.O, // TABLE_NAME - table.ID, // TABLE_ID - ) - rows = append(rows, record) + if ok && ex.Filter("constraint_name", constraint.Name.L) { + continue } + record := types.MakeDatums( + infoschema.CatalogVal, // CONSTRAINT_CATALOG + schema.O, // CONSTRAINT_SCHEMA + constraint.Name.O, // CONSTRAINT_NAME + fmt.Sprintf("(%s)", constraint.ExprString), // CHECK_CLAUSE + table.Name.O, // TABLE_NAME + table.ID, // TABLE_ID + ) + rows = append(rows, record) } } } @@ -808,13 +818,13 @@ func (e *memtableRetriever) setDataFromTiDBCheckConstraints(ctx context.Context, type hugeMemTableRetriever struct { dummyCloser - extractor *plannercore.ColumnsTableExtractor + extractor *plannercore.InfoSchemaColumnsExtractor table *model.TableInfo columns []*model.ColumnInfo retrieved bool initialized bool rows [][]types.Datum - dbs []*model.DBInfo + dbs []model.CIStr curTables []*model.TableInfo dbsIdx int tblIdx int @@ -827,15 +837,16 @@ type hugeMemTableRetriever struct { // retrieve implements the infoschemaRetriever interface func (e *hugeMemTableRetriever) retrieve(ctx context.Context, sctx sessionctx.Context) ([][]types.Datum, error) { + if e.extractor.SkipRequest { + e.retrieved = true + } if e.retrieved { return nil, nil } if !e.initialized { e.is = sessiontxn.GetTxnManager(sctx).GetTxnInfoSchema() - dbs := e.is.AllSchemas() - slices.SortFunc(dbs, model.LessDBInfo) - e.dbs = dbs + e.dbs = e.extractor.ListSchemas(e.is) e.initialized = true e.rows = make([][]types.Datum, 0, 1024) e.batch = 1024 @@ -843,7 +854,7 @@ func (e *hugeMemTableRetriever) retrieve(ctx context.Context, sctx sessionctx.Co var err error if e.table.Name.O == infoschema.TableColumns { - err = e.setDataForColumns(ctx, sctx, e.extractor) + err = e.setDataForColumns(ctx, sctx) } if err != nil { return nil, err @@ -853,14 +864,14 @@ func (e *hugeMemTableRetriever) retrieve(ctx context.Context, sctx sessionctx.Co return adjustColumns(e.rows, e.columns, e.table), nil } -func (e *hugeMemTableRetriever) setDataForColumns(ctx context.Context, sctx sessionctx.Context, extractor *plannercore.ColumnsTableExtractor) error { +func (e *hugeMemTableRetriever) setDataForColumns(ctx context.Context, sctx sessionctx.Context) error { checker := privilege.GetPrivilegeManager(sctx) e.rows = e.rows[:0] for ; e.dbsIdx < len(e.dbs); e.dbsIdx++ { schema := e.dbs[e.dbsIdx] var table *model.TableInfo if len(e.curTables) == 0 { - tables, err := e.is.SchemaTableInfos(ctx, schema.Name) + tables, err := e.extractor.ListTables(ctx, schema, e.is) if err != nil { return errors.Trace(err) } @@ -869,7 +880,7 @@ func (e *hugeMemTableRetriever) setDataForColumns(ctx context.Context, sctx sess for e.tblIdx < len(e.curTables) { table = e.curTables[e.tblIdx] e.tblIdx++ - if e.setDataForColumnsWithOneTable(ctx, sctx, extractor, schema, table, checker) { + if e.setDataForColumnsWithOneTable(ctx, sctx, schema, table, checker) { return nil } } @@ -882,15 +893,14 @@ func (e *hugeMemTableRetriever) setDataForColumns(ctx context.Context, sctx sess func (e *hugeMemTableRetriever) setDataForColumnsWithOneTable( ctx context.Context, sctx sessionctx.Context, - extractor *plannercore.ColumnsTableExtractor, - schema *model.DBInfo, + schema model.CIStr, table *model.TableInfo, checker privilege.Manager) bool { hasPrivs := false var priv mysql.PrivilegeType if checker != nil { for _, p := range mysql.AllColumnPrivs { - if checker.RequestVerification(sctx.GetSessionVars().ActiveRoles, schema.Name.L, table.Name.L, "", p) { + if checker.RequestVerification(sctx.GetSessionVars().ActiveRoles, schema.L, table.Name.L, "", p) { hasPrivs = true priv |= p } @@ -900,11 +910,16 @@ func (e *hugeMemTableRetriever) setDataForColumnsWithOneTable( } } - e.dataForColumnsInTable(ctx, sctx, schema, table, priv, extractor) + e.dataForColumnsInTable(ctx, sctx, schema, table, priv) return len(e.rows) >= e.batch } -func (e *hugeMemTableRetriever) dataForColumnsInTable(ctx context.Context, sctx sessionctx.Context, schema *model.DBInfo, tbl *model.TableInfo, priv mysql.PrivilegeType, extractor *plannercore.ColumnsTableExtractor) { +func (e *hugeMemTableRetriever) dataForColumnsInTable( + ctx context.Context, + sctx sessionctx.Context, + schema model.CIStr, + tbl *model.TableInfo, + priv mysql.PrivilegeType) { if tbl.IsView() { e.viewMu.Lock() _, ok := e.viewSchemaMap[tbl.ID] @@ -916,7 +931,7 @@ func (e *hugeMemTableRetriever) dataForColumnsInTable(ctx context.Context, sctx is := sessiontxn.GetTxnManager(s).GetTxnInfoSchema() planBuilder, _ := plannercore.NewPlanBuilder().Init(s.GetPlanCtx(), is, hint.NewQBHintHandler(nil)) var err error - viewLogicalPlan, err = planBuilder.BuildDataSourceFromView(ctx, schema.Name, tbl, nil, nil) + viewLogicalPlan, err = planBuilder.BuildDataSourceFromView(ctx, schema, tbl, nil, nil) return errors.Trace(err) }); err != nil { sctx.GetSessionVars().StmtCtx.AppendWarning(err) @@ -929,42 +944,8 @@ func (e *hugeMemTableRetriever) dataForColumnsInTable(ctx context.Context, sctx e.viewMu.Unlock() } - var tableSchemaRegexp, tableNameRegexp, columnsRegexp []collate.WildcardPattern - var tableSchemaFilterEnable, - tableNameFilterEnable, columnsFilterEnable bool - if !extractor.SkipRequest { - tableSchemaFilterEnable = extractor.TableSchema.Count() > 0 - tableNameFilterEnable = extractor.TableName.Count() > 0 - columnsFilterEnable = extractor.ColumnName.Count() > 0 - if len(extractor.TableSchemaPatterns) > 0 { - tableSchemaRegexp = make([]collate.WildcardPattern, len(extractor.TableSchemaPatterns)) - for i, pattern := range extractor.TableSchemaPatterns { - tableSchemaRegexp[i] = collate.GetCollatorByID(collate.CollationName2ID(mysql.UTF8MB4DefaultCollation)).Pattern() - tableSchemaRegexp[i].Compile(pattern, byte('\\')) - } - } - if len(extractor.TableNamePatterns) > 0 { - tableNameRegexp = make([]collate.WildcardPattern, len(extractor.TableNamePatterns)) - for i, pattern := range extractor.TableNamePatterns { - tableNameRegexp[i] = collate.GetCollatorByID(collate.CollationName2ID(mysql.UTF8MB4DefaultCollation)).Pattern() - tableNameRegexp[i].Compile(pattern, byte('\\')) - } - } - if len(extractor.ColumnNamePatterns) > 0 { - columnsRegexp = make([]collate.WildcardPattern, len(extractor.ColumnNamePatterns)) - for i, pattern := range extractor.ColumnNamePatterns { - columnsRegexp[i] = collate.GetCollatorByID(collate.CollationName2ID(mysql.UTF8MB4DefaultCollation)).Pattern() - columnsRegexp[i].Compile(pattern, byte('\\')) - } - } - } - i := 0 -ForColumnsTag: - for _, col := range tbl.Columns { - if col.Hidden { - continue - } - i++ + cols, ordinalPos := e.extractor.ListColumns(tbl) + for i, col := range cols { ft := &(col.FieldType) if tbl.IsView() { e.viewMu.RLock() @@ -978,32 +959,6 @@ ForColumnsTag: } e.viewMu.RUnlock() } - if !extractor.SkipRequest { - if tableSchemaFilterEnable && !extractor.TableSchema.Exist(schema.Name.L) { - continue - } - if tableNameFilterEnable && !extractor.TableName.Exist(tbl.Name.L) { - continue - } - if columnsFilterEnable && !extractor.ColumnName.Exist(col.Name.L) { - continue - } - for _, re := range tableSchemaRegexp { - if !re.DoMatch(schema.Name.L) { - continue ForColumnsTag - } - } - for _, re := range tableNameRegexp { - if !re.DoMatch(tbl.Name.L) { - continue ForColumnsTag - } - } - for _, re := range columnsRegexp { - if !re.DoMatch(col.Name.L) { - continue ForColumnsTag - } - } - } var charMaxLen, charOctLen, numericPrecision, numericScale, datetimePrecision any colLen, decimal := ft.GetFlen(), ft.GetDecimal() @@ -1080,10 +1035,10 @@ ForColumnsTag: } record := types.MakeDatums( infoschema.CatalogVal, // TABLE_CATALOG - schema.Name.O, // TABLE_SCHEMA + schema.O, // TABLE_SCHEMA tbl.Name.O, // TABLE_NAME col.Name.O, // COLUMN_NAME - i, // ORDINAL_POSITION + ordinalPos[i], // ORDINAL_POSITION columnDefault, // COLUMN_DEFAULT columnDesc.Null, // IS_NULLABLE types.TypeToStr(colType, ft.GetCharset()), // DATA_TYPE @@ -1113,185 +1068,181 @@ func calcCharOctLength(lenInChar int, cs string) int { return lenInBytes } -func (e *memtableRetriever) setDataFromPartitions(ctx context.Context, sctx sessionctx.Context, schemas []model.CIStr) error { +func (e *memtableRetriever) setDataFromPartitions(ctx context.Context, sctx sessionctx.Context) error { useStatsCache := e.updateStatsCacheIfNeed() checker := privilege.GetPrivilegeManager(sctx) var rows [][]types.Datum createTimeTp := mysql.TypeDatetime - extractor, ok := e.extractor.(*plannercore.InfoSchemaTablesExtractor) - if ok && extractor.SkipRequest { + ex, ok := e.extractor.(*plannercore.InfoSchemaPartitionsExtractor) + if !ok { + return errors.Errorf("wrong extractor type: %T, expected InfoSchemaPartitionsExtractor", e.extractor) + } + if ex.SkipRequest { return nil } - - for _, schema := range schemas { - if ok && extractor.Filter("table_schema", schema.L) { + schemas, tables, err := ex.ListSchemasAndTables(ctx, e.is) + if err != nil { + return errors.Trace(err) + } + for i, table := range tables { + schema := schemas[i] + if checker != nil && !checker.RequestVerification(sctx.GetSessionVars().ActiveRoles, schema.L, table.Name.L, "", mysql.SelectPriv) { continue } - tables, err := e.is.SchemaTableInfos(ctx, schema) - if err != nil { - return errors.Trace(err) + createTime := types.NewTime(types.FromGoTime(table.GetUpdateTime()), createTimeTp, types.DefaultFsp) + + var rowCount, dataLength, indexLength uint64 + if useStatsCache { + if table.GetPartitionInfo() == nil { + err := cache.TableRowStatsCache.UpdateByID(sctx, table.ID) + if err != nil { + return err + } + } else { + // needs to update needed partitions for partition table. + for _, pi := range table.GetPartitionInfo().Definitions { + err := cache.TableRowStatsCache.UpdateByID(sctx, pi.ID) + if err != nil { + return err + } + } + } } - for _, table := range tables { - if ok && extractor.Filter("table_name", table.Name.L) { - continue + if table.GetPartitionInfo() == nil { + rowCount = cache.TableRowStatsCache.GetTableRows(table.ID) + dataLength, indexLength = cache.TableRowStatsCache.GetDataAndIndexLength(table, table.ID, rowCount) + avgRowLength := uint64(0) + if rowCount != 0 { + avgRowLength = dataLength / rowCount } - if checker != nil && !checker.RequestVerification(sctx.GetSessionVars().ActiveRoles, schema.L, table.Name.L, "", mysql.SelectPriv) { + // If there are any condition on the `PARTITION_NAME` in the extractor, this record should be ignored + if len(ex.ColPredicates["partition_name"]) > 0 { continue } - createTime := types.NewTime(types.FromGoTime(table.GetUpdateTime()), createTimeTp, types.DefaultFsp) + record := types.MakeDatums( + infoschema.CatalogVal, // TABLE_CATALOG + schema.O, // TABLE_SCHEMA + table.Name.O, // TABLE_NAME + nil, // PARTITION_NAME + nil, // SUBPARTITION_NAME + nil, // PARTITION_ORDINAL_POSITION + nil, // SUBPARTITION_ORDINAL_POSITION + nil, // PARTITION_METHOD + nil, // SUBPARTITION_METHOD + nil, // PARTITION_EXPRESSION + nil, // SUBPARTITION_EXPRESSION + nil, // PARTITION_DESCRIPTION + rowCount, // TABLE_ROWS + avgRowLength, // AVG_ROW_LENGTH + dataLength, // DATA_LENGTH + nil, // MAX_DATA_LENGTH + indexLength, // INDEX_LENGTH + nil, // DATA_FREE + createTime, // CREATE_TIME + nil, // UPDATE_TIME + nil, // CHECK_TIME + nil, // CHECKSUM + nil, // PARTITION_COMMENT + nil, // NODEGROUP + nil, // TABLESPACE_NAME + nil, // TIDB_PARTITION_ID + nil, // TIDB_PLACEMENT_POLICY_NAME + ) + rows = append(rows, record) + } else { + for i, pi := range table.GetPartitionInfo().Definitions { + if ex.Filter("partition_name", pi.Name.L) { + continue + } + rowCount = cache.TableRowStatsCache.GetTableRows(pi.ID) + dataLength, indexLength = cache.TableRowStatsCache.GetDataAndIndexLength(table, pi.ID, rowCount) + avgRowLength := uint64(0) + if rowCount != 0 { + avgRowLength = dataLength / rowCount + } + + var partitionDesc string + if table.Partition.Type == model.PartitionTypeRange { + partitionDesc = strings.Join(pi.LessThan, ",") + } else if table.Partition.Type == model.PartitionTypeList { + if len(pi.InValues) > 0 { + buf := bytes.NewBuffer(nil) + for i, vs := range pi.InValues { + if i > 0 { + buf.WriteString(",") + } + if len(vs) != 1 { + buf.WriteString("(") + } + buf.WriteString(strings.Join(vs, ",")) + if len(vs) != 1 { + buf.WriteString(")") + } + } + partitionDesc = buf.String() + } + } - var rowCount, dataLength, indexLength uint64 - if useStatsCache { - if table.GetPartitionInfo() == nil { - err := cache.TableRowStatsCache.UpdateByID(sctx, table.ID) - if err != nil { - return err + partitionMethod := table.Partition.Type.String() + partitionExpr := table.Partition.Expr + if len(table.Partition.Columns) > 0 { + switch table.Partition.Type { + case model.PartitionTypeRange: + partitionMethod = "RANGE COLUMNS" + case model.PartitionTypeList: + partitionMethod = "LIST COLUMNS" + case model.PartitionTypeKey: + partitionMethod = "KEY" + default: + return errors.Errorf("Inconsistent partition type, have type %v, but with COLUMNS > 0 (%d)", table.Partition.Type, len(table.Partition.Columns)) } - } else { - // needs to update needed partitions for partition table. - for _, pi := range table.GetPartitionInfo().Definitions { - if ok && extractor.Filter("partition_name", pi.Name.L) { - continue - } - err := cache.TableRowStatsCache.UpdateByID(sctx, pi.ID) - if err != nil { - return err + buf := bytes.NewBuffer(nil) + for i, col := range table.Partition.Columns { + if i > 0 { + buf.WriteString(",") } + buf.WriteString("`") + buf.WriteString(col.String()) + buf.WriteString("`") } + partitionExpr = buf.String() } - } - if table.GetPartitionInfo() == nil { - rowCount = cache.TableRowStatsCache.GetTableRows(table.ID) - dataLength, indexLength = cache.TableRowStatsCache.GetDataAndIndexLength(table, table.ID, rowCount) - avgRowLength := uint64(0) - if rowCount != 0 { - avgRowLength = dataLength / rowCount + + var policyName any + if pi.PlacementPolicyRef != nil { + policyName = pi.PlacementPolicyRef.Name.O } record := types.MakeDatums( infoschema.CatalogVal, // TABLE_CATALOG schema.O, // TABLE_SCHEMA table.Name.O, // TABLE_NAME - nil, // PARTITION_NAME + pi.Name.O, // PARTITION_NAME nil, // SUBPARTITION_NAME - nil, // PARTITION_ORDINAL_POSITION + i+1, // PARTITION_ORDINAL_POSITION nil, // SUBPARTITION_ORDINAL_POSITION - nil, // PARTITION_METHOD + partitionMethod, // PARTITION_METHOD nil, // SUBPARTITION_METHOD - nil, // PARTITION_EXPRESSION + partitionExpr, // PARTITION_EXPRESSION nil, // SUBPARTITION_EXPRESSION - nil, // PARTITION_DESCRIPTION + partitionDesc, // PARTITION_DESCRIPTION rowCount, // TABLE_ROWS avgRowLength, // AVG_ROW_LENGTH dataLength, // DATA_LENGTH - nil, // MAX_DATA_LENGTH + uint64(0), // MAX_DATA_LENGTH indexLength, // INDEX_LENGTH - nil, // DATA_FREE + uint64(0), // DATA_FREE createTime, // CREATE_TIME nil, // UPDATE_TIME nil, // CHECK_TIME nil, // CHECKSUM - nil, // PARTITION_COMMENT + pi.Comment, // PARTITION_COMMENT nil, // NODEGROUP nil, // TABLESPACE_NAME - nil, // TIDB_PARTITION_ID - nil, // TIDB_PLACEMENT_POLICY_NAME + pi.ID, // TIDB_PARTITION_ID + policyName, // TIDB_PLACEMENT_POLICY_NAME ) rows = append(rows, record) - } else { - for i, pi := range table.GetPartitionInfo().Definitions { - if ok && extractor.Filter("partition_name", pi.Name.L) { - continue - } - rowCount = cache.TableRowStatsCache.GetTableRows(pi.ID) - dataLength, indexLength = cache.TableRowStatsCache.GetDataAndIndexLength(table, pi.ID, rowCount) - avgRowLength := uint64(0) - if rowCount != 0 { - avgRowLength = dataLength / rowCount - } - - var partitionDesc string - if table.Partition.Type == model.PartitionTypeRange { - partitionDesc = strings.Join(pi.LessThan, ",") - } else if table.Partition.Type == model.PartitionTypeList { - if len(pi.InValues) > 0 { - buf := bytes.NewBuffer(nil) - for i, vs := range pi.InValues { - if i > 0 { - buf.WriteString(",") - } - if len(vs) != 1 { - buf.WriteString("(") - } - buf.WriteString(strings.Join(vs, ",")) - if len(vs) != 1 { - buf.WriteString(")") - } - } - partitionDesc = buf.String() - } - } - - partitionMethod := table.Partition.Type.String() - partitionExpr := table.Partition.Expr - if len(table.Partition.Columns) > 0 { - switch table.Partition.Type { - case model.PartitionTypeRange: - partitionMethod = "RANGE COLUMNS" - case model.PartitionTypeList: - partitionMethod = "LIST COLUMNS" - case model.PartitionTypeKey: - partitionMethod = "KEY" - default: - return errors.Errorf("Inconsistent partition type, have type %v, but with COLUMNS > 0 (%d)", table.Partition.Type, len(table.Partition.Columns)) - } - buf := bytes.NewBuffer(nil) - for i, col := range table.Partition.Columns { - if i > 0 { - buf.WriteString(",") - } - buf.WriteString("`") - buf.WriteString(col.String()) - buf.WriteString("`") - } - partitionExpr = buf.String() - } - - var policyName any - if pi.PlacementPolicyRef != nil { - policyName = pi.PlacementPolicyRef.Name.O - } - record := types.MakeDatums( - infoschema.CatalogVal, // TABLE_CATALOG - schema.O, // TABLE_SCHEMA - table.Name.O, // TABLE_NAME - pi.Name.O, // PARTITION_NAME - nil, // SUBPARTITION_NAME - i+1, // PARTITION_ORDINAL_POSITION - nil, // SUBPARTITION_ORDINAL_POSITION - partitionMethod, // PARTITION_METHOD - nil, // SUBPARTITION_METHOD - partitionExpr, // PARTITION_EXPRESSION - nil, // SUBPARTITION_EXPRESSION - partitionDesc, // PARTITION_DESCRIPTION - rowCount, // TABLE_ROWS - avgRowLength, // AVG_ROW_LENGTH - dataLength, // DATA_LENGTH - uint64(0), // MAX_DATA_LENGTH - indexLength, // INDEX_LENGTH - uint64(0), // DATA_FREE - createTime, // CREATE_TIME - nil, // UPDATE_TIME - nil, // CHECK_TIME - nil, // CHECKSUM - pi.Comment, // PARTITION_COMMENT - nil, // NODEGROUP - nil, // TABLESPACE_NAME - pi.ID, // TIDB_PARTITION_ID - policyName, // TIDB_PLACEMENT_POLICY_NAME - ) - rows = append(rows, record) - } } } } @@ -1299,155 +1250,160 @@ func (e *memtableRetriever) setDataFromPartitions(ctx context.Context, sctx sess return nil } -func (e *memtableRetriever) setDataFromIndexes(ctx context.Context, sctx sessionctx.Context, schemas []model.CIStr) error { - checker := privilege.GetPrivilegeManager(sctx) - extractor, ok := e.extractor.(*plannercore.InfoSchemaTablesExtractor) - if ok && extractor.SkipRequest { +func (e *memtableRetriever) setDataFromIndexes(ctx context.Context, sctx sessionctx.Context) error { + ex, ok := e.extractor.(*plannercore.InfoSchemaIndexesExtractor) + if !ok { + return errors.Errorf("wrong extractor type: %T, expected InfoSchemaIndexesExtractor", e.extractor) + } + if ex.SkipRequest { return nil } + + schemas, tables, err := ex.ListSchemasAndTables(ctx, e.is) + if err != nil { + return errors.Trace(err) + } + var rows [][]types.Datum - for _, schema := range schemas { - if ok && extractor.Filter("table_schema", schema.L) { - continue - } - tables, err := e.is.SchemaTableInfos(ctx, schema) + for i, table := range tables { + rows, err = e.setDataFromIndex(sctx, schemas[i], table, rows) if err != nil { return errors.Trace(err) } - for _, tb := range tables { - if ok && extractor.Filter("table_name", tb.Name.L) { - continue - } - if checker != nil && !checker.RequestVerification(sctx.GetSessionVars().ActiveRoles, schema.L, tb.Name.L, "", mysql.AllPrivMask) { - continue - } - - if tb.PKIsHandle { - var pkCol *model.ColumnInfo - for _, col := range tb.Cols() { - if mysql.HasPriKeyFlag(col.GetFlag()) { - pkCol = col - break - } - } - record := types.MakeDatums( - schema.O, // TABLE_SCHEMA - tb.Name.O, // TABLE_NAME - 0, // NON_UNIQUE - "PRIMARY", // KEY_NAME - 1, // SEQ_IN_INDEX - pkCol.Name.O, // COLUMN_NAME - nil, // SUB_PART - "", // INDEX_COMMENT - nil, // Expression - 0, // INDEX_ID - "YES", // IS_VISIBLE - "YES", // CLUSTERED - 0, // IS_GLOBAL - ) - rows = append(rows, record) - } - for _, idxInfo := range tb.Indices { - if idxInfo.State != model.StatePublic { - continue - } - isClustered := "NO" - if tb.IsCommonHandle && idxInfo.Primary { - isClustered = "YES" - } - for i, col := range idxInfo.Columns { - nonUniq := 1 - if idxInfo.Unique { - nonUniq = 0 - } - var subPart any - if col.Length != types.UnspecifiedLength { - subPart = col.Length - } - colName := col.Name.O - var expression any - expression = nil - tblCol := tb.Columns[col.Offset] - if tblCol.Hidden { - colName = "NULL" - expression = tblCol.GeneratedExprString - } - visible := "YES" - if idxInfo.Invisible { - visible = "NO" - } - record := types.MakeDatums( - schema.O, // TABLE_SCHEMA - tb.Name.O, // TABLE_NAME - nonUniq, // NON_UNIQUE - idxInfo.Name.O, // KEY_NAME - i+1, // SEQ_IN_INDEX - colName, // COLUMN_NAME - subPart, // SUB_PART - idxInfo.Comment, // INDEX_COMMENT - expression, // Expression - idxInfo.ID, // INDEX_ID - visible, // IS_VISIBLE - isClustered, // CLUSTERED - idxInfo.Global, // IS_GLOBAL - ) - rows = append(rows, record) - } - } - } } e.rows = rows return nil } -func (e *memtableRetriever) setDataFromViews(ctx context.Context, sctx sessionctx.Context, schemas []model.CIStr) error { +func (*memtableRetriever) setDataFromIndex( + sctx sessionctx.Context, + schema model.CIStr, + tb *model.TableInfo, + rows [][]types.Datum) ([][]types.Datum, error) { checker := privilege.GetPrivilegeManager(sctx) - extractor, ok := e.extractor.(*plannercore.InfoSchemaTablesExtractor) - if ok && extractor.SkipRequest { - return nil + if checker != nil && !checker.RequestVerification(sctx.GetSessionVars().ActiveRoles, schema.L, tb.Name.L, "", mysql.AllPrivMask) { + return rows, nil } - var rows [][]types.Datum - for _, schema := range schemas { - if ok && extractor.Filter("table_schema", schema.L) { + + if tb.PKIsHandle { + var pkCol *model.ColumnInfo + for _, col := range tb.Cols() { + if mysql.HasPriKeyFlag(col.GetFlag()) { + pkCol = col + break + } + } + record := types.MakeDatums( + schema.O, // TABLE_SCHEMA + tb.Name.O, // TABLE_NAME + 0, // NON_UNIQUE + "PRIMARY", // KEY_NAME + 1, // SEQ_IN_INDEX + pkCol.Name.O, // COLUMN_NAME + nil, // SUB_PART + "", // INDEX_COMMENT + nil, // Expression + 0, // INDEX_ID + "YES", // IS_VISIBLE + "YES", // CLUSTERED + 0, // IS_GLOBAL + ) + rows = append(rows, record) + } + for _, idxInfo := range tb.Indices { + if idxInfo.State != model.StatePublic { continue } - tables, err := e.is.SchemaTableInfos(ctx, schema) - if err != nil { - return errors.Trace(err) + isClustered := "NO" + if tb.IsCommonHandle && idxInfo.Primary { + isClustered = "YES" } - for _, table := range tables { - if ok && extractor.Filter("table_name", table.Name.L) { - continue + for i, col := range idxInfo.Columns { + nonUniq := 1 + if idxInfo.Unique { + nonUniq = 0 } - if !table.IsView() { - continue - } - collation := table.Collate - charset := table.Charset - if collation == "" { - collation = mysql.DefaultCollationName + var subPart any + if col.Length != types.UnspecifiedLength { + subPart = col.Length } - if charset == "" { - charset = mysql.DefaultCharset + colName := col.Name.O + var expression any + expression = nil + tblCol := tb.Columns[col.Offset] + if tblCol.Hidden { + colName = "NULL" + expression = tblCol.GeneratedExprString } - if checker != nil && !checker.RequestVerification(sctx.GetSessionVars().ActiveRoles, schema.L, table.Name.L, "", mysql.AllPrivMask) { - continue + visible := "YES" + if idxInfo.Invisible { + visible = "NO" } record := types.MakeDatums( - infoschema.CatalogVal, // TABLE_CATALOG - schema.O, // TABLE_SCHEMA - table.Name.O, // TABLE_NAME - table.View.SelectStmt, // VIEW_DEFINITION - table.View.CheckOption.String(), // CHECK_OPTION - "NO", // IS_UPDATABLE - table.View.Definer.String(), // DEFINER - table.View.Security.String(), // SECURITY_TYPE - charset, // CHARACTER_SET_CLIENT - collation, // COLLATION_CONNECTION + schema.O, // TABLE_SCHEMA + tb.Name.O, // TABLE_NAME + nonUniq, // NON_UNIQUE + idxInfo.Name.O, // KEY_NAME + i+1, // SEQ_IN_INDEX + colName, // COLUMN_NAME + subPart, // SUB_PART + idxInfo.Comment, // INDEX_COMMENT + expression, // Expression + idxInfo.ID, // INDEX_ID + visible, // IS_VISIBLE + isClustered, // CLUSTERED + idxInfo.Global, // IS_GLOBAL ) rows = append(rows, record) } } + return rows, nil +} + +func (e *memtableRetriever) setDataFromViews(ctx context.Context, sctx sessionctx.Context) error { + checker := privilege.GetPrivilegeManager(sctx) + ex, ok := e.extractor.(*plannercore.InfoSchemaViewsExtractor) + if !ok { + return errors.Errorf("wrong extractor type: %T, expected InfoSchemaIndexesExtractor", e.extractor) + } + if ex.SkipRequest { + return nil + } + schemas, tables, err := ex.ListSchemasAndTables(ctx, e.is) + if err != nil { + return errors.Trace(err) + } + rows := make([][]types.Datum, 0, len(tables)) + for i, table := range tables { + schema := schemas[i] + if !table.IsView() { + continue + } + collation := table.Collate + charset := table.Charset + if collation == "" { + collation = mysql.DefaultCollationName + } + if charset == "" { + charset = mysql.DefaultCharset + } + if checker != nil && !checker.RequestVerification(sctx.GetSessionVars().ActiveRoles, schema.L, table.Name.L, "", mysql.AllPrivMask) { + continue + } + record := types.MakeDatums( + infoschema.CatalogVal, // TABLE_CATALOG + schema.O, // TABLE_SCHEMA + table.Name.O, // TABLE_NAME + table.View.SelectStmt, // VIEW_DEFINITION + table.View.CheckOption.String(), // CHECK_OPTION + "NO", // IS_UPDATABLE + table.View.Definer.String(), // DEFINER + table.View.Security.String(), // SECURITY_TYPE + charset, // CHARACTER_SET_CLIENT + collation, // COLLATION_CONNECTION + ) + rows = append(rows, record) + } e.rows = rows return nil } @@ -1701,31 +1657,30 @@ func (e *memtableRetriever) dataForTiDBClusterInfo(ctx sessionctx.Context) error return nil } -func (e *memtableRetriever) setDataFromKeyColumnUsage(ctx context.Context, sctx sessionctx.Context, schemas []model.CIStr) error { +func (e *memtableRetriever) setDataFromKeyColumnUsage(ctx context.Context, sctx sessionctx.Context) error { checker := privilege.GetPrivilegeManager(sctx) - rows := make([][]types.Datum, 0, len(schemas)) // The capacity is not accurate, but it is not a big problem. - extractor, ok := e.extractor.(*plannercore.InfoSchemaTablesExtractor) - if ok && extractor.SkipRequest { + ex, ok := e.extractor.(*plannercore.InfoSchemaKeyColumnUsageExtractor) + if !ok { + return errors.Errorf("wrong extractor type: %T, expected InfoSchemaIndexesExtractor", e.extractor) + } + if ex.SkipRequest { return nil } - for _, schema := range schemas { - if ok && extractor.Filter("constraint_schema", schema.L) { + schemas, tables, err := ex.ListSchemasAndTables(ctx, e.is) + if err != nil { + return errors.Trace(err) + } + rows := make([][]types.Datum, 0, len(tables)) + for i, table := range tables { + schema := schemas[i] + if checker != nil && !checker.RequestVerification(sctx.GetSessionVars().ActiveRoles, schema.L, table.Name.L, "", mysql.AllPrivMask) { continue } - tables, err := e.is.SchemaTableInfos(ctx, schema) - if err != nil { - return errors.Trace(err) - } - for _, table := range tables { - if ok && extractor.Filter("table_name", table.Name.L) { - continue - } - if checker != nil && !checker.RequestVerification(sctx.GetSessionVars().ActiveRoles, schema.L, table.Name.L, "", mysql.AllPrivMask) { - continue - } - rs := keyColumnUsageInTable(schema, table) - rows = append(rows, rs...) + if ex.Filter("constraint_schema", schema.O) { + continue } + rs := keyColumnUsageInTable(schema, table, ex) + rows = append(rows, rs...) } e.rows = rows return nil @@ -1793,27 +1748,29 @@ func (e *memtableRetriever) setDataForMetricTables() { e.rows = rows } -func keyColumnUsageInTable(schema model.CIStr, table *model.TableInfo) [][]types.Datum { +func keyColumnUsageInTable(schema model.CIStr, table *model.TableInfo, extractor *plannercore.InfoSchemaKeyColumnUsageExtractor) [][]types.Datum { var rows [][]types.Datum if table.PKIsHandle { - for _, col := range table.Columns { - if mysql.HasPriKeyFlag(col.GetFlag()) { - record := types.MakeDatums( - infoschema.CatalogVal, // CONSTRAINT_CATALOG - schema.O, // CONSTRAINT_SCHEMA - infoschema.PrimaryConstraint, // CONSTRAINT_NAME - infoschema.CatalogVal, // TABLE_CATALOG - schema.O, // TABLE_SCHEMA - table.Name.O, // TABLE_NAME - col.Name.O, // COLUMN_NAME - 1, // ORDINAL_POSITION - 1, // POSITION_IN_UNIQUE_CONSTRAINT - nil, // REFERENCED_TABLE_SCHEMA - nil, // REFERENCED_TABLE_NAME - nil, // REFERENCED_COLUMN_NAME - ) - rows = append(rows, record) - break + if extractor == nil || !extractor.Filter("constraint_name", lowerPrimaryKeyName) { + for _, col := range table.Columns { + if mysql.HasPriKeyFlag(col.GetFlag()) { + record := types.MakeDatums( + infoschema.CatalogVal, // CONSTRAINT_CATALOG + schema.O, // CONSTRAINT_SCHEMA + infoschema.PrimaryConstraint, // CONSTRAINT_NAME + infoschema.CatalogVal, // TABLE_CATALOG + schema.O, // TABLE_SCHEMA + table.Name.O, // TABLE_NAME + col.Name.O, // COLUMN_NAME + 1, // ORDINAL_POSITION + 1, // POSITION_IN_UNIQUE_CONSTRAINT + nil, // REFERENCED_TABLE_SCHEMA + nil, // REFERENCED_TABLE_NAME + nil, // REFERENCED_COLUMN_NAME + ) + rows = append(rows, record) + break + } } } } @@ -1823,14 +1780,22 @@ func keyColumnUsageInTable(schema model.CIStr, table *model.TableInfo) [][]types } for _, index := range table.Indices { var idxName string + var filterIdxName string if index.Primary { - idxName = infoschema.PrimaryConstraint + idxName = mysql.PrimaryKeyName + filterIdxName = lowerPrimaryKeyName } else if index.Unique { idxName = index.Name.O + filterIdxName = index.Name.L } else { // Only handle unique/primary key continue } + + if extractor != nil && extractor.Filter("constraint_name", filterIdxName) { + continue + } + for i, key := range index.Columns { col := nameToCol[key.Name.L] if col.Hidden { @@ -1854,6 +1819,10 @@ func keyColumnUsageInTable(schema model.CIStr, table *model.TableInfo) [][]types } } for _, fk := range table.ForeignKeys { + if extractor != nil && extractor.Filter("constraint_name", fk.Name.L) { + continue + } + for i, key := range fk.Cols { fkRefCol := "" if len(fk.RefCols) > i { @@ -1880,21 +1849,6 @@ func keyColumnUsageInTable(schema model.CIStr, table *model.TableInfo) [][]types return rows } -func ensureSchemaTables(ctx context.Context, is infoschema.InfoSchema, schemaNames []model.CIStr) []*model.DBInfo { - // For infoschema v2, Tables of DBInfo could be missing. - res := make([]*model.DBInfo, 0, len(schemaNames)) - for _, dbName := range schemaNames { - dbInfoRaw, _ := is.SchemaByName(dbName) - dbInfo := dbInfoRaw.Clone() - dbInfo.Tables = dbInfo.Tables[:0] - var err error - dbInfo.Tables, err = is.SchemaTableInfos(ctx, dbName) - terror.Log(err) - res = append(res, dbInfo) - } - return res -} - func (e *memtableRetriever) setDataForTiKVRegionStatus(ctx context.Context, sctx sessionctx.Context) (err error) { checker := privilege.GetPrivilegeManager(sctx) var extractorTableIDs []int64 @@ -1936,9 +1890,7 @@ func (e *memtableRetriever) setDataForTiKVRegionStatus(ctx context.Context, sctx return err } } - schemaNames := is.AllSchemaNames() - schemas := ensureSchemaTables(ctx, is, schemaNames) - tableInfos := tikvHelper.GetRegionsTableInfo(allRegionsInfo, schemas) + tableInfos := tikvHelper.GetRegionsTableInfo(allRegionsInfo, is, nil) for i := range allRegionsInfo.Regions { regionTableList := tableInfos[allRegionsInfo.Regions[i].ID] if len(regionTableList) == 0 { @@ -1960,7 +1912,7 @@ func (e *memtableRetriever) setDataForTiKVRegionStatus(ctx context.Context, sctx } func (e *memtableRetriever) getRegionsInfoForTable(ctx context.Context, h *helper.Helper, is infoschema.InfoSchema, tableID int64) (*pd.RegionsInfo, error) { - tbl, _ := is.TableByID(tableID) + tbl, _ := is.TableByID(ctx, tableID) if tbl == nil { return nil, infoschema.ErrTableExists.GenWithStackByArgs(tableID) } @@ -2065,13 +2017,13 @@ func (e *memtableRetriever) setDataForTiDBHotRegions(ctx context.Context, sctx s Store: tikvStore, RegionCache: tikvStore.GetRegionCache(), } - schemas := tikvHelper.FilterMemDBs(sessiontxn.GetTxnManager(sctx).GetTxnInfoSchema().AllSchemas()) - metrics, err := tikvHelper.ScrapeHotInfo(ctx, helper.HotRead, schemas) + is := sessiontxn.GetTxnManager(sctx).GetTxnInfoSchema() + metrics, err := tikvHelper.ScrapeHotInfo(ctx, helper.HotRead, is, tikvHelper.FilterMemDBs) if err != nil { return err } e.setDataForHotRegionByMetrics(metrics, "read") - metrics, err = tikvHelper.ScrapeHotInfo(ctx, helper.HotWrite, schemas) + metrics, err = tikvHelper.ScrapeHotInfo(ctx, helper.HotWrite, is, nil) if err != nil { return err } @@ -2109,30 +2061,31 @@ func (e *memtableRetriever) setDataForHotRegionByMetrics(metrics []helper.HotTab } // setDataFromTableConstraints constructs data for table information_schema.constraints.See https://dev.mysql.com/doc/refman/5.7/en/table-constraints-table.html -func (e *memtableRetriever) setDataFromTableConstraints(ctx context.Context, sctx sessionctx.Context, schemas []model.CIStr) error { +func (e *memtableRetriever) setDataFromTableConstraints(ctx context.Context, sctx sessionctx.Context) error { checker := privilege.GetPrivilegeManager(sctx) - extractor, ok := e.extractor.(*plannercore.InfoSchemaTablesExtractor) - if ok && extractor.SkipRequest { + ex, ok := e.extractor.(*plannercore.InfoSchemaTableConstraintsExtractor) + if !ok { + return errors.Errorf("wrong extractor type: %T, expected InfoSchemaIndexesExtractor", e.extractor) + } + if ex.SkipRequest { return nil } - var rows [][]types.Datum - for _, schema := range schemas { - if ok && extractor.Filter("constraint_schema", schema.L) { + schemas, tables, err := ex.ListSchemasAndTables(ctx, e.is) + if err != nil { + return errors.Trace(err) + } + rows := make([][]types.Datum, 0, len(tables)) + for i, tbl := range tables { + schema := schemas[i] + if ex.Filter("constraint_schema", schema.L) { continue } - tables, err := e.is.SchemaTableInfos(ctx, schema) - if err != nil { - return errors.Trace(err) + if checker != nil && !checker.RequestVerification(sctx.GetSessionVars().ActiveRoles, schema.L, tbl.Name.L, "", mysql.AllPrivMask) { + continue } - for _, tbl := range tables { - if ok && extractor.Filter("table_name", tbl.Name.L) { - continue - } - if checker != nil && !checker.RequestVerification(sctx.GetSessionVars().ActiveRoles, schema.L, tbl.Name.L, "", mysql.AllPrivMask) { - continue - } - if tbl.PKIsHandle { + if tbl.PKIsHandle { + if !ex.Filter("constraint_name", lowerPrimaryKeyName) { record := types.MakeDatums( infoschema.CatalogVal, // CONSTRAINT_CATALOG schema.O, // CONSTRAINT_SCHEMA @@ -2143,41 +2096,50 @@ func (e *memtableRetriever) setDataFromTableConstraints(ctx context.Context, sct ) rows = append(rows, record) } + } - for _, idx := range tbl.Indices { - var cname, ctype string - if idx.Primary { - cname = mysql.PrimaryKeyName - ctype = infoschema.PrimaryKeyType - } else if idx.Unique { - cname = idx.Name.O - ctype = infoschema.UniqueKeyType - } else { - // The index has no constriant. - continue - } - record := types.MakeDatums( - infoschema.CatalogVal, // CONSTRAINT_CATALOG - schema.O, // CONSTRAINT_SCHEMA - cname, // CONSTRAINT_NAME - schema.O, // TABLE_SCHEMA - tbl.Name.O, // TABLE_NAME - ctype, // CONSTRAINT_TYPE - ) - rows = append(rows, record) + for _, idx := range tbl.Indices { + var cname, ctype string + var filterName string + if idx.Primary { + cname = mysql.PrimaryKeyName + filterName = lowerPrimaryKeyName + ctype = infoschema.PrimaryKeyType + } else if idx.Unique { + cname = idx.Name.O + filterName = idx.Name.L + ctype = infoschema.UniqueKeyType + } else { + // The index has no constriant. + continue } - // TiDB includes foreign key information for compatibility but foreign keys are not yet enforced. - for _, fk := range tbl.ForeignKeys { - record := types.MakeDatums( - infoschema.CatalogVal, // CONSTRAINT_CATALOG - schema.O, // CONSTRAINT_SCHEMA - fk.Name.O, // CONSTRAINT_NAME - schema.O, // TABLE_SCHEMA - tbl.Name.O, // TABLE_NAME - infoschema.ForeignKeyType, // CONSTRAINT_TYPE - ) - rows = append(rows, record) + if ex.Filter("constraint_name", filterName) { + continue + } + record := types.MakeDatums( + infoschema.CatalogVal, // CONSTRAINT_CATALOG + schema.O, // CONSTRAINT_SCHEMA + cname, // CONSTRAINT_NAME + schema.O, // TABLE_SCHEMA + tbl.Name.O, // TABLE_NAME + ctype, // CONSTRAINT_TYPE + ) + rows = append(rows, record) + } + // TiDB includes foreign key information for compatibility but foreign keys are not yet enforced. + for _, fk := range tbl.ForeignKeys { + if ex.Filter("constraint_name", fk.Name.L) { + continue } + record := types.MakeDatums( + infoschema.CatalogVal, // CONSTRAINT_CATALOG + schema.O, // CONSTRAINT_SCHEMA + fk.Name.O, // CONSTRAINT_NAME + schema.O, // TABLE_SCHEMA + tbl.Name.O, // TABLE_NAME + infoschema.ForeignKeyType, // CONSTRAINT_TYPE + ) + rows = append(rows, record) } } e.rows = rows @@ -2567,46 +2529,42 @@ func (e *memtableRetriever) setDataForServersInfo(ctx sessionctx.Context) error return nil } -func (e *memtableRetriever) setDataFromSequences(ctx context.Context, sctx sessionctx.Context, schemas []model.CIStr) error { +func (e *memtableRetriever) setDataFromSequences(ctx context.Context, sctx sessionctx.Context) error { checker := privilege.GetPrivilegeManager(sctx) - extractor, ok := e.extractor.(*plannercore.InfoSchemaTablesExtractor) - if ok && extractor.SkipRequest { + extractor, ok := e.extractor.(*plannercore.InfoSchemaSequenceExtractor) + if !ok { + return errors.Errorf("wrong extractor type: %T, expected InfoSchemaSequenceExtractor", e.extractor) + } + if extractor.SkipRequest { return nil } - var rows [][]types.Datum - for _, schema := range schemas { - if ok && extractor.Filter("sequence_schema", schema.L) { + schemas, tables, err := extractor.ListSchemasAndTables(ctx, e.is) + if err != nil { + return errors.Trace(err) + } + rows := make([][]types.Datum, 0, len(tables)) + for i, table := range tables { + schema := schemas[i] + if !table.IsSequence() { continue } - tables, err := e.is.SchemaTableInfos(ctx, schema) - if err != nil { - return errors.Trace(err) - } - for _, table := range tables { - if ok && extractor.Filter("sequence_name", table.Name.L) { - continue - } - if !table.IsSequence() { - continue - } - if checker != nil && !checker.RequestVerification(sctx.GetSessionVars().ActiveRoles, schema.L, table.Name.L, "", mysql.AllPrivMask) { - continue - } - record := types.MakeDatums( - infoschema.CatalogVal, // TABLE_CATALOG - schema.O, // SEQUENCE_SCHEMA - table.Name.O, // SEQUENCE_NAME - table.Sequence.Cache, // Cache - table.Sequence.CacheValue, // CACHE_VALUE - table.Sequence.Cycle, // CYCLE - table.Sequence.Increment, // INCREMENT - table.Sequence.MaxValue, // MAXVALUE - table.Sequence.MinValue, // MINVALUE - table.Sequence.Start, // START - table.Sequence.Comment, // COMMENT - ) - rows = append(rows, record) + if checker != nil && !checker.RequestVerification(sctx.GetSessionVars().ActiveRoles, schema.L, table.Name.L, "", mysql.AllPrivMask) { + continue } + record := types.MakeDatums( + infoschema.CatalogVal, // TABLE_CATALOG + schema.O, // SEQUENCE_SCHEMA + table.Name.O, // SEQUENCE_NAME + table.Sequence.Cache, // Cache + table.Sequence.CacheValue, // CACHE_VALUE + table.Sequence.Cycle, // CYCLE + table.Sequence.Increment, // INCREMENT + table.Sequence.MaxValue, // MAXVALUE + table.Sequence.MinValue, // MINVALUE + table.Sequence.Start, // START + table.Sequence.Comment, // COMMENT + ) + rows = append(rows, record) } e.rows = rows return nil @@ -2622,7 +2580,7 @@ func (e *memtableRetriever) dataForTableTiFlashReplica(_ context.Context, sctx s rs := e.is.ListTablesWithSpecialAttribute(infoschema.TiFlashAttribute) for _, schema := range rs { for _, tbl := range schema.TableInfos { - if checker != nil && !checker.RequestVerification(sctx.GetSessionVars().ActiveRoles, schema.DBName, tbl.Name.L, "", mysql.AllPrivMask) { + if checker != nil && !checker.RequestVerification(sctx.GetSessionVars().ActiveRoles, schema.DBName.L, tbl.Name.L, "", mysql.AllPrivMask) { continue } var progress float64 @@ -2645,7 +2603,7 @@ func (e *memtableRetriever) dataForTableTiFlashReplica(_ context.Context, sctx s progressString := types.TruncateFloatToString(progress, 2) progress, _ = strconv.ParseFloat(progressString, 64) record := types.MakeDatums( - schema.DBName, // TABLE_SCHEMA + schema.DBName.O, // TABLE_SCHEMA tbl.Name.O, // TABLE_NAME tbl.ID, // TABLE_ID int64(tbl.TiFlashReplica.Count), // REPLICA_COUNT @@ -3604,10 +3562,10 @@ func (e *memtableRetriever) setDataFromRunawayWatches(sctx sessionctx.Context) e watch.ResourceGroupName, watch.StartTime.UTC().Format(time.DateTime), watch.EndTime.UTC().Format(time.DateTime), - rmpb.RunawayWatchType_name[int32(watch.Watch)], + watch.Watch.String(), watch.WatchText, watch.Source, - rmpb.RunawayAction_name[int32(action)], + action.String(), ) if watch.EndTime.Equal(resourcegroup.NullTime) { row[3].SetString("UNLIMITED", mysql.DefaultCollationName) @@ -3636,7 +3594,8 @@ func (e *memtableRetriever) setDataFromResourceGroups() error { burstable := burstdisableStr priority := model.PriorityValueToName(uint64(group.Priority)) fillrate := unlimitedFillRate - isDefaultInReservedSetting := group.Name == resourcegroup.DefaultResourceGroupName && group.RUSettings.RU.Settings.FillRate == math.MaxInt32 + // RU_PER_SEC = unlimited like the default group settings. + isDefaultInReservedSetting := group.RUSettings.RU.Settings.FillRate == math.MaxInt32 if !isDefaultInReservedSetting { fillrate = strconv.FormatUint(group.RUSettings.RU.Settings.FillRate, 10) } @@ -3714,38 +3673,34 @@ func (e *memtableRetriever) setDataFromKeywords() error { return nil } -func (e *memtableRetriever) setDataFromIndexUsage(ctx context.Context, sctx sessionctx.Context, schemas []model.CIStr) error { +func (e *memtableRetriever) setDataFromIndexUsage(ctx context.Context, sctx sessionctx.Context) error { dom := domain.GetDomain(sctx) rows := make([][]types.Datum, 0, 100) checker := privilege.GetPrivilegeManager(sctx) - extractor, ok := e.extractor.(*plannercore.InfoSchemaTablesExtractor) - if ok && extractor.SkipRequest { + extractor, ok := e.extractor.(*plannercore.InfoSchemaIndexUsageExtractor) + if !ok { + return errors.Errorf("wrong extractor type: %T, expected InfoSchemaIndexUsageExtractor", e.extractor) + } + if extractor.SkipRequest { return nil } + schemas := extractor.ListSchemas(e.is) for _, schema := range schemas { - if ok && extractor.Filter("table_schema", schema.L) { - continue - } - tables, err := dom.InfoSchema().SchemaTableInfos(ctx, schema) + tbls, err := extractor.ListTables(ctx, schema, e.is) if err != nil { return errors.Trace(err) } - for _, tbl := range tables { - if ok && extractor.Filter("table_name", tbl.Name.L) { - continue - } - allowed := checker == nil || checker.RequestVerification( + + for _, tbl := range tbls { + if checker != nil && !checker.RequestVerification( sctx.GetSessionVars().ActiveRoles, - schema.L, tbl.Name.L, "", mysql.AllPrivMask) - if !allowed { + schema.L, tbl.Name.L, "", mysql.AllPrivMask) { continue } - for _, idx := range tbl.Indices { - if ok && extractor.Filter("index_name", idx.Name.L) { - continue - } + idxs := extractor.ListIndexes(tbl) + for _, idx := range idxs { row := make([]types.Datum, 0, 14) usage := dom.StatsHandle().GetIndexUsage(tbl.ID, idx.ID) row = append(row, types.NewStringDatum(schema.O)) @@ -3773,8 +3728,8 @@ func (e *memtableRetriever) setDataFromIndexUsage(ctx context.Context, sctx sess return nil } -func (e *memtableRetriever) setDataForClusterIndexUsage(ctx context.Context, sctx sessionctx.Context, schemas []model.CIStr) error { - err := e.setDataFromIndexUsage(ctx, sctx, schemas) +func (e *memtableRetriever) setDataFromClusterIndexUsage(ctx context.Context, sctx sessionctx.Context) error { + err := e.setDataFromIndexUsage(ctx, sctx) if err != nil { return errors.Trace(err) } diff --git a/pkg/executor/infoschema_reader_internal_test.go b/pkg/executor/infoschema_reader_internal_test.go index 2bb33bca1050b..8f4cbfa28215f 100644 --- a/pkg/executor/infoschema_reader_internal_test.go +++ b/pkg/executor/infoschema_reader_internal_test.go @@ -21,6 +21,7 @@ import ( "github.com/pingcap/tidb/pkg/infoschema" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/mysql" + plannercore "github.com/pingcap/tidb/pkg/planner/core" "github.com/pingcap/tidb/pkg/types" "github.com/stretchr/testify/require" ) @@ -71,12 +72,9 @@ func TestSetDataFromCheckConstraints(t *testing.T) { }, } mockIs := infoschema.MockInfoSchema(tblInfos) - mt := memtableRetriever{is: mockIs} + mt := memtableRetriever{is: mockIs, extractor: &plannercore.InfoSchemaCheckConstraintsExtractor{}} sctx := defaultCtx() - dbs := []model.CIStr{ - model.NewCIStr("test"), - } - err := mt.setDataFromCheckConstraints(context.Background(), sctx, dbs) + err := mt.setDataFromCheckConstraints(context.Background(), sctx) require.NoError(t, err) require.Equal(t, 1, len(mt.rows)) // 1 row @@ -136,10 +134,8 @@ func TestSetDataFromTiDBCheckConstraints(t *testing.T) { } mockIs := infoschema.MockInfoSchema(tblInfos) mt.is = mockIs - dbs := []model.CIStr{ - model.NewCIStr("test"), - } - err := mt.setDataFromTiDBCheckConstraints(context.Background(), sctx, dbs) + mt.extractor = &plannercore.InfoSchemaTiDBCheckConstraintsExtractor{} + err := mt.setDataFromTiDBCheckConstraints(context.Background(), sctx) require.NoError(t, err) require.Equal(t, 1, len(mt.rows)) // 1 row diff --git a/pkg/executor/infoschema_reader_test.go b/pkg/executor/infoschema_reader_test.go index 00ee5977ae7ef..bd0928d146069 100644 --- a/pkg/executor/infoschema_reader_test.go +++ b/pkg/executor/infoschema_reader_test.go @@ -489,6 +489,124 @@ func TestTiFlashSystemTableWithTiFlashV640(t *testing.T) { tk.MustQuery("show warnings").Check(testkit.Rows()) } +func TestColumnTable(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table tbl1(col_1 int primary key, col_2 int, col_4 int);") + tk.MustExec("create table tbl2(col_1 int primary key, col_2 int, col_3 int);") + tk.MustExec("create view view1 as select min(col_1), col_2, max(col_4) as max4 from tbl1 group by col_2;") + + tk.MustQuery("select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.columns where TABLE_SCHEMA = 'test';").Check( + testkit.RowsWithSep("|", + "test|tbl1|col_1", + "test|tbl1|col_2", + "test|tbl1|col_4", + "test|tbl2|col_1", + "test|tbl2|col_2", + "test|tbl2|col_3", + "test|view1|min(col_1)", + "test|view1|col_2", + "test|view1|max4")) + tk.MustQuery(`select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.columns + where TABLE_NAME = 'view1' or TABLE_NAME = 'tbl1'`).Check( + testkit.RowsWithSep("|", + "test|tbl1|col_1", + "test|tbl1|col_2", + "test|tbl1|col_4", + "test|view1|min(col_1)", + "test|view1|col_2", + "test|view1|max4")) + tk.MustQuery("select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.columns where COLUMN_NAME = \"col_2\";").Check( + testkit.RowsWithSep("|", + "test|tbl1|col_2", + "test|tbl2|col_2", + "test|view1|col_2")) + tk.MustQuery(`select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.columns + where TABLE_SCHEMA = 'test' and TABLE_NAME = 'tbl2';`).Check( + testkit.RowsWithSep("|", + "test|tbl2|col_1", + "test|tbl2|col_2", + "test|tbl2|col_3")) + tk.MustQuery(`select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.columns + where TABLE_SCHEMA = 'test' and COLUMN_NAME = 'col_4'`).Check( + testkit.RowsWithSep("|", + "test|tbl1|col_4")) + tk.MustQuery(`select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.columns + where TABLE_NAME = 'view1' and COLUMN_NAME like 'm%%';`).Check( + testkit.RowsWithSep("|", + "test|view1|min(col_1)", + "test|view1|max4")) + tk.MustQuery(`select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.columns + where TABLE_SCHEMA = 'test' and TABLE_NAME = 'tbl1' and COLUMN_NAME = 'col_2';`).Check( + testkit.RowsWithSep("|", + "test|tbl1|col_2")) + tk.MustQuery(`select count(*) from information_schema.columns;`).Check( + testkit.RowsWithSep("|", "4923")) +} + +func TestIndexUsageTable(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table idt1(col_1 int primary key, col_2 int, index idx_1(col_1), index idx_2(col_2), index idx_3(col_1, col_2));") + tk.MustExec("create table idt2(col_1 int primary key, col_2 int, index idx_1(col_1), index idx_2(col_2), index idx_4(col_2, col_1));") + + tk.MustQuery(`select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage + where TABLE_SCHEMA = 'test';`).Check( + testkit.RowsWithSep("|", + "test|idt1|idx_1", + "test|idt1|idx_2", + "test|idt1|idx_3", + "test|idt2|idx_1", + "test|idt2|idx_2", + "test|idt2|idx_4")) + tk.MustQuery(`select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where TABLE_NAME = 'idt1'`).Check( + testkit.RowsWithSep("|", + "test|idt1|idx_1", + "test|idt1|idx_2", + "test|idt1|idx_3")) + tk.MustQuery("select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where INDEX_NAME = 'IDX_3'").Check( + testkit.RowsWithSep("|", + "test|idt1|idx_3")) + tk.MustQuery(`select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage + where TABLE_SCHEMA = 'test' and TABLE_NAME = 'idt1';`).Check( + testkit.RowsWithSep("|", + "test|idt1|idx_1", + "test|idt1|idx_2", + "test|idt1|idx_3")) + tk.MustQuery(`select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage + where TABLE_SCHEMA = 'test' and INDEX_NAME = 'idx_2';`).Check( + testkit.RowsWithSep("|", + "test|idt1|idx_2", + "test|idt2|idx_2")) + tk.MustQuery(`select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage + where TABLE_NAME = 'idt1' and INDEX_NAME = 'idx_1';`).Check( + testkit.RowsWithSep("|", + "test|idt1|idx_1")) + tk.MustQuery(`select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage + where TABLE_SCHEMA = 'test' and TABLE_NAME = 'idt2' and INDEX_NAME = 'idx_4';`).Check( + testkit.RowsWithSep("|", + "test|idt2|idx_4")) + tk.MustQuery(`select count(*) from information_schema.tidb_index_usage;`).Check( + testkit.RowsWithSep("|", "72")) + + tk.MustQuery(`select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage + where TABLE_SCHEMA = 'test1';`).Check(testkit.Rows()) + tk.MustQuery(`select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage + where TABLE_NAME = 'idt3';`).Check(testkit.Rows()) + tk.MustQuery(`select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage + where INDEX_NAME = 'IDX_5';`).Check(testkit.Rows()) + tk.MustQuery(`select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage + where TABLE_SCHEMA = 'test' and TABLE_NAME = 'idt0';`).Check(testkit.Rows()) + tk.MustQuery(`select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage + where TABLE_SCHEMA = 'test1' and INDEX_NAME = 'idx_2';`).Check(testkit.Rows()) + tk.MustQuery(`select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage + where TABLE_NAME = 'idt2' and INDEX_NAME = 'idx_3';`).Check(testkit.Rows()) + tk.MustQuery(`select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage + where TABLE_SCHEMA = 'test' and TABLE_NAME = 'idt1' and INDEX_NAME = 'idx_4';`).Check(testkit.Rows()) +} + // https://github.com/pingcap/tidb/issues/32459. func TestJoinSystemTableContainsView(t *testing.T) { store := testkit.CreateMockStore(t) @@ -500,7 +618,7 @@ func TestJoinSystemTableContainsView(t *testing.T) { // This is used by grafana when TiDB is specified as the data source. // See https://github.com/grafana/grafana/blob/e86b6662a187c77656f72bef3b0022bf5ced8b98/public/app/plugins/datasource/mysql/meta_query.ts#L31 for i := 0; i < 10; i++ { - tk.MustQuery(` + tk.MustQueryWithContext(context.Background(), ` SELECT table_name as table_name, ( SELECT @@ -627,3 +745,152 @@ func TestReferencedTableSchemaWithForeignKey(t *testing.T) { WHERE table_name = 't2' AND table_schema = 'test2';`).Check(testkit.Rows( "id id t1 test2 test")) } + +func TestSameTableNameInTwoSchemas(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec("create database test1;") + tk.MustExec("create database test2;") + tk.MustExec("create table test1.t (a int);") + tk.MustExec("create table test2.t (a int);") + + rs := tk.MustQuery("select tidb_table_id from information_schema.tables where table_name = 't' and table_schema = 'test1';").Rows() + t1ID, err := strconv.Atoi(rs[0][0].(string)) + require.NoError(t, err) + rs = tk.MustQuery("select tidb_table_id from information_schema.tables where table_name = 't' and table_schema = 'test2';").Rows() + t2ID, err := strconv.Atoi(rs[0][0].(string)) + require.NoError(t, err) + + tk.MustQuery(fmt.Sprintf("select table_schema, table_name, tidb_table_id from information_schema.tables where tidb_table_id = %d;", t1ID)). + Check(testkit.Rows(fmt.Sprintf("test1 t %d", t1ID))) + tk.MustQuery(fmt.Sprintf("select table_schema, table_name, tidb_table_id from information_schema.tables where tidb_table_id = %d;", t2ID)). + Check(testkit.Rows(fmt.Sprintf("test2 t %d", t2ID))) + + tk.MustQuery(fmt.Sprintf("select table_schema, table_name, tidb_table_id from information_schema.tables where table_name = 't' and tidb_table_id = %d;", t1ID)). + Check(testkit.Rows(fmt.Sprintf("test1 t %d", t1ID))) + tk.MustQuery(fmt.Sprintf("select table_schema, table_name, tidb_table_id from information_schema.tables where table_schema = 'test1' and tidb_table_id = %d;", t1ID)). + Check(testkit.Rows(fmt.Sprintf("test1 t %d", t1ID))) + tk.MustQuery(fmt.Sprintf("select table_schema, table_name, tidb_table_id from information_schema.tables where table_name = 'unknown' and tidb_table_id = %d;", t1ID)). + Check(testkit.Rows()) + tk.MustQuery(fmt.Sprintf("select table_schema, table_name, tidb_table_id from information_schema.tables where table_schema = 'unknown' and tidb_table_id = %d;", t1ID)). + Check(testkit.Rows()) +} + +func TestInfoSchemaConditionWorks(t *testing.T) { + // this test creates table in different schema with different index name, and check + // the condition in the following columns whether work as expected. + // + // - "table_schema" + // - "constraint_schema" + // - "table_name" + // - "constraint_name" + // - "partition_name" + // - "schema_name" + // - "index_name" + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + for db := 0; db < 2; db++ { + for table := 0; table < 2; table++ { + tk.MustExec(fmt.Sprintf("create database if not exists Db%d;", db)) + tk.MustExec(fmt.Sprintf(`create table Db%d.Table%d (id int primary key, data0 varchar(255), data1 varchar(255)) + partition by range (id) ( + partition p0 values less than (10), + partition p1 values less than (20) + );`, db, table)) + for index := 0; index < 2; index++ { + tk.MustExec(fmt.Sprintf("create unique index Idx%d on Db%d.Table%d (id, data%d);", index, db, table, index)) + } + } + } + + testColumns := map[string]string{ + "table_schema": "db", + "constraint_schema": "db", + "table_name": "table", + "constraint_name": "idx", + "partition_name": "p", + "schema_name": "db", + "index_name": "idx", + } + testTables := []string{} + for _, row := range tk.MustQuery("show tables in information_schema").Rows() { + tableName := row[0].(string) + // exclude some tables which cannot run without TiKV. + if strings.HasPrefix(tableName, "CLUSTER_") || + strings.HasPrefix(tableName, "INSPECTION_") || + strings.HasPrefix(tableName, "METRICS_") || + strings.HasPrefix(tableName, "TIFLASH_") || + strings.HasPrefix(tableName, "TIKV_") || + strings.HasPrefix(tableName, "USER_") || + tableName == "TABLE_STORAGE_STATS" || + strings.Contains(tableName, "REGION") { + continue + } + testTables = append(testTables, row[0].(string)) + } + for _, table := range testTables { + rs, err := tk.Exec(fmt.Sprintf("select * from information_schema.%s", table)) + require.NoError(t, err) + cols := rs.Fields() + + chk := rs.NewChunk(nil) + rowCount := 0 + for { + err := rs.Next(context.Background(), chk) + require.NoError(t, err) + if chk.NumRows() == 0 { + break + } + rowCount += chk.NumRows() + } + if rowCount == 0 { + // TODO: find a way to test the table without any rows by adding some rows to them. + continue + } + for i := 0; i < len(cols); i++ { + colName := cols[i].Column.Name.L + if valPrefix, ok := testColumns[colName]; ok { + for j := 0; j < 2; j++ { + sql := fmt.Sprintf("select * from information_schema.%s where %s = '%s%d';", + table, colName, valPrefix, j) + rows := tk.MustQuery(sql).Rows() + rowCountWithCondition := len(rows) + require.Less(t, rowCountWithCondition, rowCount, "%s has no effect on %s. SQL: %s", colName, table, sql) + + // check the condition works as expected + for _, row := range rows { + require.Equal(t, fmt.Sprintf("%s%d", valPrefix, j), strings.ToLower(row[i].(string)), + "%s has no effect on %s. SQL: %s", colName, table, sql) + } + } + } + } + } + + // Test the PRIMARY constraint filter + rows := tk.MustQuery("select constraint_name, table_schema from information_schema.table_constraints where constraint_name = 'PRIMARY' and table_schema = 'db0';").Rows() + require.Equal(t, 2, len(rows)) + for _, row := range rows { + require.Equal(t, "PRIMARY", row[0].(string)) + require.Equal(t, "Db0", row[1].(string)) + } + rows = tk.MustQuery("select constraint_name, table_schema from information_schema.key_column_usage where constraint_name = 'PRIMARY' and table_schema = 'db1';").Rows() + require.Equal(t, 2, len(rows)) + for _, row := range rows { + require.Equal(t, "PRIMARY", row[0].(string)) + require.Equal(t, "Db1", row[1].(string)) + } + + // Test the `partition_name` filter + tk.MustExec("create database if not exists db_no_partition;") + tk.MustExec("create table db_no_partition.t_no_partition (id int primary key, data0 varchar(255), data1 varchar(255));") + tk.MustExec(`create table db_no_partition.t_partition (id int primary key, data0 varchar(255), data1 varchar(255)) + partition by range (id) ( + partition p0 values less than (10), + partition p1 values less than (20) + );`) + rows = tk.MustQuery("select * from information_schema.partitions where table_schema = 'db_no_partition' and partition_name is NULL;").Rows() + require.Equal(t, 1, len(rows)) + rows = tk.MustQuery("select * from information_schema.partitions where table_schema = 'db_no_partition' and (partition_name is NULL or partition_name = 'p0');").Rows() + require.Equal(t, 2, len(rows)) +} diff --git a/pkg/executor/insert.go b/pkg/executor/insert.go index 0878dabf8be1d..a2b5174b075af 100644 --- a/pkg/executor/insert.go +++ b/pkg/executor/insert.go @@ -22,7 +22,6 @@ import ( "time" "github.com/pingcap/errors" - "github.com/pingcap/tidb/pkg/errctx" "github.com/pingcap/tidb/pkg/errno" "github.com/pingcap/tidb/pkg/executor/internal/exec" "github.com/pingcap/tidb/pkg/expression" @@ -31,6 +30,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/parser/terror" + "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/table" "github.com/pingcap/tidb/pkg/table/tables" "github.com/pingcap/tidb/pkg/tablecodec" @@ -47,6 +47,7 @@ import ( type InsertExec struct { *InsertValues OnDuplicate []*expression.Assignment + IgnoreErr bool evalBuffer4Dup chunk.MutRow curInsertVals chunk.MutRow row4Update []types.Datum @@ -66,7 +67,6 @@ func (e *InsertExec) exec(ctx context.Context, rows [][]types.Datum) error { // If tidb_batch_insert is ON and not in a transaction, we could use BatchInsert mode. sessVars := e.Ctx().GetSessionVars() defer sessVars.CleanBuffers() - ignoreErr := sessVars.StmtCtx.ErrGroupLevel(errctx.ErrGroupDupKey) != errctx.LevelError txn, err := e.Ctx().Txn(true) if err != nil { @@ -92,13 +92,14 @@ func (e *InsertExec) exec(ctx context.Context, rows [][]types.Datum) error { if err != nil { return err } - } else if ignoreErr { + } else if e.IgnoreErr { err := e.batchCheckAndInsert(ctx, rows, e.addRecord, false) if err != nil { return err } } else { start := time.Now() + dupKeyCheck := optimizeDupKeyCheckForNormalInsert(sessVars, txn) for i, row := range rows { var err error sizeHintStep := int(sessVars.ShardAllocateStep) @@ -108,9 +109,9 @@ func (e *InsertExec) exec(ctx context.Context, rows [][]types.Datum) error { if sizeHint > remain { sizeHint = remain } - err = e.addRecordWithAutoIDHint(ctx, row, sizeHint) + err = e.addRecordWithAutoIDHint(ctx, row, sizeHint, dupKeyCheck) } else { - err = e.addRecord(ctx, row) + err = e.addRecord(ctx, row, dupKeyCheck) } if err != nil { return err @@ -193,7 +194,7 @@ func (e *InsertValues) prefetchDataCache(ctx context.Context, txn kv.Transaction } // updateDupRow updates a duplicate row to a new row. -func (e *InsertExec) updateDupRow(ctx context.Context, idxInBatch int, txn kv.Transaction, row toBeCheckedRow, handle kv.Handle, _ []*expression.Assignment) error { +func (e *InsertExec) updateDupRow(ctx context.Context, idxInBatch int, txn kv.Transaction, row toBeCheckedRow, handle kv.Handle, _ []*expression.Assignment, dupKeyCheck table.DupKeyCheckMode) error { oldRow, err := getOldRow(ctx, e.Ctx(), txn, row.t, handle, e.GenExprs) if err != nil { return err @@ -204,7 +205,7 @@ func (e *InsertExec) updateDupRow(ctx context.Context, idxInBatch int, txn kv.Tr extraCols = e.Ctx().GetSessionVars().CurrInsertBatchExtraCols[idxInBatch] } - err = e.doDupRowUpdate(ctx, handle, oldRow, row.row, extraCols, e.OnDuplicate, idxInBatch) + err = e.doDupRowUpdate(ctx, handle, oldRow, row.row, extraCols, e.OnDuplicate, idxInBatch, dupKeyCheck) if kv.ErrKeyExists.Equal(err) || table.ErrCheckConstraintViolated.Equal(err) { ec := e.Ctx().GetSessionVars().StmtCtx.ErrCtx() return ec.HandleErrorWithAlias(kv.ErrKeyExists, err, err) @@ -236,6 +237,18 @@ func (e *InsertExec) batchUpdateDupRows(ctx context.Context, newRows [][]types.D e.stats.Prefetch += time.Since(prefetchStart) } + // Use `optimizeDupKeyCheckForUpdate` to determine the update operation when the row meets the conflict in + // `INSERT ... ON DUPLICATE KEY UPDATE` statement. + // Though it is in an insert statement, `ON DUP KEY UPDATE` follows the dup-key check behavior of update. + // For example, it will ignore variable `tidb_constraint_check_in_place`, see the test case: + // https://github.com/pingcap/tidb/blob/3117d3fae50bbb5dabcde7b9589f92bfbbda5dc6/pkg/executor/test/writetest/write_test.go#L419-L426 + updateDupKeyCheck := optimizeDupKeyCheckForUpdate(txn, e.IgnoreErr) + // Do not use `updateDupKeyCheck` for `AddRecord` because it is not optimized for insert. + // It seems that we can just use `DupKeyCheckSkip` here because all constraints are checked. + // But we still use `optimizeDupKeyCheckForNormalInsert` to make the refactor same behavior with the original code. + // TODO: just use `DupKeyCheckSkip` here. + addRecordDupKeyCheck := optimizeDupKeyCheckForNormalInsert(e.Ctx().GetSessionVars(), txn) + for i, r := range toBeCheckedRows { if r.handleKey != nil { handle, err := tablecodec.DecodeRowKey(r.handleKey.newKey) @@ -243,7 +256,7 @@ func (e *InsertExec) batchUpdateDupRows(ctx context.Context, newRows [][]types.D return err } - err = e.updateDupRow(ctx, i, txn, r, handle, e.OnDuplicate) + err = e.updateDupRow(ctx, i, txn, r, handle, e.OnDuplicate, updateDupKeyCheck) if err == nil { continue } @@ -260,7 +273,7 @@ func (e *InsertExec) batchUpdateDupRows(ctx context.Context, newRows [][]types.D if handle == nil { continue } - err = e.updateDupRow(ctx, i, txn, r, handle, e.OnDuplicate) + err = e.updateDupRow(ctx, i, txn, r, handle, e.OnDuplicate, updateDupKeyCheck) if err != nil { if kv.IsErrNotFound(err) { // Data index inconsistent? A unique key provide the handle information, but the @@ -282,7 +295,7 @@ func (e *InsertExec) batchUpdateDupRows(ctx context.Context, newRows [][]types.D // and key-values should be filled back to dupOldRowValues for the further row check, // due to there may be duplicate keys inside the insert statement. if newRows[i] != nil { - err := e.addRecord(ctx, newRows[i]) + err := e.addRecord(ctx, newRows[i], addRecordDupKeyCheck) if err != nil { return err } @@ -294,6 +307,41 @@ func (e *InsertExec) batchUpdateDupRows(ctx context.Context, newRows [][]types.D return nil } +// optimizeDupKeyCheckForNormalInsert trys to optimize the DupKeyCheckMode for an insert statement according to the +// transaction and system variables. +// If the DupKeyCheckMode of the current statement can be optimized, it will return `DupKeyCheckLazy` to avoid the +// redundant requests to TiKV, otherwise, `DupKeyCheckInPlace` will be returned. +// This method only works for "normal" insert statements, that means the options like "IGNORE" and "ON DUPLICATE KEY" +// in a statement are not considerate, and callers should handle the above cases by themselves. +func optimizeDupKeyCheckForNormalInsert(vars *variable.SessionVars, txn kv.Transaction) table.DupKeyCheckMode { + if !vars.ConstraintCheckInPlace || txn.IsPessimistic() || txn.IsPipelined() { + // We can just check duplicated key lazily without keys in storage for the below cases: + // - `txn.Pipelined()` is true. + // It means the user is using `@@tidb_dml_type="bulk"` to insert rows in bulk mode. + // DupKeyCheckLazy should be used to improve the performance. + // - The current transaction is pessimistic. The duplicate key check can be postponed to the lock stage. + // - The current transaction is optimistic but `tidb_constraint_check_in_place` is set to false. + return table.DupKeyCheckLazy + } + return table.DupKeyCheckInPlace +} + +// getPessimisticLazyCheckMode returns the lazy check mode for pessimistic txn. +// The returned `PessimisticLazyDupKeyCheckMode` only takes effect for pessimistic txn with `DupKeyCheckLazy`; +// otherwise, this option will be ignored. +func getPessimisticLazyCheckMode(vars *variable.SessionVars) table.PessimisticLazyDupKeyCheckMode { + if !vars.ConstraintCheckInPlacePessimistic && vars.InTxn() && !vars.InRestrictedSQL && vars.ConnectionID > 0 { + // We can postpone the duplicated key check to the prewrite stage when both of the following conditions are met: + // - `tidb_constraint_check_in_place_pessimistic='OFF'`. + // - The current transaction should be an explicit transaction because an autocommit txn cannot get + // any benefits from checking the duplicated key in the prewrite stage. + // - The current connection is a user connection, and we always check duplicated key in place for + // internal connections. + return table.DupKeyCheckInPrewrite + } + return table.DupKeyCheckInAcquireLock +} + // Next implements the Executor Next interface. func (e *InsertExec) Next(ctx context.Context, req *chunk.Chunk) error { req.Reset() @@ -379,7 +427,7 @@ func (e *InsertExec) initEvalBuffer4Dup() { // doDupRowUpdate updates the duplicate row. func (e *InsertExec) doDupRowUpdate(ctx context.Context, handle kv.Handle, oldRow []types.Datum, newRow []types.Datum, - extraCols []types.Datum, cols []*expression.Assignment, idxInBatch int) error { + extraCols []types.Datum, cols []*expression.Assignment, idxInBatch int, dupKeyMode table.DupKeyCheckMode) error { assignFlag := make([]bool, len(e.Table.WritableCols())) // See http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_values e.curInsertVals.SetDatums(newRow...) @@ -426,7 +474,7 @@ func (e *InsertExec) doDupRowUpdate(ctx context.Context, handle kv.Handle, oldRo } newData := e.row4Update[:len(oldRow)] - _, err := updateRecord(ctx, e.Ctx(), handle, oldRow, newData, assignFlag, e.Table, true, e.memTracker, e.fkChecks, e.fkCascades) + _, err := updateRecord(ctx, e.Ctx(), handle, oldRow, newData, assignFlag, e.Table, true, e.memTracker, e.fkChecks, e.fkCascades, dupKeyMode) if err != nil { return err } @@ -440,7 +488,7 @@ func (e *InsertExec) setMessage() { if e.SelectExec != nil || numRecords > 1 { numWarnings := stmtCtx.WarningCount() var numDuplicates uint64 - if stmtCtx.ErrGroupLevel(errctx.ErrGroupDupKey) != errctx.LevelError { + if e.IgnoreErr { // if ignoreErr numDuplicates = numRecords - stmtCtx.CopiedRows() } else { diff --git a/pkg/executor/insert_common.go b/pkg/executor/insert_common.go index f1353406bb287..27d6918a468a9 100644 --- a/pkg/executor/insert_common.go +++ b/pkg/executor/insert_common.go @@ -694,7 +694,7 @@ func (e *InsertValues) fillRow(ctx context.Context, row []types.Datum, hasValue // Handle exchange partition tbl := e.Table.Meta() if tbl.ExchangePartitionInfo != nil && tbl.GetPartitionInfo() == nil { - if err := checkRowForExchangePartition(e.Ctx().GetTableCtx(), row, tbl); err != nil { + if err := checkRowForExchangePartition(e.Ctx(), row, tbl); err != nil { return nil, err } } @@ -1190,11 +1190,9 @@ func (e *InsertValues) handleDuplicateKey(ctx context.Context, txn kv.Transactio // All duplicate rows will be ignored and appended as duplicate warnings. func (e *InsertValues) batchCheckAndInsert( ctx context.Context, rows [][]types.Datum, - addRecord func(ctx context.Context, row []types.Datum) error, + addRecord func(ctx context.Context, row []types.Datum, dupKeyCheck table.DupKeyCheckMode) error, replace bool, ) error { - // all the rows will be checked, so it is safe to set BatchCheck = true - e.Ctx().GetSessionVars().StmtCtx.BatchCheck = true defer tracing.StartRegion(ctx, "InsertValues.batchCheckAndInsert").End() start := time.Now() // Get keys need to be checked. @@ -1307,7 +1305,8 @@ func (e *InsertValues) batchCheckAndInsert( // it should be added to values map for the further row check. // There may be duplicate keys inside the insert statement. e.Ctx().GetSessionVars().StmtCtx.AddCopiedRows(1) - err = addRecord(ctx, rows[i]) + // all the rows have been checked, so it is safe to use DupKeyCheckSkip + err = addRecord(ctx, rows[i], table.DupKeyCheckSkip) if err != nil { // throw warning when violate check constraint if table.ErrCheckConstraintViolated.Equal(err) { @@ -1368,9 +1367,9 @@ func (e *InsertValues) removeRow( } if ph, ok := handle.(kv.PartitionHandle); ok { - err = e.Table.(table.PartitionedTable).GetPartition(ph.PartitionID).RemoveRecord(e.Ctx().GetTableCtx(), ph.Handle, oldRow) + err = e.Table.(table.PartitionedTable).GetPartition(ph.PartitionID).RemoveRecord(e.Ctx().GetTableCtx(), txn, ph.Handle, oldRow) } else { - err = r.t.RemoveRecord(e.Ctx().GetTableCtx(), handle, oldRow) + err = r.t.RemoveRecord(e.Ctx().GetTableCtx(), txn, handle, oldRow) } if err != nil { return false, err @@ -1405,23 +1404,24 @@ func (e *InsertValues) equalDatumsAsBinary(a []types.Datum, b []types.Datum) (bo return true, nil } -func (e *InsertValues) addRecord(ctx context.Context, row []types.Datum) error { - return e.addRecordWithAutoIDHint(ctx, row, 0) +func (e *InsertValues) addRecord(ctx context.Context, row []types.Datum, dupKeyCheck table.DupKeyCheckMode) error { + return e.addRecordWithAutoIDHint(ctx, row, 0, dupKeyCheck) } func (e *InsertValues) addRecordWithAutoIDHint( - ctx context.Context, row []types.Datum, reserveAutoIDCount int, + ctx context.Context, row []types.Datum, reserveAutoIDCount int, dupKeyCheck table.DupKeyCheckMode, ) (err error) { vars := e.Ctx().GetSessionVars() - if !vars.ConstraintCheckInPlace { - vars.PresumeKeyNotExists = true + txn, err := e.Ctx().Txn(true) + if err != nil { + return err } + pessimisticLazyCheck := getPessimisticLazyCheckMode(vars) if reserveAutoIDCount > 0 { - _, err = e.Table.AddRecord(e.Ctx().GetTableCtx(), row, table.WithCtx(ctx), table.WithReserveAutoIDHint(reserveAutoIDCount)) + _, err = e.Table.AddRecord(e.Ctx().GetTableCtx(), txn, row, table.WithCtx(ctx), table.WithReserveAutoIDHint(reserveAutoIDCount), dupKeyCheck, pessimisticLazyCheck) } else { - _, err = e.Table.AddRecord(e.Ctx().GetTableCtx(), row, table.WithCtx(ctx)) + _, err = e.Table.AddRecord(e.Ctx().GetTableCtx(), txn, row, table.WithCtx(ctx), dupKeyCheck, pessimisticLazyCheck) } - vars.PresumeKeyNotExists = false if err != nil { return err } @@ -1429,7 +1429,7 @@ func (e *InsertValues) addRecordWithAutoIDHint( if e.lastInsertID != 0 { vars.SetLastInsertID(e.lastInsertID) } - if !vars.StmtCtx.BatchCheck { + if dupKeyCheck != table.DupKeyCheckSkip { for _, fkc := range e.fkChecks { err = fkc.insertRowNeedToCheck(vars.StmtCtx, row) if err != nil { diff --git a/pkg/executor/internal/exec/indexusage_test.go b/pkg/executor/internal/exec/indexusage_test.go index 65f544763f98f..4377d39f25cb7 100644 --- a/pkg/executor/internal/exec/indexusage_test.go +++ b/pkg/executor/internal/exec/indexusage_test.go @@ -363,7 +363,7 @@ func TestIndexUsageReporterWithGlobalIndex(t *testing.T) { tk := testkit.NewTestKit(t, store) tk.MustExec("use test") tk.MustExec("set tidb_enable_global_index='on'") - tk.MustExec(`create table t (pk int primary key, id_1 int, unique key idx_1(id_1)) + tk.MustExec(`create table t (pk int primary key, id_1 int, unique key idx_1(id_1) global) partition by range (pk) ( partition p0 values less than (10), partition p1 values less than (20), diff --git a/pkg/executor/internal/querywatch/query_watch.go b/pkg/executor/internal/querywatch/query_watch.go index 8fbc2b72be5f4..07b19104399e5 100644 --- a/pkg/executor/internal/querywatch/query_watch.go +++ b/pkg/executor/internal/querywatch/query_watch.go @@ -132,7 +132,7 @@ func fromQueryWatchOptionList(ctx context.Context, sctx, newSctx sessionctx.Cont // validateWatchRecord follows several designs: // 1. If no resource group is set, the default resource group is used -// 2. If no action is specified, the action of the resource group is used. If no, an error message is displayed. +// 2. If no action is specified, the action of the resource group is used. If no, an error message displayed. func validateWatchRecord(record *resourcegroup.QuarantineRecord, client *rmclient.ResourceGroupsController) error { if len(record.ResourceGroupName) == 0 { record.ResourceGroupName = resourcegroup.DefaultResourceGroupName diff --git a/pkg/executor/internal/testutil/BUILD.bazel b/pkg/executor/internal/testutil/BUILD.bazel index 40d5d3d0a12de..4f1b73b227dd0 100644 --- a/pkg/executor/internal/testutil/BUILD.bazel +++ b/pkg/executor/internal/testutil/BUILD.bazel @@ -16,8 +16,8 @@ go_library( "//pkg/expression", "//pkg/parser/ast", "//pkg/parser/mysql", - "//pkg/planner/core", "//pkg/planner/core/base", + "//pkg/planner/core/operator/logicalop", "//pkg/planner/property", "//pkg/sessionctx", "//pkg/sessionctx/variable", diff --git a/pkg/executor/internal/testutil/window.go b/pkg/executor/internal/testutil/window.go index d80d4560648ec..cf3dfe85b8801 100644 --- a/pkg/executor/internal/testutil/window.go +++ b/pkg/executor/internal/testutil/window.go @@ -21,7 +21,7 @@ import ( "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/mysql" - "github.com/pingcap/tidb/pkg/planner/core" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/types" @@ -31,7 +31,7 @@ import ( // WindowTestCase has a fixed schema (col Double, partitionBy LongLong, rawData VarString(16), col LongLong). type WindowTestCase struct { Ctx sessionctx.Context - Frame *core.WindowFrame + Frame *logicalop.WindowFrame WindowFunc string RawDataSmall string Columns []*expression.Column diff --git a/pkg/executor/join/BUILD.bazel b/pkg/executor/join/BUILD.bazel index d034744556ed2..e5280312ad640 100644 --- a/pkg/executor/join/BUILD.bazel +++ b/pkg/executor/join/BUILD.bazel @@ -31,6 +31,7 @@ go_library( "//pkg/parser/mysql", "//pkg/parser/terror", "//pkg/planner/core", + "//pkg/planner/core/operator/logicalop", "//pkg/sessionctx", "//pkg/sessionctx/stmtctx", "//pkg/sessionctx/variable", @@ -79,7 +80,7 @@ go_test( ], embed = [":join"], flaky = True, - shard_count = 47, + shard_count = 49, deps = [ "//pkg/config", "//pkg/domain", @@ -87,7 +88,8 @@ go_test( "//pkg/expression", "//pkg/parser/ast", "//pkg/parser/mysql", - "//pkg/planner/core", + "//pkg/planner/core/operator/logicalop", + "//pkg/session", "//pkg/sessionctx", "//pkg/sessionctx/variable", "//pkg/testkit", diff --git a/pkg/executor/join/base_join_probe.go b/pkg/executor/join/base_join_probe.go index b7eb65f0212b3..6ef5704733956 100644 --- a/pkg/executor/join/base_join_probe.go +++ b/pkg/executor/join/base_join_probe.go @@ -23,7 +23,7 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/parser/mysql" - "github.com/pingcap/tidb/pkg/planner/core" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/chunk" "github.com/pingcap/tidb/pkg/util/codec" @@ -66,6 +66,10 @@ type ProbeV2 interface { NeedScanRowTable() bool // InitForScanRowTable do some pre-work before ScanRowTable, it must be called before ScanRowTable InitForScanRowTable() + // Return probe collsion + GetProbeCollision() uint64 + // Reset probe collsion + ResetProbeCollision() } type offsetAndLength struct { @@ -130,6 +134,16 @@ type baseJoinProbe struct { tmpChk *chunk.Chunk rowIndexInfos []*matchedRowInfo selected []bool + + probeCollision uint64 +} + +func (j *baseJoinProbe) GetProbeCollision() uint64 { + return j.probeCollision +} + +func (j *baseJoinProbe) ResetProbeCollision() { + j.probeCollision = 0 } func (j *baseJoinProbe) IsCurrentChunkProbeDone() bool { @@ -484,7 +498,7 @@ func isKeyMatched(keyMode keyMode, serializedKey []byte, rowStart unsafe.Pointer } // NewJoinProbe create a join probe used for hash join v2 -func NewJoinProbe(ctx *HashJoinCtxV2, workID uint, joinType core.JoinType, keyIndex []int, joinedColumnTypes, probeKeyTypes []*types.FieldType, rightAsBuildSide bool) ProbeV2 { +func NewJoinProbe(ctx *HashJoinCtxV2, workID uint, joinType logicalop.JoinType, keyIndex []int, joinedColumnTypes, probeKeyTypes []*types.FieldType, rightAsBuildSide bool) ProbeV2 { base := baseJoinProbe{ ctx: ctx, workID: workID, @@ -526,11 +540,11 @@ func NewJoinProbe(ctx *HashJoinCtxV2, workID uint, joinType core.JoinType, keyIn base.rowIndexInfos = make([]*matchedRowInfo, 0, chunk.InitialCapacity) } switch joinType { - case core.InnerJoin: + case logicalop.InnerJoin: return &innerJoinProbe{base} - case core.LeftOuterJoin: + case logicalop.LeftOuterJoin: return newOuterJoinProbe(base, !rightAsBuildSide, rightAsBuildSide) - case core.RightOuterJoin: + case logicalop.RightOuterJoin: return newOuterJoinProbe(base, rightAsBuildSide, rightAsBuildSide) default: panic("unsupported join type") diff --git a/pkg/executor/join/hash_join_base.go b/pkg/executor/join/hash_join_base.go index 7947b96653e6c..573f7614b99b1 100644 --- a/pkg/executor/join/hash_join_base.go +++ b/pkg/executor/join/hash_join_base.go @@ -25,7 +25,7 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/executor/internal/exec" - plannercore "github.com/pingcap/tidb/pkg/planner/core" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/chunk" @@ -55,7 +55,7 @@ type hashJoinCtxBase struct { finished atomic.Bool IsNullEQ []bool buildFinished chan error - JoinType plannercore.JoinType + JoinType logicalop.JoinType IsNullAware bool memTracker *memory.Tracker // track memory usage. diskTracker *disk.Tracker // track disk usage. diff --git a/pkg/executor/join/hash_join_v1.go b/pkg/executor/join/hash_join_v1.go index 649eac1eb466b..981c652e5a5a3 100644 --- a/pkg/executor/join/hash_join_v1.go +++ b/pkg/executor/join/hash_join_v1.go @@ -30,7 +30,7 @@ import ( "github.com/pingcap/tidb/pkg/executor/unionexec" "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/parser/terror" - plannercore "github.com/pingcap/tidb/pkg/planner/core" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/types" @@ -216,7 +216,7 @@ func (e *HashJoinV1Exec) fetchAndProbeHashTable(ctx context.Context) { defer trace.StartRegion(ctx, "HashJoinProbeSideFetcher").End() e.ProbeSideTupleFetcher.fetchProbeSideChunks(ctx, e.MaxChunkSize(), func() bool { return e.ProbeSideTupleFetcher.RowContainer.Len() == uint64(0) - }, e.ProbeSideTupleFetcher.JoinType == plannercore.InnerJoin || e.ProbeSideTupleFetcher.JoinType == plannercore.SemiJoin, + }, e.ProbeSideTupleFetcher.JoinType == logicalop.InnerJoin || e.ProbeSideTupleFetcher.JoinType == logicalop.SemiJoin, false, e.ProbeSideTupleFetcher.IsOuterJoin, &e.ProbeSideTupleFetcher.hashJoinCtxBase) }, e.ProbeSideTupleFetcher.handleProbeSideFetcherPanic) @@ -737,8 +737,8 @@ func (w *ProbeWorkerV1) joinNAASJMatchProbeSideRow2Chunk(probeKey uint64, probeK // For NA-AntiLeftOuterSemiJoin, we couldn't match null-bucket first, because once y set has a same key x and null // key, we should return the result as left side row appended with a scalar value 0 which is from same key matching failure. func (w *ProbeWorkerV1) joinNAAJMatchProbeSideRow2Chunk(probeKey uint64, probeKeyNullBits *bitmap.ConcurrentBitmap, probeSideRow chunk.Row, hCtx *HashContext, joinResult *hashjoinWorkerResult) (bool, int64, *hashjoinWorkerResult) { - naAntiSemiJoin := w.HashJoinCtx.JoinType == plannercore.AntiSemiJoin && w.HashJoinCtx.IsNullAware - naAntiLeftOuterSemiJoin := w.HashJoinCtx.JoinType == plannercore.AntiLeftOuterSemiJoin && w.HashJoinCtx.IsNullAware + naAntiSemiJoin := w.HashJoinCtx.JoinType == logicalop.AntiSemiJoin && w.HashJoinCtx.IsNullAware + naAntiLeftOuterSemiJoin := w.HashJoinCtx.JoinType == logicalop.AntiLeftOuterSemiJoin && w.HashJoinCtx.IsNullAware if naAntiSemiJoin { return w.joinNAASJMatchProbeSideRow2Chunk(probeKey, probeKeyNullBits, probeSideRow, hCtx, joinResult) } diff --git a/pkg/executor/join/hash_join_v2.go b/pkg/executor/join/hash_join_v2.go index b77ea183442cb..e510e82c528f4 100644 --- a/pkg/executor/join/hash_join_v2.go +++ b/pkg/executor/join/hash_join_v2.go @@ -28,7 +28,7 @@ import ( "github.com/pingcap/tidb/pkg/executor/internal/exec" "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/parser/mysql" - plannercore "github.com/pingcap/tidb/pkg/planner/core" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/channel" @@ -44,16 +44,12 @@ var ( enableHashJoinV2 = atomic.Bool{} ) -func init() { - enableHashJoinV2.Store(true) -} - // IsHashJoinV2Enabled return true if hash join v2 is enabled func IsHashJoinV2Enabled() bool { // sizeOfUintptr should always equal to sizeOfUnsafePointer, because according to golang's doc, // a Pointer can be converted to an uintptr. Add this check here in case in the future go runtime // change this - return enableHashJoinV2.Load() && sizeOfUintptr >= sizeOfUnsafePointer + return !heapObjectsCanMove() && enableHashJoinV2.Load() && sizeOfUintptr >= sizeOfUnsafePointer } // SetEnableHashJoinV2 enable/disable hash join v2 @@ -339,10 +335,10 @@ func (e *HashJoinV2Exec) Open(ctx context.Context) error { } func (fetcher *ProbeSideTupleFetcherV2) shouldLimitProbeFetchSize() bool { - if fetcher.JoinType == plannercore.LeftOuterJoin && fetcher.RightAsBuildSide { + if fetcher.JoinType == logicalop.LeftOuterJoin && fetcher.RightAsBuildSide { return true } - if fetcher.JoinType == plannercore.RightOuterJoin && !fetcher.RightAsBuildSide { + if fetcher.JoinType == logicalop.RightOuterJoin && !fetcher.RightAsBuildSide { return true } return false @@ -378,13 +374,13 @@ func (w *BuildWorkerV2) splitPartitionAndAppendToRowTable(typeCtx types.Context, func (e *HashJoinV2Exec) canSkipProbeIfHashTableIsEmpty() bool { switch e.JoinType { - case plannercore.InnerJoin: + case logicalop.InnerJoin: return true - case plannercore.LeftOuterJoin: + case logicalop.LeftOuterJoin: return !e.RightAsBuildSide - case plannercore.RightOuterJoin: + case logicalop.RightOuterJoin: return e.RightAsBuildSide - case plannercore.SemiJoin: + case logicalop.SemiJoin: return e.RightAsBuildSide default: return false @@ -401,6 +397,7 @@ func (e *HashJoinV2Exec) initializeForProbe() { for i := uint(0); i < e.Concurrency; i++ { e.ProbeWorkers[i].initializeForProbe(e.ProbeSideTupleFetcher.probeChkResourceCh, e.ProbeSideTupleFetcher.probeResultChs[i], e) + e.ProbeWorkers[i].JoinProbe.ResetProbeCollision() } } @@ -443,6 +440,11 @@ func (e *HashJoinV2Exec) handleJoinWorkerPanic(r any) { func (e *HashJoinV2Exec) waitJoinWorkersAndCloseResultChan() { e.workerWg.Wait() + if e.stats != nil { + for _, prober := range e.ProbeWorkers { + e.stats.hashStat.probeCollision += int64(prober.JoinProbe.GetProbeCollision()) + } + } if e.ProbeWorkers[0] != nil && e.ProbeWorkers[0].JoinProbe.NeedScanRowTable() { for i := uint(0); i < e.Concurrency; i++ { var workerID = i @@ -863,12 +865,20 @@ func (*hashJoinRuntimeStatsV2) Tp() int { func (e *hashJoinRuntimeStatsV2) String() string { buf := bytes.NewBuffer(make([]byte, 0, 128)) if e.fetchAndBuildHashTable > 0 { - buf.WriteString("build_hash_table:{total:") + buf.WriteString("build_hash_table:{concurrency:") + buf.WriteString(strconv.Itoa(e.concurrent)) + buf.WriteString(", total:") buf.WriteString(execdetails.FormatDuration(e.fetchAndBuildHashTable)) buf.WriteString(", fetch:") buf.WriteString(execdetails.FormatDuration(time.Duration(int64(e.fetchAndBuildHashTable) - e.maxBuildHashTable - e.maxPartitionData))) + buf.WriteString(", partition:") + buf.WriteString(execdetails.FormatDuration(time.Duration(e.partitionData))) + buf.WriteString(", max partition:") + buf.WriteString(execdetails.FormatDuration(time.Duration(e.maxPartitionData))) buf.WriteString(", build:") buf.WriteString(execdetails.FormatDuration(time.Duration(e.buildHashTable))) + buf.WriteString(", max build:") + buf.WriteString(execdetails.FormatDuration(time.Duration(e.maxBuildHashTable))) buf.WriteString("}") } if e.probe > 0 { diff --git a/pkg/executor/join/index_lookup_hash_join.go b/pkg/executor/join/index_lookup_hash_join.go index b3151def67437..fd368ef77911d 100644 --- a/pkg/executor/join/index_lookup_hash_join.go +++ b/pkg/executor/join/index_lookup_hash_join.go @@ -146,7 +146,7 @@ func (e *IndexNestedLoopHashJoin) Open(ctx context.Context) error { return nil } -func (e *IndexNestedLoopHashJoin) startWorkers(ctx context.Context) { +func (e *IndexNestedLoopHashJoin) startWorkers(ctx context.Context, initBatchSize int) { concurrency := e.Ctx().GetSessionVars().IndexLookupJoinConcurrency() if e.stats != nil { e.stats.concurrency = concurrency @@ -164,7 +164,7 @@ func (e *IndexNestedLoopHashJoin) startWorkers(ctx context.Context) { } e.joinChkResourceCh = make([]chan *chunk.Chunk, concurrency) e.WorkerWg.Add(1) - ow := e.newOuterWorker(innerCh) + ow := e.newOuterWorker(innerCh, initBatchSize) go util.WithRecovery(func() { ow.run(e.ctxWithCancel) }, e.finishJoinWorkers) for i := 0; i < concurrency; i++ { @@ -221,7 +221,7 @@ func (e *IndexNestedLoopHashJoin) wait4JoinWorkers() { // Next implements the IndexNestedLoopHashJoin Executor interface. func (e *IndexNestedLoopHashJoin) Next(ctx context.Context, req *chunk.Chunk) error { if !e.prepared { - e.startWorkers(ctx) + e.startWorkers(ctx, req.RequiredRows()) e.prepared = true } req.Reset() @@ -411,14 +411,16 @@ func (*indexHashJoinOuterWorker) pushToChan(ctx context.Context, task *indexHash return false } -func (e *IndexNestedLoopHashJoin) newOuterWorker(innerCh chan *indexHashJoinTask) *indexHashJoinOuterWorker { +func (e *IndexNestedLoopHashJoin) newOuterWorker(innerCh chan *indexHashJoinTask, initBatchSize int) *indexHashJoinOuterWorker { + maxBatchSize := e.Ctx().GetSessionVars().IndexJoinBatchSize + batchSize := min(initBatchSize, maxBatchSize) ow := &indexHashJoinOuterWorker{ outerWorker: outerWorker{ OuterCtx: e.OuterCtx, ctx: e.Ctx(), executor: e.Children(0), - batchSize: 32, - maxBatchSize: e.Ctx().GetSessionVars().IndexJoinBatchSize, + batchSize: batchSize, + maxBatchSize: maxBatchSize, parentMemTracker: e.memTracker, lookup: &e.IndexLookUpJoin, }, @@ -563,6 +565,7 @@ func (iw *indexHashJoinInnerWorker) getNewJoinResult(ctx context.Context) (*inde select { case joinResult.chk, ok = <-iw.joinChkResourceCh: case <-ctx.Done(): + joinResult.err = ctx.Err() return joinResult, false } return joinResult, ok @@ -783,7 +786,10 @@ func (iw *indexHashJoinInnerWorker) joinMatchedInnerRow2Chunk(ctx context.Contex select { case iw.resultCh <- joinResult: case <-ctx.Done(): + joinResult.err = ctx.Err() + return false, joinResult } + failpoint.InjectCall("joinMatchedInnerRow2Chunk") joinResult, ok = iw.getNewJoinResult(ctx) if !ok { return false, joinResult diff --git a/pkg/executor/join/index_lookup_join.go b/pkg/executor/join/index_lookup_join.go index e289ae7ab44b3..e35aed79908a8 100644 --- a/pkg/executor/join/index_lookup_join.go +++ b/pkg/executor/join/index_lookup_join.go @@ -186,7 +186,7 @@ func (e *IndexLookUpJoin) Open(ctx context.Context) error { return nil } -func (e *IndexLookUpJoin) startWorkers(ctx context.Context) { +func (e *IndexLookUpJoin) startWorkers(ctx context.Context, initBatchSize int) { concurrency := e.Ctx().GetSessionVars().IndexLookupJoinConcurrency() if e.stats != nil { e.stats.concurrency = concurrency @@ -197,7 +197,7 @@ func (e *IndexLookUpJoin) startWorkers(ctx context.Context) { e.cancelFunc = cancelFunc innerCh := make(chan *lookUpJoinTask, concurrency) e.WorkerWg.Add(1) - go e.newOuterWorker(resultCh, innerCh).run(workerCtx, e.WorkerWg) + go e.newOuterWorker(resultCh, innerCh, initBatchSize).run(workerCtx, e.WorkerWg) for i := 0; i < concurrency; i++ { innerWorker := e.newInnerWorker(innerCh) e.WorkerWg.Add(1) @@ -205,15 +205,17 @@ func (e *IndexLookUpJoin) startWorkers(ctx context.Context) { } } -func (e *IndexLookUpJoin) newOuterWorker(resultCh, innerCh chan *lookUpJoinTask) *outerWorker { +func (e *IndexLookUpJoin) newOuterWorker(resultCh, innerCh chan *lookUpJoinTask, initBatchSize int) *outerWorker { + maxBatchSize := e.Ctx().GetSessionVars().IndexJoinBatchSize + batchSize := min(initBatchSize, maxBatchSize) ow := &outerWorker{ OuterCtx: e.OuterCtx, ctx: e.Ctx(), executor: e.Children(0), resultCh: resultCh, innerCh: innerCh, - batchSize: 32, - maxBatchSize: e.Ctx().GetSessionVars().IndexJoinBatchSize, + batchSize: batchSize, + maxBatchSize: maxBatchSize, parentMemTracker: e.memTracker, lookup: e, } @@ -273,7 +275,7 @@ func (e *IndexLookUpJoin) newInnerWorker(taskCh chan *lookUpJoinTask) *innerWork // Next implements the Executor interface. func (e *IndexLookUpJoin) Next(ctx context.Context, req *chunk.Chunk) error { if !e.prepared { - e.startWorkers(ctx) + e.startWorkers(ctx, req.RequiredRows()) e.prepared = true } if e.IsOuterJoin { diff --git a/pkg/executor/join/index_lookup_join_test.go b/pkg/executor/join/index_lookup_join_test.go index d9c6025bf9ecd..571d0967388c6 100644 --- a/pkg/executor/join/index_lookup_join_test.go +++ b/pkg/executor/join/index_lookup_join_test.go @@ -18,10 +18,12 @@ import ( "context" "fmt" "math/rand" + "runtime" "strings" "testing" "github.com/pingcap/failpoint" + "github.com/pingcap/tidb/pkg/session" "github.com/pingcap/tidb/pkg/testkit" "github.com/stretchr/testify/require" ) @@ -134,3 +136,41 @@ func TestIssue45716(t *testing.T) { require.Error(t, err) tk.MustContainErrMsg(err.Error(), "test inlNewInnerPanic") } + +func TestIssue54688(t *testing.T) { + val := runtime.GOMAXPROCS(1) + defer func() { + runtime.GOMAXPROCS(val) + }() + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test;") + tk.MustExec("drop table if exists t, s;") + tk.MustExec("create table t(a int, index(a));") + tk.MustExec("create table s(a int, index(a));") + tk.MustExec("insert into t values(1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11), (12), (13), (14), (15), (16);") + tk.MustExec("insert into s values(1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11), (12), (13), (14), (15), (16);") + tk.MustExec("insert into s select * from s") + tk.MustExec("insert into s select * from s") + tk.MustExec("insert into s select * from s") + tk.MustExec("insert into s select * from s") + tk.MustExec("insert into s select * from s") + tk.MustExec("insert into s select * from s") + tk.MustExec("insert into s select * from s") + tk.MustExec("insert into s select * from s") + tk.MustExec("set @@tidb_index_lookup_join_concurrency=1;") + tk.MustExec("set @@tidb_index_join_batch_size=1000000;") + + for i := 0; i <= 100; i++ { + rs, err := tk.Exec("select /*+ INL_HASH_JOIN(s) */ * from t join s on t.a=s.a") + require.NoError(t, err) + context, cancel := context.WithCancel(context.Background()) + require.NoError(t, failpoint.EnableCall("github.com/pingcap/tidb/pkg/executor/join/joinMatchedInnerRow2Chunk", + func() { + cancel() + }, + )) + _, _ = session.GetRows4Test(context, nil, rs) + rs.Close() + } +} diff --git a/pkg/executor/join/index_lookup_merge_join.go b/pkg/executor/join/index_lookup_merge_join.go index a1b19c8c41283..c181eb04548d7 100644 --- a/pkg/executor/join/index_lookup_merge_join.go +++ b/pkg/executor/join/index_lookup_merge_join.go @@ -443,11 +443,6 @@ func (imw *innerMergeWorker) handleTask(ctx context.Context, task *lookUpMergeJo } } task.memTracker.Consume(int64(cap(task.outerOrderIdx))) - failpoint.Inject("IndexMergeJoinMockOOM", func(val failpoint.Value) { - if val.(bool) { - panic("OOM test index merge join doesn't hang here.") - } - }) // NeedOuterSort means the outer side property items can't guarantee the order of join keys. // Because the necessary condition of merge join is both outer and inner keep order of join keys. // In this case, we need sort the outer side. diff --git a/pkg/executor/join/index_lookup_merge_join_test.go b/pkg/executor/join/index_lookup_merge_join_test.go index 2557a6032e08f..d025a0b76dbcc 100644 --- a/pkg/executor/join/index_lookup_merge_join_test.go +++ b/pkg/executor/join/index_lookup_merge_join_test.go @@ -22,25 +22,6 @@ import ( "github.com/stretchr/testify/require" ) -func TestIndexLookupMergeJoinHang(t *testing.T) { - require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/executor/join/IndexMergeJoinMockOOM", `return(true)`)) - defer func() { - require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/executor/join/IndexMergeJoinMockOOM")) - }() - store := testkit.CreateMockStore(t) - tk := testkit.NewTestKit(t, store) - tk.MustExec("use test") - tk.MustExec("drop table if exists t1, t2") - tk.MustExec("create table t1 (a int,b int,index idx(a))") - tk.MustExec("create table t2 (a int,b int,index idx(a))") - tk.MustExec("insert into t1 values (1,1),(2,2),(3,3),(2000,2000)") - tk.MustExec("insert into t2 values (1,1),(2,2),(3,3),(2000,2000)") - // Do not hang in index merge join when OOM occurs. - err := tk.QueryToErr("select /*+ INL_MERGE_JOIN(t1, t2) */ * from t1, t2 where t1.a = t2.a") - require.Error(t, err) - require.Equal(t, "OOM test index merge join doesn't hang here.", err.Error()) -} - func TestIssue18068(t *testing.T) { require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/executor/join/testIssue18068", `return(true)`)) defer func() { @@ -64,3 +45,18 @@ func TestIssue18068(t *testing.T) { tk.MustExec("select /*+ inl_merge_join(s)*/ 1 from t join s on t.a = s.a limit 1") tk.MustExec("select /*+ inl_merge_join(s)*/ 1 from t join s on t.a = s.a limit 1") } + +func TestIssue54064(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists A, B") + tk.MustExec("create table A\n(id int primary key nonclustered auto_increment,\nx varchar(32) not null,\ny char(5) not null,\nz varchar(25) not null,\nkey idx_sub_tsk(z,x,y)\n)") + tk.MustExec("create table B\n( y char(5) not null,\nz varchar(25) not null,\nx varchar(32) not null,\nprimary key(z, x, y) nonclustered\n)\n") + tk.MustExec("insert into A (y, z, x) values\n('CN000', '123', 'RW '),\n('CN000', '456', '123');") + tk.MustExec("insert into B values\n('CN000', '123', 'RW '),\n('CN000', '456', '123');") + tk.MustQuery("select /*+ inl_merge_join(a, b) */\na.*\nfrom a join b on a.y=b.y and a.z=b.z and a.x = b.x\nwhere a.y='CN000' order by 1,2;").Check( + testkit.Rows("1 RW CN000 123", "2 123 CN000 456")) + res := tk.MustQuery("explain format='brief' select /*+ inl_merge_join(a, b) */\na.*\nfrom a join b on a.y=b.y and a.z=b.z and a.x = b.x\nwhere a.y='CN000' order by 1,2;") + require.NotRegexp(t, "IndexMergeJoin_.*", res.Rows()[0][0]) +} diff --git a/pkg/executor/join/inner_join_probe.go b/pkg/executor/join/inner_join_probe.go index f46d9510e2d65..a8b3e95abddee 100644 --- a/pkg/executor/join/inner_join_probe.go +++ b/pkg/executor/join/inner_join_probe.go @@ -15,7 +15,6 @@ package join import ( - "sync/atomic" "unsafe" "github.com/pingcap/tidb/pkg/expression" @@ -54,9 +53,7 @@ func (j *innerJoinProbe) Probe(joinResult *hashjoinWorkerResult, sqlKiller *sqlk j.matchedRowsForCurrentProbeRow++ remainCap-- } else { - if j.ctx.stats != nil { - atomic.AddInt64(&j.ctx.stats.hashStat.probeCollision, 1) - } + j.probeCollision++ } j.matchedRowsHeaders[j.currentProbeRow] = getNextRowAddress(candidateRow) } else { diff --git a/pkg/executor/join/inner_join_probe_test.go b/pkg/executor/join/inner_join_probe_test.go index ddb43a1662453..dea29dce5c248 100644 --- a/pkg/executor/join/inner_join_probe_test.go +++ b/pkg/executor/join/inner_join_probe_test.go @@ -24,7 +24,7 @@ import ( "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/mysql" - plannercore "github.com/pingcap/tidb/pkg/planner/core" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/chunk" @@ -199,7 +199,7 @@ func checkChunksEqual(t *testing.T, expectedChunks []*chunk.Chunk, resultChunks func testJoinProbe(t *testing.T, withSel bool, leftKeyIndex []int, rightKeyIndex []int, leftKeyTypes []*types.FieldType, rightKeyTypes []*types.FieldType, leftTypes []*types.FieldType, rightTypes []*types.FieldType, rightAsBuildSide bool, leftUsed []int, rightUsed []int, leftUsedByOtherCondition []int, rightUsedByOtherCondition []int, leftFilter expression.CNFExprs, rightFilter expression.CNFExprs, - otherCondition expression.CNFExprs, partitionNumber int, joinType plannercore.JoinType, inputRowNumber int) { + otherCondition expression.CNFExprs, partitionNumber int, joinType logicalop.JoinType, inputRowNumber int) { buildKeyIndex, probeKeyIndex := leftKeyIndex, rightKeyIndex buildKeyTypes, probeKeyTypes := leftKeyTypes, rightKeyTypes buildTypes, probeTypes := leftTypes, rightTypes @@ -214,29 +214,29 @@ func testJoinProbe(t *testing.T, withSel bool, leftKeyIndex []int, rightKeyIndex buildUsed = rightUsed buildUsedByOtherCondition = rightUsedByOtherCondition buildFilter, probeFilter = rightFilter, leftFilter - if joinType == plannercore.RightOuterJoin { + if joinType == logicalop.RightOuterJoin { needUsedFlag = true } } else { switch joinType { - case plannercore.LeftOuterJoin, plannercore.SemiJoin, plannercore.AntiSemiJoin: + case logicalop.LeftOuterJoin, logicalop.SemiJoin, logicalop.AntiSemiJoin: needUsedFlag = true - case plannercore.LeftOuterSemiJoin, plannercore.AntiLeftOuterSemiJoin: + case logicalop.LeftOuterSemiJoin, logicalop.AntiLeftOuterSemiJoin: require.NoError(t, errors.New("left semi/anti join does not support use left as build side")) } } switch joinType { - case plannercore.InnerJoin: + case logicalop.InnerJoin: require.Equal(t, 0, len(leftFilter), "inner join does not support left filter") require.Equal(t, 0, len(rightFilter), "inner join does not support right filter") - case plannercore.LeftOuterJoin: + case logicalop.LeftOuterJoin: require.Equal(t, 0, len(rightFilter), "left outer join does not support right filter") - case plannercore.RightOuterJoin: + case logicalop.RightOuterJoin: require.Equal(t, 0, len(leftFilter), "right outer join does not support left filter") - case plannercore.SemiJoin, plannercore.AntiSemiJoin: + case logicalop.SemiJoin, logicalop.AntiSemiJoin: require.Equal(t, 0, len(leftFilter), "semi/anti join does not support left filter") require.Equal(t, 0, len(rightFilter), "semi/anti join does not support right filter") - case plannercore.LeftOuterSemiJoin, plannercore.AntiLeftOuterSemiJoin: + case logicalop.LeftOuterSemiJoin, logicalop.AntiLeftOuterSemiJoin: require.Equal(t, 0, len(rightFilter), "left outer semi/anti join does not support right filter") } joinedTypes := make([]*types.FieldType, 0, len(leftTypes)+len(rightTypes)) @@ -245,13 +245,13 @@ func testJoinProbe(t *testing.T, withSel bool, leftKeyIndex []int, rightKeyIndex resultTypes := make([]*types.FieldType, 0, len(leftUsed)+len(rightUsed)) for _, colIndex := range leftUsed { resultTypes = append(resultTypes, leftTypes[colIndex].Clone()) - if joinType == plannercore.RightOuterJoin { + if joinType == logicalop.RightOuterJoin { resultTypes[len(resultTypes)-1].DelFlag(mysql.NotNullFlag) } } for _, colIndex := range rightUsed { resultTypes = append(resultTypes, rightTypes[colIndex].Clone()) - if joinType == plannercore.LeftOuterJoin { + if joinType == logicalop.LeftOuterJoin { resultTypes[len(resultTypes)-1].DelFlag(mysql.NotNullFlag) } } @@ -390,15 +390,15 @@ func testJoinProbe(t *testing.T, withSel bool, leftKeyIndex []int, rightKeyIndex checkVirtualRows(t, resultChunks) switch joinType { - case plannercore.InnerJoin: + case logicalop.InnerJoin: expectedChunks := genInnerJoinResult(t, hashJoinCtx.SessCtx, leftChunks, rightChunks, leftKeyIndex, rightKeyIndex, leftTypes, rightTypes, leftKeyTypes, rightKeyTypes, leftUsed, rightUsed, otherCondition, resultTypes) checkChunksEqual(t, expectedChunks, resultChunks, resultTypes) - case plannercore.LeftOuterJoin: + case logicalop.LeftOuterJoin: expectedChunks := genLeftOuterJoinResult(t, hashJoinCtx.SessCtx, leftFilter, leftChunks, rightChunks, leftKeyIndex, rightKeyIndex, leftTypes, rightTypes, leftKeyTypes, rightKeyTypes, leftUsed, rightUsed, otherCondition, resultTypes) checkChunksEqual(t, expectedChunks, resultChunks, resultTypes) - case plannercore.RightOuterJoin: + case logicalop.RightOuterJoin: expectedChunks := genRightOuterJoinResult(t, hashJoinCtx.SessCtx, rightFilter, leftChunks, rightChunks, leftKeyIndex, rightKeyIndex, leftTypes, rightTypes, leftKeyTypes, rightKeyTypes, leftUsed, rightUsed, otherCondition, resultTypes) checkChunksEqual(t, expectedChunks, resultChunks, resultTypes) @@ -461,9 +461,9 @@ func TestInnerJoinProbeBasic(t *testing.T) { // inner join does not have left/right Filter for _, rightAsBuild := range rightAsBuildSide { testJoinProbe(t, false, tc.leftKeyIndex, tc.rightKeyIndex, tc.leftKeyTypes, tc.rightKeyTypes, tc.leftTypes, tc.rightTypes, rightAsBuild, tc.leftUsed, - tc.rightUsed, tc.leftUsedByOtherCondition, tc.rightUsedByOtherCondition, nil, nil, tc.otherCondition, partitionNumber, plannercore.InnerJoin, 200) + tc.rightUsed, tc.leftUsedByOtherCondition, tc.rightUsedByOtherCondition, nil, nil, tc.otherCondition, partitionNumber, logicalop.InnerJoin, 200) testJoinProbe(t, false, tc.leftKeyIndex, tc.rightKeyIndex, toNullableTypes(tc.leftKeyTypes), toNullableTypes(tc.rightKeyTypes), - toNullableTypes(tc.leftTypes), toNullableTypes(tc.rightTypes), rightAsBuild, tc.leftUsed, tc.rightUsed, tc.leftUsedByOtherCondition, tc.rightUsedByOtherCondition, nil, nil, tc.otherCondition, partitionNumber, plannercore.InnerJoin, 200) + toNullableTypes(tc.leftTypes), toNullableTypes(tc.rightTypes), rightAsBuild, tc.leftUsed, tc.rightUsed, tc.leftUsedByOtherCondition, tc.rightUsedByOtherCondition, nil, nil, tc.otherCondition, partitionNumber, logicalop.InnerJoin, 200) } } } @@ -522,8 +522,8 @@ func TestInnerJoinProbeAllJoinKeys(t *testing.T) { for _, rightAsBuild := range rightAsBuildSide { lKeyTypes := []*types.FieldType{lTypes[i]} rKeyTypes := []*types.FieldType{rTypes[i]} - testJoinProbe(t, false, []int{i}, []int{i}, lKeyTypes, rKeyTypes, lTypes, rTypes, rightAsBuild, lUsed, rUsed, nil, nil, nil, nil, nil, partitionNumber, plannercore.InnerJoin, 100) - testJoinProbe(t, false, []int{i}, []int{i}, toNullableTypes(lKeyTypes), toNullableTypes(rKeyTypes), nullableLTypes, nullableRTypes, rightAsBuild, lUsed, rUsed, nil, nil, nil, nil, nil, partitionNumber, plannercore.InnerJoin, 100) + testJoinProbe(t, false, []int{i}, []int{i}, lKeyTypes, rKeyTypes, lTypes, rTypes, rightAsBuild, lUsed, rUsed, nil, nil, nil, nil, nil, partitionNumber, logicalop.InnerJoin, 100) + testJoinProbe(t, false, []int{i}, []int{i}, toNullableTypes(lKeyTypes), toNullableTypes(rKeyTypes), nullableLTypes, nullableRTypes, rightAsBuild, lUsed, rUsed, nil, nil, nil, nil, nil, partitionNumber, logicalop.InnerJoin, 100) } } // composed key @@ -531,29 +531,29 @@ func TestInnerJoinProbeAllJoinKeys(t *testing.T) { for _, rightAsBuild := range rightAsBuildSide { lKeyTypes := []*types.FieldType{intTp, uintTp} rKeyTypes := []*types.FieldType{intTp, uintTp} - testJoinProbe(t, false, []int{1, 2}, []int{1, 2}, lKeyTypes, rKeyTypes, lTypes, rTypes, rightAsBuild, lUsed, rUsed, nil, nil, nil, nil, nil, partitionNumber, plannercore.InnerJoin, 100) - testJoinProbe(t, false, []int{1, 2}, []int{1, 2}, toNullableTypes(lKeyTypes), toNullableTypes(rKeyTypes), nullableLTypes, nullableRTypes, rightAsBuild, lUsed, rUsed, nil, nil, nil, nil, nil, partitionNumber, plannercore.InnerJoin, 100) + testJoinProbe(t, false, []int{1, 2}, []int{1, 2}, lKeyTypes, rKeyTypes, lTypes, rTypes, rightAsBuild, lUsed, rUsed, nil, nil, nil, nil, nil, partitionNumber, logicalop.InnerJoin, 100) + testJoinProbe(t, false, []int{1, 2}, []int{1, 2}, toNullableTypes(lKeyTypes), toNullableTypes(rKeyTypes), nullableLTypes, nullableRTypes, rightAsBuild, lUsed, rUsed, nil, nil, nil, nil, nil, partitionNumber, logicalop.InnerJoin, 100) } // variable size, inlined for _, rightAsBuild := range rightAsBuildSide { lKeyTypes := []*types.FieldType{intTp, binaryStringTp} rKeyTypes := []*types.FieldType{intTp, binaryStringTp} - testJoinProbe(t, false, []int{1, 17}, []int{1, 17}, lKeyTypes, rKeyTypes, lTypes, rTypes, rightAsBuild, lUsed, rUsed, nil, nil, nil, nil, nil, partitionNumber, plannercore.InnerJoin, 100) - testJoinProbe(t, false, []int{1, 17}, []int{1, 17}, toNullableTypes(lKeyTypes), toNullableTypes(rKeyTypes), nullableLTypes, nullableRTypes, rightAsBuild, lUsed, rUsed, nil, nil, nil, nil, nil, partitionNumber, plannercore.InnerJoin, 100) + testJoinProbe(t, false, []int{1, 17}, []int{1, 17}, lKeyTypes, rKeyTypes, lTypes, rTypes, rightAsBuild, lUsed, rUsed, nil, nil, nil, nil, nil, partitionNumber, logicalop.InnerJoin, 100) + testJoinProbe(t, false, []int{1, 17}, []int{1, 17}, toNullableTypes(lKeyTypes), toNullableTypes(rKeyTypes), nullableLTypes, nullableRTypes, rightAsBuild, lUsed, rUsed, nil, nil, nil, nil, nil, partitionNumber, logicalop.InnerJoin, 100) } // fixed size, not inlined for _, rightAsBuild := range rightAsBuildSide { lKeyTypes := []*types.FieldType{intTp, datetimeTp} rKeyTypes := []*types.FieldType{intTp, datetimeTp} - testJoinProbe(t, false, []int{1, 13}, []int{1, 13}, lKeyTypes, rKeyTypes, lTypes, rTypes, rightAsBuild, lUsed, rUsed, nil, nil, nil, nil, nil, partitionNumber, plannercore.InnerJoin, 100) - testJoinProbe(t, false, []int{1, 13}, []int{1, 13}, toNullableTypes(lKeyTypes), toNullableTypes(rKeyTypes), nullableLTypes, nullableRTypes, rightAsBuild, lUsed, rUsed, nil, nil, nil, nil, nil, partitionNumber, plannercore.InnerJoin, 100) + testJoinProbe(t, false, []int{1, 13}, []int{1, 13}, lKeyTypes, rKeyTypes, lTypes, rTypes, rightAsBuild, lUsed, rUsed, nil, nil, nil, nil, nil, partitionNumber, logicalop.InnerJoin, 100) + testJoinProbe(t, false, []int{1, 13}, []int{1, 13}, toNullableTypes(lKeyTypes), toNullableTypes(rKeyTypes), nullableLTypes, nullableRTypes, rightAsBuild, lUsed, rUsed, nil, nil, nil, nil, nil, partitionNumber, logicalop.InnerJoin, 100) } // variable size, not inlined for _, rightAsBuild := range rightAsBuildSide { lKeyTypes := []*types.FieldType{intTp, decimalTp} rKeyTypes := []*types.FieldType{intTp, decimalTp} - testJoinProbe(t, false, []int{1, 14}, []int{1, 14}, lKeyTypes, rKeyTypes, lTypes, rTypes, rightAsBuild, lUsed, rUsed, nil, nil, nil, nil, nil, partitionNumber, plannercore.InnerJoin, 100) - testJoinProbe(t, false, []int{1, 14}, []int{1, 14}, toNullableTypes(lKeyTypes), toNullableTypes(rKeyTypes), nullableLTypes, nullableRTypes, rightAsBuild, lUsed, rUsed, nil, nil, nil, nil, nil, partitionNumber, plannercore.InnerJoin, 100) + testJoinProbe(t, false, []int{1, 14}, []int{1, 14}, lKeyTypes, rKeyTypes, lTypes, rTypes, rightAsBuild, lUsed, rUsed, nil, nil, nil, nil, nil, partitionNumber, logicalop.InnerJoin, 100) + testJoinProbe(t, false, []int{1, 14}, []int{1, 14}, toNullableTypes(lKeyTypes), toNullableTypes(rKeyTypes), nullableLTypes, nullableRTypes, rightAsBuild, lUsed, rUsed, nil, nil, nil, nil, nil, partitionNumber, logicalop.InnerJoin, 100) } } @@ -581,9 +581,9 @@ func TestInnerJoinProbeOtherCondition(t *testing.T) { partitionNumber := 4 for _, rightAsBuild := range rightAsBuildSide { - testJoinProbe(t, false, []int{0}, []int{0}, []*types.FieldType{intTp}, []*types.FieldType{intTp}, lTypes, rTypes, rightAsBuild, []int{1, 2, 4}, []int{0}, []int{1}, []int{3}, nil, nil, otherCondition, partitionNumber, plannercore.InnerJoin, 200) - testJoinProbe(t, false, []int{0}, []int{0}, []*types.FieldType{intTp}, []*types.FieldType{intTp}, lTypes, rTypes, rightAsBuild, []int{}, []int{}, []int{1}, []int{3}, nil, nil, otherCondition, partitionNumber, plannercore.InnerJoin, 200) - testJoinProbe(t, false, []int{0}, []int{0}, []*types.FieldType{nullableIntTp}, []*types.FieldType{nullableIntTp}, toNullableTypes(lTypes), toNullableTypes(rTypes), rightAsBuild, []int{1, 2, 4}, []int{0}, []int{1}, []int{3}, nil, nil, otherCondition, partitionNumber, plannercore.InnerJoin, 200) + testJoinProbe(t, false, []int{0}, []int{0}, []*types.FieldType{intTp}, []*types.FieldType{intTp}, lTypes, rTypes, rightAsBuild, []int{1, 2, 4}, []int{0}, []int{1}, []int{3}, nil, nil, otherCondition, partitionNumber, logicalop.InnerJoin, 200) + testJoinProbe(t, false, []int{0}, []int{0}, []*types.FieldType{intTp}, []*types.FieldType{intTp}, lTypes, rTypes, rightAsBuild, []int{}, []int{}, []int{1}, []int{3}, nil, nil, otherCondition, partitionNumber, logicalop.InnerJoin, 200) + testJoinProbe(t, false, []int{0}, []int{0}, []*types.FieldType{nullableIntTp}, []*types.FieldType{nullableIntTp}, toNullableTypes(lTypes), toNullableTypes(rTypes), rightAsBuild, []int{1, 2, 4}, []int{0}, []int{1}, []int{3}, nil, nil, otherCondition, partitionNumber, logicalop.InnerJoin, 200) } } @@ -616,9 +616,9 @@ func TestInnerJoinProbeWithSel(t *testing.T) { for _, rightAsBuild := range rightAsBuildSide { for _, oc := range otherConditions { - testJoinProbe(t, true, []int{0}, []int{0}, []*types.FieldType{intTp}, []*types.FieldType{intTp}, lTypes, rTypes, rightAsBuild, []int{1, 2, 4}, []int{0}, []int{1}, []int{3}, nil, nil, oc, partitionNumber, plannercore.InnerJoin, 500) - testJoinProbe(t, true, []int{0}, []int{0}, []*types.FieldType{intTp}, []*types.FieldType{intTp}, lTypes, rTypes, rightAsBuild, []int{}, []int{}, []int{1}, []int{3}, nil, nil, oc, partitionNumber, plannercore.InnerJoin, 500) - testJoinProbe(t, true, []int{0}, []int{0}, []*types.FieldType{nullableIntTp}, []*types.FieldType{nullableIntTp}, toNullableTypes(lTypes), toNullableTypes(rTypes), rightAsBuild, []int{1, 2, 4}, []int{0}, []int{1}, []int{3}, nil, nil, oc, partitionNumber, plannercore.InnerJoin, 500) + testJoinProbe(t, true, []int{0}, []int{0}, []*types.FieldType{intTp}, []*types.FieldType{intTp}, lTypes, rTypes, rightAsBuild, []int{1, 2, 4}, []int{0}, []int{1}, []int{3}, nil, nil, oc, partitionNumber, logicalop.InnerJoin, 500) + testJoinProbe(t, true, []int{0}, []int{0}, []*types.FieldType{intTp}, []*types.FieldType{intTp}, lTypes, rTypes, rightAsBuild, []int{}, []int{}, []int{1}, []int{3}, nil, nil, oc, partitionNumber, logicalop.InnerJoin, 500) + testJoinProbe(t, true, []int{0}, []int{0}, []*types.FieldType{nullableIntTp}, []*types.FieldType{nullableIntTp}, toNullableTypes(lTypes), toNullableTypes(rTypes), rightAsBuild, []int{1, 2, 4}, []int{0}, []int{1}, []int{3}, nil, nil, oc, partitionNumber, logicalop.InnerJoin, 500) } } } diff --git a/pkg/executor/join/join_row_table.go b/pkg/executor/join/join_row_table.go index bfa9b015eefa1..5c1fc669b695f 100644 --- a/pkg/executor/join/join_row_table.go +++ b/pkg/executor/join/join_row_table.go @@ -38,6 +38,9 @@ const sizeOfUintptr = int(unsafe.Sizeof(uintptr(0))) var fakeAddrPlaceHolder = []byte{0, 0, 0, 0, 0, 0, 0, 0} +//go:linkname heapObjectsCanMove runtime.heapObjectsCanMove +func heapObjectsCanMove() bool + type rowTableSegment struct { /* The row storage used in hash join, the layout is @@ -108,7 +111,7 @@ func setNextRowAddress(rowStart unsafe.Pointer, nextRowAddress unsafe.Pointer) { // Save unsafe.Pointer into current Row header. Generally speaking it is unsafe or even illegal in go // since after save the value of unsafe.Pointer into row header, it has no pointer semantics the value // in the row header may become invalid after GC. It is ok to save unsafe.Pointer so far because - // 1. Go has a non-moving GC(https://tip.golang.org/doc/gc-guide), which means if the object is in heap, the address will not be changed after GC + // 1. the check of heapObjectsCanMove makes sure that if the object is in heap, the address will not be changed after GC // 2. `rowStart` only points to a valid address in `rawData`. `rawData` is a slice in `rowTableSegment`, and it will be used by multiple goroutines, // and its size will be runtime expanded, this kind of slice will always be allocated in heap *(*unsafe.Pointer)(rowStart) = nextRowAddress @@ -232,11 +235,10 @@ func (rt *rowTable) getValidJoinKeyPos(rowIndex int) int { } type keyProp struct { - canBeInlined bool - keyLength int - isStringRelatedType bool - isKeyInteger bool - isKeyUnsigned bool + canBeInlined bool + keyLength int + isKeyInteger bool + isKeyUnsigned bool } func getKeyProp(tp *types.FieldType) *keyProp { @@ -251,31 +253,31 @@ func getKeyProp(tp *types.FieldType) *keyProp { // duration type is always signed isKeyUnsigned = false } - return &keyProp{canBeInlined: true, keyLength: chunk.GetFixedLen(tp), isStringRelatedType: false, isKeyInteger: true, isKeyUnsigned: isKeyUnsigned} + return &keyProp{canBeInlined: true, keyLength: chunk.GetFixedLen(tp), isKeyInteger: true, isKeyUnsigned: isKeyUnsigned} case mysql.TypeVarchar, mysql.TypeVarString, mysql.TypeString, mysql.TypeBlob, mysql.TypeTinyBlob, mysql.TypeMediumBlob, mysql.TypeLongBlob: collator := collate.GetCollator(tp.GetCollate()) - return &keyProp{canBeInlined: collate.CanUseRawMemAsKey(collator), keyLength: chunk.VarElemLen, isStringRelatedType: true, isKeyInteger: false, isKeyUnsigned: false} + return &keyProp{canBeInlined: collate.CanUseRawMemAsKey(collator), keyLength: chunk.VarElemLen, isKeyInteger: false, isKeyUnsigned: false} case mysql.TypeDate, mysql.TypeDatetime, mysql.TypeTimestamp: // date related type will use uint64 as serialized key - return &keyProp{canBeInlined: false, keyLength: int(serialization.Uint64Len), isStringRelatedType: false, isKeyInteger: true, isKeyUnsigned: true} + return &keyProp{canBeInlined: false, keyLength: int(serialization.Uint64Len), isKeyInteger: true, isKeyUnsigned: true} case mysql.TypeFloat: // float will use float64 as serialized key - return &keyProp{canBeInlined: false, keyLength: int(serialization.Float64Len), isStringRelatedType: false, isKeyInteger: false, isKeyUnsigned: false} + return &keyProp{canBeInlined: false, keyLength: int(serialization.Float64Len), isKeyInteger: false, isKeyUnsigned: false} case mysql.TypeNewDecimal: // Although decimal is fixed length, but its key is not fixed length - return &keyProp{canBeInlined: false, keyLength: chunk.VarElemLen, isStringRelatedType: false, isKeyInteger: false, isKeyUnsigned: false} + return &keyProp{canBeInlined: false, keyLength: chunk.VarElemLen, isKeyInteger: false, isKeyUnsigned: false} case mysql.TypeEnum: if mysql.HasEnumSetAsIntFlag(tp.GetFlag()) { // enum int type is always unsigned - return &keyProp{canBeInlined: false, keyLength: int(serialization.Uint64Len), isStringRelatedType: false, isKeyInteger: true, isKeyUnsigned: true} + return &keyProp{canBeInlined: false, keyLength: int(serialization.Uint64Len), isKeyInteger: true, isKeyUnsigned: true} } - return &keyProp{canBeInlined: false, keyLength: chunk.VarElemLen, isStringRelatedType: false, isKeyInteger: false, isKeyUnsigned: false} + return &keyProp{canBeInlined: false, keyLength: chunk.VarElemLen, isKeyInteger: false, isKeyUnsigned: false} case mysql.TypeBit: // bit type is always unsigned - return &keyProp{canBeInlined: false, keyLength: int(serialization.Uint64Len), isStringRelatedType: false, isKeyInteger: true, isKeyUnsigned: true} + return &keyProp{canBeInlined: false, keyLength: int(serialization.Uint64Len), isKeyInteger: true, isKeyUnsigned: true} default: keyLength := chunk.GetFixedLen(tp) - return &keyProp{canBeInlined: false, keyLength: keyLength, isStringRelatedType: false, isKeyInteger: false, isKeyUnsigned: false} + return &keyProp{canBeInlined: false, keyLength: keyLength, isKeyInteger: false, isKeyUnsigned: false} } } @@ -322,6 +324,7 @@ func newTableMeta(buildKeyIndex []int, buildTypes, buildKeyTypes, probeKeyTypes meta.serializeModes = make([]codec.SerializeMode, 0, len(buildKeyIndex)) isAllKeyInteger := true hasFixedSizeKeyColumn := false + varLengthKeyNumber := 0 for index, keyIndex := range buildKeyIndex { keyType := buildKeyTypes[index] prop := getKeyProp(keyType) @@ -330,6 +333,7 @@ func newTableMeta(buildKeyIndex []int, buildTypes, buildKeyTypes, probeKeyTypes hasFixedSizeKeyColumn = true } else { meta.isJoinKeysFixedLength = false + varLengthKeyNumber++ } if !prop.canBeInlined { meta.isJoinKeysInlined = false @@ -355,8 +359,9 @@ func newTableMeta(buildKeyIndex []int, buildTypes, buildKeyTypes, probeKeyTypes if !prop.isKeyInteger { isAllKeyInteger = false } - if meta.isJoinKeysInlined && prop.isStringRelatedType { - meta.serializeModes = append(meta.serializeModes, codec.KeepStringLength) + if prop.keyLength == chunk.VarElemLen { + // keep var column by default for var length column + meta.serializeModes = append(meta.serializeModes, codec.KeepVarColumnLength) } else { meta.serializeModes = append(meta.serializeModes, codec.Normal) } @@ -371,9 +376,12 @@ func newTableMeta(buildKeyIndex []int, buildTypes, buildKeyTypes, probeKeyTypes meta.isJoinKeysInlined = false } if !meta.isJoinKeysInlined { - for i := 0; i < len(buildKeyIndex); i++ { - if meta.serializeModes[i] == codec.KeepStringLength { - meta.serializeModes[i] = codec.Normal + if varLengthKeyNumber == 1 { + // if key is not inlined and there is only one var-length key, then don't need to record the var length + for i := 0; i < len(buildKeyIndex); i++ { + if meta.serializeModes[i] == codec.KeepVarColumnLength { + meta.serializeModes[i] = codec.Normal + } } } } else { diff --git a/pkg/executor/join/join_row_table_test.go b/pkg/executor/join/join_row_table_test.go index d5b1cf5eb0e7a..7b9fb361c624c 100644 --- a/pkg/executor/join/join_row_table_test.go +++ b/pkg/executor/join/join_row_table_test.go @@ -24,6 +24,10 @@ import ( "github.com/stretchr/testify/require" ) +func TestHeapObjectCanMove(t *testing.T) { + require.Equal(t, false, heapObjectsCanMove()) +} + func TestFixedOffsetInRowLayout(t *testing.T) { require.Equal(t, 8, sizeOfNextPtr) require.Equal(t, 8, sizeOfLengthField) @@ -174,6 +178,11 @@ func TestJoinTableMetaSerializedMode(t *testing.T) { stringTp := types.NewFieldType(mysql.TypeVarString) binaryStringTp := types.NewFieldType(mysql.TypeBlob) decimalTp := types.NewFieldType(mysql.TypeNewDecimal) + enumTp := types.NewFieldType(mysql.TypeEnum) + enumWithIntFlag := types.NewFieldType(mysql.TypeEnum) + enumWithIntFlag.AddFlag(mysql.EnumSetAsIntFlag) + setTp := types.NewFieldType(mysql.TypeSet) + jsonTp := types.NewFieldType(mysql.TypeJSON) type testCase struct { buildKeyIndex []int @@ -188,12 +197,23 @@ func TestJoinTableMetaSerializedMode(t *testing.T) { // test NeedSignFlag {[]int{0, 1}, []*types.FieldType{uintTp, intTp}, []*types.FieldType{uintTp, intTp}, []*types.FieldType{intTp, intTp}, []codec.SerializeMode{codec.NeedSignFlag, codec.Normal}}, {[]int{0}, []*types.FieldType{uintTp}, []*types.FieldType{uintTp}, []*types.FieldType{intTp}, []codec.SerializeMode{codec.NeedSignFlag}}, - // test KeepStringLength - {[]int{0, 1}, []*types.FieldType{intTp, binaryStringTp}, []*types.FieldType{intTp, binaryStringTp}, []*types.FieldType{intTp, binaryStringTp}, []codec.SerializeMode{codec.Normal, codec.KeepStringLength}}, - {[]int{0}, []*types.FieldType{binaryStringTp}, []*types.FieldType{binaryStringTp}, []*types.FieldType{binaryStringTp}, []codec.SerializeMode{codec.KeepStringLength}}, - // binaryString is not inlined, no need to keep string length + // test KeepVarColumnLength + {[]int{0, 1}, []*types.FieldType{intTp, binaryStringTp}, []*types.FieldType{intTp, binaryStringTp}, []*types.FieldType{intTp, binaryStringTp}, []codec.SerializeMode{codec.Normal, codec.KeepVarColumnLength}}, + {[]int{0}, []*types.FieldType{binaryStringTp}, []*types.FieldType{binaryStringTp}, []*types.FieldType{binaryStringTp}, []codec.SerializeMode{codec.KeepVarColumnLength}}, + // binaryString is not inlined, no need to keep var column length {[]int{0, 1}, []*types.FieldType{intTp, binaryStringTp}, []*types.FieldType{intTp, binaryStringTp}, []*types.FieldType{uintTp, binaryStringTp}, []codec.SerializeMode{codec.NeedSignFlag, codec.Normal}}, - {[]int{0, 1}, []*types.FieldType{stringTp, binaryStringTp}, []*types.FieldType{stringTp, binaryStringTp}, []*types.FieldType{stringTp, binaryStringTp}, []codec.SerializeMode{codec.Normal, codec.Normal}}, + // multiple var-length column, need keep var column length + {[]int{0, 1}, []*types.FieldType{stringTp, binaryStringTp}, []*types.FieldType{stringTp, binaryStringTp}, []*types.FieldType{stringTp, binaryStringTp}, []codec.SerializeMode{codec.KeepVarColumnLength, codec.KeepVarColumnLength}}, + {[]int{0, 1}, []*types.FieldType{stringTp, decimalTp}, []*types.FieldType{stringTp, decimalTp}, []*types.FieldType{stringTp, decimalTp}, []codec.SerializeMode{codec.KeepVarColumnLength, codec.KeepVarColumnLength}}, + // set/json/decimal/enum is treated as var-length column + {[]int{0, 1}, []*types.FieldType{setTp, jsonTp, decimalTp, enumTp}, []*types.FieldType{setTp, jsonTp, decimalTp, enumTp}, []*types.FieldType{setTp, jsonTp, decimalTp, enumTp}, []codec.SerializeMode{codec.KeepVarColumnLength, codec.KeepVarColumnLength, codec.KeepVarColumnLength, codec.KeepVarColumnLength}}, + {[]int{0, 1}, []*types.FieldType{setTp, jsonTp, decimalTp}, []*types.FieldType{setTp, jsonTp, decimalTp}, []*types.FieldType{setTp, jsonTp, decimalTp}, []codec.SerializeMode{codec.KeepVarColumnLength, codec.KeepVarColumnLength, codec.KeepVarColumnLength}}, + {[]int{0, 1}, []*types.FieldType{jsonTp, decimalTp}, []*types.FieldType{jsonTp, decimalTp}, []*types.FieldType{jsonTp, decimalTp}, []codec.SerializeMode{codec.KeepVarColumnLength, codec.KeepVarColumnLength}}, + {[]int{0, 1}, []*types.FieldType{setTp, enumTp}, []*types.FieldType{setTp, enumTp}, []*types.FieldType{setTp, enumTp}, []codec.SerializeMode{codec.KeepVarColumnLength, codec.KeepVarColumnLength}}, + // enumWithIntFlag is fix length column + {[]int{0, 1}, []*types.FieldType{enumWithIntFlag, enumTp}, []*types.FieldType{enumWithIntFlag, enumTp}, []*types.FieldType{enumWithIntFlag, enumTp}, []codec.SerializeMode{codec.Normal, codec.Normal}}, + // single non-inlined var length column don't need keep var column length + {[]int{0, 1}, []*types.FieldType{setTp, enumWithIntFlag}, []*types.FieldType{setTp, enumWithIntFlag}, []*types.FieldType{setTp, enumWithIntFlag}, []codec.SerializeMode{codec.Normal, codec.Normal}}, } for index, test := range testCases { meta := newTableMeta(test.buildKeyIndex, test.buildTypes, test.buildKeyTypes, test.probeKeyTypes, nil, []int{}, false) diff --git a/pkg/executor/join/joiner.go b/pkg/executor/join/joiner.go index 22a76eea1486f..bae727a840d50 100644 --- a/pkg/executor/join/joiner.go +++ b/pkg/executor/join/joiner.go @@ -16,7 +16,7 @@ package join import ( "github.com/pingcap/tidb/pkg/expression" - plannercore "github.com/pingcap/tidb/pkg/planner/core" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/chunk" @@ -116,27 +116,27 @@ type Joiner interface { } // JoinerType returns the join type of a Joiner. -func JoinerType(j Joiner) plannercore.JoinType { +func JoinerType(j Joiner) logicalop.JoinType { switch j.(type) { case *semiJoiner: - return plannercore.SemiJoin + return logicalop.SemiJoin case *antiSemiJoiner: - return plannercore.AntiSemiJoin + return logicalop.AntiSemiJoin case *leftOuterSemiJoiner: - return plannercore.LeftOuterSemiJoin + return logicalop.LeftOuterSemiJoin case *antiLeftOuterSemiJoiner: - return plannercore.AntiLeftOuterSemiJoin + return logicalop.AntiLeftOuterSemiJoin case *leftOuterJoiner: - return plannercore.LeftOuterJoin + return logicalop.LeftOuterJoin case *rightOuterJoiner: - return plannercore.RightOuterJoin + return logicalop.RightOuterJoin default: - return plannercore.InnerJoin + return logicalop.InnerJoin } } // NewJoiner create a joiner -func NewJoiner(ctx sessionctx.Context, joinType plannercore.JoinType, +func NewJoiner(ctx sessionctx.Context, joinType logicalop.JoinType, outerIsRight bool, defaultInner []types.Datum, filter []expression.Expression, lhsColTypes, rhsColTypes []*types.FieldType, childrenUsed [][]int, isNA bool) Joiner { base := baseJoiner{ @@ -159,7 +159,7 @@ func NewJoiner(ctx sessionctx.Context, joinType plannercore.JoinType, zap.Ints("lUsed", base.lUsed), zap.Ints("rUsed", base.rUsed), zap.Int("lCount", len(lhsColTypes)), zap.Int("rCount", len(rhsColTypes))) } - if joinType == plannercore.LeftOuterJoin || joinType == plannercore.RightOuterJoin { + if joinType == logicalop.LeftOuterJoin || joinType == logicalop.RightOuterJoin { innerColTypes := lhsColTypes if !outerIsRight { innerColTypes = rhsColTypes @@ -173,34 +173,34 @@ func NewJoiner(ctx sessionctx.Context, joinType plannercore.JoinType, shallowRowType = append(shallowRowType, lhsColTypes...) shallowRowType = append(shallowRowType, rhsColTypes...) switch joinType { - case plannercore.SemiJoin: + case logicalop.SemiJoin: base.shallowRow = chunk.MutRowFromTypes(shallowRowType) return &semiJoiner{base} - case plannercore.AntiSemiJoin: + case logicalop.AntiSemiJoin: base.shallowRow = chunk.MutRowFromTypes(shallowRowType) if isNA { return &nullAwareAntiSemiJoiner{baseJoiner: base} } return &antiSemiJoiner{base} - case plannercore.LeftOuterSemiJoin: + case logicalop.LeftOuterSemiJoin: base.shallowRow = chunk.MutRowFromTypes(shallowRowType) return &leftOuterSemiJoiner{base} - case plannercore.AntiLeftOuterSemiJoin: + case logicalop.AntiLeftOuterSemiJoin: base.shallowRow = chunk.MutRowFromTypes(shallowRowType) if isNA { return &nullAwareAntiLeftOuterSemiJoiner{baseJoiner: base} } return &antiLeftOuterSemiJoiner{base} - case plannercore.LeftOuterJoin, plannercore.RightOuterJoin, plannercore.InnerJoin: + case logicalop.LeftOuterJoin, logicalop.RightOuterJoin, logicalop.InnerJoin: if len(base.conditions) > 0 { base.chk = chunk.NewChunkWithCapacity(shallowRowType, ctx.GetSessionVars().MaxChunkSize) } switch joinType { - case plannercore.LeftOuterJoin: + case logicalop.LeftOuterJoin: return &leftOuterJoiner{base} - case plannercore.RightOuterJoin: + case logicalop.RightOuterJoin: return &rightOuterJoiner{base} - case plannercore.InnerJoin: + case logicalop.InnerJoin: return &innerJoiner{base} } } diff --git a/pkg/executor/join/joiner_test.go b/pkg/executor/join/joiner_test.go index 626b129f22d55..796f1b17ec398 100644 --- a/pkg/executor/join/joiner_test.go +++ b/pkg/executor/join/joiner_test.go @@ -20,7 +20,7 @@ import ( "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/parser/mysql" - "github.com/pingcap/tidb/pkg/planner/core" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/types" @@ -43,7 +43,7 @@ func defaultCtx() sessionctx.Context { } func TestRequiredRows(t *testing.T) { - joinTypes := []core.JoinType{core.InnerJoin, core.LeftOuterJoin, core.RightOuterJoin} + joinTypes := []logicalop.JoinType{logicalop.InnerJoin, logicalop.LeftOuterJoin, logicalop.RightOuterJoin} lTypes := [][]byte{ {mysql.TypeLong}, {mysql.TypeFloat}, diff --git a/pkg/executor/join/left_outer_join_probe_test.go b/pkg/executor/join/left_outer_join_probe_test.go index ace560d9bcee2..7b3a71393a84b 100644 --- a/pkg/executor/join/left_outer_join_probe_test.go +++ b/pkg/executor/join/left_outer_join_probe_test.go @@ -20,7 +20,7 @@ import ( "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/mysql" - plannercore "github.com/pingcap/tidb/pkg/planner/core" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/chunk" @@ -152,10 +152,10 @@ func TestLeftOuterJoinProbeBasic(t *testing.T) { leftFilter = nil } testJoinProbe(t, false, tc.leftKeyIndex, tc.rightKeyIndex, tc.leftKeyTypes, tc.rightKeyTypes, tc.leftTypes, tc.rightTypes, value, tc.leftUsed, - tc.rightUsed, tc.leftUsedByOtherCondition, tc.rightUsedByOtherCondition, leftFilter, nil, tc.otherCondition, partitionNumber, plannercore.LeftOuterJoin, 200) + tc.rightUsed, tc.leftUsedByOtherCondition, tc.rightUsedByOtherCondition, leftFilter, nil, tc.otherCondition, partitionNumber, logicalop.LeftOuterJoin, 200) testJoinProbe(t, false, tc.leftKeyIndex, tc.rightKeyIndex, toNullableTypes(tc.leftKeyTypes), toNullableTypes(tc.rightKeyTypes), toNullableTypes(tc.leftTypes), toNullableTypes(tc.rightTypes), value, tc.leftUsed, tc.rightUsed, tc.leftUsedByOtherCondition, tc.rightUsedByOtherCondition, - leftFilter, nil, tc.otherCondition, partitionNumber, plannercore.LeftOuterJoin, 200) + leftFilter, nil, tc.otherCondition, partitionNumber, logicalop.LeftOuterJoin, 200) } } } @@ -205,7 +205,7 @@ func TestLeftOuterJoinProbeAllJoinKeys(t *testing.T) { rTypes := lTypes lUsed := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17} rUsed := lUsed - joinType := plannercore.LeftOuterJoin + joinType := logicalop.LeftOuterJoin partitionNumber := 4 rightAsBuildSide := []bool{true, false} @@ -270,7 +270,7 @@ func TestLeftOuterJoinProbeOtherCondition(t *testing.T) { require.NoError(t, err, "error when create other condition") otherCondition := make(expression.CNFExprs, 0) otherCondition = append(otherCondition, sf) - joinType := plannercore.LeftOuterJoin + joinType := logicalop.LeftOuterJoin simpleFilter := createSimpleFilter(t) hasFilter := []bool{false, true} rightAsBuildSide := []bool{false, true} @@ -311,7 +311,7 @@ func TestLeftOuterJoinProbeWithSel(t *testing.T) { require.NoError(t, err, "error when create other condition") otherCondition := make(expression.CNFExprs, 0) otherCondition = append(otherCondition, sf) - joinType := plannercore.LeftOuterJoin + joinType := logicalop.LeftOuterJoin rightAsBuildSide := []bool{false, true} simpleFilter := createSimpleFilter(t) hasFilter := []bool{false, true} diff --git a/pkg/executor/join/outer_join_probe.go b/pkg/executor/join/outer_join_probe.go index bccbfc4bd75ec..444a5faf85d6f 100644 --- a/pkg/executor/join/outer_join_probe.go +++ b/pkg/executor/join/outer_join_probe.go @@ -15,7 +15,6 @@ package join import ( - "sync/atomic" "unsafe" "github.com/pingcap/tidb/pkg/expression" @@ -255,9 +254,7 @@ func (j *outerJoinProbe) probeForInnerSideBuild(chk, joinedChk *chunk.Chunk, rem } j.matchedRowsForCurrentProbeRow++ } else { - if j.ctx.stats != nil { - atomic.AddInt64(&j.ctx.stats.hashStat.probeCollision, 1) - } + j.probeCollision++ } j.matchedRowsHeaders[j.currentProbeRow] = getNextRowAddress(candidateRow) } else { @@ -313,9 +310,7 @@ func (j *outerJoinProbe) probeForOuterSideBuild(chk, joinedChk *chunk.Chunk, rem j.matchedRowsForCurrentProbeRow++ remainCap-- } else { - if j.ctx.stats != nil { - atomic.AddInt64(&j.ctx.stats.hashStat.probeCollision, 1) - } + j.probeCollision++ } j.matchedRowsHeaders[j.currentProbeRow] = getNextRowAddress(candidateRow) } else { diff --git a/pkg/executor/join/right_outer_join_probe_test.go b/pkg/executor/join/right_outer_join_probe_test.go index b9ad5d4ada1d4..3961b27d6bd7f 100644 --- a/pkg/executor/join/right_outer_join_probe_test.go +++ b/pkg/executor/join/right_outer_join_probe_test.go @@ -20,7 +20,7 @@ import ( "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/mysql" - plannercore "github.com/pingcap/tidb/pkg/planner/core" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/chunk" @@ -152,10 +152,10 @@ func TestRightOuterJoinProbeBasic(t *testing.T) { rightFilter = nil } testJoinProbe(t, false, tc.leftKeyIndex, tc.rightKeyIndex, tc.leftKeyTypes, tc.rightKeyTypes, tc.leftTypes, tc.rightTypes, value, tc.leftUsed, - tc.rightUsed, tc.leftUsedByOtherCondition, tc.rightUsedByOtherCondition, nil, rightFilter, tc.otherCondition, partitionNumber, plannercore.RightOuterJoin, 200) + tc.rightUsed, tc.leftUsedByOtherCondition, tc.rightUsedByOtherCondition, nil, rightFilter, tc.otherCondition, partitionNumber, logicalop.RightOuterJoin, 200) testJoinProbe(t, false, tc.leftKeyIndex, tc.rightKeyIndex, toNullableTypes(tc.leftKeyTypes), toNullableTypes(tc.rightKeyTypes), toNullableTypes(tc.leftTypes), toNullableTypes(tc.rightTypes), value, tc.leftUsed, tc.rightUsed, tc.leftUsedByOtherCondition, tc.rightUsedByOtherCondition, - nil, rightFilter, tc.otherCondition, partitionNumber, plannercore.RightOuterJoin, 200) + nil, rightFilter, tc.otherCondition, partitionNumber, logicalop.RightOuterJoin, 200) } } } @@ -205,7 +205,7 @@ func TestRightOuterJoinProbeAllJoinKeys(t *testing.T) { rTypes := lTypes lUsed := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17} rUsed := lUsed - joinType := plannercore.RightOuterJoin + joinType := logicalop.RightOuterJoin rightAsBuildSide := []bool{true, false} @@ -269,7 +269,7 @@ func TestRightOuterJoinProbeOtherCondition(t *testing.T) { require.NoError(t, err, "error when create other condition") otherCondition := make(expression.CNFExprs, 0) otherCondition = append(otherCondition, sf) - joinType := plannercore.RightOuterJoin + joinType := logicalop.RightOuterJoin simpleFilter := createSimpleFilter(t) hasFilter := []bool{false, true} rightAsBuildSide := []bool{false, true} @@ -309,7 +309,7 @@ func TestRightOuterJoinProbeWithSel(t *testing.T) { require.NoError(t, err, "error when create other condition") otherCondition := make(expression.CNFExprs, 0) otherCondition = append(otherCondition, sf) - joinType := plannercore.RightOuterJoin + joinType := logicalop.RightOuterJoin rightAsBuildSide := []bool{false, true} simpleFilter := createSimpleFilter(t) hasFilter := []bool{false, true} diff --git a/pkg/executor/load_data.go b/pkg/executor/load_data.go index e42bc778f77cb..298cef32299d1 100644 --- a/pkg/executor/load_data.go +++ b/pkg/executor/load_data.go @@ -291,7 +291,7 @@ func initEncodeCommitWorkers(e *LoadDataWorker) (*encodeWorker, *commitWorker, e if err2 != nil { return nil, nil, err2 } - colAssignExprs, exprWarnings, err2 := e.controller.CreateColAssignExprs(insertValues.Ctx()) + colAssignExprs, exprWarnings, err2 := e.controller.CreateColAssignExprs(insertValues.Ctx().GetPlanCtx()) if err2 != nil { return nil, nil, err2 } @@ -647,6 +647,11 @@ func (w *commitWorker) checkAndInsertOneBatch(ctx context.Context, rows [][]type case ast.OnDuplicateKeyHandlingIgnore: return w.batchCheckAndInsert(ctx, rows[0:cnt], w.addRecordLD, false) case ast.OnDuplicateKeyHandlingError: + txn, err := w.Ctx().Txn(true) + if err != nil { + return err + } + dupKeyCheck := optimizeDupKeyCheckForNormalInsert(w.Ctx().GetSessionVars(), txn) for i, row := range rows[0:cnt] { sizeHintStep := int(w.Ctx().GetSessionVars().ShardAllocateStep) if sizeHintStep > 0 && i%sizeHintStep == 0 { @@ -655,9 +660,9 @@ func (w *commitWorker) checkAndInsertOneBatch(ctx context.Context, rows [][]type if sizeHint > remain { sizeHint = remain } - err = w.addRecordWithAutoIDHint(ctx, row, sizeHint) + err = w.addRecordWithAutoIDHint(ctx, row, sizeHint, dupKeyCheck) } else { - err = w.addRecord(ctx, row) + err = w.addRecord(ctx, row, dupKeyCheck) } if err != nil { return err @@ -670,11 +675,11 @@ func (w *commitWorker) checkAndInsertOneBatch(ctx context.Context, rows [][]type } } -func (w *commitWorker) addRecordLD(ctx context.Context, row []types.Datum) error { +func (w *commitWorker) addRecordLD(ctx context.Context, row []types.Datum, dupKeyCheck table.DupKeyCheckMode) error { if row == nil { return nil } - return w.addRecord(ctx, row) + return w.addRecord(ctx, row, dupKeyCheck) } // GetInfilePath get infile path. diff --git a/pkg/executor/memtable_reader.go b/pkg/executor/memtable_reader.go index 8a7644c2feb54..316439a638b99 100644 --- a/pkg/executor/memtable_reader.go +++ b/pkg/executor/memtable_reader.go @@ -791,10 +791,7 @@ func (e *hotRegionsHistoryRetriver) retrieve(ctx context.Context, sctx sessionct } tz := sctx.GetSessionVars().Location() is := sessiontxn.GetTxnManager(sctx).GetTxnInfoSchema() - allSchemaNames := is.AllSchemaNames() - schemas := ensureSchemaTables(ctx, is, allSchemaNames) - schemas = tikvHelper.FilterMemDBs(schemas) - tables := tikvHelper.GetTablesInfoWithKeyRange(schemas) + tables := tikvHelper.GetTablesInfoWithKeyRange(is, tikvHelper.FilterMemDBs) for e.heap.Len() > 0 && len(finalRows) < hotRegionsHistoryBatchSize { minTimeItem := heap.Pop(e.heap).(hotRegionsResult) rows, err := e.getHotRegionRowWithSchemaInfo(minTimeItem.messages.HistoryHotRegion[0], tikvHelper, tables, tz) diff --git a/pkg/executor/partition_table_test.go b/pkg/executor/partition_table_test.go index 7a3f5f6a21849..7dbe10f818478 100644 --- a/pkg/executor/partition_table_test.go +++ b/pkg/executor/partition_table_test.go @@ -1184,49 +1184,49 @@ func TestPartitionTableWithDifferentJoin(t *testing.T) { // tk.MustHavePlan(queryHash, "IndexMergeJoin") // tk.MustQuery(queryHash).Sort().Check(tk.MustQuery(queryRegular).Sort().Rows()) tk.MustQuery(queryHash) - tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1815|Optimizer Hint /*+ INL_MERGE_JOIN(trange, trange2) */ is inapplicable")) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1815|The INDEX MERGE JOIN hint is deprecated for usage, try other hints.")) queryHash = fmt.Sprintf("select /*+ inl_merge_join(trange, trange2) */ * from trange, trange2 where trange.a=trange2.a and trange.a > %v and trange2.a > %v;", x1, x2) // queryRegular = fmt.Sprintf("select /*+ inl_merge_join(tregular2, tregular4) */ * from tregular2, tregular4 where tregular2.a=tregular4.a and tregular2.a > %v and tregular4.a > %v;", x1, x2) // tk.MustHavePlan(queryHash, "IndexMergeJoin") // tk.MustQuery(queryHash).Sort().Check(tk.MustQuery(queryRegular).Sort().Rows()) tk.MustQuery(queryHash) - tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1815|Optimizer Hint /*+ INL_MERGE_JOIN(trange, trange2) */ is inapplicable")) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1815|The INDEX MERGE JOIN hint is deprecated for usage, try other hints.")) queryHash = fmt.Sprintf("select /*+ inl_merge_join(trange, trange2) */ * from trange, trange2 where trange.a=trange2.a and trange.a > %v and trange.b > %v;", x1, x2) // queryRegular = fmt.Sprintf("select /*+ inl_merge_join(tregular2, tregular4) */ * from tregular2, tregular4 where tregular2.a=tregular4.a and tregular2.a > %v and tregular2.b > %v;", x1, x2) // tk.MustHavePlan(queryHash, "IndexMergeJoin") // tk.MustQuery(queryHash).Sort().Check(tk.MustQuery(queryRegular).Sort().Rows()) tk.MustQuery(queryHash) - tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1815|Optimizer Hint /*+ INL_MERGE_JOIN(trange, trange2) */ is inapplicable")) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1815|The INDEX MERGE JOIN hint is deprecated for usage, try other hints.")) queryHash = fmt.Sprintf("select /*+ inl_merge_join(trange, trange2) */ * from trange, trange2 where trange.a=trange2.a and trange.a > %v and trange2.b > %v;", x1, x2) // queryRegular = fmt.Sprintf("select /*+ inl_merge_join(tregular2, tregular4) */ * from tregular2, tregular4 where tregular2.a=tregular4.a and tregular2.a > %v and tregular4.b > %v;", x1, x2) // tk.MustHavePlan(queryHash, "IndexMergeJoin") // tk.MustQuery(queryHash).Sort().Check(tk.MustQuery(queryRegular).Sort().Rows()) tk.MustQuery(queryHash) - tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1815|Optimizer Hint /*+ INL_MERGE_JOIN(trange, trange2) */ is inapplicable")) + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning|1815|The INDEX MERGE JOIN hint is deprecated for usage, try other hints.")) // group 6 // index_merge_join range partition and regualr table queryHash = fmt.Sprintf("select /*+ inl_merge_join(trange, tregular4) */ * from trange, tregular4 where trange.a=tregular4.a and trange.a > %v;", x1) queryRegular = fmt.Sprintf("select /*+ inl_merge_join(tregular2, tregular4) */ * from tregular2, tregular4 where tregular2.a=tregular4.a and tregular2.a > %v;", x1) - tk.MustHavePlan(queryHash, "IndexMergeJoin") + tk.MustNotHavePlan(queryHash, "IndexMergeJoin") tk.MustQuery(queryHash).Sort().Check(tk.MustQuery(queryRegular).Sort().Rows()) queryHash = fmt.Sprintf("select /*+ inl_merge_join(trange, tregular4) */ * from trange, tregular4 where trange.a=tregular4.a and trange.a > %v and tregular4.a > %v;", x1, x2) queryRegular = fmt.Sprintf("select /*+ inl_merge_join(tregular2, tregular4) */ * from tregular2, tregular4 where tregular2.a=tregular4.a and tregular2.a > %v and tregular4.a > %v;", x1, x2) - tk.MustHavePlan(queryHash, "IndexMergeJoin") + tk.MustNotHavePlan(queryHash, "IndexMergeJoin") tk.MustQuery(queryHash).Sort().Check(tk.MustQuery(queryRegular).Sort().Rows()) queryHash = fmt.Sprintf("select /*+ inl_merge_join(trange, tregular4) */ * from trange, tregular4 where trange.a=tregular4.a and trange.a > %v and trange.b > %v;", x1, x2) queryRegular = fmt.Sprintf("select /*+ inl_merge_join(tregular2, tregular4) */ * from tregular2, tregular4 where tregular2.a=tregular4.a and tregular2.a > %v and tregular2.b > %v;", x1, x2) - tk.MustHavePlan(queryHash, "IndexMergeJoin") + tk.MustNotHavePlan(queryHash, "IndexMergeJoin") tk.MustQuery(queryHash).Sort().Check(tk.MustQuery(queryRegular).Sort().Rows()) queryHash = fmt.Sprintf("select /*+ inl_merge_join(trange, tregular4) */ * from trange, tregular4 where trange.a=tregular4.a and trange.a > %v and tregular4.b > %v;", x1, x2) queryRegular = fmt.Sprintf("select /*+ inl_merge_join(tregular2, tregular4) */ * from tregular2, tregular4 where tregular2.a=tregular4.a and tregular2.a > %v and tregular4.b > %v;", x1, x2) - tk.MustHavePlan(queryHash, "IndexMergeJoin") + tk.MustNotHavePlan(queryHash, "IndexMergeJoin") tk.MustQuery(queryHash).Sort().Check(tk.MustQuery(queryRegular).Sort().Rows()) // group 7 @@ -2099,7 +2099,7 @@ func TestDropGlobalIndex(t *testing.T) { partition p0 values less than (4), partition p1 values less than (7), partition p2 values less than (10))`) - tk.MustExec("alter table p add unique idx(id)") + tk.MustExec("alter table p add unique idx(id) global") failpoint.Enable("github.com/pingcap/tidb/pkg/ddl/checkDropGlobalIndex", `return(true)`) tk.MustExec("alter table p drop index idx") @@ -2243,10 +2243,6 @@ func TestIssue26251(t *testing.T) { store := testkit.CreateMockStore(t) tk1 := testkit.NewTestKit(t, store) - tk1.MustExec("set tidb_enable_global_index=true") - defer func() { - tk1.MustExec("set tidb_enable_global_index=default") - }() tk1.MustExec("use test") tk1.MustExec("create table tp (id int primary key) partition by range (id) (partition p0 values less than (100));") tk1.MustExec("create table tn (id int primary key);") @@ -2416,7 +2412,7 @@ func TestGlobalIndexWithSelectLock(t *testing.T) { tk1 := testkit.NewTestKit(t, store) tk1.MustExec("set tidb_enable_global_index = true") tk1.MustExec("use test") - tk1.MustExec("create table t(a int, b int, unique index(b), primary key(a)) partition by hash(a) partitions 5;") + tk1.MustExec("create table t(a int, b int, unique index(b) global, primary key(a)) partition by hash(a) partitions 5;") tk1.MustExec("insert into t values (1,1),(2,2),(3,3),(4,4),(5,5);") tk1.MustExec("begin") tk1.MustExec("select * from t use index(b) where b = 2 order by b limit 1 for update;") diff --git a/pkg/executor/pipelined_window.go b/pkg/executor/pipelined_window.go index 9bd7ea5256d1c..2cea85d02e284 100644 --- a/pkg/executor/pipelined_window.go +++ b/pkg/executor/pipelined_window.go @@ -23,7 +23,7 @@ import ( "github.com/pingcap/tidb/pkg/executor/internal/vecgroupchecker" "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/parser/ast" - "github.com/pingcap/tidb/pkg/planner/core" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/util/chunk" ) @@ -41,8 +41,8 @@ type PipelinedWindowExec struct { windowFuncs []aggfuncs.AggFunc slidingWindowFuncs []aggfuncs.SlidingWindowAggFunc partialResults []aggfuncs.PartialResult - start *core.FrameBound - end *core.FrameBound + start *logicalop.FrameBound + end *logicalop.FrameBound groupChecker *vecgroupchecker.VecGroupChecker // childResult stores the child chunk. Note that even if remaining is 0, e.rows might still references rows in data[0].chk after returned it to upper executor, since there is no guarantee what the upper executor will do to the returned chunk, it might destroy the data (as in the benchmark test, it reused the chunk to pull data, and it will be chk.Reset(), causing panicking). So dataIdx, accumulated and dropped are added to ensure that chunk will only be returned if there is no row reference. @@ -84,19 +84,10 @@ func (e *PipelinedWindowExec) Close() error { // Open implements the Executor Open interface func (e *PipelinedWindowExec) Open(ctx context.Context) (err error) { - e.rowToConsume = 0 - e.done = false - e.accumulated = 0 - e.dropped = 0 - e.data = make([]dataInfo, 0) - e.dataIdx = 0 - e.slidingWindowFuncs = make([]aggfuncs.SlidingWindowAggFunc, len(e.windowFuncs)) - for i, windowFunc := range e.windowFuncs { - if slidingWindowAggFunc, ok := windowFunc.(aggfuncs.SlidingWindowAggFunc); ok { - e.slidingWindowFuncs[i] = slidingWindowAggFunc - } - } - e.rows = make([]chunk.Row, 0) + e.done, e.newPartition, e.whole, e.initializedSlidingWindow = false, false, false, false + e.dataIdx, e.curRowIdx, e.dropped, e.rowToConsume, e.accumulated = 0, 0, 0, 0, 0 + e.lastStartRow, e.lastEndRow, e.stagedStartRow, e.stagedEndRow, e.rowStart, e.rowCnt = 0, 0, 0, 0, 0, 0 + e.rows, e.data = make([]chunk.Row, 0), make([]dataInfo, 0) return e.BaseExecutor.Open(ctx) } diff --git a/pkg/executor/pkg_test.go b/pkg/executor/pkg_test.go index 6ae1f0c3f29f5..264bee6fc3acb 100644 --- a/pkg/executor/pkg_test.go +++ b/pkg/executor/pkg_test.go @@ -25,7 +25,7 @@ import ( "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/mysql" - plannercore "github.com/pingcap/tidb/pkg/planner/core" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/chunk" "github.com/pingcap/tidb/pkg/util/mock" @@ -63,7 +63,7 @@ func TestNestedLoopApply(t *testing.T) { outerFilter := expression.NewFunctionInternal(sctx, ast.LT, types.NewFieldType(mysql.TypeTiny), col0, con) innerFilter := outerFilter.Clone() otherFilter := expression.NewFunctionInternal(sctx, ast.EQ, types.NewFieldType(mysql.TypeTiny), col0, col1) - joiner := join.NewJoiner(sctx, plannercore.InnerJoin, false, + joiner := join.NewJoiner(sctx, logicalop.InnerJoin, false, make([]types.Datum, innerExec.Schema().Len()), []expression.Expression{otherFilter}, exec.RetTypes(outerExec), exec.RetTypes(innerExec), nil, false) joinSchema := expression.NewSchema(col0, col1) diff --git a/pkg/executor/point_get.go b/pkg/executor/point_get.go index ee3b7047aa89e..46d8a9af0cb03 100644 --- a/pkg/executor/point_get.go +++ b/pkg/executor/point_get.go @@ -659,7 +659,7 @@ func (e *PointGetExecutor) verifyTxnScope() error { var partName string is := e.Ctx().GetInfoSchema().(infoschema.InfoSchema) - tblInfo, _ := is.TableByID((e.tblInfo.ID)) + tblInfo, _ := is.TableByID(context.Background(), e.tblInfo.ID) tblName := tblInfo.Meta().Name.String() tblID := GetPhysID(tblInfo.Meta(), e.partitionDefIdx) if tblID != tblInfo.Meta().ID { diff --git a/pkg/executor/projection.go b/pkg/executor/projection.go index 48f3992c61638..ce1113dde4776 100644 --- a/pkg/executor/projection.go +++ b/pkg/executor/projection.go @@ -95,7 +95,7 @@ type ProjectionExec struct { parentReqRows int64 memTracker *memory.Tracker - wg sync.WaitGroup + wg *sync.WaitGroup calculateNoDelay bool prepared bool @@ -137,6 +137,8 @@ func (e *ProjectionExec) open(_ context.Context) error { e.memTracker.Consume(e.childResult.MemoryUsage()) } + e.wg = &sync.WaitGroup{} + return nil } diff --git a/pkg/executor/recover_test.go b/pkg/executor/recover_test.go index e47c94632ce76..10785751f7acf 100644 --- a/pkg/executor/recover_test.go +++ b/pkg/executor/recover_test.go @@ -17,6 +17,7 @@ package executor_test import ( "context" "fmt" + "sync" "testing" "time" @@ -31,6 +32,7 @@ import ( "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/types" + "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/dbterror" "github.com/pingcap/tidb/pkg/util/gcutil" "github.com/stretchr/testify/require" @@ -656,15 +658,24 @@ func TestFlashbackSchemaWithManyTables(t *testing.T) { // Set GC enable. require.NoError(t, gcutil.EnableGC(tk.Session())) - for i := 0; i < 700; i++ { - tk.MustExec(fmt.Sprintf("create table t%d (a int)", i)) + var wg util.WaitGroupWrapper + for i := 0; i < 10; i++ { + idx := i + wg.Run(func() { + tkit := testkit.NewTestKit(t, store) + tkit.MustExec("use many_tables") + for j := 0; j < 70; j++ { + tkit.MustExec(fmt.Sprintf("create table t_%d_%d (a int)", idx, j)) + } + }) } + wg.Wait() tk.MustExec("drop database many_tables") tk.MustExec("flashback database many_tables") - tk.MustQuery("select count(*) from many_tables.t0").Check(testkit.Rows("0")) + tk.MustQuery("select count(*) from many_tables.t_0_0").Check(testkit.Rows("0")) } // MockGC is used to make GC work in the test environment. @@ -690,3 +701,51 @@ func MockGC(tk *testkit.TestKit) (string, string, string, func()) { tk.MustExec("delete from mysql.tidb where variable_name in ( 'tikv_gc_safe_point','tikv_gc_enable' )") return timeBeforeDrop, timeAfterDrop, safePointSQL, resetGC } + +func TestFlashbackClusterWithManyDBs(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + + timeBeforeDrop, _, safePointSQL, resetGC := MockGC(tk) + defer resetGC() + + // Set GC safe point. + tk.MustExec(fmt.Sprintf(safePointSQL, timeBeforeDrop)) + + backup := kv.TxnEntrySizeLimit.Load() + kv.TxnEntrySizeLimit.Store(50000) + t.Cleanup(func() { + kv.TxnEntrySizeLimit.Store(backup) + }) + + tk.MustExec("set @@global.tidb_ddl_error_count_limit = 2") + tk.MustExec("set @@global.tidb_enable_fast_create_table=ON") + + var wg sync.WaitGroup + dbPerWorker := 10 + for i := 0; i < 40; i++ { + i := i + wg.Add(1) + go func() { + defer wg.Done() + tk2 := testkit.NewTestKit(t, store) + for j := 0; j < dbPerWorker; j++ { + dbName := fmt.Sprintf("db_%d", i*dbPerWorker+j) + tk2.MustExec(fmt.Sprintf("create database %s", dbName)) + } + }() + } + + wg.Wait() + + ts, _ := store.CurrentVersion(oracle.GlobalTxnScope) + flashbackTs := oracle.GetTimeFromTS(ts.Ver) + + injectSafeTS := oracle.GoTimeToTS(flashbackTs.Add(10 * time.Second)) + testfailpoint.Enable(t, "github.com/pingcap/tidb/pkg/ddl/mockFlashbackTest", `return(true)`) + testfailpoint.Enable(t, "github.com/pingcap/tidb/pkg/ddl/injectSafeTS", + fmt.Sprintf("return(%v)", injectSafeTS)) + + // this test will fail before the fix, because the DDL job KV entry is too large. + tk.MustExec(fmt.Sprintf("flashback cluster to timestamp '%s'", flashbackTs)) +} diff --git a/pkg/executor/replace.go b/pkg/executor/replace.go index e52dc608343bd..3b9e9b4101d34 100644 --- a/pkg/executor/replace.go +++ b/pkg/executor/replace.go @@ -24,6 +24,7 @@ import ( "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/meta/autoid" "github.com/pingcap/tidb/pkg/parser/mysql" + "github.com/pingcap/tidb/pkg/table" "github.com/pingcap/tidb/pkg/table/tables" "github.com/pingcap/tidb/pkg/tablecodec" "github.com/pingcap/tidb/pkg/types" @@ -62,7 +63,7 @@ func (e *ReplaceExec) Open(ctx context.Context) error { } // replaceRow removes all duplicate rows for one row, then inserts it. -func (e *ReplaceExec) replaceRow(ctx context.Context, r toBeCheckedRow) error { +func (e *ReplaceExec) replaceRow(ctx context.Context, r toBeCheckedRow, dupKeyCheck table.DupKeyCheckMode) error { txn, err := e.Ctx().Txn(true) if err != nil { return err @@ -105,7 +106,7 @@ func (e *ReplaceExec) replaceRow(ctx context.Context, r toBeCheckedRow) error { } // No duplicated rows now, insert the row. - err = e.addRecord(ctx, r.row) + err = e.addRecord(ctx, r.row, dupKeyCheck) if err != nil { return err } @@ -179,9 +180,12 @@ func (e *ReplaceExec) exec(ctx context.Context, newRows [][]types.Datum) error { if e.stats != nil { e.stats.Prefetch = time.Since(prefetchStart) } - e.Ctx().GetSessionVars().StmtCtx.AddRecordRows(uint64(len(newRows))) + sessionVars := e.Ctx().GetSessionVars() + sessionVars.StmtCtx.AddRecordRows(uint64(len(newRows))) + // TODO: seems we can optimize it to `DupKeyCheckSkip` because all conflict rows are deleted in previous steps. + dupKeyCheck := optimizeDupKeyCheckForNormalInsert(sessionVars, txn) for _, r := range toBeCheckedRows { - err = e.replaceRow(ctx, r) + err = e.replaceRow(ctx, r, dupKeyCheck) if err != nil { return err } diff --git a/pkg/executor/set.go b/pkg/executor/set.go index 89a65bb77a2e4..7649027df2abb 100644 --- a/pkg/executor/set.go +++ b/pkg/executor/set.go @@ -326,7 +326,11 @@ func (e *SetExecutor) loadSnapshotInfoSchemaIfNeeded(name string, snapshotTS uin if name != variable.TiDBSnapshot && name != variable.TiDBTxnReadTS { return nil } - vars := e.Ctx().GetSessionVars() + return loadSnapshotInfoSchemaIfNeeded(e.Ctx(), snapshotTS) +} + +func loadSnapshotInfoSchemaIfNeeded(sctx sessionctx.Context, snapshotTS uint64) error { + vars := sctx.GetSessionVars() if snapshotTS == 0 { vars.SnapshotInfoschema = nil return nil @@ -334,12 +338,12 @@ func (e *SetExecutor) loadSnapshotInfoSchemaIfNeeded(name string, snapshotTS uin logutil.BgLogger().Info("load snapshot info schema", zap.Uint64("conn", vars.ConnectionID), zap.Uint64("SnapshotTS", snapshotTS)) - dom := domain.GetDomain(e.Ctx()) + dom := domain.GetDomain(sctx) snapInfo, err := dom.GetSnapshotInfoSchema(snapshotTS) if err != nil { return err } - vars.SnapshotInfoschema = temptable.AttachLocalTemporaryTableInfoSchema(e.Ctx(), snapInfo) + vars.SnapshotInfoschema = temptable.AttachLocalTemporaryTableInfoSchema(sctx, snapInfo) return nil } diff --git a/pkg/executor/set_config.go b/pkg/executor/set_config.go index 7ed6aa119c45a..92475d457ca35 100644 --- a/pkg/executor/set_config.go +++ b/pkg/executor/set_config.go @@ -70,7 +70,7 @@ func (s *SetConfigExec) Open(context.Context) error { if s.p.Type == "tiflash" { if !strings.HasPrefix(s.p.Name, "raftstore-proxy.") { errorBody := "This command can only change config items begin with 'raftstore-proxy'. For other TiFlash config items, please update the config file directly. Your change to the config file will take effect immediately without a restart." - return errors.Errorf(errorBody) + return errors.New(errorBody) } s.p.Name = strings.TrimPrefix(s.p.Name, "raftstore-proxy.") } diff --git a/pkg/executor/set_test.go b/pkg/executor/set_test.go index e350d0264dff8..764537b5a030c 100644 --- a/pkg/executor/set_test.go +++ b/pkg/executor/set_test.go @@ -766,6 +766,23 @@ func TestSetVar(t *testing.T) { tk.MustExec("set global tidb_max_auto_analyze_time = -1") tk.MustQuery("select @@tidb_max_auto_analyze_time").Check(testkit.Rows("0")) + // test for instance plan cache variables + tk.MustQuery("select @@global.tidb_enable_instance_plan_cache").Check(testkit.Rows("0")) // default 0 + tk.MustQuery("select @@global.tidb_instance_plan_cache_target_mem_size").Check(testkit.Rows("104857600")) + tk.MustQuery("select @@global.tidb_instance_plan_cache_max_mem_size").Check(testkit.Rows("125829120")) + tk.MustExecToErr("set global tidb_instance_plan_cache_target_mem_size = 125829121") // target <= max + tk.MustExecToErr("set global tidb_instance_plan_cache_max_mem_size = 104857599") + tk.MustExec("set global tidb_instance_plan_cache_target_mem_size = 114857600") + tk.MustQuery("select @@global.tidb_instance_plan_cache_target_mem_size").Check(testkit.Rows("114857600")) + tk.MustExec("set global tidb_instance_plan_cache_max_mem_size = 135829120") + tk.MustQuery("select @@global.tidb_instance_plan_cache_max_mem_size").Check(testkit.Rows("135829120")) + tk.MustExec("set global tidb_instance_plan_cache_max_mem_size = 1GiB") + tk.MustQuery("select @@global.tidb_instance_plan_cache_max_mem_size").Check(testkit.Rows("1073741824")) + tk.MustExec("set global tidb_instance_plan_cache_target_mem_size = 999MiB") + tk.MustQuery("select @@global.tidb_instance_plan_cache_target_mem_size").Check(testkit.Rows("1047527424")) + tk.MustExec("set global tidb_instance_plan_cache_target_mem_size = 998MiB") + tk.MustQuery("select @@global.tidb_instance_plan_cache_target_mem_size").Check(testkit.Rows("1046478848")) + // test variables for cost model ver2 tk.MustQuery("select @@tidb_cost_model_version").Check(testkit.Rows(fmt.Sprintf("%v", variable.DefTiDBCostModelVer))) tk.MustExec("set tidb_cost_model_version=3") diff --git a/pkg/executor/show.go b/pkg/executor/show.go index e7c41f4f4469e..3287a4df2108c 100644 --- a/pkg/executor/show.go +++ b/pkg/executor/show.go @@ -494,6 +494,67 @@ func (*ShowExec) fetchShowOpenTables() error { return nil } +// showInfo represents the result of `SHOW TABLES`. +type showInfo struct { + Name model.CIStr + // only used for show full tables + TableType string +} + +// getTableType returns the type of the table. +func (e *ShowExec) getTableType(tb *model.TableInfo) string { + switch { + case tb.IsView(): + return "VIEW" + case tb.IsSequence(): + return "SEQUENCE" + case util.IsSystemView(e.DBName.L): + return "SYSTEM VIEW" + default: + return "BASE TABLE" + } +} + +// fetchShowInfoByName fetches the show info for `SHOW TABLES like 'xxx'` +func (e *ShowExec) fetchShowInfoByName(ctx context.Context, name string) ([]*showInfo, error) { + tb, err := e.is.TableByName(ctx, e.DBName, model.NewCIStr(name)) + if err != nil { + // do nothing if table not exists + if infoschema.ErrTableNotExists.Equal(err) { + return nil, nil + } + return nil, errors.Trace(err) + } + return []*showInfo{{Name: tb.Meta().Name, TableType: e.getTableType(tb.Meta())}}, nil +} + +// fetchShowSimpleTables fetches the table info for `SHOW TABLE`. +func (e *ShowExec) fetchShowSimpleTables(ctx context.Context) ([]*showInfo, error) { + tb, err := e.is.SchemaSimpleTableInfos(ctx, e.DBName) + if err != nil { + return nil, errors.Trace(err) + } + showInfos := make([]*showInfo, 0, len(tb)) + for _, v := range tb { + // TODO: consider add type info to TableNameInfo + showInfos = append(showInfos, &showInfo{Name: v.Name}) + } + return showInfos, nil +} + +// fetchShowFullTables fetches the table info for `SHOW FULL TABLES`. +func (e *ShowExec) fetchShowFullTables(ctx context.Context) ([]*showInfo, error) { + tb, err := e.is.SchemaTableInfos(ctx, e.DBName) + if err != nil { + return nil, errors.Trace(err) + } + showInfos := make([]*showInfo, 0, len(tb)) + for _, v := range tb { + showInfos = append(showInfos, &showInfo{Name: v.Name, TableType: e.getTableType(v)}) + } + return showInfos, nil +} + func (e *ShowExec) fetchShowTables(ctx context.Context) error { checker := privilege.GetPrivilegeManager(e.Ctx()) if checker != nil && e.Ctx().GetSessionVars().User != nil { @@ -504,12 +565,11 @@ func (e *ShowExec) fetchShowTables(ctx context.Context) error { if !e.is.SchemaExists(e.DBName) { return exeerrors.ErrBadDB.GenWithStackByArgs(e.DBName) } - // sort for tables - schemaTables, err := e.is.SchemaTableInfos(ctx, e.DBName) - if err != nil { - return errors.Trace(err) - } - tableNames := make([]string, 0, len(schemaTables)) + var ( + tableNames = make([]string, 0) + showInfos []*showInfo + err error + ) activeRoles := e.Ctx().GetSessionVars().ActiveRoles var ( tableTypes = make(map[string]string) @@ -521,7 +581,18 @@ func (e *ShowExec) fetchShowTables(ctx context.Context) error { fieldFilter = e.Extractor.Field() fieldPatternsLike = e.Extractor.FieldPatternLike() } - for _, v := range schemaTables { + + if fieldFilter != "" { + showInfos, err = e.fetchShowInfoByName(ctx, fieldFilter) + } else if e.Full { + showInfos, err = e.fetchShowFullTables(ctx) + } else { + showInfos, err = e.fetchShowSimpleTables(ctx) + } + if err != nil { + return errors.Trace(err) + } + for _, v := range showInfos { // Test with mysql.AllPrivMask means any privilege would be OK. // TODO: Should consider column privileges, which also make a table visible. if checker != nil && !checker.RequestVerification(activeRoles, e.DBName.O, v.Name.O, "", mysql.AllPrivMask) { @@ -532,14 +603,8 @@ func (e *ShowExec) fetchShowTables(ctx context.Context) error { continue } tableNames = append(tableNames, v.Name.O) - if v.IsView() { - tableTypes[v.Name.O] = "VIEW" - } else if v.IsSequence() { - tableTypes[v.Name.O] = "SEQUENCE" - } else if util.IsSystemView(e.DBName.L) { - tableTypes[v.Name.O] = "SYSTEM VIEW" - } else { - tableTypes[v.Name.O] = "BASE TABLE" + if e.Full { + tableTypes[v.Name.O] = v.TableType } } slices.Sort(tableNames) @@ -618,6 +683,11 @@ func (e *ShowExec) fetchShowColumns(ctx context.Context) error { if err != nil { return errors.Trace(err) } + // we will fill the column type information later, so clone a new table here. + tb, err = table.TableFromMeta(tb.Allocators(e.Ctx().GetTableCtx()), tb.Meta().Clone()) + if err != nil { + return errors.Trace(err) + } var ( fieldPatternsLike collate.WildcardPattern fieldFilter string @@ -1170,6 +1240,9 @@ func constructResultOfShowCreateTable(ctx sessionctx.Context, dbName *model.CISt buf.WriteString(" /*T![clustered_index] NONCLUSTERED */") } } + if idxInfo.Global { + buf.WriteString(" /*T![global_index] GLOBAL */") + } if i != len(publicIndices)-1 { buf.WriteString(",\n") } @@ -1951,7 +2024,7 @@ func (e *ShowExec) getTable() (table.Table, error) { if e.Table == nil { return nil, errors.New("table not found") } - tb, ok := e.is.TableByID(e.Table.TableInfo.ID) + tb, ok := e.is.TableByID(context.Background(), e.Table.TableInfo.ID) if !ok { return nil, errors.Errorf("table %s not found", e.Table.Name) } @@ -2252,7 +2325,8 @@ func (e *ShowExec) fetchShowSessionStates(ctx context.Context) error { return nil } -func fillOneImportJobInfo(info *importer.JobInfo, result *chunk.Chunk, importedRowCount int64) { +// FillOneImportJobInfo is exported for testing. +func FillOneImportJobInfo(info *importer.JobInfo, result *chunk.Chunk, importedRowCount int64) { fullTableName := utils.EncloseDBAndTable(info.TableSchema, info.TableName) result.AppendInt64(0, info.ID) result.AppendString(1, info.Parameters.FileLocation) @@ -2293,7 +2367,7 @@ func handleImportJobInfo(ctx context.Context, info *importer.JobInfo, result *ch } importedRowCount = int64(rows) } - fillOneImportJobInfo(info, result, importedRowCount) + FillOneImportJobInfo(info, result, importedRowCount) return nil } @@ -2383,6 +2457,10 @@ func runWithSystemSession(ctx context.Context, sctx sessionctx.Context, fn func( return err } defer b.ReleaseSysSession(ctx, sysCtx) + + if err = loadSnapshotInfoSchemaIfNeeded(sysCtx, sctx.GetSessionVars().SnapshotTS); err != nil { + return err + } // `fn` may use KV transaction, so initialize the txn here if err = sessiontxn.NewTxn(ctx, sysCtx); err != nil { return err diff --git a/pkg/executor/show_test.go b/pkg/executor/show_test.go index 17c44771cea84..2b6ee9f89c9fb 100644 --- a/pkg/executor/show_test.go +++ b/pkg/executor/show_test.go @@ -12,14 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. -package executor +package executor_test import ( "testing" "time" + "github.com/pingcap/tidb/pkg/errno" + "github.com/pingcap/tidb/pkg/executor" "github.com/pingcap/tidb/pkg/executor/importer" "github.com/pingcap/tidb/pkg/parser/mysql" + "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/chunk" "github.com/stretchr/testify/require" @@ -44,12 +47,12 @@ func Test_fillOneImportJobInfo(t *testing.T) { jobInfo := &importer.JobInfo{ Parameters: importer.ImportParameters{}, } - fillOneImportJobInfo(jobInfo, c, -1) + executor.FillOneImportJobInfo(jobInfo, c, -1) require.True(t, c.GetRow(0).IsNull(7)) require.True(t, c.GetRow(0).IsNull(10)) require.True(t, c.GetRow(0).IsNull(11)) - fillOneImportJobInfo(jobInfo, c, 0) + executor.FillOneImportJobInfo(jobInfo, c, 0) require.False(t, c.GetRow(1).IsNull(7)) require.Equal(t, uint64(0), c.GetRow(1).GetUint64(7)) require.True(t, c.GetRow(1).IsNull(10)) @@ -58,9 +61,32 @@ func Test_fillOneImportJobInfo(t *testing.T) { jobInfo.Summary = &importer.JobSummary{ImportedRows: 123} jobInfo.StartTime = types.NewTime(types.FromGoTime(time.Now()), mysql.TypeTimestamp, 0) jobInfo.EndTime = types.NewTime(types.FromGoTime(time.Now()), mysql.TypeTimestamp, 0) - fillOneImportJobInfo(jobInfo, c, 0) + executor.FillOneImportJobInfo(jobInfo, c, 0) require.False(t, c.GetRow(2).IsNull(7)) require.Equal(t, uint64(123), c.GetRow(2).GetUint64(7)) require.False(t, c.GetRow(2).IsNull(10)) require.False(t, c.GetRow(2).IsNull(11)) } + +func TestShow(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + + tk.MustExec("use test") + tk.MustExec("create table t(id int, abclmn int);") + tk.MustExec("create table abclmn(a int);") + + tk.MustGetErrCode("show columns from t like id", errno.ErrBadField) + tk.MustGetErrCode("show columns from t like `id`", errno.ErrBadField) + + tk.MustQuery("show tables").Check(testkit.Rows("abclmn", "t")) + tk.MustQuery("show full tables").Check(testkit.Rows("abclmn BASE TABLE", "t BASE TABLE")) + tk.MustQuery("show tables like 't'").Check(testkit.Rows("t")) + tk.MustQuery("show tables like 'T'").Check(testkit.Rows("t")) + tk.MustQuery("show tables like 'ABCLMN'").Check(testkit.Rows("abclmn")) + tk.MustQuery("show tables like 'ABC%'").Check(testkit.Rows("abclmn")) + tk.MustQuery("show tables like '%lmn'").Check(testkit.Rows("abclmn")) + tk.MustQuery("show full tables like '%lmn'").Check(testkit.Rows("abclmn BASE TABLE")) + tk.MustGetErrCode("show tables like T", errno.ErrBadField) + tk.MustGetErrCode("show tables like `T`", errno.ErrBadField) +} diff --git a/pkg/executor/simple.go b/pkg/executor/simple.go index b5c5adecf75d3..737eedf2690c7 100644 --- a/pkg/executor/simple.go +++ b/pkg/executor/simple.go @@ -2592,7 +2592,7 @@ func (e *SimpleExec) executeKillStmt(ctx context.Context, s *ast.KillStmt) error if x, ok := s.Expr.(*ast.FuncCallExpr); ok { if x.FnName.L == ast.ConnectionID { sm := e.Ctx().GetSessionManager() - sm.Kill(e.Ctx().GetSessionVars().ConnectionID, s.Query, false) + sm.Kill(e.Ctx().GetSessionVars().ConnectionID, s.Query, false, false) return nil } return errors.New("Invalid operation. Please use 'KILL TIDB [CONNECTION | QUERY] [connectionID | CONNECTION_ID()]' instead") @@ -2604,7 +2604,7 @@ func (e *SimpleExec) executeKillStmt(ctx context.Context, s *ast.KillStmt) error if sm == nil { return nil } - sm.Kill(s.ConnectionID, s.Query, false) + sm.Kill(s.ConnectionID, s.Query, false, false) } else { err := errors.NewNoStackError("Invalid operation. Please use 'KILL TIDB [CONNECTION | QUERY] [connectionID | CONNECTION_ID()]' instead") e.Ctx().GetSessionVars().StmtCtx.AppendWarning(err) @@ -2619,7 +2619,7 @@ func (e *SimpleExec) executeKillStmt(ctx context.Context, s *ast.KillStmt) error if e.IsFromRemote { logutil.BgLogger().Info("Killing connection in current instance redirected from remote TiDB", zap.Uint64("conn", s.ConnectionID), zap.Bool("query", s.Query), zap.String("sourceAddr", e.Ctx().GetSessionVars().SourceAddr.IP.String())) - sm.Kill(s.ConnectionID, s.Query, false) + sm.Kill(s.ConnectionID, s.Query, false, false) return nil } @@ -2645,7 +2645,7 @@ func (e *SimpleExec) executeKillStmt(ctx context.Context, s *ast.KillStmt) error e.Ctx().GetSessionVars().StmtCtx.AppendWarning(err1) } } else { - sm.Kill(s.ConnectionID, s.Query, false) + sm.Kill(s.ConnectionID, s.Query, false, false) } return nil diff --git a/pkg/executor/slow_query_test.go b/pkg/executor/slow_query_test.go index 1e6e6029640db..d6eab8b2c7e96 100644 --- a/pkg/executor/slow_query_test.go +++ b/pkg/executor/slow_query_test.go @@ -59,7 +59,8 @@ func parseLog(retriever *slowQueryRetriever, sctx sessionctx.Context, reader *bu func newSlowQueryRetriever() (*slowQueryRetriever, error) { data := infoschema.NewData() - newISBuilder, err := infoschema.NewBuilder(nil, nil, data).InitWithDBInfos(nil, nil, nil, 0) + newISBuilder := infoschema.NewBuilder(nil, nil, data, variable.SchemaCacheSize.Load() > 0) + err := newISBuilder.InitWithDBInfos(nil, nil, nil, 0) if err != nil { return nil, err } diff --git a/pkg/executor/sortexec/BUILD.bazel b/pkg/executor/sortexec/BUILD.bazel index ec10efd843923..e8c7dbc6a142c 100644 --- a/pkg/executor/sortexec/BUILD.bazel +++ b/pkg/executor/sortexec/BUILD.bazel @@ -42,7 +42,7 @@ go_test( timeout = "short", srcs = ["sort_test.go"], flaky = True, - shard_count = 14, + shard_count = 15, deps = [ "//pkg/config", "//pkg/sessionctx/variable", diff --git a/pkg/executor/sortexec/parallel_sort_test.go b/pkg/executor/sortexec/parallel_sort_test.go index 36d6858c28a45..0fda9162f6495 100644 --- a/pkg/executor/sortexec/parallel_sort_test.go +++ b/pkg/executor/sortexec/parallel_sort_test.go @@ -16,7 +16,9 @@ package sortexec_test import ( "context" + "fmt" "math/rand" + "sort" "sync" "testing" "time" @@ -26,6 +28,7 @@ import ( "github.com/pingcap/tidb/pkg/executor/internal/testutil" "github.com/pingcap/tidb/pkg/executor/sortexec" "github.com/pingcap/tidb/pkg/expression" + "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/util/memory" "github.com/pingcap/tidb/pkg/util/mock" "github.com/stretchr/testify/require" @@ -142,3 +145,53 @@ func TestFailpoint(t *testing.T) { failpointTest(t, ctx, exe, sortCase, dataSource) } } + +func TestIssue55344(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("set @@tidb_max_chunk_size=32") + tk.MustExec("set @@tidb_init_chunk_size=1") + tk.MustExec("drop table if exists t0;") + tk.MustExec("CREATE TABLE t0(c0 BOOL);") + tk.MustExec("INSERT INTO mysql.opt_rule_blacklist VALUES('predicate_push_down'),('column_prune');") + tk.MustExec("ADMIN reload opt_rule_blacklist;") + + // Should not be panic + tk.MustQuery("SELECT t0.c0 FROM t0 WHERE 0 ORDER BY -646041453 ASC;") + + // Test correctness + tk.MustExec("drop table if exists t1;") + tk.MustExec("CREATE TABLE t1(c int);") + valueNum := 1000 + insertedValues := make([]int, 0, valueNum) + for i := 0; i < valueNum; i++ { + insertedValues = append(insertedValues, rand.Intn(10000)) + } + + insertSQL := fmt.Sprintf("INSERT INTO t1 values (%d)", insertedValues[0]) + for i := 1; i < valueNum; i++ { + insertSQL = fmt.Sprintf("%s, (%d)", insertSQL, insertedValues[i]) + } + insertSQL += ";" + + tk.MustExec(insertSQL) + sort.Ints(insertedValues) + + expectValue := fmt.Sprintf("%d", insertedValues[0]) + for i := 1; i < valueNum; i++ { + expectValue = fmt.Sprintf("%s\n%d", expectValue, insertedValues[i]) + } + + result := tk.MustQuery("select c from t1 order by c, -646041453;") + require.Equal(t, expectValue, result.String()) + result = tk.MustQuery("select c from t1 order by -646041453, c;") + require.Equal(t, expectValue, result.String()) + result = tk.MustQuery("select c from t1 order by c, -646041453, c+1;") + require.Equal(t, expectValue, result.String()) + result = tk.MustQuery("select c from t1 order by c+1, -646041453, c;") + require.Equal(t, expectValue, result.String()) + + tk.MustExec("delete from mysql.opt_rule_blacklist where name='column_prune' or name='predicate_push_down';") + tk.MustExec("ADMIN reload opt_rule_blacklist;") +} diff --git a/pkg/executor/sortexec/sort.go b/pkg/executor/sortexec/sort.go index 9f581cb699a9a..5ce67e68648c7 100644 --- a/pkg/executor/sortexec/sort.go +++ b/pkg/executor/sortexec/sort.go @@ -16,6 +16,7 @@ package sortexec import ( "context" + "math/rand" "sync" "sync/atomic" "time" @@ -96,6 +97,13 @@ type SortExec struct { enableTmpStorageOnOOM bool } +// When fetcher and workers are not created, we need to initiatively close these channels +func (e *SortExec) closeChannels() { + close(e.Parallel.resultChannel) + close(e.Parallel.chunkChannel) + close(e.Parallel.closeSync) +} + // Close implements the Executor Close interface. func (e *SortExec) Close() error { // TopN not initializes `e.finishCh` but it will call the Close function @@ -112,8 +120,7 @@ func (e *SortExec) Close() error { } } else if e.finishCh != nil { if e.fetched.CompareAndSwap(false, true) { - close(e.Parallel.resultChannel) - close(e.Parallel.chunkChannel) + e.closeChannels() } else { for range e.Parallel.chunkChannel { e.Parallel.fetcherAndWorkerSyncer.Done() @@ -260,10 +267,15 @@ func (e *SortExec) Next(ctx context.Context, req *chunk.Chunk) error { if e.fetched.CompareAndSwap(false, true) { err := e.initCompareFuncs(e.Ctx().GetExprCtx().GetEvalCtx()) if err != nil { + e.closeChannels() return err } - e.buildKeyColumns() + err = e.buildKeyColumns() + if err != nil { + e.closeChannels() + return err + } err = e.fetchChunks(ctx) if err != nil { return err @@ -752,6 +764,19 @@ func (e *SortExec) fetchChunksFromChild(ctx context.Context) { } func (e *SortExec) initCompareFuncs(ctx expression.EvalContext) error { + var err error + failpoint.Inject("ParallelSortRandomFail", func(val failpoint.Value) { + if val.(bool) { + randNum := rand.Int31n(10000) + if randNum < 500 { + err = errors.NewNoStackError("return error by random failpoint") + } + } + }) + if err != nil { + return err + } + e.keyCmpFuncs = make([]chunk.CompareFunc, len(e.ByItems)) for i := range e.ByItems { keyType := e.ByItems[i].Expr.GetType(ctx) @@ -763,12 +788,19 @@ func (e *SortExec) initCompareFuncs(ctx expression.EvalContext) error { return nil } -func (e *SortExec) buildKeyColumns() { +func (e *SortExec) buildKeyColumns() error { e.keyColumns = make([]int, 0, len(e.ByItems)) for _, by := range e.ByItems { - col := by.Expr.(*expression.Column) - e.keyColumns = append(e.keyColumns, col.Index) + switch col := by.Expr.(type) { + case *expression.Column: + e.keyColumns = append(e.keyColumns, col.Index) + case *expression.Constant: + // Ignore constant as constant can not affect the sorted result + default: + return errors.NewNoStackError("Get unexpected expression") + } } + return nil } func (e *SortExec) lessRow(rowI, rowJ chunk.Row) int { diff --git a/pkg/executor/sortexec/topn.go b/pkg/executor/sortexec/topn.go index 5d49cb80703d4..d302fd03d4d3f 100644 --- a/pkg/executor/sortexec/topn.go +++ b/pkg/executor/sortexec/topn.go @@ -268,7 +268,11 @@ func (e *TopNExec) loadChunksUntilTotalLimit(ctx context.Context) error { return err } - e.buildKeyColumns() + err = e.buildKeyColumns() + if err != nil { + return err + } + e.chkHeap.init(e, e.memTracker, e.Limit.Offset+e.Limit.Count, int(e.Limit.Offset), e.greaterRow, e.RetFieldTypes()) for uint64(e.chkHeap.rowChunks.Len()) < e.chkHeap.totalLimit { srcChk := exec.TryNewCacheChunk(e.Children(0)) diff --git a/pkg/executor/stale_txn_test.go b/pkg/executor/stale_txn_test.go index 8dd3613c4b5bd..0b5f959f09d40 100644 --- a/pkg/executor/stale_txn_test.go +++ b/pkg/executor/stale_txn_test.go @@ -15,6 +15,7 @@ package executor_test import ( + "bytes" "context" "fmt" "testing" @@ -23,6 +24,8 @@ import ( "github.com/docker/go-units" "github.com/pingcap/errors" "github.com/pingcap/failpoint" + "github.com/pingcap/kvproto/pkg/errorpb" + "github.com/pingcap/kvproto/pkg/kvrpcpb" "github.com/pingcap/tidb/pkg/config" "github.com/pingcap/tidb/pkg/ddl/placement" "github.com/pingcap/tidb/pkg/sessiontxn" @@ -31,6 +34,8 @@ import ( "github.com/pingcap/tidb/pkg/types" "github.com/stretchr/testify/require" "github.com/tikv/client-go/v2/oracle" + "github.com/tikv/client-go/v2/tikvrpc" + "github.com/tikv/client-go/v2/tikvrpc/interceptor" ) func TestExactStalenessTransaction(t *testing.T) { @@ -1382,3 +1387,45 @@ func TestStaleTSO(t *testing.T) { tk.MustQuery("select * from t as of timestamp " + expr + " order by id asc").Check(testkit.Rows("1")) } } + +func TestStaleReadNoBackoff(t *testing.T) { + cfg := config.GetGlobalConfig() + cfg.Labels = map[string]string{"zone": "us-east-1a"} + config.StoreGlobalConfig(cfg) + require.Equal(t, "us-east-1a", config.GetGlobalConfig().GetTiKVConfig().TxnScope) + + store := testkit.CreateMockStore(t) + + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t (id int primary key)") + tk.MustExec("insert into t values (1)") + tk.MustExec("set session tidb_read_staleness = -1;") + tk.MustExec("set session tidb_replica_read='closest-replicas'") + + // sleep 1s so stale read can see schema. + time.Sleep(time.Second) + + failStaleReadCtx := interceptor.WithRPCInterceptor(context.Background(), interceptor.NewRPCInterceptor("fail-stale-read", func(next interceptor.RPCInterceptorFunc) interceptor.RPCInterceptorFunc { + return func(target string, req *tikvrpc.Request) (*tikvrpc.Response, error) { + if getRequest, ok := req.Req.(*kvrpcpb.GetRequest); ok { + if ctx := getRequest.GetContext(); ctx != nil && ctx.StaleRead && !ctx.IsRetryRequest { + return &tikvrpc.Response{Resp: &kvrpcpb.GetResponse{RegionError: &errorpb.Error{ + DataIsNotReady: &errorpb.DataIsNotReady{}, + }}}, nil + } + } + return next(target, req) + } + })) + + res := tk.MustQueryWithContext(failStaleReadCtx, "explain analyze select * from t where id = 1") + resBuff := bytes.NewBufferString("") + for _, row := range res.Rows() { + _, _ = fmt.Fprintf(resBuff, "%s\t", row) + } + explain := resBuff.String() + require.Regexp(t, ".*rpc_errors:{data_is_not_ready:1.*", explain) + require.NotRegexp(t, ".*dataNotReady_backoff.*", explain) +} diff --git a/pkg/executor/staticrecordset/BUILD.bazel b/pkg/executor/staticrecordset/BUILD.bazel index bff3c7ec97b2c..24c6d4afd75c9 100644 --- a/pkg/executor/staticrecordset/BUILD.bazel +++ b/pkg/executor/staticrecordset/BUILD.bazel @@ -27,6 +27,7 @@ go_test( flaky = True, shard_count = 7, deps = [ + "//pkg/parser/mysql", "//pkg/session/cursor", "//pkg/testkit", "//pkg/util/sqlexec", diff --git a/pkg/executor/staticrecordset/integration_test.go b/pkg/executor/staticrecordset/integration_test.go index 961d7460474a6..26f35458ab5a8 100644 --- a/pkg/executor/staticrecordset/integration_test.go +++ b/pkg/executor/staticrecordset/integration_test.go @@ -20,6 +20,7 @@ import ( "time" "github.com/pingcap/failpoint" + "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/session/cursor" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/util/sqlexec" @@ -31,6 +32,8 @@ func TestStaticRecordSet(t *testing.T) { store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) + tk.Session().GetSessionVars().SetStatusFlag(mysql.ServerStatusCursorExists, true) + tk.MustExec("use test") tk.MustExec("create table t(id int)") tk.MustExec("insert into t values (1), (2), (3)") @@ -62,6 +65,8 @@ func TestStaticRecordSetWithTxn(t *testing.T) { store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) + tk.Session().GetSessionVars().SetStatusFlag(mysql.ServerStatusCursorExists, true) + tk.MustExec("use test") tk.MustExec("create table t(id int)") tk.MustExec("insert into t values (1), (2), (3)") @@ -101,6 +106,8 @@ func TestStaticRecordSetExceedGCTime(t *testing.T) { store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) + tk.Session().GetSessionVars().SetStatusFlag(mysql.ServerStatusCursorExists, true) + tk.MustExec("use test") tk.MustExec("create table t(id int)") tk.MustExec("insert into t values (1), (2), (3)") @@ -136,6 +143,8 @@ func TestDetachError(t *testing.T) { store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) + tk.Session().GetSessionVars().SetStatusFlag(mysql.ServerStatusCursorExists, true) + tk.MustExec("use test") tk.MustExec("create table t(id int)") tk.MustExec("insert into t values (1), (2), (3)") @@ -155,6 +164,8 @@ func TestCursorWillBeClosed(t *testing.T) { store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) + tk.Session().GetSessionVars().SetStatusFlag(mysql.ServerStatusCursorExists, true) + tk.MustExec("use test") tk.MustExec("create table t(id int)") tk.MustExec("insert into t values (1), (2), (3)") @@ -180,6 +191,8 @@ func TestCursorWillBlockMinStartTS(t *testing.T) { store, dom := testkit.CreateMockStoreAndDomain(t) tk := testkit.NewTestKit(t, store) + tk.Session().GetSessionVars().SetStatusFlag(mysql.ServerStatusCursorExists, true) + tk.MustExec("use test") tk.MustExec("create table t(id int)") tk.MustExec("insert into t values (1), (2), (3)") @@ -217,6 +230,8 @@ func TestFinishStmtError(t *testing.T) { store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) + tk.Session().GetSessionVars().SetStatusFlag(mysql.ServerStatusCursorExists, true) + tk.MustExec("use test") tk.MustExec("create table t(id int)") tk.MustExec("insert into t values (1), (2), (3)") diff --git a/pkg/executor/stmtsummary_test.go b/pkg/executor/stmtsummary_test.go index 782a7a612a8ba..9ef4960b4798d 100644 --- a/pkg/executor/stmtsummary_test.go +++ b/pkg/executor/stmtsummary_test.go @@ -23,6 +23,7 @@ import ( "github.com/pingcap/tidb/pkg/infoschema" "github.com/pingcap/tidb/pkg/parser/model" + "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/mock" @@ -32,7 +33,8 @@ import ( func TestStmtSummaryRetriverV2_TableStatementsSummary(t *testing.T) { data := infoschema.NewData() - infoSchemaBuilder, err := infoschema.NewBuilder(nil, nil, data).InitWithDBInfos(nil, nil, nil, 0) + infoSchemaBuilder := infoschema.NewBuilder(nil, nil, data, variable.SchemaCacheSize.Load() > 0) + err := infoSchemaBuilder.InitWithDBInfos(nil, nil, nil, 0) require.NoError(t, err) infoSchema := infoSchemaBuilder.Build(math.MaxUint64) table, err := infoSchema.TableByName(context.Background(), util.InformationSchemaName, model.NewCIStr(infoschema.TableStatementsSummary)) @@ -76,7 +78,8 @@ func TestStmtSummaryRetriverV2_TableStatementsSummary(t *testing.T) { func TestStmtSummaryRetriverV2_TableStatementsSummaryEvicted(t *testing.T) { data := infoschema.NewData() - infoSchemaBuilder, err := infoschema.NewBuilder(nil, nil, data).InitWithDBInfos(nil, nil, nil, 0) + infoSchemaBuilder := infoschema.NewBuilder(nil, nil, data, variable.SchemaCacheSize.Load() > 0) + err := infoSchemaBuilder.InitWithDBInfos(nil, nil, nil, 0) require.NoError(t, err) infoSchema := infoSchemaBuilder.Build(math.MaxUint64) table, err := infoSchema.TableByName(context.Background(), util.InformationSchemaName, model.NewCIStr(infoschema.TableStatementsSummaryEvicted)) @@ -155,7 +158,8 @@ func TestStmtSummaryRetriverV2_TableStatementsSummaryHistory(t *testing.T) { stmtSummary.Add(stmtsummaryv2.GenerateStmtExecInfo4Test("digest3")) data := infoschema.NewData() - infoSchemaBuilder, err := infoschema.NewBuilder(nil, nil, data).InitWithDBInfos(nil, nil, nil, 0) + infoSchemaBuilder := infoschema.NewBuilder(nil, nil, data, variable.SchemaCacheSize.Load() > 0) + err = infoSchemaBuilder.InitWithDBInfos(nil, nil, nil, 0) require.NoError(t, err) infoSchema := infoSchemaBuilder.Build(math.MaxUint64) table, err := infoSchema.TableByName(context.Background(), util.InformationSchemaName, model.NewCIStr(infoschema.TableStatementsSummaryHistory)) diff --git a/pkg/executor/test/admintest/BUILD.bazel b/pkg/executor/test/admintest/BUILD.bazel index 6488fa5a84fd5..32e5567cedfcb 100644 --- a/pkg/executor/test/admintest/BUILD.bazel +++ b/pkg/executor/test/admintest/BUILD.bazel @@ -12,7 +12,6 @@ go_test( deps = [ "//pkg/config", "//pkg/ddl", - "//pkg/ddl/util/callback", "//pkg/domain", "//pkg/errno", "//pkg/executor", @@ -26,6 +25,7 @@ go_test( "//pkg/table/tables", "//pkg/tablecodec", "//pkg/testkit", + "//pkg/testkit/testfailpoint", "//pkg/testkit/testsetup", "//pkg/testkit/testutil", "//pkg/types", diff --git a/pkg/executor/test/admintest/admin_test.go b/pkg/executor/test/admintest/admin_test.go index 736aa9b9edf5c..cee62ffd83f50 100644 --- a/pkg/executor/test/admintest/admin_test.go +++ b/pkg/executor/test/admintest/admin_test.go @@ -26,7 +26,6 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/ddl" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/domain" mysql "github.com/pingcap/tidb/pkg/errno" "github.com/pingcap/tidb/pkg/executor" @@ -39,6 +38,7 @@ import ( "github.com/pingcap/tidb/pkg/table/tables" "github.com/pingcap/tidb/pkg/tablecodec" "github.com/pingcap/tidb/pkg/testkit" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/testkit/testutil" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/codec" @@ -1786,7 +1786,7 @@ func TestAdminCleanUpGlobalIndex(t *testing.T) { tk.MustExec("drop table if exists admin_test") tk.MustExec("set tidb_enable_global_index = true") - tk.MustExec("create table admin_test (a int, b int, c int, unique key uidx_a(a)) partition by hash(c) partitions 5") + tk.MustExec("create table admin_test (a int, b int, c int, unique key uidx_a(a) global) partition by hash(c) partitions 5") tk.MustExec("insert admin_test values (-10, -20, 1), (-1, -10, 2), (1, 11, 3), (2, 12, 0), (5, 15, -1), (10, 20, -2), (20, 30, -3)") tk.MustExec("analyze table admin_test") @@ -1831,7 +1831,7 @@ func TestAdminRecoverGlobalIndex(t *testing.T) { tk.MustExec("drop table if exists admin_test") tk.MustExec("set tidb_enable_global_index = true") - tk.MustExec("create table admin_test (a int, b int, c int, unique key uidx_a(a)) partition by hash(c) partitions 5") + tk.MustExec("create table admin_test (a int, b int, c int, unique key uidx_a(a) global) partition by hash(c) partitions 5") tk.MustExec("insert admin_test values (-10, -20, 1), (-1, -10, 2), (1, 11, 3), (2, 12, 0), (5, 15, -1), (10, 20, -2), (20, 30, -3)") tk.MustExec("analyze table admin_test") @@ -1882,7 +1882,7 @@ func TestAdminCheckGlobalIndex(t *testing.T) { tk.MustExec("set tidb_enable_global_index = true") tk.MustExec(fmt.Sprintf("set tidb_enable_fast_table_check = %v", enabled)) - tk.MustExec("create table admin_test (a int, b int, c int, unique key uidx_a(a)) partition by hash(c) partitions 5") + tk.MustExec("create table admin_test (a int, b int, c int, unique key uidx_a(a) global) partition by hash(c) partitions 5") tk.MustExec("insert admin_test values (-10, -20, 1), (-1, -10, 2), (1, 11, 3), (2, 12, 0), (5, 15, -1), (10, 20, -2), (20, 30, -3)") // Make some corrupted index. Build the index information. @@ -1979,7 +1979,7 @@ func TestAdminCheckGlobalIndexWithClusterIndex(t *testing.T) { tk.MustExec("set tidb_enable_global_index = true") tk.MustExec(fmt.Sprintf("set tidb_enable_fast_table_check = %v", enabled)) - tk.MustExec("create table admin_test (a int, b int, c int, unique key uidx_a(a), primary key(c)) partition by hash(c) partitions 5") + tk.MustExec("create table admin_test (a int, b int, c int, unique key uidx_a(a) global, primary key(c)) partition by hash(c) partitions 5") tk.MustExec("insert admin_test values (-10, -20, 1), (-1, -10, 2), (1, 11, 3), (2, 12, 0), (5, 15, -1), (10, 20, -2), (20, 30, -3)") // Make some corrupted index. Build the index information. @@ -2053,21 +2053,18 @@ func TestAdminCheckGlobalIndexWithClusterIndex(t *testing.T) { } func TestAdminCheckGlobalIndexDuringDDL(t *testing.T) { - store, dom := testkit.CreateMockStoreAndDomain(t) - originalHook := dom.DDL().GetHook() + store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) var schemaMap = make(map[model.SchemaState]struct{}) tk1 := testkit.NewTestKit(t, store) tk1.MustExec("use test") - hook := &callback.TestDDLCallback{Do: dom} onJobUpdatedExportedFunc := func(job *model.Job) { schemaMap[job.SchemaState] = struct{}{} _, err := tk1.Exec("admin check table admin_test") assert.NoError(t, err) } - hook.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) // check table after delete some index key/value pairs. ddl.MockDMLExecution = func() { @@ -2076,7 +2073,7 @@ func TestAdminCheckGlobalIndexDuringDDL(t *testing.T) { } batchSize := 32 - tk.MustExec(fmt.Sprintf("set global tidb_ddl_reorg_batch_size = %d", batchSize)) + tk.MustExec(fmt.Sprintf("set @@tidb_ddl_reorg_batch_size = %d", batchSize)) var enableFastCheck = []bool{false, true} for _, enabled := range enableFastCheck { @@ -2086,17 +2083,17 @@ func TestAdminCheckGlobalIndexDuringDDL(t *testing.T) { tk.MustExec("set tidb_enable_global_index = true") tk.MustExec(fmt.Sprintf("set tidb_enable_fast_table_check = %v", enabled)) - tk.MustExec("create table admin_test (a int, b int, c int, unique key uidx_a(a), primary key(c)) partition by hash(c) partitions 5") + tk.MustExec("create table admin_test (a int, b int, c int, unique key uidx_a(a) global, primary key(c)) partition by hash(c) partitions 5") tk.MustExec("insert admin_test values (-10, -20, 1), (-1, -10, 2), (1, 11, 3), (2, 12, 0), (5, 15, -1), (10, 20, -2), (20, 30, -3)") for i := 1; i <= batchSize*2; i++ { tk.MustExec(fmt.Sprintf("insert admin_test values (%d, %d, %d)", i*5+1, i, i*5+1)) } - dom.DDL().SetHook(hook) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", onJobUpdatedExportedFunc) require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/ddl/mockDMLExecution", "1*return(true)->return(false)")) tk.MustExec("alter table admin_test truncate partition p1") require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/mockDMLExecution")) - dom.DDL().SetHook(originalHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") // Should have 3 different schema states, `none`, `deleteOnly`, `deleteReorg` require.Len(t, schemaMap, 3) diff --git a/pkg/executor/test/analyzetest/BUILD.bazel b/pkg/executor/test/analyzetest/BUILD.bazel index ea5f921883358..49cdd55c580a9 100644 --- a/pkg/executor/test/analyzetest/BUILD.bazel +++ b/pkg/executor/test/analyzetest/BUILD.bazel @@ -9,7 +9,7 @@ go_test( "main_test.go", ], flaky = True, - shard_count = 48, + shard_count = 49, deps = [ "//pkg/config", "//pkg/domain", @@ -26,7 +26,6 @@ go_test( "//pkg/sessionctx", "//pkg/sessionctx/variable", "//pkg/statistics", - "//pkg/statistics/handle/autoanalyze/exec", "//pkg/testkit", "//pkg/testkit/analyzehelper", "//pkg/util/dbterror/exeerrors", diff --git a/pkg/executor/test/analyzetest/analyze_test.go b/pkg/executor/test/analyzetest/analyze_test.go index 87bd60a792983..2073703e4a699 100644 --- a/pkg/executor/test/analyzetest/analyze_test.go +++ b/pkg/executor/test/analyzetest/analyze_test.go @@ -39,7 +39,6 @@ import ( "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/statistics" - "github.com/pingcap/tidb/pkg/statistics/handle/autoanalyze/exec" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/testkit/analyzehelper" "github.com/pingcap/tidb/pkg/util/dbterror/exeerrors" @@ -703,11 +702,11 @@ func TestSavedAnalyzeOptions(t *testing.T) { tk.MustExec(fmt.Sprintf("set global tidb_auto_analyze_ratio = %v", originalVal2)) }() tk.MustExec("set global tidb_auto_analyze_ratio = 0.01") - originalVal3 := exec.AutoAnalyzeMinCnt + originalVal3 := statistics.AutoAnalyzeMinCnt defer func() { - exec.AutoAnalyzeMinCnt = originalVal3 + statistics.AutoAnalyzeMinCnt = originalVal3 }() - exec.AutoAnalyzeMinCnt = 0 + statistics.AutoAnalyzeMinCnt = 0 tk.MustExec("use test") tk.MustExec("set @@session.tidb_analyze_version = 2") @@ -1046,11 +1045,11 @@ func TestSavedAnalyzeColumnOptions(t *testing.T) { tk.MustExec(fmt.Sprintf("set global tidb_auto_analyze_ratio = %v", originalVal2)) }() tk.MustExec("set global tidb_auto_analyze_ratio = 0.01") - originalVal3 := exec.AutoAnalyzeMinCnt + originalVal3 := statistics.AutoAnalyzeMinCnt defer func() { - exec.AutoAnalyzeMinCnt = originalVal3 + statistics.AutoAnalyzeMinCnt = originalVal3 }() - exec.AutoAnalyzeMinCnt = 0 + statistics.AutoAnalyzeMinCnt = 0 originalVal4 := tk.MustQuery("select @@tidb_enable_column_tracking").Rows()[0][0].(string) defer func() { tk.MustExec(fmt.Sprintf("set global tidb_enable_column_tracking = %v", originalVal4)) @@ -1888,9 +1887,9 @@ func testKillAutoAnalyze(t *testing.T, ver int) { tk := testkit.NewTestKit(t, store) oriStart := tk.MustQuery("select @@tidb_auto_analyze_start_time").Rows()[0][0].(string) oriEnd := tk.MustQuery("select @@tidb_auto_analyze_end_time").Rows()[0][0].(string) - exec.AutoAnalyzeMinCnt = 0 + statistics.AutoAnalyzeMinCnt = 0 defer func() { - exec.AutoAnalyzeMinCnt = 1000 + statistics.AutoAnalyzeMinCnt = 1000 tk.MustExec(fmt.Sprintf("set global tidb_auto_analyze_start_time='%v'", oriStart)) tk.MustExec(fmt.Sprintf("set global tidb_auto_analyze_end_time='%v'", oriEnd)) }() @@ -1972,9 +1971,9 @@ func TestKillAutoAnalyzeIndex(t *testing.T) { tk := testkit.NewTestKit(t, store) oriStart := tk.MustQuery("select @@tidb_auto_analyze_start_time").Rows()[0][0].(string) oriEnd := tk.MustQuery("select @@tidb_auto_analyze_end_time").Rows()[0][0].(string) - exec.AutoAnalyzeMinCnt = 0 + statistics.AutoAnalyzeMinCnt = 0 defer func() { - exec.AutoAnalyzeMinCnt = 1000 + statistics.AutoAnalyzeMinCnt = 1000 tk.MustExec(fmt.Sprintf("set global tidb_auto_analyze_start_time='%v'", oriStart)) tk.MustExec(fmt.Sprintf("set global tidb_auto_analyze_end_time='%v'", oriEnd)) }() @@ -2064,8 +2063,8 @@ func TestAnalyzeJob(t *testing.T) { require.Equal(t, addr, rows[0][9]) connID := strconv.FormatUint(tk.Session().GetSessionVars().ConnectionID, 10) require.Equal(t, connID, rows[0][10]) - - executor.StartAnalyzeJob(se, job) + statsHandle := domain.GetDomain(tk.Session()).StatsHandle() + statsHandle.StartAnalyzeJob(job) ctx := context.WithValue(context.Background(), executor.AnalyzeProgressTest, 100) rows = tk.MustQueryWithContext(ctx, "show analyze status").Rows() checkTime := func(val any) { @@ -2080,12 +2079,12 @@ func TestAnalyzeJob(t *testing.T) { require.Equal(t, "0.1", rows[0][12]) // PROGRESS require.Equal(t, "0", rows[0][13]) // ESTIMATED_TOTAL_ROWS - // UpdateAnalyzeJob requires the interval between two updates to mysql.analyze_jobs is more than 5 second. + // UpdateAnalyzeJobProgress requires the interval between two updates to mysql.analyze_jobs is more than 5 second. // Hence we fake last dump time as 10 second ago in order to make update to mysql.analyze_jobs happen. lastDumpTime := time.Now().Add(-10 * time.Second) job.Progress.SetLastDumpTime(lastDumpTime) const smallCount int64 = 100 - executor.UpdateAnalyzeJob(se, job, smallCount) + statsHandle.UpdateAnalyzeJobProgress(job, smallCount) // Delta count doesn't reach threshold so we don't dump it to mysql.analyze_jobs require.Equal(t, smallCount, job.Progress.GetDeltaCount()) require.Equal(t, lastDumpTime, job.Progress.GetLastDumpTime()) @@ -2093,7 +2092,7 @@ func TestAnalyzeJob(t *testing.T) { require.Equal(t, "0", rows[0][4]) const largeCount int64 = 15000000 - executor.UpdateAnalyzeJob(se, job, largeCount) + statsHandle.UpdateAnalyzeJobProgress(job, largeCount) // Delta count reaches threshold so we dump it to mysql.analyze_jobs and update last dump time. require.Equal(t, int64(0), job.Progress.GetDeltaCount()) require.True(t, job.Progress.GetLastDumpTime().After(lastDumpTime)) @@ -2101,7 +2100,7 @@ func TestAnalyzeJob(t *testing.T) { rows = tk.MustQuery("show analyze status").Rows() require.Equal(t, strconv.FormatInt(smallCount+largeCount, 10), rows[0][4]) - executor.UpdateAnalyzeJob(se, job, largeCount) + statsHandle.UpdateAnalyzeJobProgress(job, largeCount) // We have just updated mysql.analyze_jobs in the previous step so we don't update it until 5 second passes or the analyze job is over. require.Equal(t, largeCount, job.Progress.GetDeltaCount()) require.Equal(t, lastDumpTime, job.Progress.GetLastDumpTime()) @@ -2112,7 +2111,7 @@ func TestAnalyzeJob(t *testing.T) { if result == statistics.AnalyzeFailed { analyzeErr = errors.Errorf("analyze meets error") } - executor.FinishAnalyzeJob(se, job, analyzeErr) + statsHandle.FinishAnalyzeJob(job, analyzeErr, statistics.TableAnalysisJob) rows = tk.MustQuery("show analyze status").Rows() require.Equal(t, strconv.FormatInt(smallCount+2*largeCount, 10), rows[0][4]) checkTime(rows[0][6]) @@ -2733,12 +2732,12 @@ func TestAutoAnalyzeAwareGlobalVariableChange(t *testing.T) { "3 0", )) - originalVal1 := exec.AutoAnalyzeMinCnt + originalVal1 := statistics.AutoAnalyzeMinCnt originalVal2 := tk.MustQuery("select @@global.tidb_auto_analyze_ratio").Rows()[0][0].(string) - exec.AutoAnalyzeMinCnt = 0 + statistics.AutoAnalyzeMinCnt = 0 tk.MustExec("set global tidb_auto_analyze_ratio = 0.001") defer func() { - exec.AutoAnalyzeMinCnt = originalVal1 + statistics.AutoAnalyzeMinCnt = originalVal1 tk.MustExec(fmt.Sprintf("set global tidb_auto_analyze_ratio = %v", originalVal2)) }() @@ -2807,11 +2806,9 @@ func TestAnalyzeColumnsSkipMVIndexJsonCol(t *testing.T) { // TestAnalyzeMVIndex tests analyzing the mv index use some real data in the table. // It checks the analyze jobs, async loading and the stats content in the memory. func TestAnalyzeMVIndex(t *testing.T) { - require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/executor/DebugAnalyzeJobOperations", "return(true)")) - require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/statistics/handle/DebugAnalyzeJobOperations", "return(true)")) + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/statistics/handle/autoanalyze/DebugAnalyzeJobOperations", "return(true)")) defer func() { - require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/executor/DebugAnalyzeJobOperations")) - require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/statistics/handle/DebugAnalyzeJobOperations")) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/statistics/handle/autoanalyze/DebugAnalyzeJobOperations")) }() // 1. prepare the table and insert data store, dom := testkit.CreateMockStoreAndDomain(t) @@ -3131,3 +3128,12 @@ func TestAnalyzePartitionVerify(t *testing.T) { } } } + +func TestIssue55438(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("CREATE TABLE t0(c0 NUMERIC , c1 BIGINT UNSIGNED AS ((CASE 0 WHEN false THEN 1358571571 ELSE TRIM(c0) END )));") + tk.MustExec("CREATE INDEX i0 ON t0(c1);") + tk.MustExec("analyze table t0") +} diff --git a/pkg/executor/test/analyzetest/memorycontrol/BUILD.bazel b/pkg/executor/test/analyzetest/memorycontrol/BUILD.bazel index 793de08dcf3ad..b4f9ed544df6c 100644 --- a/pkg/executor/test/analyzetest/memorycontrol/BUILD.bazel +++ b/pkg/executor/test/analyzetest/memorycontrol/BUILD.bazel @@ -13,7 +13,7 @@ go_test( "//pkg/config", "//pkg/executor", "//pkg/sessionctx/variable", - "//pkg/statistics/handle/autoanalyze/exec", + "//pkg/statistics", "//pkg/testkit", "//pkg/util", "@com_github_pingcap_failpoint//:failpoint", diff --git a/pkg/executor/test/analyzetest/memorycontrol/memory_control_test.go b/pkg/executor/test/analyzetest/memorycontrol/memory_control_test.go index 3687531bb6b38..1982e8a974871 100644 --- a/pkg/executor/test/analyzetest/memorycontrol/memory_control_test.go +++ b/pkg/executor/test/analyzetest/memorycontrol/memory_control_test.go @@ -23,7 +23,7 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/executor" - "github.com/pingcap/tidb/pkg/statistics/handle/autoanalyze/exec" + "github.com/pingcap/tidb/pkg/statistics" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/util" "github.com/stretchr/testify/require" @@ -144,12 +144,12 @@ func TestGlobalMemoryControlForAutoAnalyze(t *testing.T) { require.Len(t, rs0.Rows(), 0) h := dom.StatsHandle() - originalVal4 := exec.AutoAnalyzeMinCnt + originalVal4 := statistics.AutoAnalyzeMinCnt originalVal5 := tk.MustQuery("select @@global.tidb_auto_analyze_ratio").Rows()[0][0].(string) - exec.AutoAnalyzeMinCnt = 0 + statistics.AutoAnalyzeMinCnt = 0 tk.MustExec("set global tidb_auto_analyze_ratio = 0.001") defer func() { - exec.AutoAnalyzeMinCnt = originalVal4 + statistics.AutoAnalyzeMinCnt = originalVal4 tk.MustExec(fmt.Sprintf("set global tidb_auto_analyze_ratio = %v", originalVal5)) }() diff --git a/pkg/executor/test/ddl/ddl_test.go b/pkg/executor/test/ddl/ddl_test.go index 62d9764a723a4..449cf435a5e83 100644 --- a/pkg/executor/test/ddl/ddl_test.go +++ b/pkg/executor/test/ddl/ddl_test.go @@ -813,6 +813,11 @@ func TestSetDDLReorgWorkerCnt(t *testing.T) { tk.MustExec("set @@global.tidb_ddl_reorg_worker_cnt = 257") tk.MustQuery("SHOW WARNINGS").Check(testkit.Rows("Warning 1292 Truncated incorrect tidb_ddl_reorg_worker_cnt value: '257'")) tk.MustQuery("select @@global.tidb_ddl_reorg_worker_cnt").Check(testkit.Rows("256")) + + tk.MustExec("set @@tidb_ddl_reorg_worker_cnt = 10;") + tk.MustQuery("select @@tidb_ddl_reorg_worker_cnt;").Check(testkit.Rows("10")) + tk.MustQuery("select @@global.tidb_ddl_reorg_worker_cnt;").Check(testkit.Rows("256")) + require.Equal(t, int32(256), variable.GetDDLReorgWorkerCounter()) } func TestSetDDLReorgBatchSize(t *testing.T) { @@ -850,6 +855,10 @@ func TestSetDDLReorgBatchSize(t *testing.T) { tk.MustExec("set @@global.tidb_ddl_reorg_batch_size = 1000") res = tk.MustQuery("select @@global.tidb_ddl_reorg_batch_size") res.Check(testkit.Rows("1000")) + + tk.MustExec("set @@tidb_ddl_reorg_batch_size = 256;") + tk.MustQuery("select @@tidb_ddl_reorg_batch_size").Check(testkit.Rows("256")) + tk.MustQuery("select @@global.tidb_ddl_reorg_batch_size").Check(testkit.Rows("1000")) } func TestSetDDLErrorCountLimit(t *testing.T) { diff --git a/pkg/executor/test/executor/executor_test.go b/pkg/executor/test/executor/executor_test.go index cefc99a70fc51..95a575a0d7078 100644 --- a/pkg/executor/test/executor/executor_test.go +++ b/pkg/executor/test/executor/executor_test.go @@ -18,6 +18,7 @@ import ( "archive/zip" "context" "fmt" + "math/rand" "os" "path/filepath" "reflect" @@ -324,11 +325,11 @@ func TestCheckIndex(t *testing.T) { recordVal1 := types.MakeDatums(int64(1), int64(10), int64(11)) recordVal2 := types.MakeDatums(int64(2), int64(20), int64(21)) require.NoError(t, sessiontxn.NewTxn(context.Background(), ctx)) - _, err = tb.AddRecord(ctx.GetTableCtx(), recordVal1) + txn, err := ctx.Txn(true) require.NoError(t, err) - _, err = tb.AddRecord(ctx.GetTableCtx(), recordVal2) + _, err = tb.AddRecord(ctx.GetTableCtx(), txn, recordVal1) require.NoError(t, err) - txn, err := ctx.Txn(true) + _, err = tb.AddRecord(ctx.GetTableCtx(), txn, recordVal2) require.NoError(t, err) require.NoError(t, txn.Commit(context.Background())) @@ -1942,6 +1943,17 @@ func TestLowResolutionTSORead(t *testing.T) { require.Error(t, err) } +func TestLowResolutionTSOReadScope(t *testing.T) { + store := testkit.CreateMockStore(t) + + tk1 := testkit.NewTestKit(t, store) + require.False(t, tk1.Session().GetSessionVars().UseLowResolutionTSO()) + + tk1.MustExec("set global tidb_low_resolution_tso = 'on'") + tk2 := testkit.NewTestKit(t, store) + require.True(t, tk2.Session().GetSessionVars().UseLowResolutionTSO()) +} + func TestAdapterStatement(t *testing.T) { store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) @@ -2986,3 +2998,80 @@ func TestIssue48756(t *testing.T) { "Warning 1105 ", )) } + +func TestIssue50308(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t(a timestamp);") + tk.MustExec("insert ignore into t values(cast('2099-01-01' as date));") + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning 1292 Incorrect timestamp value: '2099-01-01' for column 'a' at row 1")) + tk.MustQuery("select * from t;").Check(testkit.Rows("0000-00-00 00:00:00")) + tk.MustExec("delete from t") + tk.MustExec("insert into t values('2000-01-01');") + tk.MustGetErrMsg("update t set a=cast('2099-01-01' as date)", "[types:1292]Incorrect timestamp value: '2099-01-01'") + tk.MustExec("update ignore t set a=cast('2099-01-01' as date);") + tk.MustQuery("show warnings").Check(testkit.RowsWithSep("|", "Warning 1292 Incorrect timestamp value: '2099-01-01'")) + tk.MustQuery("select * from t;").Check(testkit.Rows("0000-00-00 00:00:00")) +} + +func TestQueryWithKill(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test;") + tk.MustExec("drop table if exists tkq;") + tk.MustExec("create table tkq (a int key, b int, index idx_b(b));") + tk.MustExec("insert into tkq values (1,1);") + var wg sync.WaitGroup + ch := make(chan context.CancelFunc, 1024) + testDuration := time.Second * 10 + for i := 0; i < 10; i++ { + wg.Add(1) + go func() { + defer wg.Done() + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test;") + start := time.Now() + for { + ctx, cancel := context.WithCancel(context.Background()) + ch <- cancel + rs, err := tk.ExecWithContext(ctx, "select a from tkq where b = 1;") + if err == nil { + require.NotNil(t, rs) + rows, err := session.ResultSetToStringSlice(ctx, tk.Session(), rs) + if err == nil { + require.Equal(t, 1, len(rows)) + require.Equal(t, 1, len(rows[0])) + require.Equal(t, "1", fmt.Sprintf("%v", rows[0][0])) + } + } + if err != nil { + require.Equal(t, context.Canceled, err) + } + if rs != nil { + rs.Close() + } + if time.Since(start) > testDuration { + return + } + } + }() + } + wg.Add(1) + go func() { + defer wg.Done() + for { + select { + case cancel := <-ch: + // mock for random kill query + if len(ch) < 5 { + time.Sleep(time.Duration(rand.Intn(1000)) * time.Nanosecond) + } + cancel() + case <-time.After(time.Second): + return + } + } + }() + wg.Wait() +} diff --git a/pkg/executor/test/fktest/BUILD.bazel b/pkg/executor/test/fktest/BUILD.bazel index e8f32b820572e..721e587b1e71e 100644 --- a/pkg/executor/test/fktest/BUILD.bazel +++ b/pkg/executor/test/fktest/BUILD.bazel @@ -8,7 +8,7 @@ go_test( "main_test.go", ], flaky = True, - shard_count = 24, + shard_count = 25, deps = [ "//pkg/config", "//pkg/executor", @@ -21,6 +21,7 @@ go_test( "//pkg/parser/model", "//pkg/parser/mysql", "//pkg/testkit", + "//pkg/testkit/testfailpoint", "//pkg/types", "//pkg/util/dbterror/exeerrors", "//pkg/util/dbterror/plannererrors", diff --git a/pkg/executor/test/fktest/foreign_key_test.go b/pkg/executor/test/fktest/foreign_key_test.go index cb44d58bd23fd..30a10b548bf31 100644 --- a/pkg/executor/test/fktest/foreign_key_test.go +++ b/pkg/executor/test/fktest/foreign_key_test.go @@ -33,6 +33,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/testkit" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/dbterror/exeerrors" "github.com/pingcap/tidb/pkg/util/dbterror/plannererrors" @@ -2474,3 +2475,21 @@ func TestForeignKeyAndLockView(t *testing.T) { tk.MustGetErrMsg("update t1 set id=2", "[executor:1213]Deadlock found when trying to get lock; try restarting transaction") wg.Wait() } + +func TestFKBuild(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec("set @@global.tidb_enable_foreign_key=1") + tk.MustExec("set @@foreign_key_checks=1") + tk.MustExec("use test") + tk.MustExec("create table t1 (id int key);") + tk.MustExec("create table t2 (id int key, foreign key fk (id) references t1(id) ON DELETE CASCADE ON UPDATE CASCADE);") + + testfailpoint.Enable(t, "github.com/pingcap/tidb/pkg/domain/MockTryLoadDiffError", `return("renametable")`) + + tk.MustExec("rename table t1 to t3;") + tk.MustExec("insert into test.t3 values (1)") + tk.MustExec("insert into test.t2 values (1)") + tk.MustExec("delete from test.t3") + tk.MustQuery("select * from test.t2").Check(testkit.Rows()) +} diff --git a/pkg/executor/test/issuetest/executor_issue_test.go b/pkg/executor/test/issuetest/executor_issue_test.go index 4566ba8f08453..aea2d3b601873 100644 --- a/pkg/executor/test/issuetest/executor_issue_test.go +++ b/pkg/executor/test/issuetest/executor_issue_test.go @@ -178,9 +178,7 @@ func TestIssue30289(t *testing.T) { tk.MustExec("drop table if exists t") tk.MustExec("create table t(a int)") require.NoError(t, failpoint.Enable(fpName, `return(true)`)) - isHashJoinV2Enabled := join.IsHashJoinV2Enabled() defer func() { - join.SetEnableHashJoinV2(isHashJoinV2Enabled) require.NoError(t, failpoint.Disable(fpName)) }() useHashJoinV2 := []bool{true, false} @@ -199,9 +197,7 @@ func TestIssue51998(t *testing.T) { tk.MustExec("drop table if exists t") tk.MustExec("create table t(a int)") require.NoError(t, failpoint.Enable(fpName, `return(true)`)) - isHashJoinV2Enabled := join.IsHashJoinV2Enabled() defer func() { - join.SetEnableHashJoinV2(isHashJoinV2Enabled) require.NoError(t, failpoint.Disable(fpName)) }() useHashJoinV2 := []bool{true, false} @@ -621,8 +617,6 @@ func TestIssue42662(t *testing.T) { tk.MustExec("set global tidb_server_memory_limit='1600MB'") tk.MustExec("set global tidb_server_memory_limit_sess_min_size=128*1024*1024") tk.MustExec("set global tidb_mem_oom_action = 'cancel'") - isHashJoinV2Enabled := join.IsHashJoinV2Enabled() - defer join.SetEnableHashJoinV2(isHashJoinV2Enabled) useHashJoinV2 := []bool{true, false} for _, hashJoinV2 := range useHashJoinV2 { join.SetEnableHashJoinV2(hashJoinV2) diff --git a/pkg/executor/test/jointest/hashjoin/BUILD.bazel b/pkg/executor/test/jointest/hashjoin/BUILD.bazel index 6f845ca4af528..8a0e7b727de6a 100644 --- a/pkg/executor/test/jointest/hashjoin/BUILD.bazel +++ b/pkg/executor/test/jointest/hashjoin/BUILD.bazel @@ -9,7 +9,7 @@ go_test( ], flaky = True, race = "on", - shard_count = 19, + shard_count = 20, deps = [ "//pkg/config", "//pkg/executor/join", diff --git a/pkg/executor/test/jointest/hashjoin/hash_join_test.go b/pkg/executor/test/jointest/hashjoin/hash_join_test.go index a4cf651a1983c..34777fad30c7b 100644 --- a/pkg/executor/test/jointest/hashjoin/hash_join_test.go +++ b/pkg/executor/test/jointest/hashjoin/hash_join_test.go @@ -378,11 +378,6 @@ func TestExplainAnalyzeJoin(t *testing.T) { require.Equal(t, 7, len(rows)) require.Regexp(t, "HashJoin.*", rows[0][0]) require.Regexp(t, "time:.*, loops:.*, build_hash_table:{total:.*, fetch:.*, build:.*}, probe:{concurrency:5, total:.*, max:.*, probe:.*, fetch and wait:.*}", rows[0][5]) - // Test for index merge join. - rows = tk.MustQuery("explain analyze select /*+ INL_MERGE_JOIN(t1, t2) */ * from t1,t2 where t1.a=t2.a;").Rows() - require.Len(t, rows, 9) - require.Regexp(t, "IndexMergeJoin_.*", rows[0][0]) - require.Regexp(t, fmt.Sprintf(".*Concurrency:%v.*", tk.Session().GetSessionVars().IndexLookupJoinConcurrency()), rows[0][5]) // TestExplainAnalyzeIndexHashJoin // Issue 43597 @@ -416,9 +411,6 @@ func TestIssue20270(t *testing.T) { tk.MustExec("create table t1(c1 int, c2 int)") tk.MustExec("insert into t values(1,1),(2,2)") tk.MustExec("insert into t1 values(2,3),(4,4)") - enableHashJoinV2 := join.IsHashJoinV2Enabled() - join.SetEnableHashJoinV2(false) - defer join.SetEnableHashJoinV2(enableHashJoinV2) require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/executor/join/killedInJoin2Chunk", "return(true)")) err := tk.QueryToErr("select /*+ HASH_JOIN(t, t1) */ * from t left join t1 on t.c1 = t1.c1 where t.c1 = 1 or t1.c2 > 20") require.Equal(t, exeerrors.ErrQueryInterrupted, err) @@ -492,10 +484,9 @@ func TestFinalizeCurrentSegPanic(t *testing.T) { tk.MustExec("create table t2 (a int, b int, c int)") tk.MustExec("insert into t1 values (1, 1, 1), (1, 2, 2), (2, 1, 3), (2, 2, 4)") tk.MustExec("insert into t2 values (1, 1, 1), (1, 2, 2), (2, 1, 3), (2, 2, 4)") - isHashJoinV2Enabled := join.IsHashJoinV2Enabled() join.SetEnableHashJoinV2(true) defer func() { - join.SetEnableHashJoinV2(isHashJoinV2Enabled) + join.SetEnableHashJoinV2(false) }() fpName := "github.com/pingcap/tidb/pkg/executor/join/finalizeCurrentSegPanic" require.NoError(t, failpoint.Enable(fpName, "panic(\"finalizeCurrentSegPanic\")")) @@ -516,10 +507,9 @@ func TestSplitPartitionPanic(t *testing.T) { tk.MustExec("create table t2 (a int, b int, c int)") tk.MustExec("insert into t1 values (1, 1, 1), (1, 2, 2), (2, 1, 3), (2, 2, 4)") tk.MustExec("insert into t2 values (1, 1, 1), (1, 2, 2), (2, 1, 3), (2, 2, 4)") - isHashJoinV2Enabled := join.IsHashJoinV2Enabled() join.SetEnableHashJoinV2(true) defer func() { - join.SetEnableHashJoinV2(isHashJoinV2Enabled) + join.SetEnableHashJoinV2(false) }() fpName := "github.com/pingcap/tidb/pkg/executor/join/splitPartitionPanic" require.NoError(t, failpoint.Enable(fpName, "panic(\"splitPartitionPanic\")")) @@ -540,10 +530,9 @@ func TestProcessOneProbeChunkPanic(t *testing.T) { tk.MustExec("create table t2 (a int, b int, c int)") tk.MustExec("insert into t1 values (1, 1, 1), (1, 2, 2), (2, 1, 3), (2, 2, 4)") tk.MustExec("insert into t2 values (1, 1, 1), (1, 2, 2), (2, 1, 3), (2, 2, 4)") - isHashJoinV2Enabled := join.IsHashJoinV2Enabled() join.SetEnableHashJoinV2(true) defer func() { - join.SetEnableHashJoinV2(isHashJoinV2Enabled) + join.SetEnableHashJoinV2(false) }() fpName := "github.com/pingcap/tidb/pkg/executor/join/processOneProbeChunkPanic" require.NoError(t, failpoint.Enable(fpName, "panic(\"processOneProbeChunkPanic\")")) @@ -564,10 +553,9 @@ func TestCreateTasksPanic(t *testing.T) { tk.MustExec("create table t2 (a int, b int, c int)") tk.MustExec("insert into t1 values (1, 1, 1), (1, 2, 2), (2, 1, 3), (2, 2, 4)") tk.MustExec("insert into t2 values (1, 1, 1), (1, 2, 2), (2, 1, 3), (2, 2, 4)") - isHashJoinV2Enabled := join.IsHashJoinV2Enabled() join.SetEnableHashJoinV2(true) defer func() { - join.SetEnableHashJoinV2(isHashJoinV2Enabled) + join.SetEnableHashJoinV2(false) }() fpName := "github.com/pingcap/tidb/pkg/executor/join/createTasksPanic" require.NoError(t, failpoint.Enable(fpName, "panic(\"createTasksPanic\")")) @@ -588,10 +576,9 @@ func TestBuildHashTablePanic(t *testing.T) { tk.MustExec("create table t2 (a int, b int, c int)") tk.MustExec("insert into t1 values (1, 1, 1), (1, 2, 2), (2, 1, 3), (2, 2, 4)") tk.MustExec("insert into t2 values (1, 1, 1), (1, 2, 2), (2, 1, 3), (2, 2, 4)") - isHashJoinV2Enabled := join.IsHashJoinV2Enabled() join.SetEnableHashJoinV2(true) defer func() { - join.SetEnableHashJoinV2(isHashJoinV2Enabled) + join.SetEnableHashJoinV2(false) }() fpName := "github.com/pingcap/tidb/pkg/executor/join/buildHashTablePanic" require.NoError(t, failpoint.Enable(fpName, "panic(\"buildHashTablePanic\")")) @@ -612,10 +599,9 @@ func TestKillDuringProbe(t *testing.T) { tk.MustExec("create table t1(c1 int, c2 int)") tk.MustExec("insert into t values(1,1),(2,2)") tk.MustExec("insert into t1 values(2,3),(4,4)") - isHashJoinV2Enabled := join.IsHashJoinV2Enabled() join.SetEnableHashJoinV2(true) defer func() { - join.SetEnableHashJoinV2(isHashJoinV2Enabled) + join.SetEnableHashJoinV2(false) }() require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/executor/join/killedDuringProbe", "return(true)")) defer func() { @@ -646,10 +632,9 @@ func TestKillDuringBuild(t *testing.T) { tk.MustExec("create table t1(c1 int, c2 int)") tk.MustExec("insert into t values(1,1),(2,2)") tk.MustExec("insert into t1 values(2,3),(4,4)") - isHashJoinV2Enabled := join.IsHashJoinV2Enabled() join.SetEnableHashJoinV2(true) defer func() { - join.SetEnableHashJoinV2(isHashJoinV2Enabled) + join.SetEnableHashJoinV2(false) }() require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/executor/join/killedDuringBuild", "return(true)")) defer func() { @@ -685,3 +670,21 @@ func TestIssue54755(t *testing.T) { // left join tk.MustQuery("select max(SQ1_alias2.col_int_nokey) as SQ1_field1 from ( t1 as SQ1_alias2 left join t2 as SQ1_alias1 on ( SQ1_alias2.col_varchar_key = SQ1_alias1.col_varchar_nokey ))").Check(testkit.Rows("150")) } + +func TestIssue55016(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("drop table if exists t;") + tk.MustExec("create table t(a varchar(10), b char(10))") + tk.MustExec("insert into t values('aa','a')") + isHashJoinV2Enabled := join.IsHashJoinV2Enabled() + defer func() { + join.SetEnableHashJoinV2(isHashJoinV2Enabled) + }() + hashJoinV2Enable := []bool{true, false} + for _, enableHashJoinV2 := range hashJoinV2Enable { + join.SetEnableHashJoinV2(enableHashJoinV2) + tk.MustQuery("select count(*) from t t1 join t t2 on t1.a = t2.b and t2.a = t1.b").Check(testkit.Rows("0")) + } +} diff --git a/pkg/executor/test/jointest/join_test.go b/pkg/executor/test/jointest/join_test.go index 2c9d873f6f69f..634e3c5e8fef8 100644 --- a/pkg/executor/test/jointest/join_test.go +++ b/pkg/executor/test/jointest/join_test.go @@ -136,10 +136,10 @@ func TestJoin2(t *testing.T) { // The physical plans of the two sql are tested at physical_plan_test.go tk.MustQuery("select /*+ INL_JOIN(t, t1) */ * from t join t1 on t.a=t1.a").Check(testkit.Rows("1 1 1 2", "1 1 1 3", "1 1 1 4", "3 3 3 4")) tk.MustQuery("select /*+ INL_HASH_JOIN(t, t1) */ * from t join t1 on t.a=t1.a").Sort().Check(testkit.Rows("1 1 1 2", "1 1 1 3", "1 1 1 4", "3 3 3 4")) - tk.MustQuery("select /*+ INL_MERGE_JOIN(t, t1) */ * from t join t1 on t.a=t1.a").Check(testkit.Rows("1 1 1 2", "1 1 1 3", "1 1 1 4", "3 3 3 4")) + tk.MustQuery("select /*+ INL_MERGE_JOIN(t, t1) */ * from t join t1 on t.a=t1.a").Check(testkit.Rows("1 1 1 4", "1 1 1 3", "1 1 1 2", "3 3 3 4")) tk.MustQuery("select /*+ INL_JOIN(t) */ * from t1 join t on t.a=t1.a and t.a < t1.b").Check(testkit.Rows("1 2 1 1", "1 3 1 1", "1 4 1 1", "3 4 3 3")) tk.MustQuery("select /*+ INL_HASH_JOIN(t) */ * from t1 join t on t.a=t1.a and t.a < t1.b").Sort().Check(testkit.Rows("1 2 1 1", "1 3 1 1", "1 4 1 1", "3 4 3 3")) - tk.MustQuery("select /*+ INL_MERGE_JOIN(t) */ * from t1 join t on t.a=t1.a and t.a < t1.b").Check(testkit.Rows("1 2 1 1", "1 3 1 1", "1 4 1 1", "3 4 3 3")) + tk.MustQuery("select /*+ INL_MERGE_JOIN(t) */ * from t1 join t on t.a=t1.a and t.a < t1.b").Check(testkit.Rows("1 4 1 1", "1 3 1 1", "1 2 1 1", "3 4 3 3")) // Test single index reader. tk.MustQuery("select /*+ INL_JOIN(t, t1) */ t1.b from t1 join t on t.b=t1.b").Check(testkit.Rows("2", "3")) tk.MustQuery("select /*+ INL_HASH_JOIN(t, t1) */ t1.b from t1 join t on t.b=t1.b").Sort().Check(testkit.Rows("2", "3")) diff --git a/pkg/executor/test/seqtest/seq_executor_test.go b/pkg/executor/test/seqtest/seq_executor_test.go index 14f68aaa0abd3..df85c0db9f254 100644 --- a/pkg/executor/test/seqtest/seq_executor_test.go +++ b/pkg/executor/test/seqtest/seq_executor_test.go @@ -1299,9 +1299,7 @@ func TestOOMPanicInHashJoinWhenFetchBuildRows(t *testing.T) { tk.MustExec("insert into t values(1,1),(2,2)") fpName := "github.com/pingcap/tidb/pkg/executor/join/errorFetchBuildSideRowsMockOOMPanic" require.NoError(t, failpoint.Enable(fpName, `panic("ERROR 1105 (HY000): Out Of Memory Quota![conn=1]")`)) - isHashJoinV2Enabled := join.IsHashJoinV2Enabled() defer func() { - join.SetEnableHashJoinV2(isHashJoinV2Enabled) require.NoError(t, failpoint.Disable(fpName)) }() useHashJoinV2 := []bool{true, false} diff --git a/pkg/executor/test/writetest/write_test.go b/pkg/executor/test/writetest/write_test.go index 3ea9a6e5f7133..d4013c145afc4 100644 --- a/pkg/executor/test/writetest/write_test.go +++ b/pkg/executor/test/writetest/write_test.go @@ -373,11 +373,11 @@ func TestRebaseIfNeeded(t *testing.T) { tbl, err := domain.InfoSchema().TableByName(context.Background(), model.NewCIStr("test"), model.NewCIStr("t")) require.NoError(t, err) require.Nil(t, sessiontxn.NewTxn(context.Background(), ctx)) + txn, err := ctx.Txn(true) + require.NoError(t, err) // AddRecord directly here will skip to rebase the auto ID in the insert statement, // which could simulate another TiDB adds a large auto ID. - _, err = tbl.AddRecord(ctx.GetTableCtx(), types.MakeDatums(30001, 2)) - require.NoError(t, err) - txn, err := ctx.Txn(true) + _, err = tbl.AddRecord(ctx.GetTableCtx(), txn, types.MakeDatums(30001, 2)) require.NoError(t, err) require.NoError(t, txn.Commit(context.Background())) diff --git a/pkg/executor/update.go b/pkg/executor/update.go index bda1be8422ea2..adb813f5911c6 100644 --- a/pkg/executor/update.go +++ b/pkg/executor/update.go @@ -72,6 +72,8 @@ type UpdateExec struct { fkChecks map[int64][]*FKCheckExec // fkCascades contains the foreign key cascade. the map is tableID -> []*FKCascadeExec fkCascades map[int64][]*FKCascadeExec + + IgnoreError bool } // prepare `handles`, `tableUpdatable`, `changed` to avoid re-computations. @@ -172,7 +174,7 @@ func (e *UpdateExec) merge(row, newData []types.Datum, mergeGenerated bool) erro return nil } -func (e *UpdateExec) exec(ctx context.Context, _ *expression.Schema, row, newData []types.Datum) error { +func (e *UpdateExec) exec(ctx context.Context, _ *expression.Schema, row, newData []types.Datum, dupKeyCheck table.DupKeyCheckMode) error { defer trace.StartRegion(ctx, "UpdateExec").End() bAssignFlag := make([]bool, len(e.assignFlag)) for i, flag := range e.assignFlag { @@ -205,7 +207,7 @@ func (e *UpdateExec) exec(ctx context.Context, _ *expression.Schema, row, newDat // Update row fkChecks := e.fkChecks[content.TblID] fkCascades := e.fkCascades[content.TblID] - changed, err1 := updateRecord(ctx, e.Ctx(), handle, oldData, newTableData, flags, tbl, false, e.memTracker, fkChecks, fkCascades) + changed, err1 := updateRecord(ctx, e.Ctx(), handle, oldData, newTableData, flags, tbl, false, e.memTracker, fkChecks, fkCascades, dupKeyCheck) if err1 == nil { _, exist := e.updatedRowKeys[content.Start].Get(handle) memDelta := e.updatedRowKeys[content.Start].Set(handle, changed) @@ -273,6 +275,13 @@ func (e *UpdateExec) updateRows(ctx context.Context) (int, error) { } memUsageOfChk := int64(0) totalNumRows := 0 + + txn, err := e.Ctx().Txn(true) + if err != nil { + return 0, err + } + + dupKeyCheck := optimizeDupKeyCheckForUpdate(txn, e.IgnoreError) for { e.memTracker.Consume(-memUsageOfChk) err := exec.Next(ctx, e.Children(0), chk) @@ -286,14 +295,12 @@ func (e *UpdateExec) updateRows(ctx context.Context) (int, error) { memUsageOfChk = chk.MemoryUsage() e.memTracker.Consume(memUsageOfChk) if e.collectRuntimeStatsEnabled() { - txn, err := e.Ctx().Txn(true) - if err == nil && txn.GetSnapshot() != nil { - txn.GetSnapshot().SetOption(kv.CollectRuntimeStats, e.stats.SnapshotRuntimeStats) + if snap := txn.GetSnapshot(); snap != nil { + snap.SetOption(kv.CollectRuntimeStats, e.stats.SnapshotRuntimeStats) } } - txn, err := e.Ctx().Txn(true) // pipelined dml may already flush in background, don't touch it to avoid race. - if err == nil && !txn.IsPipelined() { + if !txn.IsPipelined() { sc := e.Ctx().GetSessionVars().StmtCtx txn.SetOption(kv.ResourceGroupTagger, sc.GetResourceGroupTagger()) if sc.KvExecCounter != nil { @@ -329,7 +336,7 @@ func (e *UpdateExec) updateRows(ctx context.Context) (int, error) { } } // write to table - if err := e.exec(ctx, e.Children(0).Schema(), datumRow, newRow); err != nil { + if err := e.exec(ctx, e.Children(0).Schema(), datumRow, newRow, dupKeyCheck); err != nil { return 0, err } } @@ -339,7 +346,7 @@ func (e *UpdateExec) updateRows(ctx context.Context) (int, error) { return totalNumRows, nil } -func (*UpdateExec) handleErr(colName model.CIStr, rowIdx int, err error) error { +func (e *UpdateExec) handleErr(colName model.CIStr, col *table.Column, rowIdx int, err error) error { if err == nil { return nil } @@ -351,7 +358,10 @@ func (*UpdateExec) handleErr(colName model.CIStr, rowIdx int, err error) error { if types.ErrOverflow.Equal(err) { return types.ErrWarnDataOutOfRange.GenWithStackByArgs(colName.O, rowIdx+1) } - + if types.ErrTruncatedWrongVal.Equal(err) && col != nil && col.ColumnInfo != nil && col.ColumnInfo.GetType() == mysql.TypeTimestamp { + ec := e.Ctx().GetSessionVars().StmtCtx.ErrCtx() + return errors.AddStack(ec.HandleErrorWithAlias(kv.ErrKeyExists, err, err)) + } return err } @@ -364,7 +374,7 @@ func (e *UpdateExec) fastComposeNewRow(rowIdx int, oldRow []types.Datum, cols [] } con := assign.Expr.(*expression.Constant) val, err := con.Eval(e.Ctx().GetExprCtx().GetEvalCtx(), emptyRow) - if err = e.handleErr(assign.ColName, rowIdx, err); err != nil { + if err = e.handleErr(assign.ColName, cols[assign.Col.Index], rowIdx, err); err != nil { return nil, err } @@ -372,7 +382,7 @@ func (e *UpdateExec) fastComposeNewRow(rowIdx int, oldRow []types.Datum, cols [] // No need to cast `_tidb_rowid` column value. if cols[assign.Col.Index] != nil { val, err = table.CastValue(e.Ctx(), val, cols[assign.Col.Index].ColumnInfo, false, false) - if err = e.handleErr(assign.ColName, rowIdx, err); err != nil { + if err = e.handleErr(assign.ColName, cols[assign.Col.Index], rowIdx, err); err != nil { return nil, err } } @@ -399,7 +409,7 @@ func (e *UpdateExec) composeNewRow(rowIdx int, oldRow []types.Datum, cols []*tab // No need to cast `_tidb_rowid` column value. if cols[assign.Col.Index] != nil { val, err = table.CastValue(e.Ctx(), val, cols[assign.Col.Index].ColumnInfo, false, false) - if err = e.handleErr(assign.ColName, rowIdx, err); err != nil { + if err = e.handleErr(assign.ColName, cols[assign.Col.Index], rowIdx, err); err != nil { return nil, err } } @@ -420,7 +430,7 @@ func (e *UpdateExec) composeGeneratedColumns(rowIdx int, newRowData []types.Datu continue } val, err := assign.Expr.Eval(e.Ctx().GetExprCtx().GetEvalCtx(), e.evalBuffer.ToRow()) - if err = e.handleErr(assign.ColName, rowIdx, err); err != nil { + if err = e.handleErr(assign.ColName, cols[assign.Col.Index], rowIdx, err); err != nil { return nil, err } @@ -428,7 +438,7 @@ func (e *UpdateExec) composeGeneratedColumns(rowIdx int, newRowData []types.Datu // No need to cast `_tidb_rowid` column value. if cols[assign.Col.Index] != nil { val, err = table.CastValue(e.Ctx(), val, cols[assign.Col.Index].ColumnInfo, false, false) - if err = e.handleErr(assign.ColName, rowIdx, err); err != nil { + if err = e.handleErr(assign.ColName, cols[assign.Col.Index], rowIdx, err); err != nil { return nil, err } } @@ -574,3 +584,40 @@ func (e *UpdateExec) GetFKCascades() []*FKCascadeExec { func (e *UpdateExec) HasFKCascades() bool { return len(e.fkCascades) > 0 } + +// optimizeDupKeyCheckForUpdate trys to optimize the DupKeyCheckMode for an update statement. +// If the DupKeyCheckMode of the current statement can be optimized, it will return `DupKeyCheckLazy` to avoid the +// redundant requests to TiKV, otherwise, `DupKeyCheckInPlace` will be returned. +// The second argument `ignoreNeedsCheckInPlace` is true if `IGNORE` keyword is used in the update statement. +func optimizeDupKeyCheckForUpdate(txn kv.Transaction, ignoreNeedsCheckInPlace bool) table.DupKeyCheckMode { + if txn.IsPipelined() { + // It means `@@tidb_dml_type='bulk'` which indicates to insert rows in "bulk" mode. + // At this time, `DupKeyCheckLazy` should be used to improve the performance. + // If "bulk" mode and IGNORE keyword are used together, "bulk" is prior, see: + // https://github.com/pingcap/tidb/issues/55187#issuecomment-2268356459 + return table.DupKeyCheckLazy + } + + if ignoreNeedsCheckInPlace { + // For `UPDATE IGNORE ...` and `INSERT IGNORE ... ON DUPLICATE KEY UPDATE ...` statements, + // `DupKeyCheckInPlace` should be used to make sure the executor can get the error + // immediately and ignore it then. + return table.DupKeyCheckInPlace + } + + if txn.IsPessimistic() { + // We can just check duplicated key lazily without keys in storage for the below cases: + // - `txn.Pipelined()` is true. + // It means the user is using `@@tidb_dml_type="bulk"` to insert rows in bulk mode. + // DupKeyCheckLazy should be used to improve the performance. + // - The current transaction is pessimistic. + // The duplicate key check can be postponed to the lock stage. + // Please notice that for optimistic transaction, it always returns `DupKeyCheckInPlace` even if + // `tidb_constraint_check_in_place` is `OFF`. + // That is because `tidb_constraint_check_in_place` is only designed for insert cases, see comments in issue: + // https://github.com/pingcap/tidb/issues/54492#issuecomment-2229941881 + return table.DupKeyCheckLazy + } + + return table.DupKeyCheckInPlace +} diff --git a/pkg/executor/window.go b/pkg/executor/window.go index 42c46cba9f49e..4b7c7b68a09ef 100644 --- a/pkg/executor/window.go +++ b/pkg/executor/window.go @@ -23,7 +23,7 @@ import ( "github.com/pingcap/tidb/pkg/executor/internal/vecgroupchecker" "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/parser/ast" - "github.com/pingcap/tidb/pkg/planner/core" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/util/chunk" ) @@ -237,8 +237,8 @@ func (p *aggWindowProcessor) resetPartialResult() { type rowFrameWindowProcessor struct { windowFuncs []aggfuncs.AggFunc partialResults []aggfuncs.PartialResult - start *core.FrameBound - end *core.FrameBound + start *logicalop.FrameBound + end *logicalop.FrameBound curRowIdx uint64 } @@ -379,8 +379,8 @@ func (p *rowFrameWindowProcessor) resetPartialResult() { type rangeFrameWindowProcessor struct { windowFuncs []aggfuncs.AggFunc partialResults []aggfuncs.PartialResult - start *core.FrameBound - end *core.FrameBound + start *logicalop.FrameBound + end *logicalop.FrameBound curRowIdx uint64 lastStartOffset uint64 lastEndOffset uint64 diff --git a/pkg/executor/write.go b/pkg/executor/write.go index 98d8518bd4215..56538d29a7c35 100644 --- a/pkg/executor/write.go +++ b/pkg/executor/write.go @@ -56,12 +56,13 @@ var ( func updateRecord( ctx context.Context, sctx sessionctx.Context, h kv.Handle, oldData, newData []types.Datum, modified []bool, t table.Table, - onDup bool, _ *memory.Tracker, fkChecks []*FKCheckExec, fkCascades []*FKCascadeExec, + onDup bool, _ *memory.Tracker, fkChecks []*FKCheckExec, fkCascades []*FKCascadeExec, dupKeyMode table.DupKeyCheckMode, ) (bool, error) { r, ctx := tracing.StartRegionEx(ctx, "executor.updateRecord") defer r.End() - sc := sctx.GetSessionVars().StmtCtx + sessVars := sctx.GetSessionVars() + sc := sessVars.StmtCtx changed, handleChanged := false, false // onUpdateSpecified is for "UPDATE SET ts_field = old_value", the // timestamp field is explicitly set, but not changed in fact. @@ -82,7 +83,7 @@ func updateRecord( // Handle exchange partition tbl := t.Meta() if tbl.ExchangePartitionInfo != nil && tbl.GetPartitionInfo() == nil { - if err := checkRowForExchangePartition(sctx.GetTableCtx(), newData, tbl); err != nil { + if err := checkRowForExchangePartition(sctx, newData, tbl); err != nil { return false, err } } @@ -130,11 +131,11 @@ func updateRecord( // If no changes, nothing to do, return directly. if !changed { // See https://dev.mysql.com/doc/refman/5.7/en/mysql-real-connect.html CLIENT_FOUND_ROWS - if sctx.GetSessionVars().ClientCapability&mysql.ClientFoundRows > 0 { + if sessVars.ClientCapability&mysql.ClientFoundRows > 0 { sc.AddAffectedRows(1) } keySet := lockRowKey - if sctx.GetSessionVars().LockUnchangedKeys { + if sessVars.LockUnchangedKeys { keySet |= lockUniqueKeys } _, err := addUnchangedKeysForLockByRow(sctx, t, h, oldData, keySet) @@ -161,25 +162,26 @@ func updateRecord( } } + pessimisticLazyCheck := getPessimisticLazyCheckMode(sessVars) + txn, err := sctx.Txn(true) + if err != nil { + return false, err + } // If handle changed, remove the old then add the new record, otherwise update the record. if handleChanged { // For `UPDATE IGNORE`/`INSERT IGNORE ON DUPLICATE KEY UPDATE` // we use the staging buffer so that we don't need to precheck the existence of handle or unique keys by sending // extra kv requests, and the remove action will not take effect if there are conflicts. if updated, err := func() (bool, error) { - txn, err := sctx.Txn(true) - if err != nil { - return false, err - } memBuffer := txn.GetMemBuffer() sh := memBuffer.Staging() defer memBuffer.Cleanup(sh) - if err = t.RemoveRecord(sctx.GetTableCtx(), h, oldData); err != nil { + if err = t.RemoveRecord(sctx.GetTableCtx(), txn, h, oldData); err != nil { return false, err } - _, err = t.AddRecord(sctx.GetTableCtx(), newData, table.IsUpdate, table.WithCtx(ctx)) + _, err = t.AddRecord(sctx.GetTableCtx(), txn, newData, table.IsUpdate, table.WithCtx(ctx), dupKeyMode, pessimisticLazyCheck) if err != nil { return false, err } @@ -187,21 +189,32 @@ func updateRecord( return true, nil }(); err != nil { if terr, ok := errors.Cause(err).(*terror.Error); ok && (terr.Code() == errno.ErrNoPartitionForGivenValue || terr.Code() == errno.ErrRowDoesNotMatchGivenPartitionSet) { - ec := sctx.GetSessionVars().StmtCtx.ErrCtx() + ec := sc.ErrCtx() return false, ec.HandleError(err) } return updated, err } } else { + var opts []table.UpdateRecordOption + if sessVars.InTxn() || sc.InHandleForeignKeyTrigger || sc.ForeignKeyTriggerCtx.HasFKCascades { + // If txn is auto commit and index is untouched, no need to write index value. + // If InHandleForeignKeyTrigger or ForeignKeyTriggerCtx.HasFKCascades is true indicate we may have + // foreign key cascade need to handle later, then we still need to write index value, + // otherwise, the later foreign cascade executor may see data-index inconsistency in txn-mem-buffer. + opts = []table.UpdateRecordOption{table.WithCtx(ctx), dupKeyMode, pessimisticLazyCheck} + } else { + opts = []table.UpdateRecordOption{table.WithCtx(ctx), dupKeyMode, pessimisticLazyCheck, table.SkipWriteUntouchedIndices} + } + // Update record to new value and update index. - if err := t.UpdateRecord(ctx, sctx.GetTableCtx(), h, oldData, newData, modified); err != nil { + if err := t.UpdateRecord(sctx.GetTableCtx(), txn, h, oldData, newData, modified, opts...); err != nil { if terr, ok := errors.Cause(err).(*terror.Error); ok && (terr.Code() == errno.ErrNoPartitionForGivenValue || terr.Code() == errno.ErrRowDoesNotMatchGivenPartitionSet) { - ec := sctx.GetSessionVars().StmtCtx.ErrCtx() + ec := sc.ErrCtx() return false, ec.HandleError(err) } return false, err } - if sctx.GetSessionVars().LockUnchangedKeys { + if sessVars.LockUnchangedKeys { // Lock unique keys when handle unchanged if _, err := addUnchangedKeysForLockByRow(sctx, t, h, oldData, lockUniqueKeys); err != nil { return false, err @@ -319,9 +332,9 @@ func resetErrDataTooLong(colName string, rowIdx int, _ error) error { // checkRowForExchangePartition is only used for ExchangePartition by non-partitionTable during write only state. // It check if rowData inserted or updated violate partition definition or checkConstraints of partitionTable. -func checkRowForExchangePartition(sctx table.MutateContext, row []types.Datum, tbl *model.TableInfo) error { +func checkRowForExchangePartition(sctx sessionctx.Context, row []types.Datum, tbl *model.TableInfo) error { is := sctx.GetDomainInfoSchema().(infoschema.InfoSchema) - pt, tableFound := is.TableByID(tbl.ExchangePartitionInfo.ExchangePartitionTableID) + pt, tableFound := is.TableByID(context.Background(), tbl.ExchangePartitionInfo.ExchangePartitionTableID) if !tableFound { return errors.Errorf("exchange partition process table by id failed") } diff --git a/pkg/expression/builtin.go b/pkg/expression/builtin.go index e01405efda29a..e5f640da0c3c6 100644 --- a/pkg/expression/builtin.go +++ b/pkg/expression/builtin.go @@ -50,7 +50,7 @@ import ( type baseBuiltinFunc struct { bufAllocator columnBufferAllocator args []Expression - tp *types.FieldType + tp *types.FieldType `plan-cache-clone:"shallow"` pbCode tipb.ScalarFuncSig ctor collate.Collator @@ -427,7 +427,9 @@ func (b *baseBuiltinFunc) cloneFrom(from *baseBuiltinFunc) { b.pbCode = from.pbCode b.bufAllocator = newLocalColumnPool() b.childrenVectorizedOnce = new(sync.Once) - b.ctor = from.ctor + if from.ctor != nil { + b.ctor = from.ctor.Clone() + } } func (*baseBuiltinFunc) Clone() builtinFunc { diff --git a/pkg/expression/builtin_other.go b/pkg/expression/builtin_other.go index e0375bda60a1e..a7b43062640d2 100644 --- a/pkg/expression/builtin_other.go +++ b/pkg/expression/builtin_other.go @@ -1696,7 +1696,6 @@ func (c *getParamFunctionClass) getFunction(ctx BuildContext, args []Expression) type builtinGetParamStringSig struct { baseBuiltinFunc - contextopt.SessionVarsPropReader } func (b *builtinGetParamStringSig) Clone() builtinFunc { @@ -1705,20 +1704,16 @@ func (b *builtinGetParamStringSig) Clone() builtinFunc { return newSig } -func (b *builtinGetParamStringSig) RequiredOptionalEvalProps() OptionalEvalPropKeySet { - return b.SessionVarsPropReader.RequiredOptionalEvalProps() -} - func (b *builtinGetParamStringSig) evalString(ctx EvalContext, row chunk.Row) (string, bool, error) { - sessionVars, err := b.GetSessionVars(ctx) - if err != nil { - return "", true, err - } idx, isNull, err := b.args[0].EvalInt(ctx, row) if isNull || err != nil { return "", isNull, err } - v := sessionVars.PlanCacheParams.GetParamValue(int(idx)) + + v, err := ctx.GetParamValue(int(idx)) + if err != nil { + return "", true, err + } str, err := v.ToString() if err != nil { diff --git a/pkg/expression/builtin_other_test.go b/pkg/expression/builtin_other_test.go index cd99de923ff39..4b3528dc01351 100644 --- a/pkg/expression/builtin_other_test.go +++ b/pkg/expression/builtin_other_test.go @@ -19,6 +19,7 @@ import ( "testing" "time" + exprctx "github.com/pingcap/tidb/pkg/expression/context" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/types" @@ -342,3 +343,30 @@ func TestInFunc(t *testing.T) { require.NoError(t, err) require.Equal(t, int64(1), chk2.Column(0).GetInt64(0)) } + +func TestGetParam(t *testing.T) { + ctx := createContext(t) + params := []types.Datum{ + types.NewIntDatum(123), + types.NewStringDatum("abc"), + } + ctx.GetSessionVars().PlanCacheParams.Append(params...) + fc := funcs[ast.GetParam] + + for i := range params { + fn, err := fc.getFunction(ctx, datumsToConstants(types.MakeDatums(i))) + require.NoError(t, err) + d, err := evalBuiltinFunc(fn, ctx, chunk.Row{}) + require.NoError(t, err) + str, err := params[i].ToString() + require.NoError(t, err) + require.Equal(t, d.Kind(), types.KindString) + require.Equal(t, str, d.GetString()) + } + + fn, err := fc.getFunction(ctx, datumsToConstants(types.MakeDatums(len(params)+1))) + require.NoError(t, err) + d, err := evalBuiltinFunc(fn, ctx, chunk.Row{}) + require.Equal(t, exprctx.ErrParamIndexExceedParamCounts, err) + require.True(t, d.IsNull()) +} diff --git a/pkg/expression/builtin_other_vec.go b/pkg/expression/builtin_other_vec.go index cc0f30b0d6085..dbc4e3ef89e85 100644 --- a/pkg/expression/builtin_other_vec.go +++ b/pkg/expression/builtin_other_vec.go @@ -126,10 +126,6 @@ func (b *builtinGetParamStringSig) vectorized() bool { } func (b *builtinGetParamStringSig) vecEvalString(ctx EvalContext, input *chunk.Chunk, result *chunk.Column) error { - sessionVars, err := b.GetSessionVars(ctx) - if err != nil { - return err - } n := input.NumRows() idx, err := b.bufAllocator.get() if err != nil { @@ -147,7 +143,11 @@ func (b *builtinGetParamStringSig) vecEvalString(ctx EvalContext, input *chunk.C continue } idxI := idxIs[i] - v := sessionVars.PlanCacheParams.GetParamValue(int(idxI)) + v, err := ctx.GetParamValue(int(idxI)) + if err != nil { + return err + } + str, err := v.ToString() if err != nil { result.AppendNull() diff --git a/pkg/expression/builtin_other_vec_test.go b/pkg/expression/builtin_other_vec_test.go index 6e3d81c2eecfe..9e817b0e028b6 100644 --- a/pkg/expression/builtin_other_vec_test.go +++ b/pkg/expression/builtin_other_vec_test.go @@ -19,6 +19,7 @@ import ( "math/rand" "testing" + exprctx "github.com/pingcap/tidb/pkg/expression/context" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/chunk" @@ -88,3 +89,37 @@ func TestInDecimal(t *testing.T) { require.Equal(t, int64(1), result.GetInt64(0)) } } + +func TestGetParamVec(t *testing.T) { + ctx := createContext(t) + params := []types.Datum{ + types.NewIntDatum(123), + types.NewStringDatum("abc"), + } + ctx.GetSessionVars().PlanCacheParams.Append(params...) + ft := eType2FieldType(types.ETInt) + col := &Column{RetType: ft, Index: 0} + fn, err := funcs[ast.GetParam].getFunction(ctx, []Expression{col}) + require.NoError(t, err) + + input := chunk.NewChunkWithCapacity([]*types.FieldType{ft}, 3) + for i := range params { + input.Column(0).AppendInt64(int64(i)) + } + result := chunk.NewColumn(ft, 3) + require.NoError(t, vecEvalType(ctx, fn, types.ETString, input, result)) + require.Equal(t, len(params), result.Rows()) + for i := 0; i < result.Rows(); i++ { + require.False(t, result.IsNull(i)) + val := result.GetString(i) + str, err := params[i].ToString() + require.NoError(t, err) + require.Equal(t, str, val) + } + + input = chunk.NewChunkWithCapacity([]*types.FieldType{ft}, 3) + input.Column(0).AppendInt64(1) + input.Column(0).AppendInt64(2) + input.Column(0).AppendInt64(int64(len(params))) + require.Equal(t, exprctx.ErrParamIndexExceedParamCounts, vecEvalType(ctx, fn, types.ETString, input, result)) +} diff --git a/pkg/expression/builtin_time.go b/pkg/expression/builtin_time.go index 335bf0852464c..e2c58fd32699c 100644 --- a/pkg/expression/builtin_time.go +++ b/pkg/expression/builtin_time.go @@ -6231,13 +6231,11 @@ func addUnitToTime(unit string, t time.Time, v float64) (time.Time, bool, error) if !validAddMonth(v, t.Year(), int(t.Month())) { return tb, true, nil } - tb = t.AddDate(0, int(v), 0) - // For corner case: timestampadd(month,1,date '2024-01-31') = "2024-02-29", timestampadd(month,1,date '2024-01-30') = "2024-02-29" - // `tb.Month()` refers to the actual result, `t.Month()+v` refers to the expect result. - // Actual result may be greater than expect result, we need to judge and modify it. - for int(tb.Month())%12 != (int(t.Month())+int(v))%12 { - tb = tb.AddDate(0, 0, -1) + var err error + tb, err = types.AddDate(0, int64(v), 0, t) + if err != nil { + return tb, false, err } case "QUARTER": if !validAddMonth(v*3, t.Year(), int(t.Month())) { diff --git a/pkg/expression/builtin_time_test.go b/pkg/expression/builtin_time_test.go index a25532e7737e2..60505be7f916f 100644 --- a/pkg/expression/builtin_time_test.go +++ b/pkg/expression/builtin_time_test.go @@ -2581,7 +2581,7 @@ func TestTimestampAdd(t *testing.T) { {"MINUTE", 1.5, "1995-05-01 00:00:00.000000", "1995-05-01 00:02:00"}, {"MICROSECOND", -100, "1995-05-01 00:00:00.0001", "1995-05-01 00:00:00"}, - // issue41052 + // issue 41052 {"MONTH", 1, "2024-01-31", "2024-02-29 00:00:00"}, {"MONTH", 1, "2024-01-30", "2024-02-29 00:00:00"}, {"MONTH", 1, "2024-01-29", "2024-02-29 00:00:00"}, @@ -2592,6 +2592,46 @@ func TestTimestampAdd(t *testing.T) { {"MONTH", 10, "2024-10-31", "2025-08-31 00:00:00"}, {"MONTH", 1, "2024-11-30", "2024-12-30 00:00:00"}, {"MONTH", 13, "2024-11-30", "2025-12-30 00:00:00"}, + + // issue 54908 + {"MONTH", 0, "2024-09-01", "2024-09-01 00:00:00"}, + {"MONTH", -10, "2024-09-01", "2023-11-01 00:00:00"}, + {"MONTH", -2, "2024-04-28", "2024-02-28 00:00:00"}, + {"MONTH", -2, "2024-04-29", "2024-02-29 00:00:00"}, + {"MONTH", -2, "2024-04-30", "2024-02-29 00:00:00"}, + {"MONTH", -1, "2024-03-28", "2024-02-28 00:00:00"}, + {"MONTH", -1, "2024-03-29", "2024-02-29 00:00:00"}, + {"MONTH", -1, "2024-03-30", "2024-02-29 00:00:00"}, + {"MONTH", -1, "2024-03-31", "2024-02-29 00:00:00"}, + {"MONTH", -1, "2024-03-25", "2024-02-25 00:00:00"}, + {"MONTH", -12, "2024-03-31", "2023-03-31 00:00:00"}, + {"MONTH", -13, "2024-03-31", "2023-02-28 00:00:00"}, + {"MONTH", -14, "2024-03-31", "2023-01-31 00:00:00"}, + {"MONTH", -24, "2024-03-31", "2022-03-31 00:00:00"}, + {"MONTH", -25, "2024-03-31", "2022-02-28 00:00:00"}, + {"MONTH", -26, "2024-03-31", "2022-01-31 00:00:00"}, + {"MONTH", -1, "2024-02-25", "2024-01-25 00:00:00"}, + {"MONTH", -11, "2025-02-28", "2024-03-28 00:00:00"}, + {"MONTH", -12, "2025-02-28", "2024-02-28 00:00:00"}, + {"MONTH", -13, "2025-02-28", "2024-01-28 00:00:00"}, + {"MONTH", -11, "2024-02-29", "2023-03-29 00:00:00"}, + {"MONTH", -12, "2024-02-29", "2023-02-28 00:00:00"}, + {"MONTH", -13, "2024-02-29", "2023-01-29 00:00:00"}, + {"MONTH", -11, "2023-02-28", "2022-03-28 00:00:00"}, + {"MONTH", -12, "2023-02-28", "2022-02-28 00:00:00"}, + {"MONTH", -13, "2023-02-28", "2022-01-28 00:00:00"}, + {"MONTH", -2, "2023-02-28", "2022-12-28 00:00:00"}, + {"MONTH", -14, "2023-02-28", "2021-12-28 00:00:00"}, + {"MONTH", -3, "2023-03-20", "2022-12-20 00:00:00"}, + {"MONTH", -3, "2023-03-31", "2022-12-31 00:00:00"}, + {"MONTH", -15, "2023-03-20", "2021-12-20 00:00:00"}, + {"MONTH", -15, "2023-03-31", "2021-12-31 00:00:00"}, + {"MONTH", 12, "2020-02-29", "2021-02-28 00:00:00"}, + {"MONTH", -12, "2020-02-29", "2019-02-28 00:00:00"}, + {"MONTH", 10000*365 + 1, "2024-10-29", ""}, + {"MONTH", -10000*365 - 1, "2024-10-29", ""}, + {"MONTH", 3, "9999-10-29", ""}, + {"MONTH", -3, "0001-01-29", ""}, } fc := funcs[ast.TimestampAdd] diff --git a/pkg/expression/column.go b/pkg/expression/column.go index 1a21e2afe2797..47ec7f590dab4 100644 --- a/pkg/expression/column.go +++ b/pkg/expression/column.go @@ -243,7 +243,7 @@ func (col *CorrelatedColumn) RemapColumn(m map[int64]*Column) (Expression, error // Column represents a column. type Column struct { - RetType *types.FieldType + RetType *types.FieldType `plan-cache-clone:"shallow"` // ID is used to specify whether this column is ExtraHandleColumn or to access histogram. // We'll try to remove it in the future. ID int64 @@ -544,6 +544,10 @@ func (col *Column) EvalVectorFloat32(ctx EvalContext, row chunk.Row) (types.Vect // Clone implements Expression interface. func (col *Column) Clone() Expression { newCol := *col + if col.hashcode != nil { + newCol.hashcode = make([]byte, len(col.hashcode)) + copy(newCol.hashcode, col.hashcode) + } return &newCol } diff --git a/pkg/expression/constant.go b/pkg/expression/constant.go index 18bdf185a097b..210b55186eff8 100644 --- a/pkg/expression/constant.go +++ b/pkg/expression/constant.go @@ -117,7 +117,7 @@ func NewNullWithFieldType(fieldType *types.FieldType) *Constant { // Constant stands for a constant value. type Constant struct { Value types.Datum - RetType *types.FieldType + RetType *types.FieldType `plan-cache-clone:"shallow"` // DeferredExpr holds deferred function in PlanCache cached plan. // it's only used to represent non-deterministic functions(see expression.DeferredFunctions) // in PlanCache cached plan, so let them can be evaluated until cached item be used. @@ -163,6 +163,16 @@ func (c *Constant) StringWithCtx(ctx ParamValues, redact string) string { // Clone implements Expression interface. func (c *Constant) Clone() Expression { con := *c + if c.ParamMarker != nil { + con.ParamMarker = &ParamMarker{order: c.ParamMarker.order} + } + if c.DeferredExpr != nil { + con.DeferredExpr = c.DeferredExpr.Clone() + } + if c.hashcode != nil { + con.hashcode = make([]byte, len(c.hashcode)) + copy(con.hashcode, c.hashcode) + } return &con } diff --git a/pkg/expression/constant_propagation.go b/pkg/expression/constant_propagation.go index 38c4cf3790a63..2db05ec13ad15 100644 --- a/pkg/expression/constant_propagation.go +++ b/pkg/expression/constant_propagation.go @@ -32,10 +32,10 @@ var MaxPropagateColsCnt = 100 // nolint:structcheck type basePropConstSolver struct { - colMapper map[int64]int // colMapper maps column to its index - eqList []*Constant // if eqList[i] != nil, it means col_i = eqList[i] - unionSet *disjointset.IntSet // unionSet stores the relations like col_i = col_j - columns []*Column // columns stores all columns appearing in the conditions + colMapper map[int64]int // colMapper maps column to its index + eqList []*Constant // if eqList[i] != nil, it means col_i = eqList[i] + unionSet *disjointset.SimpleIntSet // unionSet stores the relations like col_i = col_j + columns []*Column // columns stores all columns appearing in the conditions ctx exprctx.ExprContext } @@ -68,6 +68,29 @@ func (s *basePropConstSolver) tryToUpdateEQList(col *Column, con *Constant) (boo return true, false } +// ValidCompareConstantPredicate checks if the predicate is an expression like [column '>'|'>='|'<'|'<='|'=' constant]. +// return param1: return true, if the predicate is a compare constant predicate. +// return param2: return the column side of predicate. +func ValidCompareConstantPredicate(ctx EvalContext, candidatePredicate Expression) bool { + scalarFunction, ok := candidatePredicate.(*ScalarFunction) + if !ok { + return false + } + if scalarFunction.FuncName.L != ast.GT && scalarFunction.FuncName.L != ast.GE && + scalarFunction.FuncName.L != ast.LT && scalarFunction.FuncName.L != ast.LE && + scalarFunction.FuncName.L != ast.EQ { + return false + } + column, _ := ValidCompareConstantPredicateHelper(ctx, scalarFunction, true) + if column == nil { + column, _ = ValidCompareConstantPredicateHelper(ctx, scalarFunction, false) + } + if column == nil { + return false + } + return true +} + // ValidCompareConstantPredicateHelper checks if the predicate is a compare constant predicate, like "Column xxx Constant" func ValidCompareConstantPredicateHelper(ctx EvalContext, eq *ScalarFunction, colIsLeft bool) (*Column, *Constant) { var col *Column diff --git a/pkg/expression/context/context.go b/pkg/expression/context/context.go index 8079d4205c40a..7986807118270 100644 --- a/pkg/expression/context/context.go +++ b/pkg/expression/context/context.go @@ -231,6 +231,6 @@ func AssertLocationWithSessionVars(ctxLoc *time.Location, vars *variable.Session stmtLocStr := vars.StmtCtx.TimeZone().String() intest.Assert(ctxLocStr == varsLocStr && ctxLocStr == stmtLocStr, "location mismatch, ctxLoc: %s, varsLoc: %s, stmtLoc: %s", - ctxLoc.String(), ctxLocStr, stmtLocStr, + ctxLocStr, varsLocStr, stmtLocStr, ) } diff --git a/pkg/expression/context/param.go b/pkg/expression/context/param.go index c60caae5d9141..b26a7c4172418 100644 --- a/pkg/expression/context/param.go +++ b/pkg/expression/context/param.go @@ -34,6 +34,6 @@ var EmptyParamValues ParamValues = &emptyParamValues{} type emptyParamValues struct{} // GetParamValue always returns the `ErrParamIndexExceedParamCounts` for any index -func (e *emptyParamValues) GetParamValue(idx int) (types.Datum, error) { +func (e *emptyParamValues) GetParamValue(_ int) (types.Datum, error) { return types.Datum{}, ErrParamIndexExceedParamCounts } diff --git a/pkg/expression/contextstatic/exprctx.go b/pkg/expression/contextstatic/exprctx.go index 21a6bac5d1891..14f8b8854b390 100644 --- a/pkg/expression/contextstatic/exprctx.go +++ b/pkg/expression/contextstatic/exprctx.go @@ -205,6 +205,11 @@ func (ctx *StaticExprContext) GetEvalCtx() exprctx.EvalContext { return ctx.evalCtx } +// GetStaticEvalCtx returns the inner `StaticEvalContext`. +func (ctx *StaticExprContext) GetStaticEvalCtx() *StaticEvalContext { + return ctx.evalCtx +} + // GetCharsetInfo implements the `ExprContext.GetCharsetInfo`. func (ctx *StaticExprContext) GetCharsetInfo() (string, string) { return ctx.charset, ctx.collation diff --git a/pkg/expression/evaluator.go b/pkg/expression/evaluator.go index f08b1c54ae4c3..62bcb634e7913 100644 --- a/pkg/expression/evaluator.go +++ b/pkg/expression/evaluator.go @@ -15,12 +15,18 @@ package expression import ( + "sync/atomic" + "github.com/pingcap/tidb/pkg/expression/context" "github.com/pingcap/tidb/pkg/util/chunk" + "github.com/pingcap/tidb/pkg/util/disjointset" + "github.com/pingcap/tidb/pkg/util/intest" ) type columnEvaluator struct { inputIdxToOutputIdxes map[int][]int + // mergedInputIdxToOutputIdxes is only determined in runtime when saw the input chunk. + mergedInputIdxToOutputIdxes atomic.Pointer[map[int][]int] } // run evaluates "Column" expressions. @@ -28,7 +34,11 @@ type columnEvaluator struct { // // since it will change the content of the input Chunk. func (e *columnEvaluator) run(ctx EvalContext, input, output *chunk.Chunk) error { - for inputIdx, outputIdxes := range e.inputIdxToOutputIdxes { + // mergedInputIdxToOutputIdxes only can be determined in runtime when we saw the input chunk structure. + if e.mergedInputIdxToOutputIdxes.Load() == nil { + e.mergeInputIdxToOutputIdxes(input, e.inputIdxToOutputIdxes) + } + for inputIdx, outputIdxes := range *e.mergedInputIdxToOutputIdxes.Load() { if err := output.SwapColumn(outputIdxes[0], input, inputIdx); err != nil { return err } @@ -39,6 +49,93 @@ func (e *columnEvaluator) run(ctx EvalContext, input, output *chunk.Chunk) error return nil } +// mergeInputIdxToOutputIdxes merges separate inputIdxToOutputIdxes entries when column references +// are detected within the input chunk. This process ensures consistent handling of columns derived +// from the same original source. +// +// Consider the following scenario: +// +// Initial scan operation produces a column 'a': +// +// scan: a (addr: ???) +// +// This column 'a' is used in the first projection (proj1) to create two columns a1 and a2, both referencing 'a': +// +// proj1 +// / \ +// / \ +// / \ +// a1 (addr: 0xe) a2 (addr: 0xe) +// / \ +// / \ +// / \ +// proj2 proj2 +// / \ / \ +// / \ / \ +// a3 a4 a5 a6 +// +// (addr: 0xe) (addr: 0xe) (addr: 0xe) (addr: 0xe) +// +// Here, a1 and a2 share the same address (0xe), indicating they reference the same data from the original 'a'. +// +// When moving to the second projection (proj2), the system tries to project these columns further: +// - The first set (left side) consists of a3 and a4, derived from a1, both retaining the address (0xe). +// - The second set (right side) consists of a5 and a6, derived from a2, also starting with address (0xe). +// +// When proj1 is complete, the output chunk contains two columns [a1, a2], both derived from the single column 'a' from the scan. +// Since both a1 and a2 are column references with the same address (0xe), they are treated as referencing the same data. +// +// In proj2, two separate items are created: +// - <0, [0,1]>: This means the 0th input column (a1) is projected twice, into the 0th and 1st columns of the output chunk. +// - <1, [2,3]>: This means the 1st input column (a2) is projected twice, into the 2nd and 3rd columns of the output chunk. +// +// Due to the column swapping logic in each projection, after applying the <0, [0,1]> projection, +// the addresses for a1 and a2 may become swapped or invalid: +// +// proj1: a1 (addr: invalid) a2 (addr: invalid) +// +// This can lead to issues in proj2, where further operations on these columns may be unsafe: +// +// proj2: a3 (addr: 0xe) a4 (addr: 0xe) a5 (addr: ???) a6 (addr: ???) +// +// Therefore, it's crucial to identify and merge the original column references early, ensuring +// the final inputIdxToOutputIdxes mapping accurately reflects the shared origins of the data. +// For instance, <0, [0,1,2,3]> indicates that the 0th input column (original 'a') is referenced +// by all four output columns in the final output. +// +// mergeInputIdxToOutputIdxes merges inputIdxToOutputIdxes based on detected column references. +// This ensures that columns with the same reference are correctly handled in the output chunk. +func (e *columnEvaluator) mergeInputIdxToOutputIdxes(input *chunk.Chunk, inputIdxToOutputIdxes map[int][]int) { + originalDJSet := disjointset.NewSet[int](4) + flag := make([]bool, input.NumCols()) + // Detect self column-references inside the input chunk by comparing column addresses + for i := 0; i < input.NumCols(); i++ { + if flag[i] { + continue + } + for j := i + 1; j < input.NumCols(); j++ { + if input.Column(i) == input.Column(j) { + flag[j] = true + originalDJSet.Union(i, j) + } + } + } + // Merge inputIdxToOutputIdxes based on the detected column references. + newInputIdxToOutputIdxes := make(map[int][]int, len(inputIdxToOutputIdxes)) + for inputIdx := range inputIdxToOutputIdxes { + // Root idx is internal offset, not the right column index. + originalRootIdx := originalDJSet.FindRoot(inputIdx) + originalVal, ok := originalDJSet.FindVal(originalRootIdx) + intest.Assert(ok) + mergedOutputIdxes := newInputIdxToOutputIdxes[originalVal] + mergedOutputIdxes = append(mergedOutputIdxes, inputIdxToOutputIdxes[inputIdx]...) + newInputIdxToOutputIdxes[originalVal] = mergedOutputIdxes + } + // Update the merged inputIdxToOutputIdxes automatically. + // Once failed, it means other worker has done this job at meantime. + e.mergedInputIdxToOutputIdxes.CompareAndSwap(nil, &newInputIdxToOutputIdxes) +} + type defaultEvaluator struct { outputIdxes []int exprs []Expression @@ -79,18 +176,19 @@ func (e *defaultEvaluator) run(ctx EvalContext, vecEnabled bool, input, output * func (e *defaultEvaluator) RequiredOptionalEvalProps() context.OptionalEvalPropKeySet { props := context.OptionalEvalPropKeySet(0) for _, expr := range e.exprs { - props = props | getOptionalEvalPropsForExpr(expr) + props = props | GetOptionalEvalPropsForExpr(expr) } return props } -func getOptionalEvalPropsForExpr(expr Expression) context.OptionalEvalPropKeySet { +// GetOptionalEvalPropsForExpr gets all optional evaluation properties that this expression requires. +func GetOptionalEvalPropsForExpr(expr Expression) context.OptionalEvalPropKeySet { switch e := expr.(type) { case *ScalarFunction: props := e.Function.RequiredOptionalEvalProps() for _, arg := range e.GetArgs() { - props = props | getOptionalEvalPropsForExpr(arg) + props = props | GetOptionalEvalPropsForExpr(arg) } return props @@ -157,3 +255,12 @@ func (e *EvaluatorSuite) Run(ctx EvalContext, vecEnabled bool, input, output *ch } return nil } + +// RequiredOptionalEvalProps exposes all optional evaluation properties that this evaluator requires. +func (e *EvaluatorSuite) RequiredOptionalEvalProps() context.OptionalEvalPropKeySet { + if e.defaultEvaluator != nil { + return e.defaultEvaluator.RequiredOptionalEvalProps() + } + + return 0 +} diff --git a/pkg/expression/evaluator_test.go b/pkg/expression/evaluator_test.go index 65de3187c002c..00c47c13b1d80 100644 --- a/pkg/expression/evaluator_test.go +++ b/pkg/expression/evaluator_test.go @@ -15,6 +15,7 @@ package expression import ( + "slices" "testing" "time" @@ -649,12 +650,51 @@ func TestOptionalProp(t *testing.T) { require.Equal(t, context.OptionalEvalPropKeySet(0), f.RequiredOptionalEvalProps()) require.Equal(t, context.OptPropCurrentUser.AsPropKeySet()|context.OptPropDDLOwnerInfo.AsPropKeySet(), - getOptionalEvalPropsForExpr(fe)) + GetOptionalEvalPropsForExpr(fe)) require.Equal(t, context.OptPropCurrentUser.AsPropKeySet()|context.OptPropDDLOwnerInfo.AsPropKeySet()| context.OptPropAdvisoryLock.AsPropKeySet(), - getOptionalEvalPropsForExpr(fe)|getOptionalEvalPropsForExpr(fe2)) + GetOptionalEvalPropsForExpr(fe)|GetOptionalEvalPropsForExpr(fe2)) evalSuit := NewEvaluatorSuite([]Expression{fe, fe2}, false) require.Equal(t, context.OptPropCurrentUser.AsPropKeySet()|context.OptPropDDLOwnerInfo.AsPropKeySet()| context.OptPropAdvisoryLock.AsPropKeySet(), evalSuit.RequiredOptionalEvalProps()) } + +func TestMergeInputIdxToOutputIdxes(t *testing.T) { + ctx := createContext(t) + inputIdxToOutputIdxes := make(map[int][]int) + // input 0th should be column referred as 0th and 1st in output columns. + inputIdxToOutputIdxes[0] = []int{0, 1} + // input 1th should be column referred as 2nd and 3rd in output columns. + inputIdxToOutputIdxes[1] = []int{2, 3} + columnEval := columnEvaluator{inputIdxToOutputIdxes: inputIdxToOutputIdxes} + + input := chunk.NewEmptyChunk([]*types.FieldType{types.NewFieldType(mysql.TypeLonglong), types.NewFieldType(mysql.TypeLonglong)}) + input.AppendInt64(0, 99) + // input chunk's 0th and 1st are column referred itself. + input.MakeRef(0, 1) + + // chunk: col1 <---(ref) col2 + // ____________/ \___________/ \___ + // proj: col1 col2 col3 col4 + // + // original case after inputIdxToOutputIdxes[0], the original col2 will be nil pointer + // cause consecutive col3,col4 ref projection are invalid. + // + // after fix, the new inputIdxToOutputIdxes should be: inputIdxToOutputIdxes[0]: {0, 1, 2, 3} + + output := chunk.NewEmptyChunk([]*types.FieldType{types.NewFieldType(mysql.TypeLonglong), types.NewFieldType(mysql.TypeLonglong), + types.NewFieldType(mysql.TypeLonglong), types.NewFieldType(mysql.TypeLonglong)}) + + err := columnEval.run(ctx, input, output) + require.NoError(t, err) + // all four columns are column-referred, pointing to the first one. + require.Equal(t, output.Column(0), output.Column(1)) + require.Equal(t, output.Column(1), output.Column(2)) + require.Equal(t, output.Column(2), output.Column(3)) + require.Equal(t, output.GetRow(0).GetInt64(0), int64(99)) + + require.Equal(t, len(*columnEval.mergedInputIdxToOutputIdxes.Load()), 1) + slices.Sort((*columnEval.mergedInputIdxToOutputIdxes.Load())[0]) + require.Equal(t, (*columnEval.mergedInputIdxToOutputIdxes.Load())[0], []int{0, 1, 2, 3}) +} diff --git a/pkg/expression/expression.go b/pkg/expression/expression.go index 279c6e0878fb1..b51bbec2cfd3f 100644 --- a/pkg/expression/expression.go +++ b/pkg/expression/expression.go @@ -846,6 +846,16 @@ type Assignment struct { LazyErr error } +// Clone clones the Assignment. +func (a *Assignment) Clone() *Assignment { + return &Assignment{ + Col: a.Col.Clone().(*Column), + ColName: a.ColName, + Expr: a.Expr.Clone(), + LazyErr: a.LazyErr, + } +} + // MemoryUsage return the memory usage of Assignment func (a *Assignment) MemoryUsage() (sum int64) { if a == nil { diff --git a/pkg/expression/integration_test/BUILD.bazel b/pkg/expression/integration_test/BUILD.bazel index 433770906f4ab..1a90ed073e9af 100644 --- a/pkg/expression/integration_test/BUILD.bazel +++ b/pkg/expression/integration_test/BUILD.bazel @@ -21,6 +21,7 @@ go_test( "//pkg/parser/terror", "//pkg/planner/core", "//pkg/planner/core/base", + "//pkg/planner/core/operator/logicalop", "//pkg/session", "//pkg/sessionctx/variable", "//pkg/store/mockstore", diff --git a/pkg/expression/integration_test/integration_test.go b/pkg/expression/integration_test/integration_test.go index 0c7b14e9143a9..eb38fe3495547 100644 --- a/pkg/expression/integration_test/integration_test.go +++ b/pkg/expression/integration_test/integration_test.go @@ -42,6 +42,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/terror" plannercore "github.com/pingcap/tidb/pkg/planner/core" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/session" "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/store/mockstore" @@ -931,7 +932,7 @@ func TestFilterExtractFromDNF(t *testing.T) { require.NoError(t, err, "error %v, for resolve name, expr %s", err, tt.exprStr) p, err := plannercore.BuildLogicalPlanForTest(ctx, sctx, stmts[0], ret.InfoSchema) require.NoError(t, err, "error %v, for build plan, expr %s", err, tt.exprStr) - selection := p.(base.LogicalPlan).Children()[0].(*plannercore.LogicalSelection) + selection := p.(base.LogicalPlan).Children()[0].(*logicalop.LogicalSelection) conds := make([]expression.Expression, len(selection.Conditions)) for i, cond := range selection.Conditions { conds[i] = expression.PushDownNot(sctx.GetExprCtx(), cond) @@ -1332,7 +1333,7 @@ func TestEnumIndex(t *testing.T) { ops := []string{"=", "!=", ">", ">=", "<", "<="} testElems := []string{"\"a\"", "\"b\"", "\"c\"", "\"d\"", "\"\"", "1", "2", "3", "4", "0", "-1"} for i := 0; i < nRows; i++ { - cond := fmt.Sprintf("e" + ops[rand.Intn(len(ops))] + testElems[rand.Intn(len(testElems))]) + cond := "e" + ops[rand.Intn(len(ops))] + testElems[rand.Intn(len(testElems))] result := tk.MustQuery("select * from t where " + cond).Sort().Rows() tk.MustQuery("select * from tidx where " + cond).Sort().Check(result) } diff --git a/pkg/expression/scalar_function.go b/pkg/expression/scalar_function.go index d27962eda9046..3ec1c6cb7f8cd 100644 --- a/pkg/expression/scalar_function.go +++ b/pkg/expression/scalar_function.go @@ -40,7 +40,7 @@ type ScalarFunction struct { FuncName model.CIStr // RetType is the type that ScalarFunction returns. // TODO: Implement type inference here, now we use ast's return type temporarily. - RetType *types.FieldType + RetType *types.FieldType `plan-cache-clone:"shallow"` Function builtinFunc hashcode []byte canonicalhashcode []byte @@ -343,7 +343,15 @@ func (sf *ScalarFunction) Clone() Expression { FuncName: sf.FuncName, RetType: sf.RetType, Function: sf.Function.Clone(), - hashcode: sf.hashcode, + } + // An implicit assumption: ScalarFunc.RetType == ScalarFunc.builtinFunc.RetType + if sf.hashcode != nil { + c.hashcode = make([]byte, len(sf.hashcode)) + copy(c.hashcode, sf.hashcode) + } + if sf.canonicalhashcode != nil { + c.canonicalhashcode = make([]byte, len(sf.canonicalhashcode)) + copy(c.canonicalhashcode, sf.canonicalhashcode) } c.SetCharsetAndCollation(sf.CharsetAndCollation()) c.SetCoercibility(sf.Coercibility()) diff --git a/pkg/expression/util.go b/pkg/expression/util.go index f7b51e8983a3e..2af5c19d324f9 100644 --- a/pkg/expression/util.go +++ b/pkg/expression/util.go @@ -32,7 +32,6 @@ import ( "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/parser/opcode" "github.com/pingcap/tidb/pkg/parser/terror" - "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/types" driver "github.com/pingcap/tidb/pkg/types/parser_driver" "github.com/pingcap/tidb/pkg/util/chunk" @@ -1196,8 +1195,8 @@ func DatumToConstant(d types.Datum, tp byte, flag uint) *Constant { } // ParamMarkerExpression generate a getparam function expression. -func ParamMarkerExpression(ctx variable.SessionVarsProvider, v *driver.ParamMarkerExpr, needParam bool) (*Constant, error) { - useCache := ctx.GetSessionVars().StmtCtx.UseCache() +func ParamMarkerExpression(ctx BuildContext, v *driver.ParamMarkerExpr, needParam bool) (*Constant, error) { + useCache := ctx.IsUseCache() tp := types.NewFieldType(mysql.TypeUnspecified) types.InferParamTypeFromDatum(&v.Datum, tp) value := &Constant{Value: v.Datum, RetType: tp} @@ -1251,11 +1250,11 @@ func ConstructPositionExpr(p *driver.ParamMarkerExpr) *ast.PositionExpr { } // PosFromPositionExpr generates a position value from PositionExpr. -func PosFromPositionExpr(ctx BuildContext, vars variable.SessionVarsProvider, v *ast.PositionExpr) (int, bool, error) { +func PosFromPositionExpr(ctx BuildContext, v *ast.PositionExpr) (int, bool, error) { if v.P == nil { return v.N, false, nil } - value, err := ParamMarkerExpression(vars, v.P.(*driver.ParamMarkerExpr), false) + value, err := ParamMarkerExpression(ctx, v.P.(*driver.ParamMarkerExpr), false) if err != nil { return 0, true, err } diff --git a/pkg/expression/util_test.go b/pkg/expression/util_test.go index 485faf2cb3480..f236e943a9d0b 100644 --- a/pkg/expression/util_test.go +++ b/pkg/expression/util_test.go @@ -613,9 +613,18 @@ func (m *MockExpr) EvalVectorFloat32(ctx EvalContext, row chunk.Row) (val types. } return types.ZeroVectorFloat32, m.i == nil, m.err } +func (m *MockExpr) GetType(_ EvalContext) *types.FieldType { return m.t } + +func (m *MockExpr) Clone() Expression { + cloned := new(MockExpr) + cloned.i = m.i + cloned.err = m.err + if m.t != nil { + cloned.t = m.t.Clone() + } + return cloned +} -func (m *MockExpr) GetType(_ EvalContext) *types.FieldType { return m.t } -func (m *MockExpr) Clone() Expression { return nil } func (m *MockExpr) Equal(ctx EvalContext, e Expression) bool { return false } func (m *MockExpr) IsCorrelated() bool { return false } func (m *MockExpr) ConstLevel() ConstLevel { return ConstNone } diff --git a/pkg/infoschema/BUILD.bazel b/pkg/infoschema/BUILD.bazel index c391c28ee5f75..e27e0475dcfa4 100644 --- a/pkg/infoschema/BUILD.bazel +++ b/pkg/infoschema/BUILD.bazel @@ -91,7 +91,7 @@ go_test( ], embed = [":infoschema"], flaky = True, - shard_count = 21, + shard_count = 22, deps = [ "//pkg/ddl/placement", "//pkg/domain", diff --git a/pkg/infoschema/builder.go b/pkg/infoschema/builder.go index 4a23823581ba8..a29e40ac59935 100644 --- a/pkg/infoschema/builder.go +++ b/pkg/infoschema/builder.go @@ -546,9 +546,9 @@ func (b *Builder) applyDropSchema(diff *model.SchemaDiff) []int64 { b.infoSchema.delSchema(di) // Copy the sortedTables that contain the table we are going to drop. - tableIDs := make([]int64, 0, len(di.Tables)) - bucketIdxMap := make(map[int]struct{}, len(di.Tables)) - for _, tbl := range di.Tables { + tableIDs := make([]int64, 0, len(di.Deprecated.Tables)) + bucketIdxMap := make(map[int]struct{}, len(di.Deprecated.Tables)) + for _, tbl := range di.Deprecated.Tables { bucketIdxMap[tableBucketIdx(tbl.ID)] = struct{}{} // TODO: If the table ID doesn't exist. tableIDs = appendAffectedIDs(tableIDs, tbl) @@ -683,7 +683,7 @@ func applyCreateTable(b *Builder, m *meta.Meta, dbInfo *model.DBInfo, tableID in allocs = b.buildAllocsForCreateTable(tp, dbInfo, tblInfo, allocs) - tbl, err := b.tableFromMeta(allocs, tblInfo) + tbl, err := tableFromMeta(allocs, b.factory, tblInfo) if err != nil { return nil, errors.Trace(err) } @@ -705,9 +705,9 @@ func applyCreateTable(b *Builder, m *meta.Meta, dbInfo *model.DBInfo, tableID in b.addTemporaryTable(tableID) } - newTbl, ok := b.infoSchema.TableByID(tableID) + newTbl, ok := b.infoSchema.TableByID(context.Background(), tableID) if ok { - dbInfo.Tables = append(dbInfo.Tables, newTbl.Meta()) + dbInfo.Deprecated.Tables = append(dbInfo.Deprecated.Tables, newTbl.Meta()) } return affected, nil } @@ -768,17 +768,19 @@ func (b *Builder) applyDropTable(diff *model.SchemaDiff, dbInfo *model.DBInfo, t } func (b *Builder) deleteReferredForeignKeys(dbInfo *model.DBInfo, tableID int64) { - for i, tblInfo := range dbInfo.Tables { + tables := dbInfo.Deprecated.Tables + for i, tblInfo := range tables { if tblInfo.ID == tableID { - if i == len(dbInfo.Tables)-1 { - dbInfo.Tables = dbInfo.Tables[:i] + if i == len(tables)-1 { + tables = tables[:i] } else { - dbInfo.Tables = append(dbInfo.Tables[:i], dbInfo.Tables[i+1:]...) + tables = append(tables[:i], tables[i+1:]...) } b.infoSchema.deleteReferredForeignKeys(dbInfo.Name, tblInfo) break } } + dbInfo.Deprecated.Tables = tables } // Build builds and returns the built infoschema. @@ -793,12 +795,12 @@ func (b *Builder) Build(schemaTS uint64) InfoSchema { } // InitWithOldInfoSchema initializes an empty new InfoSchema by copies all the data from old InfoSchema. -func (b *Builder) InitWithOldInfoSchema(oldSchema InfoSchema) (*Builder, error) { +func (b *Builder) InitWithOldInfoSchema(oldSchema InfoSchema) error { // Do not mix infoschema v1 and infoschema v2 building, this can simplify the logic. // If we want to build infoschema v2, but the old infoschema is v1, just return error to trigger a full load. isV2, _ := IsV2(oldSchema) if b.enableV2 != isV2 { - return nil, errors.Errorf("builder's (v2=%v) infoschema mismatch, return error to trigger full reload", b.enableV2) + return errors.Errorf("builder's (v2=%v) infoschema mismatch, return error to trigger full reload", b.enableV2) } if schemaV2, ok := oldSchema.(*infoschemaV2); ok { @@ -816,7 +818,7 @@ func (b *Builder) InitWithOldInfoSchema(oldSchema InfoSchema) (*Builder, error) b.infoSchema.referredForeignKeyMap = maps.Clone(oldIS.referredForeignKeyMap) copy(b.infoSchema.sortedTablesBuckets, oldIS.sortedTablesBuckets) - return b, nil + return nil } // getSchemaAndCopyIfNecessary creates a new schemaTables instance when a table in the database has changed. @@ -858,14 +860,10 @@ func (b *Builder) sortAllTablesByID() { } // InitWithDBInfos initializes an empty new InfoSchema with a slice of DBInfo, all placement rules, and schema version. -func (b *Builder) InitWithDBInfos(dbInfos []*model.DBInfo, policies []*model.PolicyInfo, resourceGroups []*model.ResourceGroupInfo, schemaVersion int64) (*Builder, error) { +func (b *Builder) InitWithDBInfos(dbInfos []*model.DBInfo, policies []*model.PolicyInfo, resourceGroups []*model.ResourceGroupInfo, schemaVersion int64) error { info := b.infoSchema info.schemaMetaVersion = schemaVersion - b.initBundleInfoBuilder() - - b.initMisc(dbInfos, policies, resourceGroups) - if b.enableV2 { // We must not clear the historial versions like b.infoData = NewData(), because losing // the historial versions would cause applyDiff get db not exist error and fail, then @@ -885,31 +883,36 @@ func (b *Builder) InitWithDBInfos(dbInfos []*model.DBInfo, policies []*model.Pol b.infoData.resetBeforeFullLoad(schemaVersion) } + b.initBundleInfoBuilder() + for _, di := range dbInfos { - err := b.createSchemaTablesForDB(di, b.tableFromMeta, schemaVersion) + err := b.createSchemaTablesForDB(di, tableFromMeta, schemaVersion) if err != nil { - return nil, errors.Trace(err) + return errors.Trace(err) } } + // initMisc depends on the tables and schemas, so it should be called after createSchemaTablesForDB + b.initMisc(dbInfos, policies, resourceGroups) + err := b.initVirtualTables(schemaVersion) if err != nil { - return nil, err + return err } b.sortAllTablesByID() - return b, nil + return nil } -func (b *Builder) tableFromMeta(alloc autoid.Allocators, tblInfo *model.TableInfo) (table.Table, error) { +func tableFromMeta(alloc autoid.Allocators, factory func() (pools.Resource, error), tblInfo *model.TableInfo) (table.Table, error) { ret, err := tables.TableFromMeta(alloc, tblInfo) if err != nil { return nil, errors.Trace(err) } if t, ok := ret.(table.CachedTable); ok { var tmp pools.Resource - tmp, err = b.factory() + tmp, err = factory() if err != nil { return nil, errors.Trace(err) } @@ -922,17 +925,17 @@ func (b *Builder) tableFromMeta(alloc autoid.Allocators, tblInfo *model.TableInf return ret, nil } -type tableFromMetaFunc func(alloc autoid.Allocators, tblInfo *model.TableInfo) (table.Table, error) +type tableFromMetaFunc func(alloc autoid.Allocators, factory func() (pools.Resource, error), tblInfo *model.TableInfo) (table.Table, error) func (b *Builder) createSchemaTablesForDB(di *model.DBInfo, tableFromMeta tableFromMetaFunc, schemaVersion int64) error { schTbls := &schemaTables{ dbInfo: di, - tables: make(map[string]table.Table, len(di.Tables)), + tables: make(map[string]table.Table, len(di.Deprecated.Tables)), } - for _, t := range di.Tables { + for _, t := range di.Deprecated.Tables { allocs := autoid.NewAllocatorsFromTblInfo(b.Requirement, di.ID, t) var tbl table.Table - tbl, err := tableFromMeta(allocs, t) + tbl, err := tableFromMeta(allocs, b.factory, t) if err != nil { return errors.Wrap(err, fmt.Sprintf("Build table `%s`.`%s` schema failed", di.Name.O, t.Name.O)) } @@ -951,9 +954,9 @@ func (b *Builder) createSchemaTablesForDB(di *model.DBInfo, tableFromMeta tableF if b.enableV2 { for name, id := range di.TableName2ID { item := tableItem{ - dbName: di.Name.L, + dbName: di.Name, dbID: di.ID, - tableName: name, + tableName: model.NewCIStr(name), tableID: id, schemaVersion: schemaVersion, } @@ -981,9 +984,9 @@ func (b *Builder) addDB(schemaVersion int64, di *model.DBInfo, schTbls *schemaTa func (b *Builder) addTable(schemaVersion int64, di *model.DBInfo, tblInfo *model.TableInfo, tbl table.Table) { if b.enableV2 { b.infoData.add(tableItem{ - dbName: di.Name.L, + dbName: di.Name, dbID: di.ID, - tableName: tblInfo.Name.L, + tableName: tblInfo.Name, tableID: tblInfo.ID, schemaVersion: schemaVersion, }, tbl) @@ -1006,18 +1009,18 @@ func RegisterVirtualTable(dbInfo *model.DBInfo, tableFromMeta tableFromMetaFunc) } // NewBuilder creates a new Builder with a Handle. -func NewBuilder(r autoid.Requirement, factory func() (pools.Resource, error), infoData *Data) *Builder { +func NewBuilder(r autoid.Requirement, factory func() (pools.Resource, error), infoData *Data, useV2 bool) *Builder { builder := &Builder{ Requirement: r, - infoschemaV2: NewInfoSchemaV2(r, infoData), + infoschemaV2: NewInfoSchemaV2(r, factory, infoData), dirtyDB: make(map[string]bool), factory: factory, infoData: infoData, + enableV2: useV2, } schemaCacheSize := variable.SchemaCacheSize.Load() if schemaCacheSize > 0 { infoData.tableCache.SetCapacity(schemaCacheSize) - builder.enableV2 = true } return builder } diff --git a/pkg/infoschema/builder_misc.go b/pkg/infoschema/builder_misc.go index 2b33ff6a18d24..f3c10ffc57a3b 100644 --- a/pkg/infoschema/builder_misc.go +++ b/pkg/infoschema/builder_misc.go @@ -114,10 +114,18 @@ func (b *Builder) initMisc(dbInfos []*model.DBInfo, policies []*model.PolicyInfo } // Maintain foreign key reference information. - rs := info.ListTablesWithSpecialAttribute(ForeignKeysAttribute) - for _, db := range rs { - for _, tbl := range db.TableInfos { - info.addReferredForeignKeys(model.NewCIStr(db.DBName), tbl) + if b.enableV2 { + rs := b.ListTablesWithSpecialAttribute(ForeignKeysAttribute) + for _, db := range rs { + for _, tbl := range db.TableInfos { + info.addReferredForeignKeys(db.DBName, tbl) + } + } + return + } + for _, di := range dbInfos { + for _, t := range di.Deprecated.Tables { + b.infoSchema.addReferredForeignKeys(di.Name, t) } } } diff --git a/pkg/infoschema/bundle_builder.go b/pkg/infoschema/bundle_builder.go index 133357709f235..a54ffc119357d 100644 --- a/pkg/infoschema/bundle_builder.go +++ b/pkg/infoschema/bundle_builder.go @@ -15,6 +15,8 @@ package infoschema import ( + "context" + "github.com/pingcap/errors" "github.com/pingcap/tidb/pkg/ddl/placement" "github.com/pingcap/tidb/pkg/parser/model" @@ -114,7 +116,7 @@ func (b *bundleInfoBuilder) completeUpdateTables(is *infoSchema) { func (b *bundleInfoBuilder) updateTableBundles(infoSchemaInterface InfoSchema, tableID int64) { is := infoSchemaInterface.base() - tbl, ok := infoSchemaInterface.TableByID(tableID) + tbl, ok := infoSchemaInterface.TableByID(context.Background(), tableID) if !ok { b.deleteBundle(is, tableID) return diff --git a/pkg/infoschema/cache.go b/pkg/infoschema/cache.go index 7f8d000cc9d63..a58dca8c2e5fd 100644 --- a/pkg/infoschema/cache.go +++ b/pkg/infoschema/cache.go @@ -37,6 +37,10 @@ type InfoCache struct { r autoid.Requirement Data *Data + + // first known schema version records the first known schema version, all schemas between [firstKnownSchemaVersion, latest) + // are known as long as we keep the DDL history correctly. + firstKnownSchemaVersion int64 } type schemaAndTimestamp struct { @@ -97,6 +101,7 @@ func (h *InfoCache) Upsert(is InfoSchema, schemaTS uint64) func() { infoschema: is, timestamp: int64(schemaTS), }) + h.firstKnownSchemaVersion = is.SchemaMetaVersion() return func() { // TODO: It's a bit tricky here, somewhere is holding the reference of the old infoschema. @@ -223,8 +228,28 @@ func (h *InfoCache) getByVersionNoLock(version int64) InfoSchema { // return h.cache[i] // } // ``` + // upsert is a full reset of InfoCache, after upsert, the DDL history might lost and the assumption does not hold anymore. + // For example: + // Before + // infoschema 51 + // infoschema 52 + // infoschema 53 + // infoschema 54 + // infoschema 55 + // infoschema 56 + // After Upsert() + // infoschema 56 + // Then load historial snapshot version 51 + // infoschema 51 + // infoschema 56 + // Now, request for schema version 55, return infoschem 51 would be wrong! + // + if i == len(h.cache) { + return nil + } - if i < len(h.cache) && (i != 0 || h.cache[i].infoschema.SchemaMetaVersion() == version) { + if h.cache[i].infoschema.SchemaMetaVersion() == version || + (i != 0 && h.cache[i].infoschema.SchemaMetaVersion() >= h.firstKnownSchemaVersion) { infoschema_metrics.HitVersionCounter.Inc() return h.cache[i].infoschema } @@ -289,6 +314,9 @@ func (h *InfoCache) Insert(is InfoSchema, schemaTS uint64) bool { infoschema: is, timestamp: int64(schemaTS), } + if len(h.cache) == 1 { + h.firstKnownSchemaVersion = is.SchemaMetaVersion() + } } else if i < len(h.cache) { // drop older schema copy(h.cache[i+1:], h.cache[i:]) diff --git a/pkg/infoschema/cluster.go b/pkg/infoschema/cluster.go index f2897eef52550..6436a17b203eb 100644 --- a/pkg/infoschema/cluster.go +++ b/pkg/infoschema/cluster.go @@ -108,8 +108,9 @@ func init() { } } -// isClusterTableByName used to check whether the table is a cluster memory table. -func isClusterTableByName(dbName, tableName string) bool { +// IsClusterTableByName used to check whether the table is a cluster memory table. +// Export for PhysicalTableScan.ExplainID +func IsClusterTableByName(dbName, tableName string) bool { dbName = strings.ToUpper(dbName) switch dbName { case util.InformationSchemaName.O, util.PerformanceSchemaName.O: diff --git a/pkg/infoschema/context/infoschema.go b/pkg/infoschema/context/infoschema.go index 0da24b60175eb..e808da697c9de 100644 --- a/pkg/infoschema/context/infoschema.go +++ b/pkg/infoschema/context/infoschema.go @@ -33,13 +33,18 @@ type MetaOnlyInfoSchema interface { FindTableInfoByPartitionID(partitionID int64) (*model.TableInfo, *model.DBInfo, *model.PartitionDefinition) TableExists(schema, table model.CIStr) bool SchemaByID(id int64) (*model.DBInfo, bool) - AllSchemas() []*model.DBInfo + SchemaAndTable AllSchemaNames() []model.CIStr - SchemaTableInfos(ctx stdctx.Context, schema model.CIStr) ([]*model.TableInfo, error) SchemaSimpleTableInfos(ctx stdctx.Context, schema model.CIStr) ([]*model.TableNameInfo, error) Misc } +// SchemaAndTable is define for iterating all the schemas and tables in the infoschema. +type SchemaAndTable interface { + AllSchemas() []*model.DBInfo + SchemaTableInfos(ctx stdctx.Context, schema model.CIStr) ([]*model.TableInfo, error) +} + // Misc contains the methods that are not closely related to InfoSchema. type Misc interface { PolicyByName(name model.CIStr) (*model.PolicyInfo, bool) @@ -61,3 +66,21 @@ type Misc interface { // GetTableReferredForeignKeys gets the table's ReferredFKInfo by lowercase schema and table name. GetTableReferredForeignKeys(schema, table string) []*model.ReferredFKInfo } + +// DBInfoAsInfoSchema is used mainly in test. +type DBInfoAsInfoSchema []*model.DBInfo + +// AllSchemas implement infoschema.SchemaAndTable interface. +func (d DBInfoAsInfoSchema) AllSchemas() []*model.DBInfo { + return []*model.DBInfo(d) +} + +// SchemaTableInfos implement infoschema.SchemaAndTable interface. +func (d DBInfoAsInfoSchema) SchemaTableInfos(ctx stdctx.Context, schema model.CIStr) ([]*model.TableInfo, error) { + for _, db := range d { + if db.Name == schema { + return db.Deprecated.Tables, nil + } + } + return nil, nil +} diff --git a/pkg/infoschema/infoschema.go b/pkg/infoschema/infoschema.go index 76ea5ef4b8038..9051f0236608b 100644 --- a/pkg/infoschema/infoschema.go +++ b/pkg/infoschema/infoschema.go @@ -100,7 +100,8 @@ type SchemaAndTableName struct { // MockInfoSchema only serves for test. func MockInfoSchema(tbList []*model.TableInfo) InfoSchema { result := newInfoSchema() - dbInfo := &model.DBInfo{ID: 1, Name: model.NewCIStr("test"), Tables: tbList} + dbInfo := &model.DBInfo{ID: 1, Name: model.NewCIStr("test")} + dbInfo.Deprecated.Tables = tbList tableNames := &schemaTables{ dbInfo: dbInfo, tables: make(map[string]table.Table), @@ -140,7 +141,8 @@ func MockInfoSchema(tbList []*model.TableInfo) InfoSchema { State: model.StatePublic, }, } - mysqlDBInfo := &model.DBInfo{ID: 2, Name: model.NewCIStr("mysql"), Tables: tables} + mysqlDBInfo := &model.DBInfo{ID: 2, Name: model.NewCIStr("mysql")} + mysqlDBInfo.Deprecated.Tables = tables tableNames = &schemaTables{ dbInfo: mysqlDBInfo, tables: make(map[string]table.Table), @@ -164,7 +166,8 @@ func MockInfoSchema(tbList []*model.TableInfo) InfoSchema { // MockInfoSchemaWithSchemaVer only serves for test. func MockInfoSchemaWithSchemaVer(tbList []*model.TableInfo, schemaVer int64) InfoSchema { result := newInfoSchema() - dbInfo := &model.DBInfo{ID: 1, Name: model.NewCIStr("test"), Tables: tbList} + dbInfo := &model.DBInfo{ID: 1, Name: model.NewCIStr("test")} + dbInfo.Deprecated.Tables = tbList tableNames := &schemaTables{ dbInfo: dbInfo, tables: make(map[string]table.Table), @@ -291,7 +294,7 @@ func SchemaByTable(is InfoSchema, tableInfo *model.TableInfo) (val *model.DBInfo return is.SchemaByID(tableInfo.DBID) } -func (is *infoSchema) TableByID(id int64) (val table.Table, ok bool) { +func (is *infoSchema) TableByID(_ stdctx.Context, id int64) (val table.Table, ok bool) { if !tableIDIsValid(id) { return nil, false } @@ -306,7 +309,7 @@ func (is *infoSchema) TableByID(id int64) (val table.Table, ok bool) { // TableInfoByID implements InfoSchema.TableInfoByID func (is *infoSchema) TableInfoByID(id int64) (*model.TableInfo, bool) { - tbl, ok := is.TableByID(id) + tbl, ok := is.TableByID(stdctx.Background(), id) return getTableInfo(tbl), ok } @@ -348,14 +351,14 @@ func (is *infoSchema) SchemaSimpleTableInfos(ctx stdctx.Context, schema model.CI } type tableInfoResult struct { - DBName string + DBName model.CIStr TableInfos []*model.TableInfo } func (is *infoSchema) ListTablesWithSpecialAttribute(filter specialAttributeFilter) []tableInfoResult { ret := make([]tableInfoResult, 0, 10) for _, dbName := range is.AllSchemaNames() { - res := tableInfoResult{DBName: dbName.O} + res := tableInfoResult{DBName: dbName} tblInfos, err := is.SchemaTableInfos(stdctx.Background(), dbName) terror.Log(err) for _, tblInfo := range tblInfos { @@ -469,8 +472,8 @@ func init() { Name: util.InformationSchemaName, Charset: mysql.DefaultCharset, Collate: mysql.DefaultCollationName, - Tables: infoSchemaTables, } + infoSchemaDB.Deprecated.Tables = infoSchemaTables RegisterVirtualTable(infoSchemaDB, createInfoSchemaTable) util.GetSequenceByName = func(is context.MetaOnlyInfoSchema, schema, sequence model.CIStr) (util.SequenceTable, error) { return GetSequenceByName(is.(InfoSchema), schema, sequence) @@ -807,7 +810,7 @@ func (ts *SessionExtendedInfoSchema) TableInfoByName(schema, table model.CIStr) // TableInfoByID implements InfoSchema.TableInfoByID func (ts *SessionExtendedInfoSchema) TableInfoByID(id int64) (*model.TableInfo, bool) { - tbl, ok := ts.TableByID(id) + tbl, ok := ts.TableByID(stdctx.Background(), id) return getTableInfo(tbl), ok } @@ -820,7 +823,7 @@ func (ts *SessionExtendedInfoSchema) FindTableInfoByPartitionID( } // TableByID implements InfoSchema.TableByID -func (ts *SessionExtendedInfoSchema) TableByID(id int64) (table.Table, bool) { +func (ts *SessionExtendedInfoSchema) TableByID(ctx stdctx.Context, id int64) (table.Table, bool) { if !tableIDIsValid(id) { return nil, false } @@ -837,7 +840,7 @@ func (ts *SessionExtendedInfoSchema) TableByID(id int64) (table.Table, bool) { } } - return ts.InfoSchema.TableByID(id) + return ts.InfoSchema.TableByID(ctx, id) } // SchemaByID implements InfoSchema.SchemaByID, it returns a stale DBInfo even if it's dropped. @@ -889,7 +892,7 @@ func (ts *SessionExtendedInfoSchema) DetachTemporaryTableInfoSchema() *SessionEx // If the id is a partition id, the corresponding table.Table and PartitionDefinition will be returned. // If the id is not found in the InfoSchema, nil will be returned for both return values. func FindTableByTblOrPartID(is InfoSchema, id int64) (table.Table, *model.PartitionDefinition) { - tbl, ok := is.TableByID(id) + tbl, ok := is.TableByID(stdctx.Background(), id) if ok { return tbl, nil } diff --git a/pkg/infoschema/infoschema_nokit_test.go b/pkg/infoschema/infoschema_nokit_test.go index 4983e8b275489..add60b0eb6c3e 100644 --- a/pkg/infoschema/infoschema_nokit_test.go +++ b/pkg/infoschema/infoschema_nokit_test.go @@ -21,6 +21,13 @@ import ( "github.com/stretchr/testify/require" ) +// GetCache is exported for testing. +func (is *infoschemaV2) HasCache(tableID int64, schemaVersion int64) bool { + key := tableCacheKey{tableID, schemaVersion} + _, found := is.tableCache.Get(key) + return found +} + func TestInfoSchemaAddDel(t *testing.T) { is := newInfoSchema() is.addSchema(&schemaTables{ diff --git a/pkg/infoschema/infoschema_test.go b/pkg/infoschema/infoschema_test.go index d052312df8b94..226fd33949244 100644 --- a/pkg/infoschema/infoschema_test.go +++ b/pkg/infoschema/infoschema_test.go @@ -17,6 +17,7 @@ package infoschema_test import ( "context" "encoding/json" + "fmt" "math" "strings" "testing" @@ -91,18 +92,19 @@ func TestBasic(t *testing.T) { dbID, err := internal.GenGlobalID(re.Store()) require.NoError(t, err) dbInfo := &model.DBInfo{ - ID: dbID, - Name: dbName, - Tables: []*model.TableInfo{tblInfo}, - State: model.StatePublic, + ID: dbID, + Name: dbName, + State: model.StatePublic, } + dbInfo.Deprecated.Tables = []*model.TableInfo{tblInfo} tblInfo.DBID = dbInfo.ID dbInfos := []*model.DBInfo{dbInfo} internal.AddDB(t, re.Store(), dbInfo) internal.AddTable(t, re.Store(), dbInfo, tblInfo) - builder, err := infoschema.NewBuilder(re, nil, infoschema.NewData()).InitWithDBInfos(dbInfos, nil, nil, 1) + builder := infoschema.NewBuilder(re, nil, infoschema.NewData(), variable.SchemaCacheSize.Load() > 0) + err = builder.InitWithDBInfos(dbInfos, nil, nil, 1) require.NoError(t, err) txn, err := re.Store().Begin() @@ -156,7 +158,7 @@ func TestBasic(t *testing.T) { require.False(t, infoschema.TableIsView(is, dbName, tbName)) require.False(t, infoschema.TableIsSequence(is, dbName, tbName)) - tb, ok := is.TableByID(tbID) + tb, ok := is.TableByID(context.Background(), tbID) require.True(t, ok) require.NotNil(t, tb) @@ -164,7 +166,7 @@ func TestBasic(t *testing.T) { require.True(t, ok) require.Same(t, tb.Meta(), gotTblInfo) - tb, ok = is.TableByID(dbID) + tb, ok = is.TableByID(context.Background(), dbID) require.False(t, ok) require.Nil(t, tb) @@ -172,7 +174,7 @@ func TestBasic(t *testing.T) { require.False(t, ok) require.Nil(t, gotTblInfo) - tb, ok = is.TableByID(-12345) + tb, ok = is.TableByID(context.Background(), -12345) require.False(t, ok) require.Nil(t, tb) @@ -196,7 +198,7 @@ func TestBasic(t *testing.T) { require.Nil(t, gotTblInfo) // negative id should always be seen as not exists - tb, ok = is.TableByID(-1) + tb, ok = is.TableByID(context.Background(), -1) require.False(t, ok) require.Nil(t, tb) schema, ok = is.SchemaByID(-1) @@ -209,9 +211,9 @@ func TestBasic(t *testing.T) { tblInfos, err := is.SchemaTableInfos(context.Background(), dbName) require.NoError(t, err) require.Len(t, tblInfos, 1) - tbl, ok := is.TableByID(tblInfos[0].ID) + tbl, ok := is.TableByID(context.Background(), tblInfos[0].ID) require.True(t, ok) - require.Same(t, tbl.Meta(), tblInfos[0]) + require.Equal(t, tbl.Meta(), tblInfos[0]) // Equal but not Same tblInfos, err = is.SchemaTableInfos(context.Background(), noexist) require.NoError(t, err) @@ -225,14 +227,22 @@ func TestBasic(t *testing.T) { require.NoError(t, err) txn, err = re.Store().Begin() require.NoError(t, err) - _, err = builder.ApplyDiff(meta.NewMeta(txn), &model.SchemaDiff{Type: model.ActionRenameTable, SchemaID: dbID, TableID: tbID, OldSchemaID: dbID}) + _, err = builder.ApplyDiff(meta.NewMeta(txn), &model.SchemaDiff{ + Type: model.ActionRenameTable, + SchemaID: dbID, + TableID: tbID, + OldSchemaID: dbID, + Version: is.SchemaMetaVersion() + 1, + }) require.NoError(t, err) err = txn.Rollback() require.NoError(t, err) is = builder.Build(math.MaxUint64) schema, ok = is.SchemaByID(dbID) require.True(t, ok) - require.Equal(t, 1, len(schema.Tables)) + tbls, err := is.SchemaTableInfos(context.Background(), schema.Name) + require.NoError(t, err) + require.Equal(t, 1, len(tbls)) } func TestMockInfoSchema(t *testing.T) { @@ -252,7 +262,7 @@ func TestMockInfoSchema(t *testing.T) { } tableInfo.Columns = []*model.ColumnInfo{colInfo} is := infoschema.MockInfoSchema([]*model.TableInfo{tableInfo}) - tbl, ok := is.TableByID(tblID) + tbl, ok := is.TableByID(context.Background(), tblID) require.True(t, ok) require.Equal(t, tblName, tbl.Meta().Name) require.Equal(t, colInfo, tbl.Cols()[0].ColumnInfo) @@ -279,7 +289,8 @@ func TestInfoTables(t *testing.T) { require.NoError(t, err) }() - builder, err := infoschema.NewBuilder(re, nil, infoschema.NewData()).InitWithDBInfos(nil, nil, nil, 0) + builder := infoschema.NewBuilder(re, nil, infoschema.NewData(), variable.SchemaCacheSize.Load() > 0) + err := builder.InitWithDBInfos(nil, nil, nil, 0) require.NoError(t, err) is := builder.Build(math.MaxUint64) @@ -336,14 +347,15 @@ func TestBuildSchemaWithGlobalTemporaryTable(t *testing.T) { }() dbInfo := &model.DBInfo{ - ID: 1, - Name: model.NewCIStr("test"), - Tables: []*model.TableInfo{}, - State: model.StatePublic, + ID: 1, + Name: model.NewCIStr("test"), + State: model.StatePublic, } + dbInfo.Deprecated.Tables = []*model.TableInfo{} dbInfos := []*model.DBInfo{dbInfo} data := infoschema.NewData() - builder, err := infoschema.NewBuilder(re, nil, data).InitWithDBInfos(dbInfos, nil, nil, 1) + builder := infoschema.NewBuilder(re, nil, data, variable.SchemaCacheSize.Load() > 0) + err := builder.InitWithDBInfos(dbInfos, nil, nil, 1) require.NoError(t, err) is := builder.Build(math.MaxUint64) require.False(t, is.HasTemporaryTable()) @@ -363,7 +375,8 @@ func TestBuildSchemaWithGlobalTemporaryTable(t *testing.T) { err := kv.RunInNewTxn(ctx, re.Store(), true, func(ctx context.Context, txn kv.Transaction) error { m := meta.NewMeta(txn) for _, change := range changes { - builder, err := infoschema.NewBuilder(re, nil, data).InitWithOldInfoSchema(curIs) + builder = infoschema.NewBuilder(re, nil, data, variable.SchemaCacheSize.Load() > 0) + err := builder.InitWithOldInfoSchema(curIs) require.NoError(t, err) change(m, builder) curIs = builder.Build(math.MaxUint64) @@ -376,7 +389,7 @@ func TestBuildSchemaWithGlobalTemporaryTable(t *testing.T) { createGlobalTemporaryTableChange := func(tblID int64) func(m *meta.Meta, builder *infoschema.Builder) { return func(m *meta.Meta, builder *infoschema.Builder) { - err := m.CreateTableOrView(db.ID, db.Name.L, &model.TableInfo{ + err := m.CreateTableOrView(db.ID, &model.TableInfo{ ID: tblID, TempTableType: model.TempTableGlobal, State: model.StatePublic, @@ -389,7 +402,7 @@ func TestBuildSchemaWithGlobalTemporaryTable(t *testing.T) { createNormalTableChange := func(tblID int64) func(m *meta.Meta, builder *infoschema.Builder) { return func(m *meta.Meta, builder *infoschema.Builder) { - err := m.CreateTableOrView(db.ID, db.Name.L, &model.TableInfo{ + err := m.CreateTableOrView(db.ID, &model.TableInfo{ ID: tblID, State: model.StatePublic, }) @@ -401,7 +414,7 @@ func TestBuildSchemaWithGlobalTemporaryTable(t *testing.T) { dropTableChange := func(tblID int64) func(m *meta.Meta, builder *infoschema.Builder) { return func(m *meta.Meta, builder *infoschema.Builder) { - err := m.DropTableOrView(db.ID, db.Name.L, tblID, "") + err := m.DropTableOrView(db.ID, tblID) require.NoError(t, err) _, err = builder.ApplyDiff(m, &model.SchemaDiff{Type: model.ActionDropTable, SchemaID: db.ID, TableID: tblID, Version: 1}) require.NoError(t, err) @@ -410,10 +423,10 @@ func TestBuildSchemaWithGlobalTemporaryTable(t *testing.T) { truncateGlobalTemporaryTableChange := func(tblID, newTblID int64) func(m *meta.Meta, builder *infoschema.Builder) { return func(m *meta.Meta, builder *infoschema.Builder) { - err := m.DropTableOrView(db.ID, db.Name.L, tblID, "") + err := m.DropTableOrView(db.ID, tblID) require.NoError(t, err) - err = m.CreateTableOrView(db.ID, db.Name.L, &model.TableInfo{ + err = m.CreateTableOrView(db.ID, &model.TableInfo{ ID: newTblID, TempTableType: model.TempTableGlobal, State: model.StatePublic, @@ -444,9 +457,10 @@ func TestBuildSchemaWithGlobalTemporaryTable(t *testing.T) { newDB, ok := newIS.SchemaByName(model.NewCIStr("test")) tblInfos, err := newIS.SchemaTableInfos(context.Background(), newDB.Name) require.NoError(t, err) - newDB.Tables = tblInfos + newDB.Deprecated.Tables = tblInfos require.True(t, ok) - builder, err = infoschema.NewBuilder(re, nil, data).InitWithDBInfos([]*model.DBInfo{newDB}, newIS.AllPlacementPolicies(), newIS.AllResourceGroups(), newIS.SchemaMetaVersion()) + builder = infoschema.NewBuilder(re, nil, data, variable.SchemaCacheSize.Load() > 0) + err = builder.InitWithDBInfos([]*model.DBInfo{newDB}, newIS.AllPlacementPolicies(), newIS.AllResourceGroups(), newIS.SchemaMetaVersion()) require.NoError(t, err) require.True(t, builder.Build(math.MaxUint64).HasTemporaryTable()) @@ -571,12 +585,13 @@ func TestBuildBundle(t *testing.T) { assertBundle(is, tbl2.Meta().ID, nil) assertBundle(is, p1.ID, p1Bundle) - if len(db.Tables) == 0 { + if len(db.Deprecated.Tables) == 0 { var err error - db.Tables, err = is.SchemaTableInfos(context.Background(), db.Name) + db.Deprecated.Tables, err = is.SchemaTableInfos(context.Background(), db.Name) require.NoError(t, err) } - builder, err := infoschema.NewBuilder(dom, nil, infoschema.NewData()).InitWithDBInfos([]*model.DBInfo{db}, is.AllPlacementPolicies(), is.AllResourceGroups(), is.SchemaMetaVersion()) + builder := infoschema.NewBuilder(dom, nil, infoschema.NewData(), variable.SchemaCacheSize.Load() > 0) + err = builder.InitWithDBInfos([]*model.DBInfo{db}, is.AllPlacementPolicies(), is.AllResourceGroups(), is.SchemaMetaVersion()) require.NoError(t, err) is2 := builder.Build(math.MaxUint64) assertBundle(is2, tbl1.Meta().ID, tb1Bundle) @@ -584,6 +599,55 @@ func TestBuildBundle(t *testing.T) { assertBundle(is2, p1.ID, p1Bundle) } +func TestWithRefillOption(t *testing.T) { + store, dom := testkit.CreateMockStoreAndDomain(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("set @@global.tidb_schema_cache_size = 512 * 1024 * 1024") + + tk.MustExec("create table t1 (id int)") + tk.MustQuery("select * from t1").Check(testkit.Rows()) + is := dom.InfoSchema() + tbl, err := is.TableByName(context.Background(), model.NewCIStr("test"), model.NewCIStr("t1")) + require.NoError(t, err) + tblInfo := tbl.Meta() + ok, v2 := infoschema.IsV2(is) + require.True(t, ok) + + hit := true + miss := false + testCases := []struct { + OP string + ctx context.Context + expect bool + }{ + {"TableByName", context.Background(), hit}, + {"TableByName", infoschema.WithRefillOption(context.Background(), true), hit}, + {"TableByName", infoschema.WithRefillOption(context.Background(), false), miss}, + {"TableByID", context.Background(), miss}, + {"TableByID", infoschema.WithRefillOption(context.Background(), true), hit}, + {"TableByID", infoschema.WithRefillOption(context.Background(), false), miss}, + } + + for i, testCase := range testCases { + // Mock t1 schema cache been evicted. + v2.EvictTable(model.NewCIStr("test"), model.NewCIStr("t1")) + + // Test the API + switch testCase.OP { + case "TableByID": + _, found := is.TableByID(testCase.ctx, tblInfo.ID) + require.True(t, found) + case "TableByName": + _, err := is.TableByName(testCase.ctx, model.NewCIStr("test"), model.NewCIStr("t1")) + require.NoError(t, err) + } + + got := v2.HasCache(tblInfo.ID, is.SchemaMetaVersion()) + require.Equal(t, testCase.expect, got, fmt.Sprintf("case %d failed", i)) + } +} + func TestLocalTemporaryTables(t *testing.T) { re := internal.CreateAutoIDRequirement(t) var err error @@ -825,35 +889,35 @@ func TestLocalTemporaryTables(t *testing.T) { require.Same(t, tbl.Meta(), gotTblInfo) // test TableByID - tbl, ok := is.TableByID(normalTbTestA.Meta().ID) + tbl, ok := is.TableByID(context.Background(), normalTbTestA.Meta().ID) require.True(t, ok) require.Equal(t, normalTbTestA.Meta(), tbl.Meta()) gotTblInfo, ok = is.TableInfoByID(normalTbTestA.Meta().ID) require.True(t, ok) require.Same(t, tbl.Meta(), gotTblInfo) - tbl, ok = is.TableByID(normalTbTestB.Meta().ID) + tbl, ok = is.TableByID(context.Background(), normalTbTestB.Meta().ID) require.True(t, ok) require.Equal(t, normalTbTestB.Meta(), tbl.Meta()) gotTblInfo, ok = is.TableInfoByID(normalTbTestB.Meta().ID) require.True(t, ok) require.Same(t, tbl.Meta(), gotTblInfo) - tbl, ok = is.TableByID(tmpTbTestA.Meta().ID) + tbl, ok = is.TableByID(context.Background(), tmpTbTestA.Meta().ID) require.True(t, ok) require.Equal(t, tmpTbTestA, tbl) gotTblInfo, ok = is.TableInfoByID(tmpTbTestA.Meta().ID) require.True(t, ok) require.Same(t, tbl.Meta(), gotTblInfo) - tbl, ok = is.TableByID(tb12.Meta().ID) + tbl, ok = is.TableByID(context.Background(), tb12.Meta().ID) require.True(t, ok) require.Equal(t, tb12, tbl) gotTblInfo, ok = is.TableInfoByID(tb12.Meta().ID) require.True(t, ok) require.Same(t, tbl.Meta(), gotTblInfo) - tbl, ok = is.TableByID(1234567) + tbl, ok = is.TableByID(context.Background(), 1234567) require.False(t, ok) require.Nil(t, tbl) gotTblInfo, ok = is.TableInfoByID(1234567) @@ -885,7 +949,7 @@ func TestLocalTemporaryTables(t *testing.T) { require.Nil(t, info) // negative id should always be seen as not exists - tbl, ok = is.TableByID(-1) + tbl, ok = is.TableByID(context.Background(), -1) require.False(t, ok) require.Nil(t, tbl) info, ok = is.SchemaByID(-1) @@ -999,7 +1063,8 @@ func (tc *infoschemaTestContext) createSchema() { internal.AddDB(tc.t, tc.re.Store(), dbInfo) tc.dbInfo = dbInfo // init infoschema - builder, err := infoschema.NewBuilder(tc.re, nil, tc.data).InitWithDBInfos([]*model.DBInfo{}, nil, nil, 1) + builder := infoschema.NewBuilder(tc.re, nil, tc.data, variable.SchemaCacheSize.Load() > 0) + err := builder.InitWithDBInfos([]*model.DBInfo{}, nil, nil, 1) require.NoError(tc.t, err) tc.is = builder.Build(math.MaxUint64) } @@ -1045,7 +1110,7 @@ func (tc *infoschemaTestContext) runCreateTable(tblName string) int64 { internal.AddTable(tc.t, tc.re.Store(), tc.dbInfo, tblInfo) tc.applyDiffAndCheck(&model.SchemaDiff{Type: model.ActionCreateTable, SchemaID: tc.dbInfo.ID, TableID: tblInfo.ID}, func(tc *infoschemaTestContext) { - tbl, ok := tc.is.TableByID(tblInfo.ID) + tbl, ok := tc.is.TableByID(context.Background(), tblInfo.ID) require.True(tc.t, ok) require.Equal(tc.t, tbl.Meta().Name.O, tblName) }) @@ -1069,7 +1134,7 @@ func (tc *infoschemaTestContext) runCreateTables(tblNames []string) { tc.applyDiffAndCheck(&diff, func(tc *infoschemaTestContext) { for i, opt := range diff.AffectedOpts { - tbl, ok := tc.is.TableByID(opt.TableID) + tbl, ok := tc.is.TableByID(context.Background(), opt.TableID) require.True(tc.t, ok) require.Equal(tc.t, tbl.Meta().Name.O, tblNames[i]) } @@ -1083,7 +1148,7 @@ func (tc *infoschemaTestContext) runDropTable(tblName string) { // dropTable internal.DropTable(tc.t, tc.re.Store(), tc.dbInfo, tblID, tblName) tc.applyDiffAndCheck(&model.SchemaDiff{Type: model.ActionDropTable, SchemaID: tc.dbInfo.ID, TableID: tblID}, func(tc *infoschemaTestContext) { - tbl, ok := tc.is.TableByID(tblID) + tbl, ok := tc.is.TableByID(context.Background(), tblID) require.False(tc.t, ok) require.Nil(tc.t, tbl) }) @@ -1106,7 +1171,7 @@ func (tc *infoschemaTestContext) runAddColumn(tblName string) { tc.addColumn(tbl.Meta()) tc.applyDiffAndCheck(&model.SchemaDiff{Type: model.ActionAddColumn, SchemaID: tc.dbInfo.ID, TableID: tbl.Meta().ID}, func(tc *infoschemaTestContext) { - tbl, ok := tc.is.TableByID(tbl.Meta().ID) + tbl, ok := tc.is.TableByID(context.Background(), tbl.Meta().ID) require.True(tc.t, ok) require.Equal(tc.t, 2, len(tbl.Cols())) }) @@ -1139,7 +1204,7 @@ func (tc *infoschemaTestContext) runModifyColumn(tblName string) { tc.modifyColumn(tbl.Meta()) tc.applyDiffAndCheck(&model.SchemaDiff{Type: model.ActionModifyColumn, SchemaID: tc.dbInfo.ID, TableID: tbl.Meta().ID}, func(tc *infoschemaTestContext) { - tbl, ok := tc.is.TableByID(tbl.Meta().ID) + tbl, ok := tc.is.TableByID(context.Background(), tbl.Meta().ID) require.True(tc.t, ok) require.Equal(tc.t, "test", tbl.Cols()[0].Comment) }) @@ -1183,7 +1248,8 @@ func (tc *infoschemaTestContext) applyDiffAndCheck(diff *model.SchemaDiff, check txn, err := tc.re.Store().Begin() require.NoError(tc.t, err) - builder, err := infoschema.NewBuilder(tc.re, nil, tc.data).InitWithOldInfoSchema(tc.is) + builder := infoschema.NewBuilder(tc.re, nil, tc.data, variable.SchemaCacheSize.Load() > 0) + err = builder.InitWithOldInfoSchema(tc.is) require.NoError(tc.t, err) // applyDiff _, err = builder.ApplyDiff(meta.NewMeta(txn), diff) diff --git a/pkg/infoschema/infoschema_v2.go b/pkg/infoschema/infoschema_v2.go index eb4c72ec9b411..3cdbe4235a464 100644 --- a/pkg/infoschema/infoschema_v2.go +++ b/pkg/infoschema/infoschema_v2.go @@ -22,6 +22,7 @@ import ( "sync" "time" + "github.com/ngaut/pools" "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/ddl/placement" @@ -32,7 +33,6 @@ import ( "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/terror" "github.com/pingcap/tidb/pkg/table" - "github.com/pingcap/tidb/pkg/table/tables" "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/size" "github.com/pingcap/tidb/pkg/util/tracing" @@ -42,9 +42,9 @@ import ( // tableItem is the btree item sorted by name or by id. type tableItem struct { - dbName string + dbName model.CIStr dbID int64 - tableName string + tableName model.CIStr tableID int64 schemaVersion int64 tomb bool @@ -59,7 +59,7 @@ type schemaItem struct { type schemaIDName struct { schemaVersion int64 id int64 - name string + name model.CIStr tomb bool } @@ -123,7 +123,7 @@ type Data struct { } type tableInfoItem struct { - dbName string + dbName model.CIStr tableID int64 schemaVersion int64 tableInfo *model.TableInfo @@ -227,8 +227,8 @@ func (isd *Data) addSpecialDB(di *model.DBInfo, tables *schemaTables) { } func (isd *Data) addDB(schemaVersion int64, dbInfo *model.DBInfo) { - dbInfo.Tables = nil - isd.schemaID2Name.Set(schemaIDName{schemaVersion: schemaVersion, id: dbInfo.ID, name: dbInfo.Name.O}) + dbInfo.Deprecated.Tables = nil + isd.schemaID2Name.Set(schemaIDName{schemaVersion: schemaVersion, id: dbInfo.ID, name: dbInfo.Name}) isd.schemaMap.Set(schemaItem{schemaVersion: schemaVersion, dbInfo: dbInfo}) } @@ -248,7 +248,7 @@ func (isd *Data) remove(item tableItem) { func (isd *Data) deleteDB(dbInfo *model.DBInfo, schemaVersion int64) { item := schemaItem{schemaVersion: schemaVersion, dbInfo: dbInfo, tomb: true} isd.schemaMap.Set(item) - isd.schemaID2Name.Set(schemaIDName{schemaVersion: schemaVersion, id: dbInfo.ID, name: dbInfo.Name.O, tomb: true}) + isd.schemaID2Name.Set(schemaIDName{schemaVersion: schemaVersion, id: dbInfo.ID, name: dbInfo.Name, tomb: true}) } // resetBeforeFullLoad is called before a full recreate operation within builder.InitWithDBInfos(). @@ -463,17 +463,17 @@ func compareByID(a, b tableItem) bool { } func compareByName(a, b tableItem) bool { - if a.dbName < b.dbName { + if a.dbName.L < b.dbName.L { return true } - if a.dbName > b.dbName { + if a.dbName.L > b.dbName.L { return false } - if a.tableName < b.tableName { + if a.tableName.L < b.tableName.L { return true } - if a.tableName > b.tableName { + if a.tableName.L > b.tableName.L { return false } @@ -481,10 +481,10 @@ func compareByName(a, b tableItem) bool { } func compareTableInfoItem(a, b tableInfoItem) bool { - if a.dbName < b.dbName { + if a.dbName.L < b.dbName.L { return true } - if a.dbName > b.dbName { + if a.dbName.L > b.dbName.L { return false } @@ -532,16 +532,18 @@ var _ InfoSchema = &infoschemaV2{} type infoschemaV2 struct { *infoSchema // in fact, we only need the infoSchemaMisc inside it, but the builder rely on it. r autoid.Requirement + factory func() (pools.Resource, error) ts uint64 *Data } // NewInfoSchemaV2 create infoschemaV2. -func NewInfoSchemaV2(r autoid.Requirement, infoData *Data) infoschemaV2 { +func NewInfoSchemaV2(r autoid.Requirement, factory func() (pools.Resource, error), infoData *Data) infoschemaV2 { return infoschemaV2{ infoSchema: newInfoSchema(), Data: infoData, r: r, + factory: factory, } } @@ -586,11 +588,10 @@ func (is *infoschemaV2) CloneAndUpdateTS(startTS uint64) *infoschemaV2 { return &tmp } -func (is *infoschemaV2) TableByID(id int64) (val table.Table, ok bool) { - return is.tableByID(id, false) -} - -func (is *infoschemaV2) tableByID(id int64, noRefill bool) (val table.Table, ok bool) { +// TableByID implements the InfoSchema interface. +// As opposed to TableByName, TableByID will not refill cache when schema cache miss, +// unless the caller changes the behavior by passing a context use WithRefillOption. +func (is *infoschemaV2) TableByID(ctx context.Context, id int64) (val table.Table, ok bool) { if !tableIDIsValid(id) { return } @@ -609,30 +610,36 @@ func (is *infoschemaV2) tableByID(id int64, noRefill bool) (val table.Table, ok } if isTableVirtual(id) { - if raw, exist := is.Data.specials.Load(itm.dbName); exist { + if raw, exist := is.Data.specials.Load(itm.dbName.L); exist { schTbls := raw.(*schemaTables) - val, ok = schTbls.tables[itm.tableName] + val, ok = schTbls.tables[itm.tableName.L] return } return nil, false } + + refill := false + if opt := ctx.Value(refillOptionKey); opt != nil { + refill = opt.(bool) + } + // get cache with old key oldKey := tableCacheKey{itm.tableID, itm.schemaVersion} tbl, found = is.tableCache.Get(oldKey) if found && tbl != nil { - if !noRefill { + if refill { is.tableCache.Set(key, tbl) } return tbl, true } // Maybe the table is evicted? need to reload. - ret, err := loadTableInfo(context.Background(), is.r, is.Data, id, itm.dbID, is.ts, is.infoSchema.schemaMetaVersion) + ret, err := is.loadTableInfo(ctx, id, itm.dbID, is.ts, is.infoSchema.schemaMetaVersion) if err != nil || ret == nil { return nil, false } - if !noRefill { + if refill { is.tableCache.Set(oldKey, ret) } return ret, true @@ -646,7 +653,7 @@ func IsSpecialDB(dbName string) bool { } // EvictTable is exported for testing only. -func (is *infoschemaV2) EvictTable(schema, tbl string) { +func (is *infoschemaV2) EvictTable(schema, tbl model.CIStr) { eq := func(a, b *tableItem) bool { return a.dbName == b.dbName && a.tableName == b.tableName } itm, ok := search(is.byName, is.infoSchema.schemaMetaVersion, tableItem{dbName: schema, tableName: tbl, schemaVersion: math.MaxInt64}, eq) if !ok { @@ -664,7 +671,7 @@ type tableByNameHelper struct { } func (h *tableByNameHelper) onItem(item tableItem) bool { - if item.dbName != h.end.dbName || item.tableName != h.end.tableName { + if item.dbName.L != h.end.dbName.L || item.tableName.L != h.end.tableName.L { h.found = false return false } @@ -678,6 +685,8 @@ func (h *tableByNameHelper) onItem(item tableItem) bool { return true } +// TableByName implements the InfoSchema interface. +// When schema cache miss, it will fetch the TableInfo from TikV and refill cache. func (is *infoschemaV2) TableByName(ctx context.Context, schema, tbl model.CIStr) (t table.Table, err error) { if IsSpecialDB(schema.L) { if raw, ok := is.specials.Load(schema.L); ok { @@ -692,7 +701,7 @@ func (is *infoschemaV2) TableByName(ctx context.Context, schema, tbl model.CIStr start := time.Now() var h tableByNameHelper - h.end = tableItem{dbName: schema.L, tableName: tbl.L, schemaVersion: math.MaxInt64} + h.end = tableItem{dbName: schema, tableName: tbl, schemaVersion: math.MaxInt64} h.schemaVersion = is.infoSchema.schemaMetaVersion is.byName.Descend(h.end, h.onItem) @@ -710,11 +719,19 @@ func (is *infoschemaV2) TableByName(ctx context.Context, schema, tbl model.CIStr } // Maybe the table is evicted? need to reload. - ret, err := loadTableInfo(ctx, is.r, is.Data, itm.tableID, itm.dbID, is.ts, is.infoSchema.schemaMetaVersion) + ret, err := is.loadTableInfo(ctx, itm.tableID, itm.dbID, is.ts, is.infoSchema.schemaMetaVersion) if err != nil { return nil, errors.Trace(err) } - is.tableCache.Set(oldKey, ret) + + refill := true + if opt := ctx.Value(refillOptionKey); opt != nil { + refill = opt.(bool) + } + if refill { + is.tableCache.Set(oldKey, ret) + } + metrics.TableByNameMissDuration.Observe(float64(time.Since(start))) return ret, nil } @@ -727,7 +744,7 @@ func (is *infoschemaV2) TableInfoByName(schema, table model.CIStr) (*model.Table // TableInfoByID implements InfoSchema.TableInfoByID func (is *infoschemaV2) TableInfoByID(id int64) (*model.TableInfo, bool) { - tbl, ok := is.TableByID(id) + tbl, ok := is.TableByID(context.Background(), id) return getTableInfo(tbl), ok } @@ -795,33 +812,34 @@ func (is *infoschemaV2) SchemaSimpleTableInfos(ctx context.Context, schema model return nil, nil // something wrong? } -retry: - dbInfo, ok := is.SchemaByName(schema) - if !ok { + // Ascend is much more difficult than Descend. + // So the data is taken out first and then dedup in Descend order. + var tableItems []tableItem + is.byName.Ascend(tableItem{dbName: schema}, func(item tableItem) bool { + if item.dbName.L != schema.L { + return false + } + if is.infoSchema.schemaMetaVersion >= item.schemaVersion { + tableItems = append(tableItems, item) + } + return true + }) + if len(tableItems) == 0 { return nil, nil } - snapshot := is.r.Store().GetSnapshot(kv.NewVersion(is.ts)) - // Using the KV timeout read feature to address the issue of potential DDL lease expiration when - // the meta region leader is slow. - snapshot.SetOption(kv.TiKVClientReadTimeout, uint64(3000)) // 3000ms. - m := meta.NewSnapshotMeta(snapshot) - tblInfos, err := m.ListSimpleTables(dbInfo.ID) - if err != nil { - if meta.ErrDBNotExists.Equal(err) { - return nil, nil - } - // Flashback statement could cause such kind of error. - // In theory that error should be handled in the lower layer, like client-go. - // But it's not done, so we retry here. - if strings.Contains(err.Error(), "in flashback progress") { - select { - case <-time.After(200 * time.Millisecond): - case <-ctx.Done(): - return nil, ctx.Err() + tblInfos := make([]*model.TableNameInfo, 0, len(tableItems)) + var curr *tableItem + for i := len(tableItems) - 1; i >= 0; i-- { + item := &tableItems[i] + if curr == nil || curr.tableName != tableItems[i].tableName { + curr = item + if !item.tomb { + tblInfos = append(tblInfos, &model.TableNameInfo{ + ID: item.tableID, + Name: item.tableName, + }) } - goto retry } - return nil, errors.Trace(err) } return tblInfos, nil } @@ -935,7 +953,7 @@ func (is *infoschemaV2) FindTableByPartitionID(partitionID int64) (table.Table, return nil, nil, nil } - tbl, ok := is.TableByID(pi.tableID) + tbl, ok := is.TableByID(context.Background(), pi.tableID) if !ok { // something wrong? return nil, nil, nil @@ -983,7 +1001,7 @@ func (is *infoschemaV2) SchemaByID(id int64) (*model.DBInfo, bool) { return st.dbInfo, true } var ok bool - var name string + var name model.CIStr is.Data.schemaID2Name.Descend(schemaIDName{ id: id, schemaVersion: math.MaxInt64, @@ -1004,10 +1022,10 @@ func (is *infoschemaV2) SchemaByID(id int64) (*model.DBInfo, bool) { if !ok { return nil, false } - return is.SchemaByName(model.NewCIStr(name)) + return is.SchemaByName(name) } -func loadTableInfo(ctx context.Context, r autoid.Requirement, infoData *Data, tblID, dbID int64, ts uint64, schemaVersion int64) (table.Table, error) { +func (is *infoschemaV2) loadTableInfo(ctx context.Context, tblID, dbID int64, ts uint64, schemaVersion int64) (table.Table, error) { defer tracing.StartRegion(ctx, "infoschema.loadTableInfo").End() failpoint.Inject("mockLoadTableInfoError", func(_ failpoint.Value) { failpoint.Return(nil, errors.New("mockLoadTableInfoError")) @@ -1015,7 +1033,7 @@ func loadTableInfo(ctx context.Context, r autoid.Requirement, infoData *Data, tb // Try to avoid repeated concurrency loading. res, err, _ := loadTableSF.Do(fmt.Sprintf("%d-%d-%d", dbID, tblID, schemaVersion), func() (any, error) { retry: - snapshot := r.Store().GetSnapshot(kv.NewVersion(ts)) + snapshot := is.r.Store().GetSnapshot(kv.NewVersion(ts)) // Using the KV timeout read feature to address the issue of potential DDL lease expiration when // the meta region leader is slow. snapshot.SetOption(kv.TiKVClientReadTimeout, uint64(3000)) // 3000ms. @@ -1031,8 +1049,7 @@ func loadTableInfo(ctx context.Context, r autoid.Requirement, infoData *Data, tb goto retry } - // TODO load table panic!!! - panic(err) + return nil, errors.Trace(err) } // table removed. @@ -1045,9 +1062,8 @@ func loadTableInfo(ctx context.Context, r autoid.Requirement, infoData *Data, tb ConvertCharsetCollateToLowerCaseIfNeed(tblInfo) ConvertOldVersionUTF8ToUTF8MB4IfNeed(tblInfo) - allocs := autoid.NewAllocatorsFromTblInfo(r, dbID, tblInfo) - // TODO: handle cached table!!! - ret, err := tables.TableFromMeta(allocs, tblInfo) + allocs := autoid.NewAllocatorsFromTblInfo(is.r, dbID, tblInfo) + ret, err := tableFromMeta(allocs, is.factory, tblInfo) if err != nil { return nil, errors.Trace(err) } @@ -1192,7 +1208,7 @@ func allocByID(b *Builder, id int64) (autoid.Allocators, bool) { } else { is = b.infoSchema } - tbl, ok := is.TableByID(id) + tbl, ok := is.TableByID(context.Background(), id) if !ok { return autoid.Allocators{}, false } @@ -1233,7 +1249,7 @@ func (b *Builder) applyDropSchemaV2(diff *model.SchemaDiff) []int64 { return nil } - tableIDs := make([]int64, 0, len(di.Tables)) + tableIDs := make([]int64, 0, len(di.Deprecated.Tables)) tables, err := b.infoschemaV2.SchemaTableInfos(context.Background(), di.Name) terror.Log(err) for _, tbl := range tables { @@ -1254,13 +1270,14 @@ func (b *Builder) applyDropTableV2(diff *model.SchemaDiff, dbInfo *model.DBInfo, delete(b.infoSchemaMisc.temporaryTableIDs, tableID) } - table, ok := b.infoschemaV2.TableByID(tableID) + table, ok := b.infoschemaV2.TableByID(context.Background(), tableID) if !ok { return nil } + tblInfo := table.Meta() // The old DBInfo still holds a reference to old table info, we need to remove it. - b.infoSchema.deleteReferredForeignKeys(dbInfo.Name, table.Meta()) + b.infoSchema.deleteReferredForeignKeys(dbInfo.Name, tblInfo) if pi := table.Meta().GetPartitionInfo(); pi != nil { for _, def := range pi.Definitions { @@ -1269,12 +1286,13 @@ func (b *Builder) applyDropTableV2(diff *model.SchemaDiff, dbInfo *model.DBInfo, } b.infoData.remove(tableItem{ - dbName: dbInfo.Name.L, + dbName: dbInfo.Name, dbID: dbInfo.ID, - tableName: table.Meta().Name.L, - tableID: table.Meta().ID, + tableName: tblInfo.Name, + tableID: tblInfo.ID, schemaVersion: diff.Version, }) + affected = appendAffectedIDs(affected, tblInfo) return affected } @@ -1435,10 +1453,10 @@ func (is *infoschemaV2) ListTablesWithSpecialAttribute(filter specialAttributeFi } if currDB == "" { - currDB = item.dbName + currDB = item.dbName.L res = tableInfoResult{DBName: item.dbName} res.TableInfos = append(res.TableInfos, item.tableInfo) - } else if currDB == item.dbName { + } else if currDB == item.dbName.L { res.TableInfos = append(res.TableInfos, item.tableInfo) } else { ret = append(ret, res) @@ -1452,3 +1470,14 @@ func (is *infoschemaV2) ListTablesWithSpecialAttribute(filter specialAttributeFi } return ret } + +type refillOption struct{} + +var refillOptionKey refillOption + +// WithRefillOption controls the infoschema v2 cache refill operation. +// By default, TableByID does not refill schema cache, and TableByName does. +// The behavior can be changed by providing the context.Context. +func WithRefillOption(ctx context.Context, refill bool) context.Context { + return context.WithValue(ctx, refillOptionKey, refill) +} diff --git a/pkg/infoschema/infoschema_v2_test.go b/pkg/infoschema/infoschema_v2_test.go index 23f4948495195..3af31750b58f3 100644 --- a/pkg/infoschema/infoschema_v2_test.go +++ b/pkg/infoschema/infoschema_v2_test.go @@ -23,6 +23,7 @@ import ( "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/meta" "github.com/pingcap/tidb/pkg/parser/model" + "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/stretchr/testify/require" ) @@ -31,7 +32,7 @@ func TestV2Basic(t *testing.T) { defer func() { r.Store().Close() }() - is := NewInfoSchemaV2(r, NewData()) + is := NewInfoSchemaV2(r, nil, NewData()) schemaName := model.NewCIStr("testDB") tableName := model.NewCIStr("test") @@ -41,7 +42,7 @@ func TestV2Basic(t *testing.T) { internal.AddDB(t, r.Store(), dbInfo) tblInfo := internal.MockTableInfo(t, r.Store(), tableName.O) tblInfo.DBID = dbInfo.ID - is.Data.add(tableItem{schemaName.L, dbInfo.ID, tableName.L, tblInfo.ID, 2, false}, internal.MockTable(t, r.Store(), tblInfo)) + is.Data.add(tableItem{schemaName, dbInfo.ID, tableName, tblInfo.ID, 2, false}, internal.MockTable(t, r.Store(), tblInfo)) internal.AddTable(t, r.Store(), dbInfo, tblInfo) is.base().schemaMetaVersion = 1 require.Equal(t, 1, len(is.AllSchemas())) @@ -76,7 +77,7 @@ func TestV2Basic(t *testing.T) { require.True(t, ok) require.Equal(t, dbInfo, getDBInfo) - getTableInfo, ok = is.TableByID(tblInfo.ID) + getTableInfo, ok = is.TableByID(context.Background(), tblInfo.ID) require.True(t, ok) require.NotNil(t, getTableInfo) @@ -85,7 +86,7 @@ func TestV2Basic(t *testing.T) { require.Same(t, gotTblInfo, getTableInfo.Meta()) // negative id should always be seen as not exists - getTableInfo, ok = is.TableByID(-1) + getTableInfo, ok = is.TableByID(context.Background(), -1) require.False(t, ok) require.Nil(t, getTableInfo) gotTblInfo, ok = is.TableInfoByID(-1) @@ -127,7 +128,8 @@ func TestMisc(t *testing.T) { r.Store().Close() }() - builder, err := NewBuilder(r, nil, NewData()).InitWithDBInfos(nil, nil, nil, 1) + builder := NewBuilder(r, nil, NewData(), variable.SchemaCacheSize.Load() > 0) + err := builder.InitWithDBInfos(nil, nil, nil, 1) require.NoError(t, err) is := builder.Build(math.MaxUint64) require.Len(t, is.AllResourceGroups(), 0) @@ -249,7 +251,8 @@ func TestBundles(t *testing.T) { schemaName := model.NewCIStr("testDB") tableName := model.NewCIStr("test") - builder, err := NewBuilder(r, nil, NewData()).InitWithDBInfos(nil, nil, nil, 1) + builder := NewBuilder(r, nil, NewData(), variable.SchemaCacheSize.Load() > 0) + err := builder.InitWithDBInfos(nil, nil, nil, 1) require.NoError(t, err) is := builder.Build(math.MaxUint64) require.Equal(t, 2, len(is.AllSchemas())) diff --git a/pkg/infoschema/interface.go b/pkg/infoschema/interface.go index 0b7701532ed94..71796c0329923 100644 --- a/pkg/infoschema/interface.go +++ b/pkg/infoschema/interface.go @@ -28,7 +28,7 @@ import ( type InfoSchema interface { context.MetaOnlyInfoSchema TableByName(ctx stdctx.Context, schema, table model.CIStr) (table.Table, error) - TableByID(id int64) (table.Table, bool) + TableByID(ctx stdctx.Context, id int64) (table.Table, bool) FindTableByPartitionID(partitionID int64) (table.Table, *model.DBInfo, *model.PartitionDefinition) ListTablesWithSpecialAttribute(filter specialAttributeFilter) []tableInfoResult base() *infoSchema diff --git a/pkg/infoschema/internal/testkit.go b/pkg/infoschema/internal/testkit.go index 1f468040e7e65..c4c60a064546e 100644 --- a/pkg/infoschema/internal/testkit.go +++ b/pkg/infoschema/internal/testkit.go @@ -150,12 +150,13 @@ func GenGlobalID(store kv.Storage) (int64, error) { func MockDBInfo(t testing.TB, store kv.Storage, DBName string) *model.DBInfo { id, err := GenGlobalID(store) require.NoError(t, err) - return &model.DBInfo{ - ID: id, - Name: model.NewCIStr(DBName), - Tables: []*model.TableInfo{}, - State: model.StatePublic, + dbInfo := &model.DBInfo{ + ID: id, + Name: model.NewCIStr(DBName), + State: model.StatePublic, } + dbInfo.Deprecated.Tables = []*model.TableInfo{} + return dbInfo } // MockTableInfo mock TableInfo for testing. @@ -222,7 +223,7 @@ func MockPolicyRefInfo(t *testing.T, store kv.Storage, policyName string) *model func AddTable(t testing.TB, store kv.Storage, dbInfo *model.DBInfo, tblInfo *model.TableInfo) { ctx := kv.WithInternalSourceType(context.Background(), kv.InternalTxnDDL) err := kv.RunInNewTxn(ctx, store, true, func(ctx context.Context, txn kv.Transaction) error { - err := meta.NewMeta(txn).CreateTableOrView(dbInfo.ID, dbInfo.Name.O, tblInfo) + err := meta.NewMeta(txn).CreateTableOrView(dbInfo.ID, tblInfo) require.NoError(t, err) return errors.Trace(err) }) @@ -244,7 +245,7 @@ func UpdateTable(t *testing.T, store kv.Storage, dbInfo *model.DBInfo, tblInfo * func DropTable(t testing.TB, store kv.Storage, dbInfo *model.DBInfo, tblID int64, tblName string) { ctx := kv.WithInternalSourceType(context.Background(), kv.InternalTxnDDL) err := kv.RunInNewTxn(ctx, store, true, func(ctx context.Context, txn kv.Transaction) error { - err := meta.NewMeta(txn).DropTableOrView(dbInfo.ID, dbInfo.Name.O, tblID, tblName) + err := meta.NewMeta(txn).DropTableOrView(dbInfo.ID, tblID) require.NoError(t, err) return errors.Trace(err) }) @@ -267,7 +268,7 @@ func DropDB(t testing.TB, store kv.Storage, dbInfo *model.DBInfo) { ctx := kv.WithInternalSourceType(context.Background(), kv.InternalTxnDDL) err := kv.RunInNewTxn(ctx, store, true, func(ctx context.Context, txn kv.Transaction) error { - err := meta.NewMeta(txn).DropDatabase(dbInfo.ID, dbInfo.Name.O) + err := meta.NewMeta(txn).DropDatabase(dbInfo.ID) require.NoError(t, err) return errors.Trace(err) }) diff --git a/pkg/infoschema/metrics_schema.go b/pkg/infoschema/metrics_schema.go index b8cbfd4992719..3efd2724f4b3e 100644 --- a/pkg/infoschema/metrics_schema.go +++ b/pkg/infoschema/metrics_schema.go @@ -21,6 +21,7 @@ import ( "strconv" "strings" + "github.com/ngaut/pools" "github.com/pingcap/errors" "github.com/pingcap/tidb/pkg/meta/autoid" "github.com/pingcap/tidb/pkg/parser/model" @@ -57,9 +58,9 @@ func init() { Name: model.NewCIStr(util.MetricSchemaName.O), Charset: mysql.DefaultCharset, Collate: mysql.DefaultCollationName, - Tables: metricTables, } - RegisterVirtualTable(dbInfo, tableFromMeta) + dbInfo.Deprecated.Tables = metricTables + RegisterVirtualTable(dbInfo, tableFromMetaForMetricsTable) } // MetricTableDef is the metric table define. @@ -146,7 +147,7 @@ type metricSchemaTable struct { infoschemaTable } -func tableFromMeta(alloc autoid.Allocators, meta *model.TableInfo) (table.Table, error) { +func tableFromMetaForMetricsTable(_ autoid.Allocators, _ func() (pools.Resource, error), meta *model.TableInfo) (table.Table, error) { columns := make([]*table.Column, 0, len(meta.Columns)) for _, colInfo := range meta.Columns { col := table.ToColumn(colInfo) diff --git a/pkg/infoschema/perfschema/BUILD.bazel b/pkg/infoschema/perfschema/BUILD.bazel index 0e300561f33f5..0c3b81094b9e8 100644 --- a/pkg/infoschema/perfschema/BUILD.bazel +++ b/pkg/infoschema/perfschema/BUILD.bazel @@ -26,6 +26,7 @@ go_library( "//pkg/types", "//pkg/util", "//pkg/util/profile", + "@com_github_ngaut_pools//:pools", "@com_github_pingcap_errors//:errors", "@com_github_pingcap_failpoint//:failpoint", "@com_github_tikv_pd_client//http", diff --git a/pkg/infoschema/perfschema/init.go b/pkg/infoschema/perfschema/init.go index 8e4f3c4852e92..f10651e84ef47 100644 --- a/pkg/infoschema/perfschema/init.go +++ b/pkg/infoschema/perfschema/init.go @@ -68,8 +68,8 @@ func Init() { Name: util.PerformanceSchemaName, Charset: mysql.DefaultCharset, Collate: mysql.DefaultCollationName, - Tables: tbls, } + dbInfo.Deprecated.Tables = tbls infoschema.RegisterVirtualTable(dbInfo, tableFromMeta) } if expression.EvalSimpleAst != nil { diff --git a/pkg/infoschema/perfschema/tables.go b/pkg/infoschema/perfschema/tables.go index aea648135f298..d242bd7560a71 100644 --- a/pkg/infoschema/perfschema/tables.go +++ b/pkg/infoschema/perfschema/tables.go @@ -24,6 +24,7 @@ import ( "sync" "time" + "github.com/ngaut/pools" "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/infoschema" @@ -129,7 +130,7 @@ func IsPredefinedTable(tableName string) bool { return ok } -func tableFromMeta(allocs autoid.Allocators, meta *model.TableInfo) (table.Table, error) { +func tableFromMeta(allocs autoid.Allocators, _ func() (pools.Resource, error), meta *model.TableInfo) (table.Table, error) { if f, ok := pluginTable[meta.Name.L]; ok { ret, err := f(allocs, meta) return ret, err diff --git a/pkg/infoschema/sieve.go b/pkg/infoschema/sieve.go index 03ba1f8d88c4b..01100ebf359d6 100644 --- a/pkg/infoschema/sieve.go +++ b/pkg/infoschema/sieve.go @@ -19,6 +19,7 @@ import ( "context" "sync" + "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/infoschema/internal" ) @@ -150,6 +151,10 @@ func (s *Sieve[K, V]) Set(key K, value V) { } func (s *Sieve[K, V]) Get(key K) (value V, ok bool) { + failpoint.Inject("skipGet", func() { + var v V + failpoint.Return(v, false) + }) s.mu.Lock() defer s.mu.Unlock() if e, ok := s.items[key]; ok { diff --git a/pkg/infoschema/tables.go b/pkg/infoschema/tables.go index 89e5f088fac40..8d7ce2cfef688 100644 --- a/pkg/infoschema/tables.go +++ b/pkg/infoschema/tables.go @@ -28,6 +28,7 @@ import ( "sync" "time" + "github.com/ngaut/pools" "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/kvproto/pkg/diagnosticspb" @@ -855,7 +856,7 @@ var tableProcesslistCols = []columnInfo{ {name: "TxnStart", tp: mysql.TypeVarchar, size: 64, flag: mysql.NotNullFlag, deflt: ""}, {name: "RESOURCE_GROUP", tp: mysql.TypeVarchar, size: resourcegroup.MaxGroupNameLength, flag: mysql.NotNullFlag, deflt: ""}, {name: "SESSION_ALIAS", tp: mysql.TypeVarchar, size: 64, flag: mysql.NotNullFlag, deflt: ""}, - {name: "CURRENT_AFFECTED_ROWS", tp: mysql.TypeLonglong, size: 21, flag: mysql.UnsignedFlag}, + {name: "ROWS_AFFECTED", tp: mysql.TypeLonglong, size: 21, flag: mysql.UnsignedFlag}, } var tableTiDBIndexesCols = []columnInfo{ @@ -2352,13 +2353,13 @@ var tableNameToColumns = map[string][]columnInfo{ TableTiDBIndexUsage: tableTiDBIndexUsage, } -func createInfoSchemaTable(_ autoid.Allocators, meta *model.TableInfo) (table.Table, error) { +func createInfoSchemaTable(_ autoid.Allocators, _ func() (pools.Resource, error), meta *model.TableInfo) (table.Table, error) { columns := make([]*table.Column, len(meta.Columns)) for i, col := range meta.Columns { columns[i] = table.ToColumn(col) } tp := table.VirtualTable - if isClusterTableByName(util.InformationSchemaName.O, meta.Name.O) { + if IsClusterTableByName(util.InformationSchemaName.O, meta.Name.O) { tp = table.ClusterTable } return &infoschemaTable{meta: meta, cols: columns, tp: tp}, nil @@ -2426,17 +2427,17 @@ func (it *infoschemaTable) IndexPrefix() kv.Key { } // AddRecord implements table.Table AddRecord interface. -func (it *infoschemaTable) AddRecord(ctx table.MutateContext, r []types.Datum, opts ...table.AddRecordOption) (recordID kv.Handle, err error) { +func (it *infoschemaTable) AddRecord(ctx table.MutateContext, txn kv.Transaction, r []types.Datum, opts ...table.AddRecordOption) (recordID kv.Handle, err error) { return nil, table.ErrUnsupportedOp } // RemoveRecord implements table.Table RemoveRecord interface. -func (it *infoschemaTable) RemoveRecord(ctx table.MutateContext, h kv.Handle, r []types.Datum) error { +func (it *infoschemaTable) RemoveRecord(ctx table.MutateContext, txn kv.Transaction, h kv.Handle, r []types.Datum) error { return table.ErrUnsupportedOp } // UpdateRecord implements table.Table UpdateRecord interface. -func (it *infoschemaTable) UpdateRecord(gctx context.Context, ctx table.MutateContext, h kv.Handle, oldData, newData []types.Datum, touched []bool) error { +func (it *infoschemaTable) UpdateRecord(ctx table.MutateContext, txn kv.Transaction, h kv.Handle, oldData, newData []types.Datum, touched []bool, opts ...table.UpdateRecordOption) error { return table.ErrUnsupportedOp } @@ -2519,17 +2520,17 @@ func (vt *VirtualTable) IndexPrefix() kv.Key { } // AddRecord implements table.Table AddRecord interface. -func (vt *VirtualTable) AddRecord(ctx table.MutateContext, r []types.Datum, opts ...table.AddRecordOption) (recordID kv.Handle, err error) { +func (vt *VirtualTable) AddRecord(ctx table.MutateContext, txn kv.Transaction, r []types.Datum, opts ...table.AddRecordOption) (recordID kv.Handle, err error) { return nil, table.ErrUnsupportedOp } // RemoveRecord implements table.Table RemoveRecord interface. -func (vt *VirtualTable) RemoveRecord(ctx table.MutateContext, h kv.Handle, r []types.Datum) error { +func (vt *VirtualTable) RemoveRecord(ctx table.MutateContext, txn kv.Transaction, h kv.Handle, r []types.Datum) error { return table.ErrUnsupportedOp } // UpdateRecord implements table.Table UpdateRecord interface. -func (vt *VirtualTable) UpdateRecord(ctx context.Context, sctx table.MutateContext, h kv.Handle, oldData, newData []types.Datum, touched []bool) error { +func (vt *VirtualTable) UpdateRecord(ctx table.MutateContext, txn kv.Transaction, h kv.Handle, oldData, newData []types.Datum, touched []bool, opts ...table.UpdateRecordOption) error { return table.ErrUnsupportedOp } diff --git a/pkg/infoschema/test/clustertablestest/cluster_tables_test.go b/pkg/infoschema/test/clustertablestest/cluster_tables_test.go index 40b6271d5a392..f53d2d8021f4f 100644 --- a/pkg/infoschema/test/clustertablestest/cluster_tables_test.go +++ b/pkg/infoschema/test/clustertablestest/cluster_tables_test.go @@ -403,7 +403,7 @@ func TestStmtSummaryEvictedCountTable(t *testing.T) { err := tk.QueryToErr("select * from information_schema.CLUSTER_STATEMENTS_SUMMARY_EVICTED") // This error is come from cop(TiDB) fetch from rpc server. - require.EqualError(t, err, "other error: [planner:1227]Access denied; you need (at least one of) the PROCESS privilege(s) for this operation") + require.ErrorContains(t, err, "other error: [planner:1227]Access denied; you need (at least one of) the PROCESS privilege(s) for this operation") require.NoError(t, tk.Session().Auth(&auth.UserIdentity{ Username: "testuser2", @@ -944,6 +944,8 @@ func TestQuickBinding(t *testing.T) { tk.MustExec("use test") tk.MustExec(`create table t1 (pk int, a int, b int, c int, primary key(pk), key k_a(a), key k_bc(b, c))`) tk.MustExec(`create table t2 (a int, b int, c int, key k_a(a), key k_bc(b, c))`) // no primary key + tk.MustExec(`create table t3 (a int, b int, c int, key k_a(a), key k_bc(b, c))`) + tk.MustExec(`create table t4 (a int, b int, c int, key k_a(a), key k_bc(b, c))`) type testCase struct { template string @@ -971,32 +973,42 @@ func TestQuickBinding(t *testing.T) { {`select a+b+? from (select /*+ stream_agg() */ count(*) as a from t1) tt1, (select /*+ hash_agg() */ count(*) as b from t1) tt2`, "stream_agg(@`sel_2`), use_index(@`sel_2` `test`.`t1` `k_a`), no_order_index(@`sel_2` `test`.`t1` `k_a`), agg_to_cop(@`sel_2`), hash_agg(@`sel_3`), use_index(@`sel_3` `test`.`t1` `k_a`), no_order_index(@`sel_3` `test`.`t1` `k_a`), agg_to_cop(@`sel_3`)", nil}, // 2-way hash joins - {`select /*+ hash_join(t1, t2), use_index(t1), use_index(t2) */ t1.* from t1, t2 where t1.a=t2.a and t1.a= 0 && j < len(row) { - value, err = table.CastValue(kvcodec.SessionCtx, row[j], + value, err = table.CastColumnValue(kvcodec.SessionCtx.GetExprCtx(), row[j], ExtraHandleColumnInfo, false, false) rowValue = value.GetInt64() } else { diff --git a/pkg/lightning/backend/kv/sql2kv_test.go b/pkg/lightning/backend/kv/sql2kv_test.go index 5780be319a3a6..737eb86befade 100644 --- a/pkg/lightning/backend/kv/sql2kv_test.go +++ b/pkg/lightning/backend/kv/sql2kv_test.go @@ -71,7 +71,7 @@ type mockTable struct { table.Table } -func (mockTable) AddRecord(ctx table.MutateContext, r []types.Datum, opts ...table.AddRecordOption) (recordID kv.Handle, err error) { +func (mockTable) AddRecord(ctx table.MutateContext, txn kv.Transaction, r []types.Datum, opts ...table.AddRecordOption) (recordID kv.Handle, err error) { return kv.IntHandle(-1), errors.New("mock error") } diff --git a/pkg/lightning/backend/local/duplicate.go b/pkg/lightning/backend/local/duplicate.go index 9cb853cd3cac0..1de2af5597547 100644 --- a/pkg/lightning/backend/local/duplicate.go +++ b/pkg/lightning/backend/local/duplicate.go @@ -405,11 +405,10 @@ func (s *RemoteDupKVStream) Close() error { return nil } -// DupeDetector provides methods to collect and decode duplicated KV pairs into row data. The results -// are stored into the errorMgr. -// this object can only be used once, either for local or remote deduplication. -// TODO(lance6716): make it private. -type DupeDetector struct { +// dupeDetector provides methods to collect and decode duplicated KV pairs into +// row data. The results are stored into the errorMgr. This object can only be +// used once, either for local or remote deduplication. +type dupeDetector struct { tbl table.Table tableName string splitCli split.SplitClient @@ -425,7 +424,7 @@ type DupeDetector struct { taskType string } -// NewDupeDetector creates a new DupeDetector. +// NewDupeDetector creates a new dupeDetector. func NewDupeDetector( tbl table.Table, tableName string, @@ -438,13 +437,13 @@ func NewDupeDetector( logger log.Logger, resourceGroupName string, taskType string, -) (*DupeDetector, error) { +) (*dupeDetector, error) { logger = logger.With(zap.String("tableName", tableName)) decoder, err := kv.NewTableKVDecoder(tbl, tableName, sessOpts, logger) if err != nil { return nil, errors.Trace(err) } - return &DupeDetector{ + return &dupeDetector{ tbl: tbl, tableName: tableName, splitCli: splitCli, @@ -461,12 +460,16 @@ func NewDupeDetector( } // HasDuplicate returns true if there are duplicated KV pairs. -func (m *DupeDetector) HasDuplicate() bool { +func (m *dupeDetector) HasDuplicate() bool { return m.hasDupe.Load() } // RecordDataConflictError records data conflicts to errorMgr. The key received from stream must be a row key. -func (m *DupeDetector) RecordDataConflictError(ctx context.Context, stream DupKVStream, algorithm config.DuplicateResolutionAlgorithm) error { +func (m *dupeDetector) RecordDataConflictError( + ctx context.Context, + stream DupKVStream, + algorithm config.DuplicateResolutionAlgorithm, +) error { //nolint: errcheck defer stream.Close() var dataConflictInfos []errormanager.DataConflictInfo @@ -515,7 +518,7 @@ func (m *DupeDetector) RecordDataConflictError(ctx context.Context, stream DupKV return nil } -func (m *DupeDetector) saveIndexHandles(ctx context.Context, handles pendingIndexHandles) error { +func (m *dupeDetector) saveIndexHandles(ctx context.Context, handles pendingIndexHandles) error { snapshot := m.tikvCli.GetSnapshot(math.MaxUint64) batchGetMap, err := snapshot.BatchGet(ctx, handles.rawHandles) if err != nil { @@ -540,7 +543,7 @@ func (m *DupeDetector) saveIndexHandles(ctx context.Context, handles pendingInde } // RecordIndexConflictError records index conflicts to errorMgr. The key received from stream must be an index key. -func (m *DupeDetector) RecordIndexConflictError(ctx context.Context, stream DupKVStream, tableID int64, indexInfo *model.IndexInfo, algorithm config.DuplicateResolutionAlgorithm) error { +func (m *dupeDetector) RecordIndexConflictError(ctx context.Context, stream DupKVStream, tableID int64, indexInfo *model.IndexInfo, algorithm config.DuplicateResolutionAlgorithm) error { //nolint: errcheck defer stream.Close() indexHandles := makePendingIndexHandlesWithCapacity(0) @@ -684,7 +687,7 @@ func ConvertToErrFoundConflictRecords(originalErr error, tbl table.Table) error } // BuildDuplicateTaskForTest is only used for test. -var BuildDuplicateTaskForTest = func(m *DupeDetector) ([]dupTask, error) { +var BuildDuplicateTaskForTest = func(m *dupeDetector) ([]dupTask, error) { return m.buildDupTasks() } @@ -694,7 +697,7 @@ type dupTask struct { indexInfo *model.IndexInfo } -func (m *DupeDetector) buildDupTasks() ([]dupTask, error) { +func (m *dupeDetector) buildDupTasks() ([]dupTask, error) { if m.indexID != 0 { return m.buildIndexDupTasks() } @@ -739,7 +742,7 @@ func (m *DupeDetector) buildDupTasks() ([]dupTask, error) { return tasks, nil } -func (m *DupeDetector) buildIndexDupTasks() ([]dupTask, error) { +func (m *dupeDetector) buildIndexDupTasks() ([]dupTask, error) { for _, indexInfo := range m.tbl.Meta().Indices { if m.indexID != indexInfo.ID { continue @@ -767,7 +770,7 @@ func (m *DupeDetector) buildIndexDupTasks() ([]dupTask, error) { return nil, nil } -func (m *DupeDetector) splitLocalDupTaskByKeys( +func (m *dupeDetector) splitLocalDupTaskByKeys( task dupTask, dupDB *pebble.DB, keyAdapter common.KeyAdapter, @@ -793,7 +796,7 @@ func (m *DupeDetector) splitLocalDupTaskByKeys( return newDupTasks, nil } -func (m *DupeDetector) buildLocalDupTasks(dupDB *pebble.DB, keyAdapter common.KeyAdapter) ([]dupTask, error) { +func (m *dupeDetector) buildLocalDupTasks(dupDB *pebble.DB, keyAdapter common.KeyAdapter) ([]dupTask, error) { tasks, err := m.buildDupTasks() if err != nil { return nil, errors.Trace(err) @@ -812,7 +815,7 @@ func (m *DupeDetector) buildLocalDupTasks(dupDB *pebble.DB, keyAdapter common.Ke } // CollectDuplicateRowsFromDupDB collects duplicates from the duplicate DB and records all duplicate row info into errorMgr. -func (m *DupeDetector) CollectDuplicateRowsFromDupDB(ctx context.Context, dupDB *pebble.DB, keyAdapter common.KeyAdapter, algorithm config.DuplicateResolutionAlgorithm) error { +func (m *dupeDetector) CollectDuplicateRowsFromDupDB(ctx context.Context, dupDB *pebble.DB, keyAdapter common.KeyAdapter, algorithm config.DuplicateResolutionAlgorithm) error { tasks, err := m.buildLocalDupTasks(dupDB, keyAdapter) if err != nil { return errors.Trace(err) @@ -848,7 +851,7 @@ func (m *DupeDetector) CollectDuplicateRowsFromDupDB(ctx context.Context, dupDB return errors.Trace(g.Wait()) } -func (m *DupeDetector) splitKeyRangeByRegions( +func (m *dupeDetector) splitKeyRangeByRegions( ctx context.Context, keyRange tidbkv.KeyRange, ) ([]*split.RegionInfo, []tidbkv.KeyRange, error) { rawStartKey := codec.EncodeBytes(nil, keyRange.StartKey) @@ -891,7 +894,7 @@ func (m *DupeDetector) splitKeyRangeByRegions( return regions, keyRanges, nil } -func (m *DupeDetector) processRemoteDupTaskOnce( +func (m *dupeDetector) processRemoteDupTaskOnce( ctx context.Context, task dupTask, logger log.Logger, @@ -969,7 +972,7 @@ func (m *DupeDetector) processRemoteDupTaskOnce( // processRemoteDupTask processes a remoteDupTask. A task contains a key range. // A key range is associated with multiple regions. processRemoteDupTask tries // to collect duplicates from each region. -func (m *DupeDetector) processRemoteDupTask( +func (m *dupeDetector) processRemoteDupTask( ctx context.Context, task dupTask, logger log.Logger, @@ -1017,7 +1020,7 @@ func (m *DupeDetector) processRemoteDupTask( // collectDuplicateRowsFromTiKV collects duplicates from the remote TiKV and // records all duplicate row info into errorMgr. -func (m *DupeDetector) collectDuplicateRowsFromTiKV( +func (m *dupeDetector) collectDuplicateRowsFromTiKV( ctx context.Context, importClientFactory ImportClientFactory, algorithm config.DuplicateResolutionAlgorithm, diff --git a/pkg/lightning/backend/local/duplicate_test.go b/pkg/lightning/backend/local/duplicate_test.go index 8a42e7f6f69c4..fc17ec9293308 100644 --- a/pkg/lightning/backend/local/duplicate_test.go +++ b/pkg/lightning/backend/local/duplicate_test.go @@ -94,7 +94,7 @@ func buildTableForTestConvertToErrFoundConflictRecords(t *testing.T, node []ast. Logger: log.L(), }) require.NoError(t, err) - encoder.SessionCtx.GetSessionVars().RowEncoder.Enable = true + encoder.SessionCtx.GetTableCtx().GetRowEncodingConfig().RowEncoder.Enable = true data1 := []types.Datum{ types.NewIntDatum(1), diff --git a/pkg/lightning/backend/tidb/BUILD.bazel b/pkg/lightning/backend/tidb/BUILD.bazel index 7fc382b7b46ee..d65342fd2a725 100644 --- a/pkg/lightning/backend/tidb/BUILD.bazel +++ b/pkg/lightning/backend/tidb/BUILD.bazel @@ -18,7 +18,6 @@ go_library( "//pkg/lightning/verification", "//pkg/parser/model", "//pkg/parser/mysql", - "//pkg/sessionctx", "//pkg/table", "//pkg/types", "//pkg/util/dbutil", diff --git a/pkg/lightning/backend/tidb/tidb.go b/pkg/lightning/backend/tidb/tidb.go index 186e17d9d6d06..2c70cc1df82b9 100644 --- a/pkg/lightning/backend/tidb/tidb.go +++ b/pkg/lightning/backend/tidb/tidb.go @@ -39,7 +39,6 @@ import ( "github.com/pingcap/tidb/pkg/lightning/verification" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/mysql" - "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/table" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/dbutil" @@ -83,7 +82,6 @@ func (rows tidbRows) MarshalLogArray(encoder zapcore.ArrayEncoder) error { type tidbEncoder struct { mode mysql.SQLMode tbl table.Table - se sessionctx.Context // the index of table columns for each data field. // index == len(table.columns) means this field is `_tidb_rowid` columnIdx []int @@ -105,17 +103,10 @@ func NewEncodingBuilder() encode.EncodingBuilder { // NewEncoder creates a KV encoder. // It implements the `backend.EncodingBuilder` interface. -func (*encodingBuilder) NewEncoder(ctx context.Context, config *encode.EncodingConfig) (encode.Encoder, error) { - se := kv.NewSessionCtx(&config.SessionOptions, log.FromContext(ctx)) - if config.SQLMode.HasStrictMode() { - se.GetSessionVars().SkipUTF8Check = false - se.GetSessionVars().SkipASCIICheck = false - } - +func (*encodingBuilder) NewEncoder(_ context.Context, config *encode.EncodingConfig) (encode.Encoder, error) { return &tidbEncoder{ mode: config.SQLMode, tbl: config.Table, - se: se, path: config.Path, logger: config.Logger, }, nil diff --git a/pkg/lightning/checkpoints/BUILD.bazel b/pkg/lightning/checkpoints/BUILD.bazel index 90c521225490a..d7c7882ee2042 100644 --- a/pkg/lightning/checkpoints/BUILD.bazel +++ b/pkg/lightning/checkpoints/BUILD.bazel @@ -36,7 +36,7 @@ go_test( embed = [":checkpoints"], flaky = True, race = "on", - shard_count = 23, + shard_count = 24, deps = [ "//br/pkg/version/build", "//pkg/lightning/checkpoints/checkpointspb", diff --git a/pkg/lightning/checkpoints/checkpoints.go b/pkg/lightning/checkpoints/checkpoints.go index 186ee9b90ffe3..81497cc4dc5c0 100644 --- a/pkg/lightning/checkpoints/checkpoints.go +++ b/pkg/lightning/checkpoints/checkpoints.go @@ -800,9 +800,13 @@ func (cpdb *MySQLCheckpointsDB) Initialize(ctx context.Context, cfg *config.Conf for _, db := range dbInfo { for _, table := range db.Tables { tableName := common.UniqueTable(db.Name, table.Name) - tableInfo, err := json.Marshal(table.Desired) - if err != nil { - return errors.Trace(err) + tableInfo := []byte("") + if cfg.TikvImporter.AddIndexBySQL { + // see comments in FileCheckpointsDB.Initialize + tableInfo, err = json.Marshal(table.Desired) + if err != nil { + return errors.Trace(err) + } } _, err = stmt.ExecContext(c, cfg.TaskID, tableName, CheckpointStatusLoaded, table.ID, tableInfo) if err != nil { @@ -933,8 +937,10 @@ func (cpdb *MySQLCheckpointsDB) Get(ctx context.Context, tableName string) (*Tab return errors.NotFoundf("checkpoint for table %s", tableName) } } - if err := json.Unmarshal(rawTableInfo, &cp.TableInfo); err != nil { - return errors.Trace(err) + if len(rawTableInfo) > 0 { + if err := json.Unmarshal(rawTableInfo, &cp.TableInfo); err != nil { + return errors.Trace(err) + } } cp.Checksum = verify.MakeKVChecksum(bytes, kvs, checksum) cp.Status = CheckpointStatus(status) @@ -1246,13 +1252,22 @@ func (cpdb *FileCheckpointsDB) Initialize(_ context.Context, cfg *config.Config, cpdb.checkpoints.Checkpoints = make(map[string]*checkpointspb.TableCheckpointModel) } + var err error for _, db := range dbInfo { for _, table := range db.Tables { tableName := common.UniqueTable(db.Name, table.Name) if _, ok := cpdb.checkpoints.Checkpoints[tableName]; !ok { - tableInfo, err := json.Marshal(table.Desired) - if err != nil { - return errors.Trace(err) + var tableInfo []byte + if cfg.TikvImporter.AddIndexBySQL { + // tableInfo is quite large in most case, when importing many + // small tables, writing tableInfo will make checkpoint file + // vary large, and save checkpoint will become bottleneck, so + // we only store table info if we are going to add index by SQL + // where it's required. + tableInfo, err = json.Marshal(table.Desired) + if err != nil { + return errors.Trace(err) + } } cpdb.checkpoints.Checkpoints[tableName] = &checkpointspb.TableCheckpointModel{ Status: uint32(CheckpointStatusLoaded), @@ -1308,8 +1323,10 @@ func (cpdb *FileCheckpointsDB) Get(_ context.Context, tableName string) (*TableC } var tableInfo *model.TableInfo - if err := json.Unmarshal(tableModel.TableInfo, &tableInfo); err != nil { - return nil, errors.Trace(err) + if len(tableModel.TableInfo) > 0 { + if err := json.Unmarshal(tableModel.TableInfo, &tableInfo); err != nil { + return nil, errors.Trace(err) + } } cp := &TableCheckpoint{ diff --git a/pkg/lightning/checkpoints/checkpoints_file_test.go b/pkg/lightning/checkpoints/checkpoints_file_test.go index df2b84f50a3e4..7213dc9aa3e09 100644 --- a/pkg/lightning/checkpoints/checkpoints_file_test.go +++ b/pkg/lightning/checkpoints/checkpoints_file_test.go @@ -41,7 +41,7 @@ func newTestConfig() *config.Config { return cfg } -func newFileCheckpointsDB(t *testing.T) *checkpoints.FileCheckpointsDB { +func newFileCheckpointsDB(t *testing.T, addIndexBySQL bool) *checkpoints.FileCheckpointsDB { dir := t.TempDir() ctx := context.Background() cpdb, err := checkpoints.NewFileCheckpointsDB(ctx, filepath.Join(dir, "cp.pb")) @@ -49,6 +49,7 @@ func newFileCheckpointsDB(t *testing.T) *checkpoints.FileCheckpointsDB { // 2. initialize with checkpoint data. cfg := newTestConfig() + cfg.TikvImporter.AddIndexBySQL = addIndexBySQL err = cpdb.Initialize(ctx, cfg, map[string]*checkpoints.TidbDBInfo{ "db1": { Name: "db1", @@ -164,13 +165,7 @@ func setInvalidStatus(cpdb *checkpoints.FileCheckpointsDB) { func TestGet(t *testing.T) { ctx := context.Background() - cpdb := newFileCheckpointsDB(t) - - // 5. get back the checkpoints - - cp, err := cpdb.Get(ctx, "`db1`.`t2`") - require.NoError(t, err) - expect := &checkpoints.TableCheckpoint{ + expectT2 := &checkpoints.TableCheckpoint{ Status: checkpoints.CheckpointStatusAllWritten, AllocBase: 132861, Checksum: verification.MakeKVChecksum(4492, 686, 486070148910), @@ -203,11 +198,18 @@ func TestGet(t *testing.T) { }, }, } - require.Equal(t, expect, cp) - cp, err = cpdb.Get(ctx, "`db2`.`t3`") - require.NoError(t, err) - expect = &checkpoints.TableCheckpoint{ + expectT3 := &checkpoints.TableCheckpoint{ + Status: checkpoints.CheckpointStatusLoaded, + Engines: map[int32]*checkpoints.EngineCheckpoint{ + -1: { + Status: checkpoints.CheckpointStatusLoaded, + Chunks: []*checkpoints.ChunkCheckpoint{}, + }, + }, + } + + expectT3AddIndexBySQL := &checkpoints.TableCheckpoint{ Status: checkpoints.CheckpointStatusLoaded, Engines: map[int32]*checkpoints.EngineCheckpoint{ -1: { @@ -219,16 +221,41 @@ func TestGet(t *testing.T) { Name: model.NewCIStr("t3"), }, } - require.Equal(t, expect, cp) - cp, err = cpdb.Get(ctx, "`db3`.`not-exists`") - require.Nil(t, cp) - require.True(t, errors.IsNotFound(err)) + t.Run("normal", func(t *testing.T) { + cpdb := newFileCheckpointsDB(t, false) + cp, err := cpdb.Get(ctx, "`db1`.`t2`") + require.NoError(t, err) + require.Equal(t, expectT2, cp) + + cp, err = cpdb.Get(ctx, "`db2`.`t3`") + require.NoError(t, err) + require.Equal(t, expectT3, cp) + + cp, err = cpdb.Get(ctx, "`db3`.`not-exists`") + require.Nil(t, cp) + require.True(t, errors.IsNotFound(err)) + }) + + t.Run("add-index-by-sql", func(t *testing.T) { + cpdb := newFileCheckpointsDB(t, true) + cp, err := cpdb.Get(ctx, "`db1`.`t2`") + require.NoError(t, err) + require.Equal(t, expectT2, cp) + + cp, err = cpdb.Get(ctx, "`db2`.`t3`") + require.NoError(t, err) + require.Equal(t, expectT3AddIndexBySQL, cp) + + cp, err = cpdb.Get(ctx, "`db3`.`not-exists`") + require.Nil(t, cp) + require.True(t, errors.IsNotFound(err)) + }) } func TestRemoveAllCheckpoints(t *testing.T) { ctx := context.Background() - cpdb := newFileCheckpointsDB(t) + cpdb := newFileCheckpointsDB(t, false) err := cpdb.RemoveCheckpoint(ctx, "all") require.NoError(t, err) @@ -244,7 +271,7 @@ func TestRemoveAllCheckpoints(t *testing.T) { func TestRemoveOneCheckpoint(t *testing.T) { ctx := context.Background() - cpdb := newFileCheckpointsDB(t) + cpdb := newFileCheckpointsDB(t, false) err := cpdb.RemoveCheckpoint(ctx, "`db1`.`t2`") require.NoError(t, err) @@ -260,7 +287,7 @@ func TestRemoveOneCheckpoint(t *testing.T) { func TestIgnoreAllErrorCheckpoints(t *testing.T) { ctx := context.Background() - cpdb := newFileCheckpointsDB(t) + cpdb := newFileCheckpointsDB(t, false) setInvalidStatus(cpdb) @@ -278,7 +305,7 @@ func TestIgnoreAllErrorCheckpoints(t *testing.T) { func TestIgnoreOneErrorCheckpoints(t *testing.T) { ctx := context.Background() - cpdb := newFileCheckpointsDB(t) + cpdb := newFileCheckpointsDB(t, false) setInvalidStatus(cpdb) @@ -296,7 +323,7 @@ func TestIgnoreOneErrorCheckpoints(t *testing.T) { func TestDestroyAllErrorCheckpoints(t *testing.T) { ctx := context.Background() - cpdb := newFileCheckpointsDB(t) + cpdb := newFileCheckpointsDB(t, false) setInvalidStatus(cpdb) @@ -328,7 +355,7 @@ func TestDestroyAllErrorCheckpoints(t *testing.T) { func TestDestroyOneErrorCheckpoint(t *testing.T) { ctx := context.Background() - cpdb := newFileCheckpointsDB(t) + cpdb := newFileCheckpointsDB(t, false) setInvalidStatus(cpdb) diff --git a/pkg/lightning/checkpoints/checkpoints_sql_test.go b/pkg/lightning/checkpoints/checkpoints_sql_test.go index cbd6b812ba8d6..e3e7081e768b0 100644 --- a/pkg/lightning/checkpoints/checkpoints_sql_test.go +++ b/pkg/lightning/checkpoints/checkpoints_sql_test.go @@ -78,6 +78,114 @@ func TestNormalOperations(t *testing.T) { ctx := context.Background() s := newCPSQLSuite(t) cpdb := s.cpdb + s.mock.ExpectBegin() + initializeStmt := s.mock.ExpectPrepare( + "REPLACE INTO `mock-schema`\\.`task_v\\d+`") + initializeStmt.ExpectExec(). + WithArgs(123, "/data", "local", "127.0.0.1:8287", "127.0.0.1", 4000, "127.0.0.1:2379", "/tmp/sorted-kv", build.ReleaseVersion). + WillReturnResult(sqlmock.NewResult(6, 1)) + initializeStmt = s.mock. + ExpectPrepare("INSERT INTO `mock-schema`\\.`table_v\\d+`") + initializeStmt.ExpectExec(). + WithArgs(123, "`db1`.`t2`", sqlmock.AnyArg(), int64(2), []byte("")). + WillReturnResult(sqlmock.NewResult(8, 1)) + s.mock.ExpectCommit() + + s.mock.MatchExpectationsInOrder(false) + cfg := newTestConfig() + err := cpdb.Initialize(ctx, cfg, map[string]*checkpoints.TidbDBInfo{ + "db1": { + Name: "db1", + Tables: map[string]*checkpoints.TidbTableInfo{ + "t2": { + Name: "t2", + ID: 2, + Desired: &model.TableInfo{ + Name: model.NewCIStr("t2"), + }, + }, + }, + }, + }) + s.mock.MatchExpectationsInOrder(true) + require.NoError(t, err) + require.Nil(t, s.mock.ExpectationsWereMet()) + + s.mock.ExpectBegin() + s.mock. + ExpectQuery("SELECT .+ FROM `mock-schema`\\.`engine_v\\d+`"). + WithArgs("`db1`.`t2`"). + WillReturnRows( + sqlmock.NewRows([]string{"engine_id", "status"}). + AddRow(0, 120). + AddRow(-1, 30), + ) + s.mock. + ExpectQuery("SELECT (?s:.+) FROM `mock-schema`\\.`chunk_v\\d+`"). + WithArgs("`db1`.`t2`"). + WillReturnRows( + sqlmock.NewRows([]string{ + "engine_id", "path", "offset", "type", "compression", "sort_key", "file_size", "columns", + "pos", "end_offset", "prev_rowid_max", "rowid_max", + "kvc_bytes", "kvc_kvs", "kvc_checksum", "unix_timestamp(create_time)", + }). + AddRow( + 0, "/tmp/path/1.sql", 0, mydump.SourceTypeSQL, 0, "", 123, "[]", + 55904, 102400, 681, 5000, + 4491, 586, 486070148917, 1234567894, + ), + ) + s.mock. + ExpectQuery("SELECT .+ FROM `mock-schema`\\.`table_v\\d+`"). + WithArgs("`db1`.`t2`"). + WillReturnRows( + sqlmock.NewRows([]string{"status", "alloc_base", "table_id", "table_info", "kv_bytes", "kv_kvs", "kv_checksum"}). + AddRow(60, 132861, int64(2), nil, uint64(4492), uint64(686), uint64(486070148910)), + ) + s.mock.ExpectCommit() + + cp, err := cpdb.Get(ctx, "`db1`.`t2`") + require.Nil(t, err) + require.Equal(t, &checkpoints.TableCheckpoint{ + Status: checkpoints.CheckpointStatusAllWritten, + AllocBase: 132861, + TableID: int64(2), + TableInfo: nil, + Engines: map[int32]*checkpoints.EngineCheckpoint{ + -1: {Status: checkpoints.CheckpointStatusLoaded}, + 0: { + Status: checkpoints.CheckpointStatusImported, + Chunks: []*checkpoints.ChunkCheckpoint{{ + Key: checkpoints.ChunkCheckpointKey{ + Path: "/tmp/path/1.sql", + Offset: 0, + }, + FileMeta: mydump.SourceFileMeta{ + Path: "/tmp/path/1.sql", + Type: mydump.SourceTypeSQL, + FileSize: 123, + }, + ColumnPermutation: []int{}, + Chunk: mydump.Chunk{ + Offset: 55904, + EndOffset: 102400, + PrevRowIDMax: 681, + RowIDMax: 5000, + }, + Checksum: verification.MakeKVChecksum(4491, 586, 486070148917), + Timestamp: 1234567894, + }}, + }, + }, + Checksum: verification.MakeKVChecksum(4492, 686, 486070148910), + }, cp) + require.Nil(t, s.mock.ExpectationsWereMet()) +} + +func TestNormalOperationsWithAddIndexBySQL(t *testing.T) { + ctx := context.Background() + s := newCPSQLSuite(t) + cpdb := s.cpdb // 2. initialize with checkpoint data. @@ -115,6 +223,7 @@ func TestNormalOperations(t *testing.T) { s.mock.MatchExpectationsInOrder(false) cfg := newTestConfig() + cfg.TikvImporter.AddIndexBySQL = true err = cpdb.Initialize(ctx, cfg, map[string]*checkpoints.TidbDBInfo{ "db1": { Name: "db1", diff --git a/pkg/lightning/common/common_test.go b/pkg/lightning/common/common_test.go index 7da0879f3f771..fdedbebfcabcc 100644 --- a/pkg/lightning/common/common_test.go +++ b/pkg/lightning/common/common_test.go @@ -51,7 +51,7 @@ func newTableInfo(t *testing.T, if err := m.CreateDatabase(&model.DBInfo{ID: dbID}); err != nil && !errors.ErrorEqual(err, meta.ErrDBExists) { return err } - return m.CreateTableOrView(dbID, "", tableInfo) + return m.CreateTableOrView(dbID, tableInfo) }) require.NoError(t, err) return tableInfo diff --git a/pkg/lightning/config/config.go b/pkg/lightning/config/config.go index b131e0180e0f7..f7e07f256a09e 100644 --- a/pkg/lightning/config/config.go +++ b/pkg/lightning/config/config.go @@ -1633,13 +1633,3 @@ func (cfg *Config) Adjust(ctx context.Context) error { } return cfg.Conflict.adjust(&cfg.TikvImporter) } - -// AdjustForDDL acts like Adjust, but DDL will not use some functionalities so -// those members are skipped in adjusting. -func (cfg *Config) AdjustForDDL() error { - if err := cfg.TikvImporter.adjust(); err != nil { - return err - } - cfg.App.adjust(&cfg.TikvImporter) - return nil -} diff --git a/pkg/lightning/errormanager/errormanager.go b/pkg/lightning/errormanager/errormanager.go index 21a77131d8f85..7c83d7e486a6a 100644 --- a/pkg/lightning/errormanager/errormanager.go +++ b/pkg/lightning/errormanager/errormanager.go @@ -611,7 +611,7 @@ func (em *ErrorManager) ReplaceConflictKeys( if err != nil { return errors.Trace(err) } - decodedData, _, err := tables.DecodeRawRowData(encoder.SessionCtx, + decodedData, _, err := tables.DecodeRawRowData(encoder.SessionCtx.GetExprCtx(), tbl.Meta(), overwrittenHandle, tbl.Cols(), overwritten) if err != nil { return errors.Trace(err) @@ -791,7 +791,7 @@ func (em *ErrorManager) ReplaceConflictKeys( if err != nil { return errors.Trace(err) } - decodedData, _, err := tables.DecodeRawRowData(encoder.SessionCtx, + decodedData, _, err := tables.DecodeRawRowData(encoder.SessionCtx.GetExprCtx(), tbl.Meta(), handle, tbl.Cols(), latestValue) if err != nil { return errors.Trace(err) @@ -820,7 +820,7 @@ func (em *ErrorManager) ReplaceConflictKeys( if err != nil { return errors.Trace(err) } - decodedData, _, err := tables.DecodeRawRowData(encoder.SessionCtx, + decodedData, _, err := tables.DecodeRawRowData(encoder.SessionCtx.GetExprCtx(), tbl.Meta(), handle, tbl.Cols(), rawValue) if err != nil { return errors.Trace(err) diff --git a/pkg/lightning/errormanager/errormanager_test.go b/pkg/lightning/errormanager/errormanager_test.go index e611f24d3b1da..ed353b3629c55 100644 --- a/pkg/lightning/errormanager/errormanager_test.go +++ b/pkg/lightning/errormanager/errormanager_test.go @@ -231,7 +231,7 @@ func TestReplaceConflictOneKey(t *testing.T) { Logger: log.L(), }) require.NoError(t, err) - encoder.SessionCtx.GetSessionVars().RowEncoder.Enable = true + encoder.SessionCtx.GetTableCtx().GetRowEncodingConfig().RowEncoder.Enable = true data1 := []types.Datum{ types.NewIntDatum(1), @@ -420,7 +420,7 @@ func TestReplaceConflictOneUniqueKey(t *testing.T) { Logger: log.L(), }) require.NoError(t, err) - encoder.SessionCtx.GetSessionVars().RowEncoder.Enable = true + encoder.SessionCtx.GetTableCtx().GetRowEncodingConfig().RowEncoder.Enable = true data1 := []types.Datum{ types.NewIntDatum(1), diff --git a/pkg/lightning/errormanager/resolveconflict_test.go b/pkg/lightning/errormanager/resolveconflict_test.go index 117420e84a90c..a76c7418aa54c 100644 --- a/pkg/lightning/errormanager/resolveconflict_test.go +++ b/pkg/lightning/errormanager/resolveconflict_test.go @@ -67,7 +67,7 @@ func TestReplaceConflictMultipleKeysNonclusteredPk(t *testing.T) { Logger: log.L(), }) require.NoError(t, err) - encoder.SessionCtx.GetSessionVars().RowEncoder.Enable = true + encoder.SessionCtx.GetTableCtx().GetRowEncodingConfig().RowEncoder.Enable = true data1 := []types.Datum{ types.NewIntDatum(1), @@ -288,7 +288,7 @@ func TestReplaceConflictOneKeyNonclusteredPk(t *testing.T) { Logger: log.L(), }) require.NoError(t, err) - encoder.SessionCtx.GetSessionVars().RowEncoder.Enable = true + encoder.SessionCtx.GetTableCtx().GetRowEncodingConfig().RowEncoder.Enable = true data1 := []types.Datum{ types.NewIntDatum(1), @@ -456,7 +456,7 @@ func TestReplaceConflictOneUniqueKeyNonclusteredPk(t *testing.T) { Logger: log.L(), }) require.NoError(t, err) - encoder.SessionCtx.GetSessionVars().RowEncoder.Enable = true + encoder.SessionCtx.GetTableCtx().GetRowEncodingConfig().RowEncoder.Enable = true data1 := []types.Datum{ types.NewIntDatum(1), @@ -662,7 +662,7 @@ func TestReplaceConflictOneUniqueKeyNonclusteredVarcharPk(t *testing.T) { Logger: log.L(), }) require.NoError(t, err) - encoder.SessionCtx.GetSessionVars().RowEncoder.Enable = true + encoder.SessionCtx.GetTableCtx().GetRowEncodingConfig().RowEncoder.Enable = true data1 := []types.Datum{ types.NewStringDatum("x"), diff --git a/pkg/meta/BUILD.bazel b/pkg/meta/BUILD.bazel index 141ee455b2035..b1a0bff60e885 100644 --- a/pkg/meta/BUILD.bazel +++ b/pkg/meta/BUILD.bazel @@ -18,6 +18,7 @@ go_library( "//pkg/structure", "//pkg/util/dbterror", "//pkg/util/hack", + "//pkg/util/partialjson", "@com_github_pingcap_errors//:errors", "@com_github_pingcap_kvproto//pkg/kvrpcpb", "@com_github_pingcap_kvproto//pkg/resource_manager", diff --git a/pkg/meta/autoid/autoid_test.go b/pkg/meta/autoid/autoid_test.go index f6fa527db7d36..a531c6ec1a5b4 100644 --- a/pkg/meta/autoid/autoid_test.go +++ b/pkg/meta/autoid/autoid_test.go @@ -65,15 +65,15 @@ func TestSignedAutoid(t *testing.T) { m := meta.NewMeta(txn) err = m.CreateDatabase(&model.DBInfo{ID: 1, Name: model.NewCIStr("a")}) require.NoError(t, err) - err = m.CreateTableOrView(1, "", &model.TableInfo{ID: 1, Name: model.NewCIStr("t")}) + err = m.CreateTableOrView(1, &model.TableInfo{ID: 1, Name: model.NewCIStr("t")}) require.NoError(t, err) - err = m.CreateTableOrView(1, "", &model.TableInfo{ID: 2, Name: model.NewCIStr("t1")}) + err = m.CreateTableOrView(1, &model.TableInfo{ID: 2, Name: model.NewCIStr("t1")}) require.NoError(t, err) - err = m.CreateTableOrView(1, "", &model.TableInfo{ID: 3, Name: model.NewCIStr("t1")}) + err = m.CreateTableOrView(1, &model.TableInfo{ID: 3, Name: model.NewCIStr("t1")}) require.NoError(t, err) - err = m.CreateTableOrView(1, "", &model.TableInfo{ID: 4, Name: model.NewCIStr("t2")}) + err = m.CreateTableOrView(1, &model.TableInfo{ID: 4, Name: model.NewCIStr("t2")}) require.NoError(t, err) - err = m.CreateTableOrView(1, "", &model.TableInfo{ID: 5, Name: model.NewCIStr("t3")}) + err = m.CreateTableOrView(1, &model.TableInfo{ID: 5, Name: model.NewCIStr("t3")}) require.NoError(t, err) return nil }) @@ -270,15 +270,15 @@ func TestUnsignedAutoid(t *testing.T) { m := meta.NewMeta(txn) err = m.CreateDatabase(&model.DBInfo{ID: 1, Name: model.NewCIStr("a")}) require.NoError(t, err) - err = m.CreateTableOrView(1, "", &model.TableInfo{ID: 1, Name: model.NewCIStr("t")}) + err = m.CreateTableOrView(1, &model.TableInfo{ID: 1, Name: model.NewCIStr("t")}) require.NoError(t, err) - err = m.CreateTableOrView(1, "", &model.TableInfo{ID: 2, Name: model.NewCIStr("t1")}) + err = m.CreateTableOrView(1, &model.TableInfo{ID: 2, Name: model.NewCIStr("t1")}) require.NoError(t, err) - err = m.CreateTableOrView(1, "", &model.TableInfo{ID: 3, Name: model.NewCIStr("t1")}) + err = m.CreateTableOrView(1, &model.TableInfo{ID: 3, Name: model.NewCIStr("t1")}) require.NoError(t, err) - err = m.CreateTableOrView(1, "", &model.TableInfo{ID: 4, Name: model.NewCIStr("t2")}) + err = m.CreateTableOrView(1, &model.TableInfo{ID: 4, Name: model.NewCIStr("t2")}) require.NoError(t, err) - err = m.CreateTableOrView(1, "", &model.TableInfo{ID: 5, Name: model.NewCIStr("t3")}) + err = m.CreateTableOrView(1, &model.TableInfo{ID: 5, Name: model.NewCIStr("t3")}) require.NoError(t, err) return nil }) @@ -434,7 +434,7 @@ func TestConcurrentAlloc(t *testing.T) { m := meta.NewMeta(txn) err = m.CreateDatabase(&model.DBInfo{ID: dbID, Name: model.NewCIStr("a")}) require.NoError(t, err) - err = m.CreateTableOrView(dbID, "a", &model.TableInfo{ID: tblID, Name: model.NewCIStr("t")}) + err = m.CreateTableOrView(dbID, &model.TableInfo{ID: tblID, Name: model.NewCIStr("t")}) require.NoError(t, err) return nil }) @@ -520,7 +520,7 @@ func TestRollbackAlloc(t *testing.T) { m := meta.NewMeta(txn) err = m.CreateDatabase(&model.DBInfo{ID: dbID, Name: model.NewCIStr("a")}) require.NoError(t, err) - err = m.CreateTableOrView(dbID, "a", &model.TableInfo{ID: tblID, Name: model.NewCIStr("t")}) + err = m.CreateTableOrView(dbID, &model.TableInfo{ID: tblID, Name: model.NewCIStr("t")}) require.NoError(t, err) return nil }) @@ -570,9 +570,9 @@ func TestAllocComputationIssue(t *testing.T) { m := meta.NewMeta(txn) err = m.CreateDatabase(&model.DBInfo{ID: 1, Name: model.NewCIStr("a")}) require.NoError(t, err) - err = m.CreateTableOrView(1, "a", &model.TableInfo{ID: 1, Name: model.NewCIStr("t")}) + err = m.CreateTableOrView(1, &model.TableInfo{ID: 1, Name: model.NewCIStr("t")}) require.NoError(t, err) - err = m.CreateTableOrView(1, "a", &model.TableInfo{ID: 2, Name: model.NewCIStr("t1")}) + err = m.CreateTableOrView(1, &model.TableInfo{ID: 2, Name: model.NewCIStr("t1")}) require.NoError(t, err) return nil }) @@ -621,7 +621,7 @@ func TestIssue40584(t *testing.T) { m := meta.NewMeta(txn) err = m.CreateDatabase(&model.DBInfo{ID: 1, Name: model.NewCIStr("a")}) require.NoError(t, err) - err = m.CreateTableOrView(1, "a", &model.TableInfo{ID: 1, Name: model.NewCIStr("t")}) + err = m.CreateTableOrView(1, &model.TableInfo{ID: 1, Name: model.NewCIStr("t")}) require.NoError(t, err) return nil }) diff --git a/pkg/meta/autoid/bench_test.go b/pkg/meta/autoid/bench_test.go index cd196440bb012..f2df4e67633c2 100644 --- a/pkg/meta/autoid/bench_test.go +++ b/pkg/meta/autoid/bench_test.go @@ -48,7 +48,7 @@ func BenchmarkAllocator_Alloc(b *testing.B) { if err != nil { return err } - err = m.CreateTableOrView(dbID, "a", &model.TableInfo{ID: tblID, Name: model.NewCIStr("t")}) + err = m.CreateTableOrView(dbID, &model.TableInfo{ID: tblID, Name: model.NewCIStr("t")}) if err != nil { return err } @@ -103,7 +103,7 @@ func BenchmarkAllocator_SequenceAlloc(b *testing.B) { Sequence: seq, } sequenceBase = seq.Start - 1 - err = m.CreateSequenceAndSetSeqValue(1, "a", seqTable, sequenceBase) + err = m.CreateSequenceAndSetSeqValue(1, seqTable, sequenceBase) return err }) if err != nil { diff --git a/pkg/meta/autoid/seq_autoid_test.go b/pkg/meta/autoid/seq_autoid_test.go index da3772ba9d5b6..ae0d4508a1e75 100644 --- a/pkg/meta/autoid/seq_autoid_test.go +++ b/pkg/meta/autoid/seq_autoid_test.go @@ -60,7 +60,7 @@ func TestSequenceAutoid(t *testing.T) { Sequence: seq, } sequenceBase = seq.Start - 1 - err = m.CreateSequenceAndSetSeqValue(1, "a", seqTable, sequenceBase) + err = m.CreateSequenceAndSetSeqValue(1, seqTable, sequenceBase) require.NoError(t, err) return nil }) @@ -189,7 +189,7 @@ func TestConcurrentAllocSequence(t *testing.T) { } else { sequenceBase = seq.Start + 1 } - err1 = m.CreateSequenceAndSetSeqValue(2, "a", seqTable, sequenceBase) + err1 = m.CreateSequenceAndSetSeqValue(2, seqTable, sequenceBase) require.NoError(t, err1) return nil }) diff --git a/pkg/meta/meta.go b/pkg/meta/meta.go index f16af4abf23d6..f11c125f1625f 100644 --- a/pkg/meta/meta.go +++ b/pkg/meta/meta.go @@ -38,6 +38,7 @@ import ( "github.com/pingcap/tidb/pkg/structure" "github.com/pingcap/tidb/pkg/util/dbterror" "github.com/pingcap/tidb/pkg/util/hack" + "github.com/pingcap/tidb/pkg/util/partialjson" ) var ( @@ -70,13 +71,8 @@ var ( mNextGlobalIDKey = []byte("NextGlobalID") mSchemaVersionKey = []byte("SchemaVersionKey") mDBs = []byte("DBs") - mNames = []byte("Names") - mDBNames = []byte("DBNames") - mDBNameInitialized = []byte("DBNameInitialized") - mDDLV2Initialized = []byte("DDLV2Initialized") mDBPrefix = "DB" mTablePrefix = "Table" - mNameSep = []byte("\x00") mSequencePrefix = "SID" mSeqCyclePrefix = "SequenceCycle" mTableIDPrefix = "TID" @@ -176,20 +172,11 @@ func (ver DDLTableVersion) Bytes() []byte { // Option is for Meta option. type Option func(m *Meta) -// WithUpdateTableName is for updating the name of the table. -// Only used for ddl v2. -func WithUpdateTableName() Option { - return func(m *Meta) { - m.needUpdateName = true - } -} - // Meta is for handling meta information in a transaction. type Meta struct { - txn *structure.TxStructure - StartTS uint64 // StartTS is the txn's start TS. - jobListKey JobListKeyType - needUpdateName bool + txn *structure.TxStructure + StartTS uint64 // StartTS is the txn's start TS. + jobListKey JobListKeyType } // NewMeta creates a Meta in transaction txn. @@ -681,9 +668,6 @@ func (m *Meta) CreateDatabase(dbInfo *model.DBInfo) error { if err := m.txn.HSet(mDBs, dbKey, data); err != nil { return errors.Trace(err) } - if m.needUpdateName { - return errors.Trace(m.CreateDatabaseName(dbInfo.Name.L, dbInfo.ID)) - } return nil } @@ -704,7 +688,7 @@ func (m *Meta) UpdateDatabase(dbInfo *model.DBInfo) error { } // CreateTableOrView creates a table with tableInfo in database. -func (m *Meta) CreateTableOrView(dbID int64, dbName string, tableInfo *model.TableInfo) error { +func (m *Meta) CreateTableOrView(dbID int64, tableInfo *model.TableInfo) error { // Check if db exists. dbKey := m.dbKey(dbID) if err := m.checkDBExists(dbKey); err != nil { @@ -725,9 +709,6 @@ func (m *Meta) CreateTableOrView(dbID int64, dbName string, tableInfo *model.Tab if err := m.txn.HSet(dbKey, tableKey, data); err != nil { return errors.Trace(err) } - if m.needUpdateName { - return errors.Trace(m.CreateTableName(dbName, tableInfo.Name.L, tableInfo.ID)) - } return nil } @@ -850,8 +831,8 @@ func (m *Meta) GetSchemaCacheSize() (size uint64, isNull bool, err error) { // CreateTableAndSetAutoID creates a table with tableInfo in database, // and rebases the table autoID. -func (m *Meta) CreateTableAndSetAutoID(dbID int64, dbName string, tableInfo *model.TableInfo, autoIDs AutoIDGroup) error { - err := m.CreateTableOrView(dbID, dbName, tableInfo) +func (m *Meta) CreateTableAndSetAutoID(dbID int64, tableInfo *model.TableInfo, autoIDs AutoIDGroup) error { + err := m.CreateTableOrView(dbID, tableInfo) if err != nil { return errors.Trace(err) } @@ -875,8 +856,8 @@ func (m *Meta) CreateTableAndSetAutoID(dbID int64, dbName string, tableInfo *mod } // CreateSequenceAndSetSeqValue creates sequence with tableInfo in database, and rebase the sequence seqValue. -func (m *Meta) CreateSequenceAndSetSeqValue(dbID int64, dbName string, tableInfo *model.TableInfo, seqValue int64) error { - err := m.CreateTableOrView(dbID, dbName, tableInfo) +func (m *Meta) CreateSequenceAndSetSeqValue(dbID int64, tableInfo *model.TableInfo, seqValue int64) error { + err := m.CreateTableOrView(dbID, tableInfo) if err != nil { return errors.Trace(err) } @@ -914,7 +895,7 @@ func (m *Meta) DropPolicy(policyID int64) error { } // DropDatabase drops whole database. -func (m *Meta) DropDatabase(dbID int64, dbName string) error { +func (m *Meta) DropDatabase(dbID int64) error { // Check if db exists. dbKey := m.dbKey(dbID) if err := m.txn.HClear(dbKey); err != nil { @@ -925,16 +906,13 @@ func (m *Meta) DropDatabase(dbID int64, dbName string) error { return errors.Trace(err) } - if m.needUpdateName { - return errors.Trace(m.DropDatabaseName(dbName)) - } return nil } // DropSequence drops sequence in database. // Sequence is made of table struct and kv value pair. -func (m *Meta) DropSequence(dbID int64, dbName string, tblID int64, tbName string) error { - err := m.DropTableOrView(dbID, dbName, tblID, tbName) +func (m *Meta) DropSequence(dbID int64, tblID int64) error { + err := m.DropTableOrView(dbID, tblID) if err != nil { return err } @@ -949,7 +927,7 @@ func (m *Meta) DropSequence(dbID int64, dbName string, tblID int64, tbName strin // DropTableOrView drops table in database. // If delAutoID is true, it will delete the auto_increment id key-value of the table. // For rename table, we do not need to rename auto_increment id key-value. -func (m *Meta) DropTableOrView(dbID int64, dbName string, tblID int64, tbName string) error { +func (m *Meta) DropTableOrView(dbID int64, tblID int64) error { // Check if db exists. dbKey := m.dbKey(dbID) if err := m.checkDBExists(dbKey); err != nil { @@ -965,9 +943,6 @@ func (m *Meta) DropTableOrView(dbID int64, dbName string, tblID int64, tbName st if err := m.txn.HDel(dbKey, tableKey); err != nil { return errors.Trace(err) } - if m.needUpdateName { - return errors.Trace(m.DropTableName(dbName, tbName)) - } return nil } @@ -1038,20 +1013,23 @@ func (m *Meta) GetMetasByDBID(dbID int64) ([]structure.HashPair, error) { return res, nil } -var checkSubstringsInOrder = [6]string{ +var checkSubstringsInOrder = [7]string{ `"fk_info":null`, `"partition":null`, `"Lock":null`, `"tiflash_replica":null`, + `"temp_table_type":0`, `"policy_ref_info":null`, `"ttl_info":null`, } -// CheckSpecialAttributes checks if the special attributes are in the table info. -// Make it same as hasSpecialAttributes. +// IsTableInfoMustLoad checks the above substrings in a table info's json representing. +// When a table contains one of them, tidb must load the table info during schema full load. +// hasSpecialAttributes() is a subset of it, the difference is that: +// If a table need to be resident in-memory, its table info MUST be loaded. +// If a table info is loaded, it's NOT NECESSARILY to be keep in-memory. // Exported for testing. -// It's the regexp version for hasSpecialAttributes(), please keep up-to-date with it. -func CheckSpecialAttributes(json []byte) bool { +func IsTableInfoMustLoad(json []byte) bool { idx := 0 for _, substr := range checkSubstringsInOrder { idx = bytes.Index(json, hack.Slice(substr)) @@ -1064,7 +1042,7 @@ func CheckSpecialAttributes(json []byte) bool { } // NameExtractRegexp is exported for testing. -const NameExtractRegexp = `"L":"([^"\\]*(?:\\.[^"\\]*)*)"}` +const NameExtractRegexp = `"O":"([^"\\]*(?:\\.[^"\\]*)*)",` // Unescape is exported for testing. func Unescape(s string) string { @@ -1073,9 +1051,9 @@ func Unescape(s string) string { return s } -// GetAllNameToIDAndSpecialAttributeInfo gets all the fields and values and table info for special attributes in a hash. +// GetAllNameToIDAndTheMustLoadedTableInfo gets all the fields and values and table info for special attributes in a hash. // It's used to get some infos for information schema cache in a faster way. -func GetAllNameToIDAndSpecialAttributeInfo(m *Meta, dbID int64) (map[string]int64, []*model.TableInfo, error) { +func GetAllNameToIDAndTheMustLoadedTableInfo(m *Meta, dbID int64) (map[string]int64, []*model.TableInfo, error) { dbKey := m.dbKey(dbID) if err := m.checkDBExists(dbKey); err != nil { return nil, nil, errors.Trace(err) @@ -1101,7 +1079,7 @@ func GetAllNameToIDAndSpecialAttributeInfo(m *Meta, dbID int64) (map[string]int6 key := Unescape(nameLMatch[1]) res[strings.Clone(key)] = int64(id) - if CheckSpecialAttributes(value) { + if IsTableInfoMustLoad(value) { tbInfo := &model.TableInfo{} err = json.Unmarshal(value, tbInfo) if err != nil { @@ -1159,10 +1137,9 @@ func (m *Meta) ListSimpleTables(dbID int64) ([]*model.TableNameInfo, error) { continue } - tbInfo := &model.TableNameInfo{} - err = json.Unmarshal(r.Value, tbInfo) - if err != nil { - return nil, errors.Trace(err) + tbInfo, err2 := FastUnmarshalTableNameInfo(r.Value) + if err2 != nil { + return nil, errors.Trace(err2) } tables = append(tables, tbInfo) @@ -1171,6 +1148,52 @@ func (m *Meta) ListSimpleTables(dbID int64) ([]*model.TableNameInfo, error) { return tables, nil } +var tableNameInfoFields = []string{"id", "name"} + +// FastUnmarshalTableNameInfo is exported for testing. +func FastUnmarshalTableNameInfo(data []byte) (*model.TableNameInfo, error) { + m, err := partialjson.ExtractTopLevelMembers(data, tableNameInfoFields) + if err != nil { + return nil, errors.Trace(err) + } + + idTokens, ok := m["id"] + if !ok { + return nil, errors.New("id field not found in JSON") + } + if len(idTokens) != 1 { + return nil, errors.Errorf("unexpected id field in JSON, %v", idTokens) + } + num, ok := idTokens[0].(json.Number) + if !ok { + return nil, errors.Errorf( + "id field is not a number, got %T %v", idTokens[0], idTokens[0], + ) + } + id, err := num.Int64() + if err != nil { + return nil, errors.Trace(err) + } + + nameTokens, ok := m["name"] + if !ok { + return nil, errors.New("name field not found in JSON") + } + // 6 tokens; {, O, ..., L, ..., }, the data looks like this {123,"O","t","L","t",125} + if len(nameTokens) != 6 { + return nil, errors.Errorf("unexpected name field in JSON, %v", nameTokens) + } + name, ok := nameTokens[2].(string) + if !ok { + return nil, errors.Errorf("unexpected name field in JSON, %v", nameTokens) + } + + return &model.TableNameInfo{ + ID: id, + Name: model.NewCIStr(name), + }, nil +} + // ListDatabases shows all databases. func (m *Meta) ListDatabases() ([]*model.DBInfo, error) { res, err := m.txn.HGetAll(mDBs) @@ -1288,7 +1311,7 @@ func (m *Meta) GetResourceGroup(groupID int64) (*model.ResourceGroupInfo, error) return nil, errors.Trace(err) } if value == nil { - // the default group is not persistanted to tikv by default. + // the default group is not persistent to tikv by default. if groupID == defaultGroupID { return defaultRGroupMeta, nil } @@ -1662,163 +1685,6 @@ func (m *Meta) SetSchemaDiff(diff *model.SchemaDiff) error { return errors.Trace(err) } -// TableNameKey constructs the key for table name. -func (*Meta) TableNameKey(dbName string, tableName string) kv.Key { - var sb strings.Builder - sb.Write(mNames) - sb.WriteByte(':') - sb.WriteString(strings.ToLower(dbName)) - sb.Write(mNameSep) - sb.WriteString(strings.ToLower(tableName)) - return kv.Key(sb.String()) -} - -// DatabaseNameKey constructs the key for database name. -func (*Meta) DatabaseNameKey(dbName string) kv.Key { - var sb strings.Builder - sb.Write(mDBNames) - sb.WriteByte(':') - sb.WriteString(strings.ToLower(dbName)) - return kv.Key(sb.String()) -} - -// CheckTableNameExists checks if the table name exists. -func (m *Meta) CheckTableNameExists(name []byte) error { - v, err := m.txn.Get(name) - if err == nil && v == nil { - err = ErrTableNotExists.FastGenByArgs(string(name)) - } - return errors.Trace(err) -} - -// CheckTableNameNotExists checks if the table name not exists. -func (m *Meta) CheckTableNameNotExists(name []byte) error { - v, err := m.txn.Get(name) - if err == nil && v != nil { - err = ErrTableExists.FastGenByArgs(string(name)) - } - return errors.Trace(err) -} - -// CheckDatabaseNameExists checks if the database name exists. -func (m *Meta) CheckDatabaseNameExists(name []byte) error { - v, err := m.txn.Get(name) - if err == nil && v == nil { - err = ErrDBNotExists.FastGenByArgs(string(name)) - } - return errors.Trace(err) -} - -// CheckDatabaseNameNotExists checks if the database name not exists. -func (m *Meta) CheckDatabaseNameNotExists(name []byte) error { - v, err := m.txn.Get(name) - if err == nil && v != nil { - err = ErrDBExists.FastGenByArgs(string(name)) - } - return errors.Trace(err) -} - -// CreateDatabaseName creates a database name. -// Used by CreateDatabase/RenameDatabase -func (m *Meta) CreateDatabaseName(dbName string, dbID int64) error { - // Check if database exists. - key := m.DatabaseNameKey(dbName) - if err := m.CheckDatabaseNameNotExists(key); err != nil { - return errors.Trace(err) - } - return m.txn.Set(key, []byte(strconv.FormatInt(dbID, 10))) -} - -// CreateTableName creates a table name. -// Used by CreateTable/RenameTable/TruncateTable/RecoverTable/RecoverSchema/CreateView... -func (m *Meta) CreateTableName(dbName string, tableName string, tableID int64) error { - // Check if table exists. - key := m.TableNameKey(dbName, tableName) - if err := m.CheckTableNameNotExists(key); err != nil { - return errors.Trace(err) - } - return m.txn.Set(key, []byte(strconv.FormatInt(tableID, 10))) -} - -// DropTableName drops a table name. -// Used by DropTable/RenameTable/TruncateTable/DropView... -func (m *Meta) DropTableName(dbName string, tableName string) error { - // Check if table exists. - key := m.TableNameKey(dbName, tableName) - if err := m.CheckTableNameExists(key); err != nil { - return errors.Trace(err) - } - return m.txn.Clear(key) -} - -// DropDatabaseName drops a database name. -// Used by DropDatabase. -func (m *Meta) DropDatabaseName(dbName string) error { - // Check if database exists. - key := m.DatabaseNameKey(dbName) - if err := m.CheckDatabaseNameExists(key); err != nil { - return errors.Trace(err) - } - if err := m.txn.Clear(key); err != nil { - return errors.Trace(err) - } - - // iterate all tables - prefix := m.TableNameKey(dbName, "") - return m.txn.Iterate(prefix, prefix.PrefixNext(), func(key []byte, _ []byte) error { - return m.txn.Clear(key) - }) -} - -// ClearAllTableNames clears all table names. -func (m *Meta) ClearAllTableNames() error { - prefix := kv.Key(fmt.Sprintf("%s:", mNames)) - return m.txn.Iterate(prefix, prefix.PrefixNext(), func(key []byte, _ []byte) error { - return m.txn.Clear(key) - }) -} - -// ClearAllDatabaseNames clears all database names. -func (m *Meta) ClearAllDatabaseNames() error { - prefix := kv.Key(fmt.Sprintf("%s:", mDBNames)) - return m.txn.Iterate(prefix, prefix.PrefixNext(), func(key []byte, _ []byte) error { - return m.txn.Clear(key) - }) -} - -// SetFastCreateTableInitialized set fast create table initialized. -func (m *Meta) SetFastCreateTableInitialized(b bool) error { - var data []byte - if b { - data = []byte("1") - } else { - data = []byte("0") - } - if err := m.txn.Set(mDDLV2Initialized, data); err != nil { - return errors.Trace(err) - } - return errors.Trace(m.txn.Set(mDBNameInitialized, data)) -} - -// GetFastCreateTableInitialized gets fast create table initialized. -func (m *Meta) GetFastCreateTableInitialized() (initialized bool, err error) { - val1, err := m.txn.Get(mDDLV2Initialized) - if err != nil { - return false, errors.Trace(err) - } - if len(val1) == 0 { - return false, nil - } - val2, err := m.txn.Get(mDBNameInitialized) - if err != nil { - return false, errors.Trace(err) - } - if len(val2) == 0 { - return false, nil - } - return bytes.Equal(val1, []byte("1")) && bytes.Equal(val2, []byte("1")), nil -} - // GroupRUStats keeps the ru consumption statistics data. type GroupRUStats struct { ID int64 `json:"id"` diff --git a/pkg/meta/meta_test.go b/pkg/meta/meta_test.go index 34ac1e7ec9f1c..da2da89b49d7f 100644 --- a/pkg/meta/meta_test.go +++ b/pkg/meta/meta_test.go @@ -237,7 +237,7 @@ func TestMeta(t *testing.T) { Name: model.NewCIStr("t"), DBID: dbInfo.ID, } - err = m.CreateTableOrView(1, dbInfo.Name.L, tbInfo) + err = m.CreateTableOrView(1, tbInfo) require.NoError(t, err) n, err = m.GetAutoIDAccessors(1, 1).RowID().Inc(10) @@ -248,7 +248,7 @@ func TestMeta(t *testing.T) { require.NoError(t, err) require.Equal(t, int64(10), n) - err = m.CreateTableOrView(1, dbInfo.Name.L, tbInfo) + err = m.CreateTableOrView(1, tbInfo) require.NotNil(t, err) require.True(t, meta.ErrTableExists.Equal(err)) @@ -275,7 +275,7 @@ func TestMeta(t *testing.T) { Name: model.NewCIStr("bb"), DBID: dbInfo.ID, } - err = m.CreateTableOrView(1, dbInfo.Name.L, tbInfo2) + err = m.CreateTableOrView(1, tbInfo2) require.NoError(t, err) tblName := &model.TableNameInfo{ID: tbInfo.ID, Name: tbInfo.Name} @@ -309,7 +309,7 @@ func TestMeta(t *testing.T) { require.NoError(t, err) require.Equal(t, int64(10), n) - err = m.DropTableOrView(1, dbInfo.Name.L, tbInfo2.ID, tbInfo2.Name.L) + err = m.DropTableOrView(1, tbInfo2.ID) require.NoError(t, err) err = m.GetAutoIDAccessors(1, tbInfo2.ID).Del() require.NoError(t, err) @@ -341,7 +341,7 @@ func TestMeta(t *testing.T) { Name: model.NewCIStr("t_rename"), } // Create table. - err = m.CreateTableOrView(1, dbInfo.Name.L, tbInfo100) + err = m.CreateTableOrView(1, tbInfo100) require.NoError(t, err) // Update auto ID. currentDBID := int64(1) @@ -367,7 +367,7 @@ func TestMeta(t *testing.T) { ID: 3, Name: model.NewCIStr("tbl3"), } - err = m.CreateTableAndSetAutoID(1, dbInfo.Name.L, tbInfo3, meta.AutoIDGroup{RowID: 123, IncrementID: 0}) + err = m.CreateTableAndSetAutoID(1, tbInfo3, meta.AutoIDGroup{RowID: 123, IncrementID: 0}) require.NoError(t, err) id, err := m.GetAutoIDAccessors(1, tbInfo3.ID).RowID().Get() require.NoError(t, err) @@ -377,9 +377,9 @@ func TestMeta(t *testing.T) { require.Equal(t, []byte(strconv.FormatInt(1234, 10)), val) require.Equal(t, []byte{0x6d, 0x44, 0x42, 0x3a, 0x31, 0x0, 0x0, 0x0, 0x0, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x68, 0x54, 0x49, 0x44, 0x3a, 0x33, 0x0, 0x0, 0x0, 0xfc}, key) - err = m.DropDatabase(1, dbInfo.Name.L) + err = m.DropDatabase(1) require.NoError(t, err) - err = m.DropDatabase(currentDBID, dbInfo.Name.L) + err = m.DropDatabase(currentDBID) require.NoError(t, err) dbs, err = m.ListDatabases() @@ -655,160 +655,74 @@ func TestCreateMySQLDatabase(t *testing.T) { require.NoError(t, err) } -func TestName(t *testing.T) { - store, err := mockstore.NewMockStore() - require.NoError(t, err) - defer func() { - require.NoError(t, store.Close()) - }() - - txn, err := store.Begin() - require.NoError(t, err) - - // TestDatabaseNameKey - m := meta.NewMeta(txn) - key := m.DatabaseNameKey("db") - require.Equal(t, string(key), "DBNames:db") - - // TestCheckDatabaseNameExists - err = m.CheckDatabaseNameExists(m.DatabaseNameKey("db")) - require.True(t, meta.ErrDBNotExists.Equal(err)) - // TestCheckDatabaseNameNotExists - err = m.CheckDatabaseNameNotExists(m.DatabaseNameKey("db")) - require.NoError(t, err) - // TestCreateDatabase - err = m.CreateDatabaseName("db", 1) - require.NoError(t, err) - err = m.CheckDatabaseNameExists(m.DatabaseNameKey("db")) - require.NoError(t, err) - err = m.CheckDatabaseNameNotExists(m.DatabaseNameKey("db")) - require.True(t, meta.ErrDBExists.Equal(err)) - - // TestTableNameKey - key = m.TableNameKey("db", "tb") - require.Equal(t, string(key), "Names:db\x00tb") - - // TestCheckTableNameExists - err = m.CheckTableNameExists(m.TableNameKey("db", "tb")) - require.True(t, meta.ErrTableNotExists.Equal(err)) - // TestCheckTableNameNotExists - err = m.CheckTableNameNotExists(m.TableNameKey("db", "tb")) - require.NoError(t, err) - - // TestCreateTable - err = m.CreateTableName("db", "tb", 1) - require.NoError(t, err) - err = m.CheckTableNameExists(m.TableNameKey("db", "tb")) - require.NoError(t, err) - err = m.CheckTableNameNotExists(m.TableNameKey("db", "tb")) - require.True(t, meta.ErrTableExists.Equal(err)) - err = m.CreateTableName("db", "t", 2) - require.NoError(t, err) - - err = m.CreateTableName("db", "tb", 3) - require.True(t, meta.ErrTableExists.Equal(err)) - - err = m.CreateDatabaseName("d", 4) - require.NoError(t, err) - err = m.CreateTableName("d", "btb", 3) - require.NoError(t, err) - err = m.CheckTableNameExists(m.TableNameKey("d", "btb")) - require.NoError(t, err) - - // TestDropTableName - err = m.DropTableName("db1", "b") - require.True(t, meta.ErrTableNotExists.Equal(err)) - err = m.DropTableName("db", "tb") - require.NoError(t, err) - - // TestDropDatabaseName - err = m.DropDatabaseName("xx") - require.True(t, meta.ErrDBNotExists.Equal(err)) - err = m.DropDatabaseName("d") - require.NoError(t, err) - err = m.CheckTableNameNotExists(m.TableNameKey("d", "btb")) - require.NoError(t, err) - err = m.CheckTableNameExists(m.TableNameKey("db", "t")) - require.NoError(t, err) - - // TestClearAllTableNames - err = m.ClearAllTableNames() - require.NoError(t, err) - err = m.CheckTableNameNotExists(m.TableNameKey("db1", "t")) - require.NoError(t, err) - - // TestClearAllDatabaseNames - err = m.ClearAllDatabaseNames() - require.NoError(t, err) - - // TestFastCreateTableInitialized - v, err := m.GetFastCreateTableInitialized() - require.NoError(t, err) - require.Equal(t, v, false) - err = m.SetFastCreateTableInitialized(true) - require.NoError(t, err) - v, err = m.GetFastCreateTableInitialized() - require.NoError(t, err) - require.Equal(t, v, true) - err = m.SetFastCreateTableInitialized(false) - require.NoError(t, err) - v, err = m.GetFastCreateTableInitialized() - require.NoError(t, err) - require.Equal(t, v, false) - - err = txn.Rollback() - require.NoError(t, err) -} - -func TestCheckSpecialAttributes(t *testing.T) { +func TestIsTableInfoMustLoad(t *testing.T) { tableInfo := &model.TableInfo{ TTLInfo: &model.TTLInfo{IntervalExprStr: "1", IntervalTimeUnit: int(ast.TimeUnitDay), JobInterval: "1h"}, } b, err := json.Marshal(tableInfo) require.NoError(t, err) - require.True(t, meta.CheckSpecialAttributes(b)) + require.True(t, meta.IsTableInfoMustLoad(b)) tableInfo = &model.TableInfo{ TiFlashReplica: &model.TiFlashReplicaInfo{Count: 1}, } b, err = json.Marshal(tableInfo) require.NoError(t, err) - require.True(t, meta.CheckSpecialAttributes(b)) + require.True(t, meta.IsTableInfoMustLoad(b)) tableInfo = &model.TableInfo{ PlacementPolicyRef: &model.PolicyRefInfo{ID: 1}, } b, err = json.Marshal(tableInfo) require.NoError(t, err) - require.True(t, meta.CheckSpecialAttributes(b)) + require.True(t, meta.IsTableInfoMustLoad(b)) tableInfo = &model.TableInfo{ Partition: &model.PartitionInfo{Expr: "a"}, } b, err = json.Marshal(tableInfo) require.NoError(t, err) - require.True(t, meta.CheckSpecialAttributes(b)) + require.True(t, meta.IsTableInfoMustLoad(b)) tableInfo = &model.TableInfo{ Lock: &model.TableLockInfo{State: model.TableLockStatePreLock}, } b, err = json.Marshal(tableInfo) require.NoError(t, err) - require.True(t, meta.CheckSpecialAttributes(b)) + require.True(t, meta.IsTableInfoMustLoad(b)) tableInfo = &model.TableInfo{ ForeignKeys: []*model.FKInfo{{ID: 1}}, } b, err = json.Marshal(tableInfo) require.NoError(t, err) - require.True(t, meta.CheckSpecialAttributes(b)) + require.True(t, meta.IsTableInfoMustLoad(b)) + + tableInfo = &model.TableInfo{ + TempTableType: model.TempTableGlobal, + } + b, err = json.Marshal(tableInfo) + require.NoError(t, err) + require.True(t, meta.IsTableInfoMustLoad(b)) tableInfo = &model.TableInfo{ ID: 123, } b, err = json.Marshal(tableInfo) require.NoError(t, err) - require.False(t, meta.CheckSpecialAttributes(b)) + require.False(t, meta.IsTableInfoMustLoad(b)) +} + +func TestIsTableInfoMustLoadSubStringsOrder(t *testing.T) { + // The order matter! + // IsTableInfoMustLoad relies on the order of the json marshal result, + // or the internal of the json marshal in other words. + // This test cover the invariance, if Go std library changes, we can catch it. + tableInfo := &model.TableInfo{} + b, err := json.Marshal(tableInfo) + require.NoError(t, err) + expect := `{"id":0,"name":{"O":"","L":""},"charset":"","collate":"","cols":null,"index_info":null,"constraint_info":null,"fk_info":null,"state":0,"pk_is_handle":false,"is_common_handle":false,"common_handle_version":0,"comment":"","auto_inc_id":0,"auto_id_cache":0,"auto_rand_id":0,"max_col_id":0,"max_idx_id":0,"max_fk_id":0,"max_cst_id":0,"update_timestamp":0,"ShardRowIDBits":0,"max_shard_row_id_bits":0,"auto_random_bits":0,"auto_random_range_bits":0,"pre_split_regions":0,"partition":null,"compression":"","view":null,"sequence":null,"Lock":null,"version":0,"tiflash_replica":null,"is_columnar":false,"temp_table_type":0,"cache_table_status":0,"policy_ref_info":null,"stats_options":null,"exchange_partition_info":null,"ttl_info":null,"revision":0}` + require.Equal(t, string(b), expect) } func TestTableNameExtract(t *testing.T) { @@ -851,10 +765,9 @@ func TestTableNameExtract(t *testing.T) { require.Equal(t, `"\"啊"`, meta.Unescape(nameLMatch[1])) } -func BenchmarkCheckSpecialAttributes(b *testing.B) { - benchCases := [][2]string{ - {"narrow", `CREATE TABLE t (c INT PRIMARY KEY);`}, - {"wide", ` +var benchCases = [][2]string{ + {"narrow", `CREATE TABLE t (c INT PRIMARY KEY);`}, + {"wide", ` CREATE TABLE t ( c BIGINT PRIMARY KEY AUTO_RANDOM, c2 TINYINT, @@ -875,16 +788,17 @@ CREATE TABLE t ( UNIQUE INDEX idx4(c12), INDEX idx5((c + c2)) );`}, - } +} +func BenchmarkIsTableInfoMustLoad(b *testing.B) { for _, benchCase := range benchCases { b.Run(benchCase[0], func(b *testing.B) { - benchCheckSpecialAttributes(b, benchCase[1]) + benchIsTableInfoMustLoad(b, benchCase[1]) }) } } -func benchCheckSpecialAttributes(b *testing.B, sql string) { +func getTableInfoJSON(b *testing.B, sql string) []byte { p := parser.New() stmt, err := p.ParseOneStmt(sql, "", "") require.NoError(b, err) @@ -894,9 +808,51 @@ func benchCheckSpecialAttributes(b *testing.B, sql string) { data, err := json.Marshal(tblInfo) require.NoError(b, err) + return data +} + +func benchIsTableInfoMustLoad(b *testing.B, sql string) { + data := getTableInfoJSON(b, sql) + b.ResetTimer() for i := 0; i < b.N; i++ { - got := meta.CheckSpecialAttributes(data) + got := meta.IsTableInfoMustLoad(data) intest.Assert(!got) } } + +func BenchmarkTableNameInfo(b *testing.B) { + for _, benchCase := range benchCases { + b.Run(benchCase[0]+"-json", func(b *testing.B) { + benchJSONTableNameInfo(b, benchCase[1]) + }) + b.Run(benchCase[0]+"-fastjson", func(b *testing.B) { + benchFastJSONTableNameInfo(b, benchCase[1]) + }) + } +} + +func benchJSONTableNameInfo(b *testing.B, sql string) { + data := getTableInfoJSON(b, sql) + + b.ResetTimer() + for i := 0; i < b.N; i++ { + tbInfo := &model.TableNameInfo{} + err := json.Unmarshal(data, tbInfo) + intest.Assert(tbInfo.ID == 1) + intest.Assert(tbInfo.Name.L == "t") + intest.AssertNoError(err) + } +} + +func benchFastJSONTableNameInfo(b *testing.B, sql string) { + data := getTableInfoJSON(b, sql) + + b.ResetTimer() + for i := 0; i < b.N; i++ { + tbInfo, err := meta.FastUnmarshalTableNameInfo(data) + intest.AssertNoError(err) + intest.Assert(tbInfo.ID == 1) + intest.Assert(tbInfo.Name.L == "t") + } +} diff --git a/pkg/metrics/ddl.go b/pkg/metrics/ddl.go index 0a899fb3fc311..7e4973f55f007 100644 --- a/pkg/metrics/ddl.go +++ b/pkg/metrics/ddl.go @@ -43,7 +43,7 @@ var ( OwnerHandleSyncerHistogram *prometheus.HistogramVec - // Metrics for ddl_worker.go. + // Metrics for job_worker.go. WorkerNotifyDDLJob = "notify_job" WorkerAddDDLJob = "add_job" WorkerRunDDLJob = "run_job" diff --git a/pkg/metrics/grafana/performance_overview.json b/pkg/metrics/grafana/performance_overview.json index 8d5ae505a3253..4845b53fe97b6 100644 --- a/pkg/metrics/grafana/performance_overview.json +++ b/pkg/metrics/grafana/performance_overview.json @@ -1192,20 +1192,24 @@ "dashes": false, "datasource": "${DS_TEST-CLUSTER}", "decimals": null, - "description": "- avg: average cpu usage for all instance.\n- delta: max(cpu utilization) - min(cpu utilization)\n- max: max(cpu utilization)", + "description": "1. CPU: CPU utilization for all TiDB instances.\n- CPU-Avg: avg(cpu utilization)\n- CPU-Delta: max(cpu utilization) - min(cpu utilization)\n- CPU-Max: max(cpu utilization)\n2. Max memory usage", "editable": true, "error": false, + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, "fill": 1, "fillGradient": 0, "grid": {}, "gridPos": { - "h": 7, - "w": 12, + "h": 8, + "w": 8, "x": 0, "y": 22 }, "hiddenSeries": false, - "id": 181, + "id": 23763572004, "legend": { "alignAsTable": true, "avg": true, @@ -1227,47 +1231,74 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "8.0.7", + "pluginVersion": "7.5.17", "pointradius": 5, "points": false, "renderer": "flot", - "seriesOverrides": [], + "seriesOverrides": [ + { + "$$hashKey": "object:371", + "alias": "Mem-Max", + "yaxis": 2 + } + ], "spaceLength": 10, "stack": false, "steppedLine": false, "targets": [ { "exemplar": true, - "expr": "avg(rate(process_cpu_seconds_total{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\",job=\"tidb\"}[1m]))", + "expr": "avg(rate(process_cpu_seconds_total{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\", job=\"tidb\"}[1m]))", "format": "time_series", + "hide": false, "interval": "", - "intervalFactor": 1, - "legendFormat": "avg", + "intervalFactor": 2, + "legendFormat": "CPU-Avg", "refId": "A", "step": 30 }, { "exemplar": true, - "expr": "max(rate(process_cpu_seconds_total{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\",job=\"tidb\"}[1m]))", + "expr": "max(rate(process_cpu_seconds_total{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\", job=\"tidb\"}[1m]))", "hide": false, "interval": "", - "legendFormat": "max", + "intervalFactor": 1, + "legendFormat": "CPU-Max", "refId": "C" }, { "exemplar": true, - "expr": "(max(rate(process_cpu_seconds_total{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", job=\"tidb\"}[1m])) - min(rate(process_cpu_seconds_total{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", job=\"tidb\"}[1m])))", + "expr": "(max(rate(process_cpu_seconds_total{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\", job=\"tidb\"}[1m])) - min(rate(process_cpu_seconds_total{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\", job=\"tidb\"}[1m])))", "hide": false, "interval": "", - "legendFormat": "delta", + "legendFormat": "CPU-Delta", "refId": "B" + }, + { + "exemplar": true, + "expr": "max(tidb_server_maxprocs{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\", job=\"tidb\"})", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 2, + "legendFormat": "CPU-Quota", + "refId": "D", + "step": 30 + }, + { + "exemplar": true, + "expr": "max(sum((process_resident_memory_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", job=~\"tidb\"})) by (instance))", + "hide": false, + "interval": "", + "legendFormat": "Mem-Max", + "refId": "E" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "TiDB CPU", + "title": "TiDB CPU/Memory", "tooltip": { "msResolution": false, "shared": true, @@ -1284,23 +1315,24 @@ }, "yaxes": [ { - "$$hashKey": "object:188", + "$$hashKey": "object:208", "decimals": null, "format": "percentunit", - "label": null, + "label": "CPU (%)", "logBase": 1, "max": null, "min": "0", "show": true }, { - "$$hashKey": "object:189", - "format": "short", - "label": null, + "$$hashKey": "object:209", + "decimals": null, + "format": "bytes", + "label": "Memory", "logBase": 1, "max": null, - "min": null, - "show": false + "min": "0", + "show": true } ], "yaxis": { @@ -1315,20 +1347,24 @@ "dashes": false, "datasource": "${DS_TEST-CLUSTER}", "decimals": null, - "description": "1. CPU: CPU utilization for all TiKV instances.\n- CPU-Avg: avg(cpu utilization)\n- CPU-Delta: max(cpu utilization) - min(cpu utilization)\n- CPU-Max: max(cpu utilization)\n2. IO MBps: The total bytes of read and write in all TiKV instances", + "description": "1. CPU: CPU utilization for all TiKV instances.\n- CPU-Avg: avg(cpu utilization)\n- CPU-Delta: max(cpu utilization) - min(cpu utilization)\n- CPU-Max: max(cpu utilization)\n2. Max memory usage", "editable": true, "error": false, + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, "fill": 1, "fillGradient": 0, "grid": {}, "gridPos": { - "h": 7, - "w": 12, - "x": 12, + "h": 8, + "w": 8, + "x": 8, "y": 22 }, "hiddenSeries": false, - "id": 182, + "id": 23763572003, "legend": { "alignAsTable": true, "avg": true, @@ -1350,24 +1386,14 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "8.0.7", + "pluginVersion": "7.5.17", "pointradius": 5, "points": false, "renderer": "flot", "seriesOverrides": [ { "$$hashKey": "object:371", - "alias": "IO-Avg", - "yaxis": 2 - }, - { - "$$hashKey": "object:563", - "alias": "IO-Max", - "yaxis": 2 - }, - { - "$$hashKey": "object:576", - "alias": "IO-Delta", + "alias": "Mem-Max", "yaxis": 2 } ], @@ -1405,35 +1431,160 @@ }, { "exemplar": true, - "expr": "avg(sum(rate(tikv_engine_flow_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", db=\"kv\", type=~\"wal_file_bytes|bytes_read|iter_bytes_read\"}[1m])) by (instance))", + "expr": "max(tikv_server_cpu_cores_quota{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\", job=~\".*tikv\"})", "hide": false, - "instant": false, "interval": "", - "legendFormat": "IO-Avg", + "legendFormat": "CPU-Quota", "refId": "D" }, { "exemplar": true, - "expr": "max(sum(rate(tikv_engine_flow_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", db=\"kv\", type=~\"wal_file_bytes|bytes_read|iter_bytes_read\"}[1m])) by (instance))", + "expr": "max(sum((process_resident_memory_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", job=~\".*tikv\"})) by (instance))", "hide": false, "interval": "", - "legendFormat": "IO-Max", + "legendFormat": "Mem-Max", "refId": "E" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "TiKV CPU/Memory", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:208", + "decimals": null, + "format": "percentunit", + "label": "CPU (%)", + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "$$hashKey": "object:209", + "decimals": null, + "format": "bytes", + "label": "Memory", + "logBase": 1, + "max": null, + "min": "0", + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_TEST-CLUSTER}", + "decimals": null, + "description": "1. CPU: CPU utilization for pd instances.\n- CPU-Max: max(cpu utilization)\n2. Max memory usage", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 8, + "w": 8, + "x": 16, + "y": 22 + }, + "hiddenSeries": false, + "id": 182, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null as zero", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.17", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [ + { + "$$hashKey": "object:371", + "alias": "Mem-Max", + "yaxis": 2 + } + ], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": true, + "expr": "max(rate(process_cpu_seconds_total{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\",job=~\".*(pd|tso|scheduling).*\"}[1m]))", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "CPU-Max", + "refId": "C" }, { "exemplar": true, - "expr": "max(sum(rate(tikv_engine_flow_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", db=\"kv\", type=~\"wal_file_bytes|bytes_read|iter_bytes_read\"}[1m])) by (instance)) - min(sum(rate(tikv_engine_flow_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", db=\"kv\", type=~\"wal_file_bytes|bytes_read|iter_bytes_read\"}[1m])) by (instance))", + "expr": "max(pd_service_maxprocs{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\",job=~\".*(pd|tso|scheduling).*\"})", "hide": false, "interval": "", - "legendFormat": "IO-Delta", - "refId": "F" + "intervalFactor": 1, + "legendFormat": "CPU-Quota", + "refId": "A" + }, + { + "exemplar": true, + "expr": "max(process_resident_memory_bytes{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\",job=~\".*(pd|tso|scheduling).*\"})", + "hide": false, + "interval": "", + "legendFormat": "Mem-Max", + "refId": "E" } ], "thresholds": [], "timeFrom": null, "timeRegions": [], "timeShift": null, - "title": "TiKV CPU/IO MBps", + "title": "PD CPU/Memory", "tooltip": { "msResolution": false, "shared": true, @@ -1462,12 +1613,269 @@ { "$$hashKey": "object:209", "decimals": null, + "format": "bytes", + "label": "Memory", + "logBase": 1, + "max": null, + "min": "0", + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_TEST-CLUSTER}", + "decimals": null, + "description": "Out traffic statistics From TiDB to the client.\nRead Flow between TiKV and Rocksdb.", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 30 + }, + "hiddenSeries": false, + "id": 23763572000, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null as zero", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.17", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": true, + "expr": "sum(rate(tidb_server_packet_io_bytes{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\", type=~\"Out|read\"}[1m])) by (type)", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "TiDB -> Client", + "refId": "A", + "step": 30 + }, + { + "exemplar": true, + "expr": "sum(rate(tikv_engine_flow_bytes{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\", db=\"kv\", type=~\"bytes_read|iter_bytes_read\"}[1m]))", + "hide": false, + "interval": "", + "legendFormat": "Rocksdb -> TiKV", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Read Traffic", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:188", + "decimals": null, "format": "Bps", - "label": "MBps ", + "label": null, "logBase": 1, "max": null, "min": "0", "show": true + }, + { + "$$hashKey": "object:189", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "${DS_TEST-CLUSTER}", + "decimals": null, + "description": "Write traffic statistics between from Client to TiDB , the txn write rate from TiDB to TiKV, and the write flow from TiKV to RocksDB.", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 30 + }, + "hiddenSeries": false, + "id": 23763572002, + "legend": { + "alignAsTable": true, + "avg": true, + "current": false, + "hideEmpty": true, + "hideZero": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null as zero", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.5.17", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "exemplar": true, + "expr": "sum(rate(tidb_server_packet_io_bytes{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\", type=~\"In|write\"}[1m])) by (type)", + "hide": false, + "interval": "", + "legendFormat": "Client -> TiDB", + "refId": "C" + }, + { + "exemplar": true, + "expr": "sum(rate(tidb_tikvclient_txn_write_size_bytes_sum{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\"}[30s])) by (scope)", + "hide": false, + "interval": "", + "legendFormat": "TiDB -> TiKV: {{scope}}", + "refId": "D" + }, + { + "exemplar": true, + "expr": "sum(rate(tikv_engine_flow_bytes{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\", db=\"kv\", type=\"wal_file_bytes\"}[1m]))", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "TiKV -> Rocksdb", + "refId": "A", + "step": 30 + }, + { + "exemplar": true, + "expr": "sum(rate(tikv_engine_compaction_flow_bytes{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\", type=~\"bytes_read|bytes_written\"}[1m]))", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "RocksDB Compaction", + "refId": "B", + "step": 30 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Write Traffic", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 0, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:188", + "decimals": null, + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "$$hashKey": "object:189", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false } ], "yaxis": { @@ -1482,13 +1890,17 @@ "dashes": false, "datasource": "${DS_TEST-CLUSTER}", "description": "TiDB query durations", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, "fill": 1, "fillGradient": 0, "gridPos": { "h": 6, "w": 8, "x": 0, - "y": 29 + "y": 37 }, "hiddenSeries": false, "id": 80, @@ -1513,7 +1925,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "8.0.7", + "pluginVersion": "7.5.17", "pointradius": 5, "points": false, "renderer": "flot", @@ -1602,6 +2014,10 @@ "description": "TiDB connection idle durations", "editable": true, "error": false, + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, "fill": 1, "fillGradient": 0, "grid": {}, @@ -1609,7 +2025,7 @@ "h": 6, "w": 8, "x": 8, - "y": 29 + "y": 37 }, "hiddenSeries": false, "id": 171, @@ -1635,7 +2051,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "8.0.7", + "pluginVersion": "7.5.17", "pointradius": 5, "points": false, "renderer": "flot", @@ -1735,6 +2151,10 @@ "description": "TiDB current connection counts", "editable": true, "error": false, + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, "fill": 1, "fillGradient": 0, "grid": {}, @@ -1742,7 +2162,7 @@ "h": 6, "w": 8, "x": 16, - "y": 29 + "y": 37 }, "hiddenSeries": false, "id": 188, @@ -1769,7 +2189,7 @@ "alertThreshold": true }, "percentage": false, - "pluginVersion": "8.0.7", + "pluginVersion": "7.5.17", "pointradius": 5, "points": false, "renderer": "flot", diff --git a/pkg/metrics/grafana/tidb_resource_control.json b/pkg/metrics/grafana/tidb_resource_control.json index f5bc16dd4837f..976947f43ee45 100644 --- a/pkg/metrics/grafana/tidb_resource_control.json +++ b/pkg/metrics/grafana/tidb_resource_control.json @@ -225,9 +225,17 @@ "editorMode": "code", "expr": "sum(resource_manager_resource_unit_read_request_unit_max_per_sec{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\"}) by (resource_group)", "hide": false, - "legendFormat": "{{resource_group}}", + "legendFormat": "{{resource_group}}-read", "range": true, - "refId": "C" + "refId": "A" + }, + { + "editorMode": "code", + "expr": "sum(resource_manager_resource_unit_write_request_unit_max_per_sec{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\"}) by (resource_group)", + "hide": false, + "legendFormat": "{{resource_group}}-write", + "range": true, + "refId": "B" } ], "thresholds": [], diff --git a/pkg/metrics/grafana/tidb_runtime.json b/pkg/metrics/grafana/tidb_runtime.json index bbc6b33d4fb67..ef5a4b8bca8ca 100644 --- a/pkg/metrics/grafana/tidb_runtime.json +++ b/pkg/metrics/grafana/tidb_runtime.json @@ -65,7 +65,7 @@ "dashLength": 10, "dashes": false, "datasource": "${DS_TEST-CLUSTER}", - "description": "TiDB process rss memory usage. TiDB heap memory size in use ", + "description": "This panel visualizes the memory usage of TiDB processes, including both resident set size (RSS) and various components of memory", "editable": true, "error": false, "fill": 0, @@ -76,6 +76,7 @@ "x": 0, "y": 1 }, + "hiddenSeries": false, "id": 4, "legend": { "alignAsTable": false, @@ -105,27 +106,57 @@ "repeatDirection": "h", "seriesOverrides": [ { - "alias": "alloc-from-os", - "fill": 3, + "$$hashKey": "object:91", + "alias": "rss", + "bars": false, + "color": "#37872D", "lines": true, "stack": false }, { - "alias": "gc-threshold", + "$$hashKey": "object:92", + "alias": "tidb_server_memory_limit", "bars": false, "color": "#C4162A", "lines": true, - "linewidth": 2, "stack": false }, { - "alias": "gc", + "$$hashKey": "object:215", + "alias": "heap_inuse", + "color": "#96D98D" + }, + { + "$$hashKey": "object:247", + "alias": "stack_inuse", + "color": "#F2CC0C" + }, + { + "$$hashKey": "object:261", + "alias": "heap_unused", + "color": "#3274D9" + }, + { + "$$hashKey": "object:273", + "alias": "go_runtime_metadata", + "color": "#FF780A" + }, + { + "$$hashKey": "object:283", + "alias": "other_memory", + "color": "#E02F44" + }, + { + "$$hashKey": "object:297", + "alias": "free_mem_reserved_by_go", + "color": "rgb(112, 3, 166)" + }, + { + "$$hashKey": "object:321", + "alias": "returned_to_os", "bars": false, - "color": "#C4162A", - "hideTooltip": true, - "legend": false, - "pointradius": 3, - "points": true, + "color": "#3274D9", + "lines": true, "stack": false } ], @@ -134,76 +165,94 @@ "steppedLine": false, "targets": [ { + "exemplar": true, "expr": "process_resident_memory_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"}", "format": "time_series", "hide": false, + "interval": "", "intervalFactor": 1, - "legendFormat": "alloc-from-os", + "legendFormat": "rss", "refId": "A" }, { - "expr": "go_memstats_next_gc_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"} / (1 + tidb_server_gogc{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"} / 100)", + "exemplar": true, + "expr": "go_memory_classes_heap_objects_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"}", "format": "time_series", "hide": false, + "interval": "", "intervalFactor": 1, - "legendFormat": "estimate-inuse", - "refId": "I" + "legendFormat": "heap_inuse", + "refId": "B" }, { - "expr": "go_memstats_alloc_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"}", + "exemplar": true, + "expr": "go_memory_classes_heap_stacks_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"}", "format": "time_series", "hide": false, + "interval": "", "intervalFactor": 1, - "legendFormat": "go-memstats-inuse", - "refId": "H" + "legendFormat": "stack_inuse", + "refId": "C" }, { - "expr": "go_memstats_heap_alloc_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"} - go_memstats_next_gc_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"} / (1 + tidb_server_gogc{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"} / 100)", + "exemplar": true, + "expr": "go_memory_classes_heap_unused_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"}", "format": "time_series", "hide": false, + "interval": "", "intervalFactor": 1, - "legendFormat": "estimate-garbage", - "refId": "C" + "legendFormat": "heap_unused", + "refId": "D" }, { - "expr": "go_memstats_heap_idle_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"} - go_memstats_heap_released_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"} + go_memstats_heap_inuse_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"} - go_memstats_heap_alloc_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"}", + "exemplar": true, + "expr": "go_memory_classes_metadata_mcache_free_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"}+go_memory_classes_metadata_mcache_inuse_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"}+go_memory_classes_metadata_mspan_free_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"}+go_memory_classes_metadata_mspan_inuse_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"}+go_memory_classes_metadata_other_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"}", "format": "time_series", "hide": false, + "interval": "", "intervalFactor": 1, - "legendFormat": "reserved-by-go", - "refId": "B" + "legendFormat": "go_runtime_metadata", + "refId": "E" }, { - "expr": "go_memstats_stack_sys_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"} + go_memstats_mspan_sys_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"} + go_memstats_mcache_sys_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"} + go_memstats_buck_hash_sys_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"} + go_memstats_gc_sys_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"} + go_memstats_other_sys_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"}", + "exemplar": true, + "expr": "go_memory_classes_os_stacks_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"}+go_memory_classes_other_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"}+go_memory_classes_profiling_buckets_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"}", "format": "time_series", "hide": false, + "interval": "", "intervalFactor": 1, - "legendFormat": "used-by-go", - "refId": "D" + "legendFormat": "other_memory", + "refId": "F" }, { - "expr": "go_memstats_next_gc_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"}", + "exemplar": true, + "expr": "go_memory_classes_heap_free_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"}", "format": "time_series", "hide": false, + "interval": "", "intervalFactor": 1, - "legendFormat": "gc-threshold", - "refId": "E" + "legendFormat": "free_mem_reserved_by_go", + "refId": "G" }, { - "expr": "(clamp_max(idelta(go_memstats_last_gc_time_seconds{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"}[1m]), 1) * go_memstats_next_gc_bytes{k8s_cluster=\"$k8s_cluster\",tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\"}) > 0", + "exemplar": true, + "expr": "tidb_server_memory_quota_bytes{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\", job=\"tidb\"}", "format": "time_series", - "hide": false, + "hide": true, + "interval": "", "intervalFactor": 1, - "legendFormat": "gc", - "refId": "F" + "legendFormat": "tidb_server_memory_limit", + "refId": "H" }, { - "expr": "tidb_server_memory_quota_bytes{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\", job=\"tidb\"}", + "exemplar": true, + "expr": "go_memory_classes_heap_released_bytes{k8s_cluster=\"$k8s_cluster\", tidb_cluster=\"$tidb_cluster\", instance=~\"$instance\", job=\"tidb\"}", "format": "time_series", "hide": false, + "interval": "", "intervalFactor": 1, - "legendFormat": "quota", - "refId": "G" + "legendFormat": "returned_to_os", + "refId": "I" } ], "thresholds": [], diff --git a/pkg/metrics/metrics.go b/pkg/metrics/metrics.go index a6a494b92092f..a2f2de523c11e 100644 --- a/pkg/metrics/metrics.go +++ b/pkg/metrics/metrics.go @@ -171,6 +171,8 @@ func RegisterMetrics() { prometheus.MustRegister(PseudoEstimation) prometheus.MustRegister(PacketIOCounter) prometheus.MustRegister(QueryDurationHistogram) + prometheus.MustRegister(QueryRPCHistogram) + prometheus.MustRegister(QueryProcessedKeyHistogram) prometheus.MustRegister(QueryTotalCounter) prometheus.MustRegister(AffectedRowsCounter) prometheus.MustRegister(SchemaLeaseErrorCounter) diff --git a/pkg/metrics/server.go b/pkg/metrics/server.go index 09d9b5ee3e838..d3d60e4b5657e 100644 --- a/pkg/metrics/server.go +++ b/pkg/metrics/server.go @@ -27,15 +27,17 @@ var ( // Metrics var ( - PacketIOCounter *prometheus.CounterVec - QueryDurationHistogram *prometheus.HistogramVec - QueryTotalCounter *prometheus.CounterVec - AffectedRowsCounter *prometheus.CounterVec - ConnGauge *prometheus.GaugeVec - DisconnectionCounter *prometheus.CounterVec - PreparedStmtGauge prometheus.Gauge - ExecuteErrorCounter *prometheus.CounterVec - CriticalErrorCounter prometheus.Counter + PacketIOCounter *prometheus.CounterVec + QueryDurationHistogram *prometheus.HistogramVec + QueryRPCHistogram *prometheus.HistogramVec + QueryProcessedKeyHistogram *prometheus.HistogramVec + QueryTotalCounter *prometheus.CounterVec + AffectedRowsCounter *prometheus.CounterVec + ConnGauge *prometheus.GaugeVec + DisconnectionCounter *prometheus.CounterVec + PreparedStmtGauge prometheus.Gauge + ExecuteErrorCounter *prometheus.CounterVec + CriticalErrorCounter prometheus.Counter ServerStart = "server-start" ServerStop = "server-stop" @@ -92,6 +94,24 @@ func InitServerMetrics() { Buckets: prometheus.ExponentialBuckets(0.0005, 2, 29), // 0.5ms ~ 1.5days }, []string{LblSQLType, LblDb, LblResourceGroup}) + QueryRPCHistogram = NewHistogramVec( + prometheus.HistogramOpts{ + Namespace: "tidb", + Subsystem: "server", + Name: "query_statement_rpc_count", + Help: "Bucketed histogram of execution rpc count of handled query statements.", + Buckets: prometheus.ExponentialBuckets(1, 1.5, 23), // 1 ~ 8388608 + }, []string{LblSQLType, LblDb}) + + QueryProcessedKeyHistogram = NewHistogramVec( + prometheus.HistogramOpts{ + Namespace: "tidb", + Subsystem: "server", + Name: "query_statement_processed_keys", + Help: "Bucketed histogram of processed key count during the scan of handled query statements.", + Buckets: prometheus.ExponentialBuckets(1, 2, 32), + }, []string{LblSQLType, LblDb}) + QueryTotalCounter = NewCounterVec( prometheus.CounterOpts{ Namespace: "tidb", diff --git a/pkg/parser/ast/ddl.go b/pkg/parser/ast/ddl.go index 90af3c4e3c2c9..0c39cbfceaf9a 100644 --- a/pkg/parser/ast/ddl.go +++ b/pkg/parser/ast/ddl.go @@ -573,6 +573,9 @@ func (n *ColumnOption) Restore(ctx *format.RestoreCtx) error { return nil }) } + if n.StrValue == "Global" { + ctx.WriteKeyWord(" GLOBAL") + } case ColumnOptionNotNull: ctx.WriteKeyWord("NOT NULL") case ColumnOptionAutoIncrement: @@ -596,6 +599,9 @@ func (n *ColumnOption) Restore(ctx *format.RestoreCtx) error { } case ColumnOptionUniqKey: ctx.WriteKeyWord("UNIQUE KEY") + if n.StrValue == "Global" { + ctx.WriteKeyWord(" GLOBAL") + } case ColumnOptionNull: ctx.WriteKeyWord("NULL") case ColumnOptionOnUpdate: @@ -715,8 +721,10 @@ const ( // | index_type // | WITH PARSER parser_name // | COMMENT 'string' +// | GLOBAL // // See http://dev.mysql.com/doc/refman/5.7/en/create-table.html +// with the addition of Global Index type IndexOption struct { node @@ -726,6 +734,22 @@ type IndexOption struct { ParserName model.CIStr Visibility IndexVisibility PrimaryKeyTp model.PrimaryKeyType + Global bool +} + +// IsEmpty is true if only default options are given +// and it should not be added to the output +func (n *IndexOption) IsEmpty() bool { + if n.PrimaryKeyTp != model.PrimaryKeyTypeDefault || + n.KeyBlockSize > 0 || + n.Tp != model.IndexTypeInvalid || + len(n.ParserName.O) > 0 || + n.Comment != "" || + n.Global || + n.Visibility != IndexVisibilityDefault { + return false + } + return true } // Restore implements Node interface. @@ -774,6 +798,17 @@ func (n *IndexOption) Restore(ctx *format.RestoreCtx) error { hasPrevOption = true } + if n.Global { + if hasPrevOption { + ctx.WritePlain(" ") + } + _ = ctx.WriteWithSpecialComments(tidb.FeatureIDGlobalIndex, func() error { + ctx.WriteKeyWord("GLOBAL") + return nil + }) + hasPrevOption = true + } + if n.Visibility != IndexVisibilityDefault { if hasPrevOption { ctx.WritePlain(" ") @@ -920,7 +955,7 @@ func (n *Constraint) Restore(ctx *format.RestoreCtx) error { } } - if n.Option != nil { + if n.Option != nil && !n.Option.IsEmpty() { ctx.WritePlain(" ") if err := n.Option.Restore(ctx); err != nil { return errors.Annotate(err, "An error occurred while splicing Constraint Option") @@ -1823,7 +1858,7 @@ func (n *CreateIndexStmt) Restore(ctx *format.RestoreCtx) error { } ctx.WritePlain(")") - if n.IndexOption.Tp != model.IndexTypeInvalid || n.IndexOption.KeyBlockSize > 0 || n.IndexOption.Comment != "" || len(n.IndexOption.ParserName.O) > 0 || n.IndexOption.Visibility != IndexVisibilityDefault { + if n.IndexOption != nil && !n.IndexOption.IsEmpty() { ctx.WritePlain(" ") if err := n.IndexOption.Restore(ctx); err != nil { return errors.Annotate(err, "An error occurred while restore CreateIndexStmt.IndexOption") @@ -2202,7 +2237,11 @@ func (n *ResourceGroupOption) Restore(ctx *format.RestoreCtx) error { case ResourceRURate: ctx.WriteKeyWord("RU_PER_SEC ") ctx.WritePlain("= ") - ctx.WritePlainf("%d", n.UintValue) + if n.BoolValue { + ctx.WriteKeyWord("UNLIMITED") + } else { + ctx.WritePlainf("%d", n.UintValue) + } case ResourcePriority: ctx.WriteKeyWord("PRIORITY ") ctx.WritePlain("= ") @@ -4340,8 +4379,9 @@ func (n *PartitionMethod) acceptInPlace(v Visitor) bool { // PartitionOptions specifies the partition options. type PartitionOptions struct { PartitionMethod - Sub *PartitionMethod - Definitions []*PartitionDefinition + Sub *PartitionMethod + Definitions []*PartitionDefinition + UpdateIndexes []*Constraint } // Validate checks if the partition is well-formed. @@ -4435,6 +4475,22 @@ func (n *PartitionOptions) Restore(ctx *format.RestoreCtx) error { ctx.WritePlain(")") } + if len(n.UpdateIndexes) > 0 { + ctx.WritePlain(" UPDATE INDEXES (") + for i, update := range n.UpdateIndexes { + if i > 0 { + ctx.WritePlain(",") + } + ctx.WriteName(update.Name) + if update.Option != nil && update.Option.Global { + ctx.WritePlain(" GLOBAL") + } else { + ctx.WritePlain(" LOCAL") + } + } + ctx.WritePlain(")") + } + return nil } diff --git a/pkg/parser/ast/misc.go b/pkg/parser/ast/misc.go index fa07d309953d0..2be542f069cfe 100644 --- a/pkg/parser/ast/misc.go +++ b/pkg/parser/ast/misc.go @@ -1971,6 +1971,40 @@ func (n *DropUserStmt) Accept(v Visitor) (Node, bool) { return v.Leave(n) } +type StringOrUserVar struct { + node + StringLit string + UserVar *VariableExpr +} + +func (n *StringOrUserVar) Restore(ctx *format.RestoreCtx) error { + if len(n.StringLit) > 0 { + ctx.WriteString(n.StringLit) + } + if n.UserVar != nil { + if err := n.UserVar.Restore(ctx); err != nil { + return errors.Annotate(err, "An error occurred while restore ColumnNameOrUserVar.UserVar") + } + } + return nil +} + +func (n *StringOrUserVar) Accept(v Visitor) (node Node, ok bool) { + newNode, skipChild := v.Enter(n) + if skipChild { + return v.Leave(newNode) + } + n = newNode.(*StringOrUserVar) + if n.UserVar != nil { + node, ok = n.UserVar.Accept(v) + if !ok { + return node, false + } + n.UserVar = node.(*VariableExpr) + } + return v.Leave(n) +} + // CreateBindingStmt creates sql binding hint. type CreateBindingStmt struct { stmtNode @@ -1978,7 +2012,7 @@ type CreateBindingStmt struct { GlobalScope bool OriginNode StmtNode HintedNode StmtNode - PlanDigest string + PlanDigests []*StringOrUserVar } func (n *CreateBindingStmt) Restore(ctx *format.RestoreCtx) error { @@ -1990,7 +2024,14 @@ func (n *CreateBindingStmt) Restore(ctx *format.RestoreCtx) error { } if n.OriginNode == nil { ctx.WriteKeyWord("BINDING FROM HISTORY USING PLAN DIGEST ") - ctx.WriteString(n.PlanDigest) + for i, v := range n.PlanDigests { + if i != 0 { + ctx.WritePlain(", ") + } + if err := v.Restore(ctx); err != nil { + return errors.Annotatef(err, "An error occurred while restore CreateBindingStmt.PlanDigests[%d]", i) + } + } } else { ctx.WriteKeyWord("BINDING FOR ") if err := n.OriginNode.Restore(ctx); err != nil { @@ -2021,6 +2062,14 @@ func (n *CreateBindingStmt) Accept(v Visitor) (Node, bool) { return n, false } n.HintedNode = hintedNode.(StmtNode) + } else { + for i, digest := range n.PlanDigests { + newDigest, ok := digest.Accept(v) + if !ok { + return n, false + } + n.PlanDigests[i] = newDigest.(*StringOrUserVar) + } } return v.Leave(n) } @@ -2032,7 +2081,7 @@ type DropBindingStmt struct { GlobalScope bool OriginNode StmtNode HintedNode StmtNode - SQLDigest string + SQLDigests []*StringOrUserVar } func (n *DropBindingStmt) Restore(ctx *format.RestoreCtx) error { @@ -2045,7 +2094,14 @@ func (n *DropBindingStmt) Restore(ctx *format.RestoreCtx) error { ctx.WriteKeyWord("BINDING FOR ") if n.OriginNode == nil { ctx.WriteKeyWord("SQL DIGEST ") - ctx.WriteString(n.SQLDigest) + for i, v := range n.SQLDigests { + if i != 0 { + ctx.WritePlain(", ") + } + if err := v.Restore(ctx); err != nil { + return errors.Annotatef(err, "An error occurred while restore CreateBindingStmt.PlanDigests[%d]", i) + } + } } else { if err := n.OriginNode.Restore(ctx); err != nil { return errors.Trace(err) @@ -2080,6 +2136,14 @@ func (n *DropBindingStmt) Accept(v Visitor) (Node, bool) { } n.HintedNode = hintedNode.(StmtNode) } + } else { + for i, digest := range n.SQLDigests { + newDigest, ok := digest.Accept(v) + if !ok { + return n, false + } + n.SQLDigests[i] = newDigest.(*StringOrUserVar) + } } return v.Leave(n) } diff --git a/pkg/parser/ast/util.go b/pkg/parser/ast/util.go index 1683041f2ae82..6ae6cf2bcde70 100644 --- a/pkg/parser/ast/util.go +++ b/pkg/parser/ast/util.go @@ -26,7 +26,8 @@ func IsReadOnly(node Node) bool { case *SelectStmt: if st.LockInfo != nil { switch st.LockInfo.LockType { - case SelectLockForUpdate, SelectLockForUpdateNoWait, SelectLockForUpdateWaitN: + case SelectLockForUpdate, SelectLockForUpdateNoWait, SelectLockForUpdateWaitN, + SelectLockForShare, SelectLockForShareNoWait: return false } } diff --git a/pkg/parser/generate_keyword/genkeyword.go b/pkg/parser/generate_keyword/genkeyword.go index edfaa05dd5c8e..0c89c2b8fc3e5 100644 --- a/pkg/parser/generate_keyword/genkeyword.go +++ b/pkg/parser/generate_keyword/genkeyword.go @@ -36,7 +36,8 @@ const ( ) const ( - fileStart = `// Copyright 2023 PingCAP, Inc. + fileStart = `// Code generated by genkeyword. DO NOT EDIT. +// Copyright 2023 PingCAP, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -75,8 +76,6 @@ var keywordRe *regexp.Regexp // example data: // // add "ADD" -// -// Note that all keywords except `TiDB_CURRENT_TSO` are fully uppercase. func parseLine(line string) string { if keywordRe == nil { keywordRe = regexp.MustCompile(`^\s+\w+\s+"(\w+)"$`) diff --git a/pkg/parser/generate_keyword/genkeyword_test.go b/pkg/parser/generate_keyword/genkeyword_test.go index 2a7a7d5b24722..8e3f49fac4a1a 100644 --- a/pkg/parser/generate_keyword/genkeyword_test.go +++ b/pkg/parser/generate_keyword/genkeyword_test.go @@ -10,6 +10,6 @@ func TestParseLine(t *testing.T) { add := parseLine(" add \"ADD\"") require.Equal(t, add, "ADD") - tso := parseLine(" tidbCurrentTSO \"TiDB_CURRENT_TSO\"") - require.Equal(t, tso, "TiDB_CURRENT_TSO") + tso := parseLine(" tidbCurrentTSO \"TIDB_CURRENT_TSO\"") + require.Equal(t, tso, "TIDB_CURRENT_TSO") } diff --git a/pkg/parser/keywords.go b/pkg/parser/keywords.go index 74dc5a1b3214f..3eef0c62be347 100644 --- a/pkg/parser/keywords.go +++ b/pkg/parser/keywords.go @@ -1,3 +1,4 @@ +// Code generated by genkeyword. DO NOT EDIT. // Copyright 2023 PingCAP, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -221,6 +222,7 @@ var Keywords = []KeywordsType{ {"TABLESAMPLE", true, "reserved"}, {"TERMINATED", true, "reserved"}, {"THEN", true, "reserved"}, + {"TIDB_CURRENT_TSO", true, "reserved"}, {"TINYBLOB", true, "reserved"}, {"TINYINT", true, "reserved"}, {"TINYTEXT", true, "reserved"}, @@ -228,7 +230,6 @@ var Keywords = []KeywordsType{ {"TRAILING", true, "reserved"}, {"TRIGGER", true, "reserved"}, {"TRUE", true, "reserved"}, - {"TiDB_CURRENT_TSO", true, "reserved"}, {"UNION", true, "reserved"}, {"UNIQUE", true, "reserved"}, {"UNLOCK", true, "reserved"}, @@ -622,6 +623,7 @@ var Keywords = []KeywordsType{ {"VALIDATION", false, "unreserved"}, {"VALUE", false, "unreserved"}, {"VARIABLES", false, "unreserved"}, + {"VECTOR", false, "unreserved"}, {"VIEW", false, "unreserved"}, {"VISIBLE", false, "unreserved"}, {"WAIT", false, "unreserved"}, diff --git a/pkg/parser/keywords_test.go b/pkg/parser/keywords_test.go index 8caca9048b7cf..2925623635dea 100644 --- a/pkg/parser/keywords_test.go +++ b/pkg/parser/keywords_test.go @@ -36,7 +36,7 @@ func TestKeywords(t *testing.T) { } func TestKeywordsLength(t *testing.T) { - require.Equal(t, 653, len(parser.Keywords)) + require.Equal(t, 654, len(parser.Keywords)) reservedNr := 0 for _, kw := range parser.Keywords { diff --git a/pkg/parser/model/ddl.go b/pkg/parser/model/ddl.go index 6bed14a8bc88c..4a57fda2e5a91 100644 --- a/pkg/parser/model/ddl.go +++ b/pkg/parser/model/ddl.go @@ -456,7 +456,6 @@ func (sub *SubJob) ToProxyJob(parentJob *Job, seq int) Job { Collate: parentJob.Collate, AdminOperator: parentJob.AdminOperator, TraceInfo: parentJob.TraceInfo, - LocalMode: parentJob.LocalMode, } } @@ -584,6 +583,7 @@ type Job struct { // LocalMode = true means the job is running on the local TiDB that the client // connects to, else it's run on the DDL owner. // Only happens when tidb_enable_fast_create_table = on + // this field is useless since 8.3 LocalMode bool `json:"local_mode"` // SQLMode for executing DDL query. @@ -987,6 +987,11 @@ func (job *Job) NotStarted() bool { return job.State == JobStateNone || job.State == JobStateQueueing } +// Started returns true if the job is started. +func (job *Job) Started() bool { + return !job.NotStarted() +} + // InFinalState returns whether the job is in a final state of job FSM. // TODO JobStateRollbackDone is not a final state, maybe we should add a JobStateRollbackSynced // state to diff between the entrance of JobStateRollbackDone and move the job to diff --git a/pkg/parser/model/model.go b/pkg/parser/model/model.go index 0e8440ac65471..a3f2bd138dde2 100644 --- a/pkg/parser/model/model.go +++ b/pkg/parser/model/model.go @@ -1173,6 +1173,13 @@ type ExchangePartitionInfo struct { XXXExchangePartitionFlag bool `json:"exchange_partition_flag"` } +// UpdateIndexInfo is to carry the entries in the list of indexes in UPDATE INDEXES +// during ALTER TABLE t PARTITION BY ... UPDATE INDEXES (idx_a GLOBAL, idx_b LOCAL...) +type UpdateIndexInfo struct { + IndexName string `json:"index_name"` + Global bool `json:"global"` +} + // PartitionInfo provides table partition info. type PartitionInfo struct { Type PartitionType `json:"type"` @@ -1210,6 +1217,8 @@ type PartitionInfo struct { DDLType PartitionType `json:"ddl_type"` DDLExpr string `json:"ddl_expr"` DDLColumns []CIStr `json:"ddl_columns"` + // For ActionAlterTablePartitioning, UPDATE INDEXES + DDLUpdateIndexes []UpdateIndexInfo `json:"ddl_update_indexes"` } // Clone clones itself. @@ -1687,11 +1696,13 @@ func (fk *FKInfo) Clone() *FKInfo { // DBInfo provides meta data describing a DB. type DBInfo struct { - ID int64 `json:"id"` // Database ID - Name CIStr `json:"db_name"` // DB name. - Charset string `json:"charset"` - Collate string `json:"collate"` - Tables []*TableInfo `json:"-"` // Tables in the DB. + ID int64 `json:"id"` // Database ID + Name CIStr `json:"db_name"` // DB name. + Charset string `json:"charset"` + Collate string `json:"collate"` + Deprecated struct { // Tables is not set in infoschema v2, use infoschema SchemaTableInfos() instead. + Tables []*TableInfo `json:"-"` // Tables in the DB. + } State SchemaState `json:"state"` PlacementPolicyRef *PolicyRefInfo `json:"policy_ref_info"` TableName2ID map[string]int64 `json:"-"` @@ -1700,9 +1711,9 @@ type DBInfo struct { // Clone clones DBInfo. func (db *DBInfo) Clone() *DBInfo { newInfo := *db - newInfo.Tables = make([]*TableInfo, len(db.Tables)) - for i := range db.Tables { - newInfo.Tables[i] = db.Tables[i].Clone() + newInfo.Deprecated.Tables = make([]*TableInfo, len(db.Deprecated.Tables)) + for i := range db.Deprecated.Tables { + newInfo.Deprecated.Tables[i] = db.Deprecated.Tables[i].Clone() } return &newInfo } @@ -1710,8 +1721,8 @@ func (db *DBInfo) Clone() *DBInfo { // Copy shallow copies DBInfo. func (db *DBInfo) Copy() *DBInfo { newInfo := *db - newInfo.Tables = make([]*TableInfo, len(db.Tables)) - copy(newInfo.Tables, db.Tables) + newInfo.Deprecated.Tables = make([]*TableInfo, len(db.Deprecated.Tables)) + copy(newInfo.Deprecated.Tables, db.Deprecated.Tables) return &newInfo } @@ -2000,12 +2011,6 @@ func (t RunawayActionType) String() string { } } -// ResourceGroupRefInfo is the struct to refer the resource group. -type ResourceGroupRefInfo struct { - ID int64 `json:"id"` - Name CIStr `json:"name"` -} - // ResourceGroupRunawaySettings is the runaway settings of the resource group type ResourceGroupRunawaySettings struct { ExecElapsedTimeMs uint64 `json:"exec_elapsed_time_ms"` diff --git a/pkg/parser/model/model_test.go b/pkg/parser/model/model_test.go index 71762e97869bf..76bfd0b19790e 100644 --- a/pkg/parser/model/model_test.go +++ b/pkg/parser/model/model_test.go @@ -168,8 +168,8 @@ func TestModelBasic(t *testing.T) { Name: NewCIStr("test"), Charset: "utf8", Collate: "utf8_bin", - Tables: []*TableInfo{table}, } + dbInfo.Deprecated.Tables = []*TableInfo{table} n := dbInfo.Clone() require.Equal(t, dbInfo, n) diff --git a/pkg/parser/model/reorg.go b/pkg/parser/model/reorg.go index 9355d796271eb..bcdfa9b358efc 100644 --- a/pkg/parser/model/reorg.go +++ b/pkg/parser/model/reorg.go @@ -34,6 +34,26 @@ type DDLReorgMeta struct { ResourceGroupName string `json:"resource_group_name"` Version int64 `json:"version"` TargetScope string `json:"target_scope"` + // These two variables are set when corresponding session variables are set explicitly. When they are set, + // user cannot change it by setting the global one. Otherwise, they can be adjusted dynamically through global var. + Concurrency int `json:"concurrency"` + BatchSize int `json:"batch_size"` +} + +// GetConcurrencyOrDefault gets the concurrency from DDLReorgMeta or returns the default value. +func (dm *DDLReorgMeta) GetConcurrencyOrDefault(defaultVal int) int { + if dm == nil || dm.Concurrency == 0 { + return defaultVal + } + return dm.Concurrency +} + +// GetBatchSizeOrDefault gets the batch size from DDLReorgMeta or returns the default value. +func (dm *DDLReorgMeta) GetBatchSizeOrDefault(defaultVal int) int { + if dm == nil || dm.BatchSize == 0 { + return defaultVal + } + return dm.BatchSize } const ( diff --git a/pkg/parser/parser.go b/pkg/parser/parser.go index d79df38c6d85f..5c8c5cc545a09 100644 --- a/pkg/parser/parser.go +++ b/pkg/parser/parser.go @@ -814,7 +814,7 @@ const ( then = 57559 tiFlash = 58159 tidb = 58158 - tidbCurrentTSO = 57567 + tidbCurrentTSO = 57560 tidbJson = 58065 tikvImporter = 57936 timeDuration = 58066 @@ -822,11 +822,11 @@ const ( timestampAdd = 58067 timestampDiff = 58068 timestampType = 57938 - tinyIntType = 57561 - tinyblobType = 57560 - tinytextType = 57562 + tinyIntType = 57562 + tinyblobType = 57561 + tinytextType = 57563 tls = 58069 - to = 57563 + to = 57564 toTSO = 57349 toTimestamp = 57348 tokenIssuer = 57939 @@ -846,13 +846,13 @@ const ( tpch10 = 57941 trace = 57942 traditional = 57943 - trailing = 57564 + trailing = 57565 transaction = 57944 - trigger = 57565 + trigger = 57566 triggers = 57945 trim = 58080 trueCardCost = 58081 - trueKwd = 57566 + trueKwd = 57567 truncate = 57946 tsoType = 57947 ttl = 57948 @@ -922,578 +922,578 @@ const ( zerofill = 57594 yyMaxDepth = 200 - yyTabOfs = -2896 + yyTabOfs = -2915 ) var ( yyXLAT = map[int]int{ - 59: 0, // ';' (2542x) - 57344: 1, // $end (2529x) - 57848: 2, // remove (2020x) - 58148: 3, // split (2020x) - 57777: 4, // merge (2019x) - 57849: 5, // reorganize (2018x) - 57650: 6, // comment (2012x) - 57919: 7, // storage (1923x) - 57608: 8, // autoIncrement (1912x) - 44: 9, // ',' (1884x) - 57717: 10, // first (1811x) - 57598: 11, // after (1805x) - 57882: 12, // serial (1801x) - 57609: 13, // autoRandom (1800x) - 57649: 14, // columnFormat (1800x) - 57818: 15, // password (1765x) - 57635: 16, // charsetKwd (1756x) - 57637: 17, // checksum (1746x) - 58033: 18, // placement (1743x) - 57752: 19, // keyBlockSize (1727x) - 57930: 20, // tablespace (1723x) - 57693: 21, // encryption (1721x) - 57698: 22, // engine (1718x) - 57674: 23, // data (1716x) - 57743: 24, // insertMethod (1714x) - 57771: 25, // maxRows (1714x) - 57781: 26, // minRows (1714x) - 57794: 27, // nodegroup (1714x) - 57660: 28, // connection (1706x) - 57610: 29, // autoRandomBase (1703x) - 58151: 30, // statsBuckets (1701x) - 58157: 31, // statsTopN (1701x) - 57948: 32, // ttl (1701x) - 57607: 33, // autoIdCache (1700x) - 57612: 34, // avgRowLength (1700x) - 57655: 35, // compression (1700x) - 57681: 36, // delayKeyWrite (1700x) - 57812: 37, // packKeys (1700x) - 57831: 38, // preSplitRegions (1700x) - 57869: 39, // rowFormat (1700x) - 57875: 40, // secondaryEngine (1700x) - 57886: 41, // shardRowIDBits (1700x) - 57911: 42, // statsAutoRecalc (1700x) - 57912: 43, // statsColChoice (1700x) - 57913: 44, // statsColList (1700x) - 57915: 45, // statsPersistent (1700x) - 57916: 46, // statsSamplePages (1700x) - 57917: 47, // statsSampleRate (1700x) - 57931: 48, // tableChecksum (1700x) - 57949: 49, // ttlEnable (1700x) - 57950: 50, // ttlJobInterval (1700x) - 57856: 51, // resource (1679x) - 41: 52, // ')' (1653x) - 57605: 53, // attribute (1652x) - 57595: 54, // account (1650x) - 57713: 55, // failedLoginAttempts (1650x) - 57819: 56, // passwordLockTime (1650x) - 57346: 57, // identifier (1648x) - 57861: 58, // resume (1636x) - 57890: 59, // signed (1636x) - 57896: 60, // snapshot (1634x) - 57613: 61, // backend (1633x) - 57636: 62, // checkpoint (1633x) - 57638: 63, // checksumConcurrency (1633x) - 57656: 64, // compressionLevel (1633x) - 57657: 65, // compressionType (1633x) - 57658: 66, // concurrency (1633x) - 57665: 67, // csvBackslashEscape (1633x) - 57666: 68, // csvDelimiter (1633x) - 57667: 69, // csvHeader (1633x) - 57668: 70, // csvNotNull (1633x) - 57669: 71, // csvNull (1633x) - 57670: 72, // csvSeparator (1633x) - 57671: 73, // csvTrimLastSeparators (1633x) - 57694: 74, // encryptionKeyFile (1633x) - 57695: 75, // encryptionMethod (1633x) - 58007: 76, // fullBackupStorage (1633x) - 58008: 77, // gcTTL (1633x) - 57737: 78, // ignoreStats (1633x) - 57757: 79, // lastBackup (1633x) - 57761: 80, // loadStats (1633x) - 57809: 81, // onDuplicate (1633x) - 57807: 82, // online (1633x) - 57843: 83, // rateLimit (1633x) - 58043: 84, // restoredTS (1633x) - 57879: 85, // sendCredentialsToTiKV (1633x) - 57893: 86, // skipSchemaFiles (1633x) - 58051: 87, // startTS (1633x) - 57920: 88, // strictFormat (1633x) - 57936: 89, // tikvImporter (1633x) - 58083: 90, // untilTS (1633x) - 57966: 91, // waitTiflashReady (1633x) - 57971: 92, // withSysTable (1633x) - 57617: 93, // begin (1627x) - 57651: 94, // commit (1627x) - 57791: 95, // no (1627x) - 57865: 96, // rollback (1627x) - 57910: 97, // start (1625x) - 57946: 98, // truncate (1624x) - 57629: 99, // cache (1622x) - 57792: 100, // nocache (1621x) - 57810: 101, // open (1621x) - 57596: 102, // action (1620x) - 57643: 103, // close (1620x) - 57673: 104, // cycle (1620x) - 57780: 105, // minValue (1620x) - 57696: 106, // end (1619x) - 57740: 107, // increment (1619x) - 57793: 108, // nocycle (1619x) - 57795: 109, // nomaxvalue (1619x) - 57796: 110, // nominvalue (1619x) - 57601: 111, // algorithm (1617x) - 57858: 112, // restart (1617x) - 57951: 113, // tp (1617x) - 57645: 114, // clustered (1616x) - 57745: 115, // invisible (1616x) - 57797: 116, // nonclustered (1616x) - 58142: 117, // regions (1616x) - 57964: 118, // visible (1616x) - 57978: 119, // background (1614x) - 57985: 120, // burstable (1614x) - 58039: 121, // priority (1614x) - 58040: 122, // queryLimit (1614x) - 58045: 123, // ruRate (1614x) - 57922: 124, // subpartition (1612x) - 57817: 125, // partitions (1611x) - 58035: 126, // plan (1611x) - 57974: 127, // yearType (1611x) - 57987: 128, // constraints (1609x) - 58005: 129, // followerConstraints (1609x) - 58006: 130, // followers (1609x) - 58020: 131, // leaderConstraints (1609x) - 58022: 132, // learnerConstraints (1609x) - 58023: 133, // learners (1609x) - 58038: 134, // primaryRegion (1609x) - 58047: 135, // schedule (1609x) - 57909: 136, // sqlTsiYear (1609x) - 58062: 137, // survivalPreferences (1609x) - 58088: 138, // voterConstraints (1609x) - 58089: 139, // voters (1609x) - 57648: 140, // columns (1607x) - 57738: 141, // importKwd (1607x) - 57963: 142, // view (1607x) - 57677: 143, // day (1606x) - 58091: 144, // watch (1605x) - 57994: 145, // defined (1604x) - 58000: 146, // execElapsed (1604x) - 57873: 147, // second (1604x) - 57918: 148, // status (1604x) - 57734: 149, // hour (1603x) - 57778: 150, // microsecond (1603x) - 57779: 151, // minute (1603x) - 57784: 152, // month (1603x) - 57839: 153, // quarter (1603x) - 57902: 154, // sqlTsiDay (1603x) - 57903: 155, // sqlTsiHour (1603x) - 57904: 156, // sqlTsiMinute (1603x) - 57905: 157, // sqlTsiMonth (1603x) - 57906: 158, // sqlTsiQuarter (1603x) - 57907: 159, // sqlTsiSecond (1603x) - 57908: 160, // sqlTsiWeek (1603x) - 57968: 161, // week (1603x) - 57604: 162, // ascii (1602x) - 57628: 163, // byteType (1602x) - 57929: 164, // tables (1602x) - 57955: 165, // unicodeSym (1602x) - 57715: 166, // fields (1601x) - 57762: 167, // local (1600x) - 57765: 168, // logs (1600x) - 58066: 169, // timeDuration (1600x) - 57841: 170, // query (1598x) - 57880: 171, // separator (1598x) - 57639: 172, // cipher (1597x) - 57750: 173, // issuer (1597x) - 57767: 174, // maxConnectionsPerHour (1597x) - 57770: 175, // maxQueriesPerHour (1597x) - 57772: 176, // maxUpdatesPerHour (1597x) - 57773: 177, // maxUserConnections (1597x) - 57828: 178, // preceding (1597x) - 57871: 179, // san (1597x) - 57921: 180, // subject (1597x) - 57939: 181, // tokenIssuer (1597x) - 57998: 182, // endTime (1596x) - 57751: 183, // jsonType (1596x) - 58050: 184, // startTime (1596x) - 57676: 185, // datetimeType (1595x) - 57675: 186, // dateType (1595x) - 57718: 187, // fixed (1595x) - 57937: 188, // timeType (1595x) - 57620: 189, // bindings (1594x) - 57672: 190, // current (1594x) - 57680: 191, // definer (1594x) - 57729: 192, // hash (1594x) - 57736: 193, // identified (1594x) - 57857: 194, // respect (1594x) - 57864: 195, // role (1594x) - 57938: 196, // timestampType (1594x) - 57960: 197, // value (1594x) - 57962: 198, // vectorType (1594x) - 57614: 199, // backup (1593x) - 57626: 200, // booleanType (1593x) - 57697: 201, // enforced (1593x) - 57720: 202, // following (1593x) - 57758: 203, // less (1593x) - 57799: 204, // nowait (1593x) - 57808: 205, // only (1593x) - 57872: 206, // savepoint (1593x) - 57892: 207, // skip (1593x) - 58064: 208, // taskTypes (1593x) - 57934: 209, // textType (1593x) - 57935: 210, // than (1593x) - 58159: 211, // tiFlash (1593x) - 57952: 212, // unbounded (1593x) - 57619: 213, // binding (1592x) - 57623: 214, // bitType (1592x) - 57625: 215, // boolType (1592x) - 57700: 216, // enum (1592x) - 57726: 217, // global (1592x) - 57735: 218, // hypo (1592x) - 58134: 219, // job (1592x) - 57786: 220, // national (1592x) - 57787: 221, // ncharType (1592x) - 58030: 222, // next_row_id (1592x) - 57801: 223, // nvarcharType (1592x) - 57803: 224, // offset (1592x) - 57827: 225, // policy (1592x) - 58037: 226, // predicate (1592x) - 57852: 227, // replica (1592x) - 57932: 228, // temporary (1592x) - 57958: 229, // user (1592x) - 57682: 230, // digest (1591x) - 58135: 231, // jobs (1591x) - 57763: 232, // location (1591x) - 58034: 233, // planCache (1591x) - 57829: 234, // prepare (1591x) - 58150: 235, // stats (1591x) - 57956: 236, // unknown (1591x) - 57965: 237, // wait (1591x) - 57627: 238, // btree (1590x) - 57988: 239, // cooldown (1590x) - 57679: 240, // declare (1590x) - 57996: 241, // dryRun (1590x) - 57721: 242, // format (1590x) - 57749: 243, // isolation (1590x) - 57755: 244, // last (1590x) - 57768: 245, // max_idxnum (1590x) - 57776: 246, // memory (1590x) - 57789: 247, // next (1590x) - 57802: 248, // off (1590x) - 57811: 249, // optional (1590x) - 57822: 250, // per_db (1590x) - 57832: 251, // privileges (1590x) - 57855: 252, // required (1590x) - 57870: 253, // rtree (1590x) - 58145: 254, // sampleRate (1590x) - 57881: 255, // sequence (1590x) - 57884: 256, // session (1590x) - 57895: 257, // slow (1590x) - 57959: 258, // validation (1590x) - 57961: 259, // variables (1590x) - 57606: 260, // attributes (1589x) - 58123: 261, // cancel (1589x) - 57653: 262, // compact (1589x) - 58128: 263, // ddl (1589x) - 57684: 264, // disable (1589x) - 57688: 265, // do (1589x) - 57690: 266, // dynamic (1589x) - 57691: 267, // enable (1589x) - 57701: 268, // errorKwd (1589x) - 57999: 269, // exact (1589x) - 57719: 270, // flush (1589x) - 57723: 271, // full (1589x) - 57728: 272, // handler (1589x) - 57732: 273, // history (1589x) - 57774: 274, // mb (1589x) - 57782: 275, // mode (1589x) - 57820: 276, // pause (1589x) - 57825: 277, // plugins (1589x) - 57834: 278, // processlist (1589x) - 57845: 279, // recover (1589x) - 57850: 280, // repair (1589x) - 57851: 281, // repeatable (1589x) - 58048: 282, // similar (1589x) - 58149: 283, // statistics (1589x) - 57923: 284, // subpartitions (1589x) - 58158: 285, // tidb (1589x) - 57970: 286, // without (1589x) - 58092: 287, // admin (1588x) - 58093: 288, // batch (1588x) - 57616: 289, // bdr (1588x) - 57622: 290, // binlog (1588x) - 57624: 291, // block (1588x) - 57983: 292, // br (1588x) - 57984: 293, // briefType (1588x) - 58094: 294, // buckets (1588x) - 57630: 295, // calibrate (1588x) - 57631: 296, // capture (1588x) - 58124: 297, // cardinality (1588x) - 57634: 298, // chain (1588x) - 57642: 299, // clientErrorsSummary (1588x) - 58125: 300, // cmSketch (1588x) - 57646: 301, // coalesce (1588x) - 57654: 302, // compressed (1588x) - 57663: 303, // context (1588x) - 57989: 304, // copyKwd (1588x) - 58127: 305, // correlation (1588x) - 57664: 306, // cpu (1588x) - 57678: 307, // deallocate (1588x) - 58129: 308, // dependency (1588x) - 57683: 309, // directory (1588x) - 57686: 310, // discard (1588x) - 57687: 311, // disk (1588x) - 57995: 312, // dotType (1588x) - 58131: 313, // drainer (1588x) - 58132: 314, // dry (1588x) - 57689: 315, // duplicate (1588x) - 57707: 316, // exchange (1588x) - 57709: 317, // execute (1588x) - 57710: 318, // expansion (1588x) - 58003: 319, // flashback (1588x) - 57725: 320, // general (1588x) - 57730: 321, // help (1588x) - 58011: 322, // high (1588x) - 57731: 323, // histogram (1588x) - 57733: 324, // hosts (1588x) - 57702: 325, // identSQLErrors (1588x) - 57741: 326, // incremental (1588x) - 58012: 327, // inplace (1588x) - 57744: 328, // instance (1588x) - 58013: 329, // instant (1588x) - 57748: 330, // ipc (1588x) - 57753: 331, // labels (1588x) - 57764: 332, // locked (1588x) - 58025: 333, // low (1588x) - 58027: 334, // medium (1588x) - 58028: 335, // metadata (1588x) - 57783: 336, // modify (1588x) - 57790: 337, // nextval (1588x) - 58136: 338, // nodeID (1588x) - 58137: 339, // nodeState (1588x) - 57800: 340, // nulls (1588x) - 57813: 341, // pageSym (1588x) - 58140: 342, // pump (1588x) - 57838: 343, // purge (1588x) - 57844: 344, // rebuild (1588x) - 57846: 345, // redundant (1588x) - 57847: 346, // reload (1588x) - 57859: 347, // restore (1588x) - 57867: 348, // routine (1588x) - 58046: 349, // s3 (1588x) - 58146: 350, // samples (1588x) - 57876: 351, // secondaryLoad (1588x) - 57877: 352, // secondaryUnload (1588x) - 57887: 353, // share (1588x) - 57889: 354, // shutdown (1588x) - 57894: 355, // slave (1588x) - 57898: 356, // source (1588x) - 58152: 357, // statsExtended (1588x) - 57914: 358, // statsOptions (1588x) - 58056: 359, // stop (1588x) - 57925: 360, // swaps (1588x) - 58065: 361, // tidbJson (1588x) - 58070: 362, // tokudbDefault (1588x) - 58071: 363, // tokudbFast (1588x) - 58072: 364, // tokudbLzma (1588x) - 58073: 365, // tokudbQuickLZ (1588x) - 58074: 366, // tokudbSmall (1588x) - 58075: 367, // tokudbSnappy (1588x) - 58076: 368, // tokudbUncompressed (1588x) - 58077: 369, // tokudbZlib (1588x) - 58078: 370, // tokudbZstd (1588x) - 58160: 371, // topn (1588x) - 57942: 372, // trace (1588x) - 57943: 373, // traditional (1588x) - 58081: 374, // trueCardCost (1588x) - 58082: 375, // unlimited (1588x) - 58087: 376, // verboseType (1588x) - 57967: 377, // warnings (1588x) - 57597: 378, // advise (1587x) - 57599: 379, // against (1587x) - 57600: 380, // ago (1587x) - 57602: 381, // always (1587x) - 57615: 382, // backups (1587x) - 57618: 383, // bernoulli (1587x) - 57621: 384, // bindingCache (1587x) - 58112: 385, // builtins (1587x) - 57632: 386, // cascaded (1587x) - 57633: 387, // causal (1587x) - 57640: 388, // cleanup (1587x) - 57641: 389, // client (1587x) - 57644: 390, // cluster (1587x) - 57647: 391, // collation (1587x) - 58126: 392, // columnStatsUsage (1587x) - 57652: 393, // committed (1587x) - 57659: 394, // config (1587x) - 57661: 395, // consistency (1587x) - 57662: 396, // consistent (1587x) - 58130: 397, // depth (1587x) - 57685: 398, // disabled (1587x) - 57997: 399, // dump (1587x) - 57692: 400, // enabled (1587x) - 57699: 401, // engines (1587x) - 57705: 402, // events (1587x) - 57706: 403, // evolve (1587x) - 57711: 404, // expire (1587x) - 58001: 405, // exprPushdownBlacklist (1587x) - 57712: 406, // extended (1587x) - 57714: 407, // faultsSym (1587x) - 57722: 408, // found (1587x) - 57724: 409, // function (1587x) - 57727: 410, // grants (1587x) - 58133: 411, // histogramsInFlight (1587x) - 57742: 412, // indexes (1587x) - 58014: 413, // internal (1587x) - 57746: 414, // invoker (1587x) - 57747: 415, // io (1587x) - 57754: 416, // language (1587x) - 57759: 417, // level (1587x) - 57760: 418, // list (1587x) - 58024: 419, // log (1587x) - 57766: 420, // master (1587x) - 57769: 421, // max_minutes (1587x) - 57788: 422, // never (1587x) - 57798: 423, // none (1587x) - 57804: 424, // oltpReadOnly (1587x) - 57805: 425, // oltpReadWrite (1587x) - 57806: 426, // oltpWriteOnly (1587x) - 58138: 427, // optimistic (1587x) - 58032: 428, // optRuleBlacklist (1587x) - 57814: 429, // parser (1587x) - 57815: 430, // partial (1587x) - 57816: 431, // partitioning (1587x) - 57823: 432, // per_table (1587x) - 57821: 433, // percent (1587x) - 58139: 434, // pessimistic (1587x) - 57826: 435, // point (1587x) - 57830: 436, // preserve (1587x) - 57835: 437, // profile (1587x) - 57836: 438, // profiles (1587x) - 57840: 439, // queries (1587x) - 58041: 440, // recent (1587x) - 58141: 441, // region (1587x) - 58042: 442, // replayer (1587x) - 57860: 443, // restores (1587x) - 57862: 444, // reuse (1587x) - 57866: 445, // rollup (1587x) - 58144: 446, // run (1587x) - 57874: 447, // secondary (1587x) - 57878: 448, // security (1587x) - 57883: 449, // serializable (1587x) - 58147: 450, // sessionStates (1587x) - 57891: 451, // simple (1587x) - 58153: 452, // statsHealthy (1587x) - 58154: 453, // statsHistograms (1587x) - 58155: 454, // statsLocked (1587x) - 58156: 455, // statsMeta (1587x) - 57926: 456, // switchesSym (1587x) - 57927: 457, // system (1587x) - 57928: 458, // systemTime (1587x) - 58063: 459, // target (1587x) - 57933: 460, // temptable (1587x) - 58069: 461, // tls (1587x) - 58079: 462, // top (1587x) - 57940: 463, // tpcc (1587x) - 57941: 464, // tpch10 (1587x) - 57944: 465, // transaction (1587x) - 57945: 466, // triggers (1587x) - 57953: 467, // uncommitted (1587x) - 57954: 468, // undefined (1587x) - 57957: 469, // unset (1587x) - 58161: 470, // width (1587x) - 57972: 471, // workload (1587x) - 57973: 472, // x509 (1587x) - 57975: 473, // addDate (1586x) - 57603: 474, // any (1586x) - 57976: 475, // approxCountDistinct (1586x) - 57977: 476, // approxPercentile (1586x) - 57611: 477, // avg (1586x) - 57979: 478, // bitAnd (1586x) - 57980: 479, // bitOr (1586x) - 57981: 480, // bitXor (1586x) - 57982: 481, // bound (1586x) - 57986: 482, // cast (1586x) - 57990: 483, // curDate (1586x) - 57991: 484, // curTime (1586x) - 57992: 485, // dateAdd (1586x) - 57993: 486, // dateSub (1586x) - 57703: 487, // escape (1586x) - 57704: 488, // event (1586x) - 57708: 489, // exclusive (1586x) - 58002: 490, // extract (1586x) - 57716: 491, // file (1586x) - 58004: 492, // follower (1586x) - 58009: 493, // getFormat (1586x) - 58010: 494, // groupConcat (1586x) - 57739: 495, // imports (1586x) - 58015: 496, // ioReadBandwidth (1586x) - 58016: 497, // ioWriteBandwidth (1586x) - 58017: 498, // jsonArrayagg (1586x) - 58018: 499, // jsonObjectAgg (1586x) - 57756: 500, // lastval (1586x) - 58019: 501, // leader (1586x) - 58021: 502, // learner (1586x) - 58026: 503, // max (1586x) - 57775: 504, // member (1586x) - 58029: 505, // min (1586x) - 57785: 506, // names (1586x) - 58031: 507, // now (1586x) - 58036: 508, // position (1586x) - 57833: 509, // process (1586x) - 57837: 510, // proxy (1586x) - 57842: 511, // quick (1586x) - 57853: 512, // replicas (1586x) - 57854: 513, // replication (1586x) - 58143: 514, // reset (1586x) - 57863: 515, // reverse (1586x) - 57868: 516, // rowCount (1586x) - 58044: 517, // running (1586x) - 57885: 518, // setval (1586x) - 57888: 519, // shared (1586x) - 57897: 520, // some (1586x) - 57899: 521, // sqlBufferResult (1586x) - 57900: 522, // sqlCache (1586x) - 57901: 523, // sqlNoCache (1586x) - 58049: 524, // staleness (1586x) - 58055: 525, // std (1586x) - 58052: 526, // stddev (1586x) - 58053: 527, // stddevPop (1586x) - 58054: 528, // stddevSamp (1586x) - 58057: 529, // strict (1586x) - 58058: 530, // strong (1586x) - 58059: 531, // subDate (1586x) - 58060: 532, // substring (1586x) - 58061: 533, // sum (1586x) - 57924: 534, // super (1586x) - 58067: 535, // timestampAdd (1586x) - 58068: 536, // timestampDiff (1586x) - 58080: 537, // trim (1586x) - 57947: 538, // tsoType (1586x) - 58084: 539, // variance (1586x) - 58085: 540, // varPop (1586x) - 58086: 541, // varSamp (1586x) - 58090: 542, // voter (1586x) - 57969: 543, // weightString (1586x) - 57505: 544, // on (1499x) - 40: 545, // '(' (1496x) - 57590: 546, // with (1364x) - 57353: 547, // stringLit (1347x) - 58180: 548, // not2 (1303x) - 57405: 549, // defaultKwd (1255x) - 57498: 550, // not (1234x) - 57369: 551, // as (1200x) - 57384: 552, // collate (1168x) + 59: 0, // ';' (2558x) + 57344: 1, // $end (2545x) + 57848: 2, // remove (2031x) + 58148: 3, // split (2031x) + 57777: 4, // merge (2030x) + 57849: 5, // reorganize (2029x) + 57650: 6, // comment (2023x) + 57919: 7, // storage (1932x) + 57608: 8, // autoIncrement (1921x) + 44: 9, // ',' (1906x) + 57717: 10, // first (1820x) + 57598: 11, // after (1814x) + 57882: 12, // serial (1810x) + 57609: 13, // autoRandom (1809x) + 57649: 14, // columnFormat (1809x) + 57818: 15, // password (1767x) + 57635: 16, // charsetKwd (1758x) + 57637: 17, // checksum (1748x) + 58033: 18, // placement (1745x) + 57752: 19, // keyBlockSize (1731x) + 57930: 20, // tablespace (1725x) + 57693: 21, // encryption (1723x) + 57698: 22, // engine (1720x) + 57674: 23, // data (1718x) + 57743: 24, // insertMethod (1716x) + 57771: 25, // maxRows (1716x) + 57781: 26, // minRows (1716x) + 57794: 27, // nodegroup (1716x) + 57660: 28, // connection (1708x) + 57610: 29, // autoRandomBase (1705x) + 58151: 30, // statsBuckets (1703x) + 58157: 31, // statsTopN (1703x) + 57948: 32, // ttl (1703x) + 57607: 33, // autoIdCache (1702x) + 57612: 34, // avgRowLength (1702x) + 57655: 35, // compression (1702x) + 57681: 36, // delayKeyWrite (1702x) + 57812: 37, // packKeys (1702x) + 57831: 38, // preSplitRegions (1702x) + 57869: 39, // rowFormat (1702x) + 57875: 40, // secondaryEngine (1702x) + 57886: 41, // shardRowIDBits (1702x) + 57911: 42, // statsAutoRecalc (1702x) + 57912: 43, // statsColChoice (1702x) + 57913: 44, // statsColList (1702x) + 57915: 45, // statsPersistent (1702x) + 57916: 46, // statsSamplePages (1702x) + 57917: 47, // statsSampleRate (1702x) + 57931: 48, // tableChecksum (1702x) + 57949: 49, // ttlEnable (1702x) + 57950: 50, // ttlJobInterval (1702x) + 57856: 51, // resource (1681x) + 41: 52, // ')' (1668x) + 57605: 53, // attribute (1654x) + 57595: 54, // account (1652x) + 57713: 55, // failedLoginAttempts (1652x) + 57819: 56, // passwordLockTime (1652x) + 57346: 57, // identifier (1650x) + 57762: 58, // local (1638x) + 57861: 59, // resume (1638x) + 57890: 60, // signed (1638x) + 57896: 61, // snapshot (1636x) + 57613: 62, // backend (1635x) + 57636: 63, // checkpoint (1635x) + 57638: 64, // checksumConcurrency (1635x) + 57656: 65, // compressionLevel (1635x) + 57657: 66, // compressionType (1635x) + 57658: 67, // concurrency (1635x) + 57665: 68, // csvBackslashEscape (1635x) + 57666: 69, // csvDelimiter (1635x) + 57667: 70, // csvHeader (1635x) + 57668: 71, // csvNotNull (1635x) + 57669: 72, // csvNull (1635x) + 57670: 73, // csvSeparator (1635x) + 57671: 74, // csvTrimLastSeparators (1635x) + 57694: 75, // encryptionKeyFile (1635x) + 57695: 76, // encryptionMethod (1635x) + 58007: 77, // fullBackupStorage (1635x) + 58008: 78, // gcTTL (1635x) + 57737: 79, // ignoreStats (1635x) + 57757: 80, // lastBackup (1635x) + 57761: 81, // loadStats (1635x) + 57809: 82, // onDuplicate (1635x) + 57807: 83, // online (1635x) + 57843: 84, // rateLimit (1635x) + 58043: 85, // restoredTS (1635x) + 57879: 86, // sendCredentialsToTiKV (1635x) + 57893: 87, // skipSchemaFiles (1635x) + 58051: 88, // startTS (1635x) + 57920: 89, // strictFormat (1635x) + 57936: 90, // tikvImporter (1635x) + 58083: 91, // untilTS (1635x) + 57966: 92, // waitTiflashReady (1635x) + 57971: 93, // withSysTable (1635x) + 57726: 94, // global (1630x) + 57617: 95, // begin (1629x) + 57651: 96, // commit (1629x) + 57791: 97, // no (1629x) + 57865: 98, // rollback (1629x) + 57910: 99, // start (1627x) + 57946: 100, // truncate (1626x) + 57629: 101, // cache (1624x) + 57792: 102, // nocache (1623x) + 57810: 103, // open (1623x) + 57596: 104, // action (1622x) + 57643: 105, // close (1622x) + 57673: 106, // cycle (1622x) + 57780: 107, // minValue (1622x) + 57601: 108, // algorithm (1621x) + 57696: 109, // end (1621x) + 57740: 110, // increment (1621x) + 57793: 111, // nocycle (1621x) + 57795: 112, // nomaxvalue (1621x) + 57796: 113, // nominvalue (1621x) + 57951: 114, // tp (1621x) + 57645: 115, // clustered (1620x) + 57745: 116, // invisible (1620x) + 57797: 117, // nonclustered (1620x) + 57964: 118, // visible (1620x) + 57858: 119, // restart (1619x) + 58142: 120, // regions (1618x) + 57978: 121, // background (1617x) + 57985: 122, // burstable (1617x) + 58039: 123, // priority (1617x) + 58040: 124, // queryLimit (1617x) + 58045: 125, // ruRate (1617x) + 57922: 126, // subpartition (1614x) + 57817: 127, // partitions (1613x) + 58035: 128, // plan (1613x) + 57974: 129, // yearType (1613x) + 57987: 130, // constraints (1611x) + 58005: 131, // followerConstraints (1611x) + 58006: 132, // followers (1611x) + 58020: 133, // leaderConstraints (1611x) + 58022: 134, // learnerConstraints (1611x) + 58023: 135, // learners (1611x) + 58038: 136, // primaryRegion (1611x) + 58047: 137, // schedule (1611x) + 57909: 138, // sqlTsiYear (1611x) + 58062: 139, // survivalPreferences (1611x) + 58088: 140, // voterConstraints (1611x) + 58089: 141, // voters (1611x) + 57648: 142, // columns (1609x) + 57738: 143, // importKwd (1609x) + 57963: 144, // view (1609x) + 57677: 145, // day (1608x) + 58091: 146, // watch (1607x) + 57994: 147, // defined (1606x) + 58000: 148, // execElapsed (1606x) + 57873: 149, // second (1606x) + 57918: 150, // status (1606x) + 57734: 151, // hour (1605x) + 57778: 152, // microsecond (1605x) + 57779: 153, // minute (1605x) + 57784: 154, // month (1605x) + 57839: 155, // quarter (1605x) + 57902: 156, // sqlTsiDay (1605x) + 57903: 157, // sqlTsiHour (1605x) + 57904: 158, // sqlTsiMinute (1605x) + 57905: 159, // sqlTsiMonth (1605x) + 57906: 160, // sqlTsiQuarter (1605x) + 57907: 161, // sqlTsiSecond (1605x) + 57908: 162, // sqlTsiWeek (1605x) + 57968: 163, // week (1605x) + 57604: 164, // ascii (1604x) + 57628: 165, // byteType (1604x) + 57929: 166, // tables (1604x) + 57955: 167, // unicodeSym (1604x) + 57715: 168, // fields (1603x) + 57765: 169, // logs (1602x) + 58066: 170, // timeDuration (1602x) + 57841: 171, // query (1600x) + 57880: 172, // separator (1600x) + 57639: 173, // cipher (1599x) + 57750: 174, // issuer (1599x) + 57767: 175, // maxConnectionsPerHour (1599x) + 57770: 176, // maxQueriesPerHour (1599x) + 57772: 177, // maxUpdatesPerHour (1599x) + 57773: 178, // maxUserConnections (1599x) + 57828: 179, // preceding (1599x) + 57871: 180, // san (1599x) + 57921: 181, // subject (1599x) + 57939: 182, // tokenIssuer (1599x) + 57998: 183, // endTime (1598x) + 57751: 184, // jsonType (1598x) + 58050: 185, // startTime (1598x) + 57676: 186, // datetimeType (1597x) + 57675: 187, // dateType (1597x) + 57718: 188, // fixed (1597x) + 57937: 189, // timeType (1597x) + 57620: 190, // bindings (1596x) + 57672: 191, // current (1596x) + 57680: 192, // definer (1596x) + 57729: 193, // hash (1596x) + 57736: 194, // identified (1596x) + 57857: 195, // respect (1596x) + 57864: 196, // role (1596x) + 57938: 197, // timestampType (1596x) + 57960: 198, // value (1596x) + 57962: 199, // vectorType (1596x) + 57614: 200, // backup (1595x) + 57626: 201, // booleanType (1595x) + 57697: 202, // enforced (1595x) + 57720: 203, // following (1595x) + 57758: 204, // less (1595x) + 57799: 205, // nowait (1595x) + 57808: 206, // only (1595x) + 57872: 207, // savepoint (1595x) + 57892: 208, // skip (1595x) + 58064: 209, // taskTypes (1595x) + 57934: 210, // textType (1595x) + 57935: 211, // than (1595x) + 58159: 212, // tiFlash (1595x) + 57952: 213, // unbounded (1595x) + 57619: 214, // binding (1594x) + 57623: 215, // bitType (1594x) + 57625: 216, // boolType (1594x) + 57700: 217, // enum (1594x) + 57735: 218, // hypo (1594x) + 58134: 219, // job (1594x) + 57786: 220, // national (1594x) + 57787: 221, // ncharType (1594x) + 58030: 222, // next_row_id (1594x) + 57801: 223, // nvarcharType (1594x) + 57803: 224, // offset (1594x) + 57827: 225, // policy (1594x) + 58037: 226, // predicate (1594x) + 57852: 227, // replica (1594x) + 57932: 228, // temporary (1594x) + 57958: 229, // user (1594x) + 57682: 230, // digest (1593x) + 58135: 231, // jobs (1593x) + 57763: 232, // location (1593x) + 58034: 233, // planCache (1593x) + 57829: 234, // prepare (1593x) + 58150: 235, // stats (1593x) + 57956: 236, // unknown (1593x) + 57965: 237, // wait (1593x) + 57627: 238, // btree (1592x) + 57988: 239, // cooldown (1592x) + 57679: 240, // declare (1592x) + 57996: 241, // dryRun (1592x) + 57721: 242, // format (1592x) + 57749: 243, // isolation (1592x) + 57755: 244, // last (1592x) + 57768: 245, // max_idxnum (1592x) + 57776: 246, // memory (1592x) + 57789: 247, // next (1592x) + 57802: 248, // off (1592x) + 57811: 249, // optional (1592x) + 57822: 250, // per_db (1592x) + 57832: 251, // privileges (1592x) + 57855: 252, // required (1592x) + 57870: 253, // rtree (1592x) + 58145: 254, // sampleRate (1592x) + 57881: 255, // sequence (1592x) + 57884: 256, // session (1592x) + 57895: 257, // slow (1592x) + 58082: 258, // unlimited (1592x) + 57959: 259, // validation (1592x) + 57961: 260, // variables (1592x) + 57606: 261, // attributes (1591x) + 58123: 262, // cancel (1591x) + 57653: 263, // compact (1591x) + 58128: 264, // ddl (1591x) + 57684: 265, // disable (1591x) + 57688: 266, // do (1591x) + 57690: 267, // dynamic (1591x) + 57691: 268, // enable (1591x) + 57701: 269, // errorKwd (1591x) + 57999: 270, // exact (1591x) + 57719: 271, // flush (1591x) + 57723: 272, // full (1591x) + 57728: 273, // handler (1591x) + 57732: 274, // history (1591x) + 57774: 275, // mb (1591x) + 57782: 276, // mode (1591x) + 57820: 277, // pause (1591x) + 57825: 278, // plugins (1591x) + 57834: 279, // processlist (1591x) + 57845: 280, // recover (1591x) + 57850: 281, // repair (1591x) + 57851: 282, // repeatable (1591x) + 58048: 283, // similar (1591x) + 58149: 284, // statistics (1591x) + 57923: 285, // subpartitions (1591x) + 58158: 286, // tidb (1591x) + 57970: 287, // without (1591x) + 58092: 288, // admin (1590x) + 58093: 289, // batch (1590x) + 57616: 290, // bdr (1590x) + 57622: 291, // binlog (1590x) + 57624: 292, // block (1590x) + 57983: 293, // br (1590x) + 57984: 294, // briefType (1590x) + 58094: 295, // buckets (1590x) + 57630: 296, // calibrate (1590x) + 57631: 297, // capture (1590x) + 58124: 298, // cardinality (1590x) + 57634: 299, // chain (1590x) + 57642: 300, // clientErrorsSummary (1590x) + 58125: 301, // cmSketch (1590x) + 57646: 302, // coalesce (1590x) + 57654: 303, // compressed (1590x) + 57663: 304, // context (1590x) + 57989: 305, // copyKwd (1590x) + 58127: 306, // correlation (1590x) + 57664: 307, // cpu (1590x) + 57678: 308, // deallocate (1590x) + 58129: 309, // dependency (1590x) + 57683: 310, // directory (1590x) + 57686: 311, // discard (1590x) + 57687: 312, // disk (1590x) + 57995: 313, // dotType (1590x) + 58131: 314, // drainer (1590x) + 58132: 315, // dry (1590x) + 57689: 316, // duplicate (1590x) + 57707: 317, // exchange (1590x) + 57709: 318, // execute (1590x) + 57710: 319, // expansion (1590x) + 58003: 320, // flashback (1590x) + 57725: 321, // general (1590x) + 57730: 322, // help (1590x) + 58011: 323, // high (1590x) + 57731: 324, // histogram (1590x) + 57733: 325, // hosts (1590x) + 57702: 326, // identSQLErrors (1590x) + 57741: 327, // incremental (1590x) + 57742: 328, // indexes (1590x) + 58012: 329, // inplace (1590x) + 57744: 330, // instance (1590x) + 58013: 331, // instant (1590x) + 57748: 332, // ipc (1590x) + 57753: 333, // labels (1590x) + 57764: 334, // locked (1590x) + 58025: 335, // low (1590x) + 58027: 336, // medium (1590x) + 58028: 337, // metadata (1590x) + 57783: 338, // modify (1590x) + 57790: 339, // nextval (1590x) + 58136: 340, // nodeID (1590x) + 58137: 341, // nodeState (1590x) + 57800: 342, // nulls (1590x) + 57813: 343, // pageSym (1590x) + 58140: 344, // pump (1590x) + 57838: 345, // purge (1590x) + 57844: 346, // rebuild (1590x) + 57846: 347, // redundant (1590x) + 57847: 348, // reload (1590x) + 57859: 349, // restore (1590x) + 57867: 350, // routine (1590x) + 58046: 351, // s3 (1590x) + 58146: 352, // samples (1590x) + 57876: 353, // secondaryLoad (1590x) + 57877: 354, // secondaryUnload (1590x) + 57887: 355, // share (1590x) + 57889: 356, // shutdown (1590x) + 57894: 357, // slave (1590x) + 57898: 358, // source (1590x) + 58152: 359, // statsExtended (1590x) + 57914: 360, // statsOptions (1590x) + 58056: 361, // stop (1590x) + 57925: 362, // swaps (1590x) + 58065: 363, // tidbJson (1590x) + 58070: 364, // tokudbDefault (1590x) + 58071: 365, // tokudbFast (1590x) + 58072: 366, // tokudbLzma (1590x) + 58073: 367, // tokudbQuickLZ (1590x) + 58074: 368, // tokudbSmall (1590x) + 58075: 369, // tokudbSnappy (1590x) + 58076: 370, // tokudbUncompressed (1590x) + 58077: 371, // tokudbZlib (1590x) + 58078: 372, // tokudbZstd (1590x) + 58160: 373, // topn (1590x) + 57942: 374, // trace (1590x) + 57943: 375, // traditional (1590x) + 58081: 376, // trueCardCost (1590x) + 58087: 377, // verboseType (1590x) + 57967: 378, // warnings (1590x) + 57597: 379, // advise (1589x) + 57599: 380, // against (1589x) + 57600: 381, // ago (1589x) + 57602: 382, // always (1589x) + 57615: 383, // backups (1589x) + 57618: 384, // bernoulli (1589x) + 57621: 385, // bindingCache (1589x) + 58112: 386, // builtins (1589x) + 57632: 387, // cascaded (1589x) + 57633: 388, // causal (1589x) + 57640: 389, // cleanup (1589x) + 57641: 390, // client (1589x) + 57644: 391, // cluster (1589x) + 57647: 392, // collation (1589x) + 58126: 393, // columnStatsUsage (1589x) + 57652: 394, // committed (1589x) + 57659: 395, // config (1589x) + 57661: 396, // consistency (1589x) + 57662: 397, // consistent (1589x) + 58130: 398, // depth (1589x) + 57685: 399, // disabled (1589x) + 57997: 400, // dump (1589x) + 57692: 401, // enabled (1589x) + 57699: 402, // engines (1589x) + 57705: 403, // events (1589x) + 57706: 404, // evolve (1589x) + 57711: 405, // expire (1589x) + 58001: 406, // exprPushdownBlacklist (1589x) + 57712: 407, // extended (1589x) + 57714: 408, // faultsSym (1589x) + 57722: 409, // found (1589x) + 57724: 410, // function (1589x) + 57727: 411, // grants (1589x) + 58133: 412, // histogramsInFlight (1589x) + 58014: 413, // internal (1589x) + 57746: 414, // invoker (1589x) + 57747: 415, // io (1589x) + 57754: 416, // language (1589x) + 57759: 417, // level (1589x) + 57760: 418, // list (1589x) + 58024: 419, // log (1589x) + 57766: 420, // master (1589x) + 57769: 421, // max_minutes (1589x) + 57788: 422, // never (1589x) + 57798: 423, // none (1589x) + 57804: 424, // oltpReadOnly (1589x) + 57805: 425, // oltpReadWrite (1589x) + 57806: 426, // oltpWriteOnly (1589x) + 58138: 427, // optimistic (1589x) + 58032: 428, // optRuleBlacklist (1589x) + 57814: 429, // parser (1589x) + 57815: 430, // partial (1589x) + 57816: 431, // partitioning (1589x) + 57823: 432, // per_table (1589x) + 57821: 433, // percent (1589x) + 58139: 434, // pessimistic (1589x) + 57826: 435, // point (1589x) + 57830: 436, // preserve (1589x) + 57835: 437, // profile (1589x) + 57836: 438, // profiles (1589x) + 57840: 439, // queries (1589x) + 58041: 440, // recent (1589x) + 58141: 441, // region (1589x) + 58042: 442, // replayer (1589x) + 57860: 443, // restores (1589x) + 57862: 444, // reuse (1589x) + 57866: 445, // rollup (1589x) + 58144: 446, // run (1589x) + 57874: 447, // secondary (1589x) + 57878: 448, // security (1589x) + 57883: 449, // serializable (1589x) + 58147: 450, // sessionStates (1589x) + 57891: 451, // simple (1589x) + 58153: 452, // statsHealthy (1589x) + 58154: 453, // statsHistograms (1589x) + 58155: 454, // statsLocked (1589x) + 58156: 455, // statsMeta (1589x) + 57926: 456, // switchesSym (1589x) + 57927: 457, // system (1589x) + 57928: 458, // systemTime (1589x) + 58063: 459, // target (1589x) + 57933: 460, // temptable (1589x) + 58069: 461, // tls (1589x) + 58079: 462, // top (1589x) + 57940: 463, // tpcc (1589x) + 57941: 464, // tpch10 (1589x) + 57944: 465, // transaction (1589x) + 57945: 466, // triggers (1589x) + 57953: 467, // uncommitted (1589x) + 57954: 468, // undefined (1589x) + 57957: 469, // unset (1589x) + 58161: 470, // width (1589x) + 57972: 471, // workload (1589x) + 57973: 472, // x509 (1589x) + 57975: 473, // addDate (1588x) + 57603: 474, // any (1588x) + 57976: 475, // approxCountDistinct (1588x) + 57977: 476, // approxPercentile (1588x) + 57611: 477, // avg (1588x) + 57979: 478, // bitAnd (1588x) + 57980: 479, // bitOr (1588x) + 57981: 480, // bitXor (1588x) + 57982: 481, // bound (1588x) + 57986: 482, // cast (1588x) + 57990: 483, // curDate (1588x) + 57991: 484, // curTime (1588x) + 57992: 485, // dateAdd (1588x) + 57993: 486, // dateSub (1588x) + 57703: 487, // escape (1588x) + 57704: 488, // event (1588x) + 57708: 489, // exclusive (1588x) + 58002: 490, // extract (1588x) + 57716: 491, // file (1588x) + 58004: 492, // follower (1588x) + 58009: 493, // getFormat (1588x) + 58010: 494, // groupConcat (1588x) + 57739: 495, // imports (1588x) + 58015: 496, // ioReadBandwidth (1588x) + 58016: 497, // ioWriteBandwidth (1588x) + 58017: 498, // jsonArrayagg (1588x) + 58018: 499, // jsonObjectAgg (1588x) + 57756: 500, // lastval (1588x) + 58019: 501, // leader (1588x) + 58021: 502, // learner (1588x) + 58026: 503, // max (1588x) + 57775: 504, // member (1588x) + 58029: 505, // min (1588x) + 57785: 506, // names (1588x) + 58031: 507, // now (1588x) + 58036: 508, // position (1588x) + 57833: 509, // process (1588x) + 57837: 510, // proxy (1588x) + 57842: 511, // quick (1588x) + 57853: 512, // replicas (1588x) + 57854: 513, // replication (1588x) + 58143: 514, // reset (1588x) + 57863: 515, // reverse (1588x) + 57868: 516, // rowCount (1588x) + 58044: 517, // running (1588x) + 57885: 518, // setval (1588x) + 57888: 519, // shared (1588x) + 57897: 520, // some (1588x) + 57899: 521, // sqlBufferResult (1588x) + 57900: 522, // sqlCache (1588x) + 57901: 523, // sqlNoCache (1588x) + 58049: 524, // staleness (1588x) + 58055: 525, // std (1588x) + 58052: 526, // stddev (1588x) + 58053: 527, // stddevPop (1588x) + 58054: 528, // stddevSamp (1588x) + 58057: 529, // strict (1588x) + 58058: 530, // strong (1588x) + 58059: 531, // subDate (1588x) + 58060: 532, // substring (1588x) + 58061: 533, // sum (1588x) + 57924: 534, // super (1588x) + 58067: 535, // timestampAdd (1588x) + 58068: 536, // timestampDiff (1588x) + 58080: 537, // trim (1588x) + 57947: 538, // tsoType (1588x) + 58084: 539, // variance (1588x) + 58085: 540, // varPop (1588x) + 58086: 541, // varSamp (1588x) + 58090: 542, // voter (1588x) + 57969: 543, // weightString (1588x) + 57505: 544, // on (1508x) + 40: 545, // '(' (1499x) + 57590: 546, // with (1368x) + 57353: 547, // stringLit (1348x) + 58180: 548, // not2 (1310x) + 57405: 549, // defaultKwd (1262x) + 57498: 550, // not (1241x) + 57369: 551, // as (1209x) + 57384: 552, // collate (1175x) 57568: 553, // union (1153x) 57475: 554, // left (1149x) 57534: 555, // right (1149x) - 57576: 556, // using (1138x) + 57576: 556, // using (1140x) 43: 557, // '+' (1124x) 45: 558, // '-' (1122x) 57496: 559, // mod (1102x) - 57515: 560, // partition (1085x) - 57502: 561, // null (1063x) - 57580: 562, // values (1059x) - 57446: 563, // ignore (1045x) + 57515: 560, // partition (1094x) + 57502: 561, // null (1070x) + 57580: 562, // values (1061x) + 57446: 563, // ignore (1047x) 57421: 564, // except (1042x) 57461: 565, // intersect (1041x) - 57530: 566, // replace (1039x) + 57530: 566, // replace (1041x) 57381: 567, // charType (1028x) 57426: 568, // fetch (1023x) 58169: 569, // eq (1021x) @@ -1504,7 +1504,7 @@ var ( 57463: 574, // into (1007x) 42: 575, // '*' (1005x) 57434: 576, // from (1002x) - 57483: 577, // lock (998x) + 57483: 577, // lock (1000x) 57587: 578, // where (990x) 57510: 579, // order (986x) 57432: 580, // force (979x) @@ -1549,7 +1549,7 @@ var ( 57370: 619, // asc (856x) 57448: 620, // in (850x) 57559: 621, // then (850x) - 57556: 622, // tableKwd (847x) + 57556: 622, // tableKwd (849x) 47: 623, // '/' (842x) 60: 624, // '<' (842x) 62: 625, // '>' (842x) @@ -1568,10 +1568,10 @@ var ( 58176: 638, // neqSynonym (840x) 58177: 639, // nulleq (840x) 57529: 640, // repeat (840x) - 57371: 641, // between (835x) - 57425: 642, // falseKwd (833x) - 57354: 643, // singleAtIdentifier (833x) - 57566: 644, // trueKwd (833x) + 57354: 641, // singleAtIdentifier (836x) + 57371: 642, // between (835x) + 57425: 643, // falseKwd (833x) + 57567: 644, // trueKwd (833x) 57396: 645, // currentUser (828x) 57447: 646, // ilike (827x) 57526: 647, // regexpKwd (827x) @@ -1585,19 +1585,19 @@ var ( 57462: 655, // interval (819x) 58178: 656, // paramMarker (818x) 123: 657, // '{' (816x) - 57398: 658, // database (812x) - 57422: 659, // exists (811x) - 57388: 660, // convert (809x) - 57352: 661, // underscoreCS (808x) - 58102: 662, // builtinCurDate (807x) - 58110: 663, // builtinNow (807x) - 57392: 664, // currentDate (807x) - 57395: 665, // currentTs (807x) - 57355: 666, // doubleAtIdentifier (807x) - 57481: 667, // localTime (807x) - 57482: 668, // localTs (807x) - 57467: 669, // key (806x) - 57540: 670, // selectKwd (806x) + 57467: 658, // key (813x) + 57398: 659, // database (812x) + 57422: 660, // exists (811x) + 57388: 661, // convert (809x) + 57540: 662, // selectKwd (808x) + 57352: 663, // underscoreCS (808x) + 58102: 664, // builtinCurDate (807x) + 58110: 665, // builtinNow (807x) + 57392: 666, // currentDate (807x) + 57395: 667, // currentTs (807x) + 57355: 668, // doubleAtIdentifier (807x) + 57481: 669, // localTime (807x) + 57482: 670, // localTs (807x) 58101: 671, // builtinCount (805x) 57545: 672, // sql (805x) 33: 673, // '!' (804x) @@ -1637,25 +1637,25 @@ var ( 57500: 707, // nthValue (804x) 57501: 708, // ntile (804x) 57516: 709, // percentRank (804x) - 57521: 710, // rank (804x) - 57538: 711, // rowNumber (804x) - 57567: 712, // tidbCurrentTSO (804x) - 57577: 713, // utcDate (804x) - 57578: 714, // utcTime (804x) - 57579: 715, // utcTimestamp (804x) - 57518: 716, // primary (797x) - 57383: 717, // check (796x) - 57359: 718, // pipes (789x) - 57569: 719, // unique (789x) - 57386: 720, // constraint (786x) - 57525: 721, // references (784x) - 57436: 722, // generated (780x) + 57518: 710, // primary (804x) + 57521: 711, // rank (804x) + 57538: 712, // rowNumber (804x) + 57560: 713, // tidbCurrentTSO (804x) + 57577: 714, // utcDate (804x) + 57578: 715, // utcTime (804x) + 57579: 716, // utcTimestamp (804x) + 57383: 717, // check (803x) + 57569: 718, // unique (796x) + 57386: 719, // constraint (793x) + 57525: 720, // references (791x) + 57359: 721, // pipes (789x) + 57436: 722, // generated (787x) 57382: 723, // character (768x) 57449: 724, // index (752x) 57488: 725, // match (739x) - 57563: 726, // to (647x) - 57366: 727, // analyze (641x) - 57573: 728, // update (637x) + 57573: 726, // update (695x) + 57564: 727, // to (647x) + 57366: 728, // analyze (641x) 46: 729, // '.' (626x) 57364: 730, // all (625x) 57368: 731, // array (590x) @@ -1703,9 +1703,9 @@ var ( 57493: 773, // middleIntType (552x) 57503: 774, // numericType (552x) 57543: 775, // smallIntType (552x) - 57560: 776, // tinyblobType (552x) - 57561: 777, // tinyIntType (552x) - 57562: 778, // tinytextType (552x) + 57561: 776, // tinyblobType (552x) + 57562: 777, // tinyIntType (552x) + 57563: 778, // tinytextType (552x) 57348: 779, // toTimestamp (552x) 57349: 780, // toTSO (552x) 57380: 781, // change (550x) @@ -1713,16 +1713,16 @@ var ( 57528: 783, // rename (550x) 57591: 784, // write (550x) 57363: 785, // add (549x) - 58450: 786, // Identifier (538x) - 58534: 787, // NotKeywordToken (538x) - 58812: 788, // TiDBKeyword (538x) - 58822: 789, // UnReservedKeyword (538x) - 58778: 790, // SubSelect (262x) - 58832: 791, // UserVariable (201x) - 58503: 792, // Literal (199x) - 58749: 793, // SimpleIdent (199x) - 58768: 794, // StringLiteral (199x) - 58530: 795, // NextValueForSequence (197x) + 58452: 786, // Identifier (540x) + 58536: 787, // NotKeywordToken (540x) + 58816: 788, // TiDBKeyword (540x) + 58826: 789, // UnReservedKeyword (540x) + 58782: 790, // SubSelect (262x) + 58839: 791, // UserVariable (204x) + 58505: 792, // Literal (199x) + 58751: 793, // SimpleIdent (199x) + 58772: 794, // StringLiteral (199x) + 58532: 795, // NextValueForSequence (197x) 58427: 796, // FunctionCallGeneric (195x) 58428: 797, // FunctionCallKeyword (195x) 58429: 798, // FunctionCallNonKeyword (195x) @@ -1732,50 +1732,50 @@ var ( 58433: 802, // FunctionNameDatetimePrecision (195x) 58434: 803, // FunctionNameOptionalBraces (195x) 58435: 804, // FunctionNameSequence (195x) - 58748: 805, // SimpleExpr (195x) - 58779: 806, // SumExpr (195x) - 58781: 807, // SystemVariable (195x) - 58843: 808, // Variable (195x) - 58867: 809, // WindowFuncCall (195x) + 58750: 805, // SimpleExpr (195x) + 58783: 806, // SumExpr (195x) + 58785: 807, // SystemVariable (195x) + 58850: 808, // Variable (195x) + 58874: 809, // WindowFuncCall (195x) 58261: 810, // BitExpr (177x) - 58610: 811, // PredicateExpr (145x) + 58612: 811, // PredicateExpr (145x) 58264: 812, // BoolPri (142x) 58390: 813, // Expression (142x) - 58528: 814, // NUM (122x) - 58883: 815, // logAnd (107x) - 58884: 816, // logOr (107x) + 58530: 814, // NUM (122x) + 58890: 815, // logAnd (107x) + 58891: 816, // logOr (107x) 58381: 817, // EqOpt (98x) 57407: 818, // deleteKwd (87x) - 58791: 819, // TableName (82x) - 58769: 820, // StringName (56x) - 58703: 821, // SelectStmt (54x) - 58704: 822, // SelectStmtBasic (54x) - 58706: 823, // SelectStmtFromDualTable (54x) - 58707: 824, // SelectStmtFromTable (54x) - 58724: 825, // SetOprClause (54x) - 58725: 826, // SetOprClauseList (53x) - 58728: 827, // SetOprStmtWithLimitOrderBy (53x) - 58729: 828, // SetOprStmtWoutLimitOrderBy (53x) - 58494: 829, // LengthNum (51x) - 58873: 830, // WithClause (51x) - 58716: 831, // SelectStmtWithClause (50x) - 58727: 832, // SetOprStmt (50x) + 58795: 819, // TableName (82x) + 58773: 820, // StringName (56x) + 58705: 821, // SelectStmt (54x) + 58706: 822, // SelectStmtBasic (54x) + 58708: 823, // SelectStmtFromDualTable (54x) + 58709: 824, // SelectStmtFromTable (54x) + 58726: 825, // SetOprClause (54x) + 58727: 826, // SetOprClauseList (53x) + 58730: 827, // SetOprStmtWithLimitOrderBy (53x) + 58731: 828, // SetOprStmtWoutLimitOrderBy (53x) + 58496: 829, // LengthNum (51x) + 58880: 830, // WithClause (51x) + 58718: 831, // SelectStmtWithClause (50x) + 58729: 832, // SetOprStmt (50x) 57571: 833, // unsigned (50x) 57594: 834, // zerofill (48x) 57514: 835, // over (45x) 58289: 836, // ColumnName (42x) - 58826: 837, // UpdateStmtNoWith (42x) + 58833: 837, // UpdateStmtNoWith (42x) 58348: 838, // DeleteWithoutUsingStmt (41x) - 58479: 839, // InsertIntoStmt (39x) - 58667: 840, // ReplaceIntoStmt (39x) - 58825: 841, // UpdateStmt (39x) + 58481: 839, // InsertIntoStmt (39x) + 58669: 840, // ReplaceIntoStmt (39x) + 58832: 841, // UpdateStmt (39x) 57410: 842, // describe (36x) 57411: 843, // distinct (36x) 57412: 844, // distinctRow (36x) 57588: 845, // while (36x) - 58482: 846, // Int64Num (35x) + 58484: 846, // Int64Num (35x) 57487: 847, // lowPriority (35x) - 58872: 848, // WindowingClause (35x) + 58879: 848, // WindowingClause (35x) 57406: 849, // delayed (34x) 58347: 850, // DeleteWithUsingStmt (34x) 57441: 851, // highPriority (34x) @@ -1784,110 +1784,110 @@ var ( 58346: 854, // DeleteFromStmt (32x) 57357: 855, // hintComment (28x) 58401: 856, // FieldLen (27x) - 58581: 857, // OrderBy (26x) - 58710: 858, // SelectStmtLimit (26x) - 58574: 859, // OptWindowingClause (24x) + 58583: 857, // OrderBy (26x) + 58712: 858, // SelectStmtLimit (26x) + 58576: 859, // OptWindowingClause (24x) 58234: 860, // AnalyzeTableStmt (23x) 58302: 861, // CommitStmt (23x) - 58694: 862, // RollbackStmt (23x) - 58732: 863, // SetStmt (23x) + 58696: 862, // RollbackStmt (23x) + 58734: 863, // SetStmt (23x) 57549: 864, // sqlBigResult (23x) 57550: 865, // sqlCalcFoundRows (23x) 57551: 866, // sqlSmallResult (23x) 57558: 867, // terminated (21x) 58279: 868, // CharsetKw (20x) - 58451: 869, // IfExists (20x) - 58834: 870, // Username (20x) + 58453: 869, // IfExists (20x) + 58841: 870, // Username (20x) 57419: 871, // enclosed (19x) 58386: 872, // ExplainStmt (19x) 58387: 873, // ExplainSym (19x) 58391: 874, // ExpressionList (19x) - 58593: 875, // PartitionNameList (19x) - 58820: 876, // TruncateTableStmt (19x) - 58827: 877, // UseStmt (19x) + 58595: 875, // PartitionNameList (19x) + 58824: 876, // TruncateTableStmt (19x) + 58834: 877, // UseStmt (19x) 57420: 878, // escaped (18x) 57351: 879, // optionallyEnclosedBy (18x) - 58604: 880, // PlacementPolicyOption (18x) - 58621: 881, // ProcedureBlockContent (18x) - 58650: 882, // ProcedureUnlabelLoopStmt (18x) - 58623: 883, // ProcedureCaseStmt (17x) - 58624: 884, // ProcedureCloseCur (17x) - 58630: 885, // ProcedureFetchInto (17x) - 58636: 886, // ProcedureIfstmt (17x) - 58637: 887, // ProcedureIterate (17x) - 58638: 888, // ProcedureLabeledBlock (17x) - 58652: 889, // ProcedurelabeledLoopStmt (17x) - 58639: 890, // ProcedureLeave (17x) - 58640: 891, // ProcedureOpenCur (17x) - 58643: 892, // ProcedureProcStmt (17x) - 58646: 893, // ProcedureSearchedCase (17x) - 58647: 894, // ProcedureSimpleCase (17x) - 58648: 895, // ProcedureStatementStmt (17x) - 58651: 896, // ProcedureUnlabeledBlock (17x) - 58649: 897, // ProcedureUnlabelLoopBlock (17x) - 58792: 898, // TableNameList (17x) - 58452: 899, // IfNotExists (16x) - 58557: 900, // OptFieldLen (16x) + 58606: 880, // PlacementPolicyOption (18x) + 58623: 881, // ProcedureBlockContent (18x) + 58652: 882, // ProcedureUnlabelLoopStmt (18x) + 58625: 883, // ProcedureCaseStmt (17x) + 58626: 884, // ProcedureCloseCur (17x) + 58632: 885, // ProcedureFetchInto (17x) + 58638: 886, // ProcedureIfstmt (17x) + 58639: 887, // ProcedureIterate (17x) + 58640: 888, // ProcedureLabeledBlock (17x) + 58654: 889, // ProcedurelabeledLoopStmt (17x) + 58641: 890, // ProcedureLeave (17x) + 58642: 891, // ProcedureOpenCur (17x) + 58645: 892, // ProcedureProcStmt (17x) + 58648: 893, // ProcedureSearchedCase (17x) + 58649: 894, // ProcedureSimpleCase (17x) + 58650: 895, // ProcedureStatementStmt (17x) + 58653: 896, // ProcedureUnlabeledBlock (17x) + 58651: 897, // ProcedureUnlabelLoopBlock (17x) + 58796: 898, // TableNameList (17x) + 58454: 899, // IfNotExists (16x) + 58559: 900, // OptFieldLen (16x) 58353: 901, // DistinctKwd (15x) - 58814: 902, // TimestampUnit (15x) + 58818: 902, // TimestampUnit (15x) 58354: 903, // DistinctOpt (14x) - 58857: 904, // WhereClause (14x) - 58858: 905, // WhereClauseOptional (14x) + 58864: 904, // WhereClause (14x) + 58865: 905, // WhereClauseOptional (14x) 58341: 906, // DefaultKwdOpt (13x) 58382: 907, // EqOrAssignmentEq (13x) 58389: 908, // ExprOrDefault (13x) - 58488: 909, // JoinTable (12x) + 58490: 909, // JoinTable (12x) 57499: 910, // noWriteToBinLog (12x) - 58552: 911, // OptBinary (12x) + 58554: 911, // OptBinary (12x) 57527: 912, // release (12x) - 58691: 913, // RolenameComposed (12x) - 58788: 914, // TableFactor (12x) - 58800: 915, // TableRef (12x) - 58813: 916, // TimeUnit (12x) + 58693: 913, // RolenameComposed (12x) + 58792: 914, // TableFactor (12x) + 58804: 915, // TableRef (12x) + 58817: 916, // TimeUnit (12x) 58233: 917, // AnalyzeOptionListOpt (11x) 58290: 918, // ColumnNameList (11x) 58422: 919, // FromOrIn (11x) 58229: 920, // AlterTableStmt (10x) 58280: 921, // CharsetName (10x) 58331: 922, // DBName (10x) - 58457: 923, // ImportIntoStmt (10x) + 58459: 923, // ImportIntoStmt (10x) 57480: 924, // load (10x) - 58532: 925, // NoWriteToBinLogAliasOpt (10x) - 58582: 926, // OrderByOptional (10x) - 58584: 927, // PartDefOption (10x) - 58747: 928, // SignedNum (10x) + 58534: 925, // NoWriteToBinLogAliasOpt (10x) + 58584: 926, // OrderByOptional (10x) + 58586: 927, // PartDefOption (10x) + 58749: 928, // SignedNum (10x) 58267: 929, // BuggyDefaultFalseDistinctOpt (9x) 58340: 930, // DefaultFalseDistinctOpt (9x) - 58489: 931, // JoinType (9x) - 58535: 932, // NotSym (9x) - 58542: 933, // NumLiteral (9x) - 58690: 934, // Rolename (9x) - 58685: 935, // RoleNameString (9x) + 58491: 931, // JoinType (9x) + 58537: 932, // NotSym (9x) + 58544: 933, // NumLiteral (9x) + 58692: 934, // Rolename (9x) + 58687: 935, // RoleNameString (9x) 58329: 936, // CrossOpt (8x) 58388: 937, // ExplainableStmt (8x) 58392: 938, // ExpressionListOpt (8x) - 58473: 939, // IndexPartSpecification (8x) - 58490: 940, // KeyOrIndex (8x) - 58711: 941, // SelectStmtLimitOpt (8x) - 58846: 942, // VariableName (8x) + 58475: 939, // IndexPartSpecification (8x) + 58492: 940, // KeyOrIndex (8x) + 58713: 941, // SelectStmtLimitOpt (8x) + 58853: 942, // VariableName (8x) 58214: 943, // AllOrPartitionNameList (7x) 58258: 944, // BindableStmt (7x) 58312: 945, // ConstraintKeywordOpt (7x) 58336: 946, // DatabaseSym (7x) 58407: 947, // FieldsOrColumns (7x) 58419: 948, // ForceOpt (7x) - 58474: 949, // IndexPartSpecificationList (7x) + 58476: 949, // IndexPartSpecificationList (7x) 57450: 950, // infile (7x) 57469: 951, // kill (7x) - 58614: 952, // Priority (7x) - 58644: 953, // ProcedureProcStmt1s (7x) - 58674: 954, // ResourceGroupName (7x) - 58695: 955, // RowFormat (7x) - 58698: 956, // RowValue (7x) - 58722: 957, // SetExpr (7x) - 58734: 958, // ShowDatabaseNameOpt (7x) - 58795: 959, // TableOptimizerHints (7x) - 58797: 960, // TableOption (7x) + 58616: 952, // Priority (7x) + 58646: 953, // ProcedureProcStmt1s (7x) + 58676: 954, // ResourceGroupName (7x) + 58697: 955, // RowFormat (7x) + 58700: 956, // RowValue (7x) + 58724: 957, // SetExpr (7x) + 58736: 958, // ShowDatabaseNameOpt (7x) + 58799: 959, // TableOptimizerHints (7x) + 58801: 960, // TableOption (7x) 57584: 961, // varying (7x) 58256: 962, // BeginTransactionStmt (6x) 58248: 963, // BRIEBooleanOptionName (6x) @@ -1903,19 +1903,19 @@ var ( 58383: 973, // EscapedTableRef (6x) 58405: 974, // FieldTerminator (6x) 57437: 975, // grant (6x) - 58454: 976, // IgnoreOptional (6x) - 58465: 977, // IndexInvisible (6x) - 58470: 978, // IndexNameList (6x) - 58476: 979, // IndexType (6x) - 58510: 980, // LoadDataStmt (6x) - 58594: 981, // PartitionNameListOpt (6x) + 58456: 976, // IgnoreOptional (6x) + 58467: 977, // IndexInvisible (6x) + 58472: 978, // IndexNameList (6x) + 58478: 979, // IndexType (6x) + 58512: 980, // LoadDataStmt (6x) + 58596: 981, // PartitionNameListOpt (6x) 57519: 982, // procedure (6x) - 58662: 983, // ReleaseSavepointStmt (6x) - 58692: 984, // RolenameList (6x) - 58699: 985, // SavepointStmt (6x) + 58664: 983, // ReleaseSavepointStmt (6x) + 58694: 984, // RolenameList (6x) + 58701: 985, // SavepointStmt (6x) 57542: 986, // show (6x) - 58835: 987, // UsernameList (6x) - 58874: 988, // WithClustered (6x) + 58842: 987, // UsernameList (6x) + 58881: 988, // WithClustered (6x) 58212: 989, // AlgorithmClause (5x) 58269: 990, // ByItem (5x) 58284: 991, // CollationName (5x) @@ -1924,21 +1924,21 @@ var ( 58351: 994, // DirectResourceGroupOption (5x) 58403: 995, // FieldOpt (5x) 58404: 996, // FieldOpts (5x) - 58448: 997, // IdentList (5x) - 58468: 998, // IndexName (5x) - 58471: 999, // IndexOption (5x) - 58472: 1000, // IndexOptionList (5x) - 58499: 1001, // LimitOption (5x) - 58514: 1002, // LockClause (5x) - 58554: 1003, // OptCharsetWithOptBinary (5x) - 58564: 1004, // OptNullTreatment (5x) - 58608: 1005, // PolicyName (5x) - 58615: 1006, // PriorityOpt (5x) - 58702: 1007, // SelectLockOpt (5x) - 58709: 1008, // SelectStmtIntoOption (5x) - 58796: 1009, // TableOptimizerHintsOpt (5x) - 58801: 1010, // TableRefs (5x) - 58828: 1011, // UserSpec (5x) + 58450: 997, // IdentList (5x) + 58470: 998, // IndexName (5x) + 58473: 999, // IndexOption (5x) + 58474: 1000, // IndexOptionList (5x) + 58501: 1001, // LimitOption (5x) + 58516: 1002, // LockClause (5x) + 58556: 1003, // OptCharsetWithOptBinary (5x) + 58566: 1004, // OptNullTreatment (5x) + 58610: 1005, // PolicyName (5x) + 58617: 1006, // PriorityOpt (5x) + 58704: 1007, // SelectLockOpt (5x) + 58711: 1008, // SelectStmtIntoOption (5x) + 58800: 1009, // TableOptimizerHintsOpt (5x) + 58805: 1010, // TableRefs (5x) + 58835: 1011, // UserSpec (5x) 58237: 1012, // AsOfClause (4x) 58240: 1013, // Assignment (4x) 58245: 1014, // AuthString (4x) @@ -1948,27 +1948,27 @@ var ( 58306: 1018, // ConfigItemName (4x) 58310: 1019, // Constraint (4x) 58415: 1020, // FloatOpt (4x) - 58477: 1021, // IndexTypeName (4x) - 58541: 1022, // NumList (4x) + 58479: 1021, // IndexTypeName (4x) + 58543: 1022, // NumList (4x) 57507: 1023, // option (4x) 57508: 1024, // optionally (4x) - 58571: 1025, // OptWild (4x) + 58573: 1025, // OptWild (4x) 57512: 1026, // outer (4x) - 58609: 1027, // Precision (4x) - 58658: 1028, // ReferDef (4x) - 58682: 1029, // RestrictOrCascadeOpt (4x) - 58697: 1030, // RowStmt (4x) - 58717: 1031, // SequenceOption (4x) - 58783: 1032, // TableAsName (4x) - 58784: 1033, // TableAsNameOpt (4x) - 58794: 1034, // TableNameOptWild (4x) - 58798: 1035, // TableOptionList (4x) - 58809: 1036, // TextString (4x) - 58816: 1037, // TraceableStmt (4x) - 58817: 1038, // TransactionChar (4x) - 58829: 1039, // UserSpecList (4x) - 58842: 1040, // Varchar (4x) - 58868: 1041, // WindowName (4x) + 58611: 1027, // Precision (4x) + 58660: 1028, // ReferDef (4x) + 58684: 1029, // RestrictOrCascadeOpt (4x) + 58699: 1030, // RowStmt (4x) + 58719: 1031, // SequenceOption (4x) + 58787: 1032, // TableAsName (4x) + 58788: 1033, // TableAsNameOpt (4x) + 58798: 1034, // TableNameOptWild (4x) + 58802: 1035, // TableOptionList (4x) + 58813: 1036, // TextString (4x) + 58820: 1037, // TraceableStmt (4x) + 58821: 1038, // TransactionChar (4x) + 58836: 1039, // UserSpecList (4x) + 58849: 1040, // Varchar (4x) + 58875: 1041, // WindowName (4x) 58241: 1042, // AssignmentList (3x) 58242: 1043, // AttributesOpt (3x) 58262: 1044, // BitValueType (3x) @@ -1991,506 +1991,513 @@ var ( 58410: 1061, // FixedPointType (3x) 58416: 1062, // FloatingPointType (3x) 58436: 1063, // GeneratedAlways (3x) - 58438: 1064, // GlobalScope (3x) - 58442: 1065, // GroupByClause (3x) - 58460: 1066, // IndexHint (3x) - 58464: 1067, // IndexHintType (3x) - 58469: 1068, // IndexNameAndTypeOpt (3x) - 58483: 1069, // IntegerType (3x) - 57468: 1070, // keys (3x) - 58501: 1071, // Lines (3x) - 58506: 1072, // LoadDataOptionListOpt (3x) - 58513: 1073, // LocationLabelList (3x) - 58527: 1074, // NChar (3x) - 58536: 1075, // NowSym (3x) - 58537: 1076, // NowSymFunc (3x) - 58538: 1077, // NowSymOptionFraction (3x) - 58543: 1078, // NumericType (3x) - 58529: 1079, // NVarchar (3x) - 58565: 1080, // OptOrder (3x) - 58569: 1081, // OptTemporary (3x) - 58585: 1082, // PartDefOptionList (3x) - 58587: 1083, // PartitionDefinition (3x) - 58598: 1084, // PasswordOrLockOption (3x) - 58607: 1085, // PluginNameList (3x) - 58613: 1086, // PrimaryOpt (3x) - 58616: 1087, // PrivElem (3x) - 58618: 1088, // PrivType (3x) - 58653: 1089, // QueryWatchOption (3x) - 58655: 1090, // QueryWatchTextOption (3x) - 58669: 1091, // RequireClause (3x) - 58670: 1092, // RequireClauseOpt (3x) - 58672: 1093, // RequireListElement (3x) - 58693: 1094, // RolenameWithoutIdent (3x) - 58686: 1095, // RoleOrPrivElem (3x) - 58708: 1096, // SelectStmtGroup (3x) - 58726: 1097, // SetOprOpt (3x) - 58746: 1098, // SignedLiteral (3x) - 58771: 1099, // StringType (3x) - 58782: 1100, // TableAliasRefList (3x) - 58785: 1101, // TableElement (3x) - 58799: 1102, // TableOrTables (3x) - 58811: 1103, // TextType (3x) - 58818: 1104, // TransactionChars (3x) - 57565: 1105, // trigger (3x) - 58821: 1106, // Type (3x) - 57570: 1107, // unlock (3x) - 57572: 1108, // until (3x) - 57574: 1109, // usage (3x) - 58839: 1110, // ValuesList (3x) - 58841: 1111, // ValuesStmtList (3x) - 58837: 1112, // ValueSym (3x) - 58844: 1113, // VariableAssignment (3x) - 58865: 1114, // WindowFrameStart (3x) - 58882: 1115, // Year (3x) - 58208: 1116, // AddQueryWatchStmt (2x) - 58210: 1117, // AdminStmt (2x) - 58213: 1118, // AllColumnsOrPredicateColumnsOpt (2x) - 58215: 1119, // AlterDatabaseStmt (2x) - 58216: 1120, // AlterInstanceStmt (2x) - 58217: 1121, // AlterOrderItem (2x) - 58219: 1122, // AlterPolicyStmt (2x) - 58220: 1123, // AlterRangeStmt (2x) - 58221: 1124, // AlterResourceGroupStmt (2x) - 58222: 1125, // AlterSequenceOption (2x) - 58224: 1126, // AlterSequenceStmt (2x) - 58225: 1127, // AlterTableSpec (2x) - 58230: 1128, // AlterUserStmt (2x) - 58231: 1129, // AnalyzeOption (2x) - 58260: 1130, // BinlogStmt (2x) - 58253: 1131, // BRIEStmt (2x) - 58255: 1132, // BRIETables (2x) - 58272: 1133, // CalibrateResourceStmt (2x) - 57377: 1134, // call (2x) - 58274: 1135, // CallStmt (2x) - 58275: 1136, // CancelImportStmt (2x) - 58276: 1137, // CastType (2x) - 58277: 1138, // ChangeStmt (2x) - 58283: 1139, // CheckConstraintKeyword (2x) - 58291: 1140, // ColumnNameListOpt (2x) - 58294: 1141, // ColumnNameOrUserVariable (2x) - 58293: 1142, // ColumnNameOrUserVarListOptWithBrackets (2x) - 58297: 1143, // ColumnOptionList (2x) - 58298: 1144, // ColumnOptionListOpt (2x) - 58301: 1145, // CommentOrAttributeOption (2x) - 58305: 1146, // CompletionTypeWithinTransaction (2x) - 58307: 1147, // ConnectionOption (2x) - 58309: 1148, // ConnectionOptions (2x) - 58313: 1149, // CreateBindingStmt (2x) - 58314: 1150, // CreateDatabaseStmt (2x) - 58315: 1151, // CreateIndexStmt (2x) - 58316: 1152, // CreatePolicyStmt (2x) - 58317: 1153, // CreateProcedureStmt (2x) - 58318: 1154, // CreateResourceGroupStmt (2x) - 58319: 1155, // CreateRoleStmt (2x) - 58321: 1156, // CreateSequenceStmt (2x) - 58322: 1157, // CreateStatisticsStmt (2x) - 58323: 1158, // CreateTableOptionListOpt (2x) - 58326: 1159, // CreateUserStmt (2x) - 58328: 1160, // CreateViewStmt (2x) - 57399: 1161, // databases (2x) - 58338: 1162, // DeallocateStmt (2x) - 58339: 1163, // DeallocateSym (2x) - 58342: 1164, // DefaultOrExpression (2x) - 58355: 1165, // DoStmt (2x) - 58356: 1166, // DropBindingStmt (2x) - 58357: 1167, // DropDatabaseStmt (2x) - 58358: 1168, // DropIndexStmt (2x) - 58359: 1169, // DropPolicyStmt (2x) - 58360: 1170, // DropProcedureStmt (2x) - 58361: 1171, // DropQueryWatchStmt (2x) - 58362: 1172, // DropResourceGroupStmt (2x) - 58363: 1173, // DropRoleStmt (2x) - 58364: 1174, // DropSequenceStmt (2x) - 58365: 1175, // DropStatisticsStmt (2x) - 58366: 1176, // DropStatsStmt (2x) - 58367: 1177, // DropTableStmt (2x) - 58368: 1178, // DropUserStmt (2x) - 58369: 1179, // DropViewStmt (2x) - 58371: 1180, // DuplicateOpt (2x) - 58374: 1181, // ElseCaseOpt (2x) - 58376: 1182, // EmptyStmt (2x) - 58377: 1183, // EncryptionOpt (2x) - 58379: 1184, // EnforcedOrNotOpt (2x) - 58384: 1185, // ExecuteStmt (2x) - 58385: 1186, // ExplainFormatType (2x) - 58396: 1187, // Field (2x) - 58399: 1188, // FieldItem (2x) - 58406: 1189, // Fields (2x) - 58411: 1190, // FlashbackDatabaseStmt (2x) - 58412: 1191, // FlashbackTableStmt (2x) - 58413: 1192, // FlashbackToNewName (2x) - 58414: 1193, // FlashbackToTimestampStmt (2x) - 58418: 1194, // FlushStmt (2x) - 58420: 1195, // FormatOpt (2x) - 58425: 1196, // FuncDatetimePrecList (2x) - 58426: 1197, // FuncDatetimePrecListOpt (2x) - 58439: 1198, // GrantProxyStmt (2x) - 58440: 1199, // GrantRoleStmt (2x) - 58441: 1200, // GrantStmt (2x) - 58443: 1201, // HandleRange (2x) - 58445: 1202, // HashString (2x) - 58446: 1203, // HavingClause (2x) - 58447: 1204, // HelpStmt (2x) - 58459: 1205, // IndexAdviseStmt (2x) - 58461: 1206, // IndexHintList (2x) - 58462: 1207, // IndexHintListOpt (2x) - 58467: 1208, // IndexLockAndAlgorithmOpt (2x) - 57452: 1209, // inout (2x) - 58480: 1210, // InsertValues (2x) - 58485: 1211, // IntoOpt (2x) - 58491: 1212, // KeyOrIndexOpt (2x) - 58492: 1213, // KillOrKillTiDB (2x) - 58493: 1214, // KillStmt (2x) - 58495: 1215, // LikeOrIlikeEscapeOpt (2x) - 58498: 1216, // LimitClause (2x) - 57478: 1217, // linear (2x) - 58500: 1218, // LinearOpt (2x) - 58504: 1219, // LoadDataOption (2x) - 58507: 1220, // LoadDataSetItem (2x) - 58509: 1221, // LoadDataSetSpecOpt (2x) - 58511: 1222, // LoadStatsStmt (2x) - 58512: 1223, // LocalOpt (2x) - 58515: 1224, // LockStatsStmt (2x) - 58516: 1225, // LockTablesStmt (2x) - 58525: 1226, // MaxValueOrExpression (2x) - 58531: 1227, // NextValueForSequenceParentheses (2x) - 58533: 1228, // NonTransactionalDMLStmt (2x) - 58539: 1229, // NowSymOptionFractionParentheses (2x) - 58544: 1230, // ObjectType (2x) - 57504: 1231, // of (2x) - 58545: 1232, // OfTablesOpt (2x) - 58546: 1233, // OnCommitOpt (2x) - 58547: 1234, // OnDelete (2x) - 58550: 1235, // OnUpdate (2x) - 58555: 1236, // OptCollate (2x) - 58559: 1237, // OptFull (2x) - 58575: 1238, // OptimizeTableStmt (2x) - 58561: 1239, // OptInteger (2x) - 58577: 1240, // OptionalBraces (2x) - 58576: 1241, // OptionLevel (2x) - 58563: 1242, // OptLeadLagInfo (2x) - 58562: 1243, // OptLLDefault (2x) - 58570: 1244, // OptVectorElementType (2x) - 57511: 1245, // out (2x) - 58583: 1246, // OuterOpt (2x) - 58588: 1247, // PartitionDefinitionList (2x) - 58589: 1248, // PartitionDefinitionListOpt (2x) - 58590: 1249, // PartitionIntervalOpt (2x) - 58596: 1250, // PartitionOpt (2x) - 58597: 1251, // PasswordOpt (2x) - 58599: 1252, // PasswordOrLockOptionList (2x) - 58600: 1253, // PasswordOrLockOptions (2x) - 58603: 1254, // PlacementOptionList (2x) - 58606: 1255, // PlanReplayerStmt (2x) - 58612: 1256, // PreparedStmt (2x) - 58617: 1257, // PrivLevel (2x) - 58619: 1258, // ProcedurceCond (2x) - 58620: 1259, // ProcedurceLabelOpt (2x) - 58626: 1260, // ProcedureDecl (2x) - 58633: 1261, // ProcedureHcond (2x) - 58635: 1262, // ProcedureIf (2x) - 58656: 1263, // QuickOptional (2x) - 58657: 1264, // RecoverTableStmt (2x) - 58659: 1265, // ReferOpt (2x) - 58661: 1266, // RegexpSym (2x) - 58663: 1267, // RenameTableStmt (2x) - 58664: 1268, // RenameUserStmt (2x) - 58666: 1269, // RepeatableOpt (2x) - 58675: 1270, // ResourceGroupNameOption (2x) - 58676: 1271, // ResourceGroupOptionList (2x) - 58678: 1272, // ResourceGroupRunawayActionOption (2x) - 58680: 1273, // ResourceGroupRunawayWatchOption (2x) - 58681: 1274, // RestartStmt (2x) - 57533: 1275, // revoke (2x) - 58683: 1276, // RevokeRoleStmt (2x) - 58684: 1277, // RevokeStmt (2x) - 58687: 1278, // RoleOrPrivElemList (2x) - 58688: 1279, // RoleSpec (2x) - 58700: 1280, // SearchWhenThen (2x) - 58712: 1281, // SelectStmtOpt (2x) - 58715: 1282, // SelectStmtSQLCache (2x) - 58719: 1283, // SetBindingStmt (2x) - 58720: 1284, // SetDefaultRoleOpt (2x) - 58721: 1285, // SetDefaultRoleStmt (2x) - 58731: 1286, // SetRoleStmt (2x) - 58739: 1287, // ShowProfileType (2x) - 58742: 1288, // ShowStmt (2x) - 58743: 1289, // ShowTableAliasOpt (2x) - 58745: 1290, // ShutdownStmt (2x) - 58750: 1291, // SimpleWhenThen (2x) - 58755: 1292, // SplitOption (2x) - 58756: 1293, // SplitRegionStmt (2x) - 58752: 1294, // SpOptInout (2x) - 58753: 1295, // SpPdparam (2x) - 57546: 1296, // sqlexception (2x) - 57547: 1297, // sqlstate (2x) - 57548: 1298, // sqlwarning (2x) - 58760: 1299, // Statement (2x) - 58763: 1300, // StatsOptionsOpt (2x) - 58764: 1301, // StatsPersistentVal (2x) - 58765: 1302, // StatsType (2x) - 58772: 1303, // SubPartDefinition (2x) - 58775: 1304, // SubPartitionMethod (2x) - 58780: 1305, // Symbol (2x) - 58786: 1306, // TableElementList (2x) - 58789: 1307, // TableLock (2x) - 58793: 1308, // TableNameListOpt (2x) - 58808: 1309, // TablesTerminalSym (2x) - 58806: 1310, // TableToTable (2x) - 58810: 1311, // TextStringList (2x) - 58815: 1312, // TraceStmt (2x) - 58823: 1313, // UnlockStatsStmt (2x) - 58824: 1314, // UnlockTablesStmt (2x) - 58830: 1315, // UserToUser (2x) - 58845: 1316, // VariableAssignmentList (2x) - 58855: 1317, // WhenClause (2x) - 58860: 1318, // WindowDefinition (2x) - 58863: 1319, // WindowFrameBound (2x) - 58870: 1320, // WindowSpec (2x) - 58875: 1321, // WithGrantOptionOpt (2x) - 58876: 1322, // WithList (2x) - 58881: 1323, // Writeable (2x) - 58: 1324, // ':' (1x) - 58209: 1325, // AdminShowSlow (1x) - 58211: 1326, // AdminStmtLimitOpt (1x) - 58218: 1327, // AlterOrderList (1x) - 58223: 1328, // AlterSequenceOptionList (1x) - 58226: 1329, // AlterTableSpecList (1x) - 58227: 1330, // AlterTableSpecListOpt (1x) - 58228: 1331, // AlterTableSpecSingleOpt (1x) - 58232: 1332, // AnalyzeOptionList (1x) - 58235: 1333, // AnyOrAll (1x) - 58236: 1334, // ArrayKwdOpt (1x) - 58238: 1335, // AsOfClauseOpt (1x) - 58239: 1336, // AsOpt (1x) - 58243: 1337, // AuthOption (1x) - 58244: 1338, // AuthPlugin (1x) - 58246: 1339, // AutoRandomOpt (1x) - 58247: 1340, // BDRRole (1x) - 58257: 1341, // BetweenOrNotOp (1x) - 58259: 1342, // BindingStatusType (1x) - 57375: 1343, // both (1x) - 58271: 1344, // CalibrateOption (1x) - 58273: 1345, // CalibrateResourceWorkloadOption (1x) - 58281: 1346, // CharsetNameOrDefault (1x) - 58282: 1347, // CharsetOpt (1x) - 58286: 1348, // ColumnFormat (1x) - 58288: 1349, // ColumnList (1x) - 58295: 1350, // ColumnNameOrUserVariableList (1x) - 58292: 1351, // ColumnNameOrUserVarListOpt (1x) - 58300: 1352, // ColumnSetValueList (1x) - 58304: 1353, // CompareOp (1x) - 58308: 1354, // ConnectionOptionList (1x) - 58311: 1355, // ConstraintElem (1x) - 57387: 1356, // continueKwd (1x) - 58320: 1357, // CreateSequenceOptionListOpt (1x) - 58324: 1358, // CreateTableSelectOpt (1x) - 58327: 1359, // CreateViewSelectOpt (1x) - 57397: 1360, // cursor (1x) - 58335: 1361, // DatabaseOptionListOpt (1x) - 58332: 1362, // DBNameList (1x) - 58343: 1363, // DefaultOrExpressionList (1x) - 58345: 1364, // DefaultValueExpr (1x) - 58370: 1365, // DryRunOptions (1x) - 57416: 1366, // dual (1x) - 58372: 1367, // DynamicCalibrateOptionList (1x) - 58375: 1368, // ElseOpt (1x) - 58380: 1369, // EnforcedOrNotOrNotNullOpt (1x) - 57423: 1370, // exit (1x) - 58393: 1371, // ExpressionOpt (1x) - 58395: 1372, // FetchFirstOpt (1x) - 58397: 1373, // FieldAsName (1x) - 58398: 1374, // FieldAsNameOpt (1x) - 58400: 1375, // FieldItemList (1x) - 58402: 1376, // FieldList (1x) - 58408: 1377, // FirstAndLastPartOpt (1x) - 58409: 1378, // FirstOrNext (1x) - 58417: 1379, // FlushOption (1x) - 58421: 1380, // FromDual (1x) - 58423: 1381, // FulltextSearchModifierOpt (1x) - 58424: 1382, // FuncDatetimePrec (1x) - 58437: 1383, // GetFormatSelector (1x) - 58444: 1384, // HandleRangeList (1x) - 58449: 1385, // IdentListWithParenOpt (1x) - 58453: 1386, // IgnoreLines (1x) - 58455: 1387, // IlikeOrNotOp (1x) - 58456: 1388, // ImportFromSelectStmt (1x) - 58463: 1389, // IndexHintScope (1x) - 58466: 1390, // IndexKeyTypeOpt (1x) - 58475: 1391, // IndexPartSpecificationListOpt (1x) - 58478: 1392, // IndexTypeOpt (1x) - 58458: 1393, // InOrNotOp (1x) - 58481: 1394, // InstanceOption (1x) - 58484: 1395, // IntervalExpr (1x) - 58487: 1396, // IsolationLevel (1x) - 58486: 1397, // IsOrNotOp (1x) - 57473: 1398, // leading (1x) - 58496: 1399, // LikeOrNotOp (1x) - 58497: 1400, // LikeTableWithOrWithoutParen (1x) - 58502: 1401, // LinesTerminated (1x) - 58505: 1402, // LoadDataOptionList (1x) - 58508: 1403, // LoadDataSetList (1x) - 58517: 1404, // LockType (1x) - 58518: 1405, // LogTypeOpt (1x) - 58519: 1406, // LowPriorityOpt (1x) - 58520: 1407, // Match (1x) - 58521: 1408, // MatchOpt (1x) - 58522: 1409, // MaxIndexNumOpt (1x) - 58523: 1410, // MaxMinutesOpt (1x) - 58524: 1411, // MaxValPartOpt (1x) - 58526: 1412, // MaxValueOrExpressionList (1x) - 58540: 1413, // NullPartOpt (1x) - 58548: 1414, // OnDeleteUpdateOpt (1x) - 58549: 1415, // OnDuplicateKeyUpdate (1x) - 58551: 1416, // OptBinMod (1x) - 58553: 1417, // OptCharset (1x) - 58556: 1418, // OptExistingWindowName (1x) - 58558: 1419, // OptFromFirstLast (1x) - 58560: 1420, // OptGConcatSeparator (1x) - 58578: 1421, // OptionalShardColumn (1x) - 58566: 1422, // OptPartitionClause (1x) - 58567: 1423, // OptSpPdparams (1x) - 58568: 1424, // OptTable (1x) - 58885: 1425, // optValue (1x) - 58572: 1426, // OptWindowFrameClause (1x) - 58573: 1427, // OptWindowOrderByClause (1x) - 58580: 1428, // Order (1x) - 58579: 1429, // OrReplace (1x) - 57513: 1430, // outfile (1x) - 58586: 1431, // PartDefValuesOpt (1x) - 58591: 1432, // PartitionKeyAlgorithmOpt (1x) - 58592: 1433, // PartitionMethod (1x) - 58595: 1434, // PartitionNumOpt (1x) - 58601: 1435, // PerDB (1x) - 58602: 1436, // PerTable (1x) - 58605: 1437, // PlanReplayerDumpOpt (1x) - 57517: 1438, // precisionType (1x) - 58611: 1439, // PrepareSQL (1x) - 58886: 1440, // procedurceElseIfs (1x) - 58622: 1441, // ProcedureCall (1x) - 58625: 1442, // ProcedureCursorSelectStmt (1x) - 58627: 1443, // ProcedureDeclIdents (1x) - 58628: 1444, // ProcedureDecls (1x) - 58629: 1445, // ProcedureDeclsOpt (1x) - 58631: 1446, // ProcedureFetchList (1x) - 58632: 1447, // ProcedureHandlerType (1x) - 58634: 1448, // ProcedureHcondList (1x) - 58641: 1449, // ProcedureOptDefault (1x) - 58642: 1450, // ProcedureOptFetchNo (1x) - 58645: 1451, // ProcedureProcStmts (1x) - 58654: 1452, // QueryWatchOptionList (1x) - 57524: 1453, // recursive (1x) - 58660: 1454, // RegexpOrNotOp (1x) - 58665: 1455, // ReorganizePartitionRuleOpt (1x) - 58668: 1456, // Replica (1x) - 58671: 1457, // RequireList (1x) - 58673: 1458, // ResourceGroupBackgroundOptionList (1x) - 58677: 1459, // ResourceGroupPriorityOption (1x) - 58679: 1460, // ResourceGroupRunawayOptionList (1x) - 58689: 1461, // RoleSpecList (1x) - 58696: 1462, // RowOrRows (1x) - 58701: 1463, // SearchedWhenThenList (1x) - 58705: 1464, // SelectStmtFieldList (1x) - 58713: 1465, // SelectStmtOpts (1x) - 58714: 1466, // SelectStmtOptsList (1x) - 58718: 1467, // SequenceOptionList (1x) - 58723: 1468, // SetOpr (1x) - 58730: 1469, // SetRoleOpt (1x) - 58733: 1470, // ShardableStmt (1x) - 58735: 1471, // ShowIndexKwd (1x) - 58736: 1472, // ShowLikeOrWhereOpt (1x) - 58737: 1473, // ShowPlacementTarget (1x) - 58738: 1474, // ShowProfileArgsOpt (1x) - 58740: 1475, // ShowProfileTypes (1x) - 58741: 1476, // ShowProfileTypesOpt (1x) - 58744: 1477, // ShowTargetFilterable (1x) - 58751: 1478, // SimpleWhenThenList (1x) - 57544: 1479, // spatial (1x) - 58757: 1480, // SplitSyntaxOption (1x) - 58754: 1481, // SpPdparams (1x) - 57552: 1482, // ssl (1x) - 58758: 1483, // Start (1x) - 58759: 1484, // Starting (1x) - 57553: 1485, // starting (1x) - 58761: 1486, // StatementList (1x) - 58762: 1487, // StatementScope (1x) - 58766: 1488, // StorageMedia (1x) - 57554: 1489, // stored (1x) - 58767: 1490, // StringList (1x) - 58770: 1491, // StringNameOrBRIEOptionKeyword (1x) - 58773: 1492, // SubPartDefinitionList (1x) - 58774: 1493, // SubPartDefinitionListOpt (1x) - 58776: 1494, // SubPartitionNumOpt (1x) - 58777: 1495, // SubPartitionOpt (1x) - 58787: 1496, // TableElementListOpt (1x) - 58790: 1497, // TableLockList (1x) - 58802: 1498, // TableRefsClause (1x) - 58803: 1499, // TableSampleMethodOpt (1x) - 58804: 1500, // TableSampleOpt (1x) - 58805: 1501, // TableSampleUnitOpt (1x) - 58807: 1502, // TableToTableList (1x) - 57564: 1503, // trailing (1x) - 58819: 1504, // TrimDirection (1x) - 58831: 1505, // UserToUserList (1x) - 58833: 1506, // UserVariableList (1x) - 58836: 1507, // UsingRoles (1x) - 58838: 1508, // Values (1x) - 58840: 1509, // ValuesOpt (1x) - 58847: 1510, // ViewAlgorithm (1x) - 58848: 1511, // ViewCheckOption (1x) - 58849: 1512, // ViewDefiner (1x) - 58850: 1513, // ViewFieldList (1x) - 58851: 1514, // ViewName (1x) - 58852: 1515, // ViewSQLSecurity (1x) - 57585: 1516, // virtual (1x) - 58853: 1517, // VirtualOrStored (1x) - 58854: 1518, // WatchDurationOption (1x) - 58856: 1519, // WhenClauseList (1x) - 58859: 1520, // WindowClauseOptional (1x) - 58861: 1521, // WindowDefinitionList (1x) - 58862: 1522, // WindowFrameBetween (1x) - 58864: 1523, // WindowFrameExtent (1x) - 58866: 1524, // WindowFrameUnits (1x) - 58869: 1525, // WindowNameOrSpec (1x) - 58871: 1526, // WindowSpecDetails (1x) - 58877: 1527, // WithReadLockOpt (1x) - 58878: 1528, // WithRollupClause (1x) - 58879: 1529, // WithValidation (1x) - 58880: 1530, // WithValidationOpt (1x) - 58207: 1531, // $default (0x) - 58167: 1532, // andnot (0x) - 58191: 1533, // createTableSelect (0x) - 58181: 1534, // empty (0x) - 57345: 1535, // error (0x) - 58206: 1536, // higherThanComma (0x) - 58200: 1537, // higherThanParenthese (0x) - 58189: 1538, // insertValues (0x) - 57356: 1539, // invalid (0x) - 58192: 1540, // lowerThanCharsetKwd (0x) - 58205: 1541, // lowerThanComma (0x) - 58190: 1542, // lowerThanCreateTableSelect (0x) - 58202: 1543, // lowerThanEq (0x) - 58197: 1544, // lowerThanFunction (0x) - 58188: 1545, // lowerThanInsertValues (0x) - 58193: 1546, // lowerThanKey (0x) - 58194: 1547, // lowerThanLocal (0x) - 58204: 1548, // lowerThanNot (0x) - 58201: 1549, // lowerThanOn (0x) - 58199: 1550, // lowerThanParenthese (0x) - 58195: 1551, // lowerThanRemove (0x) - 58182: 1552, // lowerThanSelectOpt (0x) - 58187: 1553, // lowerThanSelectStmt (0x) - 58186: 1554, // lowerThanSetKeyword (0x) - 58185: 1555, // lowerThanStringLitToken (0x) - 58183: 1556, // lowerThanValueKeyword (0x) - 58184: 1557, // lowerThanWith (0x) - 58196: 1558, // lowerThenOrder (0x) - 58203: 1559, // neg (0x) - 57360: 1560, // odbcDateType (0x) - 57362: 1561, // odbcTimestampType (0x) - 57361: 1562, // odbcTimeType (0x) - 58198: 1563, // tableRefPriority (0x) + 58439: 1064, // GlobalOrLocalOpt (3x) + 58440: 1065, // GlobalScope (3x) + 58444: 1066, // GroupByClause (3x) + 58462: 1067, // IndexHint (3x) + 58466: 1068, // IndexHintType (3x) + 58471: 1069, // IndexNameAndTypeOpt (3x) + 58485: 1070, // IntegerType (3x) + 57468: 1071, // keys (3x) + 58503: 1072, // Lines (3x) + 58508: 1073, // LoadDataOptionListOpt (3x) + 58515: 1074, // LocationLabelList (3x) + 58529: 1075, // NChar (3x) + 58538: 1076, // NowSym (3x) + 58539: 1077, // NowSymFunc (3x) + 58540: 1078, // NowSymOptionFraction (3x) + 58545: 1079, // NumericType (3x) + 58531: 1080, // NVarchar (3x) + 58567: 1081, // OptOrder (3x) + 58571: 1082, // OptTemporary (3x) + 58587: 1083, // PartDefOptionList (3x) + 58589: 1084, // PartitionDefinition (3x) + 58600: 1085, // PasswordOrLockOption (3x) + 58609: 1086, // PluginNameList (3x) + 58615: 1087, // PrimaryOpt (3x) + 58618: 1088, // PrivElem (3x) + 58620: 1089, // PrivType (3x) + 58655: 1090, // QueryWatchOption (3x) + 58657: 1091, // QueryWatchTextOption (3x) + 58671: 1092, // RequireClause (3x) + 58672: 1093, // RequireClauseOpt (3x) + 58674: 1094, // RequireListElement (3x) + 58695: 1095, // RolenameWithoutIdent (3x) + 58688: 1096, // RoleOrPrivElem (3x) + 58710: 1097, // SelectStmtGroup (3x) + 58728: 1098, // SetOprOpt (3x) + 58748: 1099, // SignedLiteral (3x) + 58770: 1100, // StringLitOrUserVariable (3x) + 58775: 1101, // StringType (3x) + 58786: 1102, // TableAliasRefList (3x) + 58789: 1103, // TableElement (3x) + 58803: 1104, // TableOrTables (3x) + 58815: 1105, // TextType (3x) + 58822: 1106, // TransactionChars (3x) + 57566: 1107, // trigger (3x) + 58825: 1108, // Type (3x) + 57570: 1109, // unlock (3x) + 57572: 1110, // until (3x) + 57574: 1111, // usage (3x) + 58846: 1112, // ValuesList (3x) + 58848: 1113, // ValuesStmtList (3x) + 58844: 1114, // ValueSym (3x) + 58851: 1115, // VariableAssignment (3x) + 58872: 1116, // WindowFrameStart (3x) + 58889: 1117, // Year (3x) + 58208: 1118, // AddQueryWatchStmt (2x) + 58210: 1119, // AdminStmt (2x) + 58213: 1120, // AllColumnsOrPredicateColumnsOpt (2x) + 58215: 1121, // AlterDatabaseStmt (2x) + 58216: 1122, // AlterInstanceStmt (2x) + 58217: 1123, // AlterOrderItem (2x) + 58219: 1124, // AlterPolicyStmt (2x) + 58220: 1125, // AlterRangeStmt (2x) + 58221: 1126, // AlterResourceGroupStmt (2x) + 58222: 1127, // AlterSequenceOption (2x) + 58224: 1128, // AlterSequenceStmt (2x) + 58225: 1129, // AlterTableSpec (2x) + 58230: 1130, // AlterUserStmt (2x) + 58231: 1131, // AnalyzeOption (2x) + 58260: 1132, // BinlogStmt (2x) + 58253: 1133, // BRIEStmt (2x) + 58255: 1134, // BRIETables (2x) + 58272: 1135, // CalibrateResourceStmt (2x) + 57377: 1136, // call (2x) + 58274: 1137, // CallStmt (2x) + 58275: 1138, // CancelImportStmt (2x) + 58276: 1139, // CastType (2x) + 58277: 1140, // ChangeStmt (2x) + 58283: 1141, // CheckConstraintKeyword (2x) + 58291: 1142, // ColumnNameListOpt (2x) + 58294: 1143, // ColumnNameOrUserVariable (2x) + 58293: 1144, // ColumnNameOrUserVarListOptWithBrackets (2x) + 58297: 1145, // ColumnOptionList (2x) + 58298: 1146, // ColumnOptionListOpt (2x) + 58301: 1147, // CommentOrAttributeOption (2x) + 58305: 1148, // CompletionTypeWithinTransaction (2x) + 58307: 1149, // ConnectionOption (2x) + 58309: 1150, // ConnectionOptions (2x) + 58313: 1151, // CreateBindingStmt (2x) + 58314: 1152, // CreateDatabaseStmt (2x) + 58315: 1153, // CreateIndexStmt (2x) + 58316: 1154, // CreatePolicyStmt (2x) + 58317: 1155, // CreateProcedureStmt (2x) + 58318: 1156, // CreateResourceGroupStmt (2x) + 58319: 1157, // CreateRoleStmt (2x) + 58321: 1158, // CreateSequenceStmt (2x) + 58322: 1159, // CreateStatisticsStmt (2x) + 58323: 1160, // CreateTableOptionListOpt (2x) + 58326: 1161, // CreateUserStmt (2x) + 58328: 1162, // CreateViewStmt (2x) + 57399: 1163, // databases (2x) + 58338: 1164, // DeallocateStmt (2x) + 58339: 1165, // DeallocateSym (2x) + 58342: 1166, // DefaultOrExpression (2x) + 58355: 1167, // DoStmt (2x) + 58356: 1168, // DropBindingStmt (2x) + 58357: 1169, // DropDatabaseStmt (2x) + 58358: 1170, // DropIndexStmt (2x) + 58359: 1171, // DropPolicyStmt (2x) + 58360: 1172, // DropProcedureStmt (2x) + 58361: 1173, // DropQueryWatchStmt (2x) + 58362: 1174, // DropResourceGroupStmt (2x) + 58363: 1175, // DropRoleStmt (2x) + 58364: 1176, // DropSequenceStmt (2x) + 58365: 1177, // DropStatisticsStmt (2x) + 58366: 1178, // DropStatsStmt (2x) + 58367: 1179, // DropTableStmt (2x) + 58368: 1180, // DropUserStmt (2x) + 58369: 1181, // DropViewStmt (2x) + 58371: 1182, // DuplicateOpt (2x) + 58374: 1183, // ElseCaseOpt (2x) + 58376: 1184, // EmptyStmt (2x) + 58377: 1185, // EncryptionOpt (2x) + 58379: 1186, // EnforcedOrNotOpt (2x) + 58384: 1187, // ExecuteStmt (2x) + 58385: 1188, // ExplainFormatType (2x) + 58396: 1189, // Field (2x) + 58399: 1190, // FieldItem (2x) + 58406: 1191, // Fields (2x) + 58411: 1192, // FlashbackDatabaseStmt (2x) + 58412: 1193, // FlashbackTableStmt (2x) + 58413: 1194, // FlashbackToNewName (2x) + 58414: 1195, // FlashbackToTimestampStmt (2x) + 58418: 1196, // FlushStmt (2x) + 58420: 1197, // FormatOpt (2x) + 58425: 1198, // FuncDatetimePrecList (2x) + 58426: 1199, // FuncDatetimePrecListOpt (2x) + 58441: 1200, // GrantProxyStmt (2x) + 58442: 1201, // GrantRoleStmt (2x) + 58443: 1202, // GrantStmt (2x) + 58445: 1203, // HandleRange (2x) + 58447: 1204, // HashString (2x) + 58448: 1205, // HavingClause (2x) + 58449: 1206, // HelpStmt (2x) + 58461: 1207, // IndexAdviseStmt (2x) + 58463: 1208, // IndexHintList (2x) + 58464: 1209, // IndexHintListOpt (2x) + 58469: 1210, // IndexLockAndAlgorithmOpt (2x) + 57452: 1211, // inout (2x) + 58482: 1212, // InsertValues (2x) + 58487: 1213, // IntoOpt (2x) + 58493: 1214, // KeyOrIndexOpt (2x) + 58494: 1215, // KillOrKillTiDB (2x) + 58495: 1216, // KillStmt (2x) + 58497: 1217, // LikeOrIlikeEscapeOpt (2x) + 58500: 1218, // LimitClause (2x) + 57478: 1219, // linear (2x) + 58502: 1220, // LinearOpt (2x) + 58506: 1221, // LoadDataOption (2x) + 58509: 1222, // LoadDataSetItem (2x) + 58511: 1223, // LoadDataSetSpecOpt (2x) + 58513: 1224, // LoadStatsStmt (2x) + 58514: 1225, // LocalOpt (2x) + 58517: 1226, // LockStatsStmt (2x) + 58518: 1227, // LockTablesStmt (2x) + 58527: 1228, // MaxValueOrExpression (2x) + 58533: 1229, // NextValueForSequenceParentheses (2x) + 58535: 1230, // NonTransactionalDMLStmt (2x) + 58541: 1231, // NowSymOptionFractionParentheses (2x) + 58546: 1232, // ObjectType (2x) + 57504: 1233, // of (2x) + 58547: 1234, // OfTablesOpt (2x) + 58548: 1235, // OnCommitOpt (2x) + 58549: 1236, // OnDelete (2x) + 58552: 1237, // OnUpdate (2x) + 58557: 1238, // OptCollate (2x) + 58561: 1239, // OptFull (2x) + 58577: 1240, // OptimizeTableStmt (2x) + 58563: 1241, // OptInteger (2x) + 58579: 1242, // OptionalBraces (2x) + 58578: 1243, // OptionLevel (2x) + 58565: 1244, // OptLeadLagInfo (2x) + 58564: 1245, // OptLLDefault (2x) + 58572: 1246, // OptVectorElementType (2x) + 57511: 1247, // out (2x) + 58585: 1248, // OuterOpt (2x) + 58590: 1249, // PartitionDefinitionList (2x) + 58591: 1250, // PartitionDefinitionListOpt (2x) + 58592: 1251, // PartitionIntervalOpt (2x) + 58598: 1252, // PartitionOpt (2x) + 58599: 1253, // PasswordOpt (2x) + 58601: 1254, // PasswordOrLockOptionList (2x) + 58602: 1255, // PasswordOrLockOptions (2x) + 58605: 1256, // PlacementOptionList (2x) + 58608: 1257, // PlanReplayerStmt (2x) + 58614: 1258, // PreparedStmt (2x) + 58619: 1259, // PrivLevel (2x) + 58621: 1260, // ProcedurceCond (2x) + 58622: 1261, // ProcedurceLabelOpt (2x) + 58628: 1262, // ProcedureDecl (2x) + 58635: 1263, // ProcedureHcond (2x) + 58637: 1264, // ProcedureIf (2x) + 58658: 1265, // QuickOptional (2x) + 58659: 1266, // RecoverTableStmt (2x) + 58661: 1267, // ReferOpt (2x) + 58663: 1268, // RegexpSym (2x) + 58665: 1269, // RenameTableStmt (2x) + 58666: 1270, // RenameUserStmt (2x) + 58668: 1271, // RepeatableOpt (2x) + 58677: 1272, // ResourceGroupNameOption (2x) + 58678: 1273, // ResourceGroupOptionList (2x) + 58680: 1274, // ResourceGroupRunawayActionOption (2x) + 58682: 1275, // ResourceGroupRunawayWatchOption (2x) + 58683: 1276, // RestartStmt (2x) + 57533: 1277, // revoke (2x) + 58685: 1278, // RevokeRoleStmt (2x) + 58686: 1279, // RevokeStmt (2x) + 58689: 1280, // RoleOrPrivElemList (2x) + 58690: 1281, // RoleSpec (2x) + 58702: 1282, // SearchWhenThen (2x) + 58714: 1283, // SelectStmtOpt (2x) + 58717: 1284, // SelectStmtSQLCache (2x) + 58721: 1285, // SetBindingStmt (2x) + 58722: 1286, // SetDefaultRoleOpt (2x) + 58723: 1287, // SetDefaultRoleStmt (2x) + 58733: 1288, // SetRoleStmt (2x) + 58741: 1289, // ShowProfileType (2x) + 58744: 1290, // ShowStmt (2x) + 58745: 1291, // ShowTableAliasOpt (2x) + 58747: 1292, // ShutdownStmt (2x) + 58752: 1293, // SimpleWhenThen (2x) + 58757: 1294, // SplitOption (2x) + 58758: 1295, // SplitRegionStmt (2x) + 58754: 1296, // SpOptInout (2x) + 58755: 1297, // SpPdparam (2x) + 57546: 1298, // sqlexception (2x) + 57547: 1299, // sqlstate (2x) + 57548: 1300, // sqlwarning (2x) + 58762: 1301, // Statement (2x) + 58765: 1302, // StatsOptionsOpt (2x) + 58766: 1303, // StatsPersistentVal (2x) + 58767: 1304, // StatsType (2x) + 58771: 1305, // StringLitOrUserVariableList (2x) + 58776: 1306, // SubPartDefinition (2x) + 58779: 1307, // SubPartitionMethod (2x) + 58784: 1308, // Symbol (2x) + 58790: 1309, // TableElementList (2x) + 58793: 1310, // TableLock (2x) + 58797: 1311, // TableNameListOpt (2x) + 58812: 1312, // TablesTerminalSym (2x) + 58810: 1313, // TableToTable (2x) + 58814: 1314, // TextStringList (2x) + 58819: 1315, // TraceStmt (2x) + 58827: 1316, // UnlockStatsStmt (2x) + 58828: 1317, // UnlockTablesStmt (2x) + 58829: 1318, // UpdateIndexElem (2x) + 58837: 1319, // UserToUser (2x) + 58852: 1320, // VariableAssignmentList (2x) + 58862: 1321, // WhenClause (2x) + 58867: 1322, // WindowDefinition (2x) + 58870: 1323, // WindowFrameBound (2x) + 58877: 1324, // WindowSpec (2x) + 58882: 1325, // WithGrantOptionOpt (2x) + 58883: 1326, // WithList (2x) + 58888: 1327, // Writeable (2x) + 58: 1328, // ':' (1x) + 58209: 1329, // AdminShowSlow (1x) + 58211: 1330, // AdminStmtLimitOpt (1x) + 58218: 1331, // AlterOrderList (1x) + 58223: 1332, // AlterSequenceOptionList (1x) + 58226: 1333, // AlterTableSpecList (1x) + 58227: 1334, // AlterTableSpecListOpt (1x) + 58228: 1335, // AlterTableSpecSingleOpt (1x) + 58232: 1336, // AnalyzeOptionList (1x) + 58235: 1337, // AnyOrAll (1x) + 58236: 1338, // ArrayKwdOpt (1x) + 58238: 1339, // AsOfClauseOpt (1x) + 58239: 1340, // AsOpt (1x) + 58243: 1341, // AuthOption (1x) + 58244: 1342, // AuthPlugin (1x) + 58246: 1343, // AutoRandomOpt (1x) + 58247: 1344, // BDRRole (1x) + 58257: 1345, // BetweenOrNotOp (1x) + 58259: 1346, // BindingStatusType (1x) + 57375: 1347, // both (1x) + 58271: 1348, // CalibrateOption (1x) + 58273: 1349, // CalibrateResourceWorkloadOption (1x) + 58281: 1350, // CharsetNameOrDefault (1x) + 58282: 1351, // CharsetOpt (1x) + 58286: 1352, // ColumnFormat (1x) + 58288: 1353, // ColumnList (1x) + 58295: 1354, // ColumnNameOrUserVariableList (1x) + 58292: 1355, // ColumnNameOrUserVarListOpt (1x) + 58300: 1356, // ColumnSetValueList (1x) + 58304: 1357, // CompareOp (1x) + 58308: 1358, // ConnectionOptionList (1x) + 58311: 1359, // ConstraintElem (1x) + 57387: 1360, // continueKwd (1x) + 58320: 1361, // CreateSequenceOptionListOpt (1x) + 58324: 1362, // CreateTableSelectOpt (1x) + 58327: 1363, // CreateViewSelectOpt (1x) + 57397: 1364, // cursor (1x) + 58335: 1365, // DatabaseOptionListOpt (1x) + 58332: 1366, // DBNameList (1x) + 58343: 1367, // DefaultOrExpressionList (1x) + 58345: 1368, // DefaultValueExpr (1x) + 58370: 1369, // DryRunOptions (1x) + 57416: 1370, // dual (1x) + 58372: 1371, // DynamicCalibrateOptionList (1x) + 58375: 1372, // ElseOpt (1x) + 58380: 1373, // EnforcedOrNotOrNotNullOpt (1x) + 57423: 1374, // exit (1x) + 58393: 1375, // ExpressionOpt (1x) + 58395: 1376, // FetchFirstOpt (1x) + 58397: 1377, // FieldAsName (1x) + 58398: 1378, // FieldAsNameOpt (1x) + 58400: 1379, // FieldItemList (1x) + 58402: 1380, // FieldList (1x) + 58408: 1381, // FirstAndLastPartOpt (1x) + 58409: 1382, // FirstOrNext (1x) + 58417: 1383, // FlushOption (1x) + 58421: 1384, // FromDual (1x) + 58423: 1385, // FulltextSearchModifierOpt (1x) + 58424: 1386, // FuncDatetimePrec (1x) + 58437: 1387, // GetFormatSelector (1x) + 58438: 1388, // GlobalOrLocal (1x) + 58446: 1389, // HandleRangeList (1x) + 58451: 1390, // IdentListWithParenOpt (1x) + 58455: 1391, // IgnoreLines (1x) + 58457: 1392, // IlikeOrNotOp (1x) + 58458: 1393, // ImportFromSelectStmt (1x) + 58465: 1394, // IndexHintScope (1x) + 58468: 1395, // IndexKeyTypeOpt (1x) + 58477: 1396, // IndexPartSpecificationListOpt (1x) + 58480: 1397, // IndexTypeOpt (1x) + 58460: 1398, // InOrNotOp (1x) + 58483: 1399, // InstanceOption (1x) + 58486: 1400, // IntervalExpr (1x) + 58489: 1401, // IsolationLevel (1x) + 58488: 1402, // IsOrNotOp (1x) + 57473: 1403, // leading (1x) + 58498: 1404, // LikeOrNotOp (1x) + 58499: 1405, // LikeTableWithOrWithoutParen (1x) + 58504: 1406, // LinesTerminated (1x) + 58507: 1407, // LoadDataOptionList (1x) + 58510: 1408, // LoadDataSetList (1x) + 58519: 1409, // LockType (1x) + 58520: 1410, // LogTypeOpt (1x) + 58521: 1411, // LowPriorityOpt (1x) + 58522: 1412, // Match (1x) + 58523: 1413, // MatchOpt (1x) + 58524: 1414, // MaxIndexNumOpt (1x) + 58525: 1415, // MaxMinutesOpt (1x) + 58526: 1416, // MaxValPartOpt (1x) + 58528: 1417, // MaxValueOrExpressionList (1x) + 58542: 1418, // NullPartOpt (1x) + 58550: 1419, // OnDeleteUpdateOpt (1x) + 58551: 1420, // OnDuplicateKeyUpdate (1x) + 58553: 1421, // OptBinMod (1x) + 58555: 1422, // OptCharset (1x) + 58558: 1423, // OptExistingWindowName (1x) + 58560: 1424, // OptFromFirstLast (1x) + 58562: 1425, // OptGConcatSeparator (1x) + 58580: 1426, // OptionalShardColumn (1x) + 58568: 1427, // OptPartitionClause (1x) + 58569: 1428, // OptSpPdparams (1x) + 58570: 1429, // OptTable (1x) + 58892: 1430, // optValue (1x) + 58574: 1431, // OptWindowFrameClause (1x) + 58575: 1432, // OptWindowOrderByClause (1x) + 58582: 1433, // Order (1x) + 58581: 1434, // OrReplace (1x) + 57513: 1435, // outfile (1x) + 58588: 1436, // PartDefValuesOpt (1x) + 58593: 1437, // PartitionKeyAlgorithmOpt (1x) + 58594: 1438, // PartitionMethod (1x) + 58597: 1439, // PartitionNumOpt (1x) + 58603: 1440, // PerDB (1x) + 58604: 1441, // PerTable (1x) + 58607: 1442, // PlanReplayerDumpOpt (1x) + 57517: 1443, // precisionType (1x) + 58613: 1444, // PrepareSQL (1x) + 58893: 1445, // procedurceElseIfs (1x) + 58624: 1446, // ProcedureCall (1x) + 58627: 1447, // ProcedureCursorSelectStmt (1x) + 58629: 1448, // ProcedureDeclIdents (1x) + 58630: 1449, // ProcedureDecls (1x) + 58631: 1450, // ProcedureDeclsOpt (1x) + 58633: 1451, // ProcedureFetchList (1x) + 58634: 1452, // ProcedureHandlerType (1x) + 58636: 1453, // ProcedureHcondList (1x) + 58643: 1454, // ProcedureOptDefault (1x) + 58644: 1455, // ProcedureOptFetchNo (1x) + 58647: 1456, // ProcedureProcStmts (1x) + 58656: 1457, // QueryWatchOptionList (1x) + 57524: 1458, // recursive (1x) + 58662: 1459, // RegexpOrNotOp (1x) + 58667: 1460, // ReorganizePartitionRuleOpt (1x) + 58670: 1461, // Replica (1x) + 58673: 1462, // RequireList (1x) + 58675: 1463, // ResourceGroupBackgroundOptionList (1x) + 58679: 1464, // ResourceGroupPriorityOption (1x) + 58681: 1465, // ResourceGroupRunawayOptionList (1x) + 58691: 1466, // RoleSpecList (1x) + 58698: 1467, // RowOrRows (1x) + 58703: 1468, // SearchedWhenThenList (1x) + 58707: 1469, // SelectStmtFieldList (1x) + 58715: 1470, // SelectStmtOpts (1x) + 58716: 1471, // SelectStmtOptsList (1x) + 58720: 1472, // SequenceOptionList (1x) + 58725: 1473, // SetOpr (1x) + 58732: 1474, // SetRoleOpt (1x) + 58735: 1475, // ShardableStmt (1x) + 58737: 1476, // ShowIndexKwd (1x) + 58738: 1477, // ShowLikeOrWhereOpt (1x) + 58739: 1478, // ShowPlacementTarget (1x) + 58740: 1479, // ShowProfileArgsOpt (1x) + 58742: 1480, // ShowProfileTypes (1x) + 58743: 1481, // ShowProfileTypesOpt (1x) + 58746: 1482, // ShowTargetFilterable (1x) + 58753: 1483, // SimpleWhenThenList (1x) + 57544: 1484, // spatial (1x) + 58759: 1485, // SplitSyntaxOption (1x) + 58756: 1486, // SpPdparams (1x) + 57552: 1487, // ssl (1x) + 58760: 1488, // Start (1x) + 58761: 1489, // Starting (1x) + 57553: 1490, // starting (1x) + 58763: 1491, // StatementList (1x) + 58764: 1492, // StatementScope (1x) + 58768: 1493, // StorageMedia (1x) + 57554: 1494, // stored (1x) + 58769: 1495, // StringList (1x) + 58774: 1496, // StringNameOrBRIEOptionKeyword (1x) + 58777: 1497, // SubPartDefinitionList (1x) + 58778: 1498, // SubPartDefinitionListOpt (1x) + 58780: 1499, // SubPartitionNumOpt (1x) + 58781: 1500, // SubPartitionOpt (1x) + 58791: 1501, // TableElementListOpt (1x) + 58794: 1502, // TableLockList (1x) + 58806: 1503, // TableRefsClause (1x) + 58807: 1504, // TableSampleMethodOpt (1x) + 58808: 1505, // TableSampleOpt (1x) + 58809: 1506, // TableSampleUnitOpt (1x) + 58811: 1507, // TableToTableList (1x) + 57565: 1508, // trailing (1x) + 58823: 1509, // TrimDirection (1x) + 58830: 1510, // UpdateIndexesList (1x) + 58831: 1511, // UpdateIndexesOpt (1x) + 58838: 1512, // UserToUserList (1x) + 58840: 1513, // UserVariableList (1x) + 58843: 1514, // UsingRoles (1x) + 58845: 1515, // Values (1x) + 58847: 1516, // ValuesOpt (1x) + 58854: 1517, // ViewAlgorithm (1x) + 58855: 1518, // ViewCheckOption (1x) + 58856: 1519, // ViewDefiner (1x) + 58857: 1520, // ViewFieldList (1x) + 58858: 1521, // ViewName (1x) + 58859: 1522, // ViewSQLSecurity (1x) + 57585: 1523, // virtual (1x) + 58860: 1524, // VirtualOrStored (1x) + 58861: 1525, // WatchDurationOption (1x) + 58863: 1526, // WhenClauseList (1x) + 58866: 1527, // WindowClauseOptional (1x) + 58868: 1528, // WindowDefinitionList (1x) + 58869: 1529, // WindowFrameBetween (1x) + 58871: 1530, // WindowFrameExtent (1x) + 58873: 1531, // WindowFrameUnits (1x) + 58876: 1532, // WindowNameOrSpec (1x) + 58878: 1533, // WindowSpecDetails (1x) + 58884: 1534, // WithReadLockOpt (1x) + 58885: 1535, // WithRollupClause (1x) + 58886: 1536, // WithValidation (1x) + 58887: 1537, // WithValidationOpt (1x) + 58207: 1538, // $default (0x) + 58167: 1539, // andnot (0x) + 58191: 1540, // createTableSelect (0x) + 58181: 1541, // empty (0x) + 57345: 1542, // error (0x) + 58206: 1543, // higherThanComma (0x) + 58200: 1544, // higherThanParenthese (0x) + 58189: 1545, // insertValues (0x) + 57356: 1546, // invalid (0x) + 58192: 1547, // lowerThanCharsetKwd (0x) + 58205: 1548, // lowerThanComma (0x) + 58190: 1549, // lowerThanCreateTableSelect (0x) + 58202: 1550, // lowerThanEq (0x) + 58197: 1551, // lowerThanFunction (0x) + 58188: 1552, // lowerThanInsertValues (0x) + 58193: 1553, // lowerThanKey (0x) + 58194: 1554, // lowerThanLocal (0x) + 58204: 1555, // lowerThanNot (0x) + 58201: 1556, // lowerThanOn (0x) + 58199: 1557, // lowerThanParenthese (0x) + 58195: 1558, // lowerThanRemove (0x) + 58182: 1559, // lowerThanSelectOpt (0x) + 58187: 1560, // lowerThanSelectStmt (0x) + 58186: 1561, // lowerThanSetKeyword (0x) + 58185: 1562, // lowerThanStringLitToken (0x) + 58183: 1563, // lowerThanValueKeyword (0x) + 58184: 1564, // lowerThanWith (0x) + 58196: 1565, // lowerThenOrder (0x) + 58203: 1566, // neg (0x) + 57360: 1567, // odbcDateType (0x) + 57362: 1568, // odbcTimestampType (0x) + 57361: 1569, // odbcTimeType (0x) + 58198: 1570, // tableRefPriority (0x) } yySymNames = []string{ @@ -2552,6 +2559,7 @@ var ( "failedLoginAttempts", "passwordLockTime", "identifier", + "local", "resume", "signed", "snapshot", @@ -2587,6 +2595,7 @@ var ( "untilTS", "waitTiflashReady", "withSysTable", + "global", "begin", "commit", "no", @@ -2600,19 +2609,19 @@ var ( "close", "cycle", "minValue", + "algorithm", "end", "increment", "nocycle", "nomaxvalue", "nominvalue", - "algorithm", - "restart", "tp", "clustered", "invisible", "nonclustered", - "regions", "visible", + "restart", + "regions", "background", "burstable", "priority", @@ -2661,7 +2670,6 @@ var ( "tables", "unicodeSym", "fields", - "local", "logs", "timeDuration", "query", @@ -2711,7 +2719,6 @@ var ( "bitType", "boolType", "enum", - "global", "hypo", "job", "national", @@ -2752,6 +2759,7 @@ var ( "sequence", "session", "slow", + "unlimited", "validation", "variables", "attributes", @@ -2821,6 +2829,7 @@ var ( "hosts", "identSQLErrors", "incremental", + "indexes", "inplace", "instance", "instant", @@ -2869,7 +2878,6 @@ var ( "trace", "traditional", "trueCardCost", - "unlimited", "verboseType", "warnings", "advise", @@ -2906,7 +2914,6 @@ var ( "function", "grants", "histogramsInFlight", - "indexes", "internal", "invoker", "io", @@ -3135,9 +3142,9 @@ var ( "neqSynonym", "nulleq", "repeat", + "singleAtIdentifier", "between", "falseKwd", - "singleAtIdentifier", "trueKwd", "currentUser", "ilike", @@ -3152,9 +3159,11 @@ var ( "interval", "paramMarker", "'{'", + "key", "database", "exists", "convert", + "selectKwd", "underscoreCS", "builtinCurDate", "builtinNow", @@ -3163,8 +3172,6 @@ var ( "doubleAtIdentifier", "localTime", "localTs", - "key", - "selectKwd", "builtinCount", "sql", "'!'", @@ -3204,25 +3211,25 @@ var ( "nthValue", "ntile", "percentRank", + "primary", "rank", "rowNumber", "tidbCurrentTSO", "utcDate", "utcTime", "utcTimestamp", - "primary", "check", - "pipes", "unique", "constraint", "references", + "pipes", "generated", "character", "index", "match", + "update", "to", "analyze", - "update", "'.'", "all", "array", @@ -3558,6 +3565,7 @@ var ( "FixedPointType", "FloatingPointType", "GeneratedAlways", + "GlobalOrLocalOpt", "GlobalScope", "GroupByClause", "IndexHint", @@ -3593,6 +3601,7 @@ var ( "SelectStmtGroup", "SetOprOpt", "SignedLiteral", + "StringLitOrUserVariable", "StringType", "TableAliasRefList", "TableElement", @@ -3797,6 +3806,7 @@ var ( "StatsOptionsOpt", "StatsPersistentVal", "StatsType", + "StringLitOrUserVariableList", "SubPartDefinition", "SubPartitionMethod", "Symbol", @@ -3809,6 +3819,7 @@ var ( "TraceStmt", "UnlockStatsStmt", "UnlockTablesStmt", + "UpdateIndexElem", "UserToUser", "VariableAssignmentList", "WhenClause", @@ -3878,6 +3889,7 @@ var ( "FulltextSearchModifierOpt", "FuncDatetimePrec", "GetFormatSelector", + "GlobalOrLocal", "HandleRangeList", "IdentListWithParenOpt", "IgnoreLines", @@ -3999,6 +4011,8 @@ var ( "TableToTableList", "trailing", "TrimDirection", + "UpdateIndexesList", + "UpdateIndexesOpt", "UserToUserList", "UserVariableList", "UsingRoles", @@ -4062,7 +4076,7 @@ var ( yyReductions = []struct{ xsym, components int }{ {0, 1}, - {1483, 1}, + {1488, 1}, {920, 6}, {920, 8}, {920, 10}, @@ -4070,27 +4084,28 @@ var ( {920, 7}, {920, 7}, {920, 9}, - {1271, 1}, - {1271, 2}, - {1271, 3}, - {1459, 1}, - {1459, 1}, - {1459, 1}, - {1460, 1}, - {1460, 2}, - {1460, 3}, - {1273, 1}, {1273, 1}, - {1273, 1}, - {1272, 1}, - {1272, 1}, - {1272, 1}, + {1273, 2}, + {1273, 3}, + {1464, 1}, + {1464, 1}, + {1464, 1}, + {1465, 1}, + {1465, 2}, + {1465, 3}, + {1275, 1}, + {1275, 1}, + {1275, 1}, + {1274, 1}, + {1274, 1}, + {1274, 1}, {1056, 3}, {1056, 3}, {1056, 4}, - {1518, 0}, - {1518, 3}, - {1518, 3}, + {1525, 0}, + {1525, 3}, + {1525, 3}, + {994, 3}, {994, 3}, {994, 3}, {994, 1}, @@ -4101,13 +4116,13 @@ var ( {994, 5}, {994, 4}, {994, 3}, - {1458, 1}, - {1458, 2}, - {1458, 3}, + {1463, 1}, + {1463, 2}, + {1463, 3}, {1055, 3}, - {1254, 1}, - {1254, 2}, - {1254, 3}, + {1256, 1}, + {1256, 2}, + {1256, 3}, {993, 3}, {993, 3}, {993, 3}, @@ -4126,86 +4141,89 @@ var ( {880, 4}, {1043, 3}, {1043, 3}, - {1300, 3}, - {1300, 3}, - {1331, 1}, - {1331, 2}, - {1331, 4}, - {1331, 8}, - {1331, 8}, - {1331, 3}, - {1331, 3}, - {1331, 2}, - {1073, 0}, - {1073, 3}, - {1127, 1}, - {1127, 5}, - {1127, 6}, - {1127, 5}, - {1127, 5}, - {1127, 5}, - {1127, 6}, - {1127, 2}, - {1127, 5}, - {1127, 6}, - {1127, 8}, - {1127, 8}, - {1127, 1}, - {1127, 1}, - {1127, 3}, - {1127, 4}, - {1127, 5}, - {1127, 3}, - {1127, 4}, - {1127, 8}, - {1127, 4}, - {1127, 7}, - {1127, 3}, - {1127, 4}, - {1127, 4}, - {1127, 4}, - {1127, 4}, - {1127, 2}, - {1127, 2}, - {1127, 4}, - {1127, 4}, - {1127, 5}, - {1127, 3}, - {1127, 2}, - {1127, 2}, - {1127, 5}, - {1127, 6}, - {1127, 6}, - {1127, 8}, - {1127, 5}, - {1127, 5}, - {1127, 3}, - {1127, 3}, - {1127, 3}, - {1127, 5}, - {1127, 1}, - {1127, 1}, - {1127, 1}, - {1127, 1}, - {1127, 2}, - {1127, 2}, - {1127, 1}, - {1127, 1}, - {1127, 4}, - {1127, 3}, - {1127, 4}, - {1127, 1}, - {1127, 1}, - {1455, 0}, - {1455, 5}, + {1302, 3}, + {1302, 3}, + {1335, 1}, + {1335, 2}, + {1335, 4}, + {1335, 8}, + {1335, 8}, + {1335, 3}, + {1335, 3}, + {1335, 2}, + {1074, 0}, + {1074, 3}, + {1129, 1}, + {1129, 5}, + {1129, 6}, + {1129, 5}, + {1129, 5}, + {1129, 5}, + {1129, 6}, + {1129, 2}, + {1129, 5}, + {1129, 6}, + {1129, 8}, + {1129, 8}, + {1129, 1}, + {1129, 1}, + {1129, 3}, + {1129, 4}, + {1129, 5}, + {1129, 3}, + {1129, 4}, + {1129, 8}, + {1129, 4}, + {1129, 7}, + {1129, 3}, + {1129, 4}, + {1129, 4}, + {1129, 4}, + {1129, 4}, + {1129, 2}, + {1129, 2}, + {1129, 4}, + {1129, 4}, + {1129, 5}, + {1129, 3}, + {1129, 2}, + {1129, 2}, + {1129, 5}, + {1129, 6}, + {1129, 6}, + {1129, 8}, + {1129, 5}, + {1129, 5}, + {1129, 3}, + {1129, 3}, + {1129, 3}, + {1129, 5}, + {1129, 1}, + {1129, 1}, + {1129, 1}, + {1129, 1}, + {1129, 2}, + {1129, 2}, + {1129, 1}, + {1129, 1}, + {1129, 4}, + {1129, 3}, + {1129, 4}, + {1129, 1}, + {1129, 1}, + {1460, 0}, + {1460, 5}, {943, 1}, {943, 1}, - {1530, 0}, - {1530, 1}, - {1529, 2}, - {1529, 2}, + {1537, 0}, + {1537, 1}, + {1536, 2}, + {1536, 2}, {988, 1}, {988, 1}, + {1064, 0}, + {1064, 1}, + {1064, 1}, {989, 3}, {989, 3}, {989, 3}, @@ -4213,56 +4231,56 @@ var ( {989, 3}, {1002, 3}, {1002, 3}, - {1323, 2}, - {1323, 2}, + {1327, 2}, + {1327, 2}, {940, 1}, {940, 1}, - {1212, 0}, - {1212, 1}, + {1214, 0}, + {1214, 1}, {992, 0}, {992, 1}, {1048, 0}, {1048, 1}, {1048, 2}, - {1330, 0}, - {1330, 1}, - {1329, 1}, - {1329, 3}, + {1334, 0}, + {1334, 1}, + {1333, 1}, + {1333, 3}, {875, 1}, {875, 3}, {945, 0}, {945, 1}, {945, 2}, - {1305, 1}, - {1267, 3}, - {1502, 1}, - {1502, 3}, - {1310, 3}, - {1268, 3}, - {1505, 1}, - {1505, 3}, - {1315, 3}, - {1264, 5}, - {1264, 3}, - {1264, 4}, - {1193, 4}, - {1193, 5}, - {1193, 5}, + {1308, 1}, + {1269, 3}, + {1507, 1}, + {1507, 3}, + {1313, 3}, + {1270, 3}, + {1512, 1}, + {1512, 3}, + {1319, 3}, + {1266, 5}, + {1266, 3}, + {1266, 4}, + {1195, 4}, + {1195, 5}, + {1195, 5}, + {1195, 4}, + {1195, 5}, + {1195, 5}, {1193, 4}, - {1193, 5}, - {1193, 5}, - {1191, 4}, - {1192, 0}, - {1192, 2}, - {1190, 4}, - {1293, 6}, - {1293, 8}, - {1292, 6}, - {1292, 2}, - {1480, 0}, - {1480, 2}, - {1480, 1}, - {1480, 3}, + {1194, 0}, + {1194, 2}, + {1192, 4}, + {1295, 6}, + {1295, 8}, + {1294, 6}, + {1294, 2}, + {1485, 0}, + {1485, 2}, + {1485, 1}, + {1485, 3}, {860, 6}, {860, 7}, {860, 8}, @@ -4273,19 +4291,19 @@ var ( {860, 8}, {860, 7}, {860, 9}, - {1118, 0}, - {1118, 2}, - {1118, 2}, + {1120, 0}, + {1120, 2}, + {1120, 2}, {917, 0}, {917, 2}, - {1332, 1}, - {1332, 3}, - {1129, 2}, - {1129, 2}, - {1129, 3}, - {1129, 3}, - {1129, 2}, - {1129, 2}, + {1336, 1}, + {1336, 3}, + {1131, 2}, + {1131, 2}, + {1131, 3}, + {1131, 3}, + {1131, 2}, + {1131, 2}, {1013, 3}, {1042, 1}, {1042, 3}, @@ -4298,7 +4316,7 @@ var ( {962, 6}, {962, 4}, {962, 5}, - {1130, 2}, + {1132, 2}, {971, 3}, {971, 3}, {836, 1}, @@ -4306,39 +4324,41 @@ var ( {836, 5}, {918, 1}, {918, 3}, - {1140, 0}, - {1140, 1}, - {1385, 0}, - {1385, 3}, + {1142, 0}, + {1142, 1}, + {1390, 0}, + {1390, 3}, {997, 1}, {997, 3}, - {1351, 0}, - {1351, 1}, - {1350, 1}, - {1350, 3}, - {1141, 1}, - {1141, 1}, - {1142, 0}, - {1142, 3}, + {1355, 0}, + {1355, 1}, + {1354, 1}, + {1354, 3}, + {1143, 1}, + {1143, 1}, + {1144, 0}, + {1144, 3}, {861, 1}, {861, 2}, - {1086, 0}, - {1086, 1}, + {1087, 0}, + {1087, 1}, {932, 1}, {932, 1}, {1059, 1}, {1059, 2}, - {1184, 0}, - {1184, 1}, - {1369, 2}, - {1369, 1}, + {1186, 0}, + {1186, 1}, + {1373, 2}, + {1373, 1}, {1047, 2}, {1047, 1}, {1047, 1}, - {1047, 2}, {1047, 3}, - {1047, 1}, + {1047, 4}, + {1047, 2}, {1047, 2}, + {1047, 1}, + {1047, 3}, {1047, 2}, {1047, 3}, {1047, 3}, @@ -4350,108 +4370,108 @@ var ( {1047, 2}, {1047, 2}, {1047, 2}, - {1339, 0}, - {1339, 3}, - {1339, 5}, - {1488, 1}, - {1488, 1}, - {1488, 1}, - {1348, 1}, - {1348, 1}, - {1348, 1}, + {1343, 0}, + {1343, 3}, + {1343, 5}, + {1493, 1}, + {1493, 1}, + {1493, 1}, + {1352, 1}, + {1352, 1}, + {1352, 1}, {1063, 0}, {1063, 2}, - {1517, 0}, - {1517, 1}, - {1517, 1}, - {1143, 1}, - {1143, 2}, - {1144, 0}, - {1144, 1}, - {1355, 7}, - {1355, 7}, - {1355, 7}, - {1355, 7}, - {1355, 8}, - {1355, 5}, - {1407, 2}, - {1407, 2}, - {1407, 2}, - {1408, 0}, - {1408, 1}, + {1524, 0}, + {1524, 1}, + {1524, 1}, + {1145, 1}, + {1145, 2}, + {1146, 0}, + {1146, 1}, + {1359, 7}, + {1359, 7}, + {1359, 7}, + {1359, 7}, + {1359, 8}, + {1359, 5}, + {1412, 2}, + {1412, 2}, + {1412, 2}, + {1413, 0}, + {1413, 1}, {1028, 5}, - {1234, 3}, - {1235, 3}, - {1414, 0}, - {1414, 1}, - {1414, 1}, - {1414, 2}, - {1414, 2}, - {1265, 1}, - {1265, 1}, - {1265, 2}, - {1265, 2}, - {1265, 2}, - {1364, 1}, - {1364, 1}, - {1364, 1}, - {1364, 1}, + {1236, 3}, + {1237, 3}, + {1419, 0}, + {1419, 1}, + {1419, 1}, + {1419, 2}, + {1419, 2}, + {1267, 1}, + {1267, 1}, + {1267, 2}, + {1267, 2}, + {1267, 2}, + {1368, 1}, + {1368, 1}, + {1368, 1}, + {1368, 1}, {1016, 3}, {1016, 3}, {1016, 4}, {1016, 4}, + {1231, 3}, + {1231, 1}, + {1078, 1}, + {1078, 3}, + {1078, 4}, + {1078, 3}, + {1078, 1}, {1229, 3}, {1229, 1}, - {1077, 1}, - {1077, 3}, - {1077, 4}, - {1077, 3}, - {1077, 1}, - {1227, 3}, - {1227, 1}, {795, 4}, {795, 4}, + {1077, 1}, + {1077, 1}, + {1077, 1}, + {1077, 1}, {1076, 1}, {1076, 1}, {1076, 1}, - {1076, 1}, - {1075, 1}, - {1075, 1}, - {1075, 1}, {1051, 1}, {1051, 1}, - {1098, 1}, - {1098, 2}, - {1098, 2}, + {1099, 1}, + {1099, 2}, + {1099, 2}, {933, 1}, {933, 1}, {933, 1}, - {1302, 1}, - {1302, 1}, - {1302, 1}, - {1342, 1}, - {1342, 1}, - {1157, 12}, - {1175, 3}, - {1151, 13}, - {1391, 0}, - {1391, 3}, + {1304, 1}, + {1304, 1}, + {1304, 1}, + {1346, 1}, + {1346, 1}, + {1159, 12}, + {1177, 3}, + {1153, 13}, + {1396, 0}, + {1396, 3}, {949, 1}, {949, 3}, {939, 3}, {939, 4}, - {1208, 0}, - {1208, 1}, - {1208, 1}, - {1208, 2}, - {1208, 2}, - {1390, 0}, - {1390, 1}, - {1390, 1}, - {1390, 1}, - {1119, 4}, - {1119, 3}, - {1150, 5}, + {1210, 0}, + {1210, 1}, + {1210, 1}, + {1210, 2}, + {1210, 2}, + {1395, 0}, + {1395, 1}, + {1395, 1}, + {1395, 1}, + {1121, 4}, + {1121, 3}, + {1152, 5}, {922, 1}, {1005, 1}, {954, 1}, @@ -4462,61 +4482,68 @@ var ( {972, 2}, {972, 1}, {972, 5}, - {1361, 0}, - {1361, 1}, + {1365, 0}, + {1365, 1}, {1052, 1}, {1052, 2}, {1050, 12}, {1050, 7}, - {1233, 0}, - {1233, 4}, - {1233, 4}, + {1235, 0}, + {1235, 4}, + {1235, 4}, {906, 0}, {906, 1}, + {1252, 0}, + {1252, 7}, + {1388, 1}, + {1388, 1}, + {1318, 2}, + {1510, 1}, + {1510, 3}, + {1511, 0}, + {1511, 5}, + {1307, 6}, + {1307, 5}, + {1437, 0}, + {1437, 3}, + {1438, 1}, + {1438, 5}, + {1438, 6}, + {1438, 4}, + {1438, 5}, + {1438, 4}, + {1438, 3}, + {1438, 1}, + {1251, 0}, + {1251, 7}, + {1400, 1}, + {1400, 2}, + {1418, 0}, + {1418, 2}, + {1416, 0}, + {1416, 2}, + {1381, 0}, + {1381, 14}, + {1220, 0}, + {1220, 1}, + {1500, 0}, + {1500, 4}, + {1499, 0}, + {1499, 2}, + {1439, 0}, + {1439, 2}, {1250, 0}, - {1250, 6}, - {1304, 6}, - {1304, 5}, - {1432, 0}, - {1432, 3}, - {1433, 1}, - {1433, 5}, - {1433, 6}, - {1433, 4}, - {1433, 5}, - {1433, 4}, - {1433, 3}, - {1433, 1}, - {1249, 0}, - {1249, 7}, - {1395, 1}, - {1395, 2}, - {1413, 0}, - {1413, 2}, - {1411, 0}, - {1411, 2}, - {1377, 0}, - {1377, 14}, - {1218, 0}, - {1218, 1}, - {1495, 0}, - {1495, 4}, - {1494, 0}, - {1494, 2}, - {1434, 0}, - {1434, 2}, - {1248, 0}, - {1248, 3}, - {1247, 1}, - {1247, 3}, - {1083, 5}, - {1493, 0}, - {1493, 3}, - {1492, 1}, - {1492, 3}, - {1303, 3}, - {1082, 0}, - {1082, 2}, + {1250, 3}, + {1249, 1}, + {1249, 3}, + {1084, 5}, + {1498, 0}, + {1498, 3}, + {1497, 1}, + {1497, 3}, + {1306, 3}, + {1083, 0}, + {1083, 2}, {927, 3}, {927, 3}, {927, 4}, @@ -4528,51 +4555,51 @@ var ( {927, 3}, {927, 3}, {927, 1}, - {1431, 0}, - {1431, 4}, - {1431, 6}, - {1431, 1}, - {1431, 5}, - {1431, 1}, - {1431, 1}, - {1180, 0}, - {1180, 1}, - {1180, 1}, - {1336, 0}, - {1336, 1}, - {1358, 0}, - {1358, 1}, - {1358, 1}, - {1358, 1}, - {1358, 1}, - {1359, 1}, - {1359, 1}, - {1359, 1}, - {1359, 1}, - {1400, 2}, - {1400, 4}, - {1160, 11}, - {1429, 0}, - {1429, 2}, - {1510, 0}, - {1510, 3}, - {1510, 3}, - {1510, 3}, - {1512, 0}, - {1512, 3}, - {1515, 0}, - {1515, 3}, - {1515, 3}, - {1514, 1}, - {1513, 0}, - {1513, 3}, - {1349, 1}, - {1349, 3}, - {1511, 0}, - {1511, 4}, - {1511, 4}, - {1165, 2}, - {838, 13}, + {1436, 0}, + {1436, 4}, + {1436, 6}, + {1436, 1}, + {1436, 5}, + {1436, 1}, + {1436, 1}, + {1182, 0}, + {1182, 1}, + {1182, 1}, + {1340, 0}, + {1340, 1}, + {1362, 0}, + {1362, 1}, + {1362, 1}, + {1362, 1}, + {1362, 1}, + {1363, 1}, + {1363, 1}, + {1363, 1}, + {1363, 1}, + {1405, 2}, + {1405, 4}, + {1162, 11}, + {1434, 0}, + {1434, 2}, + {1517, 0}, + {1517, 3}, + {1517, 3}, + {1517, 3}, + {1519, 0}, + {1519, 3}, + {1522, 0}, + {1522, 3}, + {1522, 3}, + {1521, 1}, + {1520, 0}, + {1520, 3}, + {1353, 1}, + {1353, 3}, + {1518, 0}, + {1518, 4}, + {1518, 4}, + {1167, 2}, + {838, 13}, {838, 9}, {850, 10}, {854, 1}, @@ -4580,34 +4607,34 @@ var ( {854, 2}, {854, 2}, {946, 1}, - {1167, 4}, - {1168, 7}, - {1168, 7}, - {1177, 6}, - {1081, 0}, - {1081, 1}, - {1081, 2}, - {1179, 4}, + {1169, 4}, + {1170, 7}, + {1170, 7}, {1179, 6}, + {1082, 0}, + {1082, 1}, + {1082, 2}, + {1181, 4}, + {1181, 6}, + {1180, 3}, + {1180, 5}, + {1175, 3}, + {1175, 5}, {1178, 3}, {1178, 5}, - {1173, 3}, - {1173, 5}, - {1176, 3}, - {1176, 5}, - {1176, 4}, + {1178, 4}, {1029, 0}, {1029, 1}, {1029, 1}, - {1102, 1}, - {1102, 1}, + {1104, 1}, + {1104, 1}, {817, 0}, {817, 1}, - {1182, 0}, - {1312, 2}, - {1312, 5}, - {1312, 3}, - {1312, 6}, + {1184, 0}, + {1315, 2}, + {1315, 5}, + {1315, 3}, + {1315, 6}, {873, 1}, {873, 1}, {873, 1}, @@ -4622,35 +4649,35 @@ var ( {872, 3}, {872, 6}, {872, 6}, - {1186, 1}, - {1186, 1}, - {1186, 1}, - {1186, 1}, - {1186, 1}, - {1186, 1}, - {1186, 1}, - {1186, 1}, + {1188, 1}, + {1188, 1}, + {1188, 1}, + {1188, 1}, + {1188, 1}, + {1188, 1}, + {1188, 1}, + {1188, 1}, {985, 2}, {983, 3}, - {1131, 5}, - {1131, 5}, - {1131, 3}, - {1131, 4}, - {1131, 3}, - {1131, 6}, - {1131, 4}, - {1131, 6}, - {1131, 4}, - {1131, 5}, - {1131, 4}, - {1131, 5}, - {1131, 5}, - {1131, 5}, - {1132, 2}, - {1132, 2}, - {1132, 2}, - {1362, 1}, - {1362, 3}, + {1133, 5}, + {1133, 5}, + {1133, 3}, + {1133, 4}, + {1133, 3}, + {1133, 6}, + {1133, 4}, + {1133, 6}, + {1133, 4}, + {1133, 5}, + {1133, 4}, + {1133, 5}, + {1133, 5}, + {1133, 5}, + {1134, 2}, + {1134, 2}, + {1134, 2}, + {1366, 1}, + {1366, 3}, {967, 0}, {967, 2}, {964, 1}, @@ -4706,10 +4733,10 @@ var ( {1015, 1}, {1015, 1}, {1015, 1}, - {1241, 1}, - {1241, 1}, - {1241, 1}, - {1136, 4}, + {1243, 1}, + {1243, 1}, + {1243, 1}, + {1138, 4}, {813, 3}, {813, 3}, {813, 3}, @@ -4720,58 +4747,58 @@ var ( {813, 3}, {813, 3}, {813, 1}, - {1164, 1}, - {1164, 1}, - {1226, 1}, - {1226, 1}, - {1381, 0}, - {1381, 4}, - {1381, 7}, - {1381, 3}, - {1381, 3}, + {1166, 1}, + {1166, 1}, + {1228, 1}, + {1228, 1}, + {1385, 0}, + {1385, 4}, + {1385, 7}, + {1385, 3}, + {1385, 3}, {816, 1}, {816, 1}, {815, 1}, {815, 1}, {874, 1}, {874, 3}, - {1412, 1}, - {1412, 3}, - {1363, 1}, - {1363, 3}, + {1417, 1}, + {1417, 3}, + {1367, 1}, + {1367, 3}, {938, 0}, {938, 1}, - {1197, 0}, - {1197, 1}, - {1196, 1}, + {1199, 0}, + {1199, 1}, + {1198, 1}, {812, 3}, {812, 3}, {812, 4}, {812, 5}, {812, 1}, - {1353, 1}, - {1353, 1}, - {1353, 1}, - {1353, 1}, - {1353, 1}, - {1353, 1}, - {1353, 1}, - {1353, 1}, - {1341, 1}, - {1341, 2}, - {1397, 1}, - {1397, 2}, - {1393, 1}, - {1393, 2}, - {1399, 1}, - {1399, 2}, - {1387, 1}, - {1387, 2}, - {1454, 1}, - {1454, 2}, - {1333, 1}, - {1333, 1}, - {1333, 1}, + {1357, 1}, + {1357, 1}, + {1357, 1}, + {1357, 1}, + {1357, 1}, + {1357, 1}, + {1357, 1}, + {1357, 1}, + {1345, 1}, + {1345, 2}, + {1402, 1}, + {1402, 2}, + {1398, 1}, + {1398, 2}, + {1404, 1}, + {1404, 2}, + {1392, 1}, + {1392, 2}, + {1459, 1}, + {1459, 2}, + {1337, 1}, + {1337, 1}, + {1337, 1}, {811, 5}, {811, 3}, {811, 5}, @@ -4780,29 +4807,29 @@ var ( {811, 3}, {811, 5}, {811, 1}, - {1266, 1}, - {1266, 1}, - {1215, 0}, - {1215, 2}, - {1187, 1}, - {1187, 3}, - {1187, 5}, - {1187, 2}, - {1374, 0}, - {1374, 1}, - {1373, 1}, - {1373, 2}, - {1373, 1}, - {1373, 2}, - {1376, 1}, - {1376, 3}, - {1528, 0}, - {1528, 2}, - {1065, 4}, - {1203, 0}, - {1203, 2}, - {1335, 0}, - {1335, 1}, + {1268, 1}, + {1268, 1}, + {1217, 0}, + {1217, 2}, + {1189, 1}, + {1189, 3}, + {1189, 5}, + {1189, 2}, + {1378, 0}, + {1378, 1}, + {1377, 1}, + {1377, 2}, + {1377, 1}, + {1377, 2}, + {1380, 1}, + {1380, 3}, + {1535, 0}, + {1535, 2}, + {1066, 4}, + {1205, 0}, + {1205, 2}, + {1339, 0}, + {1339, 1}, {1012, 3}, {869, 0}, {869, 2}, @@ -4820,11 +4847,13 @@ var ( {999, 2}, {999, 1}, {999, 1}, - {1068, 1}, - {1068, 3}, - {1068, 3}, - {1392, 0}, - {1392, 1}, + {999, 1}, + {999, 1}, + {1069, 1}, + {1069, 3}, + {1069, 3}, + {1397, 0}, + {1397, 1}, {979, 2}, {979, 2}, {1021, 1}, @@ -5376,40 +5405,40 @@ var ( {787, 1}, {787, 1}, {787, 1}, - {1135, 2}, - {1441, 1}, - {1441, 3}, - {1441, 4}, - {1441, 6}, + {1137, 2}, + {1446, 1}, + {1446, 3}, + {1446, 4}, + {1446, 6}, {839, 9}, - {1211, 0}, - {1211, 1}, - {1210, 5}, - {1210, 4}, - {1210, 4}, - {1210, 4}, - {1210, 4}, - {1210, 2}, - {1210, 1}, - {1210, 1}, - {1210, 1}, - {1210, 1}, - {1210, 2}, - {1112, 1}, + {1213, 0}, + {1213, 1}, + {1212, 5}, + {1212, 4}, + {1212, 4}, + {1212, 4}, + {1212, 4}, + {1212, 2}, + {1212, 1}, + {1212, 1}, + {1212, 1}, + {1212, 1}, + {1212, 2}, + {1114, 1}, + {1114, 1}, {1112, 1}, - {1110, 1}, - {1110, 3}, + {1112, 3}, {956, 3}, - {1509, 0}, - {1509, 1}, - {1508, 3}, - {1508, 1}, + {1516, 0}, + {1516, 1}, + {1515, 3}, + {1515, 1}, {908, 1}, {908, 1}, - {1352, 3}, - {1352, 5}, - {1415, 0}, - {1415, 5}, + {1356, 3}, + {1356, 5}, + {1420, 0}, + {1420, 5}, {840, 7}, {792, 1}, {792, 1}, @@ -5425,19 +5454,19 @@ var ( {792, 2}, {794, 1}, {794, 2}, - {1327, 1}, - {1327, 3}, - {1121, 2}, + {1331, 1}, + {1331, 3}, + {1123, 2}, {857, 3}, {1017, 1}, {1017, 3}, {990, 1}, {990, 2}, - {1428, 1}, - {1428, 1}, - {1080, 0}, - {1080, 1}, - {1080, 1}, + {1433, 1}, + {1433, 1}, + {1081, 0}, + {1081, 1}, + {1081, 1}, {926, 0}, {926, 1}, {810, 3}, @@ -5490,8 +5519,8 @@ var ( {805, 4}, {805, 3}, {805, 3}, - {1334, 0}, - {1334, 1}, + {1338, 0}, + {1338, 1}, {901, 1}, {901, 1}, {903, 1}, @@ -5533,8 +5562,8 @@ var ( {799, 1}, {799, 1}, {799, 1}, - {1240, 0}, - {1240, 2}, + {1242, 0}, + {1242, 2}, {803, 1}, {803, 1}, {803, 1}, @@ -5582,17 +5611,17 @@ var ( {798, 7}, {798, 1}, {798, 8}, - {1383, 1}, - {1383, 1}, - {1383, 1}, - {1383, 1}, + {1387, 1}, + {1387, 1}, + {1387, 1}, + {1387, 1}, {800, 1}, {800, 1}, {801, 1}, {801, 1}, - {1504, 1}, - {1504, 1}, - {1504, 1}, + {1509, 1}, + {1509, 1}, + {1509, 1}, {804, 4}, {804, 6}, {804, 1}, @@ -5623,13 +5652,13 @@ var ( {806, 8}, {806, 8}, {806, 9}, - {1420, 0}, - {1420, 2}, + {1425, 0}, + {1425, 2}, {796, 4}, {796, 6}, - {1382, 0}, - {1382, 2}, - {1382, 3}, + {1386, 0}, + {1386, 2}, + {1386, 3}, {916, 1}, {916, 1}, {916, 1}, @@ -5659,27 +5688,27 @@ var ( {902, 1}, {902, 1}, {902, 1}, - {1371, 0}, - {1371, 1}, - {1519, 1}, - {1519, 2}, - {1317, 4}, - {1368, 0}, - {1368, 2}, - {1137, 2}, - {1137, 3}, - {1137, 1}, - {1137, 1}, - {1137, 2}, - {1137, 2}, - {1137, 2}, - {1137, 2}, - {1137, 2}, - {1137, 1}, - {1137, 1}, - {1137, 2}, - {1137, 1}, - {1137, 3}, + {1375, 0}, + {1375, 1}, + {1526, 1}, + {1526, 2}, + {1321, 4}, + {1372, 0}, + {1372, 2}, + {1139, 2}, + {1139, 3}, + {1139, 1}, + {1139, 1}, + {1139, 2}, + {1139, 2}, + {1139, 2}, + {1139, 2}, + {1139, 2}, + {1139, 1}, + {1139, 1}, + {1139, 2}, + {1139, 1}, + {1139, 3}, {952, 1}, {952, 1}, {952, 1}, @@ -5692,51 +5721,51 @@ var ( {898, 3}, {1034, 2}, {1034, 4}, - {1100, 1}, - {1100, 3}, + {1102, 1}, + {1102, 3}, {1025, 0}, {1025, 2}, - {1263, 0}, - {1263, 1}, - {1256, 4}, - {1439, 1}, - {1439, 1}, - {1185, 2}, - {1185, 4}, - {1506, 1}, - {1506, 3}, - {1162, 3}, - {1163, 1}, - {1163, 1}, + {1265, 0}, + {1265, 1}, + {1258, 4}, + {1444, 1}, + {1444, 1}, + {1187, 2}, + {1187, 4}, + {1513, 1}, + {1513, 3}, + {1164, 3}, + {1165, 1}, + {1165, 1}, {862, 1}, {862, 2}, {862, 3}, {862, 4}, - {1146, 4}, - {1146, 4}, - {1146, 5}, - {1146, 2}, - {1146, 3}, - {1146, 1}, - {1146, 2}, - {1290, 1}, - {1274, 1}, - {1204, 2}, + {1148, 4}, + {1148, 4}, + {1148, 5}, + {1148, 2}, + {1148, 3}, + {1148, 1}, + {1148, 2}, + {1292, 1}, + {1276, 1}, + {1206, 2}, {822, 4}, {823, 3}, {824, 7}, - {1500, 0}, - {1500, 7}, - {1500, 5}, - {1499, 0}, - {1499, 1}, - {1499, 1}, - {1499, 1}, - {1501, 0}, - {1501, 1}, - {1501, 1}, - {1269, 0}, - {1269, 4}, + {1505, 0}, + {1505, 7}, + {1505, 5}, + {1504, 0}, + {1504, 1}, + {1504, 1}, + {1504, 1}, + {1506, 0}, + {1506, 1}, + {1506, 1}, + {1271, 0}, + {1271, 4}, {821, 7}, {821, 6}, {821, 5}, @@ -5746,47 +5775,47 @@ var ( {831, 2}, {830, 2}, {830, 3}, - {1322, 3}, - {1322, 1}, + {1326, 3}, + {1326, 1}, {1049, 4}, - {1380, 2}, - {1520, 0}, - {1520, 2}, - {1521, 1}, - {1521, 3}, - {1318, 3}, + {1384, 2}, + {1527, 0}, + {1527, 2}, + {1528, 1}, + {1528, 3}, + {1322, 3}, {1041, 1}, - {1320, 3}, - {1526, 4}, - {1418, 0}, - {1418, 1}, - {1422, 0}, - {1422, 3}, + {1324, 3}, + {1533, 4}, + {1423, 0}, + {1423, 1}, {1427, 0}, {1427, 3}, - {1426, 0}, - {1426, 2}, - {1524, 1}, - {1524, 1}, - {1524, 1}, - {1523, 1}, - {1523, 1}, - {1114, 2}, - {1114, 2}, - {1114, 2}, - {1114, 4}, - {1114, 2}, - {1522, 4}, - {1319, 1}, - {1319, 2}, - {1319, 2}, - {1319, 2}, - {1319, 4}, + {1432, 0}, + {1432, 3}, + {1431, 0}, + {1431, 2}, + {1531, 1}, + {1531, 1}, + {1531, 1}, + {1530, 1}, + {1530, 1}, + {1116, 2}, + {1116, 2}, + {1116, 2}, + {1116, 4}, + {1116, 2}, + {1529, 4}, + {1323, 1}, + {1323, 2}, + {1323, 2}, + {1323, 2}, + {1323, 4}, {859, 0}, {859, 1}, {848, 2}, - {1525, 1}, - {1525, 1}, + {1532, 1}, + {1532, 1}, {809, 4}, {809, 4}, {809, 4}, @@ -5798,18 +5827,18 @@ var ( {809, 6}, {809, 6}, {809, 9}, - {1242, 0}, - {1242, 3}, - {1242, 3}, - {1243, 0}, - {1243, 2}, + {1244, 0}, + {1244, 3}, + {1244, 3}, + {1245, 0}, + {1245, 2}, {1004, 0}, {1004, 2}, {1004, 2}, - {1419, 0}, - {1419, 2}, - {1419, 2}, - {1498, 1}, + {1424, 0}, + {1424, 2}, + {1424, 2}, + {1503, 1}, {1010, 1}, {1010, 3}, {973, 1}, @@ -5825,23 +5854,23 @@ var ( {1033, 1}, {1032, 1}, {1032, 2}, - {1067, 2}, - {1067, 2}, - {1067, 2}, - {1389, 0}, - {1389, 2}, - {1389, 3}, - {1389, 3}, - {1066, 5}, + {1068, 2}, + {1068, 2}, + {1068, 2}, + {1394, 0}, + {1394, 2}, + {1394, 3}, + {1394, 3}, + {1067, 5}, {978, 0}, {978, 1}, {978, 3}, {978, 1}, {978, 3}, - {1206, 1}, - {1206, 2}, - {1207, 0}, - {1207, 1}, + {1208, 1}, + {1208, 2}, + {1209, 0}, + {1209, 1}, {909, 3}, {909, 5}, {909, 7}, @@ -5854,48 +5883,48 @@ var ( {909, 7}, {931, 1}, {931, 1}, - {1246, 0}, - {1246, 1}, + {1248, 0}, + {1248, 1}, {936, 1}, {936, 2}, {936, 2}, - {1216, 0}, - {1216, 2}, + {1218, 0}, + {1218, 2}, {1001, 1}, {1001, 1}, - {1462, 1}, - {1462, 1}, - {1378, 1}, - {1378, 1}, - {1372, 0}, - {1372, 1}, + {1467, 1}, + {1467, 1}, + {1382, 1}, + {1382, 1}, + {1376, 0}, + {1376, 1}, {858, 2}, {858, 4}, {858, 4}, {858, 5}, {941, 0}, {941, 1}, - {1281, 1}, - {1281, 1}, - {1281, 1}, - {1281, 1}, - {1281, 1}, - {1281, 1}, - {1281, 1}, - {1281, 1}, - {1281, 1}, - {1465, 0}, - {1465, 1}, - {1466, 2}, - {1466, 1}, - {959, 1}, + {1283, 1}, + {1283, 1}, + {1283, 1}, + {1283, 1}, + {1283, 1}, + {1283, 1}, + {1283, 1}, + {1283, 1}, + {1283, 1}, + {1470, 0}, + {1470, 1}, + {1471, 2}, + {1471, 1}, + {959, 1}, {1009, 0}, {1009, 1}, - {1282, 1}, - {1282, 1}, - {1464, 1}, - {1096, 0}, - {1096, 1}, + {1284, 1}, + {1284, 1}, + {1469, 1}, + {1097, 0}, + {1097, 1}, {1008, 0}, {1008, 5}, {790, 3}, @@ -5911,8 +5940,8 @@ var ( {1007, 5}, {1007, 5}, {1007, 4}, - {1232, 0}, - {1232, 2}, + {1234, 0}, + {1234, 2}, {832, 1}, {832, 1}, {832, 2}, @@ -5929,12 +5958,12 @@ var ( {826, 3}, {825, 1}, {825, 1}, - {1468, 2}, - {1468, 2}, - {1468, 2}, - {1097, 1}, - {1138, 9}, - {1138, 9}, + {1473, 2}, + {1473, 2}, + {1473, 2}, + {1098, 1}, + {1140, 9}, + {1140, 9}, {863, 2}, {863, 4}, {863, 6}, @@ -5945,24 +5974,24 @@ var ( {863, 6}, {863, 3}, {863, 4}, - {1286, 3}, - {1285, 6}, - {1284, 1}, - {1284, 1}, - {1284, 1}, - {1469, 3}, - {1469, 1}, - {1469, 1}, - {1104, 1}, - {1104, 3}, + {1288, 3}, + {1287, 6}, + {1286, 1}, + {1286, 1}, + {1286, 1}, + {1474, 3}, + {1474, 1}, + {1474, 1}, + {1106, 1}, + {1106, 3}, {1038, 3}, {1038, 2}, {1038, 2}, {1038, 3}, - {1396, 2}, - {1396, 2}, - {1396, 2}, - {1396, 1}, + {1401, 2}, + {1401, 2}, + {1401, 2}, + {1401, 1}, {957, 1}, {957, 1}, {957, 1}, @@ -5973,25 +6002,25 @@ var ( {1018, 1}, {1018, 3}, {1018, 3}, - {1113, 3}, - {1113, 4}, - {1113, 4}, - {1113, 4}, - {1113, 3}, - {1113, 3}, - {1113, 2}, - {1113, 4}, - {1113, 4}, - {1113, 2}, - {1113, 2}, - {1346, 1}, - {1346, 1}, + {1115, 3}, + {1115, 4}, + {1115, 4}, + {1115, 4}, + {1115, 3}, + {1115, 3}, + {1115, 2}, + {1115, 4}, + {1115, 4}, + {1115, 2}, + {1115, 2}, + {1350, 1}, + {1350, 1}, {921, 1}, {921, 1}, {991, 1}, {991, 1}, - {1316, 1}, - {1316, 3}, + {1320, 1}, + {1320, 3}, {808, 1}, {808, 1}, {807, 1}, @@ -6002,295 +6031,295 @@ var ( {870, 2}, {987, 1}, {987, 3}, - {1251, 1}, - {1251, 4}, + {1253, 1}, + {1253, 4}, {1014, 1}, {935, 1}, {935, 1}, {913, 3}, {913, 2}, - {1094, 1}, - {1094, 1}, + {1095, 1}, + {1095, 1}, {934, 1}, {934, 1}, {984, 1}, {984, 3}, - {1326, 2}, - {1326, 4}, - {1326, 4}, - {1340, 1}, - {1340, 1}, - {1117, 3}, - {1117, 5}, - {1117, 6}, - {1117, 4}, - {1117, 4}, - {1117, 5}, - {1117, 5}, - {1117, 5}, - {1117, 6}, - {1117, 4}, - {1117, 5}, - {1117, 5}, - {1117, 5}, - {1117, 6}, - {1117, 6}, - {1117, 4}, - {1117, 3}, - {1117, 3}, - {1117, 4}, - {1117, 4}, - {1117, 5}, - {1117, 5}, - {1117, 3}, - {1117, 3}, - {1117, 3}, - {1117, 3}, - {1117, 3}, - {1117, 3}, - {1117, 4}, - {1117, 5}, - {1117, 4}, - {1117, 4}, - {1325, 2}, - {1325, 2}, - {1325, 3}, - {1325, 3}, - {1384, 1}, - {1384, 3}, - {1201, 5}, + {1330, 2}, + {1330, 4}, + {1330, 4}, + {1344, 1}, + {1344, 1}, + {1119, 3}, + {1119, 5}, + {1119, 6}, + {1119, 4}, + {1119, 4}, + {1119, 5}, + {1119, 5}, + {1119, 5}, + {1119, 6}, + {1119, 4}, + {1119, 5}, + {1119, 5}, + {1119, 5}, + {1119, 6}, + {1119, 6}, + {1119, 4}, + {1119, 3}, + {1119, 3}, + {1119, 4}, + {1119, 4}, + {1119, 5}, + {1119, 5}, + {1119, 3}, + {1119, 3}, + {1119, 3}, + {1119, 3}, + {1119, 3}, + {1119, 3}, + {1119, 4}, + {1119, 5}, + {1119, 4}, + {1119, 4}, + {1329, 2}, + {1329, 2}, + {1329, 3}, + {1329, 3}, + {1389, 1}, + {1389, 3}, + {1203, 5}, {1022, 1}, {1022, 3}, - {1288, 3}, - {1288, 4}, - {1288, 4}, - {1288, 5}, - {1288, 4}, - {1288, 5}, - {1288, 5}, - {1288, 4}, - {1288, 6}, - {1288, 4}, - {1288, 8}, - {1288, 2}, - {1288, 5}, - {1288, 3}, - {1288, 4}, - {1288, 3}, - {1288, 3}, - {1288, 2}, - {1288, 5}, - {1288, 2}, - {1288, 2}, - {1288, 4}, - {1288, 4}, - {1288, 4}, - {1473, 2}, - {1473, 2}, - {1473, 4}, - {1476, 0}, + {1290, 3}, + {1290, 4}, + {1290, 4}, + {1290, 5}, + {1290, 4}, + {1290, 5}, + {1290, 5}, + {1290, 4}, + {1290, 6}, + {1290, 4}, + {1290, 8}, + {1290, 2}, + {1290, 5}, + {1290, 3}, + {1290, 4}, + {1290, 3}, + {1290, 3}, + {1290, 2}, + {1290, 5}, + {1290, 2}, + {1290, 2}, + {1290, 4}, + {1290, 4}, + {1290, 4}, + {1478, 2}, + {1478, 2}, + {1478, 4}, + {1481, 0}, + {1481, 1}, + {1480, 1}, + {1480, 3}, + {1289, 1}, + {1289, 1}, + {1289, 2}, + {1289, 2}, + {1289, 2}, + {1289, 1}, + {1289, 1}, + {1289, 1}, + {1289, 1}, + {1479, 0}, + {1479, 3}, + {1514, 0}, + {1514, 2}, + {1476, 1}, + {1476, 1}, {1476, 1}, - {1475, 1}, - {1475, 3}, - {1287, 1}, - {1287, 1}, - {1287, 2}, - {1287, 2}, - {1287, 2}, - {1287, 1}, - {1287, 1}, - {1287, 1}, - {1287, 1}, - {1474, 0}, - {1474, 3}, - {1507, 0}, - {1507, 2}, - {1471, 1}, - {1471, 1}, - {1471, 1}, {919, 1}, {919, 1}, - {1477, 1}, - {1477, 1}, - {1477, 1}, - {1477, 1}, - {1477, 3}, - {1477, 3}, - {1477, 3}, - {1477, 3}, - {1477, 5}, - {1477, 4}, - {1477, 5}, - {1477, 5}, - {1477, 1}, - {1477, 5}, - {1477, 1}, + {1482, 1}, + {1482, 1}, + {1482, 1}, + {1482, 1}, + {1482, 3}, + {1482, 3}, + {1482, 3}, + {1482, 3}, + {1482, 5}, + {1482, 4}, + {1482, 5}, + {1482, 5}, + {1482, 1}, + {1482, 5}, + {1482, 1}, + {1482, 2}, + {1482, 2}, + {1482, 2}, + {1482, 1}, + {1482, 2}, + {1482, 2}, + {1482, 2}, + {1482, 2}, + {1482, 2}, + {1482, 2}, + {1482, 2}, + {1482, 1}, + {1482, 1}, + {1482, 1}, + {1482, 1}, + {1482, 1}, + {1482, 1}, + {1482, 1}, + {1482, 1}, + {1482, 1}, + {1482, 1}, + {1482, 1}, + {1482, 2}, + {1482, 1}, + {1482, 1}, + {1482, 1}, + {1482, 2}, + {1482, 2}, + {1477, 0}, {1477, 2}, {1477, 2}, - {1477, 2}, - {1477, 1}, - {1477, 2}, - {1477, 2}, - {1477, 2}, - {1477, 2}, - {1477, 2}, - {1477, 2}, - {1477, 2}, - {1477, 1}, - {1477, 1}, - {1477, 1}, - {1477, 1}, - {1477, 1}, - {1477, 1}, - {1477, 1}, - {1477, 1}, - {1477, 1}, - {1477, 1}, - {1477, 1}, - {1477, 2}, - {1477, 1}, - {1477, 1}, - {1477, 1}, - {1477, 2}, - {1477, 2}, - {1472, 0}, - {1472, 2}, - {1472, 2}, - {1064, 0}, - {1064, 1}, - {1064, 1}, - {1487, 0}, - {1487, 1}, - {1487, 1}, - {1487, 1}, - {1237, 0}, - {1237, 1}, + {1065, 0}, + {1065, 1}, + {1065, 1}, + {1492, 0}, + {1492, 1}, + {1492, 1}, + {1492, 1}, + {1239, 0}, + {1239, 1}, {958, 0}, {958, 2}, - {1289, 2}, - {1456, 1}, - {1456, 1}, - {1194, 3}, - {1085, 1}, - {1085, 3}, - {1379, 1}, - {1379, 1}, - {1379, 3}, - {1379, 1}, - {1379, 2}, - {1379, 3}, - {1379, 1}, - {1405, 0}, - {1405, 1}, - {1405, 1}, - {1405, 1}, - {1405, 1}, - {1405, 1}, + {1291, 2}, + {1461, 1}, + {1461, 1}, + {1196, 3}, + {1086, 1}, + {1086, 3}, + {1383, 1}, + {1383, 1}, + {1383, 3}, + {1383, 1}, + {1383, 2}, + {1383, 3}, + {1383, 1}, + {1410, 0}, + {1410, 1}, + {1410, 1}, + {1410, 1}, + {1410, 1}, + {1410, 1}, {925, 0}, {925, 1}, {925, 1}, - {1308, 0}, - {1308, 1}, - {1527, 0}, - {1527, 3}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, - {1299, 1}, + {1311, 0}, + {1311, 1}, + {1534, 0}, + {1534, 3}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, + {1301, 1}, {1037, 1}, {1037, 1}, {1037, 1}, @@ -6317,17 +6346,17 @@ var ( {937, 1}, {937, 1}, {937, 1}, - {1486, 1}, - {1486, 3}, + {1491, 1}, + {1491, 3}, {1019, 2}, - {1139, 1}, - {1139, 1}, - {1101, 1}, - {1101, 1}, - {1306, 1}, - {1306, 3}, - {1496, 0}, - {1496, 3}, + {1141, 1}, + {1141, 1}, + {1103, 1}, + {1103, 1}, + {1309, 1}, + {1309, 3}, + {1501, 0}, + {1501, 3}, {960, 1}, {960, 4}, {960, 4}, @@ -6367,15 +6396,15 @@ var ( {960, 3}, {948, 0}, {948, 1}, - {1301, 1}, - {1301, 1}, - {1158, 0}, - {1158, 1}, + {1303, 1}, + {1303, 1}, + {1160, 0}, + {1160, 1}, {1035, 1}, {1035, 2}, {1035, 3}, - {1424, 0}, - {1424, 1}, + {1429, 0}, + {1429, 1}, {876, 3}, {955, 3}, {955, 3}, @@ -6392,31 +6421,31 @@ var ( {955, 3}, {955, 3}, {955, 3}, - {1106, 1}, - {1106, 1}, - {1106, 1}, - {1078, 3}, - {1078, 2}, - {1078, 3}, - {1078, 3}, - {1078, 2}, - {1069, 1}, - {1069, 1}, - {1069, 1}, - {1069, 1}, - {1069, 1}, - {1069, 1}, - {1069, 1}, - {1069, 1}, - {1069, 1}, - {1069, 1}, - {1069, 1}, - {1069, 1}, + {1108, 1}, + {1108, 1}, + {1108, 1}, + {1079, 3}, + {1079, 2}, + {1079, 3}, + {1079, 3}, + {1079, 2}, + {1070, 1}, + {1070, 1}, + {1070, 1}, + {1070, 1}, + {1070, 1}, + {1070, 1}, + {1070, 1}, + {1070, 1}, + {1070, 1}, + {1070, 1}, + {1070, 1}, + {1070, 1}, {1046, 1}, {1046, 1}, - {1239, 0}, - {1239, 1}, - {1239, 1}, + {1241, 0}, + {1241, 1}, + {1241, 1}, {1061, 1}, {1061, 1}, {1061, 1}, @@ -6427,50 +6456,50 @@ var ( {1062, 1}, {1062, 1}, {1044, 1}, - {1099, 3}, - {1099, 2}, - {1099, 3}, - {1099, 2}, - {1099, 3}, - {1099, 3}, - {1099, 2}, - {1099, 2}, - {1099, 1}, - {1099, 2}, - {1099, 5}, - {1099, 5}, - {1099, 1}, - {1099, 3}, - {1099, 2}, - {1099, 3}, + {1101, 3}, + {1101, 2}, + {1101, 3}, + {1101, 2}, + {1101, 3}, + {1101, 3}, + {1101, 2}, + {1101, 2}, + {1101, 1}, + {1101, 2}, + {1101, 5}, + {1101, 5}, + {1101, 1}, + {1101, 3}, + {1101, 2}, + {1101, 3}, {969, 1}, {969, 1}, - {1074, 1}, - {1074, 2}, - {1074, 2}, + {1075, 1}, + {1075, 2}, + {1075, 2}, {1040, 2}, {1040, 2}, {1040, 1}, {1040, 1}, - {1079, 2}, - {1079, 2}, - {1079, 1}, - {1079, 2}, - {1079, 2}, - {1079, 3}, - {1079, 3}, - {1079, 2}, - {1115, 1}, - {1115, 1}, + {1080, 2}, + {1080, 2}, + {1080, 1}, + {1080, 2}, + {1080, 2}, + {1080, 3}, + {1080, 3}, + {1080, 2}, + {1117, 1}, + {1117, 1}, {1045, 1}, {1045, 2}, {1045, 1}, {1045, 1}, {1045, 2}, - {1103, 1}, - {1103, 2}, - {1103, 1}, - {1103, 1}, + {1105, 1}, + {1105, 2}, + {1105, 1}, + {1105, 1}, {1003, 1}, {1003, 1}, {1003, 1}, @@ -6492,33 +6521,33 @@ var ( {1020, 1}, {1020, 1}, {1027, 5}, - {1416, 0}, - {1416, 1}, - {1244, 0}, - {1244, 3}, - {1244, 3}, + {1421, 0}, + {1421, 1}, + {1246, 0}, + {1246, 3}, + {1246, 3}, {911, 0}, {911, 2}, {911, 3}, - {1417, 0}, - {1417, 2}, + {1422, 0}, + {1422, 2}, {868, 2}, {868, 1}, {868, 2}, - {1236, 0}, - {1236, 2}, - {1490, 1}, - {1490, 3}, + {1238, 0}, + {1238, 2}, + {1495, 1}, + {1495, 3}, {1036, 1}, {1036, 1}, {1036, 1}, - {1311, 1}, - {1311, 3}, + {1314, 1}, + {1314, 3}, {820, 1}, {820, 1}, - {1491, 1}, - {1491, 1}, - {1491, 1}, + {1496, 1}, + {1496, 1}, + {1496, 1}, {841, 1}, {841, 2}, {837, 10}, @@ -6527,74 +6556,74 @@ var ( {904, 2}, {905, 0}, {905, 1}, - {1159, 9}, - {1155, 4}, - {1128, 9}, - {1128, 9}, - {1120, 3}, - {1123, 4}, - {1394, 2}, - {1394, 6}, + {1161, 9}, + {1157, 4}, + {1130, 9}, + {1130, 9}, + {1122, 3}, + {1125, 4}, + {1399, 2}, + {1399, 6}, {1011, 2}, {1039, 1}, {1039, 3}, - {1148, 0}, - {1148, 2}, - {1354, 1}, - {1354, 2}, - {1147, 2}, - {1147, 2}, + {1150, 0}, + {1150, 2}, + {1358, 1}, + {1358, 2}, + {1149, 2}, + {1149, 2}, + {1149, 2}, + {1149, 2}, + {1093, 0}, + {1093, 1}, + {1092, 2}, + {1092, 2}, + {1092, 2}, + {1092, 2}, + {1462, 1}, + {1462, 3}, + {1462, 2}, + {1094, 2}, + {1094, 2}, + {1094, 2}, + {1094, 2}, + {1094, 2}, + {1147, 0}, {1147, 2}, {1147, 2}, - {1092, 0}, - {1092, 1}, - {1091, 2}, - {1091, 2}, - {1091, 2}, - {1091, 2}, - {1457, 1}, - {1457, 3}, - {1457, 2}, - {1093, 2}, - {1093, 2}, - {1093, 2}, - {1093, 2}, - {1093, 2}, - {1145, 0}, - {1145, 2}, - {1145, 2}, - {1270, 0}, - {1270, 3}, - {1253, 0}, - {1253, 1}, - {1252, 1}, - {1252, 2}, - {1084, 2}, - {1084, 2}, - {1084, 3}, - {1084, 3}, - {1084, 4}, - {1084, 5}, - {1084, 2}, - {1084, 5}, - {1084, 3}, - {1084, 3}, - {1084, 2}, - {1084, 2}, - {1084, 2}, - {1084, 4}, - {1337, 0}, - {1337, 3}, - {1337, 3}, - {1337, 5}, - {1337, 5}, - {1337, 4}, - {1338, 1}, - {1202, 1}, - {1202, 1}, - {1279, 1}, - {1461, 1}, - {1461, 3}, + {1272, 0}, + {1272, 3}, + {1255, 0}, + {1255, 1}, + {1254, 1}, + {1254, 2}, + {1085, 2}, + {1085, 2}, + {1085, 3}, + {1085, 3}, + {1085, 4}, + {1085, 5}, + {1085, 2}, + {1085, 5}, + {1085, 3}, + {1085, 3}, + {1085, 2}, + {1085, 2}, + {1085, 2}, + {1085, 4}, + {1341, 0}, + {1341, 3}, + {1341, 3}, + {1341, 5}, + {1341, 5}, + {1341, 4}, + {1342, 1}, + {1204, 1}, + {1204, 1}, + {1281, 1}, + {1466, 1}, + {1466, 3}, {944, 1}, {944, 1}, {944, 1}, @@ -6603,176 +6632,180 @@ var ( {944, 1}, {944, 1}, {944, 1}, - {1149, 7}, - {1149, 5}, - {1149, 9}, - {1166, 5}, - {1166, 7}, - {1166, 7}, - {1283, 5}, - {1283, 7}, - {1283, 7}, - {1200, 9}, - {1198, 7}, - {1199, 4}, - {1321, 0}, - {1321, 3}, - {1321, 3}, - {1321, 3}, - {1321, 3}, - {1321, 3}, + {1151, 7}, + {1151, 5}, + {1151, 9}, + {1305, 1}, + {1305, 3}, + {1100, 1}, + {1100, 1}, + {1168, 5}, + {1168, 7}, + {1168, 7}, + {1285, 5}, + {1285, 7}, + {1285, 7}, + {1202, 9}, + {1200, 7}, + {1201, 4}, + {1325, 0}, + {1325, 3}, + {1325, 3}, + {1325, 3}, + {1325, 3}, + {1325, 3}, {1060, 1}, {1060, 2}, - {1095, 1}, - {1095, 1}, - {1095, 1}, - {1095, 3}, - {1095, 3}, - {1278, 1}, - {1278, 3}, - {1087, 1}, - {1087, 4}, - {1088, 1}, - {1088, 2}, - {1088, 1}, - {1088, 1}, - {1088, 2}, - {1088, 2}, - {1088, 1}, - {1088, 1}, - {1088, 1}, - {1088, 1}, - {1088, 1}, - {1088, 1}, - {1088, 1}, - {1088, 1}, - {1088, 1}, - {1088, 2}, - {1088, 1}, - {1088, 2}, - {1088, 1}, - {1088, 2}, - {1088, 2}, - {1088, 1}, - {1088, 1}, - {1088, 1}, - {1088, 1}, - {1088, 3}, - {1088, 2}, - {1088, 2}, - {1088, 2}, - {1088, 2}, - {1088, 2}, - {1088, 2}, - {1088, 2}, - {1088, 1}, + {1096, 1}, + {1096, 1}, + {1096, 1}, + {1096, 3}, + {1096, 3}, + {1280, 1}, + {1280, 3}, {1088, 1}, - {1230, 0}, - {1230, 1}, - {1230, 1}, - {1230, 1}, - {1257, 1}, - {1257, 3}, - {1257, 3}, - {1257, 3}, - {1257, 1}, - {1277, 7}, - {1276, 4}, + {1088, 4}, + {1089, 1}, + {1089, 2}, + {1089, 1}, + {1089, 1}, + {1089, 2}, + {1089, 2}, + {1089, 1}, + {1089, 1}, + {1089, 1}, + {1089, 1}, + {1089, 1}, + {1089, 1}, + {1089, 1}, + {1089, 1}, + {1089, 1}, + {1089, 2}, + {1089, 1}, + {1089, 2}, + {1089, 1}, + {1089, 2}, + {1089, 2}, + {1089, 1}, + {1089, 1}, + {1089, 1}, + {1089, 1}, + {1089, 3}, + {1089, 2}, + {1089, 2}, + {1089, 2}, + {1089, 2}, + {1089, 2}, + {1089, 2}, + {1089, 2}, + {1089, 1}, + {1089, 1}, + {1232, 0}, + {1232, 1}, + {1232, 1}, + {1232, 1}, + {1259, 1}, + {1259, 3}, + {1259, 3}, + {1259, 3}, + {1259, 1}, + {1279, 7}, + {1278, 4}, {980, 18}, - {1406, 0}, - {1406, 1}, - {1195, 0}, - {1195, 2}, - {1386, 0}, - {1386, 3}, - {1347, 0}, - {1347, 3}, - {1223, 0}, - {1223, 1}, - {1189, 0}, - {1189, 2}, + {1411, 0}, + {1411, 1}, + {1197, 0}, + {1197, 2}, + {1391, 0}, + {1391, 3}, + {1351, 0}, + {1351, 3}, + {1225, 0}, + {1225, 1}, + {1191, 0}, + {1191, 2}, {947, 1}, {947, 1}, - {1375, 2}, - {1375, 1}, - {1188, 3}, - {1188, 2}, - {1188, 3}, - {1188, 3}, - {1188, 4}, - {1188, 6}, + {1379, 2}, + {1379, 1}, + {1190, 3}, + {1190, 2}, + {1190, 3}, + {1190, 3}, + {1190, 4}, + {1190, 6}, {974, 1}, {974, 1}, {974, 1}, - {1071, 0}, - {1071, 3}, - {1484, 0}, - {1484, 3}, - {1401, 0}, - {1401, 3}, - {1221, 0}, - {1221, 2}, - {1403, 3}, - {1403, 1}, - {1220, 3}, {1072, 0}, - {1072, 2}, - {1402, 1}, - {1402, 3}, - {1219, 1}, - {1219, 3}, + {1072, 3}, + {1489, 0}, + {1489, 3}, + {1406, 0}, + {1406, 3}, + {1223, 0}, + {1223, 2}, + {1408, 3}, + {1408, 1}, + {1222, 3}, + {1073, 0}, + {1073, 2}, + {1407, 1}, + {1407, 3}, + {1221, 1}, + {1221, 3}, {923, 9}, {923, 8}, - {1388, 1}, - {1388, 1}, - {1388, 1}, - {1388, 1}, - {1314, 2}, - {1225, 3}, - {1309, 1}, - {1309, 1}, - {1307, 2}, - {1404, 1}, - {1404, 2}, - {1404, 1}, - {1404, 2}, - {1497, 1}, - {1497, 3}, - {1228, 6}, - {1470, 1}, - {1470, 1}, - {1470, 1}, - {1470, 1}, - {1365, 0}, - {1365, 2}, - {1365, 3}, - {1421, 0}, - {1421, 2}, - {1238, 4}, - {1214, 2}, - {1214, 3}, - {1214, 3}, - {1214, 2}, - {1213, 1}, - {1213, 2}, - {1222, 3}, + {1393, 1}, + {1393, 1}, + {1393, 1}, + {1393, 1}, + {1317, 2}, + {1227, 3}, + {1312, 1}, + {1312, 1}, + {1310, 2}, + {1409, 1}, + {1409, 2}, + {1409, 1}, + {1409, 2}, + {1502, 1}, + {1502, 3}, + {1230, 6}, + {1475, 1}, + {1475, 1}, + {1475, 1}, + {1475, 1}, + {1369, 0}, + {1369, 2}, + {1369, 3}, + {1426, 0}, + {1426, 2}, + {1240, 4}, + {1216, 2}, + {1216, 3}, + {1216, 3}, + {1216, 2}, + {1215, 1}, + {1215, 2}, {1224, 3}, - {1224, 5}, - {1224, 7}, - {1313, 3}, - {1313, 5}, - {1313, 7}, - {1169, 5}, - {1154, 6}, - {1124, 6}, - {1172, 5}, - {1152, 7}, - {1122, 6}, + {1226, 3}, + {1226, 5}, + {1226, 7}, + {1316, 3}, + {1316, 5}, + {1316, 7}, + {1171, 5}, {1156, 6}, - {1357, 0}, - {1357, 1}, - {1467, 1}, - {1467, 2}, + {1126, 6}, + {1174, 5}, + {1154, 7}, + {1124, 6}, + {1158, 6}, + {1361, 0}, + {1361, 1}, + {1472, 1}, + {1472, 2}, {1031, 3}, {1031, 3}, {1031, 3}, @@ -6791,48 +6824,48 @@ var ( {1031, 2}, {928, 1}, {928, 2}, - {928, 2}, - {1174, 4}, - {1126, 5}, - {1328, 1}, - {1328, 2}, - {1125, 1}, - {1125, 1}, - {1125, 3}, - {1125, 3}, - {1205, 8}, - {1410, 0}, - {1410, 2}, - {1409, 0}, - {1409, 3}, - {1436, 0}, - {1436, 2}, - {1435, 0}, - {1435, 2}, - {1183, 1}, - {1111, 1}, - {1111, 3}, + {928, 2}, + {1176, 4}, + {1128, 5}, + {1332, 1}, + {1332, 2}, + {1127, 1}, + {1127, 1}, + {1127, 3}, + {1127, 3}, + {1207, 8}, + {1415, 0}, + {1415, 2}, + {1414, 0}, + {1414, 3}, + {1441, 0}, + {1441, 2}, + {1440, 0}, + {1440, 2}, + {1185, 1}, + {1113, 1}, + {1113, 3}, {1030, 2}, - {1255, 6}, - {1255, 7}, - {1255, 10}, - {1255, 11}, - {1255, 6}, - {1255, 7}, - {1255, 4}, - {1255, 5}, - {1255, 6}, - {1437, 0}, - {1437, 3}, - {1423, 0}, - {1423, 1}, - {1481, 3}, - {1481, 1}, - {1295, 3}, - {1294, 0}, - {1294, 1}, - {1294, 1}, - {1294, 1}, + {1257, 6}, + {1257, 7}, + {1257, 10}, + {1257, 11}, + {1257, 6}, + {1257, 7}, + {1257, 4}, + {1257, 5}, + {1257, 6}, + {1442, 0}, + {1442, 3}, + {1428, 0}, + {1428, 1}, + {1486, 3}, + {1486, 1}, + {1297, 3}, + {1296, 0}, + {1296, 1}, + {1296, 1}, + {1296, 1}, {895, 1}, {895, 1}, {895, 1}, @@ -6848,70 +6881,70 @@ var ( {895, 1}, {895, 1}, {895, 1}, - {1442, 1}, - {1442, 1}, - {1442, 1}, - {1442, 1}, - {896, 1}, - {1443, 1}, - {1443, 3}, - {1449, 0}, - {1449, 2}, - {1260, 4}, - {1260, 5}, - {1260, 6}, {1447, 1}, {1447, 1}, + {1447, 1}, + {1447, 1}, + {896, 1}, {1448, 1}, {1448, 3}, - {1261, 1}, - {1261, 1}, - {1261, 2}, - {1261, 1}, - {1258, 1}, - {1258, 3}, - {1425, 0}, - {1425, 1}, + {1454, 0}, + {1454, 2}, + {1262, 4}, + {1262, 5}, + {1262, 6}, + {1452, 1}, + {1452, 1}, + {1453, 1}, + {1453, 3}, + {1263, 1}, + {1263, 1}, + {1263, 2}, + {1263, 1}, + {1260, 1}, + {1260, 3}, + {1430, 0}, + {1430, 1}, {891, 2}, {885, 5}, {884, 2}, + {1455, 0}, + {1455, 2}, + {1455, 1}, + {1451, 1}, + {1451, 3}, {1450, 0}, - {1450, 2}, {1450, 1}, - {1446, 1}, - {1446, 3}, - {1445, 0}, - {1445, 1}, - {1444, 2}, - {1444, 3}, - {1451, 0}, - {1451, 3}, + {1449, 2}, + {1449, 3}, + {1456, 0}, + {1456, 3}, {953, 2}, {953, 3}, {881, 4}, {886, 4}, - {1262, 4}, - {1440, 0}, - {1440, 2}, - {1440, 2}, + {1264, 4}, + {1445, 0}, + {1445, 2}, + {1445, 2}, {883, 1}, {883, 1}, - {1478, 1}, - {1478, 2}, - {1463, 1}, - {1463, 2}, - {1291, 4}, - {1280, 4}, - {1181, 0}, - {1181, 2}, + {1483, 1}, + {1483, 2}, + {1468, 1}, + {1468, 2}, + {1293, 4}, + {1282, 4}, + {1183, 0}, + {1183, 2}, {894, 6}, {893, 5}, {897, 1}, {882, 6}, {882, 6}, {888, 4}, - {1259, 0}, - {1259, 1}, + {1261, 0}, + {1261, 1}, {889, 4}, {887, 2}, {890, 2}, @@ -6927,6034 +6960,6068 @@ var ( {892, 1}, {892, 1}, {892, 1}, - {1153, 8}, - {1170, 4}, - {1133, 3}, - {1344, 0}, - {1344, 1}, - {1344, 1}, - {1367, 1}, - {1367, 2}, - {1367, 3}, + {1155, 8}, + {1172, 4}, + {1135, 3}, + {1348, 0}, + {1348, 1}, + {1348, 1}, + {1371, 1}, + {1371, 2}, + {1371, 3}, {1057, 3}, {1057, 3}, {1057, 3}, {1057, 5}, - {1345, 2}, - {1345, 2}, - {1345, 2}, - {1345, 2}, - {1345, 2}, - {1116, 4}, - {1452, 1}, - {1452, 2}, - {1452, 3}, - {1089, 3}, - {1089, 3}, - {1089, 3}, - {1089, 1}, + {1349, 2}, + {1349, 2}, + {1349, 2}, + {1349, 2}, + {1349, 2}, + {1118, 4}, + {1457, 1}, + {1457, 2}, + {1457, 3}, {1090, 3}, {1090, 3}, - {1090, 5}, - {1171, 4}, + {1090, 3}, + {1090, 1}, + {1091, 3}, + {1091, 3}, + {1091, 5}, + {1173, 4}, } yyXErrors = map[yyXError]string{} - yyParseTab = [4994][]uint16{ + yyParseTab = [5022][]uint16{ // 0 - {2354, 2354, 3: 2903, 58: 2926, 93: 2905, 2908, 96: 2938, 2906, 3057, 112: 2940, 126: 3072, 141: 3064, 170: 3074, 199: 2923, 206: 2921, 234: 2934, 261: 2929, 265: 2911, 270: 2959, 276: 2925, 279: 2901, 287: 2958, 3067, 290: 2907, 295: 3073, 307: 2937, 317: 2935, 319: 2902, 321: 2941, 343: 2927, 347: 2930, 354: 2939, 359: 2924, 372: 2916, 545: 2949, 2948, 562: 2947, 566: 2933, 571: 2957, 577: 3066, 590: 3060, 592: 2919, 598: 2917, 601: 2932, 622: 2946, 670: 2942, 724: 3071, 727: 2904, 3059, 738: 2899, 741: 2910, 754: 2909, 781: 2956, 3068, 2900, 790: 2953, 818: 2912, 821: 2955, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 3037, 3036, 837: 3058, 2913, 3018, 3030, 3046, 2918, 850: 2914, 854: 2976, 860: 2970, 2974, 3027, 3038, 872: 2978, 2920, 876: 3045, 3047, 912: 2922, 920: 2963, 923: 3017, 3063, 951: 3070, 962: 2971, 975: 3061, 980: 3021, 983: 3032, 985: 3035, 2928, 1050: 2983, 1107: 3065, 1116: 2991, 2961, 1119: 2962, 2965, 1122: 2968, 2966, 2969, 1126: 2967, 1128: 2964, 1130: 2972, 2973, 1133: 2979, 2931, 3016, 3055, 1138: 2980, 1149: 2987, 2981, 2982, 2988, 2989, 2990, 2986, 2992, 2993, 1159: 2985, 2984, 1162: 2975, 2936, 1165: 2994, 3008, 2995, 2996, 2999, 2998, 3004, 3003, 3005, 3000, 3006, 3007, 2997, 3002, 3001, 1182: 2960, 1185: 2977, 1190: 3012, 3010, 1193: 3011, 3009, 1198: 3014, 3015, 3013, 1204: 3052, 3019, 1213: 3069, 3020, 1222: 3022, 1224: 3023, 3049, 1228: 3053, 1238: 3054, 1255: 3025, 3026, 1264: 3031, 1267: 3028, 3029, 1274: 3051, 3062, 3034, 3033, 1283: 3039, 1285: 3041, 3040, 1288: 3043, 1290: 3050, 1293: 3042, 1299: 3056, 1312: 3044, 3024, 3048, 1483: 2897, 1486: 2898}, - {1: 2896}, - {7888, 2895}, - {18: 7841, 51: 7840, 229: 7837, 255: 7842, 328: 7838, 563: 4743, 605: 7839, 622: 2149, 658: 6751, 946: 7836, 976: 4742}, - {229: 7821, 622: 7820}, + {2360, 2360, 3: 2922, 59: 2945, 95: 2924, 2927, 98: 2957, 2925, 3076, 119: 2959, 128: 3091, 143: 3083, 171: 3093, 200: 2942, 207: 2940, 234: 2953, 262: 2948, 266: 2930, 271: 2978, 277: 2944, 280: 2920, 288: 2977, 3086, 291: 2926, 296: 3092, 308: 2956, 318: 2954, 320: 2921, 322: 2960, 345: 2946, 349: 2949, 356: 2958, 361: 2943, 374: 2935, 545: 2968, 2967, 562: 2966, 566: 2952, 571: 2976, 577: 3085, 590: 3079, 592: 2938, 598: 2936, 601: 2951, 622: 2965, 662: 2961, 724: 3090, 726: 3078, 728: 2923, 738: 2918, 741: 2929, 754: 2928, 781: 2975, 3087, 2919, 790: 2972, 818: 2931, 821: 2974, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 3056, 3055, 837: 3077, 2932, 3037, 3049, 3065, 2937, 850: 2933, 854: 2995, 860: 2989, 2993, 3046, 3057, 872: 2997, 2939, 876: 3064, 3066, 912: 2941, 920: 2982, 923: 3036, 3082, 951: 3089, 962: 2990, 975: 3080, 980: 3040, 983: 3051, 985: 3054, 2947, 1050: 3002, 1109: 3084, 1118: 3010, 2980, 1121: 2981, 2984, 1124: 2987, 2985, 2988, 1128: 2986, 1130: 2983, 1132: 2991, 2992, 1135: 2998, 2950, 3035, 3074, 1140: 2999, 1151: 3006, 3000, 3001, 3007, 3008, 3009, 3005, 3011, 3012, 1161: 3004, 3003, 1164: 2994, 2955, 1167: 3013, 3027, 3014, 3015, 3018, 3017, 3023, 3022, 3024, 3019, 3025, 3026, 3016, 3021, 3020, 1184: 2979, 1187: 2996, 1192: 3031, 3029, 1195: 3030, 3028, 1200: 3033, 3034, 3032, 1206: 3071, 3038, 1215: 3088, 3039, 1224: 3041, 1226: 3042, 3068, 1230: 3072, 1240: 3073, 1257: 3044, 3045, 1266: 3050, 1269: 3047, 3048, 1276: 3070, 3081, 3053, 3052, 1285: 3058, 1287: 3060, 3059, 1290: 3062, 1292: 3069, 1295: 3061, 1301: 3075, 1315: 3063, 3043, 3067, 1488: 2916, 1491: 2917}, + {1: 2915}, + {7935, 2914}, + {18: 7888, 51: 7887, 229: 7884, 255: 7889, 330: 7885, 563: 4762, 605: 7886, 622: 2155, 659: 6792, 946: 7883, 976: 4761}, + {229: 7868, 622: 7867}, // 5 - {622: 7814}, - {390: 7792, 622: 7793, 658: 6751, 946: 7794}, - {441: 7773, 560: 7774, 622: 2698, 1480: 7772}, - {167: 5329, 326: 771, 622: 771, 910: 5328, 925: 7726}, - {2668, 2668, 427: 7725, 434: 7724}, + {622: 7861}, + {391: 7839, 622: 7840, 659: 6792, 946: 7841}, + {441: 7820, 560: 7821, 622: 2713, 1485: 7819}, + {58: 5355, 327: 775, 622: 775, 910: 5354, 925: 7773}, + {2683, 2683, 427: 7772, 434: 7771}, // 10 - {465: 7713}, - {547: 7712}, - {2637, 2637, 95: 6665, 581: 6663, 912: 6664, 1146: 7711}, - {18: 2405, 51: 7236, 111: 2405, 142: 2405, 191: 2405, 195: 7234, 213: 801, 217: 7157, 228: 6250, 7233, 255: 7237, 6919, 283: 7225, 582: 7232, 622: 2373, 658: 6751, 672: 2405, 719: 7227, 724: 2512, 761: 7229, 946: 7230, 982: 7238, 1064: 7235, 1081: 6249, 1390: 7226, 1429: 7231, 1479: 7228}, - {18: 7163, 51: 7164, 142: 7158, 164: 2373, 195: 7160, 213: 801, 217: 7157, 7155, 228: 6250, 7159, 234: 1250, 7161, 255: 7165, 6919, 283: 7152, 622: 2373, 658: 6751, 724: 7154, 946: 7153, 982: 7166, 1064: 7162, 1081: 7156}, + {465: 7760}, + {547: 7759}, + {2652, 2652, 97: 6706, 581: 6704, 912: 6705, 1148: 7758}, + {18: 2411, 51: 7282, 94: 7198, 108: 2411, 144: 2411, 192: 2411, 196: 7280, 214: 805, 228: 6291, 7279, 255: 7283, 6960, 284: 7271, 582: 7278, 622: 2379, 659: 6792, 672: 2411, 718: 7273, 724: 2525, 761: 7275, 946: 7276, 982: 7284, 1065: 7281, 1082: 6290, 1395: 7272, 1434: 7277, 1484: 7274}, + {18: 7204, 51: 7205, 94: 7198, 144: 7199, 166: 2379, 196: 7201, 214: 805, 218: 7196, 228: 6291, 7200, 234: 1254, 7202, 255: 7206, 6960, 284: 7193, 622: 2379, 659: 6792, 724: 7195, 946: 7194, 982: 7207, 1065: 7203, 1082: 7197}, // 15 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3898, 874: 7151}, - {2: 1068, 1068, 1068, 1068, 1068, 1068, 1068, 10: 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 53: 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 563: 1068, 576: 1068, 847: 1068, 849: 1068, 851: 1068, 855: 6047, 959: 6048, 1009: 7139}, - {2382, 2382}, - {2381, 2381}, - {545: 2949, 562: 2947, 622: 2946, 670: 2942, 728: 3059, 790: 3910, 818: 2912, 821: 3909, 2943, 2944, 2945, 2954, 2952, 3911, 3912, 837: 5788, 5786, 850: 5787}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3917, 874: 7192}, + {2: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 10: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 53: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 563: 1072, 576: 1072, 847: 1072, 849: 1072, 851: 1072, 855: 6088, 959: 6089, 1009: 7180}, + {2388, 2388}, + {2387, 2387}, + {545: 2968, 562: 2966, 622: 2965, 662: 2961, 726: 3078, 790: 3929, 818: 2931, 821: 3928, 2962, 2963, 2964, 2973, 2971, 3930, 3931, 837: 5829, 5827, 850: 5828}, // 20 - {93: 2905, 2908, 96: 2938, 2906, 126: 7112, 206: 2921, 242: 7111, 545: 2949, 2948, 562: 2947, 566: 2933, 571: 7115, 601: 2932, 622: 2946, 670: 2942, 727: 2904, 3059, 790: 7113, 818: 2912, 821: 7114, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 7121, 7120, 837: 3058, 2913, 7118, 7119, 7117, 850: 2914, 854: 7116, 860: 7129, 7124, 7127, 7128, 912: 2922, 924: 7130, 962: 7123, 980: 7122, 983: 7126, 985: 7125, 1037: 7110}, - {2: 2349, 2349, 2349, 2349, 2349, 2349, 2349, 10: 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 53: 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 2349, 545: 2349, 2349, 562: 2349, 566: 2349, 572: 2349, 575: 2349, 601: 2349, 622: 2349, 670: 2349, 727: 2349, 2349, 738: 2349, 818: 2349}, - {2: 2348, 2348, 2348, 2348, 2348, 2348, 2348, 10: 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 53: 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 2348, 545: 2348, 2348, 562: 2348, 566: 2348, 572: 2348, 575: 2348, 601: 2348, 622: 2348, 670: 2348, 727: 2348, 2348, 738: 2348, 818: 2348}, - {2: 2347, 2347, 2347, 2347, 2347, 2347, 2347, 10: 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 53: 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 2347, 545: 2347, 2347, 562: 2347, 566: 2347, 572: 2347, 575: 2347, 601: 2347, 622: 2347, 670: 2347, 727: 2347, 2347, 738: 2347, 818: 2347}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 7080, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 7078, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 2949, 2948, 562: 2947, 566: 2933, 572: 7077, 575: 3984, 601: 2932, 622: 2946, 670: 2942, 727: 7079, 3059, 738: 4713, 786: 3983, 3092, 3093, 3091, 4714, 818: 2912, 7075, 821: 4715, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 4721, 4720, 837: 3058, 2913, 4718, 4719, 4717, 850: 2914, 854: 4716, 920: 4722, 923: 4723, 937: 7076}, + {95: 2924, 2927, 98: 2957, 2925, 128: 7153, 207: 2940, 242: 7152, 545: 2968, 2967, 562: 2966, 566: 2952, 571: 7156, 601: 2951, 622: 2965, 662: 2961, 726: 3078, 728: 2923, 790: 7154, 818: 2931, 821: 7155, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 7162, 7161, 837: 3077, 2932, 7159, 7160, 7158, 850: 2933, 854: 7157, 860: 7170, 7165, 7168, 7169, 912: 2941, 924: 7171, 962: 7164, 980: 7163, 983: 7167, 985: 7166, 1037: 7151}, + {2: 2355, 2355, 2355, 2355, 2355, 2355, 2355, 10: 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 53: 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 545: 2355, 2355, 562: 2355, 566: 2355, 572: 2355, 575: 2355, 601: 2355, 622: 2355, 662: 2355, 726: 2355, 728: 2355, 738: 2355, 818: 2355}, + {2: 2354, 2354, 2354, 2354, 2354, 2354, 2354, 10: 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 53: 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 2354, 545: 2354, 2354, 562: 2354, 566: 2354, 572: 2354, 575: 2354, 601: 2354, 622: 2354, 662: 2354, 726: 2354, 728: 2354, 738: 2354, 818: 2354}, + {2: 2353, 2353, 2353, 2353, 2353, 2353, 2353, 10: 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 53: 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 2353, 545: 2353, 2353, 562: 2353, 566: 2353, 572: 2353, 575: 2353, 601: 2353, 622: 2353, 662: 2353, 726: 2353, 728: 2353, 738: 2353, 818: 2353}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 7121, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 7119, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 2968, 2967, 562: 2966, 566: 2952, 572: 7118, 575: 4003, 601: 2951, 622: 2965, 662: 2961, 726: 3078, 728: 7120, 738: 4732, 786: 4002, 3111, 3112, 3110, 4733, 818: 2931, 7116, 821: 4734, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 4740, 4739, 837: 3077, 2932, 4737, 4738, 4736, 850: 2933, 854: 4735, 920: 4741, 923: 4742, 937: 7117}, // 25 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 7074, 3092, 3093, 3091}, - {206: 7072}, - {168: 7065, 622: 6755, 658: 6751, 946: 6754, 1132: 7064}, - {199: 7062}, - {199: 7059}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 7115, 3111, 3112, 3110}, + {207: 7113}, + {169: 7106, 622: 6796, 659: 6792, 946: 6795, 1134: 7105}, + {200: 7103}, + {200: 7100}, // 30 - {199: 7057}, - {199: 7052}, - {16: 4485, 18: 6880, 30: 6910, 6909, 101: 6889, 140: 794, 6881, 148: 801, 164: 794, 166: 794, 189: 801, 199: 6866, 217: 6918, 227: 6921, 251: 6878, 256: 6919, 259: 801, 271: 6920, 277: 6904, 794, 292: 6867, 313: 6901, 325: 6894, 342: 6900, 355: 6922, 357: 6906, 377: 6893, 382: 6916, 384: 6898, 6879, 391: 6896, 6914, 394: 6887, 401: 6885, 6903, 406: 6891, 409: 6902, 6871, 6913, 6883, 420: 6872, 437: 6877, 6876, 443: 6917, 450: 6905, 452: 6911, 6908, 6912, 6907, 466: 6897, 567: 4486, 600: 6873, 622: 6870, 671: 6892, 723: 4484, 6882, 727: 6915, 754: 6869, 868: 6888, 982: 6899, 1064: 6895, 1070: 6884, 1161: 6886, 1237: 6875, 1456: 6874, 1471: 6890, 1477: 6868}, - {141: 6861, 292: 6860}, - {435: 6753, 622: 6755, 658: 6751, 946: 6754, 1132: 6752}, + {200: 7098}, + {200: 7093}, + {16: 4504, 18: 6921, 30: 6951, 6950, 94: 6959, 103: 6930, 142: 798, 6922, 150: 805, 166: 798, 168: 798, 190: 805, 200: 6907, 227: 6962, 251: 6919, 256: 6960, 260: 805, 272: 6961, 278: 6945, 798, 293: 6908, 314: 6942, 326: 6935, 328: 6924, 344: 6941, 357: 6963, 359: 6947, 378: 6934, 383: 6957, 385: 6939, 6920, 392: 6937, 6955, 395: 6928, 402: 6926, 6944, 407: 6932, 410: 6943, 6912, 6954, 420: 6913, 437: 6918, 6917, 443: 6958, 450: 6946, 452: 6952, 6949, 6953, 6948, 466: 6938, 567: 4505, 600: 6914, 622: 6911, 671: 6933, 723: 4503, 6923, 728: 6956, 754: 6910, 868: 6929, 982: 6940, 1065: 6936, 1071: 6925, 1163: 6927, 1239: 6916, 1461: 6915, 1476: 6931, 1482: 6909}, + {143: 6902, 293: 6901}, + {435: 6794, 622: 6796, 659: 6792, 946: 6795, 1134: 6793}, // 35 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 6740, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6742, 3092, 3093, 3091, 1441: 6741}, - {2: 1068, 1068, 1068, 1068, 1068, 1068, 1068, 10: 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 53: 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 563: 1068, 574: 1068, 1068, 847: 1068, 849: 1068, 851: 1068, 855: 6047, 959: 6048, 1009: 6727}, - {2: 1068, 1068, 1068, 1068, 1068, 1068, 1068, 10: 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 53: 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 574: 1068, 1068, 847: 1068, 849: 1068, 851: 1068, 855: 6047, 959: 6048, 1009: 6691}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6686, 3092, 3093, 3091}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6680, 3092, 3093, 3091}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 6781, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6783, 3111, 3112, 3110, 1446: 6782}, + {2: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 10: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 53: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 563: 1072, 574: 1072, 1072, 847: 1072, 849: 1072, 851: 1072, 855: 6088, 959: 6089, 1009: 6768}, + {2: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 10: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 53: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 574: 1072, 1072, 847: 1072, 849: 1072, 851: 1072, 855: 6088, 959: 6089, 1009: 6732}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6727, 3111, 3112, 3110}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6721, 3111, 3112, 3110}, // 40 - {234: 6678}, - {234: 1251}, - {1249, 1249, 95: 6665, 581: 6663, 726: 6662, 912: 6664, 1146: 6661}, - {1238, 1238}, - {1237, 1237}, + {234: 6719}, + {234: 1255}, + {1253, 1253, 97: 6706, 581: 6704, 727: 6703, 912: 6705, 1148: 6702}, + {1242, 1242}, + {1241, 1241}, // 45 - {547: 6660}, - {2: 1073, 1073, 1073, 1073, 1073, 1073, 1073, 10: 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 53: 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 6630, 6636, 6637, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 545: 1073, 547: 1073, 1073, 1073, 1073, 554: 1073, 1073, 557: 1073, 1073, 1073, 561: 1073, 1073, 566: 1073, 1073, 573: 1073, 575: 1073, 588: 6633, 593: 1073, 600: 1073, 1073, 633: 1073, 640: 1073, 642: 1073, 1073, 1073, 1073, 650: 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 671: 1073, 673: 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 725: 1073, 730: 4233, 843: 4231, 4232, 847: 6050, 849: 6052, 851: 6051, 855: 6047, 864: 6629, 6632, 6628, 901: 6548, 903: 6626, 952: 6627, 959: 6625, 1281: 6635, 6631, 1465: 6624, 6634}, - {432, 432, 52: 432, 544: 432, 546: 432, 553: 432, 556: 432, 564: 432, 432, 568: 432, 570: 432, 572: 432, 574: 432, 576: 6599, 432, 4729, 432, 586: 432, 904: 4730, 6600, 1380: 6598}, - {1063, 1063, 52: 1063, 544: 1063, 546: 1063, 553: 1063, 556: 1063, 564: 1063, 1063, 568: 1063, 570: 1063, 572: 1063, 574: 1063, 577: 1063, 579: 1063, 586: 6586, 1065: 6588, 1096: 6587}, - {1519, 1519, 52: 1519, 544: 1519, 546: 1519, 553: 1519, 556: 1519, 564: 1519, 1519, 568: 1519, 570: 1519, 572: 1519, 574: 1519, 577: 1519, 579: 3913, 857: 3967, 926: 6582}, + {547: 6701}, + {2: 1077, 1077, 1077, 1077, 1077, 1077, 1077, 10: 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 53: 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 6671, 6677, 6678, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 545: 1077, 547: 1077, 1077, 1077, 1077, 554: 1077, 1077, 557: 1077, 1077, 1077, 561: 1077, 1077, 566: 1077, 1077, 573: 1077, 575: 1077, 588: 6674, 593: 1077, 600: 1077, 1077, 633: 1077, 640: 1077, 1077, 643: 1077, 1077, 1077, 650: 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 659: 1077, 1077, 1077, 663: 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 673: 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 711: 1077, 1077, 1077, 1077, 1077, 1077, 725: 1077, 730: 4252, 843: 4250, 4251, 847: 6091, 849: 6093, 851: 6092, 855: 6088, 864: 6670, 6673, 6669, 901: 6589, 903: 6667, 952: 6668, 959: 6666, 1283: 6676, 6672, 1470: 6665, 6675}, + {436, 436, 52: 436, 544: 436, 546: 436, 553: 436, 556: 436, 564: 436, 436, 568: 436, 570: 436, 572: 436, 574: 436, 576: 6640, 436, 4748, 436, 586: 436, 904: 4749, 6641, 1384: 6639}, + {1067, 1067, 52: 1067, 544: 1067, 546: 1067, 553: 1067, 556: 1067, 564: 1067, 1067, 568: 1067, 570: 1067, 572: 1067, 574: 1067, 577: 1067, 579: 1067, 586: 6627, 1066: 6629, 1097: 6628}, + {1523, 1523, 52: 1523, 544: 1523, 546: 1523, 553: 1523, 556: 1523, 564: 1523, 1523, 568: 1523, 570: 1523, 572: 1523, 574: 1523, 577: 1523, 579: 3932, 857: 3986, 926: 6623}, // 50 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 6577}, - {653: 3948, 1030: 3947, 1111: 3946}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6564, 3092, 3093, 3091, 1049: 6563, 1322: 6561, 1453: 6562}, - {545: 2949, 2948, 562: 2947, 622: 2946, 670: 2942, 790: 6560, 821: 3903, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 3902, 3905, 3904}, - {1044, 1044, 52: 1044, 544: 1044, 546: 1044, 556: 1044}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 6618}, + {653: 3967, 1030: 3966, 1113: 3965}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6605, 3111, 3112, 3110, 1049: 6604, 1326: 6602, 1458: 6603}, + {545: 2968, 2967, 562: 2966, 622: 2965, 662: 2961, 790: 6601, 821: 3922, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 3921, 3924, 3923}, + {1048, 1048, 52: 1048, 544: 1048, 546: 1048, 556: 1048}, // 55 - {1043, 1043, 52: 1043, 544: 1043, 546: 1043, 556: 1043}, - {553: 6545, 564: 6546, 6547, 1468: 6544}, - {685, 685, 553: 1029, 564: 1029, 1029, 568: 3915, 570: 3914, 579: 3913, 857: 3916, 3917}, - {553: 1032, 564: 1032, 1032}, - {687, 687, 553: 1030, 564: 1030, 1030}, + {1047, 1047, 52: 1047, 544: 1047, 546: 1047, 556: 1047}, + {553: 6586, 564: 6587, 6588, 1473: 6585}, + {689, 689, 553: 1033, 564: 1033, 1033, 568: 3934, 570: 3933, 579: 3932, 857: 3935, 3936}, + {553: 1036, 564: 1036, 1036}, + {691, 691, 553: 1034, 564: 1034, 1034}, // 60 - {313: 6529, 342: 6528}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 6366, 6361, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 6367, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 6364, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 6368, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 6371, 3111, 3112, 3144, 6363, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 6369, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 6362, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 6372, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 6370, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 6365, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 549: 6374, 567: 4486, 643: 6378, 666: 6377, 723: 4484, 786: 6375, 3092, 3093, 3091, 868: 6379, 942: 6376, 1113: 6380, 1316: 6373}, - {17: 6218, 58: 6221, 261: 6219, 270: 6225, 276: 6220, 6223, 279: 6216, 6224, 296: 6226, 346: 6222, 388: 6217, 403: 6227, 469: 6229, 571: 6228, 717: 6215, 986: 6214}, - {22: 771, 148: 771, 164: 771, 167: 5329, 771, 251: 771, 257: 771, 268: 771, 285: 771, 299: 771, 320: 771, 324: 771, 600: 771, 622: 771, 910: 5328, 925: 6189}, - {764, 764}, + {314: 6570, 344: 6569}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 6407, 6402, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 6408, 53: 3116, 3336, 3466, 3467, 3770, 6405, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 6404, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 6409, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 6412, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 6410, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 6403, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 6413, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 6411, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 6406, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 549: 6415, 567: 4505, 641: 6419, 668: 6418, 723: 4503, 786: 6416, 3111, 3112, 3110, 868: 6420, 942: 6417, 1115: 6421, 1320: 6414}, + {17: 6259, 59: 6262, 262: 6260, 271: 6266, 277: 6261, 6264, 280: 6257, 6265, 297: 6267, 348: 6263, 389: 6258, 404: 6268, 469: 6270, 571: 6269, 717: 6256, 986: 6255}, + {22: 775, 58: 5355, 150: 775, 166: 775, 169: 775, 251: 775, 257: 775, 269: 775, 286: 775, 300: 775, 321: 775, 325: 775, 600: 775, 622: 775, 910: 5354, 925: 6230}, + {768, 768}, // 65 + {767, 767}, + {766, 766}, + {765, 765}, + {764, 764}, {763, 763}, + // 70 {762, 762}, {761, 761}, {760, 760}, {759, 759}, - // 70 {758, 758}, + // 75 {757, 757}, {756, 756}, {755, 755}, {754, 754}, - // 75 {753, 753}, + // 80 {752, 752}, {751, 751}, {750, 750}, {749, 749}, - // 80 {748, 748}, + // 85 {747, 747}, {746, 746}, {745, 745}, {744, 744}, - // 85 {743, 743}, + // 90 {742, 742}, {741, 741}, {740, 740}, {739, 739}, - // 90 {738, 738}, + // 95 {737, 737}, {736, 736}, {735, 735}, {734, 734}, - // 95 {733, 733}, + // 100 {732, 732}, {731, 731}, {730, 730}, {729, 729}, - // 100 {728, 728}, + // 105 {727, 727}, {726, 726}, {725, 725}, {724, 724}, - // 105 {723, 723}, + // 110 {722, 722}, {721, 721}, {720, 720}, {719, 719}, - // 110 {718, 718}, + // 115 {717, 717}, {716, 716}, {715, 715}, {714, 714}, - // 115 {713, 713}, + // 120 {712, 712}, {711, 711}, {710, 710}, {709, 709}, - // 120 {708, 708}, + // 125 {707, 707}, {706, 706}, {705, 705}, {704, 704}, - // 125 {703, 703}, + // 130 {702, 702}, {701, 701}, {700, 700}, {699, 699}, - // 130 {698, 698}, + // 135 {697, 697}, {696, 696}, {695, 695}, {694, 694}, - // 135 {693, 693}, + // 140 {692, 692}, - {691, 691}, {690, 690}, - {689, 689}, - // 140 {688, 688}, + {687, 687}, {686, 686}, + // 145 + {685, 685}, {684, 684}, {683, 683}, {682, 682}, - // 145 {681, 681}, + // 150 {680, 680}, {679, 679}, {678, 678}, {677, 677}, - // 150 {676, 676}, + // 155 {675, 675}, {674, 674}, {673, 673}, {672, 672}, - // 155 {671, 671}, - {670, 670}, - {669, 669}, - {668, 668}, - {667, 667}, // 160 - {640, 640}, - {2: 583, 583, 583, 583, 583, 583, 583, 10: 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 53: 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 575: 583, 622: 6186, 1424: 6187}, - {438, 438, 556: 438}, - {2: 1068, 1068, 1068, 1068, 1068, 1068, 1068, 10: 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 53: 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 545: 1068, 563: 1068, 575: 1068, 657: 1068, 847: 1068, 849: 1068, 851: 1068, 855: 6047, 959: 6048, 1009: 6049}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6045, 3092, 3093, 3091, 922: 6046}, + {644, 644}, + {2: 587, 587, 587, 587, 587, 587, 587, 10: 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, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 587, 53: 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 575: 587, 622: 6227, 1429: 6228}, + {442, 442, 556: 442}, + {2: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 10: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 53: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 545: 1072, 563: 1072, 575: 1072, 657: 1072, 847: 1072, 849: 1072, 851: 1072, 855: 6088, 959: 6089, 1009: 6090}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6086, 3111, 3112, 3110, 922: 6087}, // 165 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 5888, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 5890, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 5896, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 5892, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 5889, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 5897, 3270, 3531, 5891, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 5894, 5998, 3177, 3424, 5895, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 5893, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 5899, 577: 5922, 601: 5916, 670: 5905, 721: 5920, 724: 5915, 728: 5918, 730: 5909, 738: 5910, 741: 5914, 754: 5911, 786: 3793, 3092, 3093, 3091, 818: 5913, 820: 5898, 913: 5900, 924: 5904, 975: 5919, 986: 5917, 1060: 5901, 1087: 5902, 5908, 1094: 5903, 5906, 1105: 5912, 1109: 5921, 1278: 5999}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 5888, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 5890, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 5896, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 5892, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 5889, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 5897, 3270, 3531, 5891, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 5894, 3176, 3177, 3424, 5895, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 5893, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 5899, 577: 5922, 601: 5916, 670: 5905, 721: 5920, 724: 5915, 728: 5918, 730: 5909, 738: 5910, 741: 5914, 754: 5911, 786: 3793, 3092, 3093, 3091, 818: 5913, 820: 5898, 913: 5900, 924: 5904, 975: 5919, 986: 5917, 1060: 5901, 1087: 5902, 5908, 1094: 5903, 5906, 1105: 5912, 1109: 5921, 1278: 5907}, - {23: 5860, 235: 5861}, - {574: 5819}, - {164: 5790, 235: 5811, 622: 5791, 1309: 5810}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 5929, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 5931, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 5937, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 5933, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 5930, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 5938, 3289, 3550, 5932, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 5935, 6039, 3196, 3443, 5936, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 5934, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 5940, 577: 5963, 601: 5957, 662: 5946, 720: 5961, 724: 5956, 726: 5959, 730: 5950, 738: 5951, 741: 5955, 754: 5952, 786: 3812, 3111, 3112, 3110, 818: 5954, 820: 5939, 913: 5941, 924: 5945, 975: 5960, 986: 5958, 1060: 5942, 1088: 5943, 5949, 1095: 5944, 5947, 1107: 5953, 1111: 5962, 1280: 6040}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 5929, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 5931, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 5937, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 5933, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 5930, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 5938, 3289, 3550, 5932, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 5935, 3195, 3196, 3443, 5936, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 5934, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 5940, 577: 5963, 601: 5957, 662: 5946, 720: 5961, 724: 5956, 726: 5959, 730: 5950, 738: 5951, 741: 5955, 754: 5952, 786: 3812, 3111, 3112, 3110, 818: 5954, 820: 5939, 913: 5941, 924: 5945, 975: 5960, 986: 5958, 1060: 5942, 1088: 5943, 5949, 1095: 5944, 5947, 1107: 5953, 1111: 5962, 1280: 5948}, + {23: 5901, 235: 5902}, + {574: 5860}, + {166: 5831, 235: 5852, 622: 5832, 1312: 5851}, // 170 - {164: 5790, 235: 5792, 622: 5791, 1309: 5789}, - {544: 5772, 570: 211, 1421: 5771}, - {164: 771, 167: 5329, 622: 771, 910: 5328, 925: 5766}, - {28: 5761, 57: 5281, 170: 5762, 545: 5759, 566: 5282, 573: 3078, 814: 5760, 1016: 5763}, - {28: 204, 57: 204, 170: 204, 285: 5758, 545: 204, 566: 204, 573: 204}, + {166: 5831, 235: 5833, 622: 5832, 1312: 5830}, + {544: 5813, 570: 211, 1426: 5812}, + {58: 5355, 166: 775, 622: 775, 910: 5354, 925: 5807}, + {28: 5802, 57: 5300, 171: 5803, 545: 5800, 566: 5301, 573: 3097, 814: 5801, 1016: 5804}, + {28: 204, 57: 204, 171: 204, 286: 5799, 545: 204, 566: 204, 573: 204}, // 175 - {378: 5741}, - {442: 4695}, - {51: 4669}, - {144: 3075}, - {2: 3077, 785: 3076}, + {379: 5782}, + {442: 4714}, + {51: 4688}, + {146: 3094}, + {2: 3096, 785: 3095}, // 180 - {51: 3082, 102: 3083, 126: 3086, 672: 3085, 1089: 3081, 3084, 1452: 3080}, - {573: 3078, 814: 3079}, - {2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 15: 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 60: 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 103: 2255, 2255, 2255, 107: 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 127: 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 143: 2255, 147: 2255, 149: 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 174: 2255, 2255, 2255, 2255, 224: 2255, 232: 2255, 245: 2255, 250: 2255, 274: 2255, 314: 2255, 544: 2255, 2255, 2255, 549: 2255, 551: 2255, 2255, 2255, 556: 2255, 560: 2255, 562: 2255, 2255, 2255, 2255, 2255, 2255, 2255, 570: 2255, 2255, 2255, 574: 2255, 577: 2255, 2255, 580: 2255, 590: 2255, 592: 2255, 2255, 598: 2255, 601: 2255, 2255, 622: 2255, 633: 2255, 640: 2255, 653: 2255, 670: 2255, 723: 2255, 2255, 727: 2255, 2255, 735: 2255, 2255, 818: 2255, 842: 2255, 845: 2255, 852: 2255, 2255}, + {51: 3101, 104: 3102, 128: 3105, 672: 3104, 1090: 3100, 3103, 1457: 3099}, + {573: 3097, 814: 3098}, + {2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 15: 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 61: 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 105: 2261, 2261, 2261, 2261, 110: 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 129: 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 145: 2261, 149: 2261, 151: 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 175: 2261, 2261, 2261, 2261, 224: 2261, 232: 2261, 245: 2261, 250: 2261, 275: 2261, 315: 2261, 544: 2261, 2261, 2261, 549: 2261, 551: 2261, 2261, 2261, 556: 2261, 560: 2261, 562: 2261, 2261, 2261, 2261, 2261, 2261, 2261, 570: 2261, 2261, 2261, 574: 2261, 577: 2261, 2261, 580: 2261, 590: 2261, 592: 2261, 2261, 598: 2261, 601: 2261, 2261, 622: 2261, 633: 2261, 640: 2261, 653: 2261, 662: 2261, 723: 2261, 2261, 726: 2261, 728: 2261, 735: 2261, 2261, 818: 2261, 842: 2261, 845: 2261, 852: 2261, 2261}, {1, 1}, - {12, 12, 9: 4667, 51: 3082, 102: 3083, 126: 3086, 672: 3085, 1089: 4666, 3084}, + {12, 12, 9: 4686, 51: 3101, 104: 3102, 128: 3105, 672: 3104, 1090: 4685, 3103}, // 185 - {11, 11, 9: 11, 51: 11, 102: 11, 126: 11, 672: 11}, - {586: 4661}, - {239: 2356, 241: 2356, 569: 4655, 817: 4656, 951: 2356}, - {5, 5, 9: 5, 51: 5, 102: 5, 126: 5, 672: 5}, - {209: 4647, 230: 4646}, + {11, 11, 9: 11, 51: 11, 104: 11, 128: 11, 672: 11}, + {586: 4680}, + {239: 2362, 241: 2362, 569: 4674, 817: 4675, 951: 2362}, + {5, 5, 9: 5, 51: 5, 104: 5, 128: 5, 672: 5}, + {210: 4666, 230: 4665}, // 190 - {230: 3087}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3671, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3647, 3652, 3734, 3651, 3648}, - {1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 4643, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 546: 1816, 1816, 1816, 550: 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 563: 1816, 1816, 1816, 568: 1816, 1816, 1816, 1816, 1816, 574: 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 594: 1816, 1816, 1816, 1816, 1816, 1816, 602: 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 623: 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 634: 1816, 1816, 1816, 1816, 1816, 1816, 641: 1816, 646: 1816, 1816, 1816, 1816, 672: 1816, 718: 1816, 729: 1816, 733: 1816, 1816}, - {1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 4640, 1815, 1815, 1815, 550: 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 563: 1815, 1815, 1815, 568: 1815, 1815, 1815, 1815, 1815, 574: 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 594: 1815, 1815, 1815, 1815, 1815, 1815, 602: 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 623: 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 634: 1815, 1815, 1815, 1815, 1815, 1815, 641: 1815, 646: 1815, 1815, 1815, 1815, 672: 1815, 718: 1815, 729: 1815, 733: 1815, 1815}, - {2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 4637, 2124, 2124, 2124, 550: 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 563: 2124, 2124, 2124, 568: 2124, 2124, 2124, 2124, 2124, 574: 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 594: 2124, 2124, 2124, 2124, 2124, 2124, 602: 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 623: 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 634: 2124, 2124, 2124, 2124, 2124, 2124, 641: 2124, 646: 2124, 2124, 2124, 2124, 672: 2124, 718: 2124, 729: 2124, 733: 2124, 2124}, + {230: 3106}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3690, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3666, 3671, 3753, 3670, 3667}, + {1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 4662, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 546: 1820, 1820, 1820, 550: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 563: 1820, 1820, 1820, 568: 1820, 1820, 1820, 1820, 1820, 574: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 594: 1820, 1820, 1820, 1820, 1820, 1820, 602: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 623: 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 634: 1820, 1820, 1820, 1820, 1820, 1820, 642: 1820, 646: 1820, 1820, 1820, 1820, 672: 1820, 721: 1820, 729: 1820, 733: 1820, 1820}, + {1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 4659, 1819, 1819, 1819, 550: 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 563: 1819, 1819, 1819, 568: 1819, 1819, 1819, 1819, 1819, 574: 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 594: 1819, 1819, 1819, 1819, 1819, 1819, 602: 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 623: 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 634: 1819, 1819, 1819, 1819, 1819, 1819, 642: 1819, 646: 1819, 1819, 1819, 1819, 672: 1819, 721: 1819, 729: 1819, 733: 1819, 1819}, + {2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 4656, 2128, 2128, 2128, 550: 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 563: 2128, 2128, 2128, 568: 2128, 2128, 2128, 2128, 2128, 574: 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 594: 2128, 2128, 2128, 2128, 2128, 2128, 602: 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 623: 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 634: 2128, 2128, 2128, 2128, 2128, 2128, 642: 2128, 646: 2128, 2128, 2128, 2128, 672: 2128, 721: 2128, 729: 2128, 733: 2128, 2128}, // 195 + {2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127, 2127}, + {2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126, 2126}, + {2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125, 2125}, + {2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124}, {2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123, 2123}, - {2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122}, + // 200 + {2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 1459, 2122, 2122, 2122, 550: 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 563: 2122, 2122, 2122, 568: 2122, 2122, 2122, 2122, 2122, 574: 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 594: 2122, 2122, 2122, 2122, 2122, 2122, 602: 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 623: 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 634: 2122, 2122, 2122, 2122, 2122, 2122, 642: 2122, 646: 2122, 2122, 2122, 2122, 672: 2122, 721: 2122, 729: 2122, 733: 2122, 2122}, {2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121, 2121}, {2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120, 2120}, {2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119, 2119}, - // 200 - {2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 1455, 2118, 2118, 2118, 550: 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 563: 2118, 2118, 2118, 568: 2118, 2118, 2118, 2118, 2118, 574: 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 594: 2118, 2118, 2118, 2118, 2118, 2118, 602: 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 623: 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 634: 2118, 2118, 2118, 2118, 2118, 2118, 641: 2118, 646: 2118, 2118, 2118, 2118, 672: 2118, 718: 2118, 729: 2118, 733: 2118, 2118}, + {2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118}, + // 205 {2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117, 2117}, {2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116, 2116}, {2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115, 2115}, {2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114, 2114}, - // 205 {2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113, 2113}, + // 210 {2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112, 2112}, {2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111, 2111}, - {2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110}, + {2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 4651, 2110, 2110, 2110, 550: 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 563: 2110, 2110, 2110, 568: 2110, 2110, 2110, 2110, 2110, 574: 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 594: 2110, 2110, 2110, 2110, 2110, 2110, 602: 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 623: 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 634: 2110, 2110, 2110, 2110, 2110, 2110, 642: 2110, 646: 2110, 2110, 2110, 2110, 672: 2110, 721: 2110, 729: 2110, 733: 2110, 2110}, {2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109, 2109}, - // 210 {2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108}, + // 215 {2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107, 2107}, - {2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 4632, 2106, 2106, 2106, 550: 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 563: 2106, 2106, 2106, 568: 2106, 2106, 2106, 2106, 2106, 574: 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 594: 2106, 2106, 2106, 2106, 2106, 2106, 602: 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 623: 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 634: 2106, 2106, 2106, 2106, 2106, 2106, 641: 2106, 646: 2106, 2106, 2106, 2106, 672: 2106, 718: 2106, 729: 2106, 733: 2106, 2106}, + {2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106}, {2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105, 2105}, {2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104, 2104}, - // 215 {2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103}, + // 220 {2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102, 2102}, {2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101, 2101}, {2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100, 2100}, {2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099, 2099}, - // 220 {2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098}, - {2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097}, + // 225 + {2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 1458, 2097, 2097, 2097, 550: 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 563: 2097, 2097, 2097, 568: 2097, 2097, 2097, 2097, 2097, 574: 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 594: 2097, 2097, 2097, 2097, 2097, 2097, 602: 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 623: 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 634: 2097, 2097, 2097, 2097, 2097, 2097, 642: 2097, 646: 2097, 2097, 2097, 2097, 672: 2097, 721: 2097, 729: 2097, 733: 2097, 2097}, {2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096}, {2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095, 2095}, {2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094, 2094}, - // 225 - {2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 1454, 2093, 2093, 2093, 550: 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 563: 2093, 2093, 2093, 568: 2093, 2093, 2093, 2093, 2093, 574: 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 594: 2093, 2093, 2093, 2093, 2093, 2093, 602: 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 623: 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 634: 2093, 2093, 2093, 2093, 2093, 2093, 641: 2093, 646: 2093, 2093, 2093, 2093, 672: 2093, 718: 2093, 729: 2093, 733: 2093, 2093}, + {2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093}, + // 230 {2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092, 2092}, {2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091, 2091}, {2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090, 2090}, {2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089, 2089}, - // 230 {2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088, 2088}, + // 235 {2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087, 2087}, - {2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086}, + {2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 1455, 2086, 4650, 2086, 550: 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 563: 2086, 2086, 2086, 568: 2086, 2086, 2086, 2086, 2086, 574: 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 594: 2086, 2086, 2086, 2086, 2086, 2086, 602: 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 623: 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 634: 2086, 2086, 2086, 2086, 2086, 2086, 642: 2086, 646: 2086, 2086, 2086, 2086, 672: 2086, 721: 2086, 729: 2086, 733: 2086, 2086}, {2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085, 2085}, - {2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084}, - // 235 + {2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 1453, 2084, 2084, 2084, 550: 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 563: 2084, 2084, 2084, 568: 2084, 2084, 2084, 2084, 2084, 574: 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 594: 2084, 2084, 2084, 2084, 2084, 2084, 602: 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 623: 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 634: 2084, 2084, 2084, 2084, 2084, 2084, 642: 2084, 646: 2084, 2084, 2084, 2084, 672: 2084, 721: 2084, 729: 2084, 733: 2084, 2084}, {2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083, 2083}, - {2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 1451, 2082, 4631, 2082, 550: 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 563: 2082, 2082, 2082, 568: 2082, 2082, 2082, 2082, 2082, 574: 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 594: 2082, 2082, 2082, 2082, 2082, 2082, 602: 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 623: 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 634: 2082, 2082, 2082, 2082, 2082, 2082, 641: 2082, 646: 2082, 2082, 2082, 2082, 672: 2082, 718: 2082, 729: 2082, 733: 2082, 2082}, + // 240 + {2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082}, {2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081, 2081}, - {2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 1449, 2080, 2080, 2080, 550: 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 563: 2080, 2080, 2080, 568: 2080, 2080, 2080, 2080, 2080, 574: 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 594: 2080, 2080, 2080, 2080, 2080, 2080, 602: 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 623: 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 634: 2080, 2080, 2080, 2080, 2080, 2080, 641: 2080, 646: 2080, 2080, 2080, 2080, 672: 2080, 718: 2080, 729: 2080, 733: 2080, 2080}, + {2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080}, {2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079, 2079}, - // 240 {2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078, 2078}, + // 245 {2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077, 2077}, {2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076, 2076}, {2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075, 2075}, {2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074, 2074}, - // 245 {2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073, 2073}, + // 250 {2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072, 2072}, {2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071, 2071}, {2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070, 2070}, {2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069, 2069}, - // 250 {2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068, 2068}, + // 255 {2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067, 2067}, {2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066, 2066}, {2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065, 2065}, {2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064, 2064}, - // 255 {2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063, 2063}, + // 260 {2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062, 2062}, - {2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061}, + {2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 1448, 2061, 2061, 2061, 550: 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 563: 2061, 2061, 2061, 568: 2061, 2061, 2061, 2061, 2061, 574: 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 594: 2061, 2061, 2061, 2061, 2061, 2061, 602: 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 623: 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 634: 2061, 2061, 2061, 2061, 2061, 2061, 642: 2061, 646: 2061, 2061, 2061, 2061, 672: 2061, 721: 2061, 729: 2061, 733: 2061, 2061}, {2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060, 2060}, {2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059}, - // 260 {2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058, 2058}, - {2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 1444, 2057, 2057, 2057, 550: 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 563: 2057, 2057, 2057, 568: 2057, 2057, 2057, 2057, 2057, 574: 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 594: 2057, 2057, 2057, 2057, 2057, 2057, 602: 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 623: 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 634: 2057, 2057, 2057, 2057, 2057, 2057, 641: 2057, 646: 2057, 2057, 2057, 2057, 672: 2057, 718: 2057, 729: 2057, 733: 2057, 2057}, + // 265 + {2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057}, {2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056, 2056}, - {2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055}, + {2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 1452, 2055, 2055, 2055, 550: 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 563: 2055, 2055, 2055, 568: 2055, 2055, 2055, 2055, 2055, 574: 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 594: 2055, 2055, 2055, 2055, 2055, 2055, 602: 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 623: 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 634: 2055, 2055, 2055, 2055, 2055, 2055, 642: 2055, 646: 2055, 2055, 2055, 2055, 672: 2055, 721: 2055, 729: 2055, 733: 2055, 2055}, {2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054, 2054}, - // 265 {2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053}, + // 270 {2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052, 2052}, - {2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 1448, 2051, 2051, 2051, 550: 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 563: 2051, 2051, 2051, 568: 2051, 2051, 2051, 2051, 2051, 574: 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 594: 2051, 2051, 2051, 2051, 2051, 2051, 602: 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 623: 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 634: 2051, 2051, 2051, 2051, 2051, 2051, 641: 2051, 646: 2051, 2051, 2051, 2051, 672: 2051, 718: 2051, 729: 2051, 733: 2051, 2051}, + {2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051}, {2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050, 2050}, {2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049, 2049}, - // 270 {2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048}, + // 275 {2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047}, {2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046, 2046}, - {2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045}, + {2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 4647, 2045, 2045, 2045, 550: 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 563: 2045, 2045, 2045, 568: 2045, 2045, 2045, 2045, 2045, 574: 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 594: 2045, 2045, 2045, 2045, 2045, 2045, 602: 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 623: 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 634: 2045, 2045, 2045, 2045, 2045, 2045, 642: 2045, 646: 2045, 2045, 2045, 2045, 672: 2045, 721: 2045, 729: 2045, 733: 2045, 2045}, {2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044, 2044}, - // 275 {2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043, 2043}, + // 280 {2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042, 2042}, - {2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 4628, 2041, 2041, 2041, 550: 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 563: 2041, 2041, 2041, 568: 2041, 2041, 2041, 2041, 2041, 574: 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 594: 2041, 2041, 2041, 2041, 2041, 2041, 602: 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 623: 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 634: 2041, 2041, 2041, 2041, 2041, 2041, 641: 2041, 646: 2041, 2041, 2041, 2041, 672: 2041, 718: 2041, 729: 2041, 733: 2041, 2041}, + {2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041}, {2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040, 2040}, {2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039, 2039}, - // 280 {2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038, 2038}, + // 285 {2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037, 2037}, {2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036, 2036}, {2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035, 2035}, {2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034, 2034}, - // 285 {2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033, 2033}, + // 290 {2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032, 2032}, {2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031, 2031}, {2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030, 2030}, {2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029, 2029}, - // 290 {2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028, 2028}, + // 295 {2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027, 2027}, {2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026}, {2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025, 2025}, - {2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024}, - // 295 + {2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 1442, 2024, 2024, 2024, 550: 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 563: 2024, 2024, 2024, 568: 2024, 2024, 2024, 2024, 2024, 574: 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 594: 2024, 2024, 2024, 2024, 2024, 2024, 602: 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 623: 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 634: 2024, 2024, 2024, 2024, 2024, 2024, 642: 2024, 646: 2024, 2024, 2024, 2024, 672: 2024, 721: 2024, 729: 2024, 733: 2024, 2024}, {2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023, 2023}, + // 300 {2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022, 2022}, {2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021, 2021}, - {2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 1438, 2020, 2020, 2020, 550: 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 563: 2020, 2020, 2020, 568: 2020, 2020, 2020, 2020, 2020, 574: 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 594: 2020, 2020, 2020, 2020, 2020, 2020, 602: 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 623: 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 634: 2020, 2020, 2020, 2020, 2020, 2020, 641: 2020, 646: 2020, 2020, 2020, 2020, 672: 2020, 718: 2020, 729: 2020, 733: 2020, 2020}, + {2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020}, {2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019}, - // 300 {2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018}, - {2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017}, - {2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016}, + // 305 + {2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 1434, 2017, 4646, 2017, 550: 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 563: 2017, 2017, 2017, 568: 2017, 2017, 2017, 2017, 2017, 574: 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 594: 2017, 2017, 2017, 2017, 2017, 2017, 602: 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 623: 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 634: 2017, 2017, 2017, 2017, 2017, 2017, 642: 2017, 646: 2017, 2017, 2017, 2017, 672: 2017, 721: 2017, 729: 2017, 733: 2017, 2017}, + {2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 1433, 2016, 4645, 2016, 550: 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 563: 2016, 2016, 2016, 568: 2016, 2016, 2016, 2016, 2016, 574: 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 594: 2016, 2016, 2016, 2016, 2016, 2016, 602: 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 623: 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 634: 2016, 2016, 2016, 2016, 2016, 2016, 642: 2016, 646: 2016, 2016, 2016, 2016, 672: 2016, 721: 2016, 729: 2016, 733: 2016, 2016}, {2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015}, {2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2014}, - // 305 - {2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 1430, 2013, 4627, 2013, 550: 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 563: 2013, 2013, 2013, 568: 2013, 2013, 2013, 2013, 2013, 574: 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 594: 2013, 2013, 2013, 2013, 2013, 2013, 602: 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 623: 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 634: 2013, 2013, 2013, 2013, 2013, 2013, 641: 2013, 646: 2013, 2013, 2013, 2013, 672: 2013, 718: 2013, 729: 2013, 733: 2013, 2013}, - {2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 1429, 2012, 4626, 2012, 550: 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 563: 2012, 2012, 2012, 568: 2012, 2012, 2012, 2012, 2012, 574: 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 594: 2012, 2012, 2012, 2012, 2012, 2012, 602: 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 623: 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 634: 2012, 2012, 2012, 2012, 2012, 2012, 641: 2012, 646: 2012, 2012, 2012, 2012, 672: 2012, 718: 2012, 729: 2012, 733: 2012, 2012}, + {2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 1432, 2013, 2013, 2013, 550: 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 563: 2013, 2013, 2013, 568: 2013, 2013, 2013, 2013, 2013, 574: 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 594: 2013, 2013, 2013, 2013, 2013, 2013, 602: 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 623: 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 634: 2013, 2013, 2013, 2013, 2013, 2013, 642: 2013, 646: 2013, 2013, 2013, 2013, 672: 2013, 721: 2013, 729: 2013, 733: 2013, 2013}, + // 310 + {2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012}, {2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011}, {2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010}, - {2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 1428, 2009, 2009, 2009, 550: 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 563: 2009, 2009, 2009, 568: 2009, 2009, 2009, 2009, 2009, 574: 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 594: 2009, 2009, 2009, 2009, 2009, 2009, 602: 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 623: 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 634: 2009, 2009, 2009, 2009, 2009, 2009, 641: 2009, 646: 2009, 2009, 2009, 2009, 672: 2009, 718: 2009, 729: 2009, 733: 2009, 2009}, - // 310 + {2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009}, {2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008, 2008}, + // 315 {2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007}, - {2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006}, + {2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 1429, 2006, 2006, 2006, 550: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 563: 2006, 2006, 2006, 568: 2006, 2006, 2006, 2006, 2006, 574: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 594: 2006, 2006, 2006, 2006, 2006, 2006, 602: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 623: 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 634: 2006, 2006, 2006, 2006, 2006, 2006, 642: 2006, 646: 2006, 2006, 2006, 2006, 672: 2006, 721: 2006, 729: 2006, 733: 2006, 2006}, {2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005}, - {2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004}, - // 315 - {2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003}, - {2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 1425, 2002, 2002, 2002, 550: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 563: 2002, 2002, 2002, 568: 2002, 2002, 2002, 2002, 2002, 574: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 594: 2002, 2002, 2002, 2002, 2002, 2002, 602: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 623: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 634: 2002, 2002, 2002, 2002, 2002, 2002, 641: 2002, 646: 2002, 2002, 2002, 2002, 672: 2002, 718: 2002, 729: 2002, 733: 2002, 2002}, - {2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001}, - {2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 1426, 2000, 2000, 2000, 550: 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 563: 2000, 2000, 2000, 568: 2000, 2000, 2000, 2000, 2000, 574: 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 594: 2000, 2000, 2000, 2000, 2000, 2000, 602: 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 623: 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 634: 2000, 2000, 2000, 2000, 2000, 2000, 641: 2000, 646: 2000, 2000, 2000, 2000, 672: 2000, 718: 2000, 729: 2000, 733: 2000, 2000}, - {1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 4616, 1999, 1999, 1999, 550: 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 563: 1999, 1999, 1999, 568: 1999, 1999, 1999, 1999, 1999, 574: 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 594: 1999, 1999, 1999, 1999, 1999, 1999, 602: 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 623: 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 634: 1999, 1999, 1999, 1999, 1999, 1999, 641: 1999, 646: 1999, 1999, 1999, 1999, 672: 1999, 718: 1999, 729: 1999, 733: 1999, 1999}, + {2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 1430, 2004, 2004, 2004, 550: 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 563: 2004, 2004, 2004, 568: 2004, 2004, 2004, 2004, 2004, 574: 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 594: 2004, 2004, 2004, 2004, 2004, 2004, 602: 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 623: 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 634: 2004, 2004, 2004, 2004, 2004, 2004, 642: 2004, 646: 2004, 2004, 2004, 2004, 672: 2004, 721: 2004, 729: 2004, 733: 2004, 2004}, + {2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 4635, 2003, 2003, 2003, 550: 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 563: 2003, 2003, 2003, 568: 2003, 2003, 2003, 2003, 2003, 574: 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 594: 2003, 2003, 2003, 2003, 2003, 2003, 602: 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 623: 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 634: 2003, 2003, 2003, 2003, 2003, 2003, 642: 2003, 646: 2003, 2003, 2003, 2003, 672: 2003, 721: 2003, 729: 2003, 733: 2003, 2003}, // 320 - {1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998}, + {2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002}, + {2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001}, + {2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 1431, 2000, 2000, 2000, 550: 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 563: 2000, 2000, 2000, 568: 2000, 2000, 2000, 2000, 2000, 574: 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 594: 2000, 2000, 2000, 2000, 2000, 2000, 602: 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 623: 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 634: 2000, 2000, 2000, 2000, 2000, 2000, 642: 2000, 646: 2000, 2000, 2000, 2000, 672: 2000, 721: 2000, 729: 2000, 733: 2000, 2000}, + {1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999}, + {1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1456, 1998, 1998, 1998, 550: 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 563: 1998, 1998, 1998, 568: 1998, 1998, 1998, 1998, 1998, 574: 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 594: 1998, 1998, 1998, 1998, 1998, 1998, 602: 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 623: 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 634: 1998, 1998, 1998, 1998, 1998, 1998, 642: 1998, 646: 1998, 1998, 1998, 1998, 672: 1998, 721: 1998, 729: 1998, 733: 1998, 1998}, + // 325 {1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997}, - {1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1427, 1996, 1996, 1996, 550: 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 563: 1996, 1996, 1996, 568: 1996, 1996, 1996, 1996, 1996, 574: 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 594: 1996, 1996, 1996, 1996, 1996, 1996, 602: 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 623: 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 634: 1996, 1996, 1996, 1996, 1996, 1996, 641: 1996, 646: 1996, 1996, 1996, 1996, 672: 1996, 718: 1996, 729: 1996, 733: 1996, 1996}, + {1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996}, {1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995}, - {1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1452, 1994, 1994, 1994, 550: 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 563: 1994, 1994, 1994, 568: 1994, 1994, 1994, 1994, 1994, 574: 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 594: 1994, 1994, 1994, 1994, 1994, 1994, 602: 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 623: 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 634: 1994, 1994, 1994, 1994, 1994, 1994, 641: 1994, 646: 1994, 1994, 1994, 1994, 672: 1994, 718: 1994, 729: 1994, 733: 1994, 1994}, - // 325 + {1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994}, {1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993}, + // 330 {1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992, 1992}, {1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1991}, {1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990, 1990}, {1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989, 1989}, - // 330 {1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988, 1988}, + // 335 {1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987, 1987}, {1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986, 1986}, - {1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985}, + {1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1441, 1985, 1985, 1985, 550: 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 563: 1985, 1985, 1985, 568: 1985, 1985, 1985, 1985, 1985, 574: 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 594: 1985, 1985, 1985, 1985, 1985, 1985, 602: 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 623: 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 634: 1985, 1985, 1985, 1985, 1985, 1985, 642: 1985, 646: 1985, 1985, 1985, 1985, 672: 1985, 721: 1985, 729: 1985, 733: 1985, 1985}, {1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984, 1984}, - // 335 {1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983, 1983}, + // 340 {1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982, 1982}, - {1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1437, 1981, 1981, 1981, 550: 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 563: 1981, 1981, 1981, 568: 1981, 1981, 1981, 1981, 1981, 574: 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 594: 1981, 1981, 1981, 1981, 1981, 1981, 602: 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 623: 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 634: 1981, 1981, 1981, 1981, 1981, 1981, 641: 1981, 646: 1981, 1981, 1981, 1981, 672: 1981, 718: 1981, 729: 1981, 733: 1981, 1981}, + {1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981}, {1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980, 1980}, {1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979, 1979}, - // 340 {1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978}, + // 345 {1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977, 1977}, {1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976, 1976}, {1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975, 1975}, {1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974, 1974}, - // 345 {1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973, 1973}, + // 350 {1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972, 1972}, {1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971, 1971}, {1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970, 1970}, {1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969, 1969}, - // 350 {1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968, 1968}, + // 355 {1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967, 1967}, {1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966, 1966}, {1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965, 1965}, {1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964, 1964}, - // 355 {1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963}, - {1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962}, + // 360 + {1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1438, 1962, 1962, 1962, 550: 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 563: 1962, 1962, 1962, 568: 1962, 1962, 1962, 1962, 1962, 574: 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 594: 1962, 1962, 1962, 1962, 1962, 1962, 602: 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 623: 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 634: 1962, 1962, 1962, 1962, 1962, 1962, 642: 1962, 646: 1962, 1962, 1962, 1962, 672: 1962, 721: 1962, 729: 1962, 733: 1962, 1962}, {1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961, 1961}, {1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960, 1960}, {1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959, 1959}, - // 360 - {1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1434, 1958, 1958, 1958, 550: 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 563: 1958, 1958, 1958, 568: 1958, 1958, 1958, 1958, 1958, 574: 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 594: 1958, 1958, 1958, 1958, 1958, 1958, 602: 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 623: 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 634: 1958, 1958, 1958, 1958, 1958, 1958, 641: 1958, 646: 1958, 1958, 1958, 1958, 672: 1958, 718: 1958, 729: 1958, 733: 1958, 1958}, + {1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958}, + // 365 {1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957, 1957}, {1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956, 1956}, {1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955, 1955}, {1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954, 1954}, - // 365 {1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953, 1953}, + // 370 {1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952, 1952}, {1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951, 1951}, {1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950, 1950}, {1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949, 1949}, - // 370 {1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948, 1948}, + // 375 {1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947, 1947}, {1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946, 1946}, - {1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945}, - {1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944}, - // 375 - {1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943}, - {1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942}, - {1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1432, 1941, 1941, 1941, 550: 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 563: 1941, 1941, 1941, 568: 1941, 1941, 1941, 1941, 1941, 574: 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 594: 1941, 1941, 1941, 1941, 1941, 1941, 602: 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 623: 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 634: 1941, 1941, 1941, 1941, 1941, 1941, 641: 1941, 646: 1941, 1941, 1941, 1941, 672: 1941, 718: 1941, 729: 1941, 733: 1941, 1941}, - {1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1453, 1940, 1940, 1940, 550: 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 563: 1940, 1940, 1940, 568: 1940, 1940, 1940, 1940, 1940, 574: 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 594: 1940, 1940, 1940, 1940, 1940, 1940, 602: 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 623: 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 634: 1940, 1940, 1940, 1940, 1940, 1940, 641: 1940, 646: 1940, 1940, 1940, 1940, 672: 1940, 718: 1940, 729: 1940, 733: 1940, 1940}, - {1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1440, 1939, 1939, 1939, 550: 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 563: 1939, 1939, 1939, 568: 1939, 1939, 1939, 1939, 1939, 574: 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 594: 1939, 1939, 1939, 1939, 1939, 1939, 602: 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 623: 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 634: 1939, 1939, 1939, 1939, 1939, 1939, 641: 1939, 646: 1939, 1939, 1939, 1939, 672: 1939, 718: 1939, 729: 1939, 733: 1939, 1939}, + {1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1436, 1945, 1945, 1945, 550: 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 563: 1945, 1945, 1945, 568: 1945, 1945, 1945, 1945, 1945, 574: 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 594: 1945, 1945, 1945, 1945, 1945, 1945, 602: 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 623: 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 634: 1945, 1945, 1945, 1945, 1945, 1945, 642: 1945, 646: 1945, 1945, 1945, 1945, 672: 1945, 721: 1945, 729: 1945, 733: 1945, 1945}, + {1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1457, 1944, 1944, 1944, 550: 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 563: 1944, 1944, 1944, 568: 1944, 1944, 1944, 1944, 1944, 574: 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 594: 1944, 1944, 1944, 1944, 1944, 1944, 602: 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 623: 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 634: 1944, 1944, 1944, 1944, 1944, 1944, 642: 1944, 646: 1944, 1944, 1944, 1944, 672: 1944, 721: 1944, 729: 1944, 733: 1944, 1944}, + {1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1444, 1943, 1943, 1943, 550: 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 563: 1943, 1943, 1943, 568: 1943, 1943, 1943, 1943, 1943, 574: 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 594: 1943, 1943, 1943, 1943, 1943, 1943, 602: 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 623: 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 634: 1943, 1943, 1943, 1943, 1943, 1943, 642: 1943, 646: 1943, 1943, 1943, 1943, 672: 1943, 721: 1943, 729: 1943, 733: 1943, 1943}, // 380 - {1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938}, + {1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942, 1942}, + {1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941}, + {1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940}, + {1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1446, 1939, 1939, 1939, 550: 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 563: 1939, 1939, 1939, 568: 1939, 1939, 1939, 1939, 1939, 574: 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 594: 1939, 1939, 1939, 1939, 1939, 1939, 602: 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 623: 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 634: 1939, 1939, 1939, 1939, 1939, 1939, 642: 1939, 646: 1939, 1939, 1939, 1939, 672: 1939, 721: 1939, 729: 1939, 733: 1939, 1939}, + {1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1445, 1938, 1938, 1938, 550: 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 563: 1938, 1938, 1938, 568: 1938, 1938, 1938, 1938, 1938, 574: 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 594: 1938, 1938, 1938, 1938, 1938, 1938, 602: 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 623: 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 634: 1938, 1938, 1938, 1938, 1938, 1938, 642: 1938, 646: 1938, 1938, 1938, 1938, 672: 1938, 721: 1938, 729: 1938, 733: 1938, 1938}, + // 385 {1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937, 1937}, {1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936, 1936}, - {1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1442, 1935, 1935, 1935, 550: 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 563: 1935, 1935, 1935, 568: 1935, 1935, 1935, 1935, 1935, 574: 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 594: 1935, 1935, 1935, 1935, 1935, 1935, 602: 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 623: 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 634: 1935, 1935, 1935, 1935, 1935, 1935, 641: 1935, 646: 1935, 1935, 1935, 1935, 672: 1935, 718: 1935, 729: 1935, 733: 1935, 1935}, - {1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1441, 1934, 1934, 1934, 550: 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 563: 1934, 1934, 1934, 568: 1934, 1934, 1934, 1934, 1934, 574: 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 594: 1934, 1934, 1934, 1934, 1934, 1934, 602: 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 623: 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 634: 1934, 1934, 1934, 1934, 1934, 1934, 641: 1934, 646: 1934, 1934, 1934, 1934, 672: 1934, 718: 1934, 729: 1934, 733: 1934, 1934}, - // 385 + {1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935}, + {1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934}, {1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933, 1933}, - {1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932}, + // 390 + {1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1435, 1932, 1932, 1932, 550: 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 563: 1932, 1932, 1932, 568: 1932, 1932, 1932, 1932, 1932, 574: 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 594: 1932, 1932, 1932, 1932, 1932, 1932, 602: 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 623: 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 634: 1932, 1932, 1932, 1932, 1932, 1932, 642: 1932, 646: 1932, 1932, 1932, 1932, 672: 1932, 721: 1932, 729: 1932, 733: 1932, 1932}, {1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1931}, {1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930, 1930}, {1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929}, - // 390 - {1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1431, 1928, 1928, 1928, 550: 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 563: 1928, 1928, 1928, 568: 1928, 1928, 1928, 1928, 1928, 574: 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 594: 1928, 1928, 1928, 1928, 1928, 1928, 602: 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 623: 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 634: 1928, 1928, 1928, 1928, 1928, 1928, 641: 1928, 646: 1928, 1928, 1928, 1928, 672: 1928, 718: 1928, 729: 1928, 733: 1928, 1928}, + {1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928}, + // 395 {1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927, 1927}, {1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926, 1926}, {1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925, 1925}, {1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924, 1924}, - // 395 {1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923, 1923}, + // 400 {1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922}, {1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921}, {1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920}, {1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919, 1919}, - // 400 {1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918, 1918}, + // 405 {1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917, 1917}, {1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916, 1916}, {1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915}, {1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914, 1914}, - // 405 {1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913, 1913}, + // 410 {1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912, 1912}, {1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911, 1911}, {1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910, 1910}, {1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909, 1909}, - // 410 {1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908, 1908}, + // 415 {1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907, 1907}, {1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906, 1906}, {1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905, 1905}, {1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904, 1904}, - // 415 {1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903, 1903}, + // 420 {1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902}, {1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901, 1901}, {1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900}, {1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899}, - // 420 {1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898, 1898}, + // 425 {1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897, 1897}, {1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896, 1896}, {1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895, 1895}, {1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894, 1894}, - // 425 {1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893, 1893}, + // 430 {1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892, 1892}, {1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891, 1891}, {1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890, 1890}, {1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889, 1889}, - // 430 {1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888, 1888}, + // 435 {1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887}, {1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886, 1886}, {1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885, 1885}, {1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884, 1884}, - // 435 {1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883}, + // 440 {1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882, 1882}, {1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881}, {1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880, 1880}, {1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879, 1879}, - // 440 {1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878}, + // 445 {1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877}, {1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876, 1876}, {1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875, 1875}, {1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874, 1874}, - // 445 {1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873, 1873}, + // 450 {1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872, 1872}, {1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871}, {1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870, 1870}, {1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869, 1869}, - // 450 {1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868}, + // 455 {1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867}, {1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866, 1866}, {1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865}, {1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864, 1864}, - // 455 {1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863}, + // 460 {1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862, 1862}, {1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861}, {1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860, 1860}, {1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859, 1859}, - // 460 {1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858}, + // 465 {1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857}, {1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856, 1856}, {1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855}, {1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854, 1854}, - // 465 {1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853, 1853}, + // 470 {1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852, 1852}, {1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851, 1851}, {1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850, 1850}, {1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849, 1849}, - // 470 {1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848, 1848}, + // 475 {1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847}, {1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846, 1846}, {1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845, 1845}, {1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844, 1844}, - // 475 {1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843, 1843}, + // 480 {1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842, 1842}, {1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841, 1841}, {1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840, 1840}, {1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839, 1839}, - // 480 {1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838, 1838}, + // 485 {1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837}, {1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836, 1836}, {1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835, 1835}, {1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834, 1834}, - // 485 {1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833, 1833}, + // 490 {1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832, 1832}, {1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831, 1831}, {1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830, 1830}, {1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829, 1829}, - // 490 {1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828, 1828}, + // 495 {1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827, 1827}, {1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826, 1826}, {1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825, 1825}, {1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824, 1824}, - // 495 {1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823, 1823}, + // 500 {1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822, 1822}, {1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821, 1821}, - {1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820}, - {1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819}, - // 500 - {1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818}, - {1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817}, - {1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 4613, 1814, 1814, 1814, 550: 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 563: 1814, 1814, 1814, 568: 1814, 1814, 1814, 1814, 1814, 574: 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 594: 1814, 1814, 1814, 1814, 1814, 1814, 602: 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 623: 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 634: 1814, 1814, 1814, 1814, 1814, 1814, 641: 1814, 646: 1814, 1814, 1814, 1814, 672: 1814, 718: 1814, 729: 1814, 733: 1814, 1814}, - {1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 4602, 1813, 1813, 1813, 550: 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 563: 1813, 1813, 1813, 568: 1813, 1813, 1813, 1813, 1813, 574: 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 594: 1813, 1813, 1813, 1813, 1813, 1813, 602: 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 623: 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 634: 1813, 1813, 1813, 1813, 1813, 1813, 641: 1813, 646: 1813, 1813, 1813, 1813, 672: 1813, 718: 1813, 729: 1813, 733: 1813, 1813}, - {1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812}, + {1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 4632, 1818, 1818, 1818, 550: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 563: 1818, 1818, 1818, 568: 1818, 1818, 1818, 1818, 1818, 574: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 594: 1818, 1818, 1818, 1818, 1818, 1818, 602: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 623: 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 634: 1818, 1818, 1818, 1818, 1818, 1818, 642: 1818, 646: 1818, 1818, 1818, 1818, 672: 1818, 721: 1818, 729: 1818, 733: 1818, 1818}, + {1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 4621, 1817, 1817, 1817, 550: 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 563: 1817, 1817, 1817, 568: 1817, 1817, 1817, 1817, 1817, 574: 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 594: 1817, 1817, 1817, 1817, 1817, 1817, 602: 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 623: 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 634: 1817, 1817, 1817, 1817, 1817, 1817, 642: 1817, 646: 1817, 1817, 1817, 1817, 672: 1817, 721: 1817, 729: 1817, 733: 1817, 1817}, + {1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816}, // 505 + {1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815}, + {1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814}, + {1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813}, + {1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812, 1812}, {1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811, 1811}, + // 510 {1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810, 1810}, {1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809, 1809}, {1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808, 1808}, {1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807, 1807}, - // 510 {1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806, 1806}, + // 515 {1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805, 1805}, {1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804, 1804}, {1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1803}, {1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802, 1802}, - // 515 {1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801, 1801}, + // 520 {1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800, 1800}, {1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799, 1799}, {1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798, 1798}, {1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797, 1797}, - // 520 {1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796, 1796}, + // 525 {1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795}, {1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794}, {1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793}, {1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792}, - // 525 {1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791, 1791}, + // 530 {1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790, 1790}, {1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789, 1789}, {1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788, 1788}, {1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787, 1787}, - // 530 {1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786, 1786}, + // 535 {1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785, 1785}, {1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784, 1784}, {1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783, 1783}, {1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782, 1782}, - // 535 {1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781, 1781}, + // 540 {1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780, 1780}, {1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779, 1779}, {1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778, 1778}, {1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777, 1777}, - // 540 {1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776, 1776}, + // 545 {1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775, 1775}, {1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774, 1774}, {1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773, 1773}, {1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772}, - // 545 {1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771, 1771}, + // 550 {1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770}, {1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769}, {1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768}, {1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767, 1767}, - // 550 {1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766, 1766}, + // 555 {1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765, 1765}, {1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764, 1764}, {1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763, 1763}, {1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762, 1762}, - // 555 {1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761, 1761}, + // 560 {1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760, 1760}, {1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759, 1759}, {1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758, 1758}, {1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757, 1757}, - // 560 {1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756, 1756}, + // 565 {1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755, 1755}, {1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754, 1754}, {1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753, 1753}, {1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752, 1752}, - // 565 {1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751, 1751}, + // 570 {1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750, 1750}, {1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749, 1749}, {1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748, 1748}, {1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747, 1747}, - // 570 {1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746, 1746}, + // 575 {1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745, 1745}, {1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744, 1744}, {1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743, 1743}, {1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742}, - // 575 {1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741}, + // 580 {1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740}, {1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739}, {1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738}, {1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737}, - // 580 {1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736}, + // 585 {1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735}, {1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734}, {1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733}, {1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732}, - // 585 {1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731}, + // 590 {1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730}, {1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729}, {1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728, 1728}, {1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727, 1727}, - // 590 {1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726, 1726}, + // 595 {1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725}, {1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724, 1724}, {1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723, 1723}, {1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722, 1722}, - // 595 {1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721}, + // 600 {1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720}, {1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719}, {1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718}, {1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717}, - // 600 {1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1716}, + // 605 {1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1715}, {1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714}, {1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713}, {1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712}, - // 605 {1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711}, + // 610 {1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710}, {1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709}, {1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708}, {1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707}, - // 610 {1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706}, + // 615 {1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705, 1705}, {1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704, 1704}, {1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703, 1703}, - {1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702}, - // 615 + {1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1373, 1702, 1702, 1702, 550: 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 563: 1702, 1702, 1702, 568: 1702, 1702, 1702, 1702, 1702, 574: 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 594: 1702, 1702, 1702, 1702, 1702, 1702, 602: 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 623: 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 634: 1702, 1702, 1702, 1702, 1702, 1702, 642: 1702, 646: 1702, 1702, 1702, 1702, 672: 1702, 721: 1702, 729: 1702, 733: 1702, 1702}, {1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701, 1701}, + // 620 {1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700}, {1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699, 1699}, - {1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1369, 1698, 1698, 1698, 550: 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 563: 1698, 1698, 1698, 568: 1698, 1698, 1698, 1698, 1698, 574: 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 594: 1698, 1698, 1698, 1698, 1698, 1698, 602: 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 623: 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 634: 1698, 1698, 1698, 1698, 1698, 1698, 641: 1698, 646: 1698, 1698, 1698, 1698, 672: 1698, 718: 1698, 729: 1698, 733: 1698, 1698}, + {1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698}, {1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1697}, - // 620 {1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696, 1696}, + // 625 {1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695, 1695}, {1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694, 1694}, {1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693, 1693}, {1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692, 1692}, - // 625 {1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691}, + // 630 {1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690, 1690}, {1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689, 1689}, {1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688, 1688}, {1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687, 1687}, - // 630 {1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686, 1686}, + // 635 {1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685, 1685}, {1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684, 1684}, - {1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683}, + {1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 4612, 1683, 1683, 1683, 550: 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 563: 1683, 1683, 1683, 568: 1683, 1683, 1683, 1683, 1683, 574: 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 594: 1683, 1683, 1683, 1683, 1683, 1683, 602: 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 623: 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 634: 1683, 1683, 1683, 1683, 1683, 1683, 642: 1683, 646: 1683, 1683, 1683, 1683, 672: 1683, 721: 1683, 729: 1683, 733: 1683, 1683}, {1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682, 1682}, - // 635 {1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681}, + // 640 {1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680, 1680}, - {1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 4593, 1679, 1679, 1679, 550: 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 563: 1679, 1679, 1679, 568: 1679, 1679, 1679, 1679, 1679, 574: 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 594: 1679, 1679, 1679, 1679, 1679, 1679, 602: 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 623: 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 634: 1679, 1679, 1679, 1679, 1679, 1679, 641: 1679, 646: 1679, 1679, 1679, 1679, 672: 1679, 718: 1679, 729: 1679, 733: 1679, 1679}, - {1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678}, + {1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679}, + {1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1449, 1678, 1678, 1678, 550: 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 563: 1678, 1678, 1678, 568: 1678, 1678, 1678, 1678, 1678, 574: 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 594: 1678, 1678, 1678, 1678, 1678, 1678, 602: 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 623: 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 634: 1678, 1678, 1678, 1678, 1678, 1678, 642: 1678, 646: 1678, 1678, 1678, 1678, 672: 1678, 721: 1678, 729: 1678, 733: 1678, 1678}, {1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677}, - // 640 {1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676, 1676}, + // 645 {1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675}, - {1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1445, 1674, 1674, 1674, 550: 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 563: 1674, 1674, 1674, 568: 1674, 1674, 1674, 1674, 1674, 574: 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 594: 1674, 1674, 1674, 1674, 1674, 1674, 602: 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 623: 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 634: 1674, 1674, 1674, 1674, 1674, 1674, 641: 1674, 646: 1674, 1674, 1674, 1674, 672: 1674, 718: 1674, 729: 1674, 733: 1674, 1674}, + {1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674}, {1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673, 1673}, {1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672, 1672}, - // 645 {1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671}, + // 650 {1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670, 1670}, {1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669, 1669}, {1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668, 1668}, {1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667, 1667}, - // 650 {1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666, 1666}, + // 655 {1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665}, - {1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664}, + {1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1372, 1664, 1664, 1664, 550: 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 563: 1664, 1664, 1664, 568: 1664, 1664, 1664, 1664, 1664, 574: 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 594: 1664, 1664, 1664, 1664, 1664, 1664, 602: 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 623: 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 634: 1664, 1664, 1664, 1664, 1664, 1664, 642: 1664, 646: 1664, 1664, 1664, 1664, 672: 1664, 721: 1664, 729: 1664, 733: 1664, 1664}, {1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663, 1663}, {1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662}, - // 655 {1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661}, - {1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1368, 1660, 1660, 1660, 550: 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 563: 1660, 1660, 1660, 568: 1660, 1660, 1660, 1660, 1660, 574: 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 594: 1660, 1660, 1660, 1660, 1660, 1660, 602: 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 623: 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 634: 1660, 1660, 1660, 1660, 1660, 1660, 641: 1660, 646: 1660, 1660, 1660, 1660, 672: 1660, 718: 1660, 729: 1660, 733: 1660, 1660}, + // 660 + {1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660}, {1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659}, {1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658}, {1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657}, - // 660 {1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656}, + // 665 {1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655}, {1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654}, {1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653}, {1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652}, - // 665 - {1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651}, - {1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650}, + {1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 4605, 1651, 1651, 1651, 550: 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 563: 1651, 1651, 1651, 568: 1651, 1651, 1651, 1651, 1651, 574: 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 594: 1651, 1651, 1651, 1651, 1651, 1651, 602: 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 623: 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 634: 1651, 1651, 1651, 1651, 1651, 1651, 642: 1651, 646: 1651, 1651, 1651, 1651, 672: 1651, 721: 1651, 729: 1651, 733: 1651, 1651}, + // 670 + {1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 4598, 1650, 1650, 1650, 550: 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 563: 1650, 1650, 1650, 568: 1650, 1650, 1650, 1650, 1650, 574: 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 594: 1650, 1650, 1650, 1650, 1650, 1650, 602: 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 623: 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 634: 1650, 1650, 1650, 1650, 1650, 1650, 642: 1650, 646: 1650, 1650, 1650, 1650, 672: 1650, 721: 1650, 729: 1650, 733: 1650, 1650}, {1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1649}, {1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648, 1648}, - {1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 4586, 1647, 1647, 1647, 550: 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 563: 1647, 1647, 1647, 568: 1647, 1647, 1647, 1647, 1647, 574: 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 594: 1647, 1647, 1647, 1647, 1647, 1647, 602: 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 623: 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 634: 1647, 1647, 1647, 1647, 1647, 1647, 641: 1647, 646: 1647, 1647, 1647, 1647, 672: 1647, 718: 1647, 729: 1647, 733: 1647, 1647}, - // 670 - {1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 4579, 1646, 1646, 1646, 550: 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 563: 1646, 1646, 1646, 568: 1646, 1646, 1646, 1646, 1646, 574: 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 594: 1646, 1646, 1646, 1646, 1646, 1646, 602: 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 623: 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 634: 1646, 1646, 1646, 1646, 1646, 1646, 641: 1646, 646: 1646, 1646, 1646, 1646, 672: 1646, 718: 1646, 729: 1646, 733: 1646, 1646}, + {1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647}, + {1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646}, + // 675 {1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645, 1645}, {1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644, 1644}, {1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643}, {1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642, 1642}, - // 675 {1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641}, + // 680 {1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640}, {1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639}, {1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1638}, {1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637, 1637}, - // 680 {1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636}, + // 685 {1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635}, {1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634}, {1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633}, {1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632}, - // 685 {1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631, 1631}, - {1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630}, - {1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629}, + // 690 + {1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 4578, 1630, 1630, 1630, 550: 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 563: 1630, 1630, 1630, 568: 1630, 1630, 1630, 1630, 1630, 574: 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 594: 1630, 1630, 1630, 1630, 1630, 1630, 602: 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 623: 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 634: 1630, 1630, 1630, 1630, 1630, 1630, 642: 1630, 646: 1630, 1630, 1630, 1630, 672: 1630, 721: 1630, 729: 1630, 733: 1630, 1630}, + {1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 4570, 1629, 1629, 1629, 550: 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 563: 1629, 1629, 1629, 568: 1629, 1629, 1629, 1629, 1629, 574: 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 594: 1629, 1629, 1629, 1629, 1629, 1629, 602: 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 623: 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 634: 1629, 1629, 1629, 1629, 1629, 1629, 642: 1629, 646: 1629, 1629, 1629, 1629, 672: 1629, 721: 1629, 729: 1629, 733: 1629, 1629}, {1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628, 1628}, {1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627, 1627}, - // 690 - {1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 4559, 1626, 1626, 1626, 550: 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 563: 1626, 1626, 1626, 568: 1626, 1626, 1626, 1626, 1626, 574: 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 594: 1626, 1626, 1626, 1626, 1626, 1626, 602: 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 623: 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 634: 1626, 1626, 1626, 1626, 1626, 1626, 641: 1626, 646: 1626, 1626, 1626, 1626, 672: 1626, 718: 1626, 729: 1626, 733: 1626, 1626}, - {1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 4551, 1625, 1625, 1625, 550: 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 563: 1625, 1625, 1625, 568: 1625, 1625, 1625, 1625, 1625, 574: 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 594: 1625, 1625, 1625, 1625, 1625, 1625, 602: 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 623: 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 634: 1625, 1625, 1625, 1625, 1625, 1625, 641: 1625, 646: 1625, 1625, 1625, 1625, 672: 1625, 718: 1625, 729: 1625, 733: 1625, 1625}, + {1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626}, + // 695 + {1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625}, {1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624, 1624}, {1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623}, {1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622}, - // 695 {1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621}, + // 700 {1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620}, {1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619}, {1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618}, {1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617, 1617}, - // 700 {1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616}, + // 705 {1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615, 1615}, {1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614, 1614}, {1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613, 1613}, {1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612, 1612}, - // 705 {1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611, 1611}, + // 710 {1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610, 1610}, {1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609, 1609}, {1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608, 1608}, {1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607, 1607}, - // 710 {1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606}, + // 715 {1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605, 1605}, {1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604, 1604}, {1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603, 1603}, {1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602, 1602}, - // 715 {1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601}, + // 720 {1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600}, {1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599}, {1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598}, {1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597}, - // 720 {1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596}, + // 725 {1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595, 1595}, {1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594}, {1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593}, {1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592}, - // 725 {1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591, 1591}, + // 730 {1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590, 1590}, {1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589, 1589}, {1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588, 1588}, {1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587}, - // 730 {1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586, 1586}, - {1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585, 1585}, - {1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584, 1584}, - {1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583, 1583}, - {1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582}, // 735 - {1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 546: 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 563: 1546, 1546, 1546, 568: 1546, 1546, 1546, 1546, 1546, 574: 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 594: 1546, 1546, 1546, 1546, 1546, 1546, 602: 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 623: 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 634: 1546, 1546, 1546, 1546, 1546, 1546, 641: 1546, 646: 1546, 1546, 1546, 1546, 669: 1546, 672: 1546, 716: 1546, 1546, 1546, 1546, 1546, 1546, 1546}, - {1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 546: 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 563: 1545, 1545, 1545, 568: 1545, 1545, 1545, 1545, 1545, 574: 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 594: 1545, 1545, 1545, 1545, 1545, 1545, 602: 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 623: 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 634: 1545, 1545, 1545, 1545, 1545, 1545, 641: 1545, 646: 1545, 1545, 1545, 1545, 669: 1545, 672: 1545, 716: 1545, 1545, 1545, 1545, 1545, 1545, 1545}, - {1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 546: 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 563: 1544, 1544, 1544, 568: 1544, 1544, 1544, 1544, 1544, 574: 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 594: 1544, 1544, 1544, 1544, 1544, 1544, 602: 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 623: 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 634: 1544, 1544, 1544, 1544, 1544, 1544, 641: 1544, 646: 1544, 1544, 1544, 1544, 669: 1544, 672: 1544, 716: 1544, 1544, 1544, 1544, 1544, 1544, 1544}, - {1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 546: 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 563: 1543, 1543, 1543, 568: 1543, 1543, 1543, 1543, 1543, 574: 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 594: 1543, 1543, 1543, 1543, 1543, 1543, 602: 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 623: 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 634: 1543, 1543, 1543, 1543, 1543, 1543, 641: 1543, 646: 1543, 1543, 1543, 1543, 669: 1543, 672: 1543, 716: 1543, 1543, 1543, 1543, 1543, 1543, 1543}, - {1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 546: 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 563: 1542, 1542, 1542, 568: 1542, 1542, 1542, 1542, 1542, 574: 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 594: 1542, 1542, 1542, 1542, 1542, 1542, 602: 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 623: 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 634: 1542, 1542, 1542, 1542, 1542, 1542, 641: 1542, 646: 1542, 1542, 1542, 1542, 669: 1542, 672: 1542, 716: 1542, 1542, 1542, 1542, 1542, 1542, 1542}, + {1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 546: 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 563: 1550, 1550, 1550, 568: 1550, 1550, 1550, 1550, 1550, 574: 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 594: 1550, 1550, 1550, 1550, 1550, 1550, 602: 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 623: 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 1550, 634: 1550, 1550, 1550, 1550, 1550, 1550, 642: 1550, 646: 1550, 1550, 1550, 1550, 658: 1550, 672: 1550, 710: 1550, 717: 1550, 1550, 1550, 1550, 1550, 1550}, + {1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 546: 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 563: 1549, 1549, 1549, 568: 1549, 1549, 1549, 1549, 1549, 574: 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 594: 1549, 1549, 1549, 1549, 1549, 1549, 602: 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 623: 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 1549, 634: 1549, 1549, 1549, 1549, 1549, 1549, 642: 1549, 646: 1549, 1549, 1549, 1549, 658: 1549, 672: 1549, 710: 1549, 717: 1549, 1549, 1549, 1549, 1549, 1549}, + {1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 546: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 563: 1548, 1548, 1548, 568: 1548, 1548, 1548, 1548, 1548, 574: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 594: 1548, 1548, 1548, 1548, 1548, 1548, 602: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 623: 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 1548, 634: 1548, 1548, 1548, 1548, 1548, 1548, 642: 1548, 646: 1548, 1548, 1548, 1548, 658: 1548, 672: 1548, 710: 1548, 717: 1548, 1548, 1548, 1548, 1548, 1548}, + {1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 546: 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 563: 1547, 1547, 1547, 568: 1547, 1547, 1547, 1547, 1547, 574: 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 594: 1547, 1547, 1547, 1547, 1547, 1547, 602: 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 623: 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 634: 1547, 1547, 1547, 1547, 1547, 1547, 642: 1547, 646: 1547, 1547, 1547, 1547, 658: 1547, 672: 1547, 710: 1547, 717: 1547, 1547, 1547, 1547, 1547, 1547}, + {1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 546: 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 563: 1546, 1546, 1546, 568: 1546, 1546, 1546, 1546, 1546, 574: 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 594: 1546, 1546, 1546, 1546, 1546, 1546, 602: 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 623: 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 634: 1546, 1546, 1546, 1546, 1546, 1546, 642: 1546, 646: 1546, 1546, 1546, 1546, 658: 1546, 672: 1546, 710: 1546, 717: 1546, 1546, 1546, 1546, 1546, 1546}, // 740 - {1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 546: 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 563: 1541, 1541, 1541, 568: 1541, 1541, 1541, 1541, 1541, 574: 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 594: 1541, 1541, 1541, 1541, 1541, 1541, 602: 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 623: 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 634: 1541, 1541, 1541, 1541, 1541, 1541, 641: 1541, 646: 1541, 1541, 1541, 1541, 669: 1541, 672: 1541, 716: 1541, 1541, 1541, 1541, 1541, 1541, 1541}, - {1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 546: 1540, 4550, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 563: 1540, 1540, 1540, 568: 1540, 1540, 1540, 1540, 1540, 574: 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 594: 1540, 1540, 1540, 1540, 1540, 1540, 602: 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 623: 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 634: 1540, 1540, 1540, 1540, 1540, 1540, 641: 1540, 646: 1540, 1540, 1540, 1540, 669: 1540, 672: 1540, 716: 1540, 1540, 1540, 1540, 1540, 1540, 1540}, - {547: 4547, 652: 4548, 654: 4549}, - {1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 546: 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 563: 1538, 1538, 1538, 568: 1538, 1538, 1538, 1538, 1538, 574: 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 594: 1538, 1538, 1538, 1538, 1538, 1538, 602: 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 623: 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 634: 1538, 1538, 1538, 1538, 1538, 1538, 641: 1538, 646: 1538, 1538, 1538, 1538, 669: 1538, 672: 1538, 716: 1538, 1538, 1538, 1538, 1538, 1538, 1538}, - {1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 546: 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 563: 1537, 1537, 1537, 568: 1537, 1537, 1537, 1537, 1537, 574: 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 594: 1537, 1537, 1537, 1537, 1537, 1537, 602: 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 623: 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 634: 1537, 1537, 1537, 1537, 1537, 1537, 641: 1537, 646: 1537, 1537, 1537, 1537, 669: 1537, 672: 1537, 716: 1537, 1537, 1537, 1537, 1537, 1537, 1537}, + {1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 546: 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 563: 1545, 1545, 1545, 568: 1545, 1545, 1545, 1545, 1545, 574: 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 594: 1545, 1545, 1545, 1545, 1545, 1545, 602: 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 623: 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 1545, 634: 1545, 1545, 1545, 1545, 1545, 1545, 642: 1545, 646: 1545, 1545, 1545, 1545, 658: 1545, 672: 1545, 710: 1545, 717: 1545, 1545, 1545, 1545, 1545, 1545}, + {1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 546: 1544, 4569, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 563: 1544, 1544, 1544, 568: 1544, 1544, 1544, 1544, 1544, 574: 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 594: 1544, 1544, 1544, 1544, 1544, 1544, 602: 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 623: 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 1544, 634: 1544, 1544, 1544, 1544, 1544, 1544, 642: 1544, 646: 1544, 1544, 1544, 1544, 658: 1544, 672: 1544, 710: 1544, 717: 1544, 1544, 1544, 1544, 1544, 1544}, + {547: 4566, 652: 4567, 654: 4568}, + {1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 546: 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 563: 1542, 1542, 1542, 568: 1542, 1542, 1542, 1542, 1542, 574: 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 594: 1542, 1542, 1542, 1542, 1542, 1542, 602: 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 623: 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 634: 1542, 1542, 1542, 1542, 1542, 1542, 642: 1542, 646: 1542, 1542, 1542, 1542, 658: 1542, 672: 1542, 710: 1542, 717: 1542, 1542, 1542, 1542, 1542, 1542}, + {1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 546: 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 563: 1541, 1541, 1541, 568: 1541, 1541, 1541, 1541, 1541, 574: 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 594: 1541, 1541, 1541, 1541, 1541, 1541, 602: 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 623: 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 1541, 634: 1541, 1541, 1541, 1541, 1541, 1541, 642: 1541, 646: 1541, 1541, 1541, 1541, 658: 1541, 672: 1541, 710: 1541, 717: 1541, 1541, 1541, 1541, 1541, 1541}, // 745 - {1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 546: 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 563: 1534, 1534, 1534, 568: 1534, 1534, 1534, 1534, 1534, 574: 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 594: 1534, 1534, 1534, 1534, 1534, 1534, 602: 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 623: 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 634: 1534, 1534, 1534, 1534, 1534, 1534, 641: 1534, 646: 1534, 1534, 1534, 1534, 669: 1534, 672: 1534, 716: 1534, 1534, 1534, 1534, 1534, 1534, 1534}, - {1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 546: 1501, 1501, 1501, 550: 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 563: 1501, 1501, 1501, 568: 1501, 1501, 1501, 1501, 1501, 574: 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 594: 1501, 1501, 1501, 1501, 1501, 1501, 602: 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 623: 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 634: 1501, 1501, 1501, 1501, 1501, 1501, 641: 1501, 646: 1501, 1501, 1501, 1501, 672: 1501, 718: 1501, 729: 4542, 733: 1501, 1501}, - {1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 546: 1498, 1498, 1498, 550: 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 563: 1498, 1498, 1498, 568: 1498, 1498, 1498, 1498, 1498, 574: 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 594: 1498, 1498, 1498, 1498, 1498, 1498, 602: 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 623: 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 634: 1498, 1498, 1498, 1498, 1498, 1498, 641: 1498, 646: 1498, 1498, 1498, 1498, 672: 1498, 718: 1498, 733: 4538, 4539}, - {1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 546: 1497, 1497, 1497, 550: 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 563: 1497, 1497, 1497, 568: 1497, 1497, 1497, 1497, 1497, 574: 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 594: 1497, 1497, 1497, 1497, 1497, 1497, 602: 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 623: 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 634: 1497, 1497, 1497, 1497, 1497, 1497, 641: 1497, 646: 1497, 1497, 1497, 1497, 672: 1497, 718: 1497}, - {1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 546: 1496, 1496, 1496, 550: 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 563: 1496, 1496, 1496, 568: 1496, 1496, 1496, 1496, 1496, 574: 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 594: 1496, 1496, 1496, 1496, 1496, 1496, 602: 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 623: 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 634: 1496, 1496, 1496, 1496, 1496, 1496, 641: 1496, 646: 1496, 1496, 1496, 1496, 672: 1496, 718: 1496}, + {1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 546: 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 563: 1538, 1538, 1538, 568: 1538, 1538, 1538, 1538, 1538, 574: 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 594: 1538, 1538, 1538, 1538, 1538, 1538, 602: 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 623: 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 634: 1538, 1538, 1538, 1538, 1538, 1538, 642: 1538, 646: 1538, 1538, 1538, 1538, 658: 1538, 672: 1538, 710: 1538, 717: 1538, 1538, 1538, 1538, 1538, 1538}, + {1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 546: 1505, 1505, 1505, 550: 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 563: 1505, 1505, 1505, 568: 1505, 1505, 1505, 1505, 1505, 574: 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 594: 1505, 1505, 1505, 1505, 1505, 1505, 602: 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 623: 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 634: 1505, 1505, 1505, 1505, 1505, 1505, 642: 1505, 646: 1505, 1505, 1505, 1505, 672: 1505, 721: 1505, 729: 4561, 733: 1505, 1505}, + {1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 546: 1502, 1502, 1502, 550: 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 563: 1502, 1502, 1502, 568: 1502, 1502, 1502, 1502, 1502, 574: 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 594: 1502, 1502, 1502, 1502, 1502, 1502, 602: 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 623: 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 634: 1502, 1502, 1502, 1502, 1502, 1502, 642: 1502, 646: 1502, 1502, 1502, 1502, 672: 1502, 721: 1502, 733: 4557, 4558}, + {1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 546: 1501, 1501, 1501, 550: 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 563: 1501, 1501, 1501, 568: 1501, 1501, 1501, 1501, 1501, 574: 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 594: 1501, 1501, 1501, 1501, 1501, 1501, 602: 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 623: 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 634: 1501, 1501, 1501, 1501, 1501, 1501, 642: 1501, 646: 1501, 1501, 1501, 1501, 672: 1501, 721: 1501}, + {1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 546: 1500, 1500, 1500, 550: 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 563: 1500, 1500, 1500, 568: 1500, 1500, 1500, 1500, 1500, 574: 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 594: 1500, 1500, 1500, 1500, 1500, 1500, 602: 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 623: 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 634: 1500, 1500, 1500, 1500, 1500, 1500, 642: 1500, 646: 1500, 1500, 1500, 1500, 672: 1500, 721: 1500}, // 750 - {1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 546: 1495, 1495, 1495, 550: 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 563: 1495, 1495, 1495, 568: 1495, 1495, 1495, 1495, 1495, 574: 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 594: 1495, 1495, 1495, 1495, 1495, 1495, 602: 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 623: 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 634: 1495, 1495, 1495, 1495, 1495, 1495, 641: 1495, 646: 1495, 1495, 1495, 1495, 672: 1495, 718: 1495}, - {3, 3, 9: 3, 51: 3, 102: 3, 126: 3, 552: 3748, 672: 3, 718: 3749}, - {1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 546: 1493, 1493, 1493, 550: 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 563: 1493, 1493, 1493, 568: 1493, 1493, 1493, 1493, 1493, 574: 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 594: 1493, 1493, 1493, 1493, 1493, 1493, 602: 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 623: 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 634: 1493, 1493, 1493, 1493, 1493, 1493, 641: 1493, 646: 1493, 1493, 1493, 1493, 672: 1493, 718: 1493}, - {1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 546: 1492, 1492, 1492, 550: 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 563: 1492, 1492, 1492, 568: 1492, 1492, 1492, 1492, 1492, 574: 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 594: 1492, 1492, 1492, 1492, 1492, 1492, 602: 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 623: 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 634: 1492, 1492, 1492, 1492, 1492, 1492, 641: 1492, 646: 1492, 1492, 1492, 1492, 672: 1492, 718: 1492}, - {1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 546: 1491, 1491, 1491, 550: 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 563: 1491, 1491, 1491, 568: 1491, 1491, 1491, 1491, 1491, 574: 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 594: 1491, 1491, 1491, 1491, 1491, 1491, 602: 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 623: 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 634: 1491, 1491, 1491, 1491, 1491, 1491, 641: 1491, 646: 1491, 1491, 1491, 1491, 672: 1491, 718: 1491}, + {1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 546: 1499, 1499, 1499, 550: 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 563: 1499, 1499, 1499, 568: 1499, 1499, 1499, 1499, 1499, 574: 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 594: 1499, 1499, 1499, 1499, 1499, 1499, 602: 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 623: 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 634: 1499, 1499, 1499, 1499, 1499, 1499, 642: 1499, 646: 1499, 1499, 1499, 1499, 672: 1499, 721: 1499}, + {3, 3, 9: 3, 51: 3, 104: 3, 128: 3, 552: 3767, 672: 3, 721: 3768}, + {1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 546: 1497, 1497, 1497, 550: 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 563: 1497, 1497, 1497, 568: 1497, 1497, 1497, 1497, 1497, 574: 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 594: 1497, 1497, 1497, 1497, 1497, 1497, 602: 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 623: 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 634: 1497, 1497, 1497, 1497, 1497, 1497, 642: 1497, 646: 1497, 1497, 1497, 1497, 672: 1497, 721: 1497}, + {1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 546: 1496, 1496, 1496, 550: 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 563: 1496, 1496, 1496, 568: 1496, 1496, 1496, 1496, 1496, 574: 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 594: 1496, 1496, 1496, 1496, 1496, 1496, 602: 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 623: 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 634: 1496, 1496, 1496, 1496, 1496, 1496, 642: 1496, 646: 1496, 1496, 1496, 1496, 672: 1496, 721: 1496}, + {1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 546: 1495, 1495, 1495, 550: 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 563: 1495, 1495, 1495, 568: 1495, 1495, 1495, 1495, 1495, 574: 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 594: 1495, 1495, 1495, 1495, 1495, 1495, 602: 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 623: 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 1495, 634: 1495, 1495, 1495, 1495, 1495, 1495, 642: 1495, 646: 1495, 1495, 1495, 1495, 672: 1495, 721: 1495}, // 755 - {1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 546: 1490, 1490, 1490, 550: 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 563: 1490, 1490, 1490, 568: 1490, 1490, 1490, 1490, 1490, 574: 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 594: 1490, 1490, 1490, 1490, 1490, 1490, 602: 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 623: 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 634: 1490, 1490, 1490, 1490, 1490, 1490, 641: 1490, 646: 1490, 1490, 1490, 1490, 672: 1490, 718: 1490}, - {1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 546: 1489, 1489, 1489, 550: 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 563: 1489, 1489, 1489, 568: 1489, 1489, 1489, 1489, 1489, 574: 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 594: 1489, 1489, 1489, 1489, 1489, 1489, 602: 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 623: 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 634: 1489, 1489, 1489, 1489, 1489, 1489, 641: 1489, 646: 1489, 1489, 1489, 1489, 672: 1489, 718: 1489}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3671, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 4537, 3652, 3734, 3651, 3648}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3671, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 4536, 3652, 3734, 3651, 3648}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3671, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 4535, 3652, 3734, 3651, 3648}, + {1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 546: 1494, 1494, 1494, 550: 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 563: 1494, 1494, 1494, 568: 1494, 1494, 1494, 1494, 1494, 574: 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 594: 1494, 1494, 1494, 1494, 1494, 1494, 602: 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 623: 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 634: 1494, 1494, 1494, 1494, 1494, 1494, 642: 1494, 646: 1494, 1494, 1494, 1494, 672: 1494, 721: 1494}, + {1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 546: 1493, 1493, 1493, 550: 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 563: 1493, 1493, 1493, 568: 1493, 1493, 1493, 1493, 1493, 574: 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 594: 1493, 1493, 1493, 1493, 1493, 1493, 602: 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 623: 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 634: 1493, 1493, 1493, 1493, 1493, 1493, 642: 1493, 646: 1493, 1493, 1493, 1493, 672: 1493, 721: 1493}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3690, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 4556, 3671, 3753, 3670, 3667}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3690, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 4555, 3671, 3753, 3670, 3667}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3690, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 4554, 3671, 3753, 3670, 3667}, // 760 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3671, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 4534, 3652, 3734, 3651, 3648}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3671, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 4533, 3652, 3734, 3651, 3648}, - {1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 546: 1482, 1482, 1482, 550: 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 563: 1482, 1482, 1482, 568: 1482, 1482, 1482, 1482, 1482, 574: 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 594: 1482, 1482, 1482, 1482, 1482, 1482, 602: 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 623: 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 634: 1482, 1482, 1482, 1482, 1482, 1482, 641: 1482, 646: 1482, 1482, 1482, 1482, 672: 1482, 718: 1482}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 2948, 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3901, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 622: 2946, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 670: 2942, 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3900, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4527, 821: 3903, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 3902, 3905, 3904, 874: 4528}, - {545: 4522}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3690, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 4553, 3671, 3753, 3670, 3667}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3690, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 4552, 3671, 3753, 3670, 3667}, + {1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 546: 1486, 1486, 1486, 550: 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 563: 1486, 1486, 1486, 568: 1486, 1486, 1486, 1486, 1486, 574: 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 594: 1486, 1486, 1486, 1486, 1486, 1486, 602: 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 623: 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 634: 1486, 1486, 1486, 1486, 1486, 1486, 642: 1486, 646: 1486, 1486, 1486, 1486, 672: 1486, 721: 1486}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 2967, 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3920, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 622: 2965, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 2961, 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3919, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4546, 821: 3922, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 3921, 3924, 3923, 874: 4547}, + {545: 4541}, // 765 - {545: 2949, 790: 4521}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4518, 3092, 3093, 3091}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3671, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 4517, 3652, 3734, 3651, 3648}, - {545: 4510}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 603: 1298, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4497, 1371: 4498}, + {545: 2968, 790: 4540}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4537, 3111, 3112, 3110}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3690, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 4536, 3671, 3753, 3670, 3667}, + {545: 4529}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 603: 1302, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4516, 1375: 4517}, // 770 - {545: 4431}, - {545: 3956}, - {545: 3945}, + {545: 4450}, + {545: 3975}, + {545: 3964}, + {545: 1454}, + {545: 1451}, + // 775 {545: 1450}, {545: 1447}, - // 775 - {545: 1446}, {545: 1443}, + {545: 1440}, {545: 1439}, - {545: 1436}, - {545: 1435}, // 780 - {545: 1433}, - {1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 550: 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 563: 1422, 1422, 1422, 568: 1422, 1422, 1422, 1422, 1422, 574: 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 594: 1422, 1422, 1422, 1422, 1422, 1422, 602: 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 623: 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 634: 1422, 1422, 1422, 1422, 1422, 1422, 641: 1422, 646: 1422, 1422, 1422, 1422, 672: 1422, 718: 1422}, - {1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 550: 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 563: 1421, 1421, 1421, 568: 1421, 1421, 1421, 1421, 1421, 574: 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 594: 1421, 1421, 1421, 1421, 1421, 1421, 602: 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 623: 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 634: 1421, 1421, 1421, 1421, 1421, 1421, 641: 1421, 646: 1421, 1421, 1421, 1421, 672: 1421, 718: 1421}, - {1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 550: 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 563: 1420, 1420, 1420, 568: 1420, 1420, 1420, 1420, 1420, 574: 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 594: 1420, 1420, 1420, 1420, 1420, 1420, 602: 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 623: 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 634: 1420, 1420, 1420, 1420, 1420, 1420, 641: 1420, 646: 1420, 1420, 1420, 1420, 672: 1420, 718: 1420}, - {1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 550: 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 563: 1419, 1419, 1419, 568: 1419, 1419, 1419, 1419, 1419, 574: 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 594: 1419, 1419, 1419, 1419, 1419, 1419, 602: 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 623: 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 634: 1419, 1419, 1419, 1419, 1419, 1419, 641: 1419, 646: 1419, 1419, 1419, 1419, 672: 1419, 718: 1419}, + {545: 1437}, + {1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 550: 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 563: 1426, 1426, 1426, 568: 1426, 1426, 1426, 1426, 1426, 574: 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 594: 1426, 1426, 1426, 1426, 1426, 1426, 602: 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 623: 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 634: 1426, 1426, 1426, 1426, 1426, 1426, 642: 1426, 646: 1426, 1426, 1426, 1426, 672: 1426, 721: 1426}, + {1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 550: 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 563: 1425, 1425, 1425, 568: 1425, 1425, 1425, 1425, 1425, 574: 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 594: 1425, 1425, 1425, 1425, 1425, 1425, 602: 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 623: 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 1425, 634: 1425, 1425, 1425, 1425, 1425, 1425, 642: 1425, 646: 1425, 1425, 1425, 1425, 672: 1425, 721: 1425}, + {1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 550: 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 563: 1424, 1424, 1424, 568: 1424, 1424, 1424, 1424, 1424, 574: 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 594: 1424, 1424, 1424, 1424, 1424, 1424, 602: 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 623: 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 634: 1424, 1424, 1424, 1424, 1424, 1424, 642: 1424, 646: 1424, 1424, 1424, 1424, 672: 1424, 721: 1424}, + {1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 550: 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 563: 1423, 1423, 1423, 568: 1423, 1423, 1423, 1423, 1423, 574: 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 594: 1423, 1423, 1423, 1423, 1423, 1423, 602: 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 623: 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 634: 1423, 1423, 1423, 1423, 1423, 1423, 642: 1423, 646: 1423, 1423, 1423, 1423, 672: 1423, 721: 1423}, // 785 - {1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 550: 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 563: 1418, 1418, 1418, 568: 1418, 1418, 1418, 1418, 1418, 574: 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 594: 1418, 1418, 1418, 1418, 1418, 1418, 602: 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 623: 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 634: 1418, 1418, 1418, 1418, 1418, 1418, 641: 1418, 646: 1418, 1418, 1418, 1418, 672: 1418, 718: 1418}, - {1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 550: 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 563: 1417, 1417, 1417, 568: 1417, 1417, 1417, 1417, 1417, 574: 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 594: 1417, 1417, 1417, 1417, 1417, 1417, 602: 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 623: 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 634: 1417, 1417, 1417, 1417, 1417, 1417, 641: 1417, 646: 1417, 1417, 1417, 1417, 672: 1417, 718: 1417}, - {1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 550: 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 563: 1416, 1416, 1416, 568: 1416, 1416, 1416, 1416, 1416, 574: 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 594: 1416, 1416, 1416, 1416, 1416, 1416, 602: 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 623: 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 634: 1416, 1416, 1416, 1416, 1416, 1416, 641: 1416, 646: 1416, 1416, 1416, 1416, 672: 1416, 718: 1416}, - {1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 550: 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 563: 1415, 1415, 1415, 568: 1415, 1415, 1415, 1415, 1415, 574: 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 594: 1415, 1415, 1415, 1415, 1415, 1415, 602: 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 623: 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 634: 1415, 1415, 1415, 1415, 1415, 1415, 641: 1415, 646: 1415, 1415, 1415, 1415, 672: 1415, 718: 1415}, - {1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 550: 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 563: 1414, 1414, 1414, 568: 1414, 1414, 1414, 1414, 1414, 574: 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 594: 1414, 1414, 1414, 1414, 1414, 1414, 602: 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 623: 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 634: 1414, 1414, 1414, 1414, 1414, 1414, 641: 1414, 646: 1414, 1414, 1414, 1414, 672: 1414, 718: 1414}, + {1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 550: 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 563: 1422, 1422, 1422, 568: 1422, 1422, 1422, 1422, 1422, 574: 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 594: 1422, 1422, 1422, 1422, 1422, 1422, 602: 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 623: 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 634: 1422, 1422, 1422, 1422, 1422, 1422, 642: 1422, 646: 1422, 1422, 1422, 1422, 672: 1422, 721: 1422}, + {1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 550: 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 563: 1421, 1421, 1421, 568: 1421, 1421, 1421, 1421, 1421, 574: 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 594: 1421, 1421, 1421, 1421, 1421, 1421, 602: 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 623: 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 634: 1421, 1421, 1421, 1421, 1421, 1421, 642: 1421, 646: 1421, 1421, 1421, 1421, 672: 1421, 721: 1421}, + {1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 550: 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 563: 1420, 1420, 1420, 568: 1420, 1420, 1420, 1420, 1420, 574: 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 594: 1420, 1420, 1420, 1420, 1420, 1420, 602: 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 623: 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1420, 634: 1420, 1420, 1420, 1420, 1420, 1420, 642: 1420, 646: 1420, 1420, 1420, 1420, 672: 1420, 721: 1420}, + {1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 550: 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 563: 1419, 1419, 1419, 568: 1419, 1419, 1419, 1419, 1419, 574: 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 594: 1419, 1419, 1419, 1419, 1419, 1419, 602: 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 623: 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 634: 1419, 1419, 1419, 1419, 1419, 1419, 642: 1419, 646: 1419, 1419, 1419, 1419, 672: 1419, 721: 1419}, + {1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 550: 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 563: 1418, 1418, 1418, 568: 1418, 1418, 1418, 1418, 1418, 574: 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 594: 1418, 1418, 1418, 1418, 1418, 1418, 602: 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 623: 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 634: 1418, 1418, 1418, 1418, 1418, 1418, 642: 1418, 646: 1418, 1418, 1418, 1418, 672: 1418, 721: 1418}, // 790 - {1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 550: 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 563: 1413, 1413, 1413, 568: 1413, 1413, 1413, 1413, 1413, 574: 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 594: 1413, 1413, 1413, 1413, 1413, 1413, 602: 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 623: 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 634: 1413, 1413, 1413, 1413, 1413, 1413, 641: 1413, 646: 1413, 1413, 1413, 1413, 672: 1413, 718: 1413}, - {1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 550: 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 563: 1412, 1412, 1412, 568: 1412, 1412, 1412, 1412, 1412, 574: 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 594: 1412, 1412, 1412, 1412, 1412, 1412, 602: 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 623: 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 634: 1412, 1412, 1412, 1412, 1412, 1412, 641: 1412, 646: 1412, 1412, 1412, 1412, 672: 1412, 718: 1412}, - {545: 4428}, - {545: 4425}, - {1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 4422, 1424, 1424, 1424, 550: 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 563: 1424, 1424, 1424, 568: 1424, 1424, 1424, 1424, 1424, 574: 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 594: 1424, 1424, 1424, 1424, 1424, 1424, 602: 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 623: 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 634: 1424, 1424, 1424, 1424, 1424, 1424, 641: 1424, 646: 1424, 1424, 1424, 1424, 672: 1424, 718: 1424, 1240: 4423}, + {1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 550: 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 563: 1417, 1417, 1417, 568: 1417, 1417, 1417, 1417, 1417, 574: 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 594: 1417, 1417, 1417, 1417, 1417, 1417, 602: 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 623: 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 634: 1417, 1417, 1417, 1417, 1417, 1417, 642: 1417, 646: 1417, 1417, 1417, 1417, 672: 1417, 721: 1417}, + {1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 550: 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 563: 1416, 1416, 1416, 568: 1416, 1416, 1416, 1416, 1416, 574: 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 594: 1416, 1416, 1416, 1416, 1416, 1416, 602: 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 623: 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 634: 1416, 1416, 1416, 1416, 1416, 1416, 642: 1416, 646: 1416, 1416, 1416, 1416, 672: 1416, 721: 1416}, + {545: 4447}, + {545: 4444}, + {1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 4441, 1428, 1428, 1428, 550: 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 563: 1428, 1428, 1428, 568: 1428, 1428, 1428, 1428, 1428, 574: 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 594: 1428, 1428, 1428, 1428, 1428, 1428, 602: 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 623: 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 634: 1428, 1428, 1428, 1428, 1428, 1428, 642: 1428, 646: 1428, 1428, 1428, 1428, 672: 1428, 721: 1428, 1242: 4442}, // 795 - {545: 4420}, - {1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 4416, 1330, 1330, 1330, 550: 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 563: 1330, 1330, 1330, 568: 1330, 1330, 1330, 1330, 1330, 574: 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 594: 1330, 1330, 1330, 1330, 1330, 1330, 602: 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 623: 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 634: 1330, 1330, 1330, 1330, 1330, 1330, 641: 1330, 646: 1330, 1330, 1330, 1330, 672: 1330, 718: 1330, 1382: 4415}, - {545: 4407}, - {545: 4403}, - {545: 4398}, + {545: 4439}, + {1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 4435, 1334, 1334, 1334, 550: 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 563: 1334, 1334, 1334, 568: 1334, 1334, 1334, 1334, 1334, 574: 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 594: 1334, 1334, 1334, 1334, 1334, 1334, 602: 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 623: 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 634: 1334, 1334, 1334, 1334, 1334, 1334, 642: 1334, 646: 1334, 1334, 1334, 1334, 672: 1334, 721: 1334, 1386: 4434}, + {545: 4426}, + {545: 4422}, + {545: 4417}, // 800 - {545: 4395}, - {545: 4390}, - {545: 4381}, - {545: 4374}, - {545: 4369}, + {545: 4414}, + {545: 4409}, + {545: 4400}, + {545: 4393}, + {545: 4388}, // 805 - {545: 4364}, - {545: 4350}, - {545: 4333}, - {1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 546: 1377, 1377, 1377, 550: 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 563: 1377, 1377, 1377, 568: 1377, 1377, 1377, 1377, 1377, 574: 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 594: 1377, 1377, 1377, 1377, 1377, 1377, 602: 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 623: 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 634: 1377, 1377, 1377, 1377, 1377, 1377, 641: 1377, 646: 1377, 1377, 1377, 1377, 672: 1377, 718: 1377}, - {545: 4326}, + {545: 4383}, + {545: 4369}, + {545: 4352}, + {1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 546: 1381, 1381, 1381, 550: 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 563: 1381, 1381, 1381, 568: 1381, 1381, 1381, 1381, 1381, 574: 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 594: 1381, 1381, 1381, 1381, 1381, 1381, 602: 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 623: 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 634: 1381, 1381, 1381, 1381, 1381, 1381, 642: 1381, 646: 1381, 1381, 1381, 1381, 672: 1381, 721: 1381}, + {545: 4345}, // 810 - {545: 1371}, - {545: 1370}, - {1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 546: 1362, 1362, 1362, 550: 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 563: 1362, 1362, 1362, 568: 1362, 1362, 1362, 1362, 1362, 574: 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 594: 1362, 1362, 1362, 1362, 1362, 1362, 602: 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 623: 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 634: 1362, 1362, 1362, 1362, 1362, 1362, 641: 1362, 646: 1362, 1362, 1362, 1362, 672: 1362, 718: 1362}, - {545: 4323}, - {545: 4320}, + {545: 1375}, + {545: 1374}, + {1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 546: 1366, 1366, 1366, 550: 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 563: 1366, 1366, 1366, 568: 1366, 1366, 1366, 1366, 1366, 574: 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 594: 1366, 1366, 1366, 1366, 1366, 1366, 602: 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 623: 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 634: 1366, 1366, 1366, 1366, 1366, 1366, 642: 1366, 646: 1366, 1366, 1366, 1366, 672: 1366, 721: 1366}, + {545: 4342}, + {545: 4339}, // 815 - {545: 4312}, - {545: 4304}, - {545: 4296}, - {545: 4282}, - {545: 4273}, + {545: 4331}, + {545: 4323}, + {545: 4315}, + {545: 4301}, + {545: 4292}, // 820 - {545: 4268}, - {545: 4263}, - {545: 4258}, - {545: 4253}, - {545: 4248}, + {545: 4287}, + {545: 4282}, + {545: 4277}, + {545: 4272}, + {545: 4267}, // 825 + {545: 4262}, + {545: 4249}, + {545: 4246}, {545: 4243}, + {545: 4240}, + // 830 + {545: 4237}, + {545: 4234}, {545: 4230}, - {545: 4227}, {545: 4224}, - {545: 4221}, - // 830 - {545: 4218}, - {545: 4215}, {545: 4211}, - {545: 4205}, - {545: 4192}, // 835 - {545: 4187}, - {545: 4182}, - {545: 3738}, - {965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 546: 965, 965, 965, 550: 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 563: 965, 965, 965, 568: 965, 965, 965, 965, 965, 574: 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 594: 965, 965, 965, 965, 965, 965, 602: 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 623: 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 634: 965, 965, 965, 965, 965, 965, 641: 965, 646: 965, 965, 965, 965, 672: 965, 718: 965}, - {964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 546: 964, 964, 964, 550: 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 563: 964, 964, 964, 568: 964, 964, 964, 964, 964, 574: 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 594: 964, 964, 964, 964, 964, 964, 602: 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 623: 964, 964, 964, 964, 964, 964, 964, 964, 964, 964, 634: 964, 964, 964, 964, 964, 964, 641: 964, 646: 964, 964, 964, 964, 672: 964, 718: 964}, + {545: 4206}, + {545: 4201}, + {545: 3757}, + {969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 546: 969, 969, 969, 550: 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 563: 969, 969, 969, 568: 969, 969, 969, 969, 969, 574: 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 594: 969, 969, 969, 969, 969, 969, 602: 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 623: 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 634: 969, 969, 969, 969, 969, 969, 642: 969, 646: 969, 969, 969, 969, 672: 969, 721: 969}, + {968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 546: 968, 968, 968, 550: 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 563: 968, 968, 968, 568: 968, 968, 968, 968, 968, 574: 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 594: 968, 968, 968, 968, 968, 968, 602: 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 623: 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 634: 968, 968, 968, 968, 968, 968, 642: 968, 646: 968, 968, 968, 968, 672: 968, 721: 968}, // 840 - {963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 546: 963, 963, 963, 550: 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 563: 963, 963, 963, 568: 963, 963, 963, 963, 963, 574: 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 594: 963, 963, 963, 963, 963, 963, 602: 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 623: 963, 963, 963, 963, 963, 963, 963, 963, 963, 963, 634: 963, 963, 963, 963, 963, 963, 641: 963, 646: 963, 963, 963, 963, 672: 963, 718: 963}, - {962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 546: 962, 962, 962, 550: 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 563: 962, 962, 962, 568: 962, 962, 962, 962, 962, 574: 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 594: 962, 962, 962, 962, 962, 962, 602: 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 623: 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 634: 962, 962, 962, 962, 962, 962, 641: 962, 646: 962, 962, 962, 962, 672: 962, 718: 962}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3740}, - {962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 546: 962, 962, 962, 550: 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 563: 962, 962, 962, 568: 962, 962, 962, 962, 962, 574: 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 594: 962, 962, 962, 962, 962, 962, 602: 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 623: 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 634: 962, 962, 962, 962, 962, 962, 641: 962, 646: 962, 962, 962, 962, 718: 962, 732: 4180}, - {9: 4111, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, + {967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 546: 967, 967, 967, 550: 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 563: 967, 967, 967, 568: 967, 967, 967, 967, 967, 574: 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 594: 967, 967, 967, 967, 967, 967, 602: 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 623: 967, 967, 967, 967, 967, 967, 967, 967, 967, 967, 634: 967, 967, 967, 967, 967, 967, 642: 967, 646: 967, 967, 967, 967, 672: 967, 721: 967}, + {966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 546: 966, 966, 966, 550: 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 563: 966, 966, 966, 568: 966, 966, 966, 966, 966, 574: 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 594: 966, 966, 966, 966, 966, 966, 602: 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 623: 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 634: 966, 966, 966, 966, 966, 966, 642: 966, 646: 966, 966, 966, 966, 672: 966, 721: 966}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3759}, + {966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 546: 966, 966, 966, 550: 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 563: 966, 966, 966, 568: 966, 966, 966, 966, 966, 574: 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 594: 966, 966, 966, 966, 966, 966, 602: 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 623: 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 634: 966, 966, 966, 966, 966, 966, 642: 966, 646: 966, 966, 966, 966, 721: 966, 732: 4199}, + {9: 4130, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, // 845 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4110}, - {545: 4082}, - {2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 546: 2238, 2238, 551: 2238, 553: 2238, 2238, 2238, 2238, 563: 2238, 2238, 2238, 568: 2238, 4065, 2238, 2238, 2238, 574: 2238, 576: 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 594: 2238, 2238, 2238, 598: 2238, 2238, 602: 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 2238, 621: 2238, 624: 4062, 4060, 634: 4059, 4067, 4061, 4063, 4064, 4066, 1353: 4058, 1397: 4057}, - {2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 546: 2209, 2209, 551: 2209, 553: 2209, 2209, 2209, 2209, 563: 2209, 2209, 2209, 568: 2209, 2209, 2209, 2209, 2209, 574: 2209, 576: 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 594: 2209, 2209, 2209, 598: 2209, 2209, 602: 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 621: 2209, 624: 2209, 2209, 634: 2209, 2209, 2209, 2209, 2209, 2209}, - {2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 546: 2178, 2178, 3868, 550: 3867, 2178, 553: 2178, 2178, 2178, 2178, 3838, 3839, 3844, 563: 2178, 2178, 2178, 568: 2178, 2178, 2178, 2178, 2178, 574: 2178, 3840, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 594: 2178, 2178, 2178, 3872, 2178, 2178, 602: 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 2178, 3871, 2178, 623: 3841, 2178, 2178, 3842, 3835, 3845, 3834, 3843, 3836, 3837, 634: 2178, 2178, 2178, 2178, 2178, 2178, 641: 3869, 646: 3873, 3881, 3882, 3880, 932: 3870, 1266: 3874, 1341: 3876, 1387: 3878, 1393: 3875, 1399: 3877, 1454: 3879}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4129}, + {545: 4101}, + {2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 546: 2244, 2244, 551: 2244, 553: 2244, 2244, 2244, 2244, 563: 2244, 2244, 2244, 568: 2244, 4084, 2244, 2244, 2244, 574: 2244, 576: 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 594: 2244, 2244, 2244, 598: 2244, 2244, 602: 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 621: 2244, 624: 4081, 4079, 634: 4078, 4086, 4080, 4082, 4083, 4085, 1357: 4077, 1402: 4076}, + {2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 546: 2215, 2215, 551: 2215, 553: 2215, 2215, 2215, 2215, 563: 2215, 2215, 2215, 568: 2215, 2215, 2215, 2215, 2215, 574: 2215, 576: 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 594: 2215, 2215, 2215, 598: 2215, 2215, 602: 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 2215, 621: 2215, 624: 2215, 2215, 634: 2215, 2215, 2215, 2215, 2215, 2215}, + {2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 546: 2184, 2184, 3887, 550: 3886, 2184, 553: 2184, 2184, 2184, 2184, 3857, 3858, 3863, 563: 2184, 2184, 2184, 568: 2184, 2184, 2184, 2184, 2184, 574: 2184, 3859, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 594: 2184, 2184, 2184, 3891, 2184, 2184, 602: 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 3890, 2184, 623: 3860, 2184, 2184, 3861, 3854, 3864, 3853, 3862, 3855, 3856, 634: 2184, 2184, 2184, 2184, 2184, 2184, 642: 3888, 646: 3892, 3900, 3901, 3899, 932: 3889, 1268: 3893, 1345: 3895, 1392: 3897, 1398: 3894, 1404: 3896, 1459: 3898}, // 850 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 1446, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3794}, - {1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 546: 1502, 1502, 1502, 550: 1502, 1502, 3748, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 563: 1502, 1502, 1502, 568: 1502, 1502, 1502, 1502, 1502, 574: 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 594: 1502, 1502, 1502, 1502, 1502, 1502, 602: 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 623: 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 1502, 634: 1502, 1502, 1502, 1502, 1502, 1502, 641: 1502, 646: 1502, 1502, 1502, 1502, 718: 3749}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 600: 3791, 786: 3793, 3092, 3093, 3091, 820: 3790, 991: 3789}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3671, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3750, 3652, 3734, 3651, 3648}, - {1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 546: 1484, 1484, 1484, 550: 1484, 1484, 3748, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 563: 1484, 1484, 1484, 568: 1484, 1484, 1484, 1484, 1484, 574: 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 594: 1484, 1484, 1484, 1484, 1484, 1484, 602: 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 623: 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 634: 1484, 1484, 1484, 1484, 1484, 1484, 641: 1484, 646: 1484, 1484, 1484, 1484, 672: 1484, 718: 1484}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 1450, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3813}, + {1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 546: 1506, 1506, 1506, 550: 1506, 1506, 3767, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 563: 1506, 1506, 1506, 568: 1506, 1506, 1506, 1506, 1506, 574: 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 594: 1506, 1506, 1506, 1506, 1506, 1506, 602: 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 623: 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 634: 1506, 1506, 1506, 1506, 1506, 1506, 642: 1506, 646: 1506, 1506, 1506, 1506, 721: 3768}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 600: 3810, 786: 3812, 3111, 3112, 3110, 820: 3809, 991: 3808}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3690, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3769, 3671, 3753, 3670, 3667}, + {1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 546: 1488, 1488, 1488, 550: 1488, 1488, 3767, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 563: 1488, 1488, 1488, 568: 1488, 1488, 1488, 1488, 1488, 574: 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 594: 1488, 1488, 1488, 1488, 1488, 1488, 602: 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 623: 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 634: 1488, 1488, 1488, 1488, 1488, 1488, 642: 1488, 646: 1488, 1488, 1488, 1488, 672: 1488, 721: 1488}, // 855 - {2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124}, - {2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118, 2118}, - {2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106, 2106}, - {2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093, 2093}, - {2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082, 2082}, + {2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128}, + {2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122, 2122}, + {2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110, 2110}, + {2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097, 2097}, + {2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086, 2086}, // 860 - {2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080, 2080}, - {2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057}, - {2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051, 2051}, - {2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041, 2041}, - {2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020, 2020}, + {2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084, 2084}, + {2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061}, + {2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055, 2055}, + {2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045, 2045}, + {2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024, 2024}, // 865 + {2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2017}, + {2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016}, {2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013, 2013}, - {2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012}, - {2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009}, - {2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002}, - {2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000}, + {2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006}, + {2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004}, // 870 - {1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999, 1999}, - {1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996, 1996}, - {1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994, 1994}, - {1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981, 1981}, - {1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958, 1958}, + {2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003}, + {2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000}, + {1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998}, + {1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985}, + {1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962, 1962}, // 875 - {1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941, 1941}, - {1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940, 1940}, + {1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945, 1945}, + {1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944, 1944}, + {1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943, 1943}, {1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939, 1939}, - {1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1935}, - {1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934, 1934}, + {1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938, 1938}, // 880 - {1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928, 1928}, - {1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816, 1816}, - {1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815, 1815}, - {1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814, 1814}, - {1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813, 1813}, + {1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932, 1932}, + {1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820, 1820}, + {1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819, 1819}, + {1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818, 1818}, + {1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817}, // 885 - {1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698, 1698}, - {1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679, 1679}, - {1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674}, - {1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660}, - {1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647, 1647}, + {1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702, 1702}, + {1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1683}, + {1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678, 1678}, + {1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664}, + {1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651}, // 890 - {1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646}, - {1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626, 1626}, - {1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625, 1625}, - {1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 546: 1494, 1494, 1494, 550: 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 563: 1494, 1494, 1494, 568: 1494, 1494, 1494, 1494, 1494, 574: 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 594: 1494, 1494, 1494, 1494, 1494, 1494, 602: 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 623: 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 1494, 634: 1494, 1494, 1494, 1494, 1494, 1494, 641: 1494, 646: 1494, 1494, 1494, 1494, 672: 1494, 718: 1494}, - {969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 574: 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 594: 969, 969, 969, 969, 969, 969, 602: 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 969, 634: 969, 969, 969, 969, 969, 969, 641: 969, 646: 969, 969, 969, 969, 669: 969, 969, 672: 969, 716: 969, 969, 969, 969, 969, 969, 969, 969, 969}, + {1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650, 1650}, + {1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630, 1630}, + {1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629, 1629}, + {1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 546: 1498, 1498, 1498, 550: 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 563: 1498, 1498, 1498, 568: 1498, 1498, 1498, 1498, 1498, 574: 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 594: 1498, 1498, 1498, 1498, 1498, 1498, 602: 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 623: 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 634: 1498, 1498, 1498, 1498, 1498, 1498, 642: 1498, 646: 1498, 1498, 1498, 1498, 672: 1498, 721: 1498}, + {973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 574: 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 594: 973, 973, 973, 973, 973, 973, 602: 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, 634: 973, 973, 973, 973, 973, 973, 642: 973, 646: 973, 973, 973, 973, 658: 973, 662: 973, 672: 973, 710: 973, 717: 973, 973, 973, 973, 973, 973, 973, 973}, // 895 - {968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 574: 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 594: 968, 968, 968, 968, 968, 968, 602: 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 968, 634: 968, 968, 968, 968, 968, 968, 641: 968, 646: 968, 968, 968, 968, 669: 968, 968, 672: 968, 716: 968, 968, 968, 968, 968, 968, 968, 968, 968}, - {443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 574: 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 594: 443, 443, 443, 443, 443, 443, 443, 602: 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 634: 443, 443, 443, 443, 443, 443, 641: 443, 643: 443, 646: 443, 443, 443, 443, 669: 443, 443, 672: 443, 716: 443, 443, 443, 443, 443, 443, 443, 443, 443, 726: 443, 443, 731: 443, 443, 736: 443, 443, 739: 443, 443}, - {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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 442, 442, 442, 442, 442, 442, 442, 442, 442, 574: 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, 594: 442, 442, 442, 442, 442, 442, 442, 602: 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, 634: 442, 442, 442, 442, 442, 442, 641: 442, 643: 442, 646: 442, 442, 442, 442, 669: 442, 442, 672: 442, 716: 442, 442, 442, 442, 442, 442, 442, 442, 442, 726: 442, 442, 731: 442, 442, 736: 442, 442, 739: 442, 442}, - {127: 3823, 136: 3831, 143: 3819, 147: 3816, 149: 3818, 3815, 3817, 3821, 3822, 3827, 3826, 3825, 3829, 3830, 3824, 3828, 3820, 581: 3801, 3799, 3800, 3798, 3796, 608: 3813, 3810, 3812, 3811, 3807, 3809, 3808, 3805, 3806, 3804, 3814, 815: 3797, 3795, 902: 3803, 916: 3802}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3866}, + {972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 574: 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 594: 972, 972, 972, 972, 972, 972, 602: 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, 634: 972, 972, 972, 972, 972, 972, 642: 972, 646: 972, 972, 972, 972, 658: 972, 662: 972, 672: 972, 710: 972, 717: 972, 972, 972, 972, 972, 972, 972, 972}, + {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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 447, 574: 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, 594: 447, 447, 447, 447, 447, 447, 447, 602: 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, 447, 447, 447, 447, 447, 634: 447, 447, 447, 447, 447, 447, 641: 447, 447, 646: 447, 447, 447, 447, 658: 447, 662: 447, 672: 447, 710: 447, 717: 447, 447, 447, 447, 447, 447, 447, 447, 727: 447, 447, 731: 447, 447, 736: 447, 447, 739: 447, 447}, + {446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 574: 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 594: 446, 446, 446, 446, 446, 446, 446, 602: 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, 634: 446, 446, 446, 446, 446, 446, 641: 446, 446, 646: 446, 446, 446, 446, 658: 446, 662: 446, 672: 446, 710: 446, 717: 446, 446, 446, 446, 446, 446, 446, 446, 727: 446, 446, 731: 446, 446, 736: 446, 446, 739: 446, 446}, + {129: 3842, 138: 3850, 145: 3838, 149: 3835, 151: 3837, 3834, 3836, 3840, 3841, 3846, 3845, 3844, 3848, 3849, 3843, 3847, 3839, 581: 3820, 3818, 3819, 3817, 3815, 608: 3832, 3829, 3831, 3830, 3826, 3828, 3827, 3824, 3825, 3823, 3833, 815: 3816, 3814, 902: 3822, 916: 3821}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3885}, // 900 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3865}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3864}, - {2: 2228, 2228, 2228, 2228, 2228, 2228, 2228, 10: 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 53: 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 545: 2228, 547: 2228, 2228, 2228, 2228, 554: 2228, 2228, 557: 2228, 2228, 2228, 561: 2228, 2228, 566: 2228, 2228, 573: 2228, 593: 2228, 600: 2228, 2228, 633: 2228, 640: 2228, 642: 2228, 2228, 2228, 2228, 650: 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 671: 2228, 673: 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 2228, 725: 2228}, - {2: 2227, 2227, 2227, 2227, 2227, 2227, 2227, 10: 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 53: 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 545: 2227, 547: 2227, 2227, 2227, 2227, 554: 2227, 2227, 557: 2227, 2227, 2227, 561: 2227, 2227, 566: 2227, 2227, 573: 2227, 593: 2227, 600: 2227, 2227, 633: 2227, 640: 2227, 642: 2227, 2227, 2227, 2227, 650: 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 671: 2227, 673: 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 2227, 725: 2227}, - {2: 2226, 2226, 2226, 2226, 2226, 2226, 2226, 10: 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 53: 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 545: 2226, 547: 2226, 2226, 2226, 2226, 554: 2226, 2226, 557: 2226, 2226, 2226, 561: 2226, 2226, 566: 2226, 2226, 573: 2226, 593: 2226, 600: 2226, 2226, 633: 2226, 640: 2226, 642: 2226, 2226, 2226, 2226, 650: 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 671: 2226, 673: 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 2226, 725: 2226}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3884}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3883}, + {2: 2234, 2234, 2234, 2234, 2234, 2234, 2234, 10: 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 53: 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 545: 2234, 547: 2234, 2234, 2234, 2234, 554: 2234, 2234, 557: 2234, 2234, 2234, 561: 2234, 2234, 566: 2234, 2234, 573: 2234, 593: 2234, 600: 2234, 2234, 633: 2234, 640: 2234, 2234, 643: 2234, 2234, 2234, 650: 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 659: 2234, 2234, 2234, 663: 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 673: 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 2234, 711: 2234, 2234, 2234, 2234, 2234, 2234, 725: 2234}, + {2: 2233, 2233, 2233, 2233, 2233, 2233, 2233, 10: 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 53: 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 545: 2233, 547: 2233, 2233, 2233, 2233, 554: 2233, 2233, 557: 2233, 2233, 2233, 561: 2233, 2233, 566: 2233, 2233, 573: 2233, 593: 2233, 600: 2233, 2233, 633: 2233, 640: 2233, 2233, 643: 2233, 2233, 2233, 650: 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 659: 2233, 2233, 2233, 663: 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 673: 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 2233, 711: 2233, 2233, 2233, 2233, 2233, 2233, 725: 2233}, + {2: 2232, 2232, 2232, 2232, 2232, 2232, 2232, 10: 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 53: 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 545: 2232, 547: 2232, 2232, 2232, 2232, 554: 2232, 2232, 557: 2232, 2232, 2232, 561: 2232, 2232, 566: 2232, 2232, 573: 2232, 593: 2232, 600: 2232, 2232, 633: 2232, 640: 2232, 2232, 643: 2232, 2232, 2232, 650: 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 659: 2232, 2232, 2232, 663: 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 673: 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 2232, 711: 2232, 2232, 2232, 2232, 2232, 2232, 725: 2232}, // 905 - {2: 2225, 2225, 2225, 2225, 2225, 2225, 2225, 10: 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 53: 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 545: 2225, 547: 2225, 2225, 2225, 2225, 554: 2225, 2225, 557: 2225, 2225, 2225, 561: 2225, 2225, 566: 2225, 2225, 573: 2225, 593: 2225, 600: 2225, 2225, 633: 2225, 640: 2225, 642: 2225, 2225, 2225, 2225, 650: 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 671: 2225, 673: 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 2225, 725: 2225}, - {557: 3832}, - {1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 562: 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 574: 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 594: 1327, 1327, 1327, 1327, 1327, 1327, 602: 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 634: 1327, 1327, 1327, 1327, 1327, 1327, 641: 1327, 646: 1327, 1327, 1327, 1327, 670: 1327, 723: 1327, 1327}, - {1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 562: 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 574: 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 594: 1326, 1326, 1326, 1326, 1326, 1326, 602: 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 634: 1326, 1326, 1326, 1326, 1326, 1326, 641: 1326, 646: 1326, 1326, 1326, 1326, 670: 1326, 723: 1326, 1326}, - {1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 562: 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 574: 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 594: 1325, 1325, 1325, 1325, 1325, 1325, 602: 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 634: 1325, 1325, 1325, 1325, 1325, 1325, 641: 1325, 646: 1325, 1325, 1325, 1325, 670: 1325, 723: 1325, 1325}, + {2: 2231, 2231, 2231, 2231, 2231, 2231, 2231, 10: 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 53: 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 545: 2231, 547: 2231, 2231, 2231, 2231, 554: 2231, 2231, 557: 2231, 2231, 2231, 561: 2231, 2231, 566: 2231, 2231, 573: 2231, 593: 2231, 600: 2231, 2231, 633: 2231, 640: 2231, 2231, 643: 2231, 2231, 2231, 650: 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 659: 2231, 2231, 2231, 663: 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 673: 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 2231, 711: 2231, 2231, 2231, 2231, 2231, 2231, 725: 2231}, + {557: 3851}, + {1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 562: 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 574: 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 594: 1331, 1331, 1331, 1331, 1331, 1331, 602: 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 634: 1331, 1331, 1331, 1331, 1331, 1331, 642: 1331, 646: 1331, 1331, 1331, 1331, 662: 1331, 723: 1331, 1331, 726: 1331}, + {1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 562: 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 574: 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 594: 1330, 1330, 1330, 1330, 1330, 1330, 602: 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 634: 1330, 1330, 1330, 1330, 1330, 1330, 642: 1330, 646: 1330, 1330, 1330, 1330, 662: 1330, 723: 1330, 1330, 726: 1330}, + {1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 562: 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 574: 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 594: 1329, 1329, 1329, 1329, 1329, 1329, 602: 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 634: 1329, 1329, 1329, 1329, 1329, 1329, 642: 1329, 646: 1329, 1329, 1329, 1329, 662: 1329, 723: 1329, 1329, 726: 1329}, // 910 - {1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 562: 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 574: 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 594: 1324, 1324, 1324, 1324, 1324, 1324, 602: 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 634: 1324, 1324, 1324, 1324, 1324, 1324, 641: 1324, 646: 1324, 1324, 1324, 1324, 670: 1324, 723: 1324, 1324}, - {1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 562: 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 574: 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 594: 1323, 1323, 1323, 1323, 1323, 1323, 602: 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 634: 1323, 1323, 1323, 1323, 1323, 1323, 641: 1323, 646: 1323, 1323, 1323, 1323, 670: 1323, 723: 1323, 1323}, - {1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 562: 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 574: 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 594: 1322, 1322, 1322, 1322, 1322, 1322, 602: 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 634: 1322, 1322, 1322, 1322, 1322, 1322, 641: 1322, 646: 1322, 1322, 1322, 1322, 670: 1322, 723: 1322, 1322}, - {1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 562: 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 574: 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 594: 1321, 1321, 1321, 1321, 1321, 1321, 602: 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 634: 1321, 1321, 1321, 1321, 1321, 1321, 641: 1321, 646: 1321, 1321, 1321, 1321, 670: 1321, 723: 1321, 1321}, - {1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 562: 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 574: 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 594: 1320, 1320, 1320, 1320, 1320, 1320, 602: 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 634: 1320, 1320, 1320, 1320, 1320, 1320, 641: 1320, 646: 1320, 1320, 1320, 1320, 670: 1320, 723: 1320, 1320}, + {1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 562: 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 574: 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 594: 1328, 1328, 1328, 1328, 1328, 1328, 602: 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 634: 1328, 1328, 1328, 1328, 1328, 1328, 642: 1328, 646: 1328, 1328, 1328, 1328, 662: 1328, 723: 1328, 1328, 726: 1328}, + {1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 562: 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 574: 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 594: 1327, 1327, 1327, 1327, 1327, 1327, 602: 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 634: 1327, 1327, 1327, 1327, 1327, 1327, 642: 1327, 646: 1327, 1327, 1327, 1327, 662: 1327, 723: 1327, 1327, 726: 1327}, + {1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 562: 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 574: 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 594: 1326, 1326, 1326, 1326, 1326, 1326, 602: 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 1326, 634: 1326, 1326, 1326, 1326, 1326, 1326, 642: 1326, 646: 1326, 1326, 1326, 1326, 662: 1326, 723: 1326, 1326, 726: 1326}, + {1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 562: 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 574: 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 594: 1325, 1325, 1325, 1325, 1325, 1325, 602: 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 634: 1325, 1325, 1325, 1325, 1325, 1325, 642: 1325, 646: 1325, 1325, 1325, 1325, 662: 1325, 723: 1325, 1325, 726: 1325}, + {1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 562: 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 574: 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 594: 1324, 1324, 1324, 1324, 1324, 1324, 602: 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 634: 1324, 1324, 1324, 1324, 1324, 1324, 642: 1324, 646: 1324, 1324, 1324, 1324, 662: 1324, 723: 1324, 1324, 726: 1324}, // 915 - {1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 562: 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 574: 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 594: 1319, 1319, 1319, 1319, 1319, 1319, 602: 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 634: 1319, 1319, 1319, 1319, 1319, 1319, 641: 1319, 646: 1319, 1319, 1319, 1319, 670: 1319, 723: 1319, 1319}, - {1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 562: 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 574: 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 594: 1318, 1318, 1318, 1318, 1318, 1318, 602: 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 634: 1318, 1318, 1318, 1318, 1318, 1318, 641: 1318, 646: 1318, 1318, 1318, 1318, 670: 1318, 723: 1318, 1318}, - {1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 562: 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 574: 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 594: 1317, 1317, 1317, 1317, 1317, 1317, 602: 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 634: 1317, 1317, 1317, 1317, 1317, 1317, 641: 1317, 646: 1317, 1317, 1317, 1317, 670: 1317, 723: 1317, 1317}, - {1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 562: 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 574: 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 594: 1316, 1316, 1316, 1316, 1316, 1316, 602: 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 634: 1316, 1316, 1316, 1316, 1316, 1316, 641: 1316, 646: 1316, 1316, 1316, 1316, 670: 1316, 723: 1316, 1316}, - {1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 562: 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 574: 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 594: 1315, 1315, 1315, 1315, 1315, 1315, 602: 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 634: 1315, 1315, 1315, 1315, 1315, 1315, 641: 1315, 646: 1315, 1315, 1315, 1315, 670: 1315, 723: 1315, 1315}, + {1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 562: 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 574: 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 594: 1323, 1323, 1323, 1323, 1323, 1323, 602: 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 634: 1323, 1323, 1323, 1323, 1323, 1323, 642: 1323, 646: 1323, 1323, 1323, 1323, 662: 1323, 723: 1323, 1323, 726: 1323}, + {1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 562: 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 574: 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 594: 1322, 1322, 1322, 1322, 1322, 1322, 602: 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 634: 1322, 1322, 1322, 1322, 1322, 1322, 642: 1322, 646: 1322, 1322, 1322, 1322, 662: 1322, 723: 1322, 1322, 726: 1322}, + {1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 562: 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 574: 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 594: 1321, 1321, 1321, 1321, 1321, 1321, 602: 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 1321, 634: 1321, 1321, 1321, 1321, 1321, 1321, 642: 1321, 646: 1321, 1321, 1321, 1321, 662: 1321, 723: 1321, 1321, 726: 1321}, + {1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 562: 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 574: 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 594: 1320, 1320, 1320, 1320, 1320, 1320, 602: 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 634: 1320, 1320, 1320, 1320, 1320, 1320, 642: 1320, 646: 1320, 1320, 1320, 1320, 662: 1320, 723: 1320, 1320, 726: 1320}, + {1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 562: 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 574: 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 594: 1319, 1319, 1319, 1319, 1319, 1319, 602: 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1319, 634: 1319, 1319, 1319, 1319, 1319, 1319, 642: 1319, 646: 1319, 1319, 1319, 1319, 662: 1319, 723: 1319, 1319, 726: 1319}, // 920 - {1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 562: 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 574: 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 594: 1314, 1314, 1314, 1314, 1314, 1314, 602: 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 634: 1314, 1314, 1314, 1314, 1314, 1314, 641: 1314, 646: 1314, 1314, 1314, 1314, 670: 1314, 723: 1314, 1314}, - {1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 562: 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 574: 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 594: 1313, 1313, 1313, 1313, 1313, 1313, 602: 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 634: 1313, 1313, 1313, 1313, 1313, 1313, 641: 1313, 646: 1313, 1313, 1313, 1313, 670: 1313, 723: 1313, 1313}, - {1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 562: 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 574: 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 594: 1312, 1312, 1312, 1312, 1312, 1312, 602: 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 634: 1312, 1312, 1312, 1312, 1312, 1312, 641: 1312, 646: 1312, 1312, 1312, 1312, 670: 1312, 723: 1312, 1312}, - {1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 562: 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 574: 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 594: 1311, 1311, 1311, 1311, 1311, 1311, 602: 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 634: 1311, 1311, 1311, 1311, 1311, 1311, 641: 1311, 646: 1311, 1311, 1311, 1311, 670: 1311, 723: 1311, 1311}, - {1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 562: 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 574: 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 594: 1310, 1310, 1310, 1310, 1310, 1310, 602: 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 634: 1310, 1310, 1310, 1310, 1310, 1310, 641: 1310, 646: 1310, 1310, 1310, 1310, 670: 1310, 723: 1310, 1310}, + {1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 562: 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 574: 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 594: 1318, 1318, 1318, 1318, 1318, 1318, 602: 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 634: 1318, 1318, 1318, 1318, 1318, 1318, 642: 1318, 646: 1318, 1318, 1318, 1318, 662: 1318, 723: 1318, 1318, 726: 1318}, + {1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 562: 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 574: 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 594: 1317, 1317, 1317, 1317, 1317, 1317, 602: 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 634: 1317, 1317, 1317, 1317, 1317, 1317, 642: 1317, 646: 1317, 1317, 1317, 1317, 662: 1317, 723: 1317, 1317, 726: 1317}, + {1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 562: 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 574: 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 594: 1316, 1316, 1316, 1316, 1316, 1316, 602: 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 634: 1316, 1316, 1316, 1316, 1316, 1316, 642: 1316, 646: 1316, 1316, 1316, 1316, 662: 1316, 723: 1316, 1316, 726: 1316}, + {1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 562: 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 574: 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 594: 1315, 1315, 1315, 1315, 1315, 1315, 602: 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 634: 1315, 1315, 1315, 1315, 1315, 1315, 642: 1315, 646: 1315, 1315, 1315, 1315, 662: 1315, 723: 1315, 1315, 726: 1315}, + {1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 562: 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 574: 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 594: 1314, 1314, 1314, 1314, 1314, 1314, 602: 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 1314, 634: 1314, 1314, 1314, 1314, 1314, 1314, 642: 1314, 646: 1314, 1314, 1314, 1314, 662: 1314, 723: 1314, 1314, 726: 1314}, // 925 - {1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 562: 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 574: 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 594: 1309, 1309, 1309, 1309, 1309, 1309, 602: 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 634: 1309, 1309, 1309, 1309, 1309, 1309, 641: 1309, 646: 1309, 1309, 1309, 1309, 670: 1309, 723: 1309, 1309}, - {1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 562: 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 574: 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 594: 1308, 1308, 1308, 1308, 1308, 1308, 602: 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 634: 1308, 1308, 1308, 1308, 1308, 1308, 641: 1308, 646: 1308, 1308, 1308, 1308, 670: 1308, 723: 1308, 1308}, - {1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 562: 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 574: 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 594: 1307, 1307, 1307, 1307, 1307, 1307, 602: 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 634: 1307, 1307, 1307, 1307, 1307, 1307, 641: 1307, 646: 1307, 1307, 1307, 1307, 670: 1307, 723: 1307, 1307}, - {1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 562: 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 574: 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 594: 1306, 1306, 1306, 1306, 1306, 1306, 602: 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 634: 1306, 1306, 1306, 1306, 1306, 1306, 641: 1306, 646: 1306, 1306, 1306, 1306, 670: 1306, 723: 1306, 1306}, - {1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 562: 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 574: 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 594: 1305, 1305, 1305, 1305, 1305, 1305, 602: 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 634: 1305, 1305, 1305, 1305, 1305, 1305, 641: 1305, 646: 1305, 1305, 1305, 1305, 670: 1305, 723: 1305, 1305}, + {1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 562: 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 574: 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 594: 1313, 1313, 1313, 1313, 1313, 1313, 602: 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 634: 1313, 1313, 1313, 1313, 1313, 1313, 642: 1313, 646: 1313, 1313, 1313, 1313, 662: 1313, 723: 1313, 1313, 726: 1313}, + {1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 562: 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 574: 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 594: 1312, 1312, 1312, 1312, 1312, 1312, 602: 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 634: 1312, 1312, 1312, 1312, 1312, 1312, 642: 1312, 646: 1312, 1312, 1312, 1312, 662: 1312, 723: 1312, 1312, 726: 1312}, + {1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 562: 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 574: 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 594: 1311, 1311, 1311, 1311, 1311, 1311, 602: 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 1311, 634: 1311, 1311, 1311, 1311, 1311, 1311, 642: 1311, 646: 1311, 1311, 1311, 1311, 662: 1311, 723: 1311, 1311, 726: 1311}, + {1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 562: 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 574: 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 594: 1310, 1310, 1310, 1310, 1310, 1310, 602: 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 634: 1310, 1310, 1310, 1310, 1310, 1310, 642: 1310, 646: 1310, 1310, 1310, 1310, 662: 1310, 723: 1310, 1310, 726: 1310}, + {1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 562: 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 574: 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 594: 1309, 1309, 1309, 1309, 1309, 1309, 602: 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 634: 1309, 1309, 1309, 1309, 1309, 1309, 642: 1309, 646: 1309, 1309, 1309, 1309, 662: 1309, 723: 1309, 1309, 726: 1309}, // 930 - {1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 562: 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 574: 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 594: 1304, 1304, 1304, 1304, 1304, 1304, 602: 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 634: 1304, 1304, 1304, 1304, 1304, 1304, 641: 1304, 646: 1304, 1304, 1304, 1304, 670: 1304, 723: 1304, 1304}, - {1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 562: 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 574: 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 594: 1303, 1303, 1303, 1303, 1303, 1303, 602: 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 634: 1303, 1303, 1303, 1303, 1303, 1303, 641: 1303, 646: 1303, 1303, 1303, 1303, 670: 1303, 723: 1303, 1303}, - {1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 562: 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 574: 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 594: 1302, 1302, 1302, 1302, 1302, 1302, 602: 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 634: 1302, 1302, 1302, 1302, 1302, 1302, 641: 1302, 646: 1302, 1302, 1302, 1302, 670: 1302, 723: 1302, 1302}, - {1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 562: 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 574: 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 594: 1301, 1301, 1301, 1301, 1301, 1301, 602: 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 634: 1301, 1301, 1301, 1301, 1301, 1301, 641: 1301, 646: 1301, 1301, 1301, 1301, 670: 1301, 723: 1301, 1301}, - {1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 562: 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 574: 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 594: 1300, 1300, 1300, 1300, 1300, 1300, 602: 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 634: 1300, 1300, 1300, 1300, 1300, 1300, 641: 1300, 646: 1300, 1300, 1300, 1300, 670: 1300, 723: 1300, 1300}, + {1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 562: 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 574: 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 594: 1308, 1308, 1308, 1308, 1308, 1308, 602: 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 1308, 634: 1308, 1308, 1308, 1308, 1308, 1308, 642: 1308, 646: 1308, 1308, 1308, 1308, 662: 1308, 723: 1308, 1308, 726: 1308}, + {1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 562: 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 574: 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 594: 1307, 1307, 1307, 1307, 1307, 1307, 602: 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 634: 1307, 1307, 1307, 1307, 1307, 1307, 642: 1307, 646: 1307, 1307, 1307, 1307, 662: 1307, 723: 1307, 1307, 726: 1307}, + {1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 562: 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 574: 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 594: 1306, 1306, 1306, 1306, 1306, 1306, 602: 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 1306, 634: 1306, 1306, 1306, 1306, 1306, 1306, 642: 1306, 646: 1306, 1306, 1306, 1306, 662: 1306, 723: 1306, 1306, 726: 1306}, + {1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 562: 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 574: 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 594: 1305, 1305, 1305, 1305, 1305, 1305, 602: 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 634: 1305, 1305, 1305, 1305, 1305, 1305, 642: 1305, 646: 1305, 1305, 1305, 1305, 662: 1305, 723: 1305, 1305, 726: 1305}, + {1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 562: 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 574: 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 594: 1304, 1304, 1304, 1304, 1304, 1304, 602: 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 1304, 634: 1304, 1304, 1304, 1304, 1304, 1304, 642: 1304, 646: 1304, 1304, 1304, 1304, 662: 1304, 723: 1304, 1304, 726: 1304}, // 935 - {1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 562: 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 574: 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 594: 1299, 1299, 1299, 1299, 1299, 1299, 602: 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 634: 1299, 1299, 1299, 1299, 1299, 1299, 641: 1299, 646: 1299, 1299, 1299, 1299, 670: 1299, 723: 1299, 1299}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3833}, - {1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 546: 1509, 1509, 1509, 550: 1509, 1509, 553: 1509, 1509, 1509, 1509, 1509, 1509, 3844, 563: 1509, 1509, 1509, 568: 1509, 1509, 1509, 1509, 1509, 574: 1509, 3840, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 594: 1509, 1509, 1509, 1509, 1509, 1509, 602: 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 623: 3841, 1509, 1509, 3842, 1509, 3845, 1509, 3843, 1509, 1509, 634: 1509, 1509, 1509, 1509, 1509, 1509, 641: 1509, 646: 1509, 1509, 1509, 1509}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3863}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3862}, + {1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 562: 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 574: 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 594: 1303, 1303, 1303, 1303, 1303, 1303, 602: 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 1303, 634: 1303, 1303, 1303, 1303, 1303, 1303, 642: 1303, 646: 1303, 1303, 1303, 1303, 662: 1303, 723: 1303, 1303, 726: 1303}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3852}, + {1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 546: 1513, 1513, 1513, 550: 1513, 1513, 553: 1513, 1513, 1513, 1513, 1513, 1513, 3863, 563: 1513, 1513, 1513, 568: 1513, 1513, 1513, 1513, 1513, 574: 1513, 3859, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 594: 1513, 1513, 1513, 1513, 1513, 1513, 602: 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 623: 3860, 1513, 1513, 3861, 1513, 3864, 1513, 3862, 1513, 1513, 634: 1513, 1513, 1513, 1513, 1513, 1513, 642: 1513, 646: 1513, 1513, 1513, 1513}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3882}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3881}, // 940 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3861}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3860}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3857, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3856}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3853, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3852}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3851}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3880}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3879}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3876, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3875}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3872, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3871}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3870}, // 945 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3850}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3849}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3848}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3847}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3846}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3869}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3868}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3867}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3866}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3865}, // 950 - {1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 546: 1503, 1503, 1503, 550: 1503, 1503, 553: 1503, 1503, 1503, 1503, 1503, 1503, 1503, 563: 1503, 1503, 1503, 568: 1503, 1503, 1503, 1503, 1503, 574: 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 594: 1503, 1503, 1503, 1503, 1503, 1503, 602: 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 623: 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 634: 1503, 1503, 1503, 1503, 1503, 1503, 641: 1503, 646: 1503, 1503, 1503, 1503}, - {1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 546: 1504, 1504, 1504, 550: 1504, 1504, 553: 1504, 1504, 1504, 1504, 1504, 1504, 1504, 563: 1504, 1504, 1504, 568: 1504, 1504, 1504, 1504, 1504, 574: 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 594: 1504, 1504, 1504, 1504, 1504, 1504, 602: 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 623: 1504, 1504, 1504, 1504, 1504, 3845, 1504, 1504, 1504, 1504, 634: 1504, 1504, 1504, 1504, 1504, 1504, 641: 1504, 646: 1504, 1504, 1504, 1504}, - {1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 546: 1505, 1505, 1505, 550: 1505, 1505, 553: 1505, 1505, 1505, 1505, 1505, 1505, 1505, 563: 1505, 1505, 1505, 568: 1505, 1505, 1505, 1505, 1505, 574: 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 594: 1505, 1505, 1505, 1505, 1505, 1505, 602: 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 623: 1505, 1505, 1505, 1505, 1505, 3845, 1505, 1505, 1505, 1505, 634: 1505, 1505, 1505, 1505, 1505, 1505, 641: 1505, 646: 1505, 1505, 1505, 1505}, - {1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 546: 1506, 1506, 1506, 550: 1506, 1506, 553: 1506, 1506, 1506, 1506, 1506, 1506, 1506, 563: 1506, 1506, 1506, 568: 1506, 1506, 1506, 1506, 1506, 574: 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 594: 1506, 1506, 1506, 1506, 1506, 1506, 602: 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 1506, 623: 1506, 1506, 1506, 1506, 1506, 3845, 1506, 1506, 1506, 1506, 634: 1506, 1506, 1506, 1506, 1506, 1506, 641: 1506, 646: 1506, 1506, 1506, 1506}, - {1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 546: 1507, 1507, 1507, 550: 1507, 1507, 553: 1507, 1507, 1507, 1507, 1507, 1507, 1507, 563: 1507, 1507, 1507, 568: 1507, 1507, 1507, 1507, 1507, 574: 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 594: 1507, 1507, 1507, 1507, 1507, 1507, 602: 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 623: 1507, 1507, 1507, 1507, 1507, 3845, 1507, 1507, 1507, 1507, 634: 1507, 1507, 1507, 1507, 1507, 1507, 641: 1507, 646: 1507, 1507, 1507, 1507}, + {1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 546: 1507, 1507, 1507, 550: 1507, 1507, 553: 1507, 1507, 1507, 1507, 1507, 1507, 1507, 563: 1507, 1507, 1507, 568: 1507, 1507, 1507, 1507, 1507, 574: 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 594: 1507, 1507, 1507, 1507, 1507, 1507, 602: 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 623: 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 1507, 634: 1507, 1507, 1507, 1507, 1507, 1507, 642: 1507, 646: 1507, 1507, 1507, 1507}, + {1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 546: 1508, 1508, 1508, 550: 1508, 1508, 553: 1508, 1508, 1508, 1508, 1508, 1508, 1508, 563: 1508, 1508, 1508, 568: 1508, 1508, 1508, 1508, 1508, 574: 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 594: 1508, 1508, 1508, 1508, 1508, 1508, 602: 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 623: 1508, 1508, 1508, 1508, 1508, 3864, 1508, 1508, 1508, 1508, 634: 1508, 1508, 1508, 1508, 1508, 1508, 642: 1508, 646: 1508, 1508, 1508, 1508}, + {1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 546: 1509, 1509, 1509, 550: 1509, 1509, 553: 1509, 1509, 1509, 1509, 1509, 1509, 1509, 563: 1509, 1509, 1509, 568: 1509, 1509, 1509, 1509, 1509, 574: 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 594: 1509, 1509, 1509, 1509, 1509, 1509, 602: 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 1509, 623: 1509, 1509, 1509, 1509, 1509, 3864, 1509, 1509, 1509, 1509, 634: 1509, 1509, 1509, 1509, 1509, 1509, 642: 1509, 646: 1509, 1509, 1509, 1509}, + {1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 546: 1510, 1510, 1510, 550: 1510, 1510, 553: 1510, 1510, 1510, 1510, 1510, 1510, 1510, 563: 1510, 1510, 1510, 568: 1510, 1510, 1510, 1510, 1510, 574: 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 594: 1510, 1510, 1510, 1510, 1510, 1510, 602: 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 623: 1510, 1510, 1510, 1510, 1510, 3864, 1510, 1510, 1510, 1510, 634: 1510, 1510, 1510, 1510, 1510, 1510, 642: 1510, 646: 1510, 1510, 1510, 1510}, + {1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 546: 1511, 1511, 1511, 550: 1511, 1511, 553: 1511, 1511, 1511, 1511, 1511, 1511, 1511, 563: 1511, 1511, 1511, 568: 1511, 1511, 1511, 1511, 1511, 574: 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 594: 1511, 1511, 1511, 1511, 1511, 1511, 602: 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 623: 1511, 1511, 1511, 1511, 1511, 3864, 1511, 1511, 1511, 1511, 634: 1511, 1511, 1511, 1511, 1511, 1511, 642: 1511, 646: 1511, 1511, 1511, 1511}, // 955 - {1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 546: 1508, 1508, 1508, 550: 1508, 1508, 553: 1508, 1508, 1508, 1508, 1508, 1508, 1508, 563: 1508, 1508, 1508, 568: 1508, 1508, 1508, 1508, 1508, 574: 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 594: 1508, 1508, 1508, 1508, 1508, 1508, 602: 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 623: 1508, 1508, 1508, 1508, 1508, 3845, 1508, 1508, 1508, 1508, 634: 1508, 1508, 1508, 1508, 1508, 1508, 641: 1508, 646: 1508, 1508, 1508, 1508}, - {1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 546: 1512, 1512, 1512, 550: 1512, 1512, 553: 1512, 1512, 1512, 1512, 1512, 1512, 3844, 563: 1512, 1512, 1512, 568: 1512, 1512, 1512, 1512, 1512, 574: 1512, 3840, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 594: 1512, 1512, 1512, 1512, 1512, 1512, 602: 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 623: 3841, 1512, 1512, 3842, 1512, 3845, 1512, 3843, 1512, 1512, 634: 1512, 1512, 1512, 1512, 1512, 1512, 641: 1512, 646: 1512, 1512, 1512, 1512}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 1446, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3854}, - {127: 3823, 136: 3831, 143: 3819, 147: 3816, 149: 3818, 3815, 3817, 3821, 3822, 3827, 3826, 3825, 3829, 3830, 3824, 3828, 3820, 581: 3801, 3799, 3800, 3798, 3796, 608: 3813, 3810, 3812, 3811, 3807, 3809, 3808, 3805, 3806, 3804, 3814, 815: 3797, 3795, 902: 3803, 916: 3855}, - {1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 546: 1510, 1510, 1510, 550: 1510, 1510, 553: 1510, 1510, 1510, 1510, 1510, 1510, 1510, 563: 1510, 1510, 1510, 568: 1510, 1510, 1510, 1510, 1510, 574: 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 594: 1510, 1510, 1510, 1510, 1510, 1510, 602: 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 623: 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 634: 1510, 1510, 1510, 1510, 1510, 1510, 641: 1510, 646: 1510, 1510, 1510, 1510}, + {1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 546: 1512, 1512, 1512, 550: 1512, 1512, 553: 1512, 1512, 1512, 1512, 1512, 1512, 1512, 563: 1512, 1512, 1512, 568: 1512, 1512, 1512, 1512, 1512, 574: 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 594: 1512, 1512, 1512, 1512, 1512, 1512, 602: 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 1512, 623: 1512, 1512, 1512, 1512, 1512, 3864, 1512, 1512, 1512, 1512, 634: 1512, 1512, 1512, 1512, 1512, 1512, 642: 1512, 646: 1512, 1512, 1512, 1512}, + {1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 546: 1516, 1516, 1516, 550: 1516, 1516, 553: 1516, 1516, 1516, 1516, 1516, 1516, 3863, 563: 1516, 1516, 1516, 568: 1516, 1516, 1516, 1516, 1516, 574: 1516, 3859, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 594: 1516, 1516, 1516, 1516, 1516, 1516, 602: 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 623: 3860, 1516, 1516, 3861, 1516, 3864, 1516, 3862, 1516, 1516, 634: 1516, 1516, 1516, 1516, 1516, 1516, 642: 1516, 646: 1516, 1516, 1516, 1516}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 1450, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3873}, + {129: 3842, 138: 3850, 145: 3838, 149: 3835, 151: 3837, 3834, 3836, 3840, 3841, 3846, 3845, 3844, 3848, 3849, 3843, 3847, 3839, 581: 3820, 3818, 3819, 3817, 3815, 608: 3832, 3829, 3831, 3830, 3826, 3828, 3827, 3824, 3825, 3823, 3833, 815: 3816, 3814, 902: 3822, 916: 3874}, + {1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 546: 1514, 1514, 1514, 550: 1514, 1514, 553: 1514, 1514, 1514, 1514, 1514, 1514, 1514, 563: 1514, 1514, 1514, 568: 1514, 1514, 1514, 1514, 1514, 574: 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 594: 1514, 1514, 1514, 1514, 1514, 1514, 602: 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 623: 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 634: 1514, 1514, 1514, 1514, 1514, 1514, 642: 1514, 646: 1514, 1514, 1514, 1514}, // 960 - {1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 546: 1513, 1513, 1513, 550: 1513, 1513, 553: 1513, 1513, 1513, 1513, 1513, 1513, 3844, 563: 1513, 1513, 1513, 568: 1513, 1513, 1513, 1513, 1513, 574: 1513, 3840, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 594: 1513, 1513, 1513, 1513, 1513, 1513, 602: 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 1513, 623: 3841, 1513, 1513, 3842, 1513, 3845, 1513, 3843, 1513, 1513, 634: 1513, 1513, 1513, 1513, 1513, 1513, 641: 1513, 646: 1513, 1513, 1513, 1513}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 1446, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3858}, - {127: 3823, 136: 3831, 143: 3819, 147: 3816, 149: 3818, 3815, 3817, 3821, 3822, 3827, 3826, 3825, 3829, 3830, 3824, 3828, 3820, 581: 3801, 3799, 3800, 3798, 3796, 608: 3813, 3810, 3812, 3811, 3807, 3809, 3808, 3805, 3806, 3804, 3814, 815: 3797, 3795, 902: 3803, 916: 3859}, - {1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 546: 1511, 1511, 1511, 550: 1511, 1511, 553: 1511, 1511, 1511, 1511, 1511, 1511, 1511, 563: 1511, 1511, 1511, 568: 1511, 1511, 1511, 1511, 1511, 574: 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 594: 1511, 1511, 1511, 1511, 1511, 1511, 602: 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 623: 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 1511, 634: 1511, 1511, 1511, 1511, 1511, 1511, 641: 1511, 646: 1511, 1511, 1511, 1511}, - {1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 546: 1514, 1514, 1514, 550: 1514, 1514, 553: 1514, 1514, 1514, 1514, 3838, 3839, 3844, 563: 1514, 1514, 1514, 568: 1514, 1514, 1514, 1514, 1514, 574: 1514, 3840, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 594: 1514, 1514, 1514, 1514, 1514, 1514, 602: 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 1514, 623: 3841, 1514, 1514, 3842, 1514, 3845, 1514, 3843, 1514, 1514, 634: 1514, 1514, 1514, 1514, 1514, 1514, 641: 1514, 646: 1514, 1514, 1514, 1514}, + {1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 546: 1517, 1517, 1517, 550: 1517, 1517, 553: 1517, 1517, 1517, 1517, 1517, 1517, 3863, 563: 1517, 1517, 1517, 568: 1517, 1517, 1517, 1517, 1517, 574: 1517, 3859, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 594: 1517, 1517, 1517, 1517, 1517, 1517, 602: 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 623: 3860, 1517, 1517, 3861, 1517, 3864, 1517, 3862, 1517, 1517, 634: 1517, 1517, 1517, 1517, 1517, 1517, 642: 1517, 646: 1517, 1517, 1517, 1517}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 1450, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3877}, + {129: 3842, 138: 3850, 145: 3838, 149: 3835, 151: 3837, 3834, 3836, 3840, 3841, 3846, 3845, 3844, 3848, 3849, 3843, 3847, 3839, 581: 3820, 3818, 3819, 3817, 3815, 608: 3832, 3829, 3831, 3830, 3826, 3828, 3827, 3824, 3825, 3823, 3833, 815: 3816, 3814, 902: 3822, 916: 3878}, + {1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 546: 1515, 1515, 1515, 550: 1515, 1515, 553: 1515, 1515, 1515, 1515, 1515, 1515, 1515, 563: 1515, 1515, 1515, 568: 1515, 1515, 1515, 1515, 1515, 574: 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 594: 1515, 1515, 1515, 1515, 1515, 1515, 602: 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 623: 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 634: 1515, 1515, 1515, 1515, 1515, 1515, 642: 1515, 646: 1515, 1515, 1515, 1515}, + {1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 546: 1518, 1518, 1518, 550: 1518, 1518, 553: 1518, 1518, 1518, 1518, 3857, 3858, 3863, 563: 1518, 1518, 1518, 568: 1518, 1518, 1518, 1518, 1518, 574: 1518, 3859, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 594: 1518, 1518, 1518, 1518, 1518, 1518, 602: 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 623: 3860, 1518, 1518, 3861, 1518, 3864, 1518, 3862, 1518, 1518, 634: 1518, 1518, 1518, 1518, 1518, 1518, 642: 1518, 646: 1518, 1518, 1518, 1518}, // 965 - {1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 546: 1515, 1515, 1515, 550: 1515, 1515, 553: 1515, 1515, 1515, 1515, 3838, 3839, 3844, 563: 1515, 1515, 1515, 568: 1515, 1515, 1515, 1515, 1515, 574: 1515, 3840, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 594: 1515, 1515, 1515, 1515, 1515, 1515, 602: 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 1515, 623: 3841, 1515, 1515, 3842, 1515, 3845, 1515, 3843, 1515, 1515, 634: 1515, 1515, 1515, 1515, 1515, 1515, 641: 1515, 646: 1515, 1515, 1515, 1515}, - {1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 546: 1516, 1516, 1516, 550: 1516, 1516, 553: 1516, 1516, 1516, 1516, 3838, 3839, 3844, 563: 1516, 1516, 1516, 568: 1516, 1516, 1516, 1516, 1516, 574: 1516, 3840, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 594: 1516, 1516, 1516, 1516, 1516, 1516, 602: 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 1516, 623: 3841, 1516, 1516, 3842, 1516, 3845, 1516, 3843, 3836, 3837, 634: 1516, 1516, 1516, 1516, 1516, 1516, 641: 1516, 646: 1516, 1516, 1516, 1516}, - {1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 546: 1517, 1517, 1517, 550: 1517, 1517, 553: 1517, 1517, 1517, 1517, 3838, 3839, 3844, 563: 1517, 1517, 1517, 568: 1517, 1517, 1517, 1517, 1517, 574: 1517, 3840, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 594: 1517, 1517, 1517, 1517, 1517, 1517, 602: 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 1517, 623: 3841, 1517, 1517, 3842, 3835, 3845, 1517, 3843, 3836, 3837, 634: 1517, 1517, 1517, 1517, 1517, 1517, 641: 1517, 646: 1517, 1517, 1517, 1517}, - {2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 546: 2244, 2244, 551: 2244, 553: 2244, 2244, 2244, 2244, 563: 2244, 2244, 2244, 568: 2244, 570: 2244, 2244, 2244, 574: 2244, 576: 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 594: 2244, 2244, 2244, 598: 2244, 2244, 602: 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 2244, 621: 2244, 815: 3797, 3795}, - {2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 546: 2245, 2245, 551: 2245, 553: 2245, 2245, 2245, 2245, 563: 2245, 2245, 2245, 568: 2245, 570: 2245, 2245, 2245, 574: 2245, 576: 2245, 2245, 2245, 2245, 2245, 3801, 2245, 3800, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 594: 2245, 2245, 2245, 598: 2245, 2245, 602: 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 621: 2245, 815: 3797, 3795}, + {1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 546: 1519, 1519, 1519, 550: 1519, 1519, 553: 1519, 1519, 1519, 1519, 3857, 3858, 3863, 563: 1519, 1519, 1519, 568: 1519, 1519, 1519, 1519, 1519, 574: 1519, 3859, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 594: 1519, 1519, 1519, 1519, 1519, 1519, 602: 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 623: 3860, 1519, 1519, 3861, 1519, 3864, 1519, 3862, 1519, 1519, 634: 1519, 1519, 1519, 1519, 1519, 1519, 642: 1519, 646: 1519, 1519, 1519, 1519}, + {1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 546: 1520, 1520, 1520, 550: 1520, 1520, 553: 1520, 1520, 1520, 1520, 3857, 3858, 3863, 563: 1520, 1520, 1520, 568: 1520, 1520, 1520, 1520, 1520, 574: 1520, 3859, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 594: 1520, 1520, 1520, 1520, 1520, 1520, 602: 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 1520, 623: 3860, 1520, 1520, 3861, 1520, 3864, 1520, 3862, 3855, 3856, 634: 1520, 1520, 1520, 1520, 1520, 1520, 642: 1520, 646: 1520, 1520, 1520, 1520}, + {1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 546: 1521, 1521, 1521, 550: 1521, 1521, 553: 1521, 1521, 1521, 1521, 3857, 3858, 3863, 563: 1521, 1521, 1521, 568: 1521, 1521, 1521, 1521, 1521, 574: 1521, 3859, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 594: 1521, 1521, 1521, 1521, 1521, 1521, 602: 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 1521, 623: 3860, 1521, 1521, 3861, 3854, 3864, 1521, 3862, 3855, 3856, 634: 1521, 1521, 1521, 1521, 1521, 1521, 642: 1521, 646: 1521, 1521, 1521, 1521}, + {2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 546: 2250, 2250, 551: 2250, 553: 2250, 2250, 2250, 2250, 563: 2250, 2250, 2250, 568: 2250, 570: 2250, 2250, 2250, 574: 2250, 576: 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 594: 2250, 2250, 2250, 598: 2250, 2250, 602: 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 621: 2250, 815: 3816, 3814}, + {2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 546: 2251, 2251, 551: 2251, 553: 2251, 2251, 2251, 2251, 563: 2251, 2251, 2251, 568: 2251, 570: 2251, 2251, 2251, 574: 2251, 576: 2251, 2251, 2251, 2251, 2251, 3820, 2251, 3819, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 594: 2251, 2251, 2251, 598: 2251, 2251, 602: 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 621: 2251, 815: 3816, 3814}, // 970 - {2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 546: 2246, 2246, 551: 2246, 553: 2246, 2246, 2246, 2246, 563: 2246, 2246, 2246, 568: 2246, 570: 2246, 2246, 2246, 574: 2246, 576: 2246, 2246, 2246, 2246, 2246, 3801, 2246, 3800, 2246, 3796, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 594: 2246, 2246, 2246, 598: 2246, 2246, 602: 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 621: 2246, 815: 3797, 3795}, - {201: 2633, 236: 2633, 561: 2633, 597: 2633, 620: 2633, 641: 2633, 2633, 644: 2633, 646: 2633, 2633, 2633, 659: 2633}, - {201: 2632, 236: 2632, 561: 2632, 597: 2632, 620: 2632, 641: 2632, 2632, 644: 2632, 646: 2632, 2632, 2632, 659: 2632}, - {2: 2200, 2200, 2200, 2200, 2200, 2200, 2200, 10: 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 53: 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 545: 2200, 547: 2200, 2200, 2200, 554: 2200, 2200, 557: 2200, 2200, 2200, 561: 2200, 2200, 566: 2200, 2200, 573: 2200, 593: 2200, 600: 2200, 2200, 633: 2200, 640: 2200, 642: 2200, 2200, 2200, 2200, 650: 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 671: 2200, 673: 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200}, - {597: 4054, 620: 4053, 641: 4052, 646: 4055, 3881, 3882, 1266: 4056}, + {2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 546: 2252, 2252, 551: 2252, 553: 2252, 2252, 2252, 2252, 563: 2252, 2252, 2252, 568: 2252, 570: 2252, 2252, 2252, 574: 2252, 576: 2252, 2252, 2252, 2252, 2252, 3820, 2252, 3819, 2252, 3815, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 594: 2252, 2252, 2252, 598: 2252, 2252, 602: 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 621: 2252, 815: 3816, 3814}, + {202: 2648, 236: 2648, 561: 2648, 597: 2648, 620: 2648, 642: 2648, 2648, 2648, 646: 2648, 2648, 2648, 660: 2648}, + {202: 2647, 236: 2647, 561: 2647, 597: 2647, 620: 2647, 642: 2647, 2647, 2647, 646: 2647, 2647, 2647, 660: 2647}, + {2: 2206, 2206, 2206, 2206, 2206, 2206, 2206, 10: 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 53: 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 545: 2206, 547: 2206, 2206, 2206, 554: 2206, 2206, 557: 2206, 2206, 2206, 561: 2206, 2206, 566: 2206, 2206, 573: 2206, 593: 2206, 600: 2206, 2206, 633: 2206, 640: 2206, 2206, 643: 2206, 2206, 2206, 650: 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 659: 2206, 2206, 2206, 663: 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 673: 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 711: 2206, 2206, 2206, 2206, 2206, 2206}, + {597: 4073, 620: 4072, 642: 4071, 646: 4074, 3900, 3901, 1268: 4075}, // 975 - {545: 2196}, - {2: 2194, 2194, 2194, 2194, 2194, 2194, 2194, 10: 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 53: 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 545: 2194, 547: 2194, 2194, 2194, 554: 2194, 2194, 557: 2194, 2194, 2194, 561: 2194, 2194, 566: 2194, 2194, 573: 2194, 593: 2194, 600: 2194, 2194, 633: 2194, 640: 2194, 642: 2194, 2194, 2194, 2194, 650: 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 671: 2194, 673: 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194, 2194}, - {2: 2192, 2192, 2192, 2192, 2192, 2192, 2192, 10: 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 53: 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 545: 2192, 547: 2192, 2192, 2192, 554: 2192, 2192, 557: 2192, 2192, 2192, 561: 2192, 2192, 566: 2192, 2192, 573: 2192, 593: 2192, 600: 2192, 2192, 633: 2192, 640: 2192, 642: 2192, 2192, 2192, 2192, 650: 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 671: 2192, 673: 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192, 2192}, - {2: 2190, 2190, 2190, 2190, 2190, 2190, 2190, 10: 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 53: 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 545: 2190, 547: 2190, 2190, 2190, 554: 2190, 2190, 557: 2190, 2190, 2190, 561: 2190, 2190, 566: 2190, 2190, 573: 2190, 593: 2190, 600: 2190, 2190, 633: 2190, 640: 2190, 642: 2190, 2190, 2190, 2190, 650: 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 671: 2190, 673: 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190}, - {545: 3896, 790: 3897}, + {545: 2202}, + {2: 2200, 2200, 2200, 2200, 2200, 2200, 2200, 10: 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 53: 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 545: 2200, 547: 2200, 2200, 2200, 554: 2200, 2200, 557: 2200, 2200, 2200, 561: 2200, 2200, 566: 2200, 2200, 573: 2200, 593: 2200, 600: 2200, 2200, 633: 2200, 640: 2200, 2200, 643: 2200, 2200, 2200, 650: 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 659: 2200, 2200, 2200, 663: 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 673: 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 2200, 711: 2200, 2200, 2200, 2200, 2200, 2200}, + {2: 2198, 2198, 2198, 2198, 2198, 2198, 2198, 10: 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 53: 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 545: 2198, 547: 2198, 2198, 2198, 554: 2198, 2198, 557: 2198, 2198, 2198, 561: 2198, 2198, 566: 2198, 2198, 573: 2198, 593: 2198, 600: 2198, 2198, 633: 2198, 640: 2198, 2198, 643: 2198, 2198, 2198, 650: 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 659: 2198, 2198, 2198, 663: 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 673: 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 2198, 711: 2198, 2198, 2198, 2198, 2198, 2198}, + {2: 2196, 2196, 2196, 2196, 2196, 2196, 2196, 10: 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 53: 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 545: 2196, 547: 2196, 2196, 2196, 554: 2196, 2196, 557: 2196, 2196, 2196, 561: 2196, 2196, 566: 2196, 2196, 573: 2196, 593: 2196, 600: 2196, 2196, 633: 2196, 640: 2196, 2196, 643: 2196, 2196, 2196, 650: 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 659: 2196, 2196, 2196, 663: 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 673: 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 2196, 711: 2196, 2196, 2196, 2196, 2196, 2196}, + {545: 3915, 790: 3916}, // 980 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3893}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3671, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3891, 3652, 3734, 3651, 3648}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3671, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3887, 3652, 3734, 3651, 3648}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3671, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3886, 3652, 3734, 3651, 3648}, - {545: 3883}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3912}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3690, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3910, 3671, 3753, 3670, 3667}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3690, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3906, 3671, 3753, 3670, 3667}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3690, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3905, 3671, 3753, 3670, 3667}, + {545: 3902}, // 985 - {2: 2177, 2177, 2177, 2177, 2177, 2177, 2177, 10: 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 53: 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 545: 2177, 547: 2177, 2177, 2177, 554: 2177, 2177, 557: 2177, 2177, 2177, 561: 2177, 2177, 566: 2177, 2177, 573: 2177, 593: 2177, 600: 2177, 2177, 633: 2177, 640: 2177, 642: 2177, 2177, 2177, 2177, 650: 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 671: 2177, 673: 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177, 2177}, - {2: 2176, 2176, 2176, 2176, 2176, 2176, 2176, 10: 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 53: 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 545: 2176, 547: 2176, 2176, 2176, 554: 2176, 2176, 557: 2176, 2176, 2176, 561: 2176, 2176, 566: 2176, 2176, 573: 2176, 593: 2176, 600: 2176, 2176, 633: 2176, 640: 2176, 642: 2176, 2176, 2176, 2176, 650: 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 671: 2176, 673: 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176, 2176}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3671, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3884, 3652, 3734, 3651, 3648}, - {52: 3885, 552: 3748, 718: 3749}, - {2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 546: 2179, 2179, 551: 2179, 553: 2179, 2179, 2179, 2179, 563: 2179, 2179, 2179, 568: 2179, 2179, 2179, 2179, 2179, 574: 2179, 576: 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 594: 2179, 2179, 2179, 598: 2179, 2179, 602: 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 2179, 621: 2179, 624: 2179, 2179, 634: 2179, 2179, 2179, 2179, 2179, 2179}, + {2: 2183, 2183, 2183, 2183, 2183, 2183, 2183, 10: 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 53: 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 545: 2183, 547: 2183, 2183, 2183, 554: 2183, 2183, 557: 2183, 2183, 2183, 561: 2183, 2183, 566: 2183, 2183, 573: 2183, 593: 2183, 600: 2183, 2183, 633: 2183, 640: 2183, 2183, 643: 2183, 2183, 2183, 650: 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 659: 2183, 2183, 2183, 663: 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 673: 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 711: 2183, 2183, 2183, 2183, 2183, 2183}, + {2: 2182, 2182, 2182, 2182, 2182, 2182, 2182, 10: 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 53: 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 545: 2182, 547: 2182, 2182, 2182, 554: 2182, 2182, 557: 2182, 2182, 2182, 561: 2182, 2182, 566: 2182, 2182, 573: 2182, 593: 2182, 600: 2182, 2182, 633: 2182, 640: 2182, 2182, 643: 2182, 2182, 2182, 650: 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 659: 2182, 2182, 2182, 663: 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 673: 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 711: 2182, 2182, 2182, 2182, 2182, 2182}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3690, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3903, 3671, 3753, 3670, 3667}, + {52: 3904, 552: 3767, 721: 3768}, + {2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 546: 2185, 2185, 551: 2185, 553: 2185, 2185, 2185, 2185, 563: 2185, 2185, 2185, 568: 2185, 2185, 2185, 2185, 2185, 574: 2185, 576: 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 594: 2185, 2185, 2185, 598: 2185, 2185, 602: 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 621: 2185, 624: 2185, 2185, 634: 2185, 2185, 2185, 2185, 2185, 2185}, // 990 - {2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 546: 2180, 2180, 551: 2180, 3748, 2180, 2180, 2180, 2180, 563: 2180, 2180, 2180, 568: 2180, 2180, 2180, 2180, 2180, 574: 2180, 576: 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 594: 2180, 2180, 2180, 598: 2180, 2180, 602: 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 621: 2180, 624: 2180, 2180, 634: 2180, 2180, 2180, 2180, 2180, 2180, 718: 3749}, - {2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 3889, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 546: 2175, 2175, 551: 2175, 3748, 2175, 2175, 2175, 2175, 563: 2175, 2175, 2175, 568: 2175, 2175, 2175, 2175, 2175, 574: 2175, 576: 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 594: 2175, 2175, 2175, 598: 2175, 2175, 602: 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 621: 2175, 624: 2175, 2175, 634: 2175, 2175, 2175, 2175, 2175, 2175, 718: 3749, 1215: 3888}, - {2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 546: 2181, 2181, 551: 2181, 553: 2181, 2181, 2181, 2181, 563: 2181, 2181, 2181, 568: 2181, 2181, 2181, 2181, 2181, 574: 2181, 576: 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 594: 2181, 2181, 2181, 598: 2181, 2181, 602: 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 621: 2181, 624: 2181, 2181, 634: 2181, 2181, 2181, 2181, 2181, 2181}, - {547: 3890}, - {2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 546: 2174, 2174, 551: 2174, 553: 2174, 2174, 2174, 2174, 563: 2174, 2174, 2174, 568: 2174, 2174, 2174, 2174, 2174, 574: 2174, 576: 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 594: 2174, 2174, 2174, 598: 2174, 2174, 602: 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 2174, 621: 2174, 624: 2174, 2174, 634: 2174, 2174, 2174, 2174, 2174, 2174}, + {2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 546: 2186, 2186, 551: 2186, 3767, 2186, 2186, 2186, 2186, 563: 2186, 2186, 2186, 568: 2186, 2186, 2186, 2186, 2186, 574: 2186, 576: 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 594: 2186, 2186, 2186, 598: 2186, 2186, 602: 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 2186, 621: 2186, 624: 2186, 2186, 634: 2186, 2186, 2186, 2186, 2186, 2186, 721: 3768}, + {2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 3908, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 546: 2181, 2181, 551: 2181, 3767, 2181, 2181, 2181, 2181, 563: 2181, 2181, 2181, 568: 2181, 2181, 2181, 2181, 2181, 574: 2181, 576: 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 594: 2181, 2181, 2181, 598: 2181, 2181, 602: 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 621: 2181, 624: 2181, 2181, 634: 2181, 2181, 2181, 2181, 2181, 2181, 721: 3768, 1217: 3907}, + {2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 546: 2187, 2187, 551: 2187, 553: 2187, 2187, 2187, 2187, 563: 2187, 2187, 2187, 568: 2187, 2187, 2187, 2187, 2187, 574: 2187, 576: 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 594: 2187, 2187, 2187, 598: 2187, 2187, 602: 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 2187, 621: 2187, 624: 2187, 2187, 634: 2187, 2187, 2187, 2187, 2187, 2187}, + {547: 3909}, + {2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 546: 2180, 2180, 551: 2180, 553: 2180, 2180, 2180, 2180, 563: 2180, 2180, 2180, 568: 2180, 2180, 2180, 2180, 2180, 574: 2180, 576: 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 594: 2180, 2180, 2180, 598: 2180, 2180, 602: 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 2180, 621: 2180, 624: 2180, 2180, 634: 2180, 2180, 2180, 2180, 2180, 2180}, // 995 - {2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 3889, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 546: 2175, 2175, 551: 2175, 3748, 2175, 2175, 2175, 2175, 563: 2175, 2175, 2175, 568: 2175, 2175, 2175, 2175, 2175, 574: 2175, 576: 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 594: 2175, 2175, 2175, 598: 2175, 2175, 602: 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 2175, 621: 2175, 624: 2175, 2175, 634: 2175, 2175, 2175, 2175, 2175, 2175, 718: 3749, 1215: 3892}, - {2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 546: 2182, 2182, 551: 2182, 553: 2182, 2182, 2182, 2182, 563: 2182, 2182, 2182, 568: 2182, 2182, 2182, 2182, 2182, 574: 2182, 576: 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 594: 2182, 2182, 2182, 598: 2182, 2182, 602: 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 2182, 621: 2182, 624: 2182, 2182, 634: 2182, 2182, 2182, 2182, 2182, 2182}, - {557: 3838, 3839, 3844, 575: 3840, 581: 3894, 623: 3841, 626: 3842, 3835, 3845, 3834, 3843, 3836, 3837}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3895}, - {2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 546: 2183, 2183, 551: 2183, 553: 2183, 2183, 2183, 2183, 563: 2183, 2183, 2183, 568: 2183, 2183, 2183, 2183, 2183, 574: 2183, 576: 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 594: 2183, 2183, 2183, 598: 2183, 2183, 602: 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 2183, 621: 2183, 624: 2183, 2183, 634: 2183, 2183, 2183, 2183, 2183, 2183}, + {2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 3908, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 546: 2181, 2181, 551: 2181, 3767, 2181, 2181, 2181, 2181, 563: 2181, 2181, 2181, 568: 2181, 2181, 2181, 2181, 2181, 574: 2181, 576: 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 594: 2181, 2181, 2181, 598: 2181, 2181, 602: 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 2181, 621: 2181, 624: 2181, 2181, 634: 2181, 2181, 2181, 2181, 2181, 2181, 721: 3768, 1217: 3911}, + {2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 546: 2188, 2188, 551: 2188, 553: 2188, 2188, 2188, 2188, 563: 2188, 2188, 2188, 568: 2188, 2188, 2188, 2188, 2188, 574: 2188, 576: 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 594: 2188, 2188, 2188, 598: 2188, 2188, 602: 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 2188, 621: 2188, 624: 2188, 2188, 634: 2188, 2188, 2188, 2188, 2188, 2188}, + {557: 3857, 3858, 3863, 575: 3859, 581: 3913, 623: 3860, 626: 3861, 3854, 3864, 3853, 3862, 3855, 3856}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3914}, + {2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 546: 2189, 2189, 551: 2189, 553: 2189, 2189, 2189, 2189, 563: 2189, 2189, 2189, 568: 2189, 2189, 2189, 2189, 2189, 574: 2189, 576: 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 594: 2189, 2189, 2189, 598: 2189, 2189, 602: 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 621: 2189, 624: 2189, 2189, 634: 2189, 2189, 2189, 2189, 2189, 2189}, // 1000 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 2948, 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3901, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 622: 2946, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 670: 2942, 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3900, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3898, 821: 3903, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 3902, 3905, 3904, 874: 3899}, - {2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 546: 2184, 2184, 551: 2184, 553: 2184, 2184, 2184, 2184, 563: 2184, 2184, 2184, 568: 2184, 2184, 2184, 2184, 2184, 574: 2184, 576: 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 594: 2184, 2184, 2184, 598: 2184, 2184, 602: 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 2184, 621: 2184, 624: 2184, 2184, 634: 2184, 2184, 2184, 2184, 2184, 2184}, - {2224, 2224, 9: 2224, 52: 2224, 171: 2224, 556: 2224, 579: 2224, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {9: 4049, 52: 4050}, - {9: 1482, 52: 1482, 548: 1482, 550: 1482, 552: 1482, 1029, 557: 1482, 1482, 1482, 564: 1029, 1029, 568: 3915, 1482, 3914, 575: 1482, 579: 3913, 581: 1482, 1482, 1482, 1482, 1482, 597: 1482, 620: 1482, 623: 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 634: 1482, 1482, 1482, 1482, 1482, 1482, 641: 1482, 646: 1482, 1482, 1482, 1482, 718: 1482, 857: 3916, 3917}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 2967, 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3920, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 622: 2965, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 2961, 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3919, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3917, 821: 3922, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 3921, 3924, 3923, 874: 3918}, + {2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 546: 2190, 2190, 551: 2190, 553: 2190, 2190, 2190, 2190, 563: 2190, 2190, 2190, 568: 2190, 2190, 2190, 2190, 2190, 574: 2190, 576: 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 594: 2190, 2190, 2190, 598: 2190, 2190, 602: 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 2190, 621: 2190, 624: 2190, 2190, 634: 2190, 2190, 2190, 2190, 2190, 2190}, + {2230, 2230, 9: 2230, 52: 2230, 172: 2230, 556: 2230, 579: 2230, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {9: 4068, 52: 4069}, + {9: 1486, 52: 1486, 548: 1486, 550: 1486, 552: 1486, 1033, 557: 1486, 1486, 1486, 564: 1033, 1033, 568: 3934, 1486, 3933, 575: 1486, 579: 3932, 581: 1486, 1486, 1486, 1486, 1486, 597: 1486, 620: 1486, 623: 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 634: 1486, 1486, 1486, 1486, 1486, 1486, 642: 1486, 646: 1486, 1486, 1486, 1486, 721: 1486, 857: 3935, 3936}, // 1005 - {545: 3945, 653: 3948, 1030: 3947, 1111: 3946}, - {545: 2949, 562: 2947, 622: 2946, 670: 2942, 790: 3910, 821: 3909, 2943, 2944, 2945, 2954, 2952, 3911, 3912}, - {52: 3908, 553: 1030, 564: 1030, 1030}, - {52: 3907}, - {52: 3906}, + {545: 3964, 653: 3967, 1030: 3966, 1113: 3965}, + {545: 2968, 562: 2966, 622: 2965, 662: 2961, 790: 3929, 821: 3928, 2962, 2963, 2964, 2973, 2971, 3930, 3931}, + {52: 3927, 553: 1034, 564: 1034, 1034}, + {52: 3926}, + {52: 3925}, // 1010 - {1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 550: 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 562: 1057, 1057, 1057, 1057, 568: 1057, 1057, 1057, 1057, 1057, 574: 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 594: 1057, 1057, 1057, 1057, 1057, 1057, 602: 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 634: 1057, 1057, 1057, 1057, 1057, 1057, 641: 1057, 646: 1057, 1057, 1057, 1057, 670: 1057, 672: 1057, 718: 1057, 728: 1057, 818: 1057}, - {1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 550: 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 562: 1058, 1058, 1058, 1058, 568: 1058, 1058, 1058, 1058, 1058, 574: 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 594: 1058, 1058, 1058, 1058, 1058, 1058, 602: 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 634: 1058, 1058, 1058, 1058, 1058, 1058, 641: 1058, 646: 1058, 1058, 1058, 1058, 670: 1058, 672: 1058, 718: 1058, 728: 1058, 818: 1058}, - {1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 550: 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 562: 1059, 1059, 1059, 1059, 568: 1059, 1059, 1059, 1059, 1059, 574: 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 594: 1059, 1059, 1059, 1059, 1059, 1059, 602: 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 634: 1059, 1059, 1059, 1059, 1059, 1059, 641: 1059, 646: 1059, 1059, 1059, 1059, 670: 1059, 672: 1059, 718: 1059, 728: 1059, 818: 1059}, - {1215, 1215, 52: 1215, 544: 1215, 546: 1215, 553: 1030, 556: 1215, 564: 1030, 1030}, - {1214, 1214, 52: 1214, 544: 1214, 546: 1214, 553: 1029, 556: 1214, 564: 1029, 1029, 568: 3915, 570: 3914, 579: 3913, 857: 3916, 3917}, + {1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 550: 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 562: 1061, 1061, 1061, 1061, 568: 1061, 1061, 1061, 1061, 1061, 574: 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 594: 1061, 1061, 1061, 1061, 1061, 1061, 602: 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, 634: 1061, 1061, 1061, 1061, 1061, 1061, 642: 1061, 646: 1061, 1061, 1061, 1061, 662: 1061, 672: 1061, 721: 1061, 726: 1061, 818: 1061}, + {1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 550: 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 562: 1062, 1062, 1062, 1062, 568: 1062, 1062, 1062, 1062, 1062, 574: 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 594: 1062, 1062, 1062, 1062, 1062, 1062, 602: 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 634: 1062, 1062, 1062, 1062, 1062, 1062, 642: 1062, 646: 1062, 1062, 1062, 1062, 662: 1062, 672: 1062, 721: 1062, 726: 1062, 818: 1062}, + {1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 550: 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 562: 1063, 1063, 1063, 1063, 568: 1063, 1063, 1063, 1063, 1063, 574: 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 594: 1063, 1063, 1063, 1063, 1063, 1063, 602: 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 634: 1063, 1063, 1063, 1063, 1063, 1063, 642: 1063, 646: 1063, 1063, 1063, 1063, 662: 1063, 672: 1063, 721: 1063, 726: 1063, 818: 1063}, + {1219, 1219, 52: 1219, 544: 1219, 546: 1219, 553: 1034, 556: 1219, 564: 1034, 1034}, + {1218, 1218, 52: 1218, 544: 1218, 546: 1218, 553: 1033, 556: 1218, 564: 1033, 1033, 568: 3934, 570: 3933, 579: 3932, 857: 3935, 3936}, // 1015 - {1042, 1042, 52: 1042, 544: 1042, 546: 1042, 556: 1042}, - {1041, 1041, 52: 1041, 544: 1041, 546: 1041, 556: 1041}, - {737: 3936}, - {573: 3078, 656: 3924, 814: 3922, 829: 3923, 1001: 3931}, - {10: 3919, 247: 3920, 1378: 3921}, + {1046, 1046, 52: 1046, 544: 1046, 546: 1046, 556: 1046}, + {1045, 1045, 52: 1045, 544: 1045, 546: 1045, 556: 1045}, + {737: 3955}, + {573: 3097, 656: 3943, 814: 3941, 829: 3942, 1001: 3950}, + {10: 3938, 247: 3939, 1382: 3940}, // 1020 - {1035, 1035, 52: 1035, 544: 1035, 546: 1035, 556: 1035, 568: 3915, 570: 3914, 858: 3918}, - {1034, 1034, 52: 1034, 544: 1034, 546: 1034, 556: 1034}, - {1033, 1033, 52: 1033, 544: 1033, 546: 1033, 556: 1033}, - {573: 1092, 602: 1092, 653: 1092, 656: 1092}, - {573: 1091, 602: 1091, 653: 1091, 656: 1091}, + {1039, 1039, 52: 1039, 544: 1039, 546: 1039, 556: 1039, 568: 3934, 570: 3933, 858: 3937}, + {1038, 1038, 52: 1038, 544: 1038, 546: 1038, 556: 1038}, + {1037, 1037, 52: 1037, 544: 1037, 546: 1037, 556: 1037}, + {573: 1096, 602: 1096, 653: 1096, 656: 1096}, + {573: 1095, 602: 1095, 653: 1095, 656: 1095}, // 1025 - {573: 3078, 602: 1090, 653: 1090, 656: 3924, 814: 3922, 829: 3923, 1001: 3925, 1372: 3926}, - {2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 15: 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 52: 2257, 58: 2257, 60: 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 111: 2257, 113: 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 127: 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 143: 2257, 147: 2257, 149: 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 224: 2257, 232: 2257, 274: 2257, 544: 2257, 2257, 2257, 549: 2257, 551: 2257, 2257, 2257, 556: 2257, 560: 2257, 562: 2257, 2257, 2257, 2257, 2257, 2257, 571: 2257, 2257, 574: 2257, 577: 2257, 580: 2257, 602: 2257, 622: 2257, 653: 2257, 670: 2257, 723: 2257, 2257, 727: 2257}, - {1096, 1096, 9: 1096, 52: 1096, 224: 1096, 544: 1096, 546: 1096, 553: 1096, 556: 1096, 564: 1096, 1096, 572: 1096, 574: 1096, 577: 1096, 602: 1096, 653: 1096}, - {1095, 1095, 9: 1095, 52: 1095, 224: 1095, 544: 1095, 546: 1095, 553: 1095, 556: 1095, 564: 1095, 1095, 572: 1095, 574: 1095, 577: 1095, 602: 1095, 653: 1095}, - {602: 1089, 653: 1089}, + {573: 3097, 602: 1094, 653: 1094, 656: 3943, 814: 3941, 829: 3942, 1001: 3944, 1376: 3945}, + {2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 15: 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 52: 2263, 58: 2263, 2263, 61: 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 108: 2263, 114: 2263, 2263, 2263, 2263, 2263, 120: 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 129: 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 145: 2263, 149: 2263, 151: 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 224: 2263, 232: 2263, 275: 2263, 544: 2263, 2263, 2263, 549: 2263, 551: 2263, 2263, 2263, 556: 2263, 560: 2263, 562: 2263, 2263, 2263, 2263, 2263, 2263, 571: 2263, 2263, 574: 2263, 577: 2263, 580: 2263, 602: 2263, 622: 2263, 653: 2263, 662: 2263, 723: 2263, 2263, 726: 2263, 728: 2263}, + {1100, 1100, 9: 1100, 52: 1100, 224: 1100, 544: 1100, 546: 1100, 553: 1100, 556: 1100, 564: 1100, 1100, 572: 1100, 574: 1100, 577: 1100, 602: 1100, 653: 1100}, + {1099, 1099, 9: 1099, 52: 1099, 224: 1099, 544: 1099, 546: 1099, 553: 1099, 556: 1099, 564: 1099, 1099, 572: 1099, 574: 1099, 577: 1099, 602: 1099, 653: 1099}, + {602: 1093, 653: 1093}, // 1030 - {602: 3928, 653: 3927, 1462: 3929}, - {205: 1094}, - {205: 1093}, - {205: 3930}, - {1085, 1085, 52: 1085, 544: 1085, 546: 1085, 553: 1085, 556: 1085, 564: 1085, 1085, 572: 1085, 574: 1085, 577: 1085}, + {602: 3947, 653: 3946, 1467: 3948}, + {206: 1098}, + {206: 1097}, + {206: 3949}, + {1089, 1089, 52: 1089, 544: 1089, 546: 1089, 553: 1089, 556: 1089, 564: 1089, 1089, 572: 1089, 574: 1089, 577: 1089}, // 1035 - {1088, 1088, 9: 3932, 52: 1088, 224: 3933, 544: 1088, 546: 1088, 553: 1088, 556: 1088, 564: 1088, 1088, 572: 1088, 574: 1088, 577: 1088}, - {573: 3078, 656: 3924, 814: 3922, 829: 3923, 1001: 3935}, - {573: 3078, 656: 3924, 814: 3922, 829: 3923, 1001: 3934}, - {1086, 1086, 52: 1086, 544: 1086, 546: 1086, 553: 1086, 556: 1086, 564: 1086, 1086, 572: 1086, 574: 1086, 577: 1086}, - {1087, 1087, 52: 1087, 544: 1087, 546: 1087, 553: 1087, 556: 1087, 564: 1087, 1087, 572: 1087, 574: 1087, 577: 1087}, + {1092, 1092, 9: 3951, 52: 1092, 224: 3952, 544: 1092, 546: 1092, 553: 1092, 556: 1092, 564: 1092, 1092, 572: 1092, 574: 1092, 577: 1092}, + {573: 3097, 656: 3943, 814: 3941, 829: 3942, 1001: 3954}, + {573: 3097, 656: 3943, 814: 3941, 829: 3942, 1001: 3953}, + {1090, 1090, 52: 1090, 544: 1090, 546: 1090, 553: 1090, 556: 1090, 564: 1090, 1090, 572: 1090, 574: 1090, 577: 1090}, + {1091, 1091, 52: 1091, 544: 1091, 546: 1091, 553: 1091, 556: 1091, 564: 1091, 1091, 572: 1091, 574: 1091, 577: 1091}, // 1040 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3937, 990: 3939, 1017: 3938}, - {1526, 1526, 9: 1526, 52: 1526, 171: 1526, 544: 1526, 546: 1526, 553: 1526, 556: 1526, 564: 1526, 1526, 568: 1526, 570: 1526, 572: 1526, 574: 1526, 577: 1526, 579: 1526, 581: 3801, 3799, 3800, 3798, 3796, 587: 1526, 589: 1526, 592: 3944, 602: 1526, 605: 1526, 607: 1526, 619: 3943, 815: 3797, 3795, 1428: 3942}, - {1529, 1529, 9: 3940, 52: 1529, 171: 1529, 544: 1529, 546: 1529, 553: 1529, 556: 1529, 564: 1529, 1529, 568: 1529, 570: 1529, 572: 1529, 574: 1529, 577: 1529}, - {1528, 1528, 9: 1528, 52: 1528, 171: 1528, 544: 1528, 546: 1528, 553: 1528, 556: 1528, 564: 1528, 1528, 568: 1528, 570: 1528, 572: 1528, 574: 1528, 577: 1528, 579: 1528, 587: 1528, 589: 1528, 602: 1528, 605: 1528, 607: 1528}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3937, 990: 3941}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3956, 990: 3958, 1017: 3957}, + {1530, 1530, 9: 1530, 52: 1530, 172: 1530, 544: 1530, 546: 1530, 553: 1530, 556: 1530, 564: 1530, 1530, 568: 1530, 570: 1530, 572: 1530, 574: 1530, 577: 1530, 579: 1530, 581: 3820, 3818, 3819, 3817, 3815, 587: 1530, 589: 1530, 592: 3963, 602: 1530, 605: 1530, 607: 1530, 619: 3962, 815: 3816, 3814, 1433: 3961}, + {1533, 1533, 9: 3959, 52: 1533, 172: 1533, 544: 1533, 546: 1533, 553: 1533, 556: 1533, 564: 1533, 1533, 568: 1533, 570: 1533, 572: 1533, 574: 1533, 577: 1533}, + {1532, 1532, 9: 1532, 52: 1532, 172: 1532, 544: 1532, 546: 1532, 553: 1532, 556: 1532, 564: 1532, 1532, 568: 1532, 570: 1532, 572: 1532, 574: 1532, 577: 1532, 579: 1532, 587: 1532, 589: 1532, 602: 1532, 605: 1532, 607: 1532}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3956, 990: 3960}, // 1045 - {1527, 1527, 9: 1527, 52: 1527, 171: 1527, 544: 1527, 546: 1527, 553: 1527, 556: 1527, 564: 1527, 1527, 568: 1527, 570: 1527, 572: 1527, 574: 1527, 577: 1527, 579: 1527, 587: 1527, 589: 1527, 602: 1527, 605: 1527, 607: 1527}, - {1525, 1525, 9: 1525, 52: 1525, 171: 1525, 544: 1525, 546: 1525, 553: 1525, 556: 1525, 564: 1525, 1525, 568: 1525, 570: 1525, 572: 1525, 574: 1525, 577: 1525, 579: 1525, 587: 1525, 589: 1525, 602: 1525, 605: 1525, 607: 1525}, - {1524, 1524, 9: 1524, 52: 1524, 171: 1524, 544: 1524, 546: 1524, 553: 1524, 556: 1524, 564: 1524, 1524, 568: 1524, 570: 1524, 572: 1524, 574: 1524, 577: 1524, 579: 1524, 587: 1524, 589: 1524, 602: 1524, 605: 1524, 607: 1524}, - {1523, 1523, 9: 1523, 52: 1523, 171: 1523, 544: 1523, 546: 1523, 553: 1523, 556: 1523, 564: 1523, 1523, 568: 1523, 570: 1523, 572: 1523, 574: 1523, 577: 1523, 579: 1523, 587: 1523, 589: 1523, 602: 1523, 605: 1523, 607: 1523}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 3957, 3092, 3093, 3091, 793: 4046}, + {1531, 1531, 9: 1531, 52: 1531, 172: 1531, 544: 1531, 546: 1531, 553: 1531, 556: 1531, 564: 1531, 1531, 568: 1531, 570: 1531, 572: 1531, 574: 1531, 577: 1531, 579: 1531, 587: 1531, 589: 1531, 602: 1531, 605: 1531, 607: 1531}, + {1529, 1529, 9: 1529, 52: 1529, 172: 1529, 544: 1529, 546: 1529, 553: 1529, 556: 1529, 564: 1529, 1529, 568: 1529, 570: 1529, 572: 1529, 574: 1529, 577: 1529, 579: 1529, 587: 1529, 589: 1529, 602: 1529, 605: 1529, 607: 1529}, + {1528, 1528, 9: 1528, 52: 1528, 172: 1528, 544: 1528, 546: 1528, 553: 1528, 556: 1528, 564: 1528, 1528, 568: 1528, 570: 1528, 572: 1528, 574: 1528, 577: 1528, 579: 1528, 587: 1528, 589: 1528, 602: 1528, 605: 1528, 607: 1528}, + {1527, 1527, 9: 1527, 52: 1527, 172: 1527, 544: 1527, 546: 1527, 553: 1527, 556: 1527, 564: 1527, 1527, 568: 1527, 570: 1527, 572: 1527, 574: 1527, 577: 1527, 579: 1527, 587: 1527, 589: 1527, 602: 1527, 605: 1527, 607: 1527}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 3976, 3111, 3112, 3110, 793: 4065}, // 1050 - {1519, 1519, 9: 3969, 52: 1519, 544: 1519, 546: 1519, 553: 1519, 556: 1519, 564: 1519, 1519, 568: 1519, 570: 1519, 572: 1519, 574: 1519, 577: 1519, 579: 3913, 857: 3967, 926: 3968}, + {1523, 1523, 9: 3988, 52: 1523, 544: 1523, 546: 1523, 553: 1523, 556: 1523, 564: 1523, 1523, 568: 1523, 570: 1523, 572: 1523, 574: 1523, 577: 1523, 579: 3932, 857: 3986, 926: 3987}, {147, 147, 9: 147, 52: 147, 544: 147, 546: 147, 553: 147, 556: 147, 564: 147, 147, 568: 147, 570: 147, 572: 147, 574: 147, 577: 147, 579: 147}, - {545: 3949, 956: 3950}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 1557, 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3955, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3951, 908: 3954, 1508: 3953, 3952}, + {545: 3968, 956: 3969}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 1561, 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3974, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3970, 908: 3973, 1515: 3972, 3971}, {145, 145, 9: 145, 52: 145, 544: 145, 546: 145, 553: 145, 556: 145, 564: 145, 145, 568: 145, 570: 145, 572: 145, 574: 145, 577: 145, 579: 145}, // 1055 - {1553, 1553, 9: 1553, 52: 1553, 544: 1553, 546: 1553, 556: 1553, 570: 1553, 576: 1553, 578: 1553, 1553, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {52: 3966}, - {9: 3964, 52: 1556}, - {9: 1554, 52: 1554}, - {1552, 1552, 9: 1552, 52: 1552, 544: 1552, 3956, 1552, 556: 1552, 570: 1552, 576: 1552, 578: 1552, 1552}, + {1557, 1557, 9: 1557, 52: 1557, 544: 1557, 546: 1557, 556: 1557, 570: 1557, 576: 1557, 578: 1557, 1557, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {52: 3985}, + {9: 3983, 52: 1560}, + {9: 1558, 52: 1558}, + {1556, 1556, 9: 1556, 52: 1556, 544: 1556, 3975, 1556, 556: 1556, 570: 1556, 576: 1556, 578: 1556, 1556}, // 1060 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 3957, 3092, 3093, 3091, 793: 3958}, - {52: 1501, 569: 1501, 729: 3960}, - {52: 3959}, - {1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 546: 1471, 1471, 1471, 550: 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 563: 1471, 1471, 1471, 568: 1471, 1471, 1471, 1471, 1471, 574: 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 594: 1471, 1471, 1471, 1471, 1471, 1471, 602: 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 623: 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 1471, 634: 1471, 1471, 1471, 1471, 1471, 1471, 641: 1471, 646: 1471, 1471, 1471, 1471, 672: 1471, 718: 1471}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 3961, 3092, 3093, 3091}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 3976, 3111, 3112, 3110, 793: 3977}, + {52: 1505, 569: 1505, 729: 3979}, + {52: 3978}, + {1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 546: 1475, 1475, 1475, 550: 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 563: 1475, 1475, 1475, 568: 1475, 1475, 1475, 1475, 1475, 574: 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 594: 1475, 1475, 1475, 1475, 1475, 1475, 602: 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 623: 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 634: 1475, 1475, 1475, 1475, 1475, 1475, 642: 1475, 646: 1475, 1475, 1475, 1475, 672: 1475, 721: 1475}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 3980, 3111, 3112, 3110}, // 1065 - {52: 1500, 569: 1500, 729: 3962}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 3963, 3092, 3093, 3091}, - {1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 546: 1499, 1499, 1499, 550: 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 563: 1499, 1499, 1499, 568: 1499, 1499, 1499, 1499, 1499, 574: 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 594: 1499, 1499, 1499, 1499, 1499, 1499, 602: 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 623: 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 634: 1499, 1499, 1499, 1499, 1499, 1499, 641: 1499, 646: 1499, 1499, 1499, 1499, 672: 1499, 718: 1499, 733: 1499, 1499}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3955, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3951, 908: 3965}, - {9: 1555, 52: 1555}, + {52: 1504, 569: 1504, 729: 3981}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 3982, 3111, 3112, 3110}, + {1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 546: 1503, 1503, 1503, 550: 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 563: 1503, 1503, 1503, 568: 1503, 1503, 1503, 1503, 1503, 574: 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 594: 1503, 1503, 1503, 1503, 1503, 1503, 602: 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 623: 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 1503, 634: 1503, 1503, 1503, 1503, 1503, 1503, 642: 1503, 646: 1503, 1503, 1503, 1503, 672: 1503, 721: 1503, 733: 1503, 1503}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3974, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3970, 908: 3984}, + {9: 1559, 52: 1559}, // 1070 - {1558, 1558, 9: 1558, 52: 1558, 117: 1558, 544: 1558, 546: 1558, 553: 1558, 556: 1558, 564: 1558, 1558, 568: 1558, 570: 1558, 572: 1558, 574: 1558, 577: 1558, 579: 1558, 581: 1558}, - {1518, 1518, 52: 1518, 171: 1518, 544: 1518, 546: 1518, 553: 1518, 556: 1518, 564: 1518, 1518, 568: 1518, 570: 1518, 572: 1518, 574: 1518, 577: 1518}, - {1084, 1084, 52: 1084, 544: 1084, 546: 1084, 553: 1084, 556: 1084, 564: 1084, 1084, 568: 3915, 570: 3914, 572: 1084, 574: 1084, 577: 1084, 858: 3972, 941: 3971}, - {653: 3948, 1030: 3970}, + {1562, 1562, 9: 1562, 52: 1562, 120: 1562, 544: 1562, 546: 1562, 553: 1562, 556: 1562, 564: 1562, 1562, 568: 1562, 570: 1562, 572: 1562, 574: 1562, 577: 1562, 579: 1562, 581: 1562}, + {1522, 1522, 52: 1522, 172: 1522, 544: 1522, 546: 1522, 553: 1522, 556: 1522, 564: 1522, 1522, 568: 1522, 570: 1522, 572: 1522, 574: 1522, 577: 1522}, + {1088, 1088, 52: 1088, 544: 1088, 546: 1088, 553: 1088, 556: 1088, 564: 1088, 1088, 568: 3934, 570: 3933, 572: 1088, 574: 1088, 577: 1088, 858: 3991, 941: 3990}, + {653: 3967, 1030: 3989}, {146, 146, 9: 146, 52: 146, 544: 146, 546: 146, 553: 146, 556: 146, 564: 146, 146, 568: 146, 570: 146, 572: 146, 574: 146, 577: 146, 579: 146}, // 1075 - {1055, 1055, 52: 1055, 544: 1055, 546: 1055, 553: 1055, 556: 1055, 564: 1055, 1055, 572: 3974, 574: 1055, 577: 3975, 1007: 3973}, - {1083, 1083, 52: 1083, 544: 1083, 546: 1083, 553: 1083, 556: 1083, 564: 1083, 1083, 572: 1083, 574: 1083, 577: 1083}, - {1061, 1061, 52: 1061, 544: 1061, 546: 1061, 553: 1061, 556: 1061, 564: 1061, 1061, 574: 4003, 1008: 4002}, - {353: 3980, 728: 3979}, - {620: 3976}, + {1059, 1059, 52: 1059, 544: 1059, 546: 1059, 553: 1059, 556: 1059, 564: 1059, 1059, 572: 3993, 574: 1059, 577: 3994, 1007: 3992}, + {1087, 1087, 52: 1087, 544: 1087, 546: 1087, 553: 1087, 556: 1087, 564: 1087, 1087, 572: 1087, 574: 1087, 577: 1087}, + {1065, 1065, 52: 1065, 544: 1065, 546: 1065, 553: 1065, 556: 1065, 564: 1065, 1065, 574: 4022, 1008: 4021}, + {355: 3999, 726: 3998}, + {620: 3995}, // 1080 - {353: 3977}, - {275: 3978}, - {1047, 1047, 52: 1047, 544: 1047, 546: 1047, 553: 1047, 556: 1047, 564: 1047, 1047, 574: 1047}, - {1046, 1046, 52: 1046, 204: 1046, 207: 1046, 237: 1046, 544: 1046, 546: 1046, 553: 1046, 556: 1046, 564: 1046, 1046, 574: 1046, 1231: 3982, 3996}, - {1046, 1046, 52: 1046, 204: 1046, 207: 1046, 544: 1046, 546: 1046, 553: 1046, 556: 1046, 564: 1046, 1046, 574: 1046, 1231: 3982, 3981}, + {355: 3996}, + {276: 3997}, + {1051, 1051, 52: 1051, 544: 1051, 546: 1051, 553: 1051, 556: 1051, 564: 1051, 1051, 574: 1051}, + {1050, 1050, 52: 1050, 205: 1050, 208: 1050, 237: 1050, 544: 1050, 546: 1050, 553: 1050, 556: 1050, 564: 1050, 1050, 574: 1050, 1233: 4001, 4015}, + {1050, 1050, 52: 1050, 205: 1050, 208: 1050, 544: 1050, 546: 1050, 553: 1050, 556: 1050, 564: 1050, 1050, 574: 1050, 1233: 4001, 4000}, // 1085 - {1053, 1053, 52: 1053, 204: 3993, 207: 3994, 544: 1053, 546: 1053, 553: 1053, 556: 1053, 564: 1053, 1053, 574: 1053}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 3985, 898: 3986}, - {1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 594: 1272, 1272, 1272, 1272, 1272, 1272, 602: 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 634: 1272, 1272, 1272, 1272, 1272, 1272, 641: 1272, 646: 1272, 1272, 1272, 1272, 660: 1272, 669: 1272, 1272, 672: 1272, 716: 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 3991, 1272, 735: 1272, 1272, 1272, 1272, 741: 1272, 1272, 1272, 1272, 1272, 754: 1272, 779: 1272, 1272, 1272, 1272, 1272, 1272, 1272}, - {729: 3989}, - {1269, 1269, 9: 1269, 52: 1269, 204: 1269, 207: 1269, 237: 1269, 544: 1269, 546: 1269, 553: 1269, 556: 1269, 564: 1269, 1269, 574: 1269, 576: 1269, 726: 1269, 742: 1269, 744: 1269}, + {1057, 1057, 52: 1057, 205: 4012, 208: 4013, 544: 1057, 546: 1057, 553: 1057, 556: 1057, 564: 1057, 1057, 574: 1057}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 4004, 898: 4005}, + {1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 594: 1276, 1276, 1276, 1276, 1276, 1276, 602: 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 634: 1276, 1276, 1276, 1276, 1276, 1276, 642: 1276, 646: 1276, 1276, 1276, 1276, 658: 1276, 661: 1276, 1276, 672: 1276, 710: 1276, 717: 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 4010, 1276, 735: 1276, 1276, 1276, 1276, 741: 1276, 1276, 1276, 1276, 1276, 754: 1276, 779: 1276, 1276, 1276, 1276, 1276, 1276, 1276}, + {729: 4008}, + {1273, 1273, 9: 1273, 52: 1273, 205: 1273, 208: 1273, 237: 1273, 544: 1273, 546: 1273, 553: 1273, 556: 1273, 564: 1273, 1273, 574: 1273, 576: 1273, 727: 1273, 742: 1273, 744: 1273}, // 1090 - {1045, 1045, 9: 3987, 52: 1045, 204: 1045, 207: 1045, 237: 1045, 544: 1045, 546: 1045, 553: 1045, 556: 1045, 564: 1045, 1045, 574: 1045}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 3988}, - {1268, 1268, 9: 1268, 52: 1268, 204: 1268, 207: 1268, 226: 1268, 237: 1268, 544: 1268, 546: 1268, 553: 1268, 556: 1268, 564: 1268, 1268, 574: 1268, 576: 1268, 726: 1268, 730: 1268, 742: 1268, 744: 1268, 779: 1268, 1268}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 3990, 3092, 3093, 3091}, - {1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 594: 1270, 1270, 1270, 1270, 1270, 1270, 602: 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 634: 1270, 1270, 1270, 1270, 1270, 1270, 641: 1270, 646: 1270, 1270, 1270, 1270, 660: 1270, 669: 1270, 1270, 672: 1270, 716: 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 730: 1270, 735: 1270, 1270, 1270, 1270, 741: 1270, 1270, 1270, 1270, 1270, 754: 1270, 779: 1270, 1270, 1270, 1270, 1270, 1270, 1270}, + {1049, 1049, 9: 4006, 52: 1049, 205: 1049, 208: 1049, 237: 1049, 544: 1049, 546: 1049, 553: 1049, 556: 1049, 564: 1049, 1049, 574: 1049}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 4007}, + {1272, 1272, 9: 1272, 52: 1272, 205: 1272, 208: 1272, 226: 1272, 237: 1272, 544: 1272, 546: 1272, 553: 1272, 556: 1272, 564: 1272, 1272, 574: 1272, 576: 1272, 727: 1272, 730: 1272, 742: 1272, 744: 1272, 779: 1272, 1272}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4009, 3111, 3112, 3110}, + {1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 594: 1274, 1274, 1274, 1274, 1274, 1274, 602: 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 634: 1274, 1274, 1274, 1274, 1274, 1274, 642: 1274, 646: 1274, 1274, 1274, 1274, 658: 1274, 661: 1274, 1274, 672: 1274, 710: 1274, 717: 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 730: 1274, 735: 1274, 1274, 1274, 1274, 741: 1274, 1274, 1274, 1274, 1274, 754: 1274, 779: 1274, 1274, 1274, 1274, 1274, 1274, 1274}, // 1095 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 3992, 3092, 3093, 3091}, - {1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 594: 1271, 1271, 1271, 1271, 1271, 1271, 602: 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 634: 1271, 1271, 1271, 1271, 1271, 1271, 641: 1271, 646: 1271, 1271, 1271, 1271, 660: 1271, 669: 1271, 1271, 672: 1271, 716: 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 730: 1271, 735: 1271, 1271, 1271, 1271, 741: 1271, 1271, 1271, 1271, 1271, 754: 1271, 779: 1271, 1271, 1271, 1271, 1271, 1271, 1271}, - {1050, 1050, 52: 1050, 544: 1050, 546: 1050, 553: 1050, 556: 1050, 564: 1050, 1050, 574: 1050}, - {332: 3995}, - {1048, 1048, 52: 1048, 544: 1048, 546: 1048, 553: 1048, 556: 1048, 564: 1048, 1048, 574: 1048}, - // 1100 - {1054, 1054, 52: 1054, 204: 3997, 207: 3999, 237: 3998, 544: 1054, 546: 1054, 553: 1054, 556: 1054, 564: 1054, 1054, 574: 1054}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4011, 3111, 3112, 3110}, + {1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 594: 1275, 1275, 1275, 1275, 1275, 1275, 602: 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 634: 1275, 1275, 1275, 1275, 1275, 1275, 642: 1275, 646: 1275, 1275, 1275, 1275, 658: 1275, 661: 1275, 1275, 672: 1275, 710: 1275, 717: 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 730: 1275, 735: 1275, 1275, 1275, 1275, 741: 1275, 1275, 1275, 1275, 1275, 754: 1275, 779: 1275, 1275, 1275, 1275, 1275, 1275, 1275}, + {1054, 1054, 52: 1054, 544: 1054, 546: 1054, 553: 1054, 556: 1054, 564: 1054, 1054, 574: 1054}, + {334: 4014}, {1052, 1052, 52: 1052, 544: 1052, 546: 1052, 553: 1052, 556: 1052, 564: 1052, 1052, 574: 1052}, - {573: 3078, 814: 4001}, - {332: 4000}, - {1049, 1049, 52: 1049, 544: 1049, 546: 1049, 553: 1049, 556: 1049, 564: 1049, 1049, 574: 1049}, + // 1100 + {1058, 1058, 52: 1058, 205: 4016, 208: 4018, 237: 4017, 544: 1058, 546: 1058, 553: 1058, 556: 1058, 564: 1058, 1058, 574: 1058}, + {1056, 1056, 52: 1056, 544: 1056, 546: 1056, 553: 1056, 556: 1056, 564: 1056, 1056, 574: 1056}, + {573: 3097, 814: 4020}, + {334: 4019}, + {1053, 1053, 52: 1053, 544: 1053, 546: 1053, 553: 1053, 556: 1053, 564: 1053, 1053, 574: 1053}, // 1105 - {1051, 1051, 52: 1051, 544: 1051, 546: 1051, 553: 1051, 556: 1051, 564: 1051, 1051, 574: 1051}, - {1216, 1216, 52: 1216, 544: 1216, 546: 1216, 553: 1216, 556: 1216, 564: 1216, 1216}, - {1430: 4004}, - {547: 4005}, - {268, 268, 52: 268, 140: 4009, 166: 4008, 544: 268, 546: 268, 553: 268, 556: 268, 564: 268, 268, 736: 268, 947: 4007, 1189: 4006}, + {1055, 1055, 52: 1055, 544: 1055, 546: 1055, 553: 1055, 556: 1055, 564: 1055, 1055, 574: 1055}, + {1220, 1220, 52: 1220, 544: 1220, 546: 1220, 553: 1220, 556: 1220, 564: 1220, 1220}, + {1435: 4023}, + {547: 4024}, + {268, 268, 52: 268, 142: 4028, 168: 4027, 544: 268, 546: 268, 553: 268, 556: 268, 564: 268, 268, 736: 268, 947: 4026, 1191: 4025}, // 1110 - {253, 253, 52: 253, 544: 253, 546: 253, 553: 253, 556: 253, 564: 253, 253, 736: 4037, 1071: 4036}, - {145: 4016, 867: 4012, 871: 4014, 878: 4015, 4013, 1188: 4011, 1375: 4010}, - {266, 266, 17: 266, 58: 266, 60: 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 145: 266, 544: 266, 266, 576: 266, 620: 266, 727: 266, 867: 266, 871: 266, 878: 266, 266}, - {265, 265, 17: 265, 58: 265, 60: 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 145: 265, 544: 265, 265, 576: 265, 620: 265, 727: 265, 867: 265, 871: 265, 878: 265, 265}, - {267, 267, 52: 267, 145: 4016, 544: 267, 267, 267, 553: 267, 556: 267, 563: 267, 267, 267, 571: 267, 736: 267, 867: 4012, 871: 4014, 878: 4015, 4013, 1188: 4035}, + {253, 253, 52: 253, 544: 253, 546: 253, 553: 253, 556: 253, 564: 253, 253, 736: 4056, 1072: 4055}, + {147: 4035, 867: 4031, 871: 4033, 878: 4034, 4032, 1190: 4030, 1379: 4029}, + {266, 266, 17: 266, 59: 266, 61: 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, 147: 266, 544: 266, 266, 576: 266, 620: 266, 728: 266, 867: 266, 871: 266, 878: 266, 266}, + {265, 265, 17: 265, 59: 265, 61: 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 147: 265, 544: 265, 265, 576: 265, 620: 265, 728: 265, 867: 265, 871: 265, 878: 265, 265}, + {267, 267, 52: 267, 147: 4035, 544: 267, 267, 267, 553: 267, 556: 267, 563: 267, 267, 267, 571: 267, 736: 267, 867: 4031, 871: 4033, 878: 4034, 4032, 1190: 4054}, // 1115 - {263, 263, 52: 263, 145: 263, 544: 263, 263, 263, 553: 263, 556: 263, 563: 263, 263, 263, 571: 263, 736: 263, 867: 263, 871: 263, 878: 263, 263}, - {737: 4033}, - {547: 4027, 652: 4028, 654: 4029, 974: 4032}, - {737: 4030}, - {737: 4025}, + {263, 263, 52: 263, 147: 263, 544: 263, 263, 263, 553: 263, 556: 263, 563: 263, 263, 263, 571: 263, 736: 263, 867: 263, 871: 263, 878: 263, 263}, + {737: 4052}, + {547: 4046, 652: 4047, 654: 4048, 974: 4051}, + {737: 4049}, + {737: 4044}, // 1120 - {561: 4017}, - {737: 4018}, - {547: 4019, 652: 4020, 654: 4021, 1036: 4022}, - {448, 448, 9: 448, 52: 448, 145: 448, 544: 448, 448, 448, 553: 448, 556: 448, 563: 448, 448, 448, 571: 448, 736: 448, 867: 448, 871: 448, 878: 448, 448, 1024: 448}, - {447, 447, 9: 447, 52: 447, 145: 447, 544: 447, 447, 447, 553: 447, 556: 447, 563: 447, 447, 447, 571: 447, 736: 447, 867: 447, 871: 447, 878: 447, 447, 1024: 447}, + {561: 4036}, + {737: 4037}, + {547: 4038, 652: 4039, 654: 4040, 1036: 4041}, + {452, 452, 9: 452, 52: 452, 147: 452, 544: 452, 452, 452, 553: 452, 556: 452, 563: 452, 452, 452, 571: 452, 736: 452, 867: 452, 871: 452, 878: 452, 452, 1024: 452}, + {451, 451, 9: 451, 52: 451, 147: 451, 544: 451, 451, 451, 553: 451, 556: 451, 563: 451, 451, 451, 571: 451, 736: 451, 867: 451, 871: 451, 878: 451, 451, 1024: 451}, // 1125 - {446, 446, 9: 446, 52: 446, 145: 446, 544: 446, 446, 446, 553: 446, 556: 446, 563: 446, 446, 446, 571: 446, 736: 446, 867: 446, 871: 446, 878: 446, 446, 1024: 446}, - {258, 258, 52: 258, 145: 258, 544: 258, 258, 258, 553: 258, 556: 258, 563: 258, 258, 258, 571: 258, 736: 258, 867: 258, 871: 258, 878: 258, 258, 1024: 4023}, - {871: 4024}, - {257, 257, 52: 257, 145: 257, 544: 257, 257, 257, 553: 257, 556: 257, 563: 257, 257, 257, 571: 257, 736: 257, 867: 257, 871: 257, 878: 257, 257}, - {547: 4027, 652: 4028, 654: 4029, 974: 4026}, + {450, 450, 9: 450, 52: 450, 147: 450, 544: 450, 450, 450, 553: 450, 556: 450, 563: 450, 450, 450, 571: 450, 736: 450, 867: 450, 871: 450, 878: 450, 450, 1024: 450}, + {258, 258, 52: 258, 147: 258, 544: 258, 258, 258, 553: 258, 556: 258, 563: 258, 258, 258, 571: 258, 736: 258, 867: 258, 871: 258, 878: 258, 258, 1024: 4042}, + {871: 4043}, + {257, 257, 52: 257, 147: 257, 544: 257, 257, 257, 553: 257, 556: 257, 563: 257, 257, 257, 571: 257, 736: 257, 867: 257, 871: 257, 878: 257, 257}, + {547: 4046, 652: 4047, 654: 4048, 974: 4045}, // 1130 - {259, 259, 52: 259, 145: 259, 544: 259, 259, 259, 553: 259, 556: 259, 563: 259, 259, 259, 571: 259, 736: 259, 867: 259, 871: 259, 878: 259, 259}, - {256, 256, 52: 256, 145: 256, 544: 256, 256, 256, 553: 256, 556: 256, 563: 256, 256, 256, 571: 256, 736: 256, 867: 256, 871: 256, 878: 256, 256}, - {255, 255, 52: 255, 145: 255, 544: 255, 255, 255, 553: 255, 556: 255, 563: 255, 255, 255, 571: 255, 736: 255, 867: 255, 871: 255, 878: 255, 255}, - {254, 254, 52: 254, 145: 254, 544: 254, 254, 254, 553: 254, 556: 254, 563: 254, 254, 254, 571: 254, 736: 254, 867: 254, 871: 254, 878: 254, 254}, - {547: 4027, 652: 4028, 654: 4029, 974: 4031}, + {259, 259, 52: 259, 147: 259, 544: 259, 259, 259, 553: 259, 556: 259, 563: 259, 259, 259, 571: 259, 736: 259, 867: 259, 871: 259, 878: 259, 259}, + {256, 256, 52: 256, 147: 256, 544: 256, 256, 256, 553: 256, 556: 256, 563: 256, 256, 256, 571: 256, 736: 256, 867: 256, 871: 256, 878: 256, 256}, + {255, 255, 52: 255, 147: 255, 544: 255, 255, 255, 553: 255, 556: 255, 563: 255, 255, 255, 571: 255, 736: 255, 867: 255, 871: 255, 878: 255, 255}, + {254, 254, 52: 254, 147: 254, 544: 254, 254, 254, 553: 254, 556: 254, 563: 254, 254, 254, 571: 254, 736: 254, 867: 254, 871: 254, 878: 254, 254}, + {547: 4046, 652: 4047, 654: 4048, 974: 4050}, // 1135 - {260, 260, 52: 260, 145: 260, 544: 260, 260, 260, 553: 260, 556: 260, 563: 260, 260, 260, 571: 260, 736: 260, 867: 260, 871: 260, 878: 260, 260}, - {261, 261, 52: 261, 145: 261, 544: 261, 261, 261, 553: 261, 556: 261, 563: 261, 261, 261, 571: 261, 736: 261, 867: 261, 871: 261, 878: 261, 261}, - {547: 4027, 652: 4028, 654: 4029, 974: 4034}, - {262, 262, 52: 262, 145: 262, 544: 262, 262, 262, 553: 262, 556: 262, 563: 262, 262, 262, 571: 262, 736: 262, 867: 262, 871: 262, 878: 262, 262}, - {264, 264, 52: 264, 145: 264, 544: 264, 264, 264, 553: 264, 556: 264, 563: 264, 264, 264, 571: 264, 736: 264, 867: 264, 871: 264, 878: 264, 264}, + {260, 260, 52: 260, 147: 260, 544: 260, 260, 260, 553: 260, 556: 260, 563: 260, 260, 260, 571: 260, 736: 260, 867: 260, 871: 260, 878: 260, 260}, + {261, 261, 52: 261, 147: 261, 544: 261, 261, 261, 553: 261, 556: 261, 563: 261, 261, 261, 571: 261, 736: 261, 867: 261, 871: 261, 878: 261, 261}, + {547: 4046, 652: 4047, 654: 4048, 974: 4053}, + {262, 262, 52: 262, 147: 262, 544: 262, 262, 262, 553: 262, 556: 262, 563: 262, 262, 262, 571: 262, 736: 262, 867: 262, 871: 262, 878: 262, 262}, + {264, 264, 52: 264, 147: 264, 544: 264, 264, 264, 553: 264, 556: 264, 563: 264, 264, 264, 571: 264, 736: 264, 867: 264, 871: 264, 878: 264, 264}, // 1140 - {1060, 1060, 52: 1060, 544: 1060, 546: 1060, 553: 1060, 556: 1060, 564: 1060, 1060}, - {251, 251, 52: 251, 544: 251, 251, 251, 553: 251, 556: 251, 563: 251, 251, 251, 571: 251, 867: 251, 1484: 4038, 4039}, - {249, 249, 52: 249, 544: 249, 249, 249, 553: 249, 556: 249, 563: 249, 249, 249, 571: 249, 867: 4043, 1401: 4042}, - {737: 4040}, - {547: 4027, 652: 4028, 654: 4029, 974: 4041}, + {1064, 1064, 52: 1064, 544: 1064, 546: 1064, 553: 1064, 556: 1064, 564: 1064, 1064}, + {251, 251, 52: 251, 544: 251, 251, 251, 553: 251, 556: 251, 563: 251, 251, 251, 571: 251, 867: 251, 1489: 4057, 4058}, + {249, 249, 52: 249, 544: 249, 249, 249, 553: 249, 556: 249, 563: 249, 249, 249, 571: 249, 867: 4062, 1406: 4061}, + {737: 4059}, + {547: 4046, 652: 4047, 654: 4048, 974: 4060}, // 1145 {250, 250, 52: 250, 544: 250, 250, 250, 553: 250, 556: 250, 563: 250, 250, 250, 571: 250, 867: 250}, {252, 252, 52: 252, 544: 252, 252, 252, 553: 252, 556: 252, 563: 252, 252, 252, 571: 252}, - {737: 4044}, - {547: 4027, 652: 4028, 654: 4029, 974: 4045}, + {737: 4063}, + {547: 4046, 652: 4047, 654: 4048, 974: 4064}, {248, 248, 52: 248, 544: 248, 248, 248, 553: 248, 556: 248, 563: 248, 248, 248, 571: 248}, // 1150 - {52: 4047}, - {1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 546: 1470, 1470, 1470, 550: 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 563: 1470, 1470, 1470, 568: 1470, 1470, 1470, 1470, 1470, 574: 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 594: 1470, 1470, 1470, 1470, 1470, 1470, 602: 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 623: 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 1470, 634: 1470, 1470, 1470, 1470, 1470, 1470, 641: 1470, 646: 1470, 1470, 1470, 1470, 672: 1470, 718: 1470}, - {1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 550: 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 562: 1056, 1056, 1056, 1056, 568: 1056, 1056, 1056, 1056, 1056, 574: 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 594: 1056, 1056, 1056, 1056, 1056, 1056, 602: 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 634: 1056, 1056, 1056, 1056, 1056, 1056, 641: 1056, 646: 1056, 1056, 1056, 1056, 670: 1056, 672: 1056, 718: 1056, 728: 1056, 818: 1056}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4051}, - {2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 546: 2185, 2185, 551: 2185, 553: 2185, 2185, 2185, 2185, 563: 2185, 2185, 2185, 568: 2185, 2185, 2185, 2185, 2185, 574: 2185, 576: 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 594: 2185, 2185, 2185, 598: 2185, 2185, 602: 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 2185, 621: 2185, 624: 2185, 2185, 634: 2185, 2185, 2185, 2185, 2185, 2185}, + {52: 4066}, + {1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 546: 1474, 1474, 1474, 550: 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 563: 1474, 1474, 1474, 568: 1474, 1474, 1474, 1474, 1474, 574: 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 594: 1474, 1474, 1474, 1474, 1474, 1474, 602: 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 623: 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 634: 1474, 1474, 1474, 1474, 1474, 1474, 642: 1474, 646: 1474, 1474, 1474, 1474, 672: 1474, 721: 1474}, + {1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 550: 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 562: 1060, 1060, 1060, 1060, 568: 1060, 1060, 1060, 1060, 1060, 574: 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 594: 1060, 1060, 1060, 1060, 1060, 1060, 602: 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 634: 1060, 1060, 1060, 1060, 1060, 1060, 642: 1060, 646: 1060, 1060, 1060, 1060, 662: 1060, 672: 1060, 721: 1060, 726: 1060, 818: 1060}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4070}, + {2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 546: 2191, 2191, 551: 2191, 553: 2191, 2191, 2191, 2191, 563: 2191, 2191, 2191, 568: 2191, 2191, 2191, 2191, 2191, 574: 2191, 576: 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 594: 2191, 2191, 2191, 598: 2191, 2191, 602: 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 621: 2191, 624: 2191, 2191, 634: 2191, 2191, 2191, 2191, 2191, 2191}, // 1155 - {2223, 2223, 9: 2223, 52: 2223, 171: 2223, 556: 2223, 579: 2223, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {2: 2199, 2199, 2199, 2199, 2199, 2199, 2199, 10: 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 53: 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 545: 2199, 547: 2199, 2199, 2199, 554: 2199, 2199, 557: 2199, 2199, 2199, 561: 2199, 2199, 566: 2199, 2199, 573: 2199, 593: 2199, 600: 2199, 2199, 633: 2199, 640: 2199, 642: 2199, 2199, 2199, 2199, 650: 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 671: 2199, 673: 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199}, - {545: 2195}, - {2: 2193, 2193, 2193, 2193, 2193, 2193, 2193, 10: 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 53: 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 545: 2193, 547: 2193, 2193, 2193, 554: 2193, 2193, 557: 2193, 2193, 2193, 561: 2193, 2193, 566: 2193, 2193, 573: 2193, 593: 2193, 600: 2193, 2193, 633: 2193, 640: 2193, 642: 2193, 2193, 2193, 2193, 650: 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 671: 2193, 673: 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193, 2193}, - {2: 2191, 2191, 2191, 2191, 2191, 2191, 2191, 10: 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 53: 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 545: 2191, 547: 2191, 2191, 2191, 554: 2191, 2191, 557: 2191, 2191, 2191, 561: 2191, 2191, 566: 2191, 2191, 573: 2191, 593: 2191, 600: 2191, 2191, 633: 2191, 640: 2191, 642: 2191, 2191, 2191, 2191, 650: 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 671: 2191, 673: 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191, 2191}, + {2229, 2229, 9: 2229, 52: 2229, 172: 2229, 556: 2229, 579: 2229, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {2: 2205, 2205, 2205, 2205, 2205, 2205, 2205, 10: 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 53: 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 545: 2205, 547: 2205, 2205, 2205, 554: 2205, 2205, 557: 2205, 2205, 2205, 561: 2205, 2205, 566: 2205, 2205, 573: 2205, 593: 2205, 600: 2205, 2205, 633: 2205, 640: 2205, 2205, 643: 2205, 2205, 2205, 650: 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 659: 2205, 2205, 2205, 663: 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 673: 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 711: 2205, 2205, 2205, 2205, 2205, 2205}, + {545: 2201}, + {2: 2199, 2199, 2199, 2199, 2199, 2199, 2199, 10: 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 53: 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 545: 2199, 547: 2199, 2199, 2199, 554: 2199, 2199, 557: 2199, 2199, 2199, 561: 2199, 2199, 566: 2199, 2199, 573: 2199, 593: 2199, 600: 2199, 2199, 633: 2199, 640: 2199, 2199, 643: 2199, 2199, 2199, 650: 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 659: 2199, 2199, 2199, 663: 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 673: 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 2199, 711: 2199, 2199, 2199, 2199, 2199, 2199}, + {2: 2197, 2197, 2197, 2197, 2197, 2197, 2197, 10: 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 53: 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 545: 2197, 547: 2197, 2197, 2197, 554: 2197, 2197, 557: 2197, 2197, 2197, 561: 2197, 2197, 566: 2197, 2197, 573: 2197, 593: 2197, 600: 2197, 2197, 633: 2197, 640: 2197, 2197, 643: 2197, 2197, 2197, 650: 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 659: 2197, 2197, 2197, 663: 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 673: 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 2197, 711: 2197, 2197, 2197, 2197, 2197, 2197}, // 1160 - {2: 2189, 2189, 2189, 2189, 2189, 2189, 2189, 10: 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 53: 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 545: 2189, 547: 2189, 2189, 2189, 554: 2189, 2189, 557: 2189, 2189, 2189, 561: 2189, 2189, 566: 2189, 2189, 573: 2189, 593: 2189, 600: 2189, 2189, 633: 2189, 640: 2189, 642: 2189, 2189, 2189, 2189, 650: 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 671: 2189, 673: 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189, 2189}, - {236: 4080, 561: 4081, 642: 4079, 644: 4078}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 4072, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 4073, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 4071, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 730: 4074, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 4069, 1333: 4070}, - {2: 2208, 2208, 2208, 2208, 2208, 2208, 2208, 10: 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 53: 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 545: 2208, 547: 2208, 2208, 2208, 554: 2208, 2208, 557: 2208, 2208, 2208, 561: 2208, 2208, 566: 2208, 2208, 573: 2208, 593: 2208, 600: 2208, 2208, 633: 2208, 640: 2208, 642: 2208, 2208, 2208, 2208, 650: 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 671: 2208, 673: 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 730: 2208}, - {2: 2207, 2207, 2207, 2207, 2207, 2207, 2207, 10: 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 53: 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 545: 2207, 547: 2207, 2207, 2207, 554: 2207, 2207, 557: 2207, 2207, 2207, 561: 2207, 2207, 566: 2207, 2207, 573: 2207, 593: 2207, 600: 2207, 2207, 633: 2207, 640: 2207, 642: 2207, 2207, 2207, 2207, 650: 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 671: 2207, 673: 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 730: 2207}, + {2: 2195, 2195, 2195, 2195, 2195, 2195, 2195, 10: 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 53: 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 545: 2195, 547: 2195, 2195, 2195, 554: 2195, 2195, 557: 2195, 2195, 2195, 561: 2195, 2195, 566: 2195, 2195, 573: 2195, 593: 2195, 600: 2195, 2195, 633: 2195, 640: 2195, 2195, 643: 2195, 2195, 2195, 650: 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 659: 2195, 2195, 2195, 663: 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 673: 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 2195, 711: 2195, 2195, 2195, 2195, 2195, 2195}, + {236: 4099, 561: 4100, 643: 4098, 4097}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 4091, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 4092, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 4090, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 730: 4093, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 4088, 1337: 4089}, + {2: 2214, 2214, 2214, 2214, 2214, 2214, 2214, 10: 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 53: 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 545: 2214, 547: 2214, 2214, 2214, 554: 2214, 2214, 557: 2214, 2214, 2214, 561: 2214, 2214, 566: 2214, 2214, 573: 2214, 593: 2214, 600: 2214, 2214, 633: 2214, 640: 2214, 2214, 643: 2214, 2214, 2214, 650: 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 659: 2214, 2214, 2214, 663: 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 673: 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 2214, 711: 2214, 2214, 2214, 2214, 2214, 2214, 730: 2214}, + {2: 2213, 2213, 2213, 2213, 2213, 2213, 2213, 10: 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 53: 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 545: 2213, 547: 2213, 2213, 2213, 554: 2213, 2213, 557: 2213, 2213, 2213, 561: 2213, 2213, 566: 2213, 2213, 573: 2213, 593: 2213, 600: 2213, 2213, 633: 2213, 640: 2213, 2213, 643: 2213, 2213, 2213, 650: 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 659: 2213, 2213, 2213, 663: 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 673: 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 711: 2213, 2213, 2213, 2213, 2213, 2213, 730: 2213}, // 1165 - {2: 2206, 2206, 2206, 2206, 2206, 2206, 2206, 10: 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 53: 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 545: 2206, 547: 2206, 2206, 2206, 554: 2206, 2206, 557: 2206, 2206, 2206, 561: 2206, 2206, 566: 2206, 2206, 573: 2206, 593: 2206, 600: 2206, 2206, 633: 2206, 640: 2206, 642: 2206, 2206, 2206, 2206, 650: 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 671: 2206, 673: 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 2206, 730: 2206}, - {2: 2205, 2205, 2205, 2205, 2205, 2205, 2205, 10: 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 53: 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 545: 2205, 547: 2205, 2205, 2205, 554: 2205, 2205, 557: 2205, 2205, 2205, 561: 2205, 2205, 566: 2205, 2205, 573: 2205, 593: 2205, 600: 2205, 2205, 633: 2205, 640: 2205, 642: 2205, 2205, 2205, 2205, 650: 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 671: 2205, 673: 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 2205, 730: 2205}, - {2: 2204, 2204, 2204, 2204, 2204, 2204, 2204, 10: 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 53: 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 545: 2204, 547: 2204, 2204, 2204, 554: 2204, 2204, 557: 2204, 2204, 2204, 561: 2204, 2204, 566: 2204, 2204, 573: 2204, 593: 2204, 600: 2204, 2204, 633: 2204, 640: 2204, 642: 2204, 2204, 2204, 2204, 650: 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 671: 2204, 673: 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 2204, 730: 2204}, - {2: 2203, 2203, 2203, 2203, 2203, 2203, 2203, 10: 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 53: 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 545: 2203, 547: 2203, 2203, 2203, 554: 2203, 2203, 557: 2203, 2203, 2203, 561: 2203, 2203, 566: 2203, 2203, 573: 2203, 593: 2203, 600: 2203, 2203, 633: 2203, 640: 2203, 642: 2203, 2203, 2203, 2203, 650: 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 671: 2203, 673: 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 2203, 730: 2203}, - {2: 2202, 2202, 2202, 2202, 2202, 2202, 2202, 10: 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 53: 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 545: 2202, 547: 2202, 2202, 2202, 554: 2202, 2202, 557: 2202, 2202, 2202, 561: 2202, 2202, 566: 2202, 2202, 573: 2202, 593: 2202, 600: 2202, 2202, 633: 2202, 640: 2202, 642: 2202, 2202, 2202, 2202, 650: 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 671: 2202, 673: 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 2202, 730: 2202}, + {2: 2212, 2212, 2212, 2212, 2212, 2212, 2212, 10: 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 53: 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 545: 2212, 547: 2212, 2212, 2212, 554: 2212, 2212, 557: 2212, 2212, 2212, 561: 2212, 2212, 566: 2212, 2212, 573: 2212, 593: 2212, 600: 2212, 2212, 633: 2212, 640: 2212, 2212, 643: 2212, 2212, 2212, 650: 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 659: 2212, 2212, 2212, 663: 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 673: 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 711: 2212, 2212, 2212, 2212, 2212, 2212, 730: 2212}, + {2: 2211, 2211, 2211, 2211, 2211, 2211, 2211, 10: 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 53: 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 545: 2211, 547: 2211, 2211, 2211, 554: 2211, 2211, 557: 2211, 2211, 2211, 561: 2211, 2211, 566: 2211, 2211, 573: 2211, 593: 2211, 600: 2211, 2211, 633: 2211, 640: 2211, 2211, 643: 2211, 2211, 2211, 650: 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 659: 2211, 2211, 2211, 663: 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 673: 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 711: 2211, 2211, 2211, 2211, 2211, 2211, 730: 2211}, + {2: 2210, 2210, 2210, 2210, 2210, 2210, 2210, 10: 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 53: 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 545: 2210, 547: 2210, 2210, 2210, 554: 2210, 2210, 557: 2210, 2210, 2210, 561: 2210, 2210, 566: 2210, 2210, 573: 2210, 593: 2210, 600: 2210, 2210, 633: 2210, 640: 2210, 2210, 643: 2210, 2210, 2210, 650: 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 659: 2210, 2210, 2210, 663: 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 673: 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 711: 2210, 2210, 2210, 2210, 2210, 2210, 730: 2210}, + {2: 2209, 2209, 2209, 2209, 2209, 2209, 2209, 10: 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 53: 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 545: 2209, 547: 2209, 2209, 2209, 554: 2209, 2209, 557: 2209, 2209, 2209, 561: 2209, 2209, 566: 2209, 2209, 573: 2209, 593: 2209, 600: 2209, 2209, 633: 2209, 640: 2209, 2209, 643: 2209, 2209, 2209, 650: 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 659: 2209, 2209, 2209, 663: 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 673: 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 2209, 711: 2209, 2209, 2209, 2209, 2209, 2209, 730: 2209}, + {2: 2208, 2208, 2208, 2208, 2208, 2208, 2208, 10: 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 53: 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 545: 2208, 547: 2208, 2208, 2208, 554: 2208, 2208, 557: 2208, 2208, 2208, 561: 2208, 2208, 566: 2208, 2208, 573: 2208, 593: 2208, 600: 2208, 2208, 633: 2208, 640: 2208, 2208, 643: 2208, 2208, 2208, 650: 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 659: 2208, 2208, 2208, 663: 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 673: 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 711: 2208, 2208, 2208, 2208, 2208, 2208, 730: 2208}, // 1170 - {2: 2201, 2201, 2201, 2201, 2201, 2201, 2201, 10: 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 53: 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 545: 2201, 547: 2201, 2201, 2201, 554: 2201, 2201, 557: 2201, 2201, 2201, 561: 2201, 2201, 566: 2201, 2201, 573: 2201, 593: 2201, 600: 2201, 2201, 633: 2201, 640: 2201, 642: 2201, 2201, 2201, 2201, 650: 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 671: 2201, 673: 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 2201, 730: 2201}, - {236: 2198, 548: 3868, 550: 3867, 561: 2198, 642: 2198, 644: 2198, 932: 4068}, - {236: 2197, 561: 2197, 642: 2197, 644: 2197}, - {2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 546: 2212, 2212, 551: 2212, 553: 2212, 2212, 2212, 2212, 563: 2212, 2212, 2212, 568: 2212, 2212, 2212, 2212, 2212, 574: 2212, 576: 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 594: 2212, 2212, 2212, 598: 2212, 2212, 602: 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 2212, 621: 2212, 624: 2212, 2212, 634: 2212, 2212, 2212, 2212, 2212, 2212}, - {545: 2949, 790: 4077}, + {2: 2207, 2207, 2207, 2207, 2207, 2207, 2207, 10: 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 53: 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 545: 2207, 547: 2207, 2207, 2207, 554: 2207, 2207, 557: 2207, 2207, 2207, 561: 2207, 2207, 566: 2207, 2207, 573: 2207, 593: 2207, 600: 2207, 2207, 633: 2207, 640: 2207, 2207, 643: 2207, 2207, 2207, 650: 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 659: 2207, 2207, 2207, 663: 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 673: 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 2207, 711: 2207, 2207, 2207, 2207, 2207, 2207, 730: 2207}, + {236: 2204, 548: 3887, 550: 3886, 561: 2204, 643: 2204, 2204, 932: 4087}, + {236: 2203, 561: 2203, 643: 2203, 2203}, + {2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 546: 2218, 2218, 551: 2218, 553: 2218, 2218, 2218, 2218, 563: 2218, 2218, 2218, 568: 2218, 2218, 2218, 2218, 2218, 574: 2218, 576: 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 594: 2218, 2218, 2218, 598: 2218, 2218, 602: 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 2218, 621: 2218, 624: 2218, 2218, 634: 2218, 2218, 2218, 2218, 2218, 2218}, + {545: 2968, 790: 4096}, // 1175 - {962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 546: 962, 962, 962, 550: 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 563: 962, 962, 962, 568: 962, 962, 962, 962, 962, 574: 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 594: 962, 962, 962, 962, 962, 962, 602: 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 623: 962, 962, 962, 962, 962, 962, 962, 962, 962, 962, 634: 962, 962, 962, 962, 962, 962, 641: 962, 646: 962, 962, 962, 962, 718: 962, 732: 4075}, - {1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 2188, 1998, 1998, 1998, 550: 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 563: 1998, 1998, 1998, 568: 1998, 1998, 1998, 1998, 1998, 574: 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 594: 1998, 1998, 1998, 1998, 1998, 1998, 602: 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 623: 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 1998, 634: 1998, 1998, 1998, 1998, 1998, 1998, 641: 1998, 646: 1998, 1998, 1998, 1998, 718: 1998, 729: 1998, 733: 1998, 1998}, - {1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 2187, 1997, 1997, 1997, 550: 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 563: 1997, 1997, 1997, 568: 1997, 1997, 1997, 1997, 1997, 574: 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 594: 1997, 1997, 1997, 1997, 1997, 1997, 602: 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 623: 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 1997, 634: 1997, 1997, 1997, 1997, 1997, 1997, 641: 1997, 646: 1997, 1997, 1997, 1997, 718: 1997, 729: 1997, 733: 1997, 1997}, - {545: 2186}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 4076}, + {966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 546: 966, 966, 966, 550: 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 563: 966, 966, 966, 568: 966, 966, 966, 966, 966, 574: 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 594: 966, 966, 966, 966, 966, 966, 602: 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 623: 966, 966, 966, 966, 966, 966, 966, 966, 966, 966, 634: 966, 966, 966, 966, 966, 966, 642: 966, 646: 966, 966, 966, 966, 721: 966, 732: 4094}, + {2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2194, 2002, 2002, 2002, 550: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 563: 2002, 2002, 2002, 568: 2002, 2002, 2002, 2002, 2002, 574: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 594: 2002, 2002, 2002, 2002, 2002, 2002, 602: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 623: 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 634: 2002, 2002, 2002, 2002, 2002, 2002, 642: 2002, 646: 2002, 2002, 2002, 2002, 721: 2002, 729: 2002, 733: 2002, 2002}, + {2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2193, 2001, 2001, 2001, 550: 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 563: 2001, 2001, 2001, 568: 2001, 2001, 2001, 2001, 2001, 574: 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 594: 2001, 2001, 2001, 2001, 2001, 2001, 602: 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 623: 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 634: 2001, 2001, 2001, 2001, 2001, 2001, 642: 2001, 646: 2001, 2001, 2001, 2001, 721: 2001, 729: 2001, 733: 2001, 2001}, + {545: 2192}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 4095}, // 1180 - {2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 546: 2210, 2210, 551: 2210, 553: 2210, 2210, 2210, 2210, 563: 2210, 2210, 2210, 568: 2210, 2210, 2210, 2210, 2210, 574: 2210, 576: 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 594: 2210, 2210, 2210, 598: 2210, 2210, 602: 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 621: 2210, 624: 2210, 2210, 634: 2210, 2210, 2210, 2210, 2210, 2210}, - {2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 546: 2211, 2211, 551: 2211, 553: 2211, 2211, 2211, 2211, 563: 2211, 2211, 2211, 568: 2211, 2211, 2211, 2211, 2211, 574: 2211, 576: 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 594: 2211, 2211, 2211, 598: 2211, 2211, 602: 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 2211, 621: 2211, 624: 2211, 2211, 634: 2211, 2211, 2211, 2211, 2211, 2211}, - {2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 546: 2241, 2241, 551: 2241, 553: 2241, 2241, 2241, 2241, 563: 2241, 2241, 2241, 568: 2241, 570: 2241, 2241, 2241, 574: 2241, 576: 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 594: 2241, 2241, 2241, 598: 2241, 2241, 602: 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 2241, 621: 2241}, - {2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 546: 2240, 2240, 551: 2240, 553: 2240, 2240, 2240, 2240, 563: 2240, 2240, 2240, 568: 2240, 570: 2240, 2240, 2240, 574: 2240, 576: 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 594: 2240, 2240, 2240, 598: 2240, 2240, 602: 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 2240, 621: 2240}, - {2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 546: 2239, 2239, 551: 2239, 553: 2239, 2239, 2239, 2239, 563: 2239, 2239, 2239, 568: 2239, 570: 2239, 2239, 2239, 574: 2239, 576: 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 594: 2239, 2239, 2239, 598: 2239, 2239, 602: 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 2239, 621: 2239}, + {2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 546: 2216, 2216, 551: 2216, 553: 2216, 2216, 2216, 2216, 563: 2216, 2216, 2216, 568: 2216, 2216, 2216, 2216, 2216, 574: 2216, 576: 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 594: 2216, 2216, 2216, 598: 2216, 2216, 602: 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 621: 2216, 624: 2216, 2216, 634: 2216, 2216, 2216, 2216, 2216, 2216}, + {2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 546: 2217, 2217, 551: 2217, 553: 2217, 2217, 2217, 2217, 563: 2217, 2217, 2217, 568: 2217, 2217, 2217, 2217, 2217, 574: 2217, 576: 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 594: 2217, 2217, 2217, 598: 2217, 2217, 602: 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 2217, 621: 2217, 624: 2217, 2217, 634: 2217, 2217, 2217, 2217, 2217, 2217}, + {2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 546: 2247, 2247, 551: 2247, 553: 2247, 2247, 2247, 2247, 563: 2247, 2247, 2247, 568: 2247, 570: 2247, 2247, 2247, 574: 2247, 576: 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 594: 2247, 2247, 2247, 598: 2247, 2247, 602: 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 621: 2247}, + {2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 546: 2246, 2246, 551: 2246, 553: 2246, 2246, 2246, 2246, 563: 2246, 2246, 2246, 568: 2246, 570: 2246, 2246, 2246, 574: 2246, 576: 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 594: 2246, 2246, 2246, 598: 2246, 2246, 602: 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 2246, 621: 2246}, + {2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 546: 2245, 2245, 551: 2245, 553: 2245, 2245, 2245, 2245, 563: 2245, 2245, 2245, 568: 2245, 570: 2245, 2245, 2245, 574: 2245, 576: 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 594: 2245, 2245, 2245, 598: 2245, 2245, 602: 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 2245, 621: 2245}, // 1185 - {2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 546: 2213, 2213, 551: 2213, 553: 2213, 2213, 2213, 2213, 563: 2213, 2213, 2213, 568: 2213, 2213, 2213, 2213, 2213, 574: 2213, 576: 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 594: 2213, 2213, 2213, 598: 2213, 2213, 602: 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 2213, 621: 2213, 624: 2213, 2213, 634: 2213, 2213, 2213, 2213, 2213, 2213}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 4084, 918: 4085}, - {2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 545: 2656, 560: 2656, 567: 2656, 569: 2656, 2656, 2656, 592: 2656, 600: 2656, 619: 2656, 723: 2656, 729: 4106, 732: 2656, 741: 2656, 2656, 744: 2656, 746: 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 755: 2656, 2656, 2656, 2656, 2656, 762: 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656, 2656}, - {9: 2653, 52: 2653}, - {9: 4086, 52: 4087}, + {2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 546: 2219, 2219, 551: 2219, 553: 2219, 2219, 2219, 2219, 563: 2219, 2219, 2219, 568: 2219, 2219, 2219, 2219, 2219, 574: 2219, 576: 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 594: 2219, 2219, 2219, 598: 2219, 2219, 602: 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 621: 2219, 624: 2219, 2219, 634: 2219, 2219, 2219, 2219, 2219, 2219}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 4103, 918: 4104}, + {2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 545: 2671, 560: 2671, 567: 2671, 569: 2671, 2671, 2671, 592: 2671, 600: 2671, 619: 2671, 723: 2671, 729: 4125, 732: 2671, 741: 2671, 2671, 744: 2671, 746: 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 755: 2671, 2671, 2671, 2671, 2671, 762: 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671, 2671}, + {9: 2668, 52: 2668}, + {9: 4105, 52: 4106}, // 1190 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 4105}, - {379: 4088}, - {545: 4089}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 4090}, - {52: 2233, 546: 4093, 557: 3838, 3839, 3844, 575: 3840, 620: 4092, 623: 3841, 626: 3842, 3835, 3845, 3834, 3843, 3836, 3837, 1381: 4091}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 4124}, + {380: 4107}, + {545: 4108}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 4109}, + {52: 2239, 546: 4112, 557: 3857, 3858, 3863, 575: 3859, 620: 4111, 623: 3860, 626: 3861, 3854, 3864, 3853, 3862, 3855, 3856, 1385: 4110}, // 1195 - {52: 4104}, - {200: 4097, 594: 4096}, - {170: 4094}, - {318: 4095}, - {52: 2229}, + {52: 4123}, + {201: 4116, 594: 4115}, + {171: 4113}, + {319: 4114}, + {52: 2235}, // 1200 - {416: 4099}, - {275: 4098}, - {52: 2230}, - {275: 4100}, - {52: 2232, 546: 4101}, + {416: 4118}, + {276: 4117}, + {52: 2236}, + {276: 4119}, + {52: 2238, 546: 4120}, // 1205 - {170: 4102}, - {318: 4103}, - {52: 2231}, - {2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 546: 2242, 2242, 551: 2242, 553: 2242, 2242, 2242, 2242, 563: 2242, 2242, 2242, 568: 2242, 570: 2242, 2242, 2242, 574: 2242, 576: 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 594: 2242, 2242, 2242, 598: 2242, 2242, 602: 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 2242, 621: 2242}, - {9: 2652, 52: 2652}, + {171: 4121}, + {319: 4122}, + {52: 2237}, + {2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 546: 2248, 2248, 551: 2248, 553: 2248, 2248, 2248, 2248, 563: 2248, 2248, 2248, 568: 2248, 570: 2248, 2248, 2248, 574: 2248, 576: 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 594: 2248, 2248, 2248, 598: 2248, 2248, 602: 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 2248, 621: 2248}, + {9: 2667, 52: 2667}, // 1210 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4107, 3092, 3093, 3091}, - {2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 545: 2655, 560: 2655, 567: 2655, 569: 2655, 2655, 2655, 592: 2655, 600: 2655, 619: 2655, 723: 2655, 729: 4108, 732: 2655, 741: 2655, 2655, 744: 2655, 746: 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 755: 2655, 2655, 2655, 2655, 2655, 762: 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655, 2655}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4109, 3092, 3093, 3091}, - {2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 545: 2654, 560: 2654, 567: 2654, 569: 2654, 2654, 2654, 592: 2654, 600: 2654, 619: 2654, 723: 2654, 732: 2654, 741: 2654, 2654, 744: 2654, 746: 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 755: 2654, 2654, 2654, 2654, 2654, 762: 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654, 2654}, - {2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 546: 2243, 2243, 551: 2243, 553: 2243, 2243, 2243, 2243, 563: 2243, 2243, 2243, 568: 2243, 570: 2243, 2243, 2243, 574: 2243, 576: 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 594: 2243, 2243, 2243, 598: 2243, 2243, 602: 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 621: 2243, 815: 3797, 3795}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4126, 3111, 3112, 3110}, + {2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 545: 2670, 560: 2670, 567: 2670, 569: 2670, 2670, 2670, 592: 2670, 600: 2670, 619: 2670, 723: 2670, 729: 4127, 732: 2670, 741: 2670, 2670, 744: 2670, 746: 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 755: 2670, 2670, 2670, 2670, 2670, 762: 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670, 2670}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4128, 3111, 3112, 3110}, + {2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 545: 2669, 560: 2669, 567: 2669, 569: 2669, 2669, 2669, 592: 2669, 600: 2669, 619: 2669, 723: 2669, 732: 2669, 741: 2669, 2669, 744: 2669, 746: 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 755: 2669, 2669, 2669, 2669, 2669, 762: 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669, 2669}, + {2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 546: 2249, 2249, 551: 2249, 553: 2249, 2249, 2249, 2249, 563: 2249, 2249, 2249, 568: 2249, 570: 2249, 2249, 2249, 574: 2249, 576: 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 594: 2249, 2249, 2249, 598: 2249, 2249, 602: 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 621: 2249, 815: 3816, 3814}, // 1215 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3671, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 4112, 3652, 3734, 3651, 3648}, - {52: 4113, 552: 3748, 718: 3749}, - {194: 1151, 563: 1151, 576: 4115, 835: 1151, 1419: 4114}, - {194: 4119, 563: 4120, 835: 1154, 1004: 4118}, - {10: 4116, 244: 4117}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3690, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 4131, 3671, 3753, 3670, 3667}, + {52: 4132, 552: 3767, 721: 3768}, + {195: 1155, 563: 1155, 576: 4134, 835: 1155, 1424: 4133}, + {195: 4138, 563: 4139, 835: 1158, 1004: 4137}, + {10: 4135, 244: 4136}, // 1220 - {194: 1150, 563: 1150, 835: 1150}, - {194: 1149, 563: 1149, 835: 1149}, - {835: 4123, 848: 4124}, - {340: 4122}, - {340: 4121}, + {195: 1154, 563: 1154, 835: 1154}, + {195: 1153, 563: 1153, 835: 1153}, + {835: 4142, 848: 4143}, + {342: 4141}, + {342: 4140}, // 1225 - {835: 1152}, - {835: 1153}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 4126, 786: 4125, 3092, 3093, 3091, 1041: 4128, 1320: 4129, 1525: 4127}, - {1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 546: 1160, 1160, 1160, 550: 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 563: 1160, 1160, 1160, 568: 1160, 1160, 1160, 1160, 1160, 574: 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 594: 1160, 1160, 1160, 1160, 1160, 1160, 602: 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 623: 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 634: 1160, 1160, 1160, 1160, 1160, 1160, 641: 1160, 646: 1160, 1160, 1160, 1160, 672: 1160, 718: 1160}, - {1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 546: 1202, 1202, 1202, 550: 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 563: 1202, 1202, 1202, 568: 1202, 1202, 1202, 1202, 1202, 574: 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 594: 1202, 1202, 1202, 1202, 1202, 1202, 602: 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 623: 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 1202, 634: 1202, 1202, 1202, 1202, 1202, 1202, 641: 1202, 646: 1202, 1202, 1202, 1202, 672: 1202, 718: 1202}, + {835: 1156}, + {835: 1157}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 4145, 786: 4144, 3111, 3112, 3110, 1041: 4147, 1324: 4148, 1532: 4146}, + {1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 546: 1164, 1164, 1164, 550: 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 563: 1164, 1164, 1164, 568: 1164, 1164, 1164, 1164, 1164, 574: 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 594: 1164, 1164, 1164, 1164, 1164, 1164, 602: 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 623: 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 634: 1164, 1164, 1164, 1164, 1164, 1164, 642: 1164, 646: 1164, 1164, 1164, 1164, 672: 1164, 721: 1164}, + {1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 546: 1206, 1206, 1206, 550: 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 563: 1206, 1206, 1206, 568: 1206, 1206, 1206, 1206, 1206, 574: 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 594: 1206, 1206, 1206, 1206, 1206, 1206, 602: 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 623: 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 1206, 634: 1206, 1206, 1206, 1206, 1206, 1206, 642: 1206, 646: 1206, 1206, 1206, 1206, 672: 1206, 721: 1206}, // 1230 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 1199, 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 560: 1199, 579: 1199, 602: 1199, 605: 1199, 607: 1199, 786: 4125, 3092, 3093, 3091, 1041: 4132, 1418: 4131, 1526: 4130}, - {1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 546: 1173, 1173, 1173, 550: 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 563: 1173, 1173, 1173, 568: 1173, 1173, 1173, 1173, 1173, 574: 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 594: 1173, 1173, 1173, 1173, 1173, 1173, 602: 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 623: 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 634: 1173, 1173, 1173, 1173, 1173, 1173, 641: 1173, 646: 1173, 1173, 1173, 1173, 672: 1173, 718: 1173}, - {1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 546: 1172, 1172, 1172, 550: 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 563: 1172, 1172, 1172, 568: 1172, 1172, 1172, 1172, 1172, 574: 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 594: 1172, 1172, 1172, 1172, 1172, 1172, 602: 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 623: 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 634: 1172, 1172, 1172, 1172, 1172, 1172, 641: 1172, 646: 1172, 1172, 1172, 1172, 672: 1172, 718: 1172}, - {1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 546: 1171, 1171, 1171, 550: 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 563: 1171, 1171, 1171, 568: 1171, 1171, 1171, 1171, 1171, 574: 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 594: 1171, 1171, 1171, 1171, 1171, 1171, 602: 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 623: 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 634: 1171, 1171, 1171, 1171, 1171, 1171, 641: 1171, 646: 1171, 1171, 1171, 1171, 672: 1171, 718: 1171}, - {52: 4179}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 1203, 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 560: 1203, 579: 1203, 602: 1203, 605: 1203, 607: 1203, 786: 4144, 3111, 3112, 3110, 1041: 4151, 1423: 4150, 1533: 4149}, + {1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 546: 1177, 1177, 1177, 550: 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 563: 1177, 1177, 1177, 568: 1177, 1177, 1177, 1177, 1177, 574: 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 594: 1177, 1177, 1177, 1177, 1177, 1177, 602: 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 623: 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 634: 1177, 1177, 1177, 1177, 1177, 1177, 642: 1177, 646: 1177, 1177, 1177, 1177, 672: 1177, 721: 1177}, + {1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 546: 1176, 1176, 1176, 550: 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 563: 1176, 1176, 1176, 568: 1176, 1176, 1176, 1176, 1176, 574: 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 594: 1176, 1176, 1176, 1176, 1176, 1176, 602: 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 623: 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 1176, 634: 1176, 1176, 1176, 1176, 1176, 1176, 642: 1176, 646: 1176, 1176, 1176, 1176, 672: 1176, 721: 1176}, + {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 546: 1175, 1175, 1175, 550: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 563: 1175, 1175, 1175, 568: 1175, 1175, 1175, 1175, 1175, 574: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 594: 1175, 1175, 1175, 1175, 1175, 1175, 602: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 623: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 634: 1175, 1175, 1175, 1175, 1175, 1175, 642: 1175, 646: 1175, 1175, 1175, 1175, 672: 1175, 721: 1175}, + {52: 4198}, // 1235 - {52: 1197, 560: 4134, 579: 1197, 602: 1197, 605: 1197, 607: 1197, 1422: 4133}, - {52: 1198, 560: 1198, 579: 1198, 602: 1198, 605: 1198, 607: 1198}, - {52: 1195, 579: 4138, 602: 1195, 605: 1195, 607: 1195, 1427: 4137}, - {737: 4135}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3937, 990: 3939, 1017: 4136}, + {52: 1201, 560: 4153, 579: 1201, 602: 1201, 605: 1201, 607: 1201, 1427: 4152}, + {52: 1202, 560: 1202, 579: 1202, 602: 1202, 605: 1202, 607: 1202}, + {52: 1199, 579: 4157, 602: 1199, 605: 1199, 607: 1199, 1432: 4156}, + {737: 4154}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3956, 990: 3958, 1017: 4155}, // 1240 - {9: 3940, 52: 1196, 579: 1196, 602: 1196, 605: 1196, 607: 1196}, - {52: 1193, 602: 4143, 605: 4144, 607: 4145, 1426: 4141, 1524: 4142}, - {737: 4139}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3937, 990: 3939, 1017: 4140}, - {9: 3940, 52: 1194, 602: 1194, 605: 1194, 607: 1194}, + {9: 3959, 52: 1200, 579: 1200, 602: 1200, 605: 1200, 607: 1200}, + {52: 1197, 602: 4162, 605: 4163, 607: 4164, 1431: 4160, 1531: 4161}, + {737: 4158}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3956, 990: 3958, 1017: 4159}, + {9: 3959, 52: 1198, 602: 1198, 605: 1198, 607: 1198}, // 1245 - {52: 1200}, - {190: 4156, 212: 4152, 573: 4146, 641: 4157, 650: 4148, 4147, 655: 4155, 4154, 933: 4153, 1114: 4150, 1522: 4151, 4149}, - {190: 1191, 212: 1191, 573: 1191, 641: 1191, 650: 1191, 1191, 655: 1191, 1191}, - {190: 1190, 212: 1190, 573: 1190, 641: 1190, 650: 1190, 1190, 655: 1190, 1190}, - {190: 1189, 212: 1189, 573: 1189, 641: 1189, 650: 1189, 1189, 655: 1189, 1189}, + {52: 1204}, + {191: 4175, 213: 4171, 573: 4165, 642: 4176, 650: 4167, 4166, 655: 4174, 4173, 933: 4172, 1116: 4169, 1529: 4170, 4168}, + {191: 1195, 213: 1195, 573: 1195, 642: 1195, 650: 1195, 1195, 655: 1195, 1195}, + {191: 1194, 213: 1194, 573: 1194, 642: 1194, 650: 1194, 1194, 655: 1194, 1194}, + {191: 1193, 213: 1193, 573: 1193, 642: 1193, 650: 1193, 1193, 655: 1193, 1193}, // 1250 - {2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 2534, 52: 2534, 178: 2534, 202: 2534, 544: 2534, 2534, 2534, 548: 2534, 2534, 2534, 2534, 2534, 2534, 560: 2534, 2534, 2534, 2534, 566: 2534, 2534, 580: 2534, 622: 2534, 669: 2534, 2534, 716: 2534, 2534, 719: 2534, 2534, 2534, 2534, 2534, 2534}, - {2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 2533, 52: 2533, 178: 2533, 202: 2533, 254: 2533, 544: 2533, 2533, 2533, 548: 2533, 2533, 2533, 2533, 2533, 2533, 560: 2533, 2533, 2533, 2533, 566: 2533, 2533, 580: 2533, 622: 2533, 669: 2533, 2533, 716: 2533, 2533, 719: 2533, 2533, 2533, 2533, 2533, 2533}, - {2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 2532, 52: 2532, 178: 2532, 202: 2532, 254: 2532, 544: 2532, 2532, 2532, 548: 2532, 2532, 2532, 2532, 2532, 2532, 560: 2532, 2532, 2532, 2532, 566: 2532, 2532, 580: 2532, 622: 2532, 669: 2532, 2532, 716: 2532, 2532, 719: 2532, 2532, 2532, 2532, 2532, 2532}, + {2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 52: 2547, 179: 2547, 203: 2547, 544: 2547, 2547, 2547, 548: 2547, 2547, 2547, 2547, 2547, 2547, 560: 2547, 2547, 2547, 2547, 566: 2547, 2547, 580: 2547, 622: 2547, 658: 2547, 662: 2547, 710: 2547, 717: 2547, 2547, 2547, 2547, 722: 2547, 2547, 2547}, + {2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 2546, 52: 2546, 179: 2546, 203: 2546, 254: 2546, 544: 2546, 2546, 2546, 548: 2546, 2546, 2546, 2546, 2546, 2546, 560: 2546, 2546, 2546, 2546, 566: 2546, 2546, 580: 2546, 622: 2546, 658: 2546, 662: 2546, 710: 2546, 717: 2546, 2546, 2546, 2546, 722: 2546, 2546, 2546}, + {2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 2545, 52: 2545, 179: 2545, 203: 2545, 254: 2545, 544: 2545, 2545, 2545, 548: 2545, 2545, 2545, 2545, 2545, 2545, 560: 2545, 2545, 2545, 2545, 566: 2545, 2545, 580: 2545, 622: 2545, 658: 2545, 662: 2545, 710: 2545, 717: 2545, 2545, 2545, 2545, 722: 2545, 2545, 2545}, + {52: 1196}, {52: 1192}, - {52: 1188}, // 1255 - {52: 1187}, - {178: 4174}, - {178: 4172}, - {178: 4170}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4177}, + {52: 1191}, + {179: 4193}, + {179: 4191}, + {179: 4189}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4196}, // 1260 - {653: 4176}, - {190: 4156, 212: 4158, 573: 4146, 650: 4148, 4147, 655: 4161, 4160, 933: 4159, 1114: 4163, 1319: 4162}, - {178: 4174, 202: 4175}, - {178: 4172, 202: 4173}, - {178: 4170, 202: 4171}, + {653: 4195}, + {191: 4175, 213: 4177, 573: 4165, 650: 4167, 4166, 655: 4180, 4179, 933: 4178, 1116: 4182, 1323: 4181}, + {179: 4193, 203: 4194}, + {179: 4191, 203: 4192}, + {179: 4189, 203: 4190}, // 1265 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4166}, - {581: 4164}, - {52: 1180, 581: 1180}, - {190: 4156, 212: 4158, 573: 4146, 650: 4148, 4147, 655: 4161, 4160, 933: 4159, 1114: 4163, 1319: 4165}, - {52: 1181}, - // 1270 - {127: 3823, 136: 3831, 143: 3819, 147: 3816, 149: 3818, 3815, 3817, 3821, 3822, 3827, 3826, 3825, 3829, 3830, 3824, 3828, 3820, 581: 3801, 3799, 3800, 3798, 3796, 608: 3813, 3810, 3812, 3811, 3807, 3809, 3808, 3805, 3806, 3804, 3814, 815: 3797, 3795, 902: 3803, 916: 4167}, - {178: 4168, 202: 4169}, - {52: 1183, 581: 1183}, - {52: 1176, 581: 1176}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4185}, + {581: 4183}, {52: 1184, 581: 1184}, + {191: 4175, 213: 4177, 573: 4165, 650: 4167, 4166, 655: 4180, 4179, 933: 4178, 1116: 4182, 1323: 4184}, + {52: 1185}, + // 1270 + {129: 3842, 138: 3850, 145: 3838, 149: 3835, 151: 3837, 3834, 3836, 3840, 3841, 3846, 3845, 3844, 3848, 3849, 3843, 3847, 3839, 581: 3820, 3818, 3819, 3817, 3815, 608: 3832, 3829, 3831, 3830, 3826, 3828, 3827, 3824, 3825, 3823, 3833, 815: 3816, 3814, 902: 3822, 916: 4186}, + {179: 4187, 203: 4188}, + {52: 1187, 581: 1187}, + {52: 1180, 581: 1180}, + {52: 1188, 581: 1188}, // 1275 - {52: 1177, 581: 1177}, - {52: 1185, 581: 1185}, - {52: 1178, 581: 1178}, - {52: 1186, 581: 1186}, - {52: 1179, 581: 1179}, + {52: 1181, 581: 1181}, + {52: 1189, 581: 1189}, + {52: 1182, 581: 1182}, + {52: 1190, 581: 1190}, + {52: 1183, 581: 1183}, // 1280 - {52: 1182, 581: 1182}, - {127: 3823, 136: 3831, 143: 3819, 147: 3816, 149: 3818, 3815, 3817, 3821, 3822, 3827, 3826, 3825, 3829, 3830, 3824, 3828, 3820, 581: 3801, 3799, 3800, 3798, 3796, 608: 3813, 3810, 3812, 3811, 3807, 3809, 3808, 3805, 3806, 3804, 3814, 815: 3797, 3795, 902: 3803, 916: 4178}, - {178: 4168}, - {1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 546: 1201, 1201, 1201, 550: 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 563: 1201, 1201, 1201, 568: 1201, 1201, 1201, 1201, 1201, 574: 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 594: 1201, 1201, 1201, 1201, 1201, 1201, 602: 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 623: 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 634: 1201, 1201, 1201, 1201, 1201, 1201, 641: 1201, 646: 1201, 1201, 1201, 1201, 672: 1201, 718: 1201}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4181}, + {52: 1186, 581: 1186}, + {129: 3842, 138: 3850, 145: 3838, 149: 3835, 151: 3837, 3834, 3836, 3840, 3841, 3846, 3845, 3844, 3848, 3849, 3843, 3847, 3839, 581: 3820, 3818, 3819, 3817, 3815, 608: 3832, 3829, 3831, 3830, 3826, 3828, 3827, 3824, 3825, 3823, 3833, 815: 3816, 3814, 902: 3822, 916: 4197}, + {179: 4187}, + {1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 546: 1205, 1205, 1205, 550: 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 563: 1205, 1205, 1205, 568: 1205, 1205, 1205, 1205, 1205, 574: 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 594: 1205, 1205, 1205, 1205, 1205, 1205, 602: 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 623: 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 1205, 634: 1205, 1205, 1205, 1205, 1205, 1205, 642: 1205, 646: 1205, 1205, 1205, 1205, 672: 1205, 721: 1205}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4200}, // 1285 - {2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 546: 2247, 2247, 551: 2247, 553: 2247, 2247, 2247, 2247, 563: 2247, 2247, 2247, 568: 2247, 570: 2247, 2247, 2247, 574: 2247, 576: 2247, 2247, 2247, 2247, 2247, 3801, 3799, 3800, 3798, 3796, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 594: 2247, 2247, 2247, 598: 2247, 2247, 602: 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 2247, 621: 2247, 815: 3797, 3795}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4183}, - {52: 4184, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {194: 4119, 563: 4120, 835: 1154, 1004: 4185}, - {835: 4123, 848: 4186}, + {2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 546: 2253, 2253, 551: 2253, 553: 2253, 2253, 2253, 2253, 563: 2253, 2253, 2253, 568: 2253, 570: 2253, 2253, 2253, 574: 2253, 576: 2253, 2253, 2253, 2253, 2253, 3820, 3818, 3819, 3817, 3815, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 594: 2253, 2253, 2253, 598: 2253, 2253, 602: 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 621: 2253, 815: 3816, 3814}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4202}, + {52: 4203, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {195: 4138, 563: 4139, 835: 1158, 1004: 4204}, + {835: 4142, 848: 4205}, // 1290 - {1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 546: 1161, 1161, 1161, 550: 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 563: 1161, 1161, 1161, 568: 1161, 1161, 1161, 1161, 1161, 574: 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 594: 1161, 1161, 1161, 1161, 1161, 1161, 602: 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 623: 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 634: 1161, 1161, 1161, 1161, 1161, 1161, 641: 1161, 646: 1161, 1161, 1161, 1161, 672: 1161, 718: 1161}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4188}, - {52: 4189, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {194: 4119, 563: 4120, 835: 1154, 1004: 4190}, - {835: 4123, 848: 4191}, + {1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 546: 1165, 1165, 1165, 550: 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 563: 1165, 1165, 1165, 568: 1165, 1165, 1165, 1165, 1165, 574: 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 594: 1165, 1165, 1165, 1165, 1165, 1165, 602: 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 623: 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 634: 1165, 1165, 1165, 1165, 1165, 1165, 642: 1165, 646: 1165, 1165, 1165, 1165, 672: 1165, 721: 1165}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4207}, + {52: 4208, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {195: 4138, 563: 4139, 835: 1158, 1004: 4209}, + {835: 4142, 848: 4210}, // 1295 - {1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 546: 1162, 1162, 1162, 550: 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 563: 1162, 1162, 1162, 568: 1162, 1162, 1162, 1162, 1162, 574: 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 594: 1162, 1162, 1162, 1162, 1162, 1162, 602: 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 623: 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 634: 1162, 1162, 1162, 1162, 1162, 1162, 641: 1162, 646: 1162, 1162, 1162, 1162, 672: 1162, 718: 1162}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4193}, - {9: 4195, 52: 1159, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795, 1242: 4194}, - {52: 4202}, - {573: 4146, 650: 4148, 4147, 656: 4197, 933: 4196}, + {1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 546: 1166, 1166, 1166, 550: 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 563: 1166, 1166, 1166, 568: 1166, 1166, 1166, 1166, 1166, 574: 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 594: 1166, 1166, 1166, 1166, 1166, 1166, 602: 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 623: 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 634: 1166, 1166, 1166, 1166, 1166, 1166, 642: 1166, 646: 1166, 1166, 1166, 1166, 672: 1166, 721: 1166}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4212}, + {9: 4214, 52: 1163, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814, 1244: 4213}, + {52: 4221}, + {573: 4165, 650: 4167, 4166, 656: 4216, 933: 4215}, // 1300 - {9: 4199, 52: 1156, 1243: 4201}, - {9: 4199, 52: 1156, 1243: 4198}, - {52: 1157}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4200}, - {52: 1155, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, + {9: 4218, 52: 1160, 1245: 4220}, + {9: 4218, 52: 1160, 1245: 4217}, + {52: 1161}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4219}, + {52: 1159, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, // 1305 - {52: 1158}, - {194: 4119, 563: 4120, 835: 1154, 1004: 4203}, - {835: 4123, 848: 4204}, - {1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 546: 1163, 1163, 1163, 550: 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 563: 1163, 1163, 1163, 568: 1163, 1163, 1163, 1163, 1163, 574: 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 594: 1163, 1163, 1163, 1163, 1163, 1163, 602: 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 623: 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, 634: 1163, 1163, 1163, 1163, 1163, 1163, 641: 1163, 646: 1163, 1163, 1163, 1163, 672: 1163, 718: 1163}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4206}, + {52: 1162}, + {195: 4138, 563: 4139, 835: 1158, 1004: 4222}, + {835: 4142, 848: 4223}, + {1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 546: 1167, 1167, 1167, 550: 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 563: 1167, 1167, 1167, 568: 1167, 1167, 1167, 1167, 1167, 574: 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 594: 1167, 1167, 1167, 1167, 1167, 1167, 602: 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 623: 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 634: 1167, 1167, 1167, 1167, 1167, 1167, 642: 1167, 646: 1167, 1167, 1167, 1167, 672: 1167, 721: 1167}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4225}, // 1310 - {9: 4195, 52: 1159, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795, 1242: 4207}, - {52: 4208}, - {194: 4119, 563: 4120, 835: 1154, 1004: 4209}, - {835: 4123, 848: 4210}, - {1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 546: 1164, 1164, 1164, 550: 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 563: 1164, 1164, 1164, 568: 1164, 1164, 1164, 1164, 1164, 574: 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 594: 1164, 1164, 1164, 1164, 1164, 1164, 602: 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 623: 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1164, 634: 1164, 1164, 1164, 1164, 1164, 1164, 641: 1164, 646: 1164, 1164, 1164, 1164, 672: 1164, 718: 1164}, + {9: 4214, 52: 1163, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814, 1244: 4226}, + {52: 4227}, + {195: 4138, 563: 4139, 835: 1158, 1004: 4228}, + {835: 4142, 848: 4229}, + {1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 546: 1168, 1168, 1168, 550: 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 563: 1168, 1168, 1168, 568: 1168, 1168, 1168, 1168, 1168, 574: 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 594: 1168, 1168, 1168, 1168, 1168, 1168, 602: 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 623: 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 634: 1168, 1168, 1168, 1168, 1168, 1168, 642: 1168, 646: 1168, 1168, 1168, 1168, 672: 1168, 721: 1168}, // 1315 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3671, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 4212, 3652, 3734, 3651, 3648}, - {52: 4213, 552: 3748, 718: 3749}, - {835: 4123, 848: 4214}, - {1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 546: 1165, 1165, 1165, 550: 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 563: 1165, 1165, 1165, 568: 1165, 1165, 1165, 1165, 1165, 574: 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 594: 1165, 1165, 1165, 1165, 1165, 1165, 602: 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 623: 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 1165, 634: 1165, 1165, 1165, 1165, 1165, 1165, 641: 1165, 646: 1165, 1165, 1165, 1165, 672: 1165, 718: 1165}, - {52: 4216}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3690, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 4231, 3671, 3753, 3670, 3667}, + {52: 4232, 552: 3767, 721: 3768}, + {835: 4142, 848: 4233}, + {1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 546: 1169, 1169, 1169, 550: 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 563: 1169, 1169, 1169, 568: 1169, 1169, 1169, 1169, 1169, 574: 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 594: 1169, 1169, 1169, 1169, 1169, 1169, 602: 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 623: 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 634: 1169, 1169, 1169, 1169, 1169, 1169, 642: 1169, 646: 1169, 1169, 1169, 1169, 672: 1169, 721: 1169}, + {52: 4235}, // 1320 - {835: 4123, 848: 4217}, - {1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 546: 1166, 1166, 1166, 550: 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 563: 1166, 1166, 1166, 568: 1166, 1166, 1166, 1166, 1166, 574: 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 594: 1166, 1166, 1166, 1166, 1166, 1166, 602: 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 623: 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 1166, 634: 1166, 1166, 1166, 1166, 1166, 1166, 641: 1166, 646: 1166, 1166, 1166, 1166, 672: 1166, 718: 1166}, - {52: 4219}, - {835: 4123, 848: 4220}, - {1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 546: 1167, 1167, 1167, 550: 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 563: 1167, 1167, 1167, 568: 1167, 1167, 1167, 1167, 1167, 574: 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 594: 1167, 1167, 1167, 1167, 1167, 1167, 602: 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 623: 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 634: 1167, 1167, 1167, 1167, 1167, 1167, 641: 1167, 646: 1167, 1167, 1167, 1167, 672: 1167, 718: 1167}, + {835: 4142, 848: 4236}, + {1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 546: 1170, 1170, 1170, 550: 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 563: 1170, 1170, 1170, 568: 1170, 1170, 1170, 1170, 1170, 574: 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 594: 1170, 1170, 1170, 1170, 1170, 1170, 602: 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 623: 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 634: 1170, 1170, 1170, 1170, 1170, 1170, 642: 1170, 646: 1170, 1170, 1170, 1170, 672: 1170, 721: 1170}, + {52: 4238}, + {835: 4142, 848: 4239}, + {1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 546: 1171, 1171, 1171, 550: 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 563: 1171, 1171, 1171, 568: 1171, 1171, 1171, 1171, 1171, 574: 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 594: 1171, 1171, 1171, 1171, 1171, 1171, 602: 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 623: 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 634: 1171, 1171, 1171, 1171, 1171, 1171, 642: 1171, 646: 1171, 1171, 1171, 1171, 672: 1171, 721: 1171}, // 1325 - {52: 4222}, - {835: 4123, 848: 4223}, - {1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 546: 1168, 1168, 1168, 550: 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 563: 1168, 1168, 1168, 568: 1168, 1168, 1168, 1168, 1168, 574: 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 594: 1168, 1168, 1168, 1168, 1168, 1168, 602: 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 623: 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 1168, 634: 1168, 1168, 1168, 1168, 1168, 1168, 641: 1168, 646: 1168, 1168, 1168, 1168, 672: 1168, 718: 1168}, - {52: 4225}, - {835: 4123, 848: 4226}, + {52: 4241}, + {835: 4142, 848: 4242}, + {1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 546: 1172, 1172, 1172, 550: 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 563: 1172, 1172, 1172, 568: 1172, 1172, 1172, 1172, 1172, 574: 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 594: 1172, 1172, 1172, 1172, 1172, 1172, 602: 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 623: 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 1172, 634: 1172, 1172, 1172, 1172, 1172, 1172, 642: 1172, 646: 1172, 1172, 1172, 1172, 672: 1172, 721: 1172}, + {52: 4244}, + {835: 4142, 848: 4245}, // 1330 - {1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 546: 1169, 1169, 1169, 550: 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 563: 1169, 1169, 1169, 568: 1169, 1169, 1169, 1169, 1169, 574: 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 594: 1169, 1169, 1169, 1169, 1169, 1169, 602: 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 623: 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 634: 1169, 1169, 1169, 1169, 1169, 1169, 641: 1169, 646: 1169, 1169, 1169, 1169, 672: 1169, 718: 1169}, - {52: 4228}, - {835: 4123, 848: 4229}, - {1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 546: 1170, 1170, 1170, 550: 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 563: 1170, 1170, 1170, 568: 1170, 1170, 1170, 1170, 1170, 574: 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 594: 1170, 1170, 1170, 1170, 1170, 1170, 602: 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 623: 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 1170, 634: 1170, 1170, 1170, 1170, 1170, 1170, 641: 1170, 646: 1170, 1170, 1170, 1170, 672: 1170, 718: 1170}, - {2: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 10: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 53: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 545: 1461, 547: 1461, 1461, 1461, 1461, 554: 1461, 1461, 557: 1461, 1461, 1461, 561: 1461, 1461, 566: 1461, 1461, 573: 1461, 593: 1461, 600: 1461, 1461, 633: 1461, 640: 1461, 642: 1461, 1461, 1461, 1461, 650: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 671: 1461, 673: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 725: 1461, 730: 4233, 843: 4231, 4232, 901: 4234, 903: 4235, 929: 4237, 4236}, + {1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 546: 1173, 1173, 1173, 550: 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 563: 1173, 1173, 1173, 568: 1173, 1173, 1173, 1173, 1173, 574: 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 594: 1173, 1173, 1173, 1173, 1173, 1173, 602: 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 623: 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 634: 1173, 1173, 1173, 1173, 1173, 1173, 642: 1173, 646: 1173, 1173, 1173, 1173, 672: 1173, 721: 1173}, + {52: 4247}, + {835: 4142, 848: 4248}, + {1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 546: 1174, 1174, 1174, 550: 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 563: 1174, 1174, 1174, 568: 1174, 1174, 1174, 1174, 1174, 574: 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 594: 1174, 1174, 1174, 1174, 1174, 1174, 602: 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 623: 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 634: 1174, 1174, 1174, 1174, 1174, 1174, 642: 1174, 646: 1174, 1174, 1174, 1174, 672: 1174, 721: 1174}, + {2: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 10: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 53: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 545: 1465, 547: 1465, 1465, 1465, 1465, 554: 1465, 1465, 557: 1465, 1465, 1465, 561: 1465, 1465, 566: 1465, 1465, 573: 1465, 593: 1465, 600: 1465, 1465, 633: 1465, 640: 1465, 1465, 643: 1465, 1465, 1465, 650: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 659: 1465, 1465, 1465, 663: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 673: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 711: 1465, 1465, 1465, 1465, 1465, 1465, 725: 1465, 730: 4252, 843: 4250, 4251, 901: 4253, 903: 4254, 929: 4256, 4255}, // 1335 - {2: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 10: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 53: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 545: 1465, 547: 1465, 1465, 1465, 1465, 554: 1465, 1465, 557: 1465, 1465, 1465, 561: 1465, 1465, 566: 1465, 1465, 573: 1465, 575: 1465, 588: 1465, 593: 1465, 600: 1465, 1465, 622: 1465, 633: 1465, 640: 1465, 642: 1465, 1465, 1465, 1465, 650: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 670: 1465, 1465, 673: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 725: 1465, 730: 1465, 843: 1465, 1465, 847: 1465, 849: 1465, 851: 1465, 855: 1465, 864: 1465, 1465, 1465}, - {2: 1464, 1464, 1464, 1464, 1464, 1464, 1464, 10: 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 53: 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 545: 1464, 547: 1464, 1464, 1464, 1464, 554: 1464, 1464, 557: 1464, 1464, 1464, 561: 1464, 1464, 566: 1464, 1464, 573: 1464, 575: 1464, 588: 1464, 593: 1464, 600: 1464, 1464, 622: 1464, 633: 1464, 640: 1464, 642: 1464, 1464, 1464, 1464, 650: 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 670: 1464, 1464, 673: 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 725: 1464, 730: 1464, 843: 1464, 1464, 847: 1464, 849: 1464, 851: 1464, 855: 1464, 864: 1464, 1464, 1464}, - {2: 1463, 1463, 1463, 1463, 1463, 1463, 1463, 10: 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 53: 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 545: 1463, 547: 1463, 1463, 1463, 1463, 554: 1463, 1463, 557: 1463, 1463, 1463, 561: 1463, 1463, 566: 1463, 1463, 573: 1463, 575: 1463, 588: 1463, 593: 1463, 600: 1463, 1463, 622: 1463, 633: 1463, 640: 1463, 642: 1463, 1463, 1463, 1463, 650: 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 670: 1463, 1463, 673: 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 1463, 725: 1463, 730: 1463, 843: 1463, 1463, 847: 1463, 849: 1463, 851: 1463, 855: 1463, 864: 1463, 1463, 1463}, - {2: 1462, 1462, 1462, 1462, 1462, 1462, 1462, 10: 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 53: 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 545: 1462, 547: 1462, 1462, 1462, 1462, 554: 1462, 1462, 557: 1462, 1462, 1462, 561: 1462, 1462, 566: 1462, 1462, 573: 1462, 593: 1462, 600: 1462, 1462, 633: 1462, 640: 1462, 642: 1462, 1462, 1462, 1462, 650: 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 671: 1462, 673: 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 725: 1462, 730: 4242}, - {2: 1460, 1460, 1460, 1460, 1460, 1460, 1460, 10: 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 53: 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 545: 1460, 547: 1460, 1460, 1460, 1460, 554: 1460, 1460, 557: 1460, 1460, 1460, 561: 1460, 1460, 566: 1460, 1460, 573: 1460, 593: 1460, 600: 1460, 1460, 633: 1460, 640: 1460, 642: 1460, 1460, 1460, 1460, 650: 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 671: 1460, 673: 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 725: 1460}, + {2: 1469, 1469, 1469, 1469, 1469, 1469, 1469, 10: 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 53: 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 545: 1469, 547: 1469, 1469, 1469, 1469, 554: 1469, 1469, 557: 1469, 1469, 1469, 561: 1469, 1469, 566: 1469, 1469, 573: 1469, 575: 1469, 588: 1469, 593: 1469, 600: 1469, 1469, 622: 1469, 633: 1469, 640: 1469, 1469, 643: 1469, 1469, 1469, 650: 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 659: 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 673: 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 711: 1469, 1469, 1469, 1469, 1469, 1469, 725: 1469, 730: 1469, 843: 1469, 1469, 847: 1469, 849: 1469, 851: 1469, 855: 1469, 864: 1469, 1469, 1469}, + {2: 1468, 1468, 1468, 1468, 1468, 1468, 1468, 10: 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 53: 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 545: 1468, 547: 1468, 1468, 1468, 1468, 554: 1468, 1468, 557: 1468, 1468, 1468, 561: 1468, 1468, 566: 1468, 1468, 573: 1468, 575: 1468, 588: 1468, 593: 1468, 600: 1468, 1468, 622: 1468, 633: 1468, 640: 1468, 1468, 643: 1468, 1468, 1468, 650: 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 659: 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 673: 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 711: 1468, 1468, 1468, 1468, 1468, 1468, 725: 1468, 730: 1468, 843: 1468, 1468, 847: 1468, 849: 1468, 851: 1468, 855: 1468, 864: 1468, 1468, 1468}, + {2: 1467, 1467, 1467, 1467, 1467, 1467, 1467, 10: 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 53: 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 545: 1467, 547: 1467, 1467, 1467, 1467, 554: 1467, 1467, 557: 1467, 1467, 1467, 561: 1467, 1467, 566: 1467, 1467, 573: 1467, 575: 1467, 588: 1467, 593: 1467, 600: 1467, 1467, 622: 1467, 633: 1467, 640: 1467, 1467, 643: 1467, 1467, 1467, 650: 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 659: 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 673: 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 711: 1467, 1467, 1467, 1467, 1467, 1467, 725: 1467, 730: 1467, 843: 1467, 1467, 847: 1467, 849: 1467, 851: 1467, 855: 1467, 864: 1467, 1467, 1467}, + {2: 1466, 1466, 1466, 1466, 1466, 1466, 1466, 10: 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 53: 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 545: 1466, 547: 1466, 1466, 1466, 1466, 554: 1466, 1466, 557: 1466, 1466, 1466, 561: 1466, 1466, 566: 1466, 1466, 573: 1466, 593: 1466, 600: 1466, 1466, 633: 1466, 640: 1466, 1466, 643: 1466, 1466, 1466, 650: 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 659: 1466, 1466, 1466, 663: 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 673: 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 711: 1466, 1466, 1466, 1466, 1466, 1466, 725: 1466, 730: 4261}, + {2: 1464, 1464, 1464, 1464, 1464, 1464, 1464, 10: 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 53: 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 545: 1464, 547: 1464, 1464, 1464, 1464, 554: 1464, 1464, 557: 1464, 1464, 1464, 561: 1464, 1464, 566: 1464, 1464, 573: 1464, 593: 1464, 600: 1464, 1464, 633: 1464, 640: 1464, 1464, 643: 1464, 1464, 1464, 650: 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 659: 1464, 1464, 1464, 663: 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 673: 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 711: 1464, 1464, 1464, 1464, 1464, 1464, 725: 1464}, // 1340 - {2: 1457, 1457, 1457, 1457, 1457, 1457, 1457, 10: 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 53: 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 545: 1457, 547: 1457, 1457, 1457, 1457, 554: 1457, 1457, 557: 1457, 1457, 1457, 561: 1457, 1457, 566: 1457, 1457, 573: 1457, 593: 1457, 600: 1457, 1457, 633: 1457, 640: 1457, 642: 1457, 1457, 1457, 1457, 650: 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 671: 1457, 673: 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 1457, 725: 1457}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4238}, - {52: 4239, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 546: 1175, 1175, 1175, 550: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 563: 1175, 1175, 1175, 568: 1175, 1175, 1175, 1175, 1175, 574: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 594: 1175, 1175, 1175, 1175, 1175, 1175, 602: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 623: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 634: 1175, 1175, 1175, 1175, 1175, 1175, 641: 1175, 646: 1175, 1175, 1175, 1175, 672: 1175, 718: 1175, 835: 4123, 848: 4241, 859: 4240}, - {1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 546: 1341, 1341, 1341, 550: 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 563: 1341, 1341, 1341, 568: 1341, 1341, 1341, 1341, 1341, 574: 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 594: 1341, 1341, 1341, 1341, 1341, 1341, 602: 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 623: 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 634: 1341, 1341, 1341, 1341, 1341, 1341, 641: 1341, 646: 1341, 1341, 1341, 1341, 672: 1341, 718: 1341}, + {2: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 10: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 53: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 545: 1461, 547: 1461, 1461, 1461, 1461, 554: 1461, 1461, 557: 1461, 1461, 1461, 561: 1461, 1461, 566: 1461, 1461, 573: 1461, 593: 1461, 600: 1461, 1461, 633: 1461, 640: 1461, 1461, 643: 1461, 1461, 1461, 650: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 659: 1461, 1461, 1461, 663: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 673: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 711: 1461, 1461, 1461, 1461, 1461, 1461, 725: 1461}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4257}, + {52: 4258, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 546: 1179, 1179, 1179, 550: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 563: 1179, 1179, 1179, 568: 1179, 1179, 1179, 1179, 1179, 574: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 594: 1179, 1179, 1179, 1179, 1179, 1179, 602: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 623: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 634: 1179, 1179, 1179, 1179, 1179, 1179, 642: 1179, 646: 1179, 1179, 1179, 1179, 672: 1179, 721: 1179, 835: 4142, 848: 4260, 859: 4259}, + {1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 546: 1345, 1345, 1345, 550: 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 563: 1345, 1345, 1345, 568: 1345, 1345, 1345, 1345, 1345, 574: 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 594: 1345, 1345, 1345, 1345, 1345, 1345, 602: 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 623: 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 634: 1345, 1345, 1345, 1345, 1345, 1345, 642: 1345, 646: 1345, 1345, 1345, 1345, 672: 1345, 721: 1345}, // 1345 - {1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 546: 1174, 1174, 1174, 550: 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 563: 1174, 1174, 1174, 568: 1174, 1174, 1174, 1174, 1174, 574: 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 594: 1174, 1174, 1174, 1174, 1174, 1174, 602: 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 623: 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 1174, 634: 1174, 1174, 1174, 1174, 1174, 1174, 641: 1174, 646: 1174, 1174, 1174, 1174, 672: 1174, 718: 1174}, - {2: 1456, 1456, 1456, 1456, 1456, 1456, 1456, 10: 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 53: 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 545: 1456, 547: 1456, 1456, 1456, 1456, 554: 1456, 1456, 557: 1456, 1456, 1456, 561: 1456, 1456, 566: 1456, 1456, 573: 1456, 593: 1456, 600: 1456, 1456, 633: 1456, 640: 1456, 642: 1456, 1456, 1456, 1456, 650: 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 671: 1456, 673: 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 1456, 725: 1456}, - {2: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 10: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 53: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 545: 1461, 547: 1461, 1461, 1461, 1461, 554: 1461, 1461, 557: 1461, 1461, 1461, 561: 1461, 1461, 566: 1461, 1461, 573: 1461, 593: 1461, 600: 1461, 1461, 633: 1461, 640: 1461, 642: 1461, 1461, 1461, 1461, 650: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 671: 1461, 673: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 725: 1461, 730: 4233, 843: 4231, 4232, 901: 4234, 903: 4235, 929: 4244, 4236}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4245}, - {52: 4246, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, + {1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 546: 1178, 1178, 1178, 550: 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 563: 1178, 1178, 1178, 568: 1178, 1178, 1178, 1178, 1178, 574: 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 594: 1178, 1178, 1178, 1178, 1178, 1178, 602: 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 623: 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 634: 1178, 1178, 1178, 1178, 1178, 1178, 642: 1178, 646: 1178, 1178, 1178, 1178, 672: 1178, 721: 1178}, + {2: 1460, 1460, 1460, 1460, 1460, 1460, 1460, 10: 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 53: 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 545: 1460, 547: 1460, 1460, 1460, 1460, 554: 1460, 1460, 557: 1460, 1460, 1460, 561: 1460, 1460, 566: 1460, 1460, 573: 1460, 593: 1460, 600: 1460, 1460, 633: 1460, 640: 1460, 1460, 643: 1460, 1460, 1460, 650: 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 659: 1460, 1460, 1460, 663: 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 673: 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 1460, 711: 1460, 1460, 1460, 1460, 1460, 1460, 725: 1460}, + {2: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 10: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 53: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 545: 1465, 547: 1465, 1465, 1465, 1465, 554: 1465, 1465, 557: 1465, 1465, 1465, 561: 1465, 1465, 566: 1465, 1465, 573: 1465, 593: 1465, 600: 1465, 1465, 633: 1465, 640: 1465, 1465, 643: 1465, 1465, 1465, 650: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 659: 1465, 1465, 1465, 663: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 673: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 711: 1465, 1465, 1465, 1465, 1465, 1465, 725: 1465, 730: 4252, 843: 4250, 4251, 901: 4253, 903: 4254, 929: 4263, 4255}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4264}, + {52: 4265, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, // 1350 - {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 546: 1175, 1175, 1175, 550: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 563: 1175, 1175, 1175, 568: 1175, 1175, 1175, 1175, 1175, 574: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 594: 1175, 1175, 1175, 1175, 1175, 1175, 602: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 623: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 634: 1175, 1175, 1175, 1175, 1175, 1175, 641: 1175, 646: 1175, 1175, 1175, 1175, 672: 1175, 718: 1175, 835: 4123, 848: 4241, 859: 4247}, - {1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 546: 1342, 1342, 1342, 550: 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 563: 1342, 1342, 1342, 568: 1342, 1342, 1342, 1342, 1342, 574: 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 594: 1342, 1342, 1342, 1342, 1342, 1342, 602: 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 623: 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 634: 1342, 1342, 1342, 1342, 1342, 1342, 641: 1342, 646: 1342, 1342, 1342, 1342, 672: 1342, 718: 1342}, - {2: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 10: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 53: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 545: 1461, 547: 1461, 1461, 1461, 1461, 554: 1461, 1461, 557: 1461, 1461, 1461, 561: 1461, 1461, 566: 1461, 1461, 573: 1461, 593: 1461, 600: 1461, 1461, 633: 1461, 640: 1461, 642: 1461, 1461, 1461, 1461, 650: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 671: 1461, 673: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 725: 1461, 730: 4233, 843: 4231, 4232, 901: 4234, 903: 4235, 929: 4249, 4236}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4250}, - {52: 4251, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, + {1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 546: 1179, 1179, 1179, 550: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 563: 1179, 1179, 1179, 568: 1179, 1179, 1179, 1179, 1179, 574: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 594: 1179, 1179, 1179, 1179, 1179, 1179, 602: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 623: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 634: 1179, 1179, 1179, 1179, 1179, 1179, 642: 1179, 646: 1179, 1179, 1179, 1179, 672: 1179, 721: 1179, 835: 4142, 848: 4260, 859: 4266}, + {1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 546: 1346, 1346, 1346, 550: 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 563: 1346, 1346, 1346, 568: 1346, 1346, 1346, 1346, 1346, 574: 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 594: 1346, 1346, 1346, 1346, 1346, 1346, 602: 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 623: 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 634: 1346, 1346, 1346, 1346, 1346, 1346, 642: 1346, 646: 1346, 1346, 1346, 1346, 672: 1346, 721: 1346}, + {2: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 10: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 53: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 545: 1465, 547: 1465, 1465, 1465, 1465, 554: 1465, 1465, 557: 1465, 1465, 1465, 561: 1465, 1465, 566: 1465, 1465, 573: 1465, 593: 1465, 600: 1465, 1465, 633: 1465, 640: 1465, 1465, 643: 1465, 1465, 1465, 650: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 659: 1465, 1465, 1465, 663: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 673: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 711: 1465, 1465, 1465, 1465, 1465, 1465, 725: 1465, 730: 4252, 843: 4250, 4251, 901: 4253, 903: 4254, 929: 4268, 4255}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4269}, + {52: 4270, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, // 1355 - {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 546: 1175, 1175, 1175, 550: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 563: 1175, 1175, 1175, 568: 1175, 1175, 1175, 1175, 1175, 574: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 594: 1175, 1175, 1175, 1175, 1175, 1175, 602: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 623: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 634: 1175, 1175, 1175, 1175, 1175, 1175, 641: 1175, 646: 1175, 1175, 1175, 1175, 672: 1175, 718: 1175, 835: 4123, 848: 4241, 859: 4252}, - {1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 546: 1343, 1343, 1343, 550: 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 563: 1343, 1343, 1343, 568: 1343, 1343, 1343, 1343, 1343, 574: 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 594: 1343, 1343, 1343, 1343, 1343, 1343, 602: 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 623: 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 634: 1343, 1343, 1343, 1343, 1343, 1343, 641: 1343, 646: 1343, 1343, 1343, 1343, 672: 1343, 718: 1343}, - {2: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 10: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 53: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 545: 1461, 547: 1461, 1461, 1461, 1461, 554: 1461, 1461, 557: 1461, 1461, 1461, 561: 1461, 1461, 566: 1461, 1461, 573: 1461, 593: 1461, 600: 1461, 1461, 633: 1461, 640: 1461, 642: 1461, 1461, 1461, 1461, 650: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 671: 1461, 673: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 725: 1461, 730: 4233, 843: 4231, 4232, 901: 4234, 903: 4235, 929: 4254, 4236}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4255}, - {52: 4256, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, + {1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 546: 1179, 1179, 1179, 550: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 563: 1179, 1179, 1179, 568: 1179, 1179, 1179, 1179, 1179, 574: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 594: 1179, 1179, 1179, 1179, 1179, 1179, 602: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 623: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 634: 1179, 1179, 1179, 1179, 1179, 1179, 642: 1179, 646: 1179, 1179, 1179, 1179, 672: 1179, 721: 1179, 835: 4142, 848: 4260, 859: 4271}, + {1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 546: 1347, 1347, 1347, 550: 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 563: 1347, 1347, 1347, 568: 1347, 1347, 1347, 1347, 1347, 574: 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 594: 1347, 1347, 1347, 1347, 1347, 1347, 602: 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 623: 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 634: 1347, 1347, 1347, 1347, 1347, 1347, 642: 1347, 646: 1347, 1347, 1347, 1347, 672: 1347, 721: 1347}, + {2: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 10: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 53: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 545: 1465, 547: 1465, 1465, 1465, 1465, 554: 1465, 1465, 557: 1465, 1465, 1465, 561: 1465, 1465, 566: 1465, 1465, 573: 1465, 593: 1465, 600: 1465, 1465, 633: 1465, 640: 1465, 1465, 643: 1465, 1465, 1465, 650: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 659: 1465, 1465, 1465, 663: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 673: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 711: 1465, 1465, 1465, 1465, 1465, 1465, 725: 1465, 730: 4252, 843: 4250, 4251, 901: 4253, 903: 4254, 929: 4273, 4255}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4274}, + {52: 4275, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, // 1360 - {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 546: 1175, 1175, 1175, 550: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 563: 1175, 1175, 1175, 568: 1175, 1175, 1175, 1175, 1175, 574: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 594: 1175, 1175, 1175, 1175, 1175, 1175, 602: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 623: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 634: 1175, 1175, 1175, 1175, 1175, 1175, 641: 1175, 646: 1175, 1175, 1175, 1175, 672: 1175, 718: 1175, 835: 4123, 848: 4241, 859: 4257}, - {1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 546: 1344, 1344, 1344, 550: 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 563: 1344, 1344, 1344, 568: 1344, 1344, 1344, 1344, 1344, 574: 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 594: 1344, 1344, 1344, 1344, 1344, 1344, 602: 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 623: 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 634: 1344, 1344, 1344, 1344, 1344, 1344, 641: 1344, 646: 1344, 1344, 1344, 1344, 672: 1344, 718: 1344}, - {2: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 10: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 53: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 545: 1461, 547: 1461, 1461, 1461, 1461, 554: 1461, 1461, 557: 1461, 1461, 1461, 561: 1461, 1461, 566: 1461, 1461, 573: 1461, 593: 1461, 600: 1461, 1461, 633: 1461, 640: 1461, 642: 1461, 1461, 1461, 1461, 650: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 671: 1461, 673: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 725: 1461, 730: 4233, 843: 4231, 4232, 901: 4234, 903: 4235, 929: 4259, 4236}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4260}, - {52: 4261, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, + {1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 546: 1179, 1179, 1179, 550: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 563: 1179, 1179, 1179, 568: 1179, 1179, 1179, 1179, 1179, 574: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 594: 1179, 1179, 1179, 1179, 1179, 1179, 602: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 623: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 634: 1179, 1179, 1179, 1179, 1179, 1179, 642: 1179, 646: 1179, 1179, 1179, 1179, 672: 1179, 721: 1179, 835: 4142, 848: 4260, 859: 4276}, + {1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 546: 1348, 1348, 1348, 550: 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 563: 1348, 1348, 1348, 568: 1348, 1348, 1348, 1348, 1348, 574: 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 594: 1348, 1348, 1348, 1348, 1348, 1348, 602: 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 623: 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 634: 1348, 1348, 1348, 1348, 1348, 1348, 642: 1348, 646: 1348, 1348, 1348, 1348, 672: 1348, 721: 1348}, + {2: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 10: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 53: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 545: 1465, 547: 1465, 1465, 1465, 1465, 554: 1465, 1465, 557: 1465, 1465, 1465, 561: 1465, 1465, 566: 1465, 1465, 573: 1465, 593: 1465, 600: 1465, 1465, 633: 1465, 640: 1465, 1465, 643: 1465, 1465, 1465, 650: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 659: 1465, 1465, 1465, 663: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 673: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 711: 1465, 1465, 1465, 1465, 1465, 1465, 725: 1465, 730: 4252, 843: 4250, 4251, 901: 4253, 903: 4254, 929: 4278, 4255}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4279}, + {52: 4280, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, // 1365 - {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 546: 1175, 1175, 1175, 550: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 563: 1175, 1175, 1175, 568: 1175, 1175, 1175, 1175, 1175, 574: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 594: 1175, 1175, 1175, 1175, 1175, 1175, 602: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 623: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 634: 1175, 1175, 1175, 1175, 1175, 1175, 641: 1175, 646: 1175, 1175, 1175, 1175, 672: 1175, 718: 1175, 835: 4123, 848: 4241, 859: 4262}, - {1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 546: 1345, 1345, 1345, 550: 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 563: 1345, 1345, 1345, 568: 1345, 1345, 1345, 1345, 1345, 574: 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 594: 1345, 1345, 1345, 1345, 1345, 1345, 602: 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 623: 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 634: 1345, 1345, 1345, 1345, 1345, 1345, 641: 1345, 646: 1345, 1345, 1345, 1345, 672: 1345, 718: 1345}, - {2: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 10: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 53: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 545: 1461, 547: 1461, 1461, 1461, 1461, 554: 1461, 1461, 557: 1461, 1461, 1461, 561: 1461, 1461, 566: 1461, 1461, 573: 1461, 593: 1461, 600: 1461, 1461, 633: 1461, 640: 1461, 642: 1461, 1461, 1461, 1461, 650: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 671: 1461, 673: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 725: 1461, 730: 4233, 843: 4231, 4232, 901: 4234, 903: 4235, 929: 4264, 4236}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4265}, - {52: 4266, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, + {1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 546: 1179, 1179, 1179, 550: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 563: 1179, 1179, 1179, 568: 1179, 1179, 1179, 1179, 1179, 574: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 594: 1179, 1179, 1179, 1179, 1179, 1179, 602: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 623: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 634: 1179, 1179, 1179, 1179, 1179, 1179, 642: 1179, 646: 1179, 1179, 1179, 1179, 672: 1179, 721: 1179, 835: 4142, 848: 4260, 859: 4281}, + {1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 546: 1349, 1349, 1349, 550: 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 563: 1349, 1349, 1349, 568: 1349, 1349, 1349, 1349, 1349, 574: 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 594: 1349, 1349, 1349, 1349, 1349, 1349, 602: 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 623: 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 634: 1349, 1349, 1349, 1349, 1349, 1349, 642: 1349, 646: 1349, 1349, 1349, 1349, 672: 1349, 721: 1349}, + {2: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 10: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 53: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 545: 1465, 547: 1465, 1465, 1465, 1465, 554: 1465, 1465, 557: 1465, 1465, 1465, 561: 1465, 1465, 566: 1465, 1465, 573: 1465, 593: 1465, 600: 1465, 1465, 633: 1465, 640: 1465, 1465, 643: 1465, 1465, 1465, 650: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 659: 1465, 1465, 1465, 663: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 673: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 711: 1465, 1465, 1465, 1465, 1465, 1465, 725: 1465, 730: 4252, 843: 4250, 4251, 901: 4253, 903: 4254, 929: 4283, 4255}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4284}, + {52: 4285, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, // 1370 - {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 546: 1175, 1175, 1175, 550: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 563: 1175, 1175, 1175, 568: 1175, 1175, 1175, 1175, 1175, 574: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 594: 1175, 1175, 1175, 1175, 1175, 1175, 602: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 623: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 634: 1175, 1175, 1175, 1175, 1175, 1175, 641: 1175, 646: 1175, 1175, 1175, 1175, 672: 1175, 718: 1175, 835: 4123, 848: 4241, 859: 4267}, - {1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 546: 1346, 1346, 1346, 550: 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 563: 1346, 1346, 1346, 568: 1346, 1346, 1346, 1346, 1346, 574: 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 594: 1346, 1346, 1346, 1346, 1346, 1346, 602: 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 623: 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 634: 1346, 1346, 1346, 1346, 1346, 1346, 641: 1346, 646: 1346, 1346, 1346, 1346, 672: 1346, 718: 1346}, - {2: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 10: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 53: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 545: 1461, 547: 1461, 1461, 1461, 1461, 554: 1461, 1461, 557: 1461, 1461, 1461, 561: 1461, 1461, 566: 1461, 1461, 573: 1461, 593: 1461, 600: 1461, 1461, 633: 1461, 640: 1461, 642: 1461, 1461, 1461, 1461, 650: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 671: 1461, 673: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 725: 1461, 730: 4233, 843: 4231, 4232, 901: 4234, 903: 4235, 929: 4269, 4236}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4270}, - {52: 4271, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, + {1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 546: 1179, 1179, 1179, 550: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 563: 1179, 1179, 1179, 568: 1179, 1179, 1179, 1179, 1179, 574: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 594: 1179, 1179, 1179, 1179, 1179, 1179, 602: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 623: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 634: 1179, 1179, 1179, 1179, 1179, 1179, 642: 1179, 646: 1179, 1179, 1179, 1179, 672: 1179, 721: 1179, 835: 4142, 848: 4260, 859: 4286}, + {1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 546: 1350, 1350, 1350, 550: 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 563: 1350, 1350, 1350, 568: 1350, 1350, 1350, 1350, 1350, 574: 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 594: 1350, 1350, 1350, 1350, 1350, 1350, 602: 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 623: 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 634: 1350, 1350, 1350, 1350, 1350, 1350, 642: 1350, 646: 1350, 1350, 1350, 1350, 672: 1350, 721: 1350}, + {2: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 10: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 53: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 545: 1465, 547: 1465, 1465, 1465, 1465, 554: 1465, 1465, 557: 1465, 1465, 1465, 561: 1465, 1465, 566: 1465, 1465, 573: 1465, 593: 1465, 600: 1465, 1465, 633: 1465, 640: 1465, 1465, 643: 1465, 1465, 1465, 650: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 659: 1465, 1465, 1465, 663: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 673: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 711: 1465, 1465, 1465, 1465, 1465, 1465, 725: 1465, 730: 4252, 843: 4250, 4251, 901: 4253, 903: 4254, 929: 4288, 4255}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4289}, + {52: 4290, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, // 1375 - {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 546: 1175, 1175, 1175, 550: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 563: 1175, 1175, 1175, 568: 1175, 1175, 1175, 1175, 1175, 574: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 594: 1175, 1175, 1175, 1175, 1175, 1175, 602: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 623: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 634: 1175, 1175, 1175, 1175, 1175, 1175, 641: 1175, 646: 1175, 1175, 1175, 1175, 672: 1175, 718: 1175, 835: 4123, 848: 4241, 859: 4272}, - {1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 546: 1347, 1347, 1347, 550: 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 563: 1347, 1347, 1347, 568: 1347, 1347, 1347, 1347, 1347, 574: 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 594: 1347, 1347, 1347, 1347, 1347, 1347, 602: 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 623: 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 634: 1347, 1347, 1347, 1347, 1347, 1347, 641: 1347, 646: 1347, 1347, 1347, 1347, 672: 1347, 718: 1347}, - {2: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 10: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 53: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 545: 1461, 547: 1461, 1461, 1461, 1461, 554: 1461, 1461, 557: 1461, 1461, 1461, 561: 1461, 1461, 566: 1461, 1461, 573: 1461, 593: 1461, 600: 1461, 1461, 633: 1461, 640: 1461, 642: 1461, 1461, 1461, 1461, 650: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 671: 1461, 673: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 725: 1461, 730: 4233, 843: 4231, 4232, 901: 4234, 903: 4235, 929: 4274, 4236}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3898, 874: 4275}, - {9: 4049, 52: 1519, 171: 1519, 579: 3913, 857: 3967, 926: 4276}, + {1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 546: 1179, 1179, 1179, 550: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 563: 1179, 1179, 1179, 568: 1179, 1179, 1179, 1179, 1179, 574: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 594: 1179, 1179, 1179, 1179, 1179, 1179, 602: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 623: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 634: 1179, 1179, 1179, 1179, 1179, 1179, 642: 1179, 646: 1179, 1179, 1179, 1179, 672: 1179, 721: 1179, 835: 4142, 848: 4260, 859: 4291}, + {1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 546: 1351, 1351, 1351, 550: 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 563: 1351, 1351, 1351, 568: 1351, 1351, 1351, 1351, 1351, 574: 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 594: 1351, 1351, 1351, 1351, 1351, 1351, 602: 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 623: 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 634: 1351, 1351, 1351, 1351, 1351, 1351, 642: 1351, 646: 1351, 1351, 1351, 1351, 672: 1351, 721: 1351}, + {2: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 10: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 53: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 545: 1465, 547: 1465, 1465, 1465, 1465, 554: 1465, 1465, 557: 1465, 1465, 1465, 561: 1465, 1465, 566: 1465, 1465, 573: 1465, 593: 1465, 600: 1465, 1465, 633: 1465, 640: 1465, 1465, 643: 1465, 1465, 1465, 650: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 659: 1465, 1465, 1465, 663: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 673: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 711: 1465, 1465, 1465, 1465, 1465, 1465, 725: 1465, 730: 4252, 843: 4250, 4251, 901: 4253, 903: 4254, 929: 4293, 4255}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3917, 874: 4294}, + {9: 4068, 52: 1523, 172: 1523, 579: 3932, 857: 3986, 926: 4295}, // 1380 - {52: 1334, 171: 4278, 1420: 4277}, - {52: 4280}, - {547: 4279}, - {52: 1333}, - {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 546: 1175, 1175, 1175, 550: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 563: 1175, 1175, 1175, 568: 1175, 1175, 1175, 1175, 1175, 574: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 594: 1175, 1175, 1175, 1175, 1175, 1175, 602: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 623: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 634: 1175, 1175, 1175, 1175, 1175, 1175, 641: 1175, 646: 1175, 1175, 1175, 1175, 672: 1175, 718: 1175, 835: 4123, 848: 4241, 859: 4281}, + {52: 1338, 172: 4297, 1425: 4296}, + {52: 4299}, + {547: 4298}, + {52: 1337}, + {1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 546: 1179, 1179, 1179, 550: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 563: 1179, 1179, 1179, 568: 1179, 1179, 1179, 1179, 1179, 574: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 594: 1179, 1179, 1179, 1179, 1179, 1179, 602: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 623: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 634: 1179, 1179, 1179, 1179, 1179, 1179, 642: 1179, 646: 1179, 1179, 1179, 1179, 672: 1179, 721: 1179, 835: 4142, 848: 4260, 859: 4300}, // 1385 - {1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 546: 1348, 1348, 1348, 550: 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 563: 1348, 1348, 1348, 568: 1348, 1348, 1348, 1348, 1348, 574: 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 594: 1348, 1348, 1348, 1348, 1348, 1348, 602: 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 623: 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 634: 1348, 1348, 1348, 1348, 1348, 1348, 641: 1348, 646: 1348, 1348, 1348, 1348, 672: 1348, 718: 1348}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 575: 4286, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 730: 4285, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4283, 843: 4231, 4232, 901: 4284}, - {52: 4294, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3898, 874: 4292}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4289}, + {1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 546: 1352, 1352, 1352, 550: 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 563: 1352, 1352, 1352, 568: 1352, 1352, 1352, 1352, 1352, 574: 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 594: 1352, 1352, 1352, 1352, 1352, 1352, 602: 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 623: 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 634: 1352, 1352, 1352, 1352, 1352, 1352, 642: 1352, 646: 1352, 1352, 1352, 1352, 672: 1352, 721: 1352}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 575: 4305, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 730: 4304, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4302, 843: 4250, 4251, 901: 4303}, + {52: 4313, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3917, 874: 4311}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4308}, // 1390 - {52: 4287}, - {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 546: 1175, 1175, 1175, 550: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 563: 1175, 1175, 1175, 568: 1175, 1175, 1175, 1175, 1175, 574: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 594: 1175, 1175, 1175, 1175, 1175, 1175, 602: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 623: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 634: 1175, 1175, 1175, 1175, 1175, 1175, 641: 1175, 646: 1175, 1175, 1175, 1175, 672: 1175, 718: 1175, 835: 4123, 848: 4241, 859: 4288}, - {1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 546: 1349, 1349, 1349, 550: 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 563: 1349, 1349, 1349, 568: 1349, 1349, 1349, 1349, 1349, 574: 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 594: 1349, 1349, 1349, 1349, 1349, 1349, 602: 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 623: 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 1349, 634: 1349, 1349, 1349, 1349, 1349, 1349, 641: 1349, 646: 1349, 1349, 1349, 1349, 672: 1349, 718: 1349}, - {52: 4290, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 546: 1175, 1175, 1175, 550: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 563: 1175, 1175, 1175, 568: 1175, 1175, 1175, 1175, 1175, 574: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 594: 1175, 1175, 1175, 1175, 1175, 1175, 602: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 623: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 634: 1175, 1175, 1175, 1175, 1175, 1175, 641: 1175, 646: 1175, 1175, 1175, 1175, 672: 1175, 718: 1175, 835: 4123, 848: 4241, 859: 4291}, + {52: 4306}, + {1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 546: 1179, 1179, 1179, 550: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 563: 1179, 1179, 1179, 568: 1179, 1179, 1179, 1179, 1179, 574: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 594: 1179, 1179, 1179, 1179, 1179, 1179, 602: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 623: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 634: 1179, 1179, 1179, 1179, 1179, 1179, 642: 1179, 646: 1179, 1179, 1179, 1179, 672: 1179, 721: 1179, 835: 4142, 848: 4260, 859: 4307}, + {1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 546: 1353, 1353, 1353, 550: 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 563: 1353, 1353, 1353, 568: 1353, 1353, 1353, 1353, 1353, 574: 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 594: 1353, 1353, 1353, 1353, 1353, 1353, 602: 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 623: 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 634: 1353, 1353, 1353, 1353, 1353, 1353, 642: 1353, 646: 1353, 1353, 1353, 1353, 672: 1353, 721: 1353}, + {52: 4309, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 546: 1179, 1179, 1179, 550: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 563: 1179, 1179, 1179, 568: 1179, 1179, 1179, 1179, 1179, 574: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 594: 1179, 1179, 1179, 1179, 1179, 1179, 602: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 623: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 634: 1179, 1179, 1179, 1179, 1179, 1179, 642: 1179, 646: 1179, 1179, 1179, 1179, 672: 1179, 721: 1179, 835: 4142, 848: 4260, 859: 4310}, // 1395 - {1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 546: 1351, 1351, 1351, 550: 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 563: 1351, 1351, 1351, 568: 1351, 1351, 1351, 1351, 1351, 574: 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 594: 1351, 1351, 1351, 1351, 1351, 1351, 602: 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 623: 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 634: 1351, 1351, 1351, 1351, 1351, 1351, 641: 1351, 646: 1351, 1351, 1351, 1351, 672: 1351, 718: 1351}, - {9: 4049, 52: 4293}, - {1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 546: 1352, 1352, 1352, 550: 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 563: 1352, 1352, 1352, 568: 1352, 1352, 1352, 1352, 1352, 574: 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 594: 1352, 1352, 1352, 1352, 1352, 1352, 602: 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 623: 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 634: 1352, 1352, 1352, 1352, 1352, 1352, 641: 1352, 646: 1352, 1352, 1352, 1352, 672: 1352, 718: 1352}, - {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 546: 1175, 1175, 1175, 550: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 563: 1175, 1175, 1175, 568: 1175, 1175, 1175, 1175, 1175, 574: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 594: 1175, 1175, 1175, 1175, 1175, 1175, 602: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 623: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 634: 1175, 1175, 1175, 1175, 1175, 1175, 641: 1175, 646: 1175, 1175, 1175, 1175, 672: 1175, 718: 1175, 835: 4123, 848: 4241, 859: 4295}, - {1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 546: 1350, 1350, 1350, 550: 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 563: 1350, 1350, 1350, 568: 1350, 1350, 1350, 1350, 1350, 574: 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 594: 1350, 1350, 1350, 1350, 1350, 1350, 602: 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 623: 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 634: 1350, 1350, 1350, 1350, 1350, 1350, 641: 1350, 646: 1350, 1350, 1350, 1350, 672: 1350, 718: 1350}, + {1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 546: 1355, 1355, 1355, 550: 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 563: 1355, 1355, 1355, 568: 1355, 1355, 1355, 1355, 1355, 574: 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 594: 1355, 1355, 1355, 1355, 1355, 1355, 602: 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 623: 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 634: 1355, 1355, 1355, 1355, 1355, 1355, 642: 1355, 646: 1355, 1355, 1355, 1355, 672: 1355, 721: 1355}, + {9: 4068, 52: 4312}, + {1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 546: 1356, 1356, 1356, 550: 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 563: 1356, 1356, 1356, 568: 1356, 1356, 1356, 1356, 1356, 574: 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 594: 1356, 1356, 1356, 1356, 1356, 1356, 602: 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 623: 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 634: 1356, 1356, 1356, 1356, 1356, 1356, 642: 1356, 646: 1356, 1356, 1356, 1356, 672: 1356, 721: 1356}, + {1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 546: 1179, 1179, 1179, 550: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 563: 1179, 1179, 1179, 568: 1179, 1179, 1179, 1179, 1179, 574: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 594: 1179, 1179, 1179, 1179, 1179, 1179, 602: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 623: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 634: 1179, 1179, 1179, 1179, 1179, 1179, 642: 1179, 646: 1179, 1179, 1179, 1179, 672: 1179, 721: 1179, 835: 4142, 848: 4260, 859: 4314}, + {1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 546: 1354, 1354, 1354, 550: 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 563: 1354, 1354, 1354, 568: 1354, 1354, 1354, 1354, 1354, 574: 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 594: 1354, 1354, 1354, 1354, 1354, 1354, 602: 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 623: 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 634: 1354, 1354, 1354, 1354, 1354, 1354, 642: 1354, 646: 1354, 1354, 1354, 1354, 672: 1354, 721: 1354}, // 1400 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 730: 4298, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4297}, - {52: 4302, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4299}, - {52: 4300, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 546: 1175, 1175, 1175, 550: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 563: 1175, 1175, 1175, 568: 1175, 1175, 1175, 1175, 1175, 574: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 594: 1175, 1175, 1175, 1175, 1175, 1175, 602: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 623: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 634: 1175, 1175, 1175, 1175, 1175, 1175, 641: 1175, 646: 1175, 1175, 1175, 1175, 672: 1175, 718: 1175, 835: 4123, 848: 4241, 859: 4301}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 730: 4317, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4316}, + {52: 4321, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4318}, + {52: 4319, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 546: 1179, 1179, 1179, 550: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 563: 1179, 1179, 1179, 568: 1179, 1179, 1179, 1179, 1179, 574: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 594: 1179, 1179, 1179, 1179, 1179, 1179, 602: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 623: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 634: 1179, 1179, 1179, 1179, 1179, 1179, 642: 1179, 646: 1179, 1179, 1179, 1179, 672: 1179, 721: 1179, 835: 4142, 848: 4260, 859: 4320}, // 1405 - {1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 546: 1353, 1353, 1353, 550: 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 563: 1353, 1353, 1353, 568: 1353, 1353, 1353, 1353, 1353, 574: 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 594: 1353, 1353, 1353, 1353, 1353, 1353, 602: 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 623: 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 634: 1353, 1353, 1353, 1353, 1353, 1353, 641: 1353, 646: 1353, 1353, 1353, 1353, 672: 1353, 718: 1353}, - {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 546: 1175, 1175, 1175, 550: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 563: 1175, 1175, 1175, 568: 1175, 1175, 1175, 1175, 1175, 574: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 594: 1175, 1175, 1175, 1175, 1175, 1175, 602: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 623: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 634: 1175, 1175, 1175, 1175, 1175, 1175, 641: 1175, 646: 1175, 1175, 1175, 1175, 672: 1175, 718: 1175, 835: 4123, 848: 4241, 859: 4303}, - {1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 546: 1354, 1354, 1354, 550: 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 563: 1354, 1354, 1354, 568: 1354, 1354, 1354, 1354, 1354, 574: 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 594: 1354, 1354, 1354, 1354, 1354, 1354, 602: 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 623: 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 634: 1354, 1354, 1354, 1354, 1354, 1354, 641: 1354, 646: 1354, 1354, 1354, 1354, 672: 1354, 718: 1354}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 730: 4306, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4305}, - {52: 4310, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, + {1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 546: 1357, 1357, 1357, 550: 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 563: 1357, 1357, 1357, 568: 1357, 1357, 1357, 1357, 1357, 574: 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 594: 1357, 1357, 1357, 1357, 1357, 1357, 602: 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 623: 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 634: 1357, 1357, 1357, 1357, 1357, 1357, 642: 1357, 646: 1357, 1357, 1357, 1357, 672: 1357, 721: 1357}, + {1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 546: 1179, 1179, 1179, 550: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 563: 1179, 1179, 1179, 568: 1179, 1179, 1179, 1179, 1179, 574: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 594: 1179, 1179, 1179, 1179, 1179, 1179, 602: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 623: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 634: 1179, 1179, 1179, 1179, 1179, 1179, 642: 1179, 646: 1179, 1179, 1179, 1179, 672: 1179, 721: 1179, 835: 4142, 848: 4260, 859: 4322}, + {1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 546: 1358, 1358, 1358, 550: 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 563: 1358, 1358, 1358, 568: 1358, 1358, 1358, 1358, 1358, 574: 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 594: 1358, 1358, 1358, 1358, 1358, 1358, 602: 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 623: 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 634: 1358, 1358, 1358, 1358, 1358, 1358, 642: 1358, 646: 1358, 1358, 1358, 1358, 672: 1358, 721: 1358}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 730: 4325, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4324}, + {52: 4329, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, // 1410 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4307}, - {52: 4308, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 546: 1175, 1175, 1175, 550: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 563: 1175, 1175, 1175, 568: 1175, 1175, 1175, 1175, 1175, 574: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 594: 1175, 1175, 1175, 1175, 1175, 1175, 602: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 623: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 634: 1175, 1175, 1175, 1175, 1175, 1175, 641: 1175, 646: 1175, 1175, 1175, 1175, 672: 1175, 718: 1175, 835: 4123, 848: 4241, 859: 4309}, - {1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 546: 1355, 1355, 1355, 550: 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 563: 1355, 1355, 1355, 568: 1355, 1355, 1355, 1355, 1355, 574: 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 594: 1355, 1355, 1355, 1355, 1355, 1355, 602: 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 623: 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 634: 1355, 1355, 1355, 1355, 1355, 1355, 641: 1355, 646: 1355, 1355, 1355, 1355, 672: 1355, 718: 1355}, - {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 546: 1175, 1175, 1175, 550: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 563: 1175, 1175, 1175, 568: 1175, 1175, 1175, 1175, 1175, 574: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 594: 1175, 1175, 1175, 1175, 1175, 1175, 602: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 623: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 634: 1175, 1175, 1175, 1175, 1175, 1175, 641: 1175, 646: 1175, 1175, 1175, 1175, 672: 1175, 718: 1175, 835: 4123, 848: 4241, 859: 4311}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4326}, + {52: 4327, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 546: 1179, 1179, 1179, 550: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 563: 1179, 1179, 1179, 568: 1179, 1179, 1179, 1179, 1179, 574: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 594: 1179, 1179, 1179, 1179, 1179, 1179, 602: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 623: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 634: 1179, 1179, 1179, 1179, 1179, 1179, 642: 1179, 646: 1179, 1179, 1179, 1179, 672: 1179, 721: 1179, 835: 4142, 848: 4260, 859: 4328}, + {1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 546: 1359, 1359, 1359, 550: 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 563: 1359, 1359, 1359, 568: 1359, 1359, 1359, 1359, 1359, 574: 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 594: 1359, 1359, 1359, 1359, 1359, 1359, 602: 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 623: 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 634: 1359, 1359, 1359, 1359, 1359, 1359, 642: 1359, 646: 1359, 1359, 1359, 1359, 672: 1359, 721: 1359}, + {1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 546: 1179, 1179, 1179, 550: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 563: 1179, 1179, 1179, 568: 1179, 1179, 1179, 1179, 1179, 574: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 594: 1179, 1179, 1179, 1179, 1179, 1179, 602: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 623: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 634: 1179, 1179, 1179, 1179, 1179, 1179, 642: 1179, 646: 1179, 1179, 1179, 1179, 672: 1179, 721: 1179, 835: 4142, 848: 4260, 859: 4330}, // 1415 - {1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 546: 1356, 1356, 1356, 550: 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 563: 1356, 1356, 1356, 568: 1356, 1356, 1356, 1356, 1356, 574: 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 594: 1356, 1356, 1356, 1356, 1356, 1356, 602: 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 623: 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 634: 1356, 1356, 1356, 1356, 1356, 1356, 641: 1356, 646: 1356, 1356, 1356, 1356, 672: 1356, 718: 1356}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 730: 4314, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4313}, - {52: 4318, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4315}, - {52: 4316, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, + {1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 546: 1360, 1360, 1360, 550: 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 563: 1360, 1360, 1360, 568: 1360, 1360, 1360, 1360, 1360, 574: 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 594: 1360, 1360, 1360, 1360, 1360, 1360, 602: 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 623: 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 634: 1360, 1360, 1360, 1360, 1360, 1360, 642: 1360, 646: 1360, 1360, 1360, 1360, 672: 1360, 721: 1360}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 730: 4333, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4332}, + {52: 4337, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4334}, + {52: 4335, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, // 1420 - {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 546: 1175, 1175, 1175, 550: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 563: 1175, 1175, 1175, 568: 1175, 1175, 1175, 1175, 1175, 574: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 594: 1175, 1175, 1175, 1175, 1175, 1175, 602: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 623: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 634: 1175, 1175, 1175, 1175, 1175, 1175, 641: 1175, 646: 1175, 1175, 1175, 1175, 672: 1175, 718: 1175, 835: 4123, 848: 4241, 859: 4317}, - {1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 546: 1357, 1357, 1357, 550: 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 563: 1357, 1357, 1357, 568: 1357, 1357, 1357, 1357, 1357, 574: 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 594: 1357, 1357, 1357, 1357, 1357, 1357, 602: 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 623: 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 634: 1357, 1357, 1357, 1357, 1357, 1357, 641: 1357, 646: 1357, 1357, 1357, 1357, 672: 1357, 718: 1357}, - {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 546: 1175, 1175, 1175, 550: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 563: 1175, 1175, 1175, 568: 1175, 1175, 1175, 1175, 1175, 574: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 594: 1175, 1175, 1175, 1175, 1175, 1175, 602: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 623: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 634: 1175, 1175, 1175, 1175, 1175, 1175, 641: 1175, 646: 1175, 1175, 1175, 1175, 672: 1175, 718: 1175, 835: 4123, 848: 4241, 859: 4319}, - {1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 546: 1358, 1358, 1358, 550: 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 563: 1358, 1358, 1358, 568: 1358, 1358, 1358, 1358, 1358, 574: 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 594: 1358, 1358, 1358, 1358, 1358, 1358, 602: 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 623: 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358, 634: 1358, 1358, 1358, 1358, 1358, 1358, 641: 1358, 646: 1358, 1358, 1358, 1358, 672: 1358, 718: 1358}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3898, 874: 4321}, + {1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 546: 1179, 1179, 1179, 550: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 563: 1179, 1179, 1179, 568: 1179, 1179, 1179, 1179, 1179, 574: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 594: 1179, 1179, 1179, 1179, 1179, 1179, 602: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 623: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 634: 1179, 1179, 1179, 1179, 1179, 1179, 642: 1179, 646: 1179, 1179, 1179, 1179, 672: 1179, 721: 1179, 835: 4142, 848: 4260, 859: 4336}, + {1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 546: 1361, 1361, 1361, 550: 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 563: 1361, 1361, 1361, 568: 1361, 1361, 1361, 1361, 1361, 574: 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 594: 1361, 1361, 1361, 1361, 1361, 1361, 602: 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 623: 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 634: 1361, 1361, 1361, 1361, 1361, 1361, 642: 1361, 646: 1361, 1361, 1361, 1361, 672: 1361, 721: 1361}, + {1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 546: 1179, 1179, 1179, 550: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 563: 1179, 1179, 1179, 568: 1179, 1179, 1179, 1179, 1179, 574: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 594: 1179, 1179, 1179, 1179, 1179, 1179, 602: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 623: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 634: 1179, 1179, 1179, 1179, 1179, 1179, 642: 1179, 646: 1179, 1179, 1179, 1179, 672: 1179, 721: 1179, 835: 4142, 848: 4260, 859: 4338}, + {1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 546: 1362, 1362, 1362, 550: 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 563: 1362, 1362, 1362, 568: 1362, 1362, 1362, 1362, 1362, 574: 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 594: 1362, 1362, 1362, 1362, 1362, 1362, 602: 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 623: 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 1362, 634: 1362, 1362, 1362, 1362, 1362, 1362, 642: 1362, 646: 1362, 1362, 1362, 1362, 672: 1362, 721: 1362}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3917, 874: 4340}, // 1425 - {9: 4049, 52: 4322}, - {1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 546: 1359, 1359, 1359, 550: 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 563: 1359, 1359, 1359, 568: 1359, 1359, 1359, 1359, 1359, 574: 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 594: 1359, 1359, 1359, 1359, 1359, 1359, 602: 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 623: 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 634: 1359, 1359, 1359, 1359, 1359, 1359, 641: 1359, 646: 1359, 1359, 1359, 1359, 672: 1359, 718: 1359}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3898, 874: 4324}, - {9: 4049, 52: 4325}, - {1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 546: 1360, 1360, 1360, 550: 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 563: 1360, 1360, 1360, 568: 1360, 1360, 1360, 1360, 1360, 574: 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 594: 1360, 1360, 1360, 1360, 1360, 1360, 602: 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 623: 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 634: 1360, 1360, 1360, 1360, 1360, 1360, 641: 1360, 646: 1360, 1360, 1360, 1360, 672: 1360, 718: 1360}, + {9: 4068, 52: 4341}, + {1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 546: 1363, 1363, 1363, 550: 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 563: 1363, 1363, 1363, 568: 1363, 1363, 1363, 1363, 1363, 574: 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 594: 1363, 1363, 1363, 1363, 1363, 1363, 602: 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 623: 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 634: 1363, 1363, 1363, 1363, 1363, 1363, 642: 1363, 646: 1363, 1363, 1363, 1363, 672: 1363, 721: 1363}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3917, 874: 4343}, + {9: 4068, 52: 4344}, + {1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 546: 1364, 1364, 1364, 550: 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 563: 1364, 1364, 1364, 568: 1364, 1364, 1364, 1364, 1364, 574: 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 594: 1364, 1364, 1364, 1364, 1364, 1364, 602: 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 623: 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 634: 1364, 1364, 1364, 1364, 1364, 1364, 642: 1364, 646: 1364, 1364, 1364, 1364, 672: 1364, 721: 1364}, // 1430 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4327}, - {9: 4328, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4329}, - {9: 4330, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4331}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4346}, + {9: 4347, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4348}, + {9: 4349, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4350}, // 1435 - {52: 4332, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 546: 1376, 1376, 1376, 550: 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 563: 1376, 1376, 1376, 568: 1376, 1376, 1376, 1376, 1376, 574: 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 594: 1376, 1376, 1376, 1376, 1376, 1376, 602: 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 623: 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 634: 1376, 1376, 1376, 1376, 1376, 1376, 641: 1376, 646: 1376, 1376, 1376, 1376, 672: 1376, 718: 1376}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4334, 1343: 4336, 1398: 4337, 1503: 4338, 4335}, - {52: 4346, 576: 4347, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 576: 4340, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4339}, + {52: 4351, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 546: 1380, 1380, 1380, 550: 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 563: 1380, 1380, 1380, 568: 1380, 1380, 1380, 1380, 1380, 574: 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 594: 1380, 1380, 1380, 1380, 1380, 1380, 602: 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 623: 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 634: 1380, 1380, 1380, 1380, 1380, 1380, 642: 1380, 646: 1380, 1380, 1380, 1380, 672: 1380, 721: 1380}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4353, 1347: 4355, 1403: 4356, 1508: 4357, 4354}, + {52: 4365, 576: 4366, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 576: 4359, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4358}, // 1440 - {2: 1367, 1367, 1367, 1367, 1367, 1367, 1367, 10: 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 53: 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 545: 1367, 547: 1367, 1367, 1367, 1367, 554: 1367, 1367, 557: 1367, 1367, 1367, 561: 1367, 1367, 566: 1367, 1367, 573: 1367, 576: 1367, 593: 1367, 600: 1367, 1367, 633: 1367, 640: 1367, 642: 1367, 1367, 1367, 1367, 650: 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 671: 1367, 673: 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 725: 1367}, - {2: 1366, 1366, 1366, 1366, 1366, 1366, 1366, 10: 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 53: 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 545: 1366, 547: 1366, 1366, 1366, 1366, 554: 1366, 1366, 557: 1366, 1366, 1366, 561: 1366, 1366, 566: 1366, 1366, 573: 1366, 576: 1366, 593: 1366, 600: 1366, 1366, 633: 1366, 640: 1366, 642: 1366, 1366, 1366, 1366, 650: 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 671: 1366, 673: 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 1366, 725: 1366}, - {2: 1365, 1365, 1365, 1365, 1365, 1365, 1365, 10: 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 53: 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 545: 1365, 547: 1365, 1365, 1365, 1365, 554: 1365, 1365, 557: 1365, 1365, 1365, 561: 1365, 1365, 566: 1365, 1365, 573: 1365, 576: 1365, 593: 1365, 600: 1365, 1365, 633: 1365, 640: 1365, 642: 1365, 1365, 1365, 1365, 650: 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 671: 1365, 673: 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 725: 1365}, - {576: 4343, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4341}, + {2: 1371, 1371, 1371, 1371, 1371, 1371, 1371, 10: 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 53: 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 545: 1371, 547: 1371, 1371, 1371, 1371, 554: 1371, 1371, 557: 1371, 1371, 1371, 561: 1371, 1371, 566: 1371, 1371, 573: 1371, 576: 1371, 593: 1371, 600: 1371, 1371, 633: 1371, 640: 1371, 1371, 643: 1371, 1371, 1371, 650: 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 659: 1371, 1371, 1371, 663: 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 673: 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 1371, 711: 1371, 1371, 1371, 1371, 1371, 1371, 725: 1371}, + {2: 1370, 1370, 1370, 1370, 1370, 1370, 1370, 10: 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 53: 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 545: 1370, 547: 1370, 1370, 1370, 1370, 554: 1370, 1370, 557: 1370, 1370, 1370, 561: 1370, 1370, 566: 1370, 1370, 573: 1370, 576: 1370, 593: 1370, 600: 1370, 1370, 633: 1370, 640: 1370, 1370, 643: 1370, 1370, 1370, 650: 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 659: 1370, 1370, 1370, 663: 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 673: 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 1370, 711: 1370, 1370, 1370, 1370, 1370, 1370, 725: 1370}, + {2: 1369, 1369, 1369, 1369, 1369, 1369, 1369, 10: 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 53: 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 545: 1369, 547: 1369, 1369, 1369, 1369, 554: 1369, 1369, 557: 1369, 1369, 1369, 561: 1369, 1369, 566: 1369, 1369, 573: 1369, 576: 1369, 593: 1369, 600: 1369, 1369, 633: 1369, 640: 1369, 1369, 643: 1369, 1369, 1369, 650: 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 659: 1369, 1369, 1369, 663: 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 673: 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 711: 1369, 1369, 1369, 1369, 1369, 1369, 725: 1369}, + {576: 4362, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4360}, // 1445 - {52: 4342, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 546: 1382, 1382, 1382, 550: 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 563: 1382, 1382, 1382, 568: 1382, 1382, 1382, 1382, 1382, 574: 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 594: 1382, 1382, 1382, 1382, 1382, 1382, 602: 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 623: 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 634: 1382, 1382, 1382, 1382, 1382, 1382, 641: 1382, 646: 1382, 1382, 1382, 1382, 672: 1382, 718: 1382}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4344}, - {52: 4345, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 546: 1381, 1381, 1381, 550: 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 563: 1381, 1381, 1381, 568: 1381, 1381, 1381, 1381, 1381, 574: 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 594: 1381, 1381, 1381, 1381, 1381, 1381, 602: 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 623: 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 1381, 634: 1381, 1381, 1381, 1381, 1381, 1381, 641: 1381, 646: 1381, 1381, 1381, 1381, 672: 1381, 718: 1381}, + {52: 4361, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 546: 1386, 1386, 1386, 550: 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 563: 1386, 1386, 1386, 568: 1386, 1386, 1386, 1386, 1386, 574: 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 594: 1386, 1386, 1386, 1386, 1386, 1386, 602: 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 623: 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 634: 1386, 1386, 1386, 1386, 1386, 1386, 642: 1386, 646: 1386, 1386, 1386, 1386, 672: 1386, 721: 1386}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4363}, + {52: 4364, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 546: 1385, 1385, 1385, 550: 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 563: 1385, 1385, 1385, 568: 1385, 1385, 1385, 1385, 1385, 574: 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 594: 1385, 1385, 1385, 1385, 1385, 1385, 602: 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 623: 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 634: 1385, 1385, 1385, 1385, 1385, 1385, 642: 1385, 646: 1385, 1385, 1385, 1385, 672: 1385, 721: 1385}, // 1450 - {1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 546: 1384, 1384, 1384, 550: 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 563: 1384, 1384, 1384, 568: 1384, 1384, 1384, 1384, 1384, 574: 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 594: 1384, 1384, 1384, 1384, 1384, 1384, 602: 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 623: 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 634: 1384, 1384, 1384, 1384, 1384, 1384, 641: 1384, 646: 1384, 1384, 1384, 1384, 672: 1384, 718: 1384}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4348}, - {52: 4349, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 546: 1383, 1383, 1383, 550: 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 563: 1383, 1383, 1383, 568: 1383, 1383, 1383, 1383, 1383, 574: 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 594: 1383, 1383, 1383, 1383, 1383, 1383, 602: 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 623: 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 634: 1383, 1383, 1383, 1383, 1383, 1383, 641: 1383, 646: 1383, 1383, 1383, 1383, 672: 1383, 718: 1383}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4351}, + {1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 546: 1388, 1388, 1388, 550: 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 563: 1388, 1388, 1388, 568: 1388, 1388, 1388, 1388, 1388, 574: 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 594: 1388, 1388, 1388, 1388, 1388, 1388, 602: 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 623: 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 634: 1388, 1388, 1388, 1388, 1388, 1388, 642: 1388, 646: 1388, 1388, 1388, 1388, 672: 1388, 721: 1388}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4367}, + {52: 4368, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 546: 1387, 1387, 1387, 550: 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 563: 1387, 1387, 1387, 568: 1387, 1387, 1387, 1387, 1387, 574: 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 594: 1387, 1387, 1387, 1387, 1387, 1387, 602: 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 623: 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 634: 1387, 1387, 1387, 1387, 1387, 1387, 642: 1387, 646: 1387, 1387, 1387, 1387, 672: 1387, 721: 1387}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4370}, // 1455 - {9: 4352, 576: 4353, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4359}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4354}, - {52: 4355, 572: 4356, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 546: 1389, 1389, 1389, 550: 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 563: 1389, 1389, 1389, 568: 1389, 1389, 1389, 1389, 1389, 574: 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 594: 1389, 1389, 1389, 1389, 1389, 1389, 602: 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 623: 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 634: 1389, 1389, 1389, 1389, 1389, 1389, 641: 1389, 646: 1389, 1389, 1389, 1389, 672: 1389, 718: 1389}, + {9: 4371, 576: 4372, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4378}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4373}, + {52: 4374, 572: 4375, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 546: 1393, 1393, 1393, 550: 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 563: 1393, 1393, 1393, 568: 1393, 1393, 1393, 1393, 1393, 574: 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 594: 1393, 1393, 1393, 1393, 1393, 1393, 602: 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 623: 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 634: 1393, 1393, 1393, 1393, 1393, 1393, 642: 1393, 646: 1393, 1393, 1393, 1393, 672: 1393, 721: 1393}, // 1460 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4357}, - {52: 4358, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 546: 1387, 1387, 1387, 550: 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 563: 1387, 1387, 1387, 568: 1387, 1387, 1387, 1387, 1387, 574: 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 594: 1387, 1387, 1387, 1387, 1387, 1387, 602: 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 623: 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 1387, 634: 1387, 1387, 1387, 1387, 1387, 1387, 641: 1387, 646: 1387, 1387, 1387, 1387, 672: 1387, 718: 1387}, - {9: 4361, 52: 4360, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 546: 1390, 1390, 1390, 550: 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 563: 1390, 1390, 1390, 568: 1390, 1390, 1390, 1390, 1390, 574: 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 594: 1390, 1390, 1390, 1390, 1390, 1390, 602: 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 623: 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 634: 1390, 1390, 1390, 1390, 1390, 1390, 641: 1390, 646: 1390, 1390, 1390, 1390, 672: 1390, 718: 1390}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4376}, + {52: 4377, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 546: 1391, 1391, 1391, 550: 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 563: 1391, 1391, 1391, 568: 1391, 1391, 1391, 1391, 1391, 574: 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 594: 1391, 1391, 1391, 1391, 1391, 1391, 602: 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 623: 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 634: 1391, 1391, 1391, 1391, 1391, 1391, 642: 1391, 646: 1391, 1391, 1391, 1391, 672: 1391, 721: 1391}, + {9: 4380, 52: 4379, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 546: 1394, 1394, 1394, 550: 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 563: 1394, 1394, 1394, 568: 1394, 1394, 1394, 1394, 1394, 574: 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 594: 1394, 1394, 1394, 1394, 1394, 1394, 602: 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 623: 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 634: 1394, 1394, 1394, 1394, 1394, 1394, 642: 1394, 646: 1394, 1394, 1394, 1394, 672: 1394, 721: 1394}, // 1465 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4362}, - {52: 4363, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 546: 1388, 1388, 1388, 550: 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 563: 1388, 1388, 1388, 568: 1388, 1388, 1388, 1388, 1388, 574: 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 594: 1388, 1388, 1388, 1388, 1388, 1388, 602: 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 623: 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 634: 1388, 1388, 1388, 1388, 1388, 1388, 641: 1388, 646: 1388, 1388, 1388, 1388, 672: 1388, 718: 1388}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 4365}, - {557: 3838, 3839, 3844, 575: 3840, 620: 4366, 623: 3841, 626: 3842, 3835, 3845, 3834, 3843, 3836, 3837}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4381}, + {52: 4382, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 546: 1392, 1392, 1392, 550: 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 563: 1392, 1392, 1392, 568: 1392, 1392, 1392, 1392, 1392, 574: 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 594: 1392, 1392, 1392, 1392, 1392, 1392, 602: 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 623: 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 634: 1392, 1392, 1392, 1392, 1392, 1392, 642: 1392, 646: 1392, 1392, 1392, 1392, 672: 1392, 721: 1392}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 4384}, + {557: 3857, 3858, 3863, 575: 3859, 620: 4385, 623: 3860, 626: 3861, 3854, 3864, 3853, 3862, 3855, 3856}, // 1470 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4367}, - {52: 4368, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 546: 1391, 1391, 1391, 550: 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 563: 1391, 1391, 1391, 568: 1391, 1391, 1391, 1391, 1391, 574: 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 594: 1391, 1391, 1391, 1391, 1391, 1391, 602: 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 623: 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 1391, 634: 1391, 1391, 1391, 1391, 1391, 1391, 641: 1391, 646: 1391, 1391, 1391, 1391, 672: 1391, 718: 1391}, - {127: 3823, 136: 3831, 143: 3819, 147: 3816, 149: 3818, 3815, 3817, 3821, 3822, 3827, 3826, 3825, 3829, 3830, 3824, 3828, 3820, 608: 3813, 3810, 3812, 3811, 3807, 3809, 3808, 3805, 3806, 3804, 3814, 902: 3803, 916: 4370}, - {576: 4371}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4386}, + {52: 4387, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 546: 1395, 1395, 1395, 550: 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 563: 1395, 1395, 1395, 568: 1395, 1395, 1395, 1395, 1395, 574: 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 594: 1395, 1395, 1395, 1395, 1395, 1395, 602: 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 623: 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 634: 1395, 1395, 1395, 1395, 1395, 1395, 642: 1395, 646: 1395, 1395, 1395, 1395, 672: 1395, 721: 1395}, + {129: 3842, 138: 3850, 145: 3838, 149: 3835, 151: 3837, 3834, 3836, 3840, 3841, 3846, 3845, 3844, 3848, 3849, 3843, 3847, 3839, 608: 3832, 3829, 3831, 3830, 3826, 3828, 3827, 3824, 3825, 3823, 3833, 902: 3822, 916: 4389}, + {576: 4390}, // 1475 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4372}, - {52: 4373, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 546: 1393, 1393, 1393, 550: 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 563: 1393, 1393, 1393, 568: 1393, 1393, 1393, 1393, 1393, 574: 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 594: 1393, 1393, 1393, 1393, 1393, 1393, 602: 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 623: 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 634: 1393, 1393, 1393, 1393, 1393, 1393, 641: 1393, 646: 1393, 1393, 1393, 1393, 672: 1393, 718: 1393}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4375}, - {9: 4376, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4391}, + {52: 4392, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 546: 1397, 1397, 1397, 550: 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 563: 1397, 1397, 1397, 568: 1397, 1397, 1397, 1397, 1397, 574: 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 594: 1397, 1397, 1397, 1397, 1397, 1397, 602: 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 623: 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 634: 1397, 1397, 1397, 1397, 1397, 1397, 642: 1397, 646: 1397, 1397, 1397, 1397, 672: 1397, 721: 1397}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4394}, + {9: 4395, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, // 1480 - {655: 4377}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4378}, - {127: 3823, 136: 3831, 143: 3819, 147: 3816, 149: 3818, 3815, 3817, 3821, 3822, 3827, 3826, 3825, 3829, 3830, 3824, 3828, 3820, 581: 3801, 3799, 3800, 3798, 3796, 608: 3813, 3810, 3812, 3811, 3807, 3809, 3808, 3805, 3806, 3804, 3814, 815: 3797, 3795, 902: 3803, 916: 4379}, - {52: 4380}, - {1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 546: 1394, 1394, 1394, 550: 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 563: 1394, 1394, 1394, 568: 1394, 1394, 1394, 1394, 1394, 574: 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 594: 1394, 1394, 1394, 1394, 1394, 1394, 602: 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 623: 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 634: 1394, 1394, 1394, 1394, 1394, 1394, 641: 1394, 646: 1394, 1394, 1394, 1394, 672: 1394, 718: 1394}, + {655: 4396}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4397}, + {129: 3842, 138: 3850, 145: 3838, 149: 3835, 151: 3837, 3834, 3836, 3840, 3841, 3846, 3845, 3844, 3848, 3849, 3843, 3847, 3839, 581: 3820, 3818, 3819, 3817, 3815, 608: 3832, 3829, 3831, 3830, 3826, 3828, 3827, 3824, 3825, 3823, 3833, 815: 3816, 3814, 902: 3822, 916: 4398}, + {52: 4399}, + {1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 546: 1398, 1398, 1398, 550: 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 563: 1398, 1398, 1398, 568: 1398, 1398, 1398, 1398, 1398, 574: 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 594: 1398, 1398, 1398, 1398, 1398, 1398, 602: 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 623: 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 634: 1398, 1398, 1398, 1398, 1398, 1398, 642: 1398, 646: 1398, 1398, 1398, 1398, 672: 1398, 721: 1398}, // 1485 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4382}, - {9: 4383, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 4385, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4384}, - {52: 4389, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 1446, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4386}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4401}, + {9: 4402, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 4404, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4403}, + {52: 4408, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 1450, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4405}, // 1490 - {127: 3823, 136: 3831, 143: 3819, 147: 3816, 149: 3818, 3815, 3817, 3821, 3822, 3827, 3826, 3825, 3829, 3830, 3824, 3828, 3820, 581: 3801, 3799, 3800, 3798, 3796, 608: 3813, 3810, 3812, 3811, 3807, 3809, 3808, 3805, 3806, 3804, 3814, 815: 3797, 3795, 902: 3803, 916: 4387}, - {52: 4388, 557: 3832}, - {1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 546: 1395, 1395, 1395, 550: 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 563: 1395, 1395, 1395, 568: 1395, 1395, 1395, 1395, 1395, 574: 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 594: 1395, 1395, 1395, 1395, 1395, 1395, 602: 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 623: 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1395, 634: 1395, 1395, 1395, 1395, 1395, 1395, 641: 1395, 646: 1395, 1395, 1395, 1395, 672: 1395, 718: 1395}, - {1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 546: 1396, 1396, 1396, 550: 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 563: 1396, 1396, 1396, 568: 1396, 1396, 1396, 1396, 1396, 574: 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 594: 1396, 1396, 1396, 1396, 1396, 1396, 602: 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 623: 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 634: 1396, 1396, 1396, 1396, 1396, 1396, 641: 1396, 646: 1396, 1396, 1396, 1396, 672: 1396, 718: 1396}, - {52: 2216, 573: 4392, 1196: 4391, 4393}, + {129: 3842, 138: 3850, 145: 3838, 149: 3835, 151: 3837, 3834, 3836, 3840, 3841, 3846, 3845, 3844, 3848, 3849, 3843, 3847, 3839, 581: 3820, 3818, 3819, 3817, 3815, 608: 3832, 3829, 3831, 3830, 3826, 3828, 3827, 3824, 3825, 3823, 3833, 815: 3816, 3814, 902: 3822, 916: 4406}, + {52: 4407, 557: 3851}, + {1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 546: 1399, 1399, 1399, 550: 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 563: 1399, 1399, 1399, 568: 1399, 1399, 1399, 1399, 1399, 574: 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 594: 1399, 1399, 1399, 1399, 1399, 1399, 602: 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 623: 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 634: 1399, 1399, 1399, 1399, 1399, 1399, 642: 1399, 646: 1399, 1399, 1399, 1399, 672: 1399, 721: 1399}, + {1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 546: 1400, 1400, 1400, 550: 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 563: 1400, 1400, 1400, 568: 1400, 1400, 1400, 1400, 1400, 574: 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 594: 1400, 1400, 1400, 1400, 1400, 1400, 602: 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 623: 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 634: 1400, 1400, 1400, 1400, 1400, 1400, 642: 1400, 646: 1400, 1400, 1400, 1400, 672: 1400, 721: 1400}, + {52: 2222, 573: 4411, 1198: 4410, 4412}, // 1495 - {52: 2215}, - {52: 2214}, - {52: 4394}, - {1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 546: 1397, 1397, 1397, 550: 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 563: 1397, 1397, 1397, 568: 1397, 1397, 1397, 1397, 1397, 574: 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 594: 1397, 1397, 1397, 1397, 1397, 1397, 602: 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 623: 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 634: 1397, 1397, 1397, 1397, 1397, 1397, 641: 1397, 646: 1397, 1397, 1397, 1397, 672: 1397, 718: 1397}, - {52: 2216, 573: 4392, 1196: 4391, 4396}, + {52: 2221}, + {52: 2220}, + {52: 4413}, + {1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 546: 1401, 1401, 1401, 550: 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 563: 1401, 1401, 1401, 568: 1401, 1401, 1401, 1401, 1401, 574: 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 594: 1401, 1401, 1401, 1401, 1401, 1401, 602: 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 623: 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 634: 1401, 1401, 1401, 1401, 1401, 1401, 642: 1401, 646: 1401, 1401, 1401, 1401, 672: 1401, 721: 1401}, + {52: 2222, 573: 4411, 1198: 4410, 4415}, // 1500 - {52: 4397}, - {1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 546: 1398, 1398, 1398, 550: 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 563: 1398, 1398, 1398, 568: 1398, 1398, 1398, 1398, 1398, 574: 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 594: 1398, 1398, 1398, 1398, 1398, 1398, 602: 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 623: 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 634: 1398, 1398, 1398, 1398, 1398, 1398, 641: 1398, 646: 1398, 1398, 1398, 1398, 672: 1398, 718: 1398}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 4399}, - {9: 4400, 557: 3838, 3839, 3844, 575: 3840, 623: 3841, 626: 3842, 3835, 3845, 3834, 3843, 3836, 3837}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 4401}, + {52: 4416}, + {1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 546: 1402, 1402, 1402, 550: 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 563: 1402, 1402, 1402, 568: 1402, 1402, 1402, 1402, 1402, 574: 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 594: 1402, 1402, 1402, 1402, 1402, 1402, 602: 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 623: 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 634: 1402, 1402, 1402, 1402, 1402, 1402, 642: 1402, 646: 1402, 1402, 1402, 1402, 672: 1402, 721: 1402}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 4418}, + {9: 4419, 557: 3857, 3858, 3863, 575: 3859, 623: 3860, 626: 3861, 3854, 3864, 3853, 3862, 3855, 3856}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 4420}, // 1505 - {52: 4402, 557: 3838, 3839, 3844, 575: 3840, 623: 3841, 626: 3842, 3835, 3845, 3834, 3843, 3836, 3837}, - {1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 546: 1400, 1400, 1400, 550: 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 563: 1400, 1400, 1400, 568: 1400, 1400, 1400, 1400, 1400, 574: 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 594: 1400, 1400, 1400, 1400, 1400, 1400, 602: 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 623: 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 634: 1400, 1400, 1400, 1400, 1400, 1400, 641: 1400, 646: 1400, 1400, 1400, 1400, 672: 1400, 718: 1400}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 2218, 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3898, 874: 4404, 938: 4405}, - {9: 4049, 52: 2217}, - {52: 4406}, + {52: 4421, 557: 3857, 3858, 3863, 575: 3859, 623: 3860, 626: 3861, 3854, 3864, 3853, 3862, 3855, 3856}, + {1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 546: 1404, 1404, 1404, 550: 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 563: 1404, 1404, 1404, 568: 1404, 1404, 1404, 1404, 1404, 574: 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 594: 1404, 1404, 1404, 1404, 1404, 1404, 602: 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 623: 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 634: 1404, 1404, 1404, 1404, 1404, 1404, 642: 1404, 646: 1404, 1404, 1404, 1404, 672: 1404, 721: 1404}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 2224, 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3917, 874: 4423, 938: 4424}, + {9: 4068, 52: 2223}, + {52: 4425}, // 1510 - {1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 546: 1401, 1401, 1401, 550: 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 563: 1401, 1401, 1401, 568: 1401, 1401, 1401, 1401, 1401, 574: 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 594: 1401, 1401, 1401, 1401, 1401, 1401, 602: 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 623: 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 634: 1401, 1401, 1401, 1401, 1401, 1401, 641: 1401, 646: 1401, 1401, 1401, 1401, 672: 1401, 718: 1401}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3898, 874: 4408}, - {9: 4049, 52: 4409, 556: 4410}, - {1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 546: 1406, 1406, 1406, 550: 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 563: 1406, 1406, 1406, 568: 1406, 1406, 1406, 1406, 1406, 574: 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 594: 1406, 1406, 1406, 1406, 1406, 1406, 602: 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 623: 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 634: 1406, 1406, 1406, 1406, 1406, 1406, 641: 1406, 646: 1406, 1406, 1406, 1406, 672: 1406, 718: 1406}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 600: 4413, 786: 3793, 3092, 3093, 3091, 820: 4412, 921: 4411}, + {1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 546: 1405, 1405, 1405, 550: 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 563: 1405, 1405, 1405, 568: 1405, 1405, 1405, 1405, 1405, 574: 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 594: 1405, 1405, 1405, 1405, 1405, 1405, 602: 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 623: 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 634: 1405, 1405, 1405, 1405, 1405, 1405, 642: 1405, 646: 1405, 1405, 1405, 1405, 672: 1405, 721: 1405}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3917, 874: 4427}, + {9: 4068, 52: 4428, 556: 4429}, + {1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 546: 1410, 1410, 1410, 550: 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 563: 1410, 1410, 1410, 568: 1410, 1410, 1410, 1410, 1410, 574: 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 594: 1410, 1410, 1410, 1410, 1410, 1410, 602: 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 623: 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 634: 1410, 1410, 1410, 1410, 1410, 1410, 642: 1410, 646: 1410, 1410, 1410, 1410, 672: 1410, 721: 1410}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 600: 4432, 786: 3812, 3111, 3112, 3110, 820: 4431, 921: 4430}, // 1515 - {52: 4414}, - {971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 971, 52: 971, 140: 971, 166: 971, 544: 971, 971, 971, 548: 971, 971, 971, 971, 971, 971, 560: 971, 971, 971, 971, 566: 971, 971, 571: 971, 580: 971, 600: 971, 622: 971, 669: 971, 971, 716: 971, 971, 719: 971, 971, 971, 971, 971, 971, 731: 971, 736: 971}, - {970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 970, 52: 970, 140: 970, 166: 970, 544: 970, 970, 970, 548: 970, 970, 970, 970, 970, 970, 560: 970, 970, 970, 970, 566: 970, 970, 571: 970, 580: 970, 600: 970, 622: 970, 669: 970, 970, 716: 970, 970, 719: 970, 970, 970, 970, 970, 970, 731: 970, 736: 970}, - {1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 546: 1405, 1405, 1405, 550: 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 563: 1405, 1405, 1405, 568: 1405, 1405, 1405, 1405, 1405, 574: 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 594: 1405, 1405, 1405, 1405, 1405, 1405, 602: 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 623: 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 634: 1405, 1405, 1405, 1405, 1405, 1405, 641: 1405, 646: 1405, 1405, 1405, 1405, 672: 1405, 718: 1405}, - {1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 546: 1407, 1407, 1407, 550: 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 563: 1407, 1407, 1407, 568: 1407, 1407, 1407, 1407, 1407, 574: 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 594: 1407, 1407, 1407, 1407, 1407, 1407, 602: 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 623: 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 634: 1407, 1407, 1407, 1407, 1407, 1407, 641: 1407, 646: 1407, 1407, 1407, 1407, 672: 1407, 718: 1407}, + {52: 4433}, + {975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, 52: 975, 142: 975, 168: 975, 544: 975, 975, 975, 548: 975, 975, 975, 975, 975, 975, 560: 975, 975, 975, 975, 566: 975, 975, 571: 975, 580: 975, 600: 975, 622: 975, 658: 975, 662: 975, 710: 975, 717: 975, 975, 975, 975, 722: 975, 975, 975, 731: 975, 736: 975}, + {974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, 52: 974, 142: 974, 168: 974, 544: 974, 974, 974, 548: 974, 974, 974, 974, 974, 974, 560: 974, 974, 974, 974, 566: 974, 974, 571: 974, 580: 974, 600: 974, 622: 974, 658: 974, 662: 974, 710: 974, 717: 974, 974, 974, 974, 722: 974, 974, 974, 731: 974, 736: 974}, + {1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 546: 1409, 1409, 1409, 550: 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 563: 1409, 1409, 1409, 568: 1409, 1409, 1409, 1409, 1409, 574: 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 594: 1409, 1409, 1409, 1409, 1409, 1409, 602: 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 623: 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 634: 1409, 1409, 1409, 1409, 1409, 1409, 642: 1409, 646: 1409, 1409, 1409, 1409, 672: 1409, 721: 1409}, + {1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 546: 1411, 1411, 1411, 550: 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 563: 1411, 1411, 1411, 568: 1411, 1411, 1411, 1411, 1411, 574: 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 594: 1411, 1411, 1411, 1411, 1411, 1411, 602: 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 623: 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 634: 1411, 1411, 1411, 1411, 1411, 1411, 642: 1411, 646: 1411, 1411, 1411, 1411, 672: 1411, 721: 1411}, // 1520 - {52: 4417, 573: 4418}, - {1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 546: 1329, 1329, 1329, 550: 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 563: 1329, 1329, 1329, 568: 1329, 1329, 1329, 1329, 1329, 574: 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 594: 1329, 1329, 1329, 1329, 1329, 1329, 602: 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 623: 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 1329, 634: 1329, 1329, 1329, 1329, 1329, 1329, 641: 1329, 646: 1329, 1329, 1329, 1329, 672: 1329, 718: 1329}, - {52: 4419}, - {1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 546: 1328, 1328, 1328, 550: 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 563: 1328, 1328, 1328, 568: 1328, 1328, 1328, 1328, 1328, 574: 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 594: 1328, 1328, 1328, 1328, 1328, 1328, 602: 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 623: 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 634: 1328, 1328, 1328, 1328, 1328, 1328, 641: 1328, 646: 1328, 1328, 1328, 1328, 672: 1328, 718: 1328}, - {52: 4421}, + {52: 4436, 573: 4437}, + {1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 546: 1333, 1333, 1333, 550: 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 563: 1333, 1333, 1333, 568: 1333, 1333, 1333, 1333, 1333, 574: 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 594: 1333, 1333, 1333, 1333, 1333, 1333, 602: 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 623: 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 634: 1333, 1333, 1333, 1333, 1333, 1333, 642: 1333, 646: 1333, 1333, 1333, 1333, 672: 1333, 721: 1333}, + {52: 4438}, + {1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 546: 1332, 1332, 1332, 550: 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 563: 1332, 1332, 1332, 568: 1332, 1332, 1332, 1332, 1332, 574: 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 594: 1332, 1332, 1332, 1332, 1332, 1332, 602: 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 623: 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 634: 1332, 1332, 1332, 1332, 1332, 1332, 642: 1332, 646: 1332, 1332, 1332, 1332, 672: 1332, 721: 1332}, + {52: 4440}, // 1525 - {1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 546: 1408, 1408, 1408, 550: 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 563: 1408, 1408, 1408, 568: 1408, 1408, 1408, 1408, 1408, 574: 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 594: 1408, 1408, 1408, 1408, 1408, 1408, 602: 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 623: 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 634: 1408, 1408, 1408, 1408, 1408, 1408, 641: 1408, 646: 1408, 1408, 1408, 1408, 672: 1408, 718: 1408}, - {52: 4424}, - {1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 546: 1409, 1409, 1409, 550: 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 563: 1409, 1409, 1409, 568: 1409, 1409, 1409, 1409, 1409, 574: 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 594: 1409, 1409, 1409, 1409, 1409, 1409, 602: 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 623: 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 634: 1409, 1409, 1409, 1409, 1409, 1409, 641: 1409, 646: 1409, 1409, 1409, 1409, 672: 1409, 718: 1409}, - {1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 546: 1423, 1423, 1423, 550: 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 563: 1423, 1423, 1423, 568: 1423, 1423, 1423, 1423, 1423, 574: 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 594: 1423, 1423, 1423, 1423, 1423, 1423, 602: 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 623: 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 634: 1423, 1423, 1423, 1423, 1423, 1423, 641: 1423, 646: 1423, 1423, 1423, 1423, 672: 1423, 718: 1423, 726: 1423, 732: 1423, 739: 1423}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 2218, 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3898, 874: 4404, 938: 4426}, + {1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 546: 1412, 1412, 1412, 550: 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 563: 1412, 1412, 1412, 568: 1412, 1412, 1412, 1412, 1412, 574: 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 594: 1412, 1412, 1412, 1412, 1412, 1412, 602: 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 623: 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 634: 1412, 1412, 1412, 1412, 1412, 1412, 642: 1412, 646: 1412, 1412, 1412, 1412, 672: 1412, 721: 1412}, + {52: 4443}, + {1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 546: 1413, 1413, 1413, 550: 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 563: 1413, 1413, 1413, 568: 1413, 1413, 1413, 1413, 1413, 574: 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 594: 1413, 1413, 1413, 1413, 1413, 1413, 602: 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 623: 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 634: 1413, 1413, 1413, 1413, 1413, 1413, 642: 1413, 646: 1413, 1413, 1413, 1413, 672: 1413, 721: 1413}, + {1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 546: 1427, 1427, 1427, 550: 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 563: 1427, 1427, 1427, 568: 1427, 1427, 1427, 1427, 1427, 574: 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 594: 1427, 1427, 1427, 1427, 1427, 1427, 602: 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 623: 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 634: 1427, 1427, 1427, 1427, 1427, 1427, 642: 1427, 646: 1427, 1427, 1427, 1427, 672: 1427, 721: 1427, 727: 1427, 732: 1427, 739: 1427}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 2224, 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3917, 874: 4423, 938: 4445}, // 1530 - {52: 4427}, - {1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 546: 1410, 1410, 1410, 550: 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 563: 1410, 1410, 1410, 568: 1410, 1410, 1410, 1410, 1410, 574: 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 594: 1410, 1410, 1410, 1410, 1410, 1410, 602: 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 623: 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 634: 1410, 1410, 1410, 1410, 1410, 1410, 641: 1410, 646: 1410, 1410, 1410, 1410, 672: 1410, 718: 1410}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 2218, 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3898, 874: 4404, 938: 4429}, - {52: 4430}, - {1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 546: 1411, 1411, 1411, 550: 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 563: 1411, 1411, 1411, 568: 1411, 1411, 1411, 1411, 1411, 574: 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 594: 1411, 1411, 1411, 1411, 1411, 1411, 602: 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 623: 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 634: 1411, 1411, 1411, 1411, 1411, 1411, 641: 1411, 646: 1411, 1411, 1411, 1411, 672: 1411, 718: 1411}, + {52: 4446}, + {1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 546: 1414, 1414, 1414, 550: 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 563: 1414, 1414, 1414, 568: 1414, 1414, 1414, 1414, 1414, 574: 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 594: 1414, 1414, 1414, 1414, 1414, 1414, 602: 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 623: 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 634: 1414, 1414, 1414, 1414, 1414, 1414, 642: 1414, 646: 1414, 1414, 1414, 1414, 672: 1414, 721: 1414}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 2224, 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3917, 874: 4423, 938: 4448}, + {52: 4449}, + {1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 546: 1415, 1415, 1415, 550: 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 563: 1415, 1415, 1415, 568: 1415, 1415, 1415, 1415, 1415, 574: 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 594: 1415, 1415, 1415, 1415, 1415, 1415, 602: 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 623: 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 634: 1415, 1415, 1415, 1415, 1415, 1415, 642: 1415, 646: 1415, 1415, 1415, 1415, 672: 1415, 721: 1415}, // 1535 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4432}, - {9: 4433, 556: 4434, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {59: 4445, 127: 4441, 183: 4447, 185: 4442, 4440, 188: 4444, 198: 4451, 567: 4453, 600: 4438, 723: 4452, 746: 4448, 4449, 750: 4443, 753: 4450, 833: 4446, 969: 4439, 1137: 4437}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 600: 4413, 786: 3793, 3092, 3093, 3091, 820: 4412, 921: 4435}, - {52: 4436}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4451}, + {9: 4452, 556: 4453, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {60: 4464, 129: 4460, 184: 4466, 186: 4461, 4459, 189: 4463, 199: 4470, 567: 4472, 600: 4457, 723: 4471, 746: 4467, 4468, 750: 4462, 753: 4469, 833: 4465, 969: 4458, 1139: 4456}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 600: 4432, 786: 3812, 3111, 3112, 3110, 820: 4431, 921: 4454}, + {52: 4455}, // 1540 - {1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 546: 1472, 1472, 1472, 550: 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 563: 1472, 1472, 1472, 568: 1472, 1472, 1472, 1472, 1472, 574: 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 594: 1472, 1472, 1472, 1472, 1472, 1472, 602: 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 623: 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 634: 1472, 1472, 1472, 1472, 1472, 1472, 641: 1472, 646: 1472, 1472, 1472, 1472, 672: 1472, 718: 1472}, - {52: 4496}, - {52: 476, 545: 4461, 731: 476, 856: 4462, 900: 4495}, - {16: 476, 52: 476, 545: 4461, 567: 476, 600: 476, 723: 476, 731: 476, 856: 4462, 900: 4480}, - {52: 1289, 731: 1289}, + {1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 546: 1476, 1476, 1476, 550: 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 563: 1476, 1476, 1476, 568: 1476, 1476, 1476, 1476, 1476, 574: 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 594: 1476, 1476, 1476, 1476, 1476, 1476, 602: 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 623: 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 634: 1476, 1476, 1476, 1476, 1476, 1476, 642: 1476, 646: 1476, 1476, 1476, 1476, 672: 1476, 721: 1476}, + {52: 4515}, + {52: 480, 545: 4480, 731: 480, 856: 4481, 900: 4514}, + {16: 480, 52: 480, 545: 4480, 567: 480, 600: 480, 723: 480, 731: 480, 856: 4481, 900: 4499}, + {52: 1293, 731: 1293}, // 1545 - {52: 1288, 731: 1288}, - {52: 476, 545: 4461, 731: 476, 856: 4462, 900: 4479}, - {52: 469, 545: 4466, 731: 469, 856: 4467, 1020: 4478, 1027: 4468}, - {52: 476, 545: 4461, 731: 476, 856: 4462, 900: 4477}, - {52: 543, 731: 543, 751: 4474, 4475, 1239: 4476}, + {52: 1292, 731: 1292}, + {52: 480, 545: 4480, 731: 480, 856: 4481, 900: 4498}, + {52: 473, 545: 4485, 731: 473, 856: 4486, 1020: 4497, 1027: 4487}, + {52: 480, 545: 4480, 731: 480, 856: 4481, 900: 4496}, + {52: 547, 731: 547, 751: 4493, 4494, 1241: 4495}, // 1550 - {52: 543, 731: 543, 751: 4474, 4475, 1239: 4473}, - {52: 1282, 731: 1282}, - {52: 1281, 731: 1281}, - {52: 469, 545: 4466, 731: 469, 856: 4467, 1020: 4465, 1027: 4468}, - {52: 1279, 731: 1279}, + {52: 547, 731: 547, 751: 4493, 4494, 1241: 4492}, + {52: 1286, 731: 1286}, + {52: 1285, 731: 1285}, + {52: 473, 545: 4485, 731: 473, 856: 4486, 1020: 4484, 1027: 4487}, + {52: 1283, 731: 1283}, // 1555 - {52: 463, 545: 463, 624: 4455, 731: 463, 1244: 4454}, - {16: 514, 52: 514, 545: 514, 567: 514, 600: 514, 723: 514, 731: 514}, - {16: 513, 52: 513, 545: 513, 567: 513, 600: 513, 723: 513, 731: 513}, - {52: 476, 545: 4461, 731: 476, 856: 4462, 900: 4460}, - {746: 4457, 4456}, + {52: 467, 545: 467, 624: 4474, 731: 467, 1246: 4473}, + {16: 518, 52: 518, 545: 518, 567: 518, 600: 518, 723: 518, 731: 518}, + {16: 517, 52: 517, 545: 517, 567: 517, 600: 517, 723: 517, 731: 517}, + {52: 480, 545: 4480, 731: 480, 856: 4481, 900: 4479}, + {746: 4476, 4475}, // 1560 - {625: 4459}, - {625: 4458}, - {461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 52: 461, 544: 461, 461, 548: 461, 461, 461, 461, 461, 560: 461, 461, 669: 461, 716: 461, 461, 719: 461, 461, 461, 461, 731: 461}, - {462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 52: 462, 544: 462, 462, 548: 462, 462, 462, 462, 462, 560: 462, 462, 669: 462, 716: 462, 462, 719: 462, 462, 462, 462, 731: 462}, - {52: 1278, 731: 1278}, + {625: 4478}, + {625: 4477}, + {465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 52: 465, 544: 465, 465, 548: 465, 465, 465, 465, 465, 560: 465, 465, 658: 465, 710: 465, 717: 465, 465, 465, 465, 722: 465, 731: 465}, + {466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 52: 466, 544: 466, 466, 548: 466, 466, 466, 466, 466, 560: 466, 466, 658: 466, 710: 466, 717: 466, 466, 466, 466, 722: 466, 731: 466}, + {52: 1282, 731: 1282}, // 1565 - {573: 3078, 814: 3922, 829: 4463}, - {475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 16: 475, 52: 475, 59: 475, 162: 475, 475, 165: 475, 544: 475, 548: 475, 475, 475, 475, 475, 560: 475, 475, 567: 475, 592: 475, 600: 475, 619: 475, 669: 475, 716: 475, 475, 719: 475, 475, 475, 475, 475, 731: 475, 833: 475, 475}, - {52: 4464}, - {477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 16: 477, 52: 477, 59: 477, 162: 477, 477, 165: 477, 544: 477, 548: 477, 477, 477, 477, 477, 560: 477, 477, 567: 477, 592: 477, 600: 477, 619: 477, 669: 477, 716: 477, 477, 719: 477, 477, 477, 477, 477, 731: 477, 833: 477, 477}, - {52: 1280, 731: 1280}, + {573: 3097, 814: 3941, 829: 4482}, + {479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 16: 479, 52: 479, 60: 479, 164: 479, 479, 167: 479, 544: 479, 548: 479, 479, 479, 479, 479, 560: 479, 479, 567: 479, 592: 479, 600: 479, 619: 479, 658: 479, 710: 479, 717: 479, 479, 479, 479, 722: 479, 479, 731: 479, 833: 479, 479}, + {52: 4483}, + {481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 16: 481, 52: 481, 60: 481, 164: 481, 481, 167: 481, 544: 481, 548: 481, 481, 481, 481, 481, 560: 481, 481, 567: 481, 592: 481, 600: 481, 619: 481, 658: 481, 710: 481, 717: 481, 481, 481, 481, 722: 481, 481, 731: 481, 833: 481, 481}, + {52: 1284, 731: 1284}, // 1570 - {573: 3078, 814: 3922, 829: 4469}, - {468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 52: 468, 59: 468, 544: 468, 548: 468, 468, 468, 468, 468, 560: 468, 468, 669: 468, 716: 468, 468, 719: 468, 468, 468, 468, 731: 468, 833: 468, 468}, - {467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 52: 467, 59: 467, 544: 467, 548: 467, 467, 467, 467, 467, 560: 467, 467, 669: 467, 716: 467, 467, 719: 467, 467, 467, 467, 731: 467, 833: 467, 467}, - {9: 4470, 52: 4464}, - {573: 3078, 814: 3922, 829: 4471}, + {573: 3097, 814: 3941, 829: 4488}, + {472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 52: 472, 60: 472, 544: 472, 548: 472, 472, 472, 472, 472, 560: 472, 472, 658: 472, 710: 472, 717: 472, 472, 472, 472, 722: 472, 731: 472, 833: 472, 472}, + {471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 52: 471, 60: 471, 544: 471, 548: 471, 471, 471, 471, 471, 560: 471, 471, 658: 471, 710: 471, 717: 471, 471, 471, 471, 722: 471, 731: 471, 833: 471, 471}, + {9: 4489, 52: 4483}, + {573: 3097, 814: 3941, 829: 4490}, // 1575 - {52: 4472}, - {466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, 52: 466, 59: 466, 544: 466, 548: 466, 466, 466, 466, 466, 560: 466, 466, 669: 466, 716: 466, 466, 719: 466, 466, 466, 466, 731: 466, 833: 466, 466}, - {52: 1283, 731: 1283}, - {52: 542, 731: 542}, - {52: 541, 731: 541}, - // 1580 - {52: 1284, 731: 1284}, - {52: 1285, 731: 1285}, - {52: 1286, 731: 1286}, + {52: 4491}, + {470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 52: 470, 60: 470, 544: 470, 548: 470, 470, 470, 470, 470, 560: 470, 470, 658: 470, 710: 470, 717: 470, 470, 470, 470, 722: 470, 731: 470, 833: 470, 470}, {52: 1287, 731: 1287}, - {16: 4485, 52: 460, 567: 4486, 600: 4482, 723: 4484, 731: 460, 868: 4483, 911: 4481}, - // 1585 + {52: 546, 731: 546}, + {52: 545, 731: 545}, + // 1580 + {52: 1288, 731: 1288}, + {52: 1289, 731: 1289}, {52: 1290, 731: 1290}, - {457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 16: 4485, 52: 457, 544: 457, 548: 457, 457, 457, 457, 457, 560: 457, 457, 567: 4486, 669: 457, 716: 457, 457, 719: 457, 457, 457, 457, 4484, 731: 457, 868: 4493, 1417: 4492}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 600: 4413, 786: 3793, 3092, 3093, 3091, 820: 4412, 921: 4489}, - {571: 4488}, - {454, 454, 454, 454, 454, 454, 454, 454, 454, 10: 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 53: 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 547: 454, 549: 454, 569: 454, 578: 454, 597: 454, 600: 454}, + {52: 1291, 731: 1291}, + {16: 4504, 52: 464, 567: 4505, 600: 4501, 723: 4503, 731: 464, 868: 4502, 911: 4500}, + // 1585 + {52: 1294, 731: 1294}, + {461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, 16: 4504, 52: 461, 544: 461, 548: 461, 461, 461, 461, 461, 560: 461, 461, 567: 4505, 658: 461, 710: 461, 717: 461, 461, 461, 461, 722: 461, 4503, 731: 461, 868: 4512, 1422: 4511}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 600: 4432, 786: 3812, 3111, 3112, 3110, 820: 4431, 921: 4508}, + {571: 4507}, + {458, 458, 458, 458, 458, 458, 458, 458, 458, 10: 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, 458, 458, 458, 458, 53: 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 547: 458, 549: 458, 569: 458, 578: 458, 597: 458, 600: 458}, // 1590 - {571: 4487}, - {453, 453, 453, 453, 453, 453, 453, 453, 453, 10: 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 53: 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, 547: 453, 549: 453, 569: 453, 578: 453, 597: 453, 600: 453}, - {455, 455, 455, 455, 455, 455, 455, 455, 455, 10: 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 53: 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, 547: 455, 549: 455, 569: 455, 578: 455, 597: 455, 600: 455}, - {465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, 52: 465, 544: 465, 548: 465, 465, 465, 465, 465, 560: 465, 465, 600: 4490, 669: 465, 716: 465, 465, 719: 465, 465, 465, 465, 731: 465, 1416: 4491}, - {464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 52: 464, 544: 464, 548: 464, 464, 464, 464, 464, 560: 464, 464, 669: 464, 716: 464, 464, 719: 464, 464, 464, 464, 731: 464}, + {571: 4506}, + {457, 457, 457, 457, 457, 457, 457, 457, 457, 10: 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 53: 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, 547: 457, 549: 457, 569: 457, 578: 457, 597: 457, 600: 457}, + {459, 459, 459, 459, 459, 459, 459, 459, 459, 10: 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, 53: 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, 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, 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, 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, 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, 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, 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, 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, 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, 547: 459, 549: 459, 569: 459, 578: 459, 597: 459, 600: 459}, + {469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 52: 469, 544: 469, 548: 469, 469, 469, 469, 469, 560: 469, 469, 600: 4509, 658: 469, 710: 469, 717: 469, 469, 469, 469, 722: 469, 731: 469, 1421: 4510}, + {468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, 52: 468, 544: 468, 548: 468, 468, 468, 468, 468, 560: 468, 468, 658: 468, 710: 468, 717: 468, 468, 468, 468, 722: 468, 731: 468}, // 1595 - {458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 52: 458, 544: 458, 548: 458, 458, 458, 458, 458, 560: 458, 458, 669: 458, 716: 458, 458, 719: 458, 458, 458, 458, 731: 458}, - {459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 459, 52: 459, 544: 459, 548: 459, 459, 459, 459, 459, 560: 459, 459, 669: 459, 716: 459, 459, 719: 459, 459, 459, 459, 731: 459}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 600: 4413, 786: 3793, 3092, 3093, 3091, 820: 4412, 921: 4494}, - {456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 52: 456, 544: 456, 548: 456, 456, 456, 456, 456, 560: 456, 456, 669: 456, 716: 456, 456, 719: 456, 456, 456, 456, 731: 456}, - {52: 1291, 731: 1291}, + {462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, 52: 462, 544: 462, 548: 462, 462, 462, 462, 462, 560: 462, 462, 658: 462, 710: 462, 717: 462, 462, 462, 462, 722: 462, 731: 462}, + {463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 52: 463, 544: 463, 548: 463, 463, 463, 463, 463, 560: 463, 463, 658: 463, 710: 463, 717: 463, 463, 463, 463, 722: 463, 731: 463}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 600: 4432, 786: 3812, 3111, 3112, 3110, 820: 4431, 921: 4513}, + {460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 52: 460, 544: 460, 548: 460, 460, 460, 460, 460, 560: 460, 460, 658: 460, 710: 460, 717: 460, 460, 460, 460, 722: 460, 731: 460}, + {52: 1295, 731: 1295}, // 1600 - {1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 546: 1473, 1473, 1473, 550: 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 563: 1473, 1473, 1473, 568: 1473, 1473, 1473, 1473, 1473, 574: 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 594: 1473, 1473, 1473, 1473, 1473, 1473, 602: 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 623: 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 634: 1473, 1473, 1473, 1473, 1473, 1473, 641: 1473, 646: 1473, 1473, 1473, 1473, 672: 1473, 718: 1473}, - {581: 3801, 3799, 3800, 3798, 3796, 603: 1297, 815: 3797, 3795}, - {603: 4501, 1317: 4500, 1519: 4499}, - {106: 1293, 603: 4501, 4507, 1317: 4506, 1368: 4505}, - {106: 1296, 603: 1296, 1296}, + {1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 546: 1477, 1477, 1477, 550: 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 563: 1477, 1477, 1477, 568: 1477, 1477, 1477, 1477, 1477, 574: 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 594: 1477, 1477, 1477, 1477, 1477, 1477, 602: 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 623: 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 634: 1477, 1477, 1477, 1477, 1477, 1477, 642: 1477, 646: 1477, 1477, 1477, 1477, 672: 1477, 721: 1477}, + {581: 3820, 3818, 3819, 3817, 3815, 603: 1301, 815: 3816, 3814}, + {603: 4520, 1321: 4519, 1526: 4518}, + {109: 1297, 603: 4520, 4526, 1321: 4525, 1372: 4524}, + {109: 1300, 603: 1300, 1300}, // 1605 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4502}, - {581: 3801, 3799, 3800, 3798, 3796, 621: 4503, 815: 3797, 3795}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4504}, - {106: 1294, 581: 3801, 3799, 3800, 3798, 3796, 603: 1294, 1294, 815: 3797, 3795}, - {106: 4509}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4521}, + {581: 3820, 3818, 3819, 3817, 3815, 621: 4522, 815: 3816, 3814}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4523}, + {109: 1298, 581: 3820, 3818, 3819, 3817, 3815, 603: 1298, 1298, 815: 3816, 3814}, + {109: 4528}, // 1610 - {106: 1295, 603: 1295, 1295}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4508}, - {106: 1292, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 546: 1474, 1474, 1474, 550: 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 563: 1474, 1474, 1474, 568: 1474, 1474, 1474, 1474, 1474, 574: 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 594: 1474, 1474, 1474, 1474, 1474, 1474, 602: 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 623: 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 1474, 634: 1474, 1474, 1474, 1474, 1474, 1474, 641: 1474, 646: 1474, 1474, 1474, 1474, 672: 1474, 718: 1474}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4511}, + {109: 1299, 603: 1299, 1299}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4527}, + {109: 1296, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 546: 1478, 1478, 1478, 550: 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 563: 1478, 1478, 1478, 568: 1478, 1478, 1478, 1478, 1478, 574: 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 594: 1478, 1478, 1478, 1478, 1478, 1478, 602: 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 623: 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 634: 1478, 1478, 1478, 1478, 1478, 1478, 642: 1478, 646: 1478, 1478, 1478, 1478, 672: 1478, 721: 1478}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4530}, // 1615 - {551: 4512, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {59: 4445, 127: 4441, 183: 4447, 185: 4442, 4440, 188: 4444, 198: 4451, 567: 4453, 600: 4438, 723: 4452, 746: 4448, 4449, 750: 4443, 753: 4450, 833: 4446, 969: 4439, 1137: 4513}, - {52: 1467, 731: 4515, 1334: 4514}, - {52: 4516}, - {52: 1466}, + {551: 4531, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {60: 4464, 129: 4460, 184: 4466, 186: 4461, 4459, 189: 4463, 199: 4470, 567: 4472, 600: 4457, 723: 4471, 746: 4467, 4468, 750: 4462, 753: 4469, 833: 4465, 969: 4458, 1139: 4532}, + {52: 1471, 731: 4534, 1338: 4533}, + {52: 4535}, + {52: 1470}, // 1620 - {1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 546: 1475, 1475, 1475, 550: 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 563: 1475, 1475, 1475, 568: 1475, 1475, 1475, 1475, 1475, 574: 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 594: 1475, 1475, 1475, 1475, 1475, 1475, 602: 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 623: 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 1475, 634: 1475, 1475, 1475, 1475, 1475, 1475, 641: 1475, 646: 1475, 1475, 1475, 1475, 672: 1475, 718: 1475}, - {1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 546: 1476, 1476, 1476, 550: 1476, 1476, 3748, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 563: 1476, 1476, 1476, 568: 1476, 1476, 1476, 1476, 1476, 574: 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 594: 1476, 1476, 1476, 1476, 1476, 1476, 602: 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 623: 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 1476, 634: 1476, 1476, 1476, 1476, 1476, 1476, 641: 1476, 646: 1476, 1476, 1476, 1476, 672: 1476, 718: 1476}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4519}, - {581: 3801, 3799, 3800, 3798, 3796, 599: 4520, 815: 3797, 3795}, - {1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 546: 1477, 1477, 1477, 550: 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 563: 1477, 1477, 1477, 568: 1477, 1477, 1477, 1477, 1477, 574: 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 594: 1477, 1477, 1477, 1477, 1477, 1477, 602: 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 623: 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 634: 1477, 1477, 1477, 1477, 1477, 1477, 641: 1477, 646: 1477, 1477, 1477, 1477, 672: 1477, 718: 1477}, + {1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 546: 1479, 1479, 1479, 550: 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 563: 1479, 1479, 1479, 568: 1479, 1479, 1479, 1479, 1479, 574: 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 594: 1479, 1479, 1479, 1479, 1479, 1479, 602: 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 623: 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 634: 1479, 1479, 1479, 1479, 1479, 1479, 642: 1479, 646: 1479, 1479, 1479, 1479, 672: 1479, 721: 1479}, + {1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 546: 1480, 1480, 1480, 550: 1480, 1480, 3767, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 563: 1480, 1480, 1480, 568: 1480, 1480, 1480, 1480, 1480, 574: 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 594: 1480, 1480, 1480, 1480, 1480, 1480, 602: 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 623: 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 634: 1480, 1480, 1480, 1480, 1480, 1480, 642: 1480, 646: 1480, 1480, 1480, 1480, 672: 1480, 721: 1480}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4538}, + {581: 3820, 3818, 3819, 3817, 3815, 599: 4539, 815: 3816, 3814}, + {1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 546: 1481, 1481, 1481, 550: 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 563: 1481, 1481, 1481, 568: 1481, 1481, 1481, 1481, 1481, 574: 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 594: 1481, 1481, 1481, 1481, 1481, 1481, 602: 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 623: 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 634: 1481, 1481, 1481, 1481, 1481, 1481, 642: 1481, 646: 1481, 1481, 1481, 1481, 672: 1481, 721: 1481}, // 1625 - {1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 546: 1478, 1478, 1478, 550: 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 563: 1478, 1478, 1478, 568: 1478, 1478, 1478, 1478, 1478, 574: 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 594: 1478, 1478, 1478, 1478, 1478, 1478, 602: 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 623: 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1478, 634: 1478, 1478, 1478, 1478, 1478, 1478, 641: 1478, 646: 1478, 1478, 1478, 1478, 672: 1478, 718: 1478}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3898, 874: 4523}, - {9: 4524}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4525}, - {9: 2223, 52: 4526, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, + {1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 546: 1482, 1482, 1482, 550: 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 563: 1482, 1482, 1482, 568: 1482, 1482, 1482, 1482, 1482, 574: 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 594: 1482, 1482, 1482, 1482, 1482, 1482, 602: 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 623: 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 1482, 634: 1482, 1482, 1482, 1482, 1482, 1482, 642: 1482, 646: 1482, 1482, 1482, 1482, 672: 1482, 721: 1482}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3917, 874: 4542}, + {9: 4543}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4544}, + {9: 2229, 52: 4545, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, // 1630 - {1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 546: 1479, 1479, 1479, 550: 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 563: 1479, 1479, 1479, 568: 1479, 1479, 1479, 1479, 1479, 574: 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 594: 1479, 1479, 1479, 1479, 1479, 1479, 602: 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 623: 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 1479, 634: 1479, 1479, 1479, 1479, 1479, 1479, 641: 1479, 646: 1479, 1479, 1479, 1479, 672: 1479, 718: 1479}, - {9: 2224, 52: 4532, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {9: 4529}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4530}, - {9: 2223, 52: 4531, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, + {1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 546: 1483, 1483, 1483, 550: 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 563: 1483, 1483, 1483, 568: 1483, 1483, 1483, 1483, 1483, 574: 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 594: 1483, 1483, 1483, 1483, 1483, 1483, 602: 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 623: 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 634: 1483, 1483, 1483, 1483, 1483, 1483, 642: 1483, 646: 1483, 1483, 1483, 1483, 672: 1483, 721: 1483}, + {9: 2230, 52: 4551, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {9: 4548}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4549}, + {9: 2229, 52: 4550, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, // 1635 - {1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 546: 1480, 1480, 1480, 550: 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 563: 1480, 1480, 1480, 568: 1480, 1480, 1480, 1480, 1480, 574: 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 594: 1480, 1480, 1480, 1480, 1480, 1480, 602: 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 623: 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 634: 1480, 1480, 1480, 1480, 1480, 1480, 641: 1480, 646: 1480, 1480, 1480, 1480, 672: 1480, 718: 1480}, - {1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 546: 1481, 1481, 1481, 550: 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 563: 1481, 1481, 1481, 568: 1481, 1481, 1481, 1481, 1481, 574: 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 594: 1481, 1481, 1481, 1481, 1481, 1481, 602: 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 623: 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 1481, 634: 1481, 1481, 1481, 1481, 1481, 1481, 641: 1481, 646: 1481, 1481, 1481, 1481, 672: 1481, 718: 1481}, - {1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 546: 1483, 1483, 1483, 550: 1483, 1483, 3748, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 563: 1483, 1483, 1483, 568: 1483, 1483, 1483, 1483, 1483, 574: 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 594: 1483, 1483, 1483, 1483, 1483, 1483, 602: 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 623: 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 1483, 634: 1483, 1483, 1483, 1483, 1483, 1483, 641: 1483, 646: 1483, 1483, 1483, 1483, 672: 1483, 718: 1483}, - {1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 546: 1485, 1485, 1485, 550: 1485, 1485, 3748, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 563: 1485, 1485, 1485, 568: 1485, 1485, 1485, 1485, 1485, 574: 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 594: 1485, 1485, 1485, 1485, 1485, 1485, 602: 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 623: 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 634: 1485, 1485, 1485, 1485, 1485, 1485, 641: 1485, 646: 1485, 1485, 1485, 1485, 672: 1485, 718: 1485}, - {1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 546: 1486, 1486, 1486, 550: 1486, 1486, 3748, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 563: 1486, 1486, 1486, 568: 1486, 1486, 1486, 1486, 1486, 574: 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 594: 1486, 1486, 1486, 1486, 1486, 1486, 602: 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 623: 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 1486, 634: 1486, 1486, 1486, 1486, 1486, 1486, 641: 1486, 646: 1486, 1486, 1486, 1486, 672: 1486, 718: 1486}, + {1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 546: 1484, 1484, 1484, 550: 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 563: 1484, 1484, 1484, 568: 1484, 1484, 1484, 1484, 1484, 574: 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 594: 1484, 1484, 1484, 1484, 1484, 1484, 602: 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 623: 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 1484, 634: 1484, 1484, 1484, 1484, 1484, 1484, 642: 1484, 646: 1484, 1484, 1484, 1484, 672: 1484, 721: 1484}, + {1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 546: 1485, 1485, 1485, 550: 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 563: 1485, 1485, 1485, 568: 1485, 1485, 1485, 1485, 1485, 574: 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 594: 1485, 1485, 1485, 1485, 1485, 1485, 602: 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 623: 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 634: 1485, 1485, 1485, 1485, 1485, 1485, 642: 1485, 646: 1485, 1485, 1485, 1485, 672: 1485, 721: 1485}, + {1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 546: 1487, 1487, 1487, 550: 1487, 1487, 3767, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 563: 1487, 1487, 1487, 568: 1487, 1487, 1487, 1487, 1487, 574: 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 594: 1487, 1487, 1487, 1487, 1487, 1487, 602: 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 623: 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 634: 1487, 1487, 1487, 1487, 1487, 1487, 642: 1487, 646: 1487, 1487, 1487, 1487, 672: 1487, 721: 1487}, + {1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 546: 1489, 1489, 1489, 550: 1489, 1489, 3767, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 563: 1489, 1489, 1489, 568: 1489, 1489, 1489, 1489, 1489, 574: 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 594: 1489, 1489, 1489, 1489, 1489, 1489, 602: 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 623: 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 1489, 634: 1489, 1489, 1489, 1489, 1489, 1489, 642: 1489, 646: 1489, 1489, 1489, 1489, 672: 1489, 721: 1489}, + {1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 546: 1490, 1490, 1490, 550: 1490, 1490, 3767, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 563: 1490, 1490, 1490, 568: 1490, 1490, 1490, 1490, 1490, 574: 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 594: 1490, 1490, 1490, 1490, 1490, 1490, 602: 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 623: 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 1490, 634: 1490, 1490, 1490, 1490, 1490, 1490, 642: 1490, 646: 1490, 1490, 1490, 1490, 672: 1490, 721: 1490}, // 1640 - {1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 546: 1487, 1487, 1487, 550: 1487, 1487, 3748, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 563: 1487, 1487, 1487, 568: 1487, 1487, 1487, 1487, 1487, 574: 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 594: 1487, 1487, 1487, 1487, 1487, 1487, 602: 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 623: 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 1487, 634: 1487, 1487, 1487, 1487, 1487, 1487, 641: 1487, 646: 1487, 1487, 1487, 1487, 672: 1487, 718: 1487}, - {1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 546: 1488, 1488, 1488, 550: 1488, 1488, 3748, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 563: 1488, 1488, 1488, 568: 1488, 1488, 1488, 1488, 1488, 574: 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 594: 1488, 1488, 1488, 1488, 1488, 1488, 602: 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 623: 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 1488, 634: 1488, 1488, 1488, 1488, 1488, 1488, 641: 1488, 646: 1488, 1488, 1488, 1488, 672: 1488, 718: 1488}, - {547: 4541}, - {547: 4540}, - {1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 546: 1468, 1468, 1468, 550: 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 563: 1468, 1468, 1468, 568: 1468, 1468, 1468, 1468, 1468, 574: 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 594: 1468, 1468, 1468, 1468, 1468, 1468, 602: 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 623: 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 1468, 634: 1468, 1468, 1468, 1468, 1468, 1468, 641: 1468, 646: 1468, 1468, 1468, 1468, 672: 1468, 718: 1468}, + {1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 546: 1491, 1491, 1491, 550: 1491, 1491, 3767, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 563: 1491, 1491, 1491, 568: 1491, 1491, 1491, 1491, 1491, 574: 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 594: 1491, 1491, 1491, 1491, 1491, 1491, 602: 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 623: 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 1491, 634: 1491, 1491, 1491, 1491, 1491, 1491, 642: 1491, 646: 1491, 1491, 1491, 1491, 672: 1491, 721: 1491}, + {1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 546: 1492, 1492, 1492, 550: 1492, 1492, 3767, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 563: 1492, 1492, 1492, 568: 1492, 1492, 1492, 1492, 1492, 574: 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 594: 1492, 1492, 1492, 1492, 1492, 1492, 602: 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 623: 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 634: 1492, 1492, 1492, 1492, 1492, 1492, 642: 1492, 646: 1492, 1492, 1492, 1492, 672: 1492, 721: 1492}, + {547: 4560}, + {547: 4559}, + {1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 546: 1472, 1472, 1472, 550: 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 563: 1472, 1472, 1472, 568: 1472, 1472, 1472, 1472, 1472, 574: 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 594: 1472, 1472, 1472, 1472, 1472, 1472, 602: 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 623: 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 1472, 634: 1472, 1472, 1472, 1472, 1472, 1472, 642: 1472, 646: 1472, 1472, 1472, 1472, 672: 1472, 721: 1472}, // 1645 - {1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 546: 1469, 1469, 1469, 550: 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 563: 1469, 1469, 1469, 568: 1469, 1469, 1469, 1469, 1469, 574: 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 594: 1469, 1469, 1469, 1469, 1469, 1469, 602: 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 623: 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 1469, 634: 1469, 1469, 1469, 1469, 1469, 1469, 641: 1469, 646: 1469, 1469, 1469, 1469, 672: 1469, 718: 1469}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4543, 3092, 3093, 3091}, - {1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 4544, 1500, 1500, 1500, 550: 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 563: 1500, 1500, 1500, 568: 1500, 1500, 1500, 1500, 1500, 574: 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 594: 1500, 1500, 1500, 1500, 1500, 1500, 602: 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 623: 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 634: 1500, 1500, 1500, 1500, 1500, 1500, 641: 1500, 646: 1500, 1500, 1500, 1500, 672: 1500, 718: 1500, 729: 3962, 733: 1500, 1500}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 2218, 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3898, 874: 4404, 938: 4545}, - {52: 4546}, + {1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 546: 1473, 1473, 1473, 550: 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 563: 1473, 1473, 1473, 568: 1473, 1473, 1473, 1473, 1473, 574: 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 594: 1473, 1473, 1473, 1473, 1473, 1473, 602: 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 623: 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 1473, 634: 1473, 1473, 1473, 1473, 1473, 1473, 642: 1473, 646: 1473, 1473, 1473, 1473, 672: 1473, 721: 1473}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4562, 3111, 3112, 3110}, + {1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 4563, 1504, 1504, 1504, 550: 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 563: 1504, 1504, 1504, 568: 1504, 1504, 1504, 1504, 1504, 574: 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 594: 1504, 1504, 1504, 1504, 1504, 1504, 602: 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 623: 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 634: 1504, 1504, 1504, 1504, 1504, 1504, 642: 1504, 646: 1504, 1504, 1504, 1504, 672: 1504, 721: 1504, 729: 3981, 733: 1504, 1504}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 2224, 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3917, 874: 4423, 938: 4564}, + {52: 4565}, // 1650 - {1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 546: 1331, 1331, 1331, 550: 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 563: 1331, 1331, 1331, 568: 1331, 1331, 1331, 1331, 1331, 574: 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 594: 1331, 1331, 1331, 1331, 1331, 1331, 602: 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 623: 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 634: 1331, 1331, 1331, 1331, 1331, 1331, 641: 1331, 646: 1331, 1331, 1331, 1331, 672: 1331, 718: 1331}, - {1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 546: 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 563: 1539, 1539, 1539, 568: 1539, 1539, 1539, 1539, 1539, 574: 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 594: 1539, 1539, 1539, 1539, 1539, 1539, 602: 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 623: 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 634: 1539, 1539, 1539, 1539, 1539, 1539, 641: 1539, 646: 1539, 1539, 1539, 1539, 669: 1539, 672: 1539, 716: 1539, 1539, 1539, 1539, 1539, 1539, 1539}, - {1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 546: 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 563: 1536, 1536, 1536, 568: 1536, 1536, 1536, 1536, 1536, 574: 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 594: 1536, 1536, 1536, 1536, 1536, 1536, 602: 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 623: 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 634: 1536, 1536, 1536, 1536, 1536, 1536, 641: 1536, 646: 1536, 1536, 1536, 1536, 669: 1536, 672: 1536, 716: 1536, 1536, 1536, 1536, 1536, 1536, 1536}, - {1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 546: 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 563: 1535, 1535, 1535, 568: 1535, 1535, 1535, 1535, 1535, 574: 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 594: 1535, 1535, 1535, 1535, 1535, 1535, 602: 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 623: 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 1535, 634: 1535, 1535, 1535, 1535, 1535, 1535, 641: 1535, 646: 1535, 1535, 1535, 1535, 669: 1535, 672: 1535, 716: 1535, 1535, 1535, 1535, 1535, 1535, 1535}, - {1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 546: 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 563: 1533, 1533, 1533, 568: 1533, 1533, 1533, 1533, 1533, 574: 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 594: 1533, 1533, 1533, 1533, 1533, 1533, 602: 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 623: 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 634: 1533, 1533, 1533, 1533, 1533, 1533, 641: 1533, 646: 1533, 1533, 1533, 1533, 669: 1533, 672: 1533, 716: 1533, 1533, 1533, 1533, 1533, 1533, 1533}, + {1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 546: 1335, 1335, 1335, 550: 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 563: 1335, 1335, 1335, 568: 1335, 1335, 1335, 1335, 1335, 574: 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 594: 1335, 1335, 1335, 1335, 1335, 1335, 602: 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 623: 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 634: 1335, 1335, 1335, 1335, 1335, 1335, 642: 1335, 646: 1335, 1335, 1335, 1335, 672: 1335, 721: 1335}, + {1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 546: 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 563: 1543, 1543, 1543, 568: 1543, 1543, 1543, 1543, 1543, 574: 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 594: 1543, 1543, 1543, 1543, 1543, 1543, 602: 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 623: 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 1543, 634: 1543, 1543, 1543, 1543, 1543, 1543, 642: 1543, 646: 1543, 1543, 1543, 1543, 658: 1543, 672: 1543, 710: 1543, 717: 1543, 1543, 1543, 1543, 1543, 1543}, + {1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 546: 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 563: 1540, 1540, 1540, 568: 1540, 1540, 1540, 1540, 1540, 574: 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 594: 1540, 1540, 1540, 1540, 1540, 1540, 602: 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 623: 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 1540, 634: 1540, 1540, 1540, 1540, 1540, 1540, 642: 1540, 646: 1540, 1540, 1540, 1540, 658: 1540, 672: 1540, 710: 1540, 717: 1540, 1540, 1540, 1540, 1540, 1540}, + {1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 546: 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 563: 1539, 1539, 1539, 568: 1539, 1539, 1539, 1539, 1539, 574: 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 594: 1539, 1539, 1539, 1539, 1539, 1539, 602: 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 623: 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 1539, 634: 1539, 1539, 1539, 1539, 1539, 1539, 642: 1539, 646: 1539, 1539, 1539, 1539, 658: 1539, 672: 1539, 710: 1539, 717: 1539, 1539, 1539, 1539, 1539, 1539}, + {1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 546: 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 563: 1537, 1537, 1537, 568: 1537, 1537, 1537, 1537, 1537, 574: 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 594: 1537, 1537, 1537, 1537, 1537, 1537, 602: 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 623: 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 634: 1537, 1537, 1537, 1537, 1537, 1537, 642: 1537, 646: 1537, 1537, 1537, 1537, 658: 1537, 672: 1537, 710: 1537, 717: 1537, 1537, 1537, 1537, 1537, 1537}, // 1655 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 730: 4553, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4552}, - {52: 4557, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4554}, - {52: 4555, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 546: 1175, 1175, 1175, 550: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 563: 1175, 1175, 1175, 568: 1175, 1175, 1175, 1175, 1175, 574: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 594: 1175, 1175, 1175, 1175, 1175, 1175, 602: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 623: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 634: 1175, 1175, 1175, 1175, 1175, 1175, 641: 1175, 646: 1175, 1175, 1175, 1175, 672: 1175, 718: 1175, 835: 4123, 848: 4241, 859: 4556}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 730: 4572, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4571}, + {52: 4576, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4573}, + {52: 4574, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 546: 1179, 1179, 1179, 550: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 563: 1179, 1179, 1179, 568: 1179, 1179, 1179, 1179, 1179, 574: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 594: 1179, 1179, 1179, 1179, 1179, 1179, 602: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 623: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 634: 1179, 1179, 1179, 1179, 1179, 1179, 642: 1179, 646: 1179, 1179, 1179, 1179, 672: 1179, 721: 1179, 835: 4142, 848: 4260, 859: 4575}, // 1660 - {1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 546: 1339, 1339, 1339, 550: 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 563: 1339, 1339, 1339, 568: 1339, 1339, 1339, 1339, 1339, 574: 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 594: 1339, 1339, 1339, 1339, 1339, 1339, 602: 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 623: 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 634: 1339, 1339, 1339, 1339, 1339, 1339, 641: 1339, 646: 1339, 1339, 1339, 1339, 672: 1339, 718: 1339}, - {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 546: 1175, 1175, 1175, 550: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 563: 1175, 1175, 1175, 568: 1175, 1175, 1175, 1175, 1175, 574: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 594: 1175, 1175, 1175, 1175, 1175, 1175, 602: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 623: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 634: 1175, 1175, 1175, 1175, 1175, 1175, 641: 1175, 646: 1175, 1175, 1175, 1175, 672: 1175, 718: 1175, 835: 4123, 848: 4241, 859: 4558}, - {1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 546: 1340, 1340, 1340, 550: 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 563: 1340, 1340, 1340, 568: 1340, 1340, 1340, 1340, 1340, 574: 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 594: 1340, 1340, 1340, 1340, 1340, 1340, 602: 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 623: 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 634: 1340, 1340, 1340, 1340, 1340, 1340, 641: 1340, 646: 1340, 1340, 1340, 1340, 672: 1340, 718: 1340}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 730: 4561, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4560}, - {9: 4571, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, + {1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 546: 1343, 1343, 1343, 550: 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 563: 1343, 1343, 1343, 568: 1343, 1343, 1343, 1343, 1343, 574: 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 594: 1343, 1343, 1343, 1343, 1343, 1343, 602: 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 623: 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 634: 1343, 1343, 1343, 1343, 1343, 1343, 642: 1343, 646: 1343, 1343, 1343, 1343, 672: 1343, 721: 1343}, + {1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 546: 1179, 1179, 1179, 550: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 563: 1179, 1179, 1179, 568: 1179, 1179, 1179, 1179, 1179, 574: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 594: 1179, 1179, 1179, 1179, 1179, 1179, 602: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 623: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 634: 1179, 1179, 1179, 1179, 1179, 1179, 642: 1179, 646: 1179, 1179, 1179, 1179, 672: 1179, 721: 1179, 835: 4142, 848: 4260, 859: 4577}, + {1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 546: 1344, 1344, 1344, 550: 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 563: 1344, 1344, 1344, 568: 1344, 1344, 1344, 1344, 1344, 574: 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 594: 1344, 1344, 1344, 1344, 1344, 1344, 602: 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 623: 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 634: 1344, 1344, 1344, 1344, 1344, 1344, 642: 1344, 646: 1344, 1344, 1344, 1344, 672: 1344, 721: 1344}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 730: 4580, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4579}, + {9: 4590, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, // 1665 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4562}, - {9: 4563, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 730: 4565, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4564}, - {52: 4569, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4566}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4581}, + {9: 4582, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 730: 4584, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4583}, + {52: 4588, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4585}, // 1670 - {52: 4567, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 546: 1175, 1175, 1175, 550: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 563: 1175, 1175, 1175, 568: 1175, 1175, 1175, 1175, 1175, 574: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 594: 1175, 1175, 1175, 1175, 1175, 1175, 602: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 623: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 634: 1175, 1175, 1175, 1175, 1175, 1175, 641: 1175, 646: 1175, 1175, 1175, 1175, 672: 1175, 718: 1175, 835: 4123, 848: 4241, 859: 4568}, - {1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 546: 1335, 1335, 1335, 550: 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 563: 1335, 1335, 1335, 568: 1335, 1335, 1335, 1335, 1335, 574: 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 594: 1335, 1335, 1335, 1335, 1335, 1335, 602: 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 623: 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 1335, 634: 1335, 1335, 1335, 1335, 1335, 1335, 641: 1335, 646: 1335, 1335, 1335, 1335, 672: 1335, 718: 1335}, - {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 546: 1175, 1175, 1175, 550: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 563: 1175, 1175, 1175, 568: 1175, 1175, 1175, 1175, 1175, 574: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 594: 1175, 1175, 1175, 1175, 1175, 1175, 602: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 623: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 634: 1175, 1175, 1175, 1175, 1175, 1175, 641: 1175, 646: 1175, 1175, 1175, 1175, 672: 1175, 718: 1175, 835: 4123, 848: 4241, 859: 4570}, - {1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 546: 1337, 1337, 1337, 550: 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 563: 1337, 1337, 1337, 568: 1337, 1337, 1337, 1337, 1337, 574: 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 594: 1337, 1337, 1337, 1337, 1337, 1337, 602: 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 623: 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 1337, 634: 1337, 1337, 1337, 1337, 1337, 1337, 641: 1337, 646: 1337, 1337, 1337, 1337, 672: 1337, 718: 1337}, + {52: 4586, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 546: 1179, 1179, 1179, 550: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 563: 1179, 1179, 1179, 568: 1179, 1179, 1179, 1179, 1179, 574: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 594: 1179, 1179, 1179, 1179, 1179, 1179, 602: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 623: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 634: 1179, 1179, 1179, 1179, 1179, 1179, 642: 1179, 646: 1179, 1179, 1179, 1179, 672: 1179, 721: 1179, 835: 4142, 848: 4260, 859: 4587}, + {1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 546: 1339, 1339, 1339, 550: 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 563: 1339, 1339, 1339, 568: 1339, 1339, 1339, 1339, 1339, 574: 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 594: 1339, 1339, 1339, 1339, 1339, 1339, 602: 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 623: 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 634: 1339, 1339, 1339, 1339, 1339, 1339, 642: 1339, 646: 1339, 1339, 1339, 1339, 672: 1339, 721: 1339}, + {1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 546: 1179, 1179, 1179, 550: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 563: 1179, 1179, 1179, 568: 1179, 1179, 1179, 1179, 1179, 574: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 594: 1179, 1179, 1179, 1179, 1179, 1179, 602: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 623: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 634: 1179, 1179, 1179, 1179, 1179, 1179, 642: 1179, 646: 1179, 1179, 1179, 1179, 672: 1179, 721: 1179, 835: 4142, 848: 4260, 859: 4589}, + {1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 546: 1341, 1341, 1341, 550: 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 563: 1341, 1341, 1341, 568: 1341, 1341, 1341, 1341, 1341, 574: 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 594: 1341, 1341, 1341, 1341, 1341, 1341, 602: 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 623: 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 634: 1341, 1341, 1341, 1341, 1341, 1341, 642: 1341, 646: 1341, 1341, 1341, 1341, 672: 1341, 721: 1341}, // 1675 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 730: 4573, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4572}, - {52: 4577, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4574}, - {52: 4575, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 546: 1175, 1175, 1175, 550: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 563: 1175, 1175, 1175, 568: 1175, 1175, 1175, 1175, 1175, 574: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 594: 1175, 1175, 1175, 1175, 1175, 1175, 602: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 623: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 634: 1175, 1175, 1175, 1175, 1175, 1175, 641: 1175, 646: 1175, 1175, 1175, 1175, 672: 1175, 718: 1175, 835: 4123, 848: 4241, 859: 4576}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 730: 4592, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4591}, + {52: 4596, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4593}, + {52: 4594, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 546: 1179, 1179, 1179, 550: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 563: 1179, 1179, 1179, 568: 1179, 1179, 1179, 1179, 1179, 574: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 594: 1179, 1179, 1179, 1179, 1179, 1179, 602: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 623: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 634: 1179, 1179, 1179, 1179, 1179, 1179, 642: 1179, 646: 1179, 1179, 1179, 1179, 672: 1179, 721: 1179, 835: 4142, 848: 4260, 859: 4595}, // 1680 - {1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 546: 1336, 1336, 1336, 550: 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 563: 1336, 1336, 1336, 568: 1336, 1336, 1336, 1336, 1336, 574: 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 594: 1336, 1336, 1336, 1336, 1336, 1336, 602: 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 623: 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 634: 1336, 1336, 1336, 1336, 1336, 1336, 641: 1336, 646: 1336, 1336, 1336, 1336, 672: 1336, 718: 1336}, - {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 546: 1175, 1175, 1175, 550: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 563: 1175, 1175, 1175, 568: 1175, 1175, 1175, 1175, 1175, 574: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 594: 1175, 1175, 1175, 1175, 1175, 1175, 602: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 623: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 634: 1175, 1175, 1175, 1175, 1175, 1175, 641: 1175, 646: 1175, 1175, 1175, 1175, 672: 1175, 718: 1175, 835: 4123, 848: 4241, 859: 4578}, - {1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 546: 1338, 1338, 1338, 550: 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 563: 1338, 1338, 1338, 568: 1338, 1338, 1338, 1338, 1338, 574: 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 594: 1338, 1338, 1338, 1338, 1338, 1338, 602: 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 623: 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 634: 1338, 1338, 1338, 1338, 1338, 1338, 641: 1338, 646: 1338, 1338, 1338, 1338, 672: 1338, 718: 1338}, - {127: 3823, 136: 3831, 143: 3819, 147: 3816, 149: 3818, 3815, 3817, 3821, 3822, 3827, 3826, 3825, 3829, 3830, 3824, 3828, 3820, 902: 4580}, - {9: 4581}, + {1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 546: 1340, 1340, 1340, 550: 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 563: 1340, 1340, 1340, 568: 1340, 1340, 1340, 1340, 1340, 574: 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 594: 1340, 1340, 1340, 1340, 1340, 1340, 602: 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 623: 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 634: 1340, 1340, 1340, 1340, 1340, 1340, 642: 1340, 646: 1340, 1340, 1340, 1340, 672: 1340, 721: 1340}, + {1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 546: 1179, 1179, 1179, 550: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 563: 1179, 1179, 1179, 568: 1179, 1179, 1179, 1179, 1179, 574: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 594: 1179, 1179, 1179, 1179, 1179, 1179, 602: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 623: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 634: 1179, 1179, 1179, 1179, 1179, 1179, 642: 1179, 646: 1179, 1179, 1179, 1179, 672: 1179, 721: 1179, 835: 4142, 848: 4260, 859: 4597}, + {1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 546: 1342, 1342, 1342, 550: 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 563: 1342, 1342, 1342, 568: 1342, 1342, 1342, 1342, 1342, 574: 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 594: 1342, 1342, 1342, 1342, 1342, 1342, 602: 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 623: 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 634: 1342, 1342, 1342, 1342, 1342, 1342, 642: 1342, 646: 1342, 1342, 1342, 1342, 672: 1342, 721: 1342}, + {129: 3842, 138: 3850, 145: 3838, 149: 3835, 151: 3837, 3834, 3836, 3840, 3841, 3846, 3845, 3844, 3848, 3849, 3843, 3847, 3839, 902: 4599}, + {9: 4600}, // 1685 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4582}, - {9: 4583, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4584}, - {52: 4585, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 546: 1385, 1385, 1385, 550: 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 563: 1385, 1385, 1385, 568: 1385, 1385, 1385, 1385, 1385, 574: 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 594: 1385, 1385, 1385, 1385, 1385, 1385, 602: 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 623: 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 634: 1385, 1385, 1385, 1385, 1385, 1385, 641: 1385, 646: 1385, 1385, 1385, 1385, 672: 1385, 718: 1385}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4601}, + {9: 4602, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4603}, + {52: 4604, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 546: 1389, 1389, 1389, 550: 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 563: 1389, 1389, 1389, 568: 1389, 1389, 1389, 1389, 1389, 574: 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 594: 1389, 1389, 1389, 1389, 1389, 1389, 602: 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 623: 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 634: 1389, 1389, 1389, 1389, 1389, 1389, 642: 1389, 646: 1389, 1389, 1389, 1389, 672: 1389, 721: 1389}, // 1690 - {127: 3823, 136: 3831, 143: 3819, 147: 3816, 149: 3818, 3815, 3817, 3821, 3822, 3827, 3826, 3825, 3829, 3830, 3824, 3828, 3820, 902: 4587}, - {9: 4588}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4589}, - {9: 4590, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4591}, + {129: 3842, 138: 3850, 145: 3838, 149: 3835, 151: 3837, 3834, 3836, 3840, 3841, 3846, 3845, 3844, 3848, 3849, 3843, 3847, 3839, 902: 4606}, + {9: 4607}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4608}, + {9: 4609, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4610}, // 1695 - {52: 4592, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 546: 1386, 1386, 1386, 550: 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 563: 1386, 1386, 1386, 568: 1386, 1386, 1386, 1386, 1386, 574: 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 594: 1386, 1386, 1386, 1386, 1386, 1386, 602: 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 623: 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 634: 1386, 1386, 1386, 1386, 1386, 1386, 641: 1386, 646: 1386, 1386, 1386, 1386, 672: 1386, 718: 1386}, - {185: 4596, 4595, 188: 4597, 196: 4598, 1383: 4594}, - {9: 4599}, - {9: 1375}, + {52: 4611, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 546: 1390, 1390, 1390, 550: 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 563: 1390, 1390, 1390, 568: 1390, 1390, 1390, 1390, 1390, 574: 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 594: 1390, 1390, 1390, 1390, 1390, 1390, 602: 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 623: 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 1390, 634: 1390, 1390, 1390, 1390, 1390, 1390, 642: 1390, 646: 1390, 1390, 1390, 1390, 672: 1390, 721: 1390}, + {186: 4615, 4614, 189: 4616, 197: 4617, 1387: 4613}, + {9: 4618}, + {9: 1379}, // 1700 - {9: 1374}, - {9: 1373}, - {9: 1372}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4600}, - {52: 4601, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, + {9: 1378}, + {9: 1377}, + {9: 1376}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4619}, + {52: 4620, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, // 1705 - {1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 546: 1392, 1392, 1392, 550: 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 563: 1392, 1392, 1392, 568: 1392, 1392, 1392, 1392, 1392, 574: 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 594: 1392, 1392, 1392, 1392, 1392, 1392, 602: 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 623: 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 634: 1392, 1392, 1392, 1392, 1392, 1392, 641: 1392, 646: 1392, 1392, 1392, 1392, 672: 1392, 718: 1392}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 4603}, - {9: 4604}, - {557: 4608, 4609, 573: 3078, 814: 4605, 846: 4607, 928: 4606}, - {2256, 2256, 6: 2256, 2256, 2256, 2256, 15: 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 95: 2256, 97: 2256, 99: 2256, 2256, 104: 2256, 2256, 107: 2256, 2256, 2256, 2256, 112: 2256, 143: 2256, 174: 2256, 2256, 2256, 2256, 549: 2256, 552: 2256, 2256, 567: 2256, 2256, 570: 2256, 578: 2256, 580: 2256, 723: 2256, 2256, 735: 2256}, + {1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 546: 1396, 1396, 1396, 550: 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 563: 1396, 1396, 1396, 568: 1396, 1396, 1396, 1396, 1396, 574: 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 594: 1396, 1396, 1396, 1396, 1396, 1396, 602: 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 623: 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 634: 1396, 1396, 1396, 1396, 1396, 1396, 642: 1396, 646: 1396, 1396, 1396, 1396, 672: 1396, 721: 1396}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 4622}, + {9: 4623}, + {557: 4627, 4628, 573: 3097, 814: 4624, 846: 4626, 928: 4625}, + {2262, 2262, 6: 2262, 2262, 2262, 2262, 15: 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 97: 2262, 99: 2262, 101: 2262, 2262, 106: 2262, 2262, 110: 2262, 2262, 2262, 2262, 119: 2262, 145: 2262, 175: 2262, 2262, 2262, 2262, 549: 2262, 552: 2262, 2262, 567: 2262, 2262, 570: 2262, 578: 2262, 580: 2262, 723: 2262, 2262, 735: 2262}, // 1710 - {52: 4612}, - {168, 168, 6: 168, 168, 168, 15: 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 52: 168, 95: 168, 97: 168, 99: 168, 168, 104: 168, 168, 107: 168, 168, 168, 168, 112: 168, 549: 168, 552: 168, 168, 567: 168, 580: 168, 723: 168, 168, 735: 168}, - {573: 3078, 814: 4605, 846: 4611}, - {573: 3078, 814: 4610}, - {166, 166, 6: 166, 166, 166, 15: 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 52: 166, 95: 166, 97: 166, 99: 166, 166, 104: 166, 166, 107: 166, 166, 166, 166, 112: 166, 549: 166, 552: 166, 166, 567: 166, 580: 166, 723: 166, 166, 735: 166}, + {52: 4631}, + {168, 168, 6: 168, 168, 168, 15: 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 52: 168, 97: 168, 99: 168, 101: 168, 168, 106: 168, 168, 110: 168, 168, 168, 168, 119: 168, 549: 168, 552: 168, 168, 567: 168, 580: 168, 723: 168, 168, 735: 168}, + {573: 3097, 814: 4624, 846: 4630}, + {573: 3097, 814: 4629}, + {166, 166, 6: 166, 166, 166, 15: 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 52: 166, 97: 166, 99: 166, 101: 166, 166, 106: 166, 166, 110: 166, 166, 166, 166, 119: 166, 549: 166, 552: 166, 166, 567: 166, 580: 166, 723: 166, 166, 735: 166}, // 1715 - {167, 167, 6: 167, 167, 167, 15: 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 52: 167, 95: 167, 97: 167, 99: 167, 167, 104: 167, 167, 107: 167, 167, 167, 167, 112: 167, 549: 167, 552: 167, 167, 567: 167, 580: 167, 723: 167, 167, 735: 167}, - {1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 546: 1363, 1363, 1363, 550: 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 563: 1363, 1363, 1363, 568: 1363, 1363, 1363, 1363, 1363, 574: 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 594: 1363, 1363, 1363, 1363, 1363, 1363, 602: 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 623: 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 1363, 634: 1363, 1363, 1363, 1363, 1363, 1363, 641: 1363, 646: 1363, 1363, 1363, 1363, 672: 1363, 718: 1363}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 4614}, - {52: 4615}, - {1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 546: 1364, 1364, 1364, 550: 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 563: 1364, 1364, 1364, 568: 1364, 1364, 1364, 1364, 1364, 574: 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 594: 1364, 1364, 1364, 1364, 1364, 1364, 602: 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 623: 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364, 634: 1364, 1364, 1364, 1364, 1364, 1364, 641: 1364, 646: 1364, 1364, 1364, 1364, 672: 1364, 718: 1364}, + {167, 167, 6: 167, 167, 167, 15: 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 52: 167, 97: 167, 99: 167, 101: 167, 167, 106: 167, 167, 110: 167, 167, 167, 167, 119: 167, 549: 167, 552: 167, 167, 567: 167, 580: 167, 723: 167, 167, 735: 167}, + {1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 546: 1367, 1367, 1367, 550: 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 563: 1367, 1367, 1367, 568: 1367, 1367, 1367, 1367, 1367, 574: 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 594: 1367, 1367, 1367, 1367, 1367, 1367, 602: 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 623: 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 1367, 634: 1367, 1367, 1367, 1367, 1367, 1367, 642: 1367, 646: 1367, 1367, 1367, 1367, 672: 1367, 721: 1367}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 4633}, + {52: 4634}, + {1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 546: 1368, 1368, 1368, 550: 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 563: 1368, 1368, 1368, 568: 1368, 1368, 1368, 1368, 1368, 574: 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 594: 1368, 1368, 1368, 1368, 1368, 1368, 602: 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 623: 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 1368, 634: 1368, 1368, 1368, 1368, 1368, 1368, 642: 1368, 646: 1368, 1368, 1368, 1368, 672: 1368, 721: 1368}, // 1720 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4617}, - {52: 4618, 551: 4619, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 546: 1380, 1380, 1380, 550: 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 563: 1380, 1380, 1380, 568: 1380, 1380, 1380, 1380, 1380, 574: 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 594: 1380, 1380, 1380, 1380, 1380, 1380, 602: 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 623: 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 634: 1380, 1380, 1380, 1380, 1380, 1380, 641: 1380, 646: 1380, 1380, 1380, 1380, 672: 1380, 718: 1380}, - {567: 4453, 600: 4621, 723: 4452, 969: 4620}, - {545: 4461, 856: 4624}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4636}, + {52: 4637, 551: 4638, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 546: 1384, 1384, 1384, 550: 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 563: 1384, 1384, 1384, 568: 1384, 1384, 1384, 1384, 1384, 574: 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 594: 1384, 1384, 1384, 1384, 1384, 1384, 602: 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 623: 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 634: 1384, 1384, 1384, 1384, 1384, 1384, 642: 1384, 646: 1384, 1384, 1384, 1384, 672: 1384, 721: 1384}, + {567: 4472, 600: 4640, 723: 4471, 969: 4639}, + {545: 4480, 856: 4643}, // 1725 - {545: 4461, 856: 4622}, - {52: 4623}, - {1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 546: 1378, 1378, 1378, 550: 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 563: 1378, 1378, 1378, 568: 1378, 1378, 1378, 1378, 1378, 574: 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 594: 1378, 1378, 1378, 1378, 1378, 1378, 602: 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 623: 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 634: 1378, 1378, 1378, 1378, 1378, 1378, 641: 1378, 646: 1378, 1378, 1378, 1378, 672: 1378, 718: 1378}, - {52: 4625}, - {1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 546: 1379, 1379, 1379, 550: 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 563: 1379, 1379, 1379, 568: 1379, 1379, 1379, 1379, 1379, 574: 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 594: 1379, 1379, 1379, 1379, 1379, 1379, 602: 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 623: 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 1379, 634: 1379, 1379, 1379, 1379, 1379, 1379, 641: 1379, 646: 1379, 1379, 1379, 1379, 672: 1379, 718: 1379}, + {545: 4480, 856: 4641}, + {52: 4642}, + {1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 546: 1382, 1382, 1382, 550: 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 563: 1382, 1382, 1382, 568: 1382, 1382, 1382, 1382, 1382, 574: 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 594: 1382, 1382, 1382, 1382, 1382, 1382, 602: 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 623: 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 634: 1382, 1382, 1382, 1382, 1382, 1382, 642: 1382, 646: 1382, 1382, 1382, 1382, 672: 1382, 721: 1382}, + {52: 4644}, + {1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 546: 1383, 1383, 1383, 550: 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 563: 1383, 1383, 1383, 568: 1383, 1383, 1383, 1383, 1383, 574: 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 594: 1383, 1383, 1383, 1383, 1383, 1383, 602: 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 623: 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 634: 1383, 1383, 1383, 1383, 1383, 1383, 642: 1383, 646: 1383, 1383, 1383, 1383, 672: 1383, 721: 1383}, // 1730 - {1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 546: 1402, 1402, 1402, 550: 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 563: 1402, 1402, 1402, 568: 1402, 1402, 1402, 1402, 1402, 574: 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 594: 1402, 1402, 1402, 1402, 1402, 1402, 602: 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 623: 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 634: 1402, 1402, 1402, 1402, 1402, 1402, 641: 1402, 646: 1402, 1402, 1402, 1402, 672: 1402, 718: 1402}, - {1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 546: 1403, 1403, 1403, 550: 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 563: 1403, 1403, 1403, 568: 1403, 1403, 1403, 1403, 1403, 574: 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 594: 1403, 1403, 1403, 1403, 1403, 1403, 602: 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 623: 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 634: 1403, 1403, 1403, 1403, 1403, 1403, 641: 1403, 646: 1403, 1403, 1403, 1403, 672: 1403, 718: 1403}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 2218, 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3898, 874: 4404, 938: 4629}, - {52: 4630}, - {1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 546: 1399, 1399, 1399, 550: 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 563: 1399, 1399, 1399, 568: 1399, 1399, 1399, 1399, 1399, 574: 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 594: 1399, 1399, 1399, 1399, 1399, 1399, 602: 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 623: 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1399, 634: 1399, 1399, 1399, 1399, 1399, 1399, 641: 1399, 646: 1399, 1399, 1399, 1399, 672: 1399, 718: 1399}, + {1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 546: 1406, 1406, 1406, 550: 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 563: 1406, 1406, 1406, 568: 1406, 1406, 1406, 1406, 1406, 574: 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 594: 1406, 1406, 1406, 1406, 1406, 1406, 602: 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 623: 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 634: 1406, 1406, 1406, 1406, 1406, 1406, 642: 1406, 646: 1406, 1406, 1406, 1406, 672: 1406, 721: 1406}, + {1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 546: 1407, 1407, 1407, 550: 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 563: 1407, 1407, 1407, 568: 1407, 1407, 1407, 1407, 1407, 574: 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 594: 1407, 1407, 1407, 1407, 1407, 1407, 602: 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 623: 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 634: 1407, 1407, 1407, 1407, 1407, 1407, 642: 1407, 646: 1407, 1407, 1407, 1407, 672: 1407, 721: 1407}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 2224, 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3917, 874: 4423, 938: 4648}, + {52: 4649}, + {1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 546: 1403, 1403, 1403, 550: 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 563: 1403, 1403, 1403, 568: 1403, 1403, 1403, 1403, 1403, 574: 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 594: 1403, 1403, 1403, 1403, 1403, 1403, 602: 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 623: 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 634: 1403, 1403, 1403, 1403, 1403, 1403, 642: 1403, 646: 1403, 1403, 1403, 1403, 672: 1403, 721: 1403}, // 1735 - {1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 546: 1404, 1404, 1404, 550: 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 563: 1404, 1404, 1404, 568: 1404, 1404, 1404, 1404, 1404, 574: 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 594: 1404, 1404, 1404, 1404, 1404, 1404, 602: 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 623: 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 634: 1404, 1404, 1404, 1404, 1404, 1404, 641: 1404, 646: 1404, 1404, 1404, 1404, 672: 1404, 718: 1404}, - {2: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 10: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 53: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 545: 1461, 547: 1461, 1461, 1461, 1461, 554: 1461, 1461, 557: 1461, 1461, 1461, 561: 1461, 1461, 566: 1461, 1461, 573: 1461, 593: 1461, 600: 1461, 1461, 633: 1461, 640: 1461, 642: 1461, 1461, 1461, 1461, 650: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 671: 1461, 673: 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 1461, 725: 1461, 730: 4233, 843: 4231, 4232, 901: 4234, 903: 4235, 929: 4633, 4236}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4634}, - {52: 4635, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 546: 1175, 1175, 1175, 550: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 563: 1175, 1175, 1175, 568: 1175, 1175, 1175, 1175, 1175, 574: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 594: 1175, 1175, 1175, 1175, 1175, 1175, 602: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 623: 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 634: 1175, 1175, 1175, 1175, 1175, 1175, 641: 1175, 646: 1175, 1175, 1175, 1175, 672: 1175, 718: 1175, 835: 4123, 848: 4241, 859: 4636}, + {1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 546: 1408, 1408, 1408, 550: 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 563: 1408, 1408, 1408, 568: 1408, 1408, 1408, 1408, 1408, 574: 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 594: 1408, 1408, 1408, 1408, 1408, 1408, 602: 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 623: 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 634: 1408, 1408, 1408, 1408, 1408, 1408, 642: 1408, 646: 1408, 1408, 1408, 1408, 672: 1408, 721: 1408}, + {2: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 10: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 53: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 545: 1465, 547: 1465, 1465, 1465, 1465, 554: 1465, 1465, 557: 1465, 1465, 1465, 561: 1465, 1465, 566: 1465, 1465, 573: 1465, 593: 1465, 600: 1465, 1465, 633: 1465, 640: 1465, 1465, 643: 1465, 1465, 1465, 650: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 659: 1465, 1465, 1465, 663: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 673: 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 711: 1465, 1465, 1465, 1465, 1465, 1465, 725: 1465, 730: 4252, 843: 4250, 4251, 901: 4253, 903: 4254, 929: 4652, 4255}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4653}, + {52: 4654, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 546: 1179, 1179, 1179, 550: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 563: 1179, 1179, 1179, 568: 1179, 1179, 1179, 1179, 1179, 574: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 594: 1179, 1179, 1179, 1179, 1179, 1179, 602: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 623: 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 634: 1179, 1179, 1179, 1179, 1179, 1179, 642: 1179, 646: 1179, 1179, 1179, 1179, 672: 1179, 721: 1179, 835: 4142, 848: 4260, 859: 4655}, // 1740 - {1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 546: 1361, 1361, 1361, 550: 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 563: 1361, 1361, 1361, 568: 1361, 1361, 1361, 1361, 1361, 574: 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 594: 1361, 1361, 1361, 1361, 1361, 1361, 602: 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 623: 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 634: 1361, 1361, 1361, 1361, 1361, 1361, 641: 1361, 646: 1361, 1361, 1361, 1361, 672: 1361, 718: 1361}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 2218, 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3898, 874: 4404, 938: 4638}, - {52: 4639}, - {1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 546: 1332, 1332, 1332, 550: 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 563: 1332, 1332, 1332, 568: 1332, 1332, 1332, 1332, 1332, 574: 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 594: 1332, 1332, 1332, 1332, 1332, 1332, 602: 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 623: 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 634: 1332, 1332, 1332, 1332, 1332, 1332, 641: 1332, 646: 1332, 1332, 1332, 1332, 672: 1332, 718: 1332}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 4641}, + {1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 546: 1365, 1365, 1365, 550: 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 563: 1365, 1365, 1365, 568: 1365, 1365, 1365, 1365, 1365, 574: 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 594: 1365, 1365, 1365, 1365, 1365, 1365, 602: 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 623: 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 634: 1365, 1365, 1365, 1365, 1365, 1365, 642: 1365, 646: 1365, 1365, 1365, 1365, 672: 1365, 721: 1365}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 2224, 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3917, 874: 4423, 938: 4657}, + {52: 4658}, + {1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 546: 1336, 1336, 1336, 550: 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 563: 1336, 1336, 1336, 568: 1336, 1336, 1336, 1336, 1336, 574: 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 594: 1336, 1336, 1336, 1336, 1336, 1336, 602: 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 623: 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 1336, 634: 1336, 1336, 1336, 1336, 1336, 1336, 642: 1336, 646: 1336, 1336, 1336, 1336, 672: 1336, 721: 1336}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 4660}, // 1745 - {52: 4642}, - {2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 546: 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 563: 2547, 2547, 2547, 568: 2547, 2547, 2547, 2547, 2547, 574: 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 594: 2547, 2547, 2547, 2547, 2547, 2547, 602: 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 623: 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 2547, 634: 2547, 2547, 2547, 2547, 2547, 2547, 641: 2547, 646: 2547, 2547, 2547, 2547, 669: 2547, 672: 2547, 716: 2547, 2547, 2547, 2547, 2547, 2547, 2547}, - {572: 4644}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 4645}, - {2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 546: 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 563: 2548, 2548, 2548, 568: 2548, 2548, 2548, 2548, 2548, 574: 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 594: 2548, 2548, 2548, 2548, 2548, 2548, 602: 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 623: 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 634: 2548, 2548, 2548, 2548, 2548, 2548, 641: 2548, 646: 2548, 2548, 2548, 2548, 669: 2548, 672: 2548, 716: 2548, 2548, 2548, 2548, 2548, 2548, 2548}, + {52: 4661}, + {2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 546: 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 563: 2560, 2560, 2560, 568: 2560, 2560, 2560, 2560, 2560, 574: 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 594: 2560, 2560, 2560, 2560, 2560, 2560, 602: 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 623: 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 634: 2560, 2560, 2560, 2560, 2560, 2560, 642: 2560, 646: 2560, 2560, 2560, 2560, 658: 2560, 672: 2560, 710: 2560, 717: 2560, 2560, 2560, 2560, 2560, 2560}, + {572: 4663}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 4664}, + {2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 546: 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 563: 2561, 2561, 2561, 568: 2561, 2561, 2561, 2561, 2561, 574: 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 594: 2561, 2561, 2561, 2561, 2561, 2561, 602: 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 623: 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 634: 2561, 2561, 2561, 2561, 2561, 2561, 642: 2561, 646: 2561, 2561, 2561, 2561, 658: 2561, 672: 2561, 710: 2561, 717: 2561, 2561, 2561, 2561, 2561, 2561}, // 1750 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3671, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 4654, 3652, 3734, 3651, 3648}, - {126: 4650, 269: 4648, 282: 4649, 1273: 4651}, - {9: 2878, 52: 2878, 102: 2878, 144: 2878, 146: 2878, 169: 2878, 726: 2878}, - {9: 2877, 52: 2877, 102: 2877, 144: 2877, 146: 2877, 169: 2877, 726: 2877}, - {9: 2876, 52: 2876, 102: 2876, 144: 2876, 146: 2876, 169: 2876, 726: 2876}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3690, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 4673, 3671, 3753, 3670, 3667}, + {128: 4669, 270: 4667, 283: 4668, 1275: 4670}, + {9: 2897, 52: 2897, 104: 2897, 146: 2897, 148: 2897, 170: 2897, 727: 2897}, + {9: 2896, 52: 2896, 104: 2896, 146: 2896, 148: 2896, 170: 2896, 727: 2896}, + {9: 2895, 52: 2895, 104: 2895, 146: 2895, 148: 2895, 170: 2895, 727: 2895}, // 1755 - {726: 4652}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3671, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 4653, 3652, 3734, 3651, 3648}, - {2, 2, 9: 2, 51: 2, 102: 2, 126: 2, 552: 3748, 672: 2, 718: 3749}, - {4, 4, 9: 4, 51: 4, 102: 4, 126: 4, 552: 3748, 672: 4, 718: 3749}, - {2: 2355, 2355, 2355, 2355, 2355, 2355, 2355, 10: 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 53: 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 545: 2355, 547: 2355, 2355, 2355, 2355, 554: 2355, 2355, 557: 2355, 2355, 2355, 561: 2355, 2355, 2355, 566: 2355, 2355, 573: 2355, 575: 2355, 593: 2355, 600: 2355, 2355, 633: 2355, 640: 2355, 642: 2355, 2355, 2355, 2355, 650: 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 671: 2355, 673: 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 2355, 725: 2355, 951: 2355}, + {727: 4671}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3690, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 4672, 3671, 3753, 3670, 3667}, + {2, 2, 9: 2, 51: 2, 104: 2, 128: 2, 552: 3767, 672: 2, 721: 3768}, + {4, 4, 9: 4, 51: 4, 104: 4, 128: 4, 552: 3767, 672: 4, 721: 3768}, + {2: 2361, 2361, 2361, 2361, 2361, 2361, 2361, 10: 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 53: 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 545: 2361, 547: 2361, 2361, 2361, 2361, 554: 2361, 2361, 557: 2361, 2361, 2361, 561: 2361, 2361, 2361, 566: 2361, 2361, 573: 2361, 575: 2361, 593: 2361, 600: 2361, 2361, 633: 2361, 640: 2361, 2361, 643: 2361, 2361, 2361, 650: 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 659: 2361, 2361, 2361, 663: 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 673: 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 2361, 711: 2361, 2361, 2361, 2361, 2361, 2361, 725: 2361, 951: 2361}, // 1760 - {239: 4658, 241: 4657, 951: 4659, 1272: 4660}, - {2875, 2875, 9: 2875, 51: 2875, 2875, 102: 2875, 126: 2875, 144: 2875, 146: 2875, 672: 2875}, - {2874, 2874, 9: 2874, 51: 2874, 2874, 102: 2874, 126: 2874, 144: 2874, 146: 2874, 672: 2874}, - {2873, 2873, 9: 2873, 51: 2873, 2873, 102: 2873, 126: 2873, 144: 2873, 146: 2873, 672: 2873}, - {6, 6, 9: 6, 51: 6, 102: 6, 126: 6, 672: 6}, + {239: 4677, 241: 4676, 951: 4678, 1274: 4679}, + {2894, 2894, 9: 2894, 51: 2894, 2894, 104: 2894, 128: 2894, 146: 2894, 148: 2894, 672: 2894}, + {2893, 2893, 9: 2893, 51: 2893, 2893, 104: 2893, 128: 2893, 146: 2893, 148: 2893, 672: 2893}, + {2892, 2892, 9: 2892, 51: 2892, 2892, 104: 2892, 128: 2892, 146: 2892, 148: 2892, 672: 2892}, + {6, 6, 9: 6, 51: 6, 104: 6, 128: 6, 672: 6}, // 1765 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 549: 4663, 643: 3737, 786: 4662, 3092, 3093, 3091, 791: 4665, 954: 4664}, - {2503, 2503, 9: 2503, 51: 2503, 102: 2503, 119: 2503, 2503, 2503, 2503, 2503, 126: 2503, 672: 2503}, - {2502, 2502, 9: 2502, 51: 2502, 102: 2502, 119: 2502, 2502, 2502, 2502, 2502, 126: 2502, 672: 2502}, - {8, 8, 9: 8, 51: 8, 102: 8, 126: 8, 672: 8}, - {7, 7, 9: 7, 51: 7, 102: 7, 126: 7, 672: 7}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 549: 4682, 641: 3756, 786: 4681, 3111, 3112, 3110, 791: 4684, 954: 4683}, + {2516, 2516, 9: 2516, 51: 2516, 104: 2516, 121: 2516, 2516, 2516, 2516, 2516, 128: 2516, 672: 2516}, + {2515, 2515, 9: 2515, 51: 2515, 104: 2515, 121: 2515, 2515, 2515, 2515, 2515, 128: 2515, 672: 2515}, + {8, 8, 9: 8, 51: 8, 104: 8, 128: 8, 672: 8}, + {7, 7, 9: 7, 51: 7, 104: 7, 128: 7, 672: 7}, // 1770 - {10, 10, 9: 10, 51: 10, 102: 10, 126: 10, 672: 10}, - {51: 3082, 102: 3083, 126: 3086, 672: 3085, 1089: 4668, 3084}, - {9, 9, 9: 9, 51: 9, 102: 9, 126: 9, 672: 9}, - {27, 27, 169: 4676, 182: 4675, 184: 4674, 471: 4677, 1057: 4673, 1344: 4670, 4672, 1367: 4671}, + {10, 10, 9: 10, 51: 10, 104: 10, 128: 10, 672: 10}, + {51: 3101, 104: 3102, 128: 3105, 672: 3104, 1090: 4687, 3103}, + {9, 9, 9: 9, 51: 9, 104: 9, 128: 9, 672: 9}, + {27, 27, 170: 4695, 183: 4694, 185: 4693, 471: 4696, 1057: 4692, 1348: 4689, 4691, 1371: 4690}, {28, 28}, // 1775 - {26, 26, 9: 4693, 169: 4676, 182: 4675, 184: 4674, 1057: 4692}, + {26, 26, 9: 4712, 170: 4695, 183: 4694, 185: 4693, 1057: 4711}, {25, 25}, - {24, 24, 9: 24, 169: 24, 182: 24, 184: 24}, - {2: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 10: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 53: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 545: 2356, 547: 2356, 2356, 2356, 2356, 554: 2356, 2356, 557: 2356, 2356, 2356, 561: 2356, 2356, 566: 2356, 2356, 569: 4655, 573: 2356, 593: 2356, 600: 2356, 2356, 633: 2356, 640: 2356, 642: 2356, 2356, 2356, 2356, 650: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 671: 2356, 673: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 725: 2356, 817: 4690}, - {2: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 10: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 53: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 545: 2356, 547: 2356, 2356, 2356, 2356, 554: 2356, 2356, 557: 2356, 2356, 2356, 561: 2356, 2356, 566: 2356, 2356, 569: 4655, 573: 2356, 593: 2356, 600: 2356, 2356, 633: 2356, 640: 2356, 642: 2356, 2356, 2356, 2356, 650: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 671: 2356, 673: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 725: 2356, 817: 4688}, + {24, 24, 9: 24, 170: 24, 183: 24, 185: 24}, + {2: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 10: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 53: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 545: 2362, 547: 2362, 2362, 2362, 2362, 554: 2362, 2362, 557: 2362, 2362, 2362, 561: 2362, 2362, 566: 2362, 2362, 569: 4674, 573: 2362, 593: 2362, 600: 2362, 2362, 633: 2362, 640: 2362, 2362, 643: 2362, 2362, 2362, 650: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 659: 2362, 2362, 2362, 663: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 673: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 711: 2362, 2362, 2362, 2362, 2362, 2362, 725: 2362, 817: 4709}, + {2: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 10: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 53: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 545: 2362, 547: 2362, 2362, 2362, 2362, 554: 2362, 2362, 557: 2362, 2362, 2362, 561: 2362, 2362, 566: 2362, 2362, 569: 4674, 573: 2362, 593: 2362, 600: 2362, 2362, 633: 2362, 640: 2362, 2362, 643: 2362, 2362, 2362, 650: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 659: 2362, 2362, 2362, 663: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 673: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 711: 2362, 2362, 2362, 2362, 2362, 2362, 725: 2362, 817: 4707}, // 1780 - {547: 2356, 569: 4655, 655: 2356, 817: 4683}, - {424: 4680, 4679, 4681, 463: 4678, 4682}, + {547: 2362, 569: 4674, 655: 2362, 817: 4702}, + {424: 4699, 4698, 4700, 463: 4697, 4701}, {17, 17}, {16, 16}, {15, 15}, // 1785 {14, 14}, {13, 13}, - {547: 4684, 655: 4685}, - {19, 19, 9: 19, 169: 19, 182: 19, 184: 19}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4686}, + {547: 4703, 655: 4704}, + {19, 19, 9: 19, 170: 19, 183: 19, 185: 19}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4705}, // 1790 - {127: 3823, 136: 3831, 143: 3819, 147: 3816, 149: 3818, 3815, 3817, 3821, 3822, 3827, 3826, 3825, 3829, 3830, 3824, 3828, 3820, 581: 3801, 3799, 3800, 3798, 3796, 608: 3813, 3810, 3812, 3811, 3807, 3809, 3808, 3805, 3806, 3804, 3814, 815: 3797, 3795, 902: 3803, 916: 4687}, - {18, 18, 9: 18, 169: 18, 182: 18, 184: 18}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4689}, - {20, 20, 9: 20, 169: 20, 182: 20, 184: 20, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4691}, + {129: 3842, 138: 3850, 145: 3838, 149: 3835, 151: 3837, 3834, 3836, 3840, 3841, 3846, 3845, 3844, 3848, 3849, 3843, 3847, 3839, 581: 3820, 3818, 3819, 3817, 3815, 608: 3832, 3829, 3831, 3830, 3826, 3828, 3827, 3824, 3825, 3823, 3833, 815: 3816, 3814, 902: 3822, 916: 4706}, + {18, 18, 9: 18, 170: 18, 183: 18, 185: 18}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4708}, + {20, 20, 9: 20, 170: 20, 183: 20, 185: 20, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4710}, // 1795 - {21, 21, 9: 21, 169: 21, 182: 21, 184: 21, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {23, 23, 9: 23, 169: 23, 182: 23, 184: 23}, - {169: 4676, 182: 4675, 184: 4674, 1057: 4694}, - {22, 22, 9: 22, 169: 22, 182: 22, 184: 22}, - {296: 4698, 399: 4696, 924: 4697}, + {21, 21, 9: 21, 170: 21, 183: 21, 185: 21, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {23, 23, 9: 23, 170: 23, 183: 23, 185: 23}, + {170: 4695, 183: 4694, 185: 4693, 1057: 4713}, + {22, 22, 9: 22, 170: 22, 183: 22, 185: 22}, + {297: 4717, 400: 4715, 924: 4716}, // 1800 - {546: 4706, 598: 135, 1437: 4705}, - {547: 4704}, - {2: 4700, 547: 4699}, - {547: 4703}, - {547: 4701}, + {546: 4725, 598: 135, 1442: 4724}, + {547: 4723}, + {2: 4719, 547: 4718}, + {547: 4722}, + {547: 4720}, // 1805 - {547: 4702}, + {547: 4721}, {136, 136}, {137, 137}, {138, 138}, - {598: 4712}, + {598: 4731}, // 1810 - {235: 4707}, - {745: 4708, 1012: 4709}, - {196: 4710}, + {235: 4726}, + {745: 4727, 1012: 4728}, + {197: 4729}, {598: 134}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4711}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4730}, // 1815 - {2154, 2154, 9: 2154, 52: 2154, 544: 2154, 546: 2154, 553: 2154, 2154, 2154, 2154, 563: 2154, 2154, 2154, 568: 2154, 570: 2154, 2154, 2154, 574: 2154, 577: 2154, 2154, 2154, 2154, 3801, 3799, 3800, 3798, 3796, 2154, 2154, 2154, 2154, 2154, 2154, 594: 2154, 2154, 2154, 598: 2154, 2154, 606: 2154, 815: 3797, 3795}, - {141: 3064, 257: 4726, 545: 2949, 2948, 4727, 562: 2947, 566: 2933, 601: 2932, 622: 2946, 670: 2942, 727: 4725, 3059, 738: 4713, 790: 4714, 818: 2912, 821: 4715, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 4721, 4720, 837: 3058, 2913, 4718, 4719, 4717, 850: 2914, 854: 4716, 920: 4722, 923: 4723, 937: 4724}, - {563: 4743, 622: 2149, 976: 4742}, - {643, 643, 553: 1029, 564: 1029, 1029, 568: 3915, 570: 3914, 579: 3913, 857: 3916, 3917}, - {645, 645, 553: 1030, 564: 1030, 1030}, + {2160, 2160, 9: 2160, 52: 2160, 544: 2160, 546: 2160, 553: 2160, 2160, 2160, 2160, 563: 2160, 2160, 2160, 568: 2160, 570: 2160, 2160, 2160, 574: 2160, 577: 2160, 2160, 2160, 2160, 3820, 3818, 3819, 3817, 3815, 2160, 2160, 2160, 2160, 2160, 2160, 594: 2160, 2160, 2160, 598: 2160, 2160, 606: 2160, 815: 3816, 3814}, + {143: 3083, 257: 4745, 545: 2968, 2967, 4746, 562: 2966, 566: 2952, 601: 2951, 622: 2965, 662: 2961, 726: 3078, 728: 4744, 738: 4732, 790: 4733, 818: 2931, 821: 4734, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 4740, 4739, 837: 3077, 2932, 4737, 4738, 4736, 850: 2933, 854: 4735, 920: 4741, 923: 4742, 937: 4743}, + {563: 4762, 622: 2155, 976: 4761}, + {647, 647, 553: 1033, 564: 1033, 1033, 568: 3934, 570: 3933, 579: 3932, 857: 3935, 3936}, + {649, 649, 553: 1034, 564: 1034, 1034}, // 1820 + {654, 654}, + {653, 653}, + {652, 652}, + {651, 651}, {650, 650}, - {649, 649}, + // 1825 {648, 648}, - {647, 647}, {646, 646}, - // 1825 - {644, 644}, - {642, 642}, - {641, 641}, + {645, 645}, {144, 144}, - {141: 3064, 257: 4736, 545: 2949, 2948, 4737, 562: 2947, 566: 2933, 601: 2932, 622: 2946, 670: 2942, 728: 3059, 738: 4713, 790: 4714, 818: 2912, 821: 4715, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 4721, 4720, 837: 3058, 2913, 4718, 4719, 4717, 850: 2914, 854: 4716, 920: 4722, 923: 4723, 937: 4735}, + {143: 3083, 257: 4755, 545: 2968, 2967, 4756, 562: 2966, 566: 2952, 601: 2951, 622: 2965, 662: 2961, 726: 3078, 738: 4732, 790: 4733, 818: 2931, 821: 4734, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 4740, 4739, 837: 3077, 2932, 4737, 4738, 4736, 850: 2933, 854: 4735, 920: 4741, 923: 4742, 937: 4754}, // 1830 - {170: 4728}, + {171: 4747}, {140, 140}, - {432, 432, 568: 432, 570: 432, 578: 4729, 432, 904: 4730, 4731}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 4734}, - {431, 431, 52: 431, 544: 431, 546: 431, 553: 431, 556: 431, 564: 431, 431, 568: 431, 570: 431, 572: 431, 574: 431, 577: 431, 579: 431, 586: 431, 431, 589: 431}, + {436, 436, 568: 436, 570: 436, 578: 4748, 436, 904: 4749, 4750}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 4753}, + {435, 435, 52: 435, 544: 435, 546: 435, 553: 435, 556: 435, 564: 435, 435, 568: 435, 570: 435, 572: 435, 574: 435, 577: 435, 579: 435, 586: 435, 435, 589: 435}, // 1835 - {1519, 1519, 568: 1519, 570: 1519, 579: 3913, 857: 3967, 926: 4732}, - {1084, 1084, 568: 3915, 570: 3914, 858: 3972, 941: 4733}, + {1523, 1523, 568: 1523, 570: 1523, 579: 3932, 857: 3986, 926: 4751}, + {1088, 1088, 568: 3934, 570: 3933, 858: 3991, 941: 4752}, {142, 142}, - {433, 433, 52: 433, 544: 433, 546: 433, 553: 433, 556: 433, 564: 433, 433, 568: 433, 570: 433, 572: 433, 574: 433, 577: 433, 579: 433, 581: 3801, 3799, 3800, 3798, 3796, 433, 433, 589: 433, 815: 3797, 3795}, + {437, 437, 52: 437, 544: 437, 546: 437, 553: 437, 556: 437, 564: 437, 437, 568: 437, 570: 437, 572: 437, 574: 437, 577: 437, 579: 437, 581: 3820, 3818, 3819, 3817, 3815, 437, 437, 589: 437, 815: 3816, 3814}, {143, 143}, // 1840 - {170: 4738}, + {171: 4757}, {139, 139}, - {432, 432, 568: 432, 570: 432, 578: 4729, 432, 904: 4730, 4739}, - {1519, 1519, 568: 1519, 570: 1519, 579: 3913, 857: 3967, 926: 4740}, - {1084, 1084, 568: 3915, 570: 3914, 858: 3972, 941: 4741}, + {436, 436, 568: 436, 570: 436, 578: 4748, 436, 904: 4749, 4758}, + {1523, 1523, 568: 1523, 570: 1523, 579: 3932, 857: 3986, 926: 4759}, + {1088, 1088, 568: 3934, 570: 3933, 858: 3991, 941: 4760}, // 1845 {141, 141}, - {622: 4744}, - {2: 2148, 2148, 2148, 2148, 2148, 2148, 2148, 10: 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 53: 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 2148, 545: 2148, 574: 2148, 2148, 2148, 622: 2148, 657: 2148}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 4745}, - {2733, 2733, 2733, 2733, 2733, 2733, 4793, 4795, 592, 10: 4762, 15: 4812, 2486, 4810, 4749, 4814, 4801, 4830, 4794, 4797, 4796, 4799, 4800, 4802, 4809, 592, 4820, 4821, 4831, 4807, 4808, 4813, 4815, 4827, 4826, 4835, 4828, 4825, 4818, 4823, 4824, 4817, 4819, 4822, 4811, 4832, 4833, 98: 4764, 4785, 4786, 111: 4787, 141: 4767, 244: 4756, 260: 4750, 262: 4748, 264: 4771, 267: 4772, 280: 4766, 286: 4782, 301: 4760, 310: 4768, 316: 4763, 336: 4773, 344: 4769, 351: 4783, 4784, 358: 4751, 546: 4781, 549: 4792, 552: 2486, 4829, 560: 2733, 567: 2486, 571: 4753, 577: 4788, 579: 4770, 4780, 660: 4754, 717: 4759, 723: 2486, 4798, 727: 4747, 738: 4775, 741: 4761, 743: 4789, 781: 4774, 4765, 4776, 785: 4755, 880: 4803, 906: 4805, 927: 4804, 948: 4806, 955: 4816, 960: 4834, 989: 4779, 1002: 4777, 1035: 4752, 1043: 4757, 1127: 4791, 1300: 4758, 1323: 4778, 1329: 4790, 4746}, + {622: 4763}, + {2: 2154, 2154, 2154, 2154, 2154, 2154, 2154, 10: 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 53: 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 2154, 545: 2154, 574: 2154, 2154, 2154, 622: 2154, 657: 2154}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 4764}, + {2748, 2748, 2748, 2748, 2748, 2748, 4812, 4814, 596, 10: 4781, 15: 4831, 2499, 4829, 4768, 4833, 4820, 4849, 4813, 4816, 4815, 4818, 4819, 4821, 4828, 596, 4839, 4840, 4850, 4826, 4827, 4832, 4834, 4846, 4845, 4854, 4847, 4844, 4837, 4842, 4843, 4836, 4838, 4841, 4830, 4851, 4852, 100: 4783, 4804, 4805, 108: 4806, 143: 4786, 244: 4775, 261: 4769, 263: 4767, 265: 4790, 268: 4791, 281: 4785, 287: 4801, 302: 4779, 311: 4787, 317: 4782, 338: 4792, 346: 4788, 353: 4802, 4803, 360: 4770, 546: 4800, 549: 4811, 552: 2499, 4848, 560: 2748, 567: 2499, 571: 4772, 577: 4807, 579: 4789, 4799, 661: 4773, 717: 4778, 723: 2499, 4817, 728: 4766, 738: 4794, 741: 4780, 743: 4808, 781: 4793, 4784, 4795, 785: 4774, 880: 4822, 906: 4824, 927: 4823, 948: 4825, 955: 4835, 960: 4853, 989: 4798, 1002: 4796, 1035: 4771, 1043: 4776, 1129: 4810, 1302: 4777, 1327: 4797, 1333: 4809, 4765}, // 1850 - {2484, 2484, 5629, 5631, 5632, 5630, 560: 5633, 1250: 5628, 1331: 5627}, - {560: 5601}, - {2891, 2891, 211: 5595, 560: 5596}, - {225: 5587}, - {547: 2356, 549: 2356, 569: 4655, 817: 5584}, + {2497, 2497, 5657, 5659, 5660, 5658, 560: 5661, 1252: 5656, 1335: 5655}, + {560: 5629}, + {2910, 2910, 212: 5623, 560: 5624}, + {225: 5615}, + {547: 2362, 549: 2362, 569: 4674, 817: 5612}, // 1855 - {547: 2356, 549: 2356, 569: 4655, 817: 5581}, - {2819, 2819, 2819, 2819, 2819, 2819, 4793, 4795, 592, 2819, 15: 4812, 2486, 4810, 4749, 4814, 4801, 4830, 4794, 4797, 4796, 4799, 4800, 4802, 4809, 592, 4820, 4821, 4831, 4807, 4808, 4813, 4815, 4827, 4826, 4835, 4828, 4825, 4818, 4823, 4824, 4817, 4819, 4822, 4811, 4832, 4833, 549: 4792, 552: 2486, 4829, 560: 2819, 567: 2486, 580: 5577, 723: 2486, 4798, 880: 4803, 906: 4805, 927: 4804, 948: 4806, 955: 4816, 960: 5578}, - {211: 5562, 218: 5563}, - {726: 5554}, - {2: 2738, 2738, 2738, 2738, 2738, 2738, 2738, 10: 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 53: 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 5408, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 545: 2738, 560: 5407, 593: 2738, 669: 2727, 716: 2727, 2727, 719: 2727, 5156, 724: 2727, 760: 2727, 2727, 945: 5409, 970: 4988, 992: 5405, 1019: 5406}, + {547: 2362, 549: 2362, 569: 4674, 817: 5609}, + {2837, 2837, 2837, 2837, 2837, 2837, 4812, 4814, 596, 2837, 15: 4831, 2499, 4829, 4768, 4833, 4820, 4849, 4813, 4816, 4815, 4818, 4819, 4821, 4828, 596, 4839, 4840, 4850, 4826, 4827, 4832, 4834, 4846, 4845, 4854, 4847, 4844, 4837, 4842, 4843, 4836, 4838, 4841, 4830, 4851, 4852, 549: 4811, 552: 2499, 4848, 560: 2837, 567: 2499, 580: 5605, 723: 2499, 4817, 880: 4822, 906: 4824, 927: 4823, 948: 4825, 955: 4835, 960: 5606}, + {212: 5590, 218: 5591}, + {727: 5582}, + {2: 2753, 2753, 2753, 2753, 2753, 2753, 2753, 10: 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 53: 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 5434, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 545: 2753, 560: 5433, 593: 2753, 658: 2742, 710: 2742, 717: 2742, 2742, 5175, 724: 2742, 760: 2742, 2742, 945: 5435, 970: 5007, 992: 5431, 1019: 5432}, // 1860 - {560: 5398}, - {2807, 2807, 2807, 2807, 2807, 2807, 9: 2807, 560: 2807}, - {2806, 2806, 2806, 2806, 2806, 2806, 9: 2806, 560: 2806}, - {560: 5396}, - {560: 5393}, + {560: 5424}, + {2825, 2825, 2825, 2825, 2825, 2825, 9: 2825, 560: 2825}, + {2824, 2824, 2824, 2824, 2824, 2824, 9: 2824, 560: 2824}, + {560: 5422}, + {560: 5419}, // 1865 - {2: 2738, 2738, 2738, 2738, 2738, 2738, 2738, 10: 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 53: 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 5373, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 560: 5372, 593: 2738, 669: 4974, 716: 5371, 4989, 720: 4990, 724: 4975, 760: 5375, 940: 5374, 970: 4988, 992: 5370, 1139: 5376}, - {560: 5363}, - {560: 5352}, - {560: 5350}, - {560: 5347}, + {2: 2753, 2753, 2753, 2753, 2753, 2753, 2753, 10: 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 53: 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 5399, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 560: 5398, 593: 2753, 658: 4993, 710: 5397, 717: 5008, 719: 5009, 724: 4994, 760: 5401, 940: 5400, 970: 5007, 992: 5396, 1141: 5402}, + {560: 5389}, + {560: 5378}, + {560: 5376}, + {560: 5373}, // 1870 - {560: 5344}, - {20: 5341, 560: 5340}, - {20: 5337, 560: 5336}, - {560: 5326}, - {737: 5319}, + {560: 5370}, + {20: 5367, 560: 5366}, + {20: 5363, 560: 5362}, + {560: 5352}, + {737: 5345}, // 1875 - {1070: 5318}, - {1070: 5317}, - {2: 2738, 2738, 2738, 2738, 2738, 2738, 2738, 10: 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 53: 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 593: 2738, 970: 4988, 992: 5313}, - {2: 2738, 2738, 2738, 2738, 2738, 2738, 2738, 10: 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 53: 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 593: 2738, 970: 4988, 992: 5014}, - {2: 2738, 2738, 2738, 2738, 2738, 2738, 2738, 10: 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 53: 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 2738, 717: 4989, 720: 4990, 724: 4987, 970: 4988, 992: 4985, 1139: 4986}, + {1071: 5344}, + {1071: 5343}, + {2: 2753, 2753, 2753, 2753, 2753, 2753, 2753, 10: 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 53: 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 593: 2753, 970: 5007, 992: 5339}, + {2: 2753, 2753, 2753, 2753, 2753, 2753, 2753, 10: 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 53: 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 593: 2753, 970: 5007, 992: 5033}, + {2: 2753, 2753, 2753, 2753, 2753, 2753, 2753, 10: 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 53: 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 717: 5008, 719: 5009, 724: 5006, 970: 5007, 992: 5004, 1141: 5005}, // 1880 - {2: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 10: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 53: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 551: 4972, 569: 4655, 575: 2356, 669: 4974, 724: 4975, 726: 4970, 817: 4971, 940: 4973, 970: 4969}, - {2774, 2774, 2774, 2774, 2774, 2774, 9: 2774, 560: 2774}, - {2773, 2773, 2773, 2773, 2773, 2773, 9: 2773, 560: 2773}, - {2772, 2772, 2772, 2772, 2772, 2772, 9: 2772, 560: 2772}, - {2771, 2771, 2771, 2771, 2771, 2771, 8: 591, 2771, 29: 591, 560: 2771}, + {2: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 10: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 53: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 551: 4991, 569: 4674, 575: 2362, 658: 4993, 724: 4994, 727: 4989, 817: 4990, 940: 4992, 970: 4988}, + {2792, 2792, 2792, 2792, 2792, 2792, 9: 2792, 560: 2792}, + {2791, 2791, 2791, 2791, 2791, 2791, 9: 2791, 560: 2791}, + {2790, 2790, 2790, 2790, 2790, 2790, 9: 2790, 560: 2790}, + {2789, 2789, 2789, 2789, 2789, 2789, 8: 595, 2789, 29: 595, 560: 2789}, // 1885 - {258: 4968}, - {258: 4967}, - {2768, 2768, 2768, 2768, 2768, 2768, 9: 2768, 560: 2768}, - {2767, 2767, 2767, 2767, 2767, 2767, 9: 2767, 560: 2767}, - {2763, 2763, 2763, 2763, 2763, 2763, 9: 2763, 560: 2763}, + {259: 4987}, + {259: 4986}, + {2786, 2786, 2786, 2786, 2786, 2786, 9: 2786, 560: 2786}, + {2785, 2785, 2785, 2785, 2785, 2785, 9: 2785, 560: 2785}, + {2781, 2781, 2781, 2781, 2781, 2781, 9: 2781, 560: 2781}, // 1890 - {2762, 2762, 2762, 2762, 2762, 2762, 9: 2762, 560: 2762}, - {57: 2356, 304: 2356, 327: 2356, 329: 2356, 549: 2356, 569: 4655, 817: 4961}, - {2: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 10: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 53: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 549: 2356, 569: 4655, 817: 4958}, - {205: 4957, 784: 4956}, - {2732, 2732, 2732, 2732, 2732, 2732, 9: 4954, 560: 2732}, + {2780, 2780, 2780, 2780, 2780, 2780, 9: 2780, 560: 2780}, + {57: 2362, 305: 2362, 329: 2362, 331: 2362, 549: 2362, 569: 4674, 817: 4980}, + {2: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 10: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 53: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 549: 2362, 569: 4674, 817: 4977}, + {206: 4976, 784: 4975}, + {2747, 2747, 2747, 2747, 2747, 2747, 9: 4973, 560: 2747}, // 1895 - {2731, 2731, 2731, 2731, 2731, 2731, 9: 2731, 560: 2731}, - {16: 2485, 18: 2485, 21: 2485, 552: 2485, 567: 2485, 723: 2485}, - {547: 2356, 569: 4655, 817: 4952}, - {2: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 10: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 53: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 547: 2356, 569: 4655, 817: 4950}, - {22: 4945, 246: 4946, 311: 4947}, + {2746, 2746, 2746, 2746, 2746, 2746, 9: 2746, 560: 2746}, + {16: 2498, 18: 2498, 21: 2498, 552: 2498, 567: 2498, 723: 2498}, + {547: 2362, 569: 4674, 817: 4971}, + {2: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 10: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 53: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 547: 2362, 569: 4674, 817: 4969}, + {22: 4964, 246: 4965, 312: 4966}, // 1900 - {2: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 10: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 53: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 547: 2356, 569: 4655, 817: 4943}, - {309: 4940}, - {309: 4937}, - {569: 4655, 573: 2356, 817: 4935}, - {569: 4655, 573: 2356, 817: 4933}, + {2: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 10: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 53: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 547: 2362, 569: 4674, 817: 4962}, + {310: 4959}, + {310: 4956}, + {569: 4674, 573: 2362, 817: 4954}, + {569: 4674, 573: 2362, 817: 4952}, // 1905 - {2: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 10: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 53: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 569: 4655, 817: 4931}, - {569: 4655, 573: 2356, 817: 4929}, - {2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 15: 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 2430, 52: 2430, 544: 2430, 2430, 2430, 549: 2430, 551: 2430, 2430, 2430, 560: 2430, 562: 2430, 2430, 566: 2430, 2430, 580: 2430, 622: 2430, 670: 2430, 723: 2430, 2430}, - {629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 15: 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 544: 629, 629, 629, 549: 629, 551: 629, 629, 629, 560: 629, 562: 629, 629, 566: 629, 629, 580: 629, 622: 629, 670: 629, 723: 629, 629}, - {16: 4485, 552: 4924, 567: 4486, 723: 4484, 868: 4923}, + {2: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 10: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 53: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 569: 4674, 817: 4950}, + {569: 4674, 573: 2362, 817: 4948}, + {2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 15: 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 52: 2436, 544: 2436, 2436, 2436, 549: 2436, 551: 2436, 2436, 2436, 560: 2436, 562: 2436, 2436, 566: 2436, 2436, 580: 2436, 622: 2436, 662: 2436, 723: 2436, 2436}, + {633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 15: 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, 544: 633, 633, 633, 549: 633, 551: 633, 633, 633, 560: 633, 562: 633, 633, 566: 633, 633, 580: 633, 622: 633, 662: 633, 723: 633, 633}, + {16: 4504, 552: 4943, 567: 4505, 723: 4503, 868: 4942}, // 1910 - {8: 4917, 29: 4918}, - {569: 4655, 573: 2356, 817: 4915}, - {569: 4655, 573: 2356, 817: 4913}, - {547: 2356, 569: 4655, 817: 4911}, - {569: 4655, 573: 2356, 817: 4909}, + {8: 4936, 29: 4937}, + {569: 4674, 573: 2362, 817: 4934}, + {569: 4674, 573: 2362, 817: 4932}, + {547: 2362, 569: 4674, 817: 4930}, + {569: 4674, 573: 2362, 817: 4928}, // 1915 - {569: 4655, 573: 2356, 817: 4907}, - {547: 2356, 569: 4655, 817: 4905}, - {547: 2356, 569: 4655, 817: 4903}, - {569: 4655, 573: 2356, 817: 4901}, - {569: 4655, 573: 2356, 817: 4899}, + {569: 4674, 573: 2362, 817: 4926}, + {547: 2362, 569: 4674, 817: 4924}, + {547: 2362, 569: 4674, 817: 4922}, + {569: 4674, 573: 2362, 817: 4920}, + {569: 4674, 573: 2362, 817: 4918}, // 1920 - {615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 15: 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, 544: 615, 615, 615, 549: 615, 551: 615, 615, 615, 560: 615, 562: 615, 615, 566: 615, 615, 580: 615, 622: 615, 670: 615, 723: 615, 615}, - {549: 2356, 569: 4655, 573: 2356, 817: 4897}, - {549: 2356, 569: 4655, 573: 2356, 817: 4894}, - {549: 2356, 569: 4655, 573: 2356, 817: 4891}, - {569: 4655, 573: 2356, 817: 4889}, + {619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 15: 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, 544: 619, 619, 619, 549: 619, 551: 619, 619, 619, 560: 619, 562: 619, 619, 566: 619, 619, 580: 619, 622: 619, 662: 619, 723: 619, 619}, + {549: 2362, 569: 4674, 573: 2362, 817: 4916}, + {549: 2362, 569: 4674, 573: 2362, 817: 4913}, + {549: 2362, 569: 4674, 573: 2362, 817: 4910}, + {569: 4674, 573: 2362, 817: 4908}, // 1925 - {569: 4655, 573: 2356, 817: 4887}, - {569: 4655, 573: 2356, 650: 2356, 2356, 817: 4885}, - {547: 2356, 569: 4655, 817: 4883}, - {547: 2356, 569: 4655, 817: 4881}, - {569: 4655, 573: 2356, 817: 4879}, + {569: 4674, 573: 2362, 817: 4906}, + {569: 4674, 573: 2362, 650: 2362, 2362, 817: 4904}, + {547: 2362, 569: 4674, 817: 4902}, + {547: 2362, 569: 4674, 817: 4900}, + {569: 4674, 573: 2362, 817: 4898}, // 1930 - {569: 4655, 573: 2356, 817: 4877}, - {549: 2356, 569: 4655, 573: 2356, 817: 4873}, - {2: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 10: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 53: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 547: 2356, 561: 2356, 569: 4655, 817: 4870}, - {545: 2356, 569: 4655, 817: 4865}, - {547: 2356, 569: 4655, 817: 4862}, + {569: 4674, 573: 2362, 817: 4896}, + {549: 2362, 569: 4674, 573: 2362, 817: 4892}, + {2: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 10: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 53: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 547: 2362, 561: 2362, 569: 4674, 817: 4889}, + {545: 2362, 569: 4674, 817: 4884}, + {547: 2362, 569: 4674, 817: 4881}, // 1935 - {2: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 10: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 53: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 569: 4655, 817: 4856}, - {547: 2356, 569: 4655, 817: 4854}, - {547: 2356, 569: 4655, 817: 4852}, - {586, 586, 586, 586, 586, 586, 586, 586, 586, 586, 15: 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, 544: 586, 586, 586, 549: 586, 551: 586, 586, 586, 560: 586, 562: 586, 586, 566: 586, 586, 580: 586, 622: 586, 670: 586, 723: 586, 586}, - {187: 2356, 262: 2356, 266: 2356, 302: 2356, 345: 2356, 362: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 549: 2356, 569: 4655, 817: 4836}, + {2: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 10: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 53: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 569: 4674, 817: 4875}, + {547: 2362, 569: 4674, 817: 4873}, + {547: 2362, 569: 4674, 817: 4871}, + {590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 15: 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, 544: 590, 590, 590, 549: 590, 551: 590, 590, 590, 560: 590, 562: 590, 590, 566: 590, 590, 580: 590, 622: 590, 662: 590, 723: 590, 590}, + {188: 2362, 263: 2362, 267: 2362, 303: 2362, 347: 2362, 364: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 549: 2362, 569: 4674, 817: 4855}, // 1940 - {187: 4839, 262: 4842, 266: 4838, 302: 4840, 345: 4841, 362: 4843, 4844, 4849, 4848, 4845, 4850, 4851, 4846, 4847, 549: 4837}, - {580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 15: 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, 544: 580, 580, 580, 549: 580, 551: 580, 580, 580, 560: 580, 562: 580, 580, 566: 580, 580, 580: 580, 622: 580, 670: 580, 723: 580, 580}, - {579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 15: 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, 544: 579, 579, 579, 549: 579, 551: 579, 579, 579, 560: 579, 562: 579, 579, 566: 579, 579, 580: 579, 622: 579, 670: 579, 723: 579, 579}, - {578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 15: 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, 544: 578, 578, 578, 549: 578, 551: 578, 578, 578, 560: 578, 562: 578, 578, 566: 578, 578, 580: 578, 622: 578, 670: 578, 723: 578, 578}, - {577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 15: 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, 577, 577, 577, 577, 577, 577, 577, 544: 577, 577, 577, 549: 577, 551: 577, 577, 577, 560: 577, 562: 577, 577, 566: 577, 577, 580: 577, 622: 577, 670: 577, 723: 577, 577}, + {188: 4858, 263: 4861, 267: 4857, 303: 4859, 347: 4860, 364: 4862, 4863, 4868, 4867, 4864, 4869, 4870, 4865, 4866, 549: 4856}, + {584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 15: 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 544: 584, 584, 584, 549: 584, 551: 584, 584, 584, 560: 584, 562: 584, 584, 566: 584, 584, 580: 584, 622: 584, 662: 584, 723: 584, 584}, + {583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 15: 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 544: 583, 583, 583, 549: 583, 551: 583, 583, 583, 560: 583, 562: 583, 583, 566: 583, 583, 580: 583, 622: 583, 662: 583, 723: 583, 583}, + {582, 582, 582, 582, 582, 582, 582, 582, 582, 582, 15: 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, 544: 582, 582, 582, 549: 582, 551: 582, 582, 582, 560: 582, 562: 582, 582, 566: 582, 582, 580: 582, 622: 582, 662: 582, 723: 582, 582}, + {581, 581, 581, 581, 581, 581, 581, 581, 581, 581, 15: 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, 544: 581, 581, 581, 549: 581, 551: 581, 581, 581, 560: 581, 562: 581, 581, 566: 581, 581, 580: 581, 622: 581, 662: 581, 723: 581, 581}, // 1945 - {576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 15: 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, 576, 576, 576, 576, 576, 576, 544: 576, 576, 576, 549: 576, 551: 576, 576, 576, 560: 576, 562: 576, 576, 566: 576, 576, 580: 576, 622: 576, 670: 576, 723: 576, 576}, - {575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 15: 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, 544: 575, 575, 575, 549: 575, 551: 575, 575, 575, 560: 575, 562: 575, 575, 566: 575, 575, 580: 575, 622: 575, 670: 575, 723: 575, 575}, - {574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 15: 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, 544: 574, 574, 574, 549: 574, 551: 574, 574, 574, 560: 574, 562: 574, 574, 566: 574, 574, 580: 574, 622: 574, 670: 574, 723: 574, 574}, - {573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 15: 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, 544: 573, 573, 573, 549: 573, 551: 573, 573, 573, 560: 573, 562: 573, 573, 566: 573, 573, 580: 573, 622: 573, 670: 573, 723: 573, 573}, - {572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 15: 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 544: 572, 572, 572, 549: 572, 551: 572, 572, 572, 560: 572, 562: 572, 572, 566: 572, 572, 580: 572, 622: 572, 670: 572, 723: 572, 572}, + {580, 580, 580, 580, 580, 580, 580, 580, 580, 580, 15: 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, 544: 580, 580, 580, 549: 580, 551: 580, 580, 580, 560: 580, 562: 580, 580, 566: 580, 580, 580: 580, 622: 580, 662: 580, 723: 580, 580}, + {579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 15: 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, 544: 579, 579, 579, 549: 579, 551: 579, 579, 579, 560: 579, 562: 579, 579, 566: 579, 579, 580: 579, 622: 579, 662: 579, 723: 579, 579}, + {578, 578, 578, 578, 578, 578, 578, 578, 578, 578, 15: 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, 544: 578, 578, 578, 549: 578, 551: 578, 578, 578, 560: 578, 562: 578, 578, 566: 578, 578, 580: 578, 622: 578, 662: 578, 723: 578, 578}, + {577, 577, 577, 577, 577, 577, 577, 577, 577, 577, 15: 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, 577, 577, 577, 577, 577, 577, 577, 544: 577, 577, 577, 549: 577, 551: 577, 577, 577, 560: 577, 562: 577, 577, 566: 577, 577, 580: 577, 622: 577, 662: 577, 723: 577, 577}, + {576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 15: 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, 576, 576, 576, 576, 576, 576, 544: 576, 576, 576, 549: 576, 551: 576, 576, 576, 560: 576, 562: 576, 576, 566: 576, 576, 580: 576, 622: 576, 662: 576, 723: 576, 576}, // 1950 - {571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 15: 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, 571, 571, 571, 571, 544: 571, 571, 571, 549: 571, 551: 571, 571, 571, 560: 571, 562: 571, 571, 566: 571, 571, 580: 571, 622: 571, 670: 571, 723: 571, 571}, - {570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 15: 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, 544: 570, 570, 570, 549: 570, 551: 570, 570, 570, 560: 570, 562: 570, 570, 566: 570, 570, 580: 570, 622: 570, 670: 570, 723: 570, 570}, - {569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 15: 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, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 544: 569, 569, 569, 549: 569, 551: 569, 569, 569, 560: 569, 562: 569, 569, 566: 569, 569, 580: 569, 622: 569, 670: 569, 723: 569, 569}, - {568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 15: 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, 568, 568, 568, 568, 568, 568, 544: 568, 568, 568, 549: 568, 551: 568, 568, 568, 560: 568, 562: 568, 568, 566: 568, 568, 580: 568, 622: 568, 670: 568, 723: 568, 568}, - {567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 15: 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 544: 567, 567, 567, 549: 567, 551: 567, 567, 567, 560: 567, 562: 567, 567, 566: 567, 567, 580: 567, 622: 567, 670: 567, 723: 567, 567}, + {575, 575, 575, 575, 575, 575, 575, 575, 575, 575, 15: 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, 544: 575, 575, 575, 549: 575, 551: 575, 575, 575, 560: 575, 562: 575, 575, 566: 575, 575, 580: 575, 622: 575, 662: 575, 723: 575, 575}, + {574, 574, 574, 574, 574, 574, 574, 574, 574, 574, 15: 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, 544: 574, 574, 574, 549: 574, 551: 574, 574, 574, 560: 574, 562: 574, 574, 566: 574, 574, 580: 574, 622: 574, 662: 574, 723: 574, 574}, + {573, 573, 573, 573, 573, 573, 573, 573, 573, 573, 15: 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, 544: 573, 573, 573, 549: 573, 551: 573, 573, 573, 560: 573, 562: 573, 573, 566: 573, 573, 580: 573, 622: 573, 662: 573, 723: 573, 573}, + {572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 15: 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 572, 544: 572, 572, 572, 549: 572, 551: 572, 572, 572, 560: 572, 562: 572, 572, 566: 572, 572, 580: 572, 622: 572, 662: 572, 723: 572, 572}, + {571, 571, 571, 571, 571, 571, 571, 571, 571, 571, 15: 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, 571, 571, 571, 571, 544: 571, 571, 571, 549: 571, 551: 571, 571, 571, 560: 571, 562: 571, 571, 566: 571, 571, 580: 571, 622: 571, 662: 571, 723: 571, 571}, // 1955 - {566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 15: 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, 544: 566, 566, 566, 549: 566, 551: 566, 566, 566, 560: 566, 562: 566, 566, 566: 566, 566, 580: 566, 622: 566, 670: 566, 723: 566, 566}, - {547: 4853}, - {593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 15: 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 544: 593, 593, 593, 549: 593, 551: 593, 593, 593, 560: 593, 562: 593, 593, 566: 593, 593, 580: 593, 622: 593, 670: 593, 723: 593, 593}, - {547: 4855}, - {594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 15: 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, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 544: 594, 594, 594, 549: 594, 551: 594, 594, 594, 560: 594, 562: 594, 594, 566: 594, 594, 580: 594, 622: 594, 670: 594, 723: 594, 594}, + {570, 570, 570, 570, 570, 570, 570, 570, 570, 570, 15: 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, 544: 570, 570, 570, 549: 570, 551: 570, 570, 570, 560: 570, 562: 570, 570, 566: 570, 570, 580: 570, 622: 570, 662: 570, 723: 570, 570}, + {547: 4872}, + {597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 15: 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 544: 597, 597, 597, 549: 597, 551: 597, 597, 597, 560: 597, 562: 597, 597, 566: 597, 597, 580: 597, 622: 597, 662: 597, 723: 597, 597}, + {547: 4874}, + {598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 15: 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, 598, 598, 598, 598, 598, 598, 598, 598, 598, 544: 598, 598, 598, 549: 598, 551: 598, 598, 598, 560: 598, 562: 598, 598, 566: 598, 598, 580: 598, 622: 598, 662: 598, 723: 598, 598}, // 1960 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4857, 3092, 3093, 3091}, - {557: 4858}, - {655: 4859}, - {547: 3641, 561: 3632, 573: 3636, 642: 3631, 644: 3633, 650: 3635, 3634, 3639, 654: 3640, 661: 3638, 792: 4860, 794: 3637}, - {127: 3823, 136: 3831, 143: 3819, 147: 3816, 149: 3818, 3815, 3817, 3821, 3822, 3827, 3826, 3825, 3829, 3830, 3824, 3828, 3820, 608: 3813, 3810, 3812, 3811, 3807, 3809, 3808, 3805, 3806, 3804, 3814, 902: 3803, 916: 4861}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4876, 3111, 3112, 3110}, + {557: 4877}, + {655: 4878}, + {547: 3660, 561: 3651, 573: 3655, 643: 3650, 3652, 650: 3654, 3653, 3658, 654: 3659, 663: 3657, 792: 4879, 794: 3656}, + {129: 3842, 138: 3850, 145: 3838, 149: 3835, 151: 3837, 3834, 3836, 3840, 3841, 3846, 3845, 3844, 3848, 3849, 3843, 3847, 3839, 608: 3832, 3829, 3831, 3830, 3826, 3828, 3827, 3824, 3825, 3823, 3833, 902: 3822, 916: 4880}, // 1965 - {595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 15: 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, 544: 595, 595, 595, 549: 595, 551: 595, 595, 595, 560: 595, 562: 595, 595, 566: 595, 595, 580: 595, 622: 595, 670: 595, 723: 595, 595}, - {547: 4864, 1183: 4863}, - {596, 596, 596, 596, 596, 596, 596, 596, 596, 596, 15: 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, 544: 596, 596, 596, 549: 596, 551: 596, 596, 596, 560: 596, 562: 596, 596, 566: 596, 596, 580: 596, 622: 596, 670: 596, 723: 596, 596}, - {148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 15: 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 544: 148, 148, 148, 549: 148, 551: 148, 148, 148, 560: 148, 562: 148, 148, 566: 148, 148, 571: 148, 580: 148, 622: 148, 670: 148, 723: 148, 148}, - {545: 4866}, + {599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 15: 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, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 544: 599, 599, 599, 549: 599, 551: 599, 599, 599, 560: 599, 562: 599, 599, 566: 599, 599, 580: 599, 622: 599, 662: 599, 723: 599, 599}, + {547: 4883, 1185: 4882}, + {600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 15: 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 544: 600, 600, 600, 549: 600, 551: 600, 600, 600, 560: 600, 562: 600, 600, 566: 600, 600, 580: 600, 622: 600, 662: 600, 723: 600, 600}, + {148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 15: 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 544: 148, 148, 148, 549: 148, 551: 148, 148, 148, 560: 148, 562: 148, 148, 566: 148, 148, 571: 148, 580: 148, 622: 148, 662: 148, 723: 148, 148}, + {545: 4885}, // 1970 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 768, 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 3985, 898: 4867, 1308: 4868}, - {767, 767, 9: 3987, 52: 767, 546: 767}, - {52: 4869}, - {597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 15: 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, 544: 597, 597, 597, 549: 597, 551: 597, 597, 597, 560: 597, 562: 597, 597, 566: 597, 597, 580: 597, 622: 597, 670: 597, 723: 597, 597}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 561: 4871, 786: 3793, 3092, 3093, 3091, 820: 4872}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 772, 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 4004, 898: 4886, 1311: 4887}, + {771, 771, 9: 4006, 52: 771, 546: 771}, + {52: 4888}, + {601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 15: 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 544: 601, 601, 601, 549: 601, 551: 601, 601, 601, 560: 601, 562: 601, 601, 566: 601, 601, 580: 601, 622: 601, 662: 601, 723: 601, 601}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 561: 4890, 786: 3812, 3111, 3112, 3110, 820: 4891}, // 1975 - {599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 15: 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, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 544: 599, 599, 599, 549: 599, 551: 599, 599, 599, 560: 599, 562: 599, 599, 566: 599, 599, 580: 599, 622: 599, 670: 599, 723: 599, 599}, - {598, 598, 598, 598, 598, 598, 598, 598, 598, 598, 15: 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, 598, 598, 598, 598, 598, 598, 598, 598, 598, 544: 598, 598, 598, 549: 598, 551: 598, 598, 598, 560: 598, 562: 598, 598, 566: 598, 598, 580: 598, 622: 598, 670: 598, 723: 598, 598}, - {549: 4875, 573: 3078, 814: 3922, 829: 4876, 1301: 4874}, - {602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 15: 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 544: 602, 602, 602, 549: 602, 551: 602, 602, 602, 560: 602, 562: 602, 602, 566: 602, 602, 580: 602, 622: 602, 670: 602, 723: 602, 602}, - {590, 590, 590, 590, 590, 590, 590, 590, 590, 590, 15: 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, 544: 590, 590, 590, 549: 590, 551: 590, 590, 590, 560: 590, 562: 590, 590, 566: 590, 590, 580: 590, 622: 590, 670: 590, 723: 590, 590}, + {603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 15: 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 544: 603, 603, 603, 549: 603, 551: 603, 603, 603, 560: 603, 562: 603, 603, 566: 603, 603, 580: 603, 622: 603, 662: 603, 723: 603, 603}, + {602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 15: 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, 544: 602, 602, 602, 549: 602, 551: 602, 602, 602, 560: 602, 562: 602, 602, 566: 602, 602, 580: 602, 622: 602, 662: 602, 723: 602, 602}, + {549: 4894, 573: 3097, 814: 3941, 829: 4895, 1303: 4893}, + {606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 15: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 544: 606, 606, 606, 549: 606, 551: 606, 606, 606, 560: 606, 562: 606, 606, 566: 606, 606, 580: 606, 622: 606, 662: 606, 723: 606, 606}, + {594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 15: 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, 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, 544: 594, 594, 594, 549: 594, 551: 594, 594, 594, 560: 594, 562: 594, 594, 566: 594, 594, 580: 594, 622: 594, 662: 594, 723: 594, 594}, // 1980 - {589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 15: 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, 589, 589, 589, 589, 589, 544: 589, 589, 589, 549: 589, 551: 589, 589, 589, 560: 589, 562: 589, 589, 566: 589, 589, 580: 589, 622: 589, 670: 589, 723: 589, 589}, - {573: 3078, 814: 3922, 829: 4878}, - {603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 15: 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, 544: 603, 603, 603, 549: 603, 551: 603, 603, 603, 560: 603, 562: 603, 603, 566: 603, 603, 580: 603, 622: 603, 670: 603, 723: 603, 603}, - {573: 3078, 814: 3922, 829: 4880}, - {604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 15: 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 544: 604, 604, 604, 549: 604, 551: 604, 604, 604, 560: 604, 562: 604, 604, 566: 604, 604, 580: 604, 622: 604, 670: 604, 723: 604, 604}, + {593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 15: 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, 544: 593, 593, 593, 549: 593, 551: 593, 593, 593, 560: 593, 562: 593, 593, 566: 593, 593, 580: 593, 622: 593, 662: 593, 723: 593, 593}, + {573: 3097, 814: 3941, 829: 4897}, + {607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 15: 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, 607, 607, 607, 607, 607, 607, 607, 607, 544: 607, 607, 607, 549: 607, 551: 607, 607, 607, 560: 607, 562: 607, 607, 566: 607, 607, 580: 607, 622: 607, 662: 607, 723: 607, 607}, + {573: 3097, 814: 3941, 829: 4899}, + {608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 15: 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, 544: 608, 608, 608, 549: 608, 551: 608, 608, 608, 560: 608, 562: 608, 608, 566: 608, 608, 580: 608, 622: 608, 662: 608, 723: 608, 608}, // 1985 - {547: 4882}, - {605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 15: 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, 605, 605, 605, 605, 605, 605, 605, 544: 605, 605, 605, 549: 605, 551: 605, 605, 605, 560: 605, 562: 605, 605, 566: 605, 605, 580: 605, 622: 605, 670: 605, 723: 605, 605}, - {547: 4884}, - {606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 15: 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, 544: 606, 606, 606, 549: 606, 551: 606, 606, 606, 560: 606, 562: 606, 606, 566: 606, 606, 580: 606, 622: 606, 670: 606, 723: 606, 606}, - {573: 4146, 650: 4148, 4147, 933: 4886}, + {547: 4901}, + {609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 15: 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 544: 609, 609, 609, 549: 609, 551: 609, 609, 609, 560: 609, 562: 609, 609, 566: 609, 609, 580: 609, 622: 609, 662: 609, 723: 609, 609}, + {547: 4903}, + {610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 15: 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 544: 610, 610, 610, 549: 610, 551: 610, 610, 610, 560: 610, 562: 610, 610, 566: 610, 610, 580: 610, 622: 610, 662: 610, 723: 610, 610}, + {573: 4165, 650: 4167, 4166, 933: 4905}, // 1990 - {607, 607, 607, 607, 607, 607, 607, 607, 607, 607, 15: 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, 607, 607, 607, 607, 607, 607, 607, 607, 544: 607, 607, 607, 549: 607, 551: 607, 607, 607, 560: 607, 562: 607, 607, 566: 607, 607, 580: 607, 622: 607, 670: 607, 723: 607, 607}, - {573: 3078, 814: 3922, 829: 4888}, - {608, 608, 608, 608, 608, 608, 608, 608, 608, 608, 15: 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, 544: 608, 608, 608, 549: 608, 551: 608, 608, 608, 560: 608, 562: 608, 608, 566: 608, 608, 580: 608, 622: 608, 670: 608, 723: 608, 608}, - {573: 3078, 814: 3922, 829: 4890}, - {609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 15: 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 609, 544: 609, 609, 609, 549: 609, 551: 609, 609, 609, 560: 609, 562: 609, 609, 566: 609, 609, 580: 609, 622: 609, 670: 609, 723: 609, 609}, + {611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 15: 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, 544: 611, 611, 611, 549: 611, 551: 611, 611, 611, 560: 611, 562: 611, 611, 566: 611, 611, 580: 611, 622: 611, 662: 611, 723: 611, 611}, + {573: 3097, 814: 3941, 829: 4907}, + {612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 15: 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, 544: 612, 612, 612, 549: 612, 551: 612, 612, 612, 560: 612, 562: 612, 612, 566: 612, 612, 580: 612, 622: 612, 662: 612, 723: 612, 612}, + {573: 3097, 814: 3941, 829: 4909}, + {613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 15: 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 544: 613, 613, 613, 549: 613, 551: 613, 613, 613, 560: 613, 562: 613, 613, 566: 613, 613, 580: 613, 622: 613, 662: 613, 723: 613, 613}, // 1995 - {549: 4893, 573: 3078, 814: 3922, 829: 4892}, - {611, 611, 611, 611, 611, 611, 611, 611, 611, 611, 15: 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, 544: 611, 611, 611, 549: 611, 551: 611, 611, 611, 560: 611, 562: 611, 611, 566: 611, 611, 580: 611, 622: 611, 670: 611, 723: 611, 611}, - {610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 15: 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 610, 544: 610, 610, 610, 549: 610, 551: 610, 610, 610, 560: 610, 562: 610, 610, 566: 610, 610, 580: 610, 622: 610, 670: 610, 723: 610, 610}, - {549: 4896, 573: 3078, 814: 3922, 829: 4895}, - {613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 15: 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, 544: 613, 613, 613, 549: 613, 551: 613, 613, 613, 560: 613, 562: 613, 613, 566: 613, 613, 580: 613, 622: 613, 670: 613, 723: 613, 613}, + {549: 4912, 573: 3097, 814: 3941, 829: 4911}, + {615, 615, 615, 615, 615, 615, 615, 615, 615, 615, 15: 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, 544: 615, 615, 615, 549: 615, 551: 615, 615, 615, 560: 615, 562: 615, 615, 566: 615, 615, 580: 615, 622: 615, 662: 615, 723: 615, 615}, + {614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 15: 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 544: 614, 614, 614, 549: 614, 551: 614, 614, 614, 560: 614, 562: 614, 614, 566: 614, 614, 580: 614, 622: 614, 662: 614, 723: 614, 614}, + {549: 4915, 573: 3097, 814: 3941, 829: 4914}, + {617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 15: 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 544: 617, 617, 617, 549: 617, 551: 617, 617, 617, 560: 617, 562: 617, 617, 566: 617, 617, 580: 617, 622: 617, 662: 617, 723: 617, 617}, // 2000 - {612, 612, 612, 612, 612, 612, 612, 612, 612, 612, 15: 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, 544: 612, 612, 612, 549: 612, 551: 612, 612, 612, 560: 612, 562: 612, 612, 566: 612, 612, 580: 612, 622: 612, 670: 612, 723: 612, 612}, - {549: 4875, 573: 3078, 814: 3922, 829: 4876, 1301: 4898}, - {614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 15: 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, 544: 614, 614, 614, 549: 614, 551: 614, 614, 614, 560: 614, 562: 614, 614, 566: 614, 614, 580: 614, 622: 614, 670: 614, 723: 614, 614}, - {573: 3078, 814: 3922, 829: 4900}, - {616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 15: 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, 544: 616, 616, 616, 549: 616, 551: 616, 616, 616, 560: 616, 562: 616, 616, 566: 616, 616, 580: 616, 622: 616, 670: 616, 723: 616, 616}, + {616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 15: 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, 544: 616, 616, 616, 549: 616, 551: 616, 616, 616, 560: 616, 562: 616, 616, 566: 616, 616, 580: 616, 622: 616, 662: 616, 723: 616, 616}, + {549: 4894, 573: 3097, 814: 3941, 829: 4895, 1303: 4917}, + {618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 15: 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, 544: 618, 618, 618, 549: 618, 551: 618, 618, 618, 560: 618, 562: 618, 618, 566: 618, 618, 580: 618, 622: 618, 662: 618, 723: 618, 618}, + {573: 3097, 814: 3941, 829: 4919}, + {620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 15: 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, 544: 620, 620, 620, 549: 620, 551: 620, 620, 620, 560: 620, 562: 620, 620, 566: 620, 620, 580: 620, 622: 620, 662: 620, 723: 620, 620}, // 2005 - {573: 3078, 814: 3922, 829: 4902}, - {617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 15: 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, 544: 617, 617, 617, 549: 617, 551: 617, 617, 617, 560: 617, 562: 617, 617, 566: 617, 617, 580: 617, 622: 617, 670: 617, 723: 617, 617}, - {547: 4904}, - {618, 618, 618, 618, 618, 618, 618, 618, 618, 618, 15: 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, 544: 618, 618, 618, 549: 618, 551: 618, 618, 618, 560: 618, 562: 618, 618, 566: 618, 618, 580: 618, 622: 618, 670: 618, 723: 618, 618}, - {547: 4906}, + {573: 3097, 814: 3941, 829: 4921}, + {621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 15: 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, 544: 621, 621, 621, 549: 621, 551: 621, 621, 621, 560: 621, 562: 621, 621, 566: 621, 621, 580: 621, 622: 621, 662: 621, 723: 621, 621}, + {547: 4923}, + {622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 15: 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, 622, 622, 622, 622, 622, 544: 622, 622, 622, 549: 622, 551: 622, 622, 622, 560: 622, 562: 622, 622, 566: 622, 622, 580: 622, 622: 622, 662: 622, 723: 622, 622}, + {547: 4925}, // 2010 - {619, 619, 619, 619, 619, 619, 619, 619, 619, 619, 15: 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, 544: 619, 619, 619, 549: 619, 551: 619, 619, 619, 560: 619, 562: 619, 619, 566: 619, 619, 580: 619, 622: 619, 670: 619, 723: 619, 619}, - {573: 3078, 814: 3922, 829: 4908}, - {620, 620, 620, 620, 620, 620, 620, 620, 620, 620, 15: 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, 544: 620, 620, 620, 549: 620, 551: 620, 620, 620, 560: 620, 562: 620, 620, 566: 620, 620, 580: 620, 622: 620, 670: 620, 723: 620, 620}, - {573: 3078, 814: 3922, 829: 4910}, - {621, 621, 621, 621, 621, 621, 621, 621, 621, 621, 15: 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, 544: 621, 621, 621, 549: 621, 551: 621, 621, 621, 560: 621, 562: 621, 621, 566: 621, 621, 580: 621, 622: 621, 670: 621, 723: 621, 621}, + {623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 15: 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 544: 623, 623, 623, 549: 623, 551: 623, 623, 623, 560: 623, 562: 623, 623, 566: 623, 623, 580: 623, 622: 623, 662: 623, 723: 623, 623}, + {573: 3097, 814: 3941, 829: 4927}, + {624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 15: 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 544: 624, 624, 624, 549: 624, 551: 624, 624, 624, 560: 624, 562: 624, 624, 566: 624, 624, 580: 624, 622: 624, 662: 624, 723: 624, 624}, + {573: 3097, 814: 3941, 829: 4929}, + {625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 15: 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, 544: 625, 625, 625, 549: 625, 551: 625, 625, 625, 560: 625, 562: 625, 625, 566: 625, 625, 580: 625, 622: 625, 662: 625, 723: 625, 625}, // 2015 - {547: 4912}, - {622, 622, 622, 622, 622, 622, 622, 622, 622, 622, 15: 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, 622, 622, 622, 622, 622, 544: 622, 622, 622, 549: 622, 551: 622, 622, 622, 560: 622, 562: 622, 622, 566: 622, 622, 580: 622, 622: 622, 670: 622, 723: 622, 622}, - {573: 3078, 814: 3922, 829: 4914}, - {623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 15: 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, 544: 623, 623, 623, 549: 623, 551: 623, 623, 623, 560: 623, 562: 623, 623, 566: 623, 623, 580: 623, 622: 623, 670: 623, 723: 623, 623}, - {573: 3078, 814: 3922, 829: 4916}, + {547: 4931}, + {626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 15: 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 544: 626, 626, 626, 549: 626, 551: 626, 626, 626, 560: 626, 562: 626, 626, 566: 626, 626, 580: 626, 622: 626, 662: 626, 723: 626, 626}, + {573: 3097, 814: 3941, 829: 4933}, + {627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 15: 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 544: 627, 627, 627, 549: 627, 551: 627, 627, 627, 560: 627, 562: 627, 627, 566: 627, 627, 580: 627, 622: 627, 662: 627, 723: 627, 627}, + {573: 3097, 814: 3941, 829: 4935}, // 2020 - {625, 625, 625, 625, 625, 625, 625, 625, 625, 625, 15: 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, 544: 625, 625, 625, 549: 625, 551: 625, 625, 625, 560: 625, 562: 625, 625, 566: 625, 625, 580: 625, 622: 625, 670: 625, 723: 625, 625}, - {569: 4655, 573: 2356, 817: 4921}, - {569: 4655, 573: 2356, 817: 4919}, - {573: 3078, 814: 3922, 829: 4920}, - {624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 15: 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, 544: 624, 624, 624, 549: 624, 551: 624, 624, 624, 560: 624, 562: 624, 624, 566: 624, 624, 580: 624, 622: 624, 670: 624, 723: 624, 624}, + {629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 15: 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, 544: 629, 629, 629, 549: 629, 551: 629, 629, 629, 560: 629, 562: 629, 629, 566: 629, 629, 580: 629, 622: 629, 662: 629, 723: 629, 629}, + {569: 4674, 573: 2362, 817: 4940}, + {569: 4674, 573: 2362, 817: 4938}, + {573: 3097, 814: 3941, 829: 4939}, + {628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 15: 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 544: 628, 628, 628, 549: 628, 551: 628, 628, 628, 560: 628, 562: 628, 628, 566: 628, 628, 580: 628, 622: 628, 662: 628, 723: 628, 628}, // 2025 - {573: 3078, 814: 3922, 829: 4922}, - {626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 15: 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, 544: 626, 626, 626, 549: 626, 551: 626, 626, 626, 560: 626, 562: 626, 626, 566: 626, 626, 580: 626, 622: 626, 670: 626, 723: 626, 626}, - {2: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 10: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 53: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 547: 2356, 569: 4655, 600: 2356, 817: 4927}, - {2: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 10: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 53: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 547: 2356, 569: 4655, 600: 2356, 817: 4925}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 600: 3791, 786: 3793, 3092, 3093, 3091, 820: 3790, 991: 4926}, + {573: 3097, 814: 3941, 829: 4941}, + {630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 15: 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 544: 630, 630, 630, 549: 630, 551: 630, 630, 630, 560: 630, 562: 630, 630, 566: 630, 630, 580: 630, 622: 630, 662: 630, 723: 630, 630}, + {2: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 10: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 53: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 547: 2362, 569: 4674, 600: 2362, 817: 4946}, + {2: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 10: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 53: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 547: 2362, 569: 4674, 600: 2362, 817: 4944}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 600: 3810, 786: 3812, 3111, 3112, 3110, 820: 3809, 991: 4945}, // 2030 - {627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 15: 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 627, 544: 627, 627, 627, 549: 627, 551: 627, 627, 627, 560: 627, 562: 627, 627, 566: 627, 627, 580: 627, 622: 627, 670: 627, 723: 627, 627}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 600: 4413, 786: 3793, 3092, 3093, 3091, 820: 4412, 921: 4928}, - {628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 15: 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 628, 544: 628, 628, 628, 549: 628, 551: 628, 628, 628, 560: 628, 562: 628, 628, 566: 628, 628, 580: 628, 622: 628, 670: 628, 723: 628, 628}, - {573: 3078, 814: 3922, 829: 4930}, - {2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 15: 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 2431, 52: 2431, 544: 2431, 2431, 2431, 549: 2431, 551: 2431, 2431, 2431, 560: 2431, 562: 2431, 2431, 566: 2431, 2431, 580: 2431, 622: 2431, 670: 2431, 723: 2431, 2431}, + {631, 631, 631, 631, 631, 631, 631, 631, 631, 631, 15: 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, 544: 631, 631, 631, 549: 631, 551: 631, 631, 631, 560: 631, 562: 631, 631, 566: 631, 631, 580: 631, 622: 631, 662: 631, 723: 631, 631}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 600: 4432, 786: 3812, 3111, 3112, 3110, 820: 4431, 921: 4947}, + {632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 15: 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, 544: 632, 632, 632, 549: 632, 551: 632, 632, 632, 560: 632, 562: 632, 632, 566: 632, 632, 580: 632, 622: 632, 662: 632, 723: 632, 632}, + {573: 3097, 814: 3941, 829: 4949}, + {2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 15: 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 52: 2437, 544: 2437, 2437, 2437, 549: 2437, 551: 2437, 2437, 2437, 560: 2437, 562: 2437, 2437, 566: 2437, 2437, 580: 2437, 622: 2437, 662: 2437, 723: 2437, 2437}, // 2035 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4932, 3092, 3093, 3091}, - {2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 15: 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 2432, 52: 2432, 544: 2432, 2432, 2432, 549: 2432, 551: 2432, 2432, 2432, 560: 2432, 562: 2432, 2432, 566: 2432, 2432, 580: 2432, 622: 2432, 670: 2432, 723: 2432, 2432}, - {573: 3078, 814: 3922, 829: 4934}, - {2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 15: 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 2433, 52: 2433, 544: 2433, 2433, 2433, 549: 2433, 551: 2433, 2433, 2433, 560: 2433, 562: 2433, 2433, 566: 2433, 2433, 580: 2433, 622: 2433, 670: 2433, 723: 2433, 2433}, - {573: 3078, 814: 3922, 829: 4936}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4951, 3111, 3112, 3110}, + {2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 15: 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 52: 2438, 544: 2438, 2438, 2438, 549: 2438, 551: 2438, 2438, 2438, 560: 2438, 562: 2438, 2438, 566: 2438, 2438, 580: 2438, 622: 2438, 662: 2438, 723: 2438, 2438}, + {573: 3097, 814: 3941, 829: 4953}, + {2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 15: 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 52: 2439, 544: 2439, 2439, 2439, 549: 2439, 551: 2439, 2439, 2439, 560: 2439, 562: 2439, 2439, 566: 2439, 2439, 580: 2439, 622: 2439, 662: 2439, 723: 2439, 2439}, + {573: 3097, 814: 3941, 829: 4955}, // 2040 - {2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 15: 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 2434, 52: 2434, 544: 2434, 2434, 2434, 549: 2434, 551: 2434, 2434, 2434, 560: 2434, 562: 2434, 2434, 566: 2434, 2434, 580: 2434, 622: 2434, 670: 2434, 723: 2434, 2434}, - {547: 2356, 569: 4655, 817: 4938}, - {547: 4939}, - {2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 15: 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 2435, 52: 2435, 544: 2435, 2435, 2435, 549: 2435, 551: 2435, 2435, 2435, 560: 2435, 562: 2435, 2435, 566: 2435, 2435, 580: 2435, 622: 2435, 670: 2435, 723: 2435, 2435}, - {547: 2356, 569: 4655, 817: 4941}, + {2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 15: 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 52: 2440, 544: 2440, 2440, 2440, 549: 2440, 551: 2440, 2440, 2440, 560: 2440, 562: 2440, 2440, 566: 2440, 2440, 580: 2440, 622: 2440, 662: 2440, 723: 2440, 2440}, + {547: 2362, 569: 4674, 817: 4957}, + {547: 4958}, + {2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 15: 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 2441, 52: 2441, 544: 2441, 2441, 2441, 549: 2441, 551: 2441, 2441, 2441, 560: 2441, 562: 2441, 2441, 566: 2441, 2441, 580: 2441, 622: 2441, 662: 2441, 723: 2441, 2441}, + {547: 2362, 569: 4674, 817: 4960}, // 2045 - {547: 4942}, - {2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 15: 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 2436, 52: 2436, 544: 2436, 2436, 2436, 549: 2436, 551: 2436, 2436, 2436, 560: 2436, 562: 2436, 2436, 566: 2436, 2436, 580: 2436, 622: 2436, 670: 2436, 723: 2436, 2436}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 786: 3793, 3092, 3093, 3091, 820: 4944}, - {2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 15: 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 2437, 52: 2437, 544: 2437, 2437, 2437, 549: 2437, 551: 2437, 2437, 2437, 560: 2437, 562: 2437, 2437, 566: 2437, 2437, 580: 2437, 622: 2437, 670: 2437, 723: 2437, 2437}, - {2: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 10: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 53: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 547: 2356, 569: 4655, 817: 4948}, + {547: 4961}, + {2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 15: 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 2442, 52: 2442, 544: 2442, 2442, 2442, 549: 2442, 551: 2442, 2442, 2442, 560: 2442, 562: 2442, 2442, 566: 2442, 2442, 580: 2442, 622: 2442, 662: 2442, 723: 2442, 2442}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 786: 3812, 3111, 3112, 3110, 820: 4963}, + {2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 15: 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 2443, 52: 2443, 544: 2443, 2443, 2443, 549: 2443, 551: 2443, 2443, 2443, 560: 2443, 562: 2443, 2443, 566: 2443, 2443, 580: 2443, 622: 2443, 662: 2443, 723: 2443, 2443}, + {2: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 10: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 53: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 547: 2362, 569: 4674, 817: 4967}, // 2050 - {601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 15: 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 601, 544: 601, 601, 601, 549: 601, 551: 601, 601, 601, 560: 601, 562: 601, 601, 566: 601, 601, 580: 601, 622: 601, 670: 601, 723: 601, 601}, - {600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 15: 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 544: 600, 600, 600, 549: 600, 551: 600, 600, 600, 560: 600, 562: 600, 600, 566: 600, 600, 580: 600, 622: 600, 670: 600, 723: 600, 600}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 786: 3793, 3092, 3093, 3091, 820: 4949}, - {2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 15: 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 2438, 52: 2438, 544: 2438, 2438, 2438, 549: 2438, 551: 2438, 2438, 2438, 560: 2438, 562: 2438, 2438, 566: 2438, 2438, 580: 2438, 622: 2438, 670: 2438, 723: 2438, 2438}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 786: 3793, 3092, 3093, 3091, 820: 4951}, + {605, 605, 605, 605, 605, 605, 605, 605, 605, 605, 15: 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, 605, 605, 605, 605, 605, 605, 605, 544: 605, 605, 605, 549: 605, 551: 605, 605, 605, 560: 605, 562: 605, 605, 566: 605, 605, 580: 605, 622: 605, 662: 605, 723: 605, 605}, + {604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 15: 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, 544: 604, 604, 604, 549: 604, 551: 604, 604, 604, 560: 604, 562: 604, 604, 566: 604, 604, 580: 604, 622: 604, 662: 604, 723: 604, 604}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 786: 3812, 3111, 3112, 3110, 820: 4968}, + {2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 15: 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 2444, 52: 2444, 544: 2444, 2444, 2444, 549: 2444, 551: 2444, 2444, 2444, 560: 2444, 562: 2444, 2444, 566: 2444, 2444, 580: 2444, 622: 2444, 662: 2444, 723: 2444, 2444}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 786: 3812, 3111, 3112, 3110, 820: 4970}, // 2055 - {2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 15: 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 2439, 52: 2439, 544: 2439, 2439, 2439, 549: 2439, 551: 2439, 2439, 2439, 560: 2439, 562: 2439, 2439, 566: 2439, 2439, 580: 2439, 622: 2439, 670: 2439, 723: 2439, 2439}, - {547: 4953}, - {2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 15: 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 2440, 52: 2440, 544: 2440, 2440, 2440, 549: 2440, 551: 2440, 2440, 2440, 560: 2440, 562: 2440, 2440, 566: 2440, 2440, 580: 2440, 622: 2440, 670: 2440, 723: 2440, 2440}, - {6: 4793, 4795, 592, 10: 4762, 15: 4812, 2486, 4810, 4749, 4814, 4801, 4830, 4794, 4797, 4796, 4799, 4800, 4802, 4809, 592, 4820, 4821, 4831, 4807, 4808, 4813, 4815, 4827, 4826, 4835, 4828, 4825, 4818, 4823, 4824, 4817, 4819, 4822, 4811, 4832, 4833, 98: 4764, 4785, 4786, 111: 4787, 141: 4767, 244: 4756, 260: 4750, 264: 4771, 267: 4772, 280: 4766, 286: 4782, 301: 4760, 310: 4768, 316: 4763, 336: 4773, 344: 4769, 351: 4783, 4784, 358: 4751, 546: 4781, 549: 4792, 552: 2486, 4829, 567: 2486, 571: 4753, 577: 4788, 579: 4770, 4780, 660: 4754, 717: 4759, 723: 2486, 4798, 738: 4775, 741: 4761, 743: 4789, 781: 4774, 4765, 4776, 785: 4755, 880: 4803, 906: 4805, 927: 4804, 948: 4806, 955: 4816, 960: 4834, 989: 4779, 1002: 4777, 1035: 4752, 1043: 4757, 1127: 4955, 1300: 4758, 1323: 4778}, - {2730, 2730, 2730, 2730, 2730, 2730, 9: 2730, 560: 2730}, + {2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 15: 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 2445, 52: 2445, 544: 2445, 2445, 2445, 549: 2445, 551: 2445, 2445, 2445, 560: 2445, 562: 2445, 2445, 566: 2445, 2445, 580: 2445, 622: 2445, 662: 2445, 723: 2445, 2445}, + {547: 4972}, + {2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 15: 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 2446, 52: 2446, 544: 2446, 2446, 2446, 549: 2446, 551: 2446, 2446, 2446, 560: 2446, 562: 2446, 2446, 566: 2446, 2446, 580: 2446, 622: 2446, 662: 2446, 723: 2446, 2446}, + {6: 4812, 4814, 596, 10: 4781, 15: 4831, 2499, 4829, 4768, 4833, 4820, 4849, 4813, 4816, 4815, 4818, 4819, 4821, 4828, 596, 4839, 4840, 4850, 4826, 4827, 4832, 4834, 4846, 4845, 4854, 4847, 4844, 4837, 4842, 4843, 4836, 4838, 4841, 4830, 4851, 4852, 100: 4783, 4804, 4805, 108: 4806, 143: 4786, 244: 4775, 261: 4769, 265: 4790, 268: 4791, 281: 4785, 287: 4801, 302: 4779, 311: 4787, 317: 4782, 338: 4792, 346: 4788, 353: 4802, 4803, 360: 4770, 546: 4800, 549: 4811, 552: 2499, 4848, 567: 2499, 571: 4772, 577: 4807, 579: 4789, 4799, 661: 4773, 717: 4778, 723: 2499, 4817, 738: 4794, 741: 4780, 743: 4808, 781: 4793, 4784, 4795, 785: 4774, 880: 4822, 906: 4824, 927: 4823, 948: 4825, 955: 4835, 960: 4853, 989: 4798, 1002: 4796, 1035: 4771, 1043: 4776, 1129: 4974, 1302: 4777, 1327: 4797}, + {2745, 2745, 2745, 2745, 2745, 2745, 9: 2745, 560: 2745}, // 2060 - {2744, 2744, 2744, 2744, 2744, 2744, 9: 2744, 560: 2744}, - {2743, 2743, 2743, 2743, 2743, 2743, 9: 2743, 560: 2743}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 549: 4959, 786: 4960, 3092, 3093, 3091}, - {2746, 2746, 2746, 2746, 2746, 2746, 9: 2746, 111: 2746, 560: 2746}, - {2745, 2745, 2745, 2745, 2745, 2745, 9: 2745, 111: 2745, 560: 2745}, + {2759, 2759, 2759, 2759, 2759, 2759, 9: 2759, 560: 2759}, + {2758, 2758, 2758, 2758, 2758, 2758, 9: 2758, 560: 2758}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 549: 4978, 786: 4979, 3111, 3112, 3110}, + {2761, 2761, 2761, 2761, 2761, 2761, 9: 2761, 108: 2761, 560: 2761}, + {2760, 2760, 2760, 2760, 2760, 2760, 9: 2760, 108: 2760, 560: 2760}, // 2065 - {57: 4966, 304: 4963, 327: 4964, 329: 4965, 549: 4962}, - {2751, 2751, 2751, 2751, 2751, 2751, 9: 2751, 560: 2751, 577: 2751}, - {2750, 2750, 2750, 2750, 2750, 2750, 9: 2750, 560: 2750, 577: 2750}, - {2749, 2749, 2749, 2749, 2749, 2749, 9: 2749, 560: 2749, 577: 2749}, - {2748, 2748, 2748, 2748, 2748, 2748, 9: 2748, 560: 2748, 577: 2748}, + {57: 4985, 305: 4982, 329: 4983, 331: 4984, 549: 4981}, + {2766, 2766, 2766, 2766, 2766, 2766, 9: 2766, 560: 2766, 577: 2766}, + {2765, 2765, 2765, 2765, 2765, 2765, 9: 2765, 560: 2765, 577: 2765}, + {2764, 2764, 2764, 2764, 2764, 2764, 9: 2764, 560: 2764, 577: 2764}, + {2763, 2763, 2763, 2763, 2763, 2763, 9: 2763, 560: 2763, 577: 2763}, // 2070 - {2747, 2747, 2747, 2747, 2747, 2747, 9: 2747, 560: 2747, 577: 2747}, - {2769, 2769, 2769, 2769, 2769, 2769, 9: 2769, 560: 2769}, - {2770, 2770, 2770, 2770, 2770, 2770, 9: 2770, 560: 2770}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4982, 3092, 3093, 3091}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 4981}, + {2762, 2762, 2762, 2762, 2762, 2762, 9: 2762, 560: 2762, 577: 2762}, + {2787, 2787, 2787, 2787, 2787, 2787, 9: 2787, 560: 2787}, + {2788, 2788, 2788, 2788, 2788, 2788, 9: 2788, 560: 2788}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5001, 3111, 3112, 3110}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 5000}, // 2075 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 4980}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 4979}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4976, 3092, 3093, 3091}, - {2: 2742, 2742, 2742, 2742, 2742, 2742, 2742, 10: 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 53: 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 2742, 545: 2742, 556: 2742, 572: 2742, 593: 2742}, - {2: 2741, 2741, 2741, 2741, 2741, 2741, 2741, 10: 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 53: 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 2741, 545: 2741, 556: 2741, 572: 2741, 593: 2741}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 4999}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 4998}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4995, 3111, 3112, 3110}, + {2: 2757, 2757, 2757, 2757, 2757, 2757, 2757, 10: 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 53: 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 2757, 545: 2757, 556: 2757, 572: 2757, 593: 2757}, + {2: 2756, 2756, 2756, 2756, 2756, 2756, 2756, 10: 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 53: 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 2756, 545: 2756, 556: 2756, 572: 2756, 593: 2756}, // 2080 - {726: 4977}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4978, 3092, 3093, 3091}, - {2775, 2775, 2775, 2775, 2775, 2775, 9: 2775, 560: 2775}, - {2776, 2776, 2776, 2776, 2776, 2776, 9: 2776, 560: 2776}, - {2777, 2777, 2777, 2777, 2777, 2777, 9: 2777, 560: 2777}, + {727: 4996}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4997, 3111, 3112, 3110}, + {2793, 2793, 2793, 2793, 2793, 2793, 9: 2793, 560: 2793}, + {2794, 2794, 2794, 2794, 2794, 2794, 9: 2794, 560: 2794}, + {2795, 2795, 2795, 2795, 2795, 2795, 9: 2795, 560: 2795}, // 2085 - {2778, 2778, 2778, 2778, 2778, 2778, 9: 2778, 560: 2778}, - {726: 4983}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4984, 3092, 3093, 3091}, - {2779, 2779, 2779, 2779, 2779, 2779, 9: 2779, 560: 2779}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 5000}, + {2796, 2796, 2796, 2796, 2796, 2796, 9: 2796, 560: 2796}, + {727: 5002}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5003, 3111, 3112, 3110}, + {2797, 2797, 2797, 2797, 2797, 2797, 9: 2797, 560: 2797}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 5019}, // 2090 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4995, 3092, 3093, 3091}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4991, 3092, 3093, 3091}, - {2: 2737, 2737, 2737, 2737, 2737, 2737, 2737, 10: 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 53: 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 2737, 545: 2737, 593: 2737}, - {2: 637, 637, 637, 637, 637, 637, 637, 10: 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, 637, 637, 637, 637, 637, 637, 53: 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637, 637}, - {2: 636, 636, 636, 636, 636, 636, 636, 10: 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 53: 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, 636}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5014, 3111, 3112, 3110}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5010, 3111, 3112, 3110}, + {2: 2752, 2752, 2752, 2752, 2752, 2752, 2752, 10: 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 53: 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 545: 2752, 593: 2752}, + {2: 641, 641, 641, 641, 641, 641, 641, 10: 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, 641, 641, 641, 641, 641, 641, 641, 53: 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 641}, + {2: 640, 640, 640, 640, 640, 640, 640, 10: 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 53: 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640, 640}, // 2095 - {115: 4994, 118: 4993, 977: 4992}, - {2764, 2764, 2764, 2764, 2764, 2764, 9: 2764, 560: 2764}, - {2126, 2126, 2126, 2126, 2126, 2126, 2126, 9: 2126, 19: 2126, 52: 2126, 111: 2126, 113: 2126, 2126, 2126, 2126, 118: 2126, 546: 2126, 556: 2126, 560: 2126, 577: 2126}, - {2125, 2125, 2125, 2125, 2125, 2125, 2125, 9: 2125, 19: 2125, 52: 2125, 111: 2125, 113: 2125, 2125, 2125, 2125, 118: 2125, 546: 2125, 556: 2125, 560: 2125, 577: 2125}, - {201: 4997, 548: 3868, 550: 3867, 932: 4998, 1059: 4996}, + {116: 5013, 118: 5012, 977: 5011}, + {2782, 2782, 2782, 2782, 2782, 2782, 9: 2782, 560: 2782}, + {2130, 2130, 2130, 2130, 2130, 2130, 2130, 9: 2130, 19: 2130, 52: 2130, 58: 2130, 94: 2130, 108: 2130, 114: 2130, 2130, 2130, 2130, 2130, 546: 2130, 556: 2130, 560: 2130, 577: 2130}, + {2129, 2129, 2129, 2129, 2129, 2129, 2129, 9: 2129, 19: 2129, 52: 2129, 58: 2129, 94: 2129, 108: 2129, 114: 2129, 2129, 2129, 2129, 2129, 546: 2129, 556: 2129, 560: 2129, 577: 2129}, + {202: 5016, 548: 3887, 550: 3886, 932: 5017, 1059: 5015}, // 2100 - {2766, 2766, 2766, 2766, 2766, 2766, 9: 2766, 560: 2766}, - {2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 52: 2631, 544: 2631, 548: 2631, 2631, 2631, 2631, 2631, 560: 2631, 2631, 669: 2631, 716: 2631, 2631, 719: 2631, 2631, 2631, 2631}, - {201: 4999}, - {2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 52: 2630, 544: 2630, 548: 2630, 2630, 2630, 2630, 2630, 560: 2630, 2630, 669: 2630, 716: 2630, 2630, 719: 2630, 2630, 2630, 2630}, - {571: 5001, 741: 5002}, + {2784, 2784, 2784, 2784, 2784, 2784, 9: 2784, 560: 2784}, + {2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 2646, 52: 2646, 544: 2646, 548: 2646, 2646, 2646, 2646, 2646, 560: 2646, 2646, 658: 2646, 710: 2646, 717: 2646, 2646, 2646, 2646, 722: 2646}, + {202: 5018}, + {2645, 2645, 2645, 2645, 2645, 2645, 2645, 2645, 2645, 2645, 2645, 2645, 2645, 2645, 2645, 52: 2645, 544: 2645, 548: 2645, 2645, 2645, 2645, 2645, 560: 2645, 2645, 658: 2645, 710: 2645, 717: 2645, 2645, 2645, 2645, 722: 2645}, + {571: 5020, 741: 5021}, // 2105 - {549: 5004}, - {549: 5003}, - {2780, 2780, 2780, 2780, 2780, 2780, 9: 2780, 560: 2780}, - {545: 5006, 547: 3641, 557: 5008, 5009, 561: 3632, 573: 3636, 642: 3631, 644: 3633, 650: 3635, 3634, 3639, 654: 3640, 661: 3638, 792: 5007, 794: 3637, 1098: 5005}, - {2782, 2782, 2782, 2782, 2782, 2782, 9: 2782, 560: 2782}, + {549: 5023}, + {549: 5022}, + {2798, 2798, 2798, 2798, 2798, 2798, 9: 2798, 560: 2798}, + {545: 5025, 547: 3660, 557: 5027, 5028, 561: 3651, 573: 3655, 643: 3650, 3652, 650: 3654, 3653, 3658, 654: 3659, 663: 3657, 792: 5026, 794: 3656, 1099: 5024}, + {2800, 2800, 2800, 2800, 2800, 2800, 9: 2800, 560: 2800}, // 2110 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 5012}, - {2537, 2537, 2537, 2537, 2537, 2537, 2537, 2537, 2537, 2537, 2537, 2537, 2537, 2537, 2537, 52: 2537, 544: 2537, 548: 2537, 2537, 2537, 2537, 2537, 560: 2537, 2537, 669: 2537, 716: 2537, 2537, 719: 2537, 2537, 2537, 2537}, - {573: 4146, 650: 4148, 4147, 933: 5011}, - {573: 4146, 650: 4148, 4147, 933: 5010}, - {2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 52: 2535, 544: 2535, 548: 2535, 2535, 2535, 2535, 2535, 560: 2535, 2535, 669: 2535, 716: 2535, 2535, 719: 2535, 2535, 2535, 2535}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 5031}, + {2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 52: 2550, 544: 2550, 548: 2550, 2550, 2550, 2550, 2550, 560: 2550, 2550, 658: 2550, 710: 2550, 717: 2550, 2550, 2550, 2550, 722: 2550}, + {573: 4165, 650: 4167, 4166, 933: 5030}, + {573: 4165, 650: 4167, 4166, 933: 5029}, + {2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 2548, 52: 2548, 544: 2548, 548: 2548, 2548, 2548, 2548, 2548, 560: 2548, 2548, 658: 2548, 710: 2548, 717: 2548, 2548, 2548, 2548, 722: 2548}, // 2115 - {2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 52: 2536, 544: 2536, 548: 2536, 2536, 2536, 2536, 2536, 560: 2536, 2536, 669: 2536, 716: 2536, 2536, 719: 2536, 2536, 2536, 2536}, - {52: 5013, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {2781, 2781, 2781, 2781, 2781, 2781, 9: 2781, 560: 2781}, - {2: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 10: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 53: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 593: 5016, 869: 5015}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 5018}, + {2549, 2549, 2549, 2549, 2549, 2549, 2549, 2549, 2549, 2549, 2549, 2549, 2549, 2549, 2549, 52: 2549, 544: 2549, 548: 2549, 2549, 2549, 2549, 2549, 560: 2549, 2549, 658: 2549, 710: 2549, 717: 2549, 2549, 2549, 2549, 722: 2549}, + {52: 5032, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {2799, 2799, 2799, 2799, 2799, 2799, 9: 2799, 560: 2799}, + {2: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 10: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 53: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 593: 5035, 869: 5034}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 5037}, // 2120 - {659: 5017}, - {2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 53: 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 2152, 547: 2152, 549: 2152, 560: 2152, 575: 2152, 645: 2152}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 5020, 971: 5019}, - {2736, 2736, 2736, 2736, 2736, 2736, 9: 2736, 5310, 5311, 560: 2736, 1048: 5309}, - {12: 5022, 127: 5074, 136: 5075, 183: 5064, 185: 5085, 5084, 5047, 5087, 196: 5086, 198: 5066, 200: 5044, 209: 5081, 214: 5053, 5043, 5062, 220: 5070, 5069, 223: 5073, 567: 5068, 571: 5063, 600: 5058, 723: 5067, 746: 5050, 5048, 5072, 5071, 5045, 5041, 5035, 5049, 755: 5059, 5042, 5077, 5051, 5052, 762: 5036, 5037, 5038, 5039, 5040, 5065, 5079, 5083, 5078, 5033, 5082, 5034, 5046, 5032, 5076, 5031, 5080, 969: 5054, 1040: 5056, 1044: 5030, 5060, 5027, 1053: 5025, 1061: 5028, 5029, 1069: 5026, 1074: 5055, 1078: 5023, 5057, 1099: 5024, 1103: 5061, 1106: 5021, 1115: 5088}, + {660: 5036}, + {2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 53: 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 2158, 547: 2158, 549: 2158, 560: 2158, 575: 2158, 645: 2158}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 5039, 971: 5038}, + {2751, 2751, 2751, 2751, 2751, 2751, 9: 2751, 5336, 5337, 560: 2751, 1048: 5335}, + {12: 5041, 129: 5093, 138: 5094, 184: 5083, 186: 5104, 5103, 5066, 5106, 197: 5105, 199: 5085, 201: 5063, 210: 5100, 215: 5072, 5062, 5081, 220: 5089, 5088, 223: 5092, 567: 5087, 571: 5082, 600: 5077, 723: 5086, 746: 5069, 5067, 5091, 5090, 5064, 5060, 5054, 5068, 755: 5078, 5061, 5096, 5070, 5071, 762: 5055, 5056, 5057, 5058, 5059, 5084, 5098, 5102, 5097, 5052, 5101, 5053, 5065, 5051, 5095, 5050, 5099, 969: 5073, 1040: 5075, 1044: 5049, 5079, 5046, 1053: 5044, 1061: 5047, 5048, 1070: 5045, 1075: 5074, 1079: 5042, 5076, 1101: 5043, 1105: 5080, 1108: 5040, 1117: 5107}, // 2125 - {2591, 2591, 2591, 2591, 2591, 2591, 5167, 5173, 5161, 2591, 2591, 2591, 5165, 5174, 5172, 52: 2591, 544: 5166, 548: 3868, 5164, 3867, 2598, 5171, 560: 2591, 5160, 669: 2635, 716: 5158, 2727, 719: 5163, 5156, 5178, 5175, 932: 5159, 945: 5168, 1028: 5170, 1047: 5176, 1063: 5169, 1086: 5162, 1143: 5177, 5308}, - {2591, 2591, 2591, 2591, 2591, 2591, 5167, 5173, 5161, 2591, 2591, 2591, 5165, 5174, 5172, 52: 2591, 544: 5166, 548: 3868, 5164, 3867, 2598, 5171, 560: 2591, 5160, 669: 2635, 716: 5158, 2727, 719: 5163, 5156, 5178, 5175, 932: 5159, 945: 5168, 1028: 5170, 1047: 5176, 1063: 5169, 1086: 5162, 1143: 5177, 5157}, - {565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 52: 565, 544: 565, 548: 565, 565, 565, 565, 565, 560: 565, 565, 669: 565, 716: 565, 565, 719: 565, 565, 565, 565}, - {564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 52: 564, 544: 564, 548: 564, 564, 564, 564, 564, 560: 564, 564, 669: 564, 716: 564, 564, 719: 564, 564, 564, 564}, - {563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 52: 563, 544: 563, 548: 563, 563, 563, 563, 563, 560: 563, 563, 669: 563, 716: 563, 563, 719: 563, 563, 563, 563}, + {2604, 2604, 2604, 2604, 2604, 2604, 5186, 5192, 5180, 2604, 2604, 2604, 5184, 5193, 5191, 52: 2604, 544: 5185, 548: 3887, 5183, 3886, 2611, 5190, 560: 2604, 5179, 658: 2650, 710: 5177, 717: 2742, 5182, 5175, 5197, 722: 5194, 932: 5178, 945: 5187, 1028: 5189, 1047: 5195, 1063: 5188, 1087: 5181, 1145: 5196, 5334}, + {2604, 2604, 2604, 2604, 2604, 2604, 5186, 5192, 5180, 2604, 2604, 2604, 5184, 5193, 5191, 52: 2604, 544: 5185, 548: 3887, 5183, 3886, 2611, 5190, 560: 2604, 5179, 658: 2650, 710: 5177, 717: 2742, 5182, 5175, 5197, 722: 5194, 932: 5178, 945: 5187, 1028: 5189, 1047: 5195, 1063: 5188, 1087: 5181, 1145: 5196, 5176}, + {569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 569, 52: 569, 544: 569, 548: 569, 569, 569, 569, 569, 560: 569, 569, 658: 569, 710: 569, 717: 569, 569, 569, 569, 722: 569}, + {568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, 52: 568, 544: 568, 548: 568, 568, 568, 568, 568, 560: 568, 568, 658: 568, 710: 568, 717: 568, 568, 568, 568, 722: 568}, + {567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, 52: 567, 544: 567, 548: 567, 567, 567, 567, 567, 560: 567, 567, 658: 567, 710: 567, 717: 567, 567, 567, 567, 722: 567}, // 2130 - {476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 52: 476, 59: 476, 544: 476, 4461, 548: 476, 476, 476, 476, 476, 560: 476, 476, 669: 476, 716: 476, 476, 719: 476, 476, 476, 476, 833: 476, 476, 856: 4462, 900: 5154}, - {471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 52: 471, 59: 471, 544: 471, 548: 471, 471, 471, 471, 471, 560: 471, 471, 669: 471, 716: 471, 471, 719: 471, 471, 471, 471, 833: 471, 471, 996: 5153}, - {469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 52: 469, 59: 469, 544: 469, 4466, 548: 469, 469, 469, 469, 469, 560: 469, 469, 669: 469, 716: 469, 469, 719: 469, 469, 469, 469, 833: 469, 469, 856: 4467, 1020: 5151, 1027: 4468}, - {469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, 52: 469, 59: 469, 544: 469, 4466, 548: 469, 469, 469, 469, 469, 560: 469, 469, 669: 469, 716: 469, 469, 719: 469, 469, 469, 469, 833: 469, 469, 856: 4467, 1020: 5149, 1027: 4468}, - {476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 52: 476, 544: 476, 4461, 548: 476, 476, 476, 476, 476, 560: 476, 476, 669: 476, 716: 476, 476, 719: 476, 476, 476, 476, 856: 4462, 900: 5148}, + {480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 52: 480, 60: 480, 544: 480, 4480, 548: 480, 480, 480, 480, 480, 560: 480, 480, 658: 480, 710: 480, 717: 480, 480, 480, 480, 722: 480, 833: 480, 480, 856: 4481, 900: 5173}, + {475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 52: 475, 60: 475, 544: 475, 548: 475, 475, 475, 475, 475, 560: 475, 475, 658: 475, 710: 475, 717: 475, 475, 475, 475, 722: 475, 833: 475, 475, 996: 5172}, + {473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 52: 473, 60: 473, 544: 473, 4485, 548: 473, 473, 473, 473, 473, 560: 473, 473, 658: 473, 710: 473, 717: 473, 473, 473, 473, 722: 473, 833: 473, 473, 856: 4486, 1020: 5170, 1027: 4487}, + {473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 52: 473, 60: 473, 544: 473, 4485, 548: 473, 473, 473, 473, 473, 560: 473, 473, 658: 473, 710: 473, 717: 473, 473, 473, 473, 722: 473, 833: 473, 473, 856: 4486, 1020: 5168, 1027: 4487}, + {480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 52: 480, 544: 480, 4480, 548: 480, 480, 480, 480, 480, 560: 480, 480, 658: 480, 710: 480, 717: 480, 480, 480, 480, 722: 480, 856: 4481, 900: 5167}, // 2135 - {557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 52: 557, 59: 557, 544: 557, 557, 548: 557, 557, 557, 557, 557, 560: 557, 557, 669: 557, 716: 557, 557, 719: 557, 557, 557, 557, 833: 557, 557}, - {556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 52: 556, 59: 556, 544: 556, 556, 548: 556, 556, 556, 556, 556, 560: 556, 556, 669: 556, 716: 556, 556, 719: 556, 556, 556, 556, 833: 556, 556}, - {555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 52: 555, 59: 555, 544: 555, 555, 548: 555, 555, 555, 555, 555, 560: 555, 555, 669: 555, 716: 555, 555, 719: 555, 555, 555, 555, 833: 555, 555}, - {554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 52: 554, 59: 554, 544: 554, 554, 548: 554, 554, 554, 554, 554, 560: 554, 554, 669: 554, 716: 554, 554, 719: 554, 554, 554, 554, 833: 554, 554}, - {553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 52: 553, 59: 553, 544: 553, 553, 548: 553, 553, 553, 553, 553, 560: 553, 553, 669: 553, 716: 553, 553, 719: 553, 553, 553, 553, 833: 553, 553}, + {561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 52: 561, 60: 561, 544: 561, 561, 548: 561, 561, 561, 561, 561, 560: 561, 561, 658: 561, 710: 561, 717: 561, 561, 561, 561, 722: 561, 833: 561, 561}, + {560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 52: 560, 60: 560, 544: 560, 560, 548: 560, 560, 560, 560, 560, 560: 560, 560, 658: 560, 710: 560, 717: 560, 560, 560, 560, 722: 560, 833: 560, 560}, + {559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 52: 559, 60: 559, 544: 559, 559, 548: 559, 559, 559, 559, 559, 560: 559, 559, 658: 559, 710: 559, 717: 559, 559, 559, 559, 722: 559, 833: 559, 559}, + {558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 52: 558, 60: 558, 544: 558, 558, 548: 558, 558, 558, 558, 558, 560: 558, 558, 658: 558, 710: 558, 717: 558, 558, 558, 558, 722: 558, 833: 558, 558}, + {557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 557, 52: 557, 60: 557, 544: 557, 557, 548: 557, 557, 557, 557, 557, 560: 557, 557, 658: 557, 710: 557, 717: 557, 557, 557, 557, 722: 557, 833: 557, 557}, // 2140 - {552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 52: 552, 59: 552, 544: 552, 552, 548: 552, 552, 552, 552, 552, 560: 552, 552, 669: 552, 716: 552, 552, 719: 552, 552, 552, 552, 833: 552, 552}, - {551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 52: 551, 59: 551, 544: 551, 551, 548: 551, 551, 551, 551, 551, 560: 551, 551, 669: 551, 716: 551, 551, 719: 551, 551, 551, 551, 833: 551, 551}, - {550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 52: 550, 59: 550, 544: 550, 550, 548: 550, 550, 550, 550, 550, 560: 550, 550, 669: 550, 716: 550, 550, 719: 550, 550, 550, 550, 833: 550, 550}, - {549, 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, 52: 549, 59: 549, 544: 549, 549, 548: 549, 549, 549, 549, 549, 560: 549, 549, 669: 549, 716: 549, 549, 719: 549, 549, 549, 549, 833: 549, 549}, - {548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 52: 548, 59: 548, 544: 548, 548, 548: 548, 548, 548, 548, 548, 560: 548, 548, 669: 548, 716: 548, 548, 719: 548, 548, 548, 548, 833: 548, 548}, + {556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 52: 556, 60: 556, 544: 556, 556, 548: 556, 556, 556, 556, 556, 560: 556, 556, 658: 556, 710: 556, 717: 556, 556, 556, 556, 722: 556, 833: 556, 556}, + {555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, 52: 555, 60: 555, 544: 555, 555, 548: 555, 555, 555, 555, 555, 560: 555, 555, 658: 555, 710: 555, 717: 555, 555, 555, 555, 722: 555, 833: 555, 555}, + {554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, 52: 554, 60: 554, 544: 554, 554, 548: 554, 554, 554, 554, 554, 560: 554, 554, 658: 554, 710: 554, 717: 554, 554, 554, 554, 722: 554, 833: 554, 554}, + {553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, 52: 553, 60: 553, 544: 553, 553, 548: 553, 553, 553, 553, 553, 560: 553, 553, 658: 553, 710: 553, 717: 553, 553, 553, 553, 722: 553, 833: 553, 553}, + {552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, 52: 552, 60: 552, 544: 552, 552, 548: 552, 552, 552, 552, 552, 560: 552, 552, 658: 552, 710: 552, 717: 552, 552, 552, 552, 722: 552, 833: 552, 552}, // 2145 - {547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, 52: 547, 59: 547, 544: 547, 547, 548: 547, 547, 547, 547, 547, 560: 547, 547, 669: 547, 716: 547, 547, 719: 547, 547, 547, 547, 833: 547, 547}, - {546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, 52: 546, 59: 546, 544: 546, 546, 548: 546, 546, 546, 546, 546, 560: 546, 546, 669: 546, 716: 546, 546, 719: 546, 546, 546, 546, 833: 546, 546}, - {545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 545, 52: 545, 59: 545, 544: 545, 548: 545, 545, 545, 545, 545, 560: 545, 545, 669: 545, 716: 545, 545, 719: 545, 545, 545, 545, 833: 545, 545}, - {544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 52: 544, 59: 544, 544: 544, 548: 544, 544, 544, 544, 544, 560: 544, 544, 669: 544, 716: 544, 544, 719: 544, 544, 544, 544, 833: 544, 544}, - {540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 52: 540, 59: 540, 544: 540, 540, 548: 540, 540, 540, 540, 540, 560: 540, 540, 669: 540, 716: 540, 540, 719: 540, 540, 540, 540, 833: 540, 540}, + {551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, 52: 551, 60: 551, 544: 551, 551, 548: 551, 551, 551, 551, 551, 560: 551, 551, 658: 551, 710: 551, 717: 551, 551, 551, 551, 722: 551, 833: 551, 551}, + {550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 52: 550, 60: 550, 544: 550, 550, 548: 550, 550, 550, 550, 550, 560: 550, 550, 658: 550, 710: 550, 717: 550, 550, 550, 550, 722: 550, 833: 550, 550}, + {549, 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, 52: 549, 60: 549, 544: 549, 548: 549, 549, 549, 549, 549, 560: 549, 549, 658: 549, 710: 549, 717: 549, 549, 549, 549, 722: 549, 833: 549, 549}, + {548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, 52: 548, 60: 548, 544: 548, 548: 548, 548, 548, 548, 548, 560: 548, 548, 658: 548, 710: 548, 717: 548, 548, 548, 548, 722: 548, 833: 548, 548}, + {544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, 52: 544, 60: 544, 544: 544, 544, 548: 544, 544, 544, 544, 544, 560: 544, 544, 658: 544, 710: 544, 717: 544, 544, 544, 544, 722: 544, 833: 544, 544}, // 2150 - {539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 52: 539, 59: 539, 544: 539, 539, 548: 539, 539, 539, 539, 539, 560: 539, 539, 669: 539, 716: 539, 539, 719: 539, 539, 539, 539, 833: 539, 539}, - {538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 52: 538, 59: 538, 544: 538, 538, 548: 538, 538, 538, 538, 538, 560: 538, 538, 669: 538, 716: 538, 538, 719: 538, 538, 538, 538, 833: 538, 538}, - {537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 52: 537, 59: 537, 544: 537, 537, 548: 537, 537, 537, 537, 537, 560: 537, 537, 669: 537, 716: 537, 537, 719: 537, 537, 537, 537, 833: 537, 537}, - {536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 52: 536, 59: 536, 544: 536, 536, 548: 536, 536, 536, 536, 536, 560: 536, 536, 669: 536, 716: 536, 536, 719: 536, 536, 536, 536, 833: 536, 536}, - {535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 52: 535, 59: 535, 544: 535, 535, 548: 535, 535, 535, 535, 535, 560: 535, 535, 669: 535, 716: 535, 535, 719: 535, 535, 535, 535, 833: 535, 535, 1438: 5147}, + {543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, 52: 543, 60: 543, 544: 543, 543, 548: 543, 543, 543, 543, 543, 560: 543, 543, 658: 543, 710: 543, 717: 543, 543, 543, 543, 722: 543, 833: 543, 543}, + {542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, 52: 542, 60: 542, 544: 542, 542, 548: 542, 542, 542, 542, 542, 560: 542, 542, 658: 542, 710: 542, 717: 542, 542, 542, 542, 722: 542, 833: 542, 542}, + {541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, 52: 541, 60: 541, 544: 541, 541, 548: 541, 541, 541, 541, 541, 560: 541, 541, 658: 541, 710: 541, 717: 541, 541, 541, 541, 722: 541, 833: 541, 541}, + {540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, 52: 540, 60: 540, 544: 540, 540, 548: 540, 540, 540, 540, 540, 560: 540, 540, 658: 540, 710: 540, 717: 540, 540, 540, 540, 722: 540, 833: 540, 540}, + {539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, 52: 539, 60: 539, 544: 539, 539, 548: 539, 539, 539, 539, 539, 560: 539, 539, 658: 539, 710: 539, 717: 539, 539, 539, 539, 722: 539, 833: 539, 539, 1443: 5166}, // 2155 - {533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 52: 533, 59: 533, 544: 533, 533, 548: 533, 533, 533, 533, 533, 560: 533, 533, 669: 533, 716: 533, 533, 719: 533, 533, 533, 533, 833: 533, 533}, - {532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 52: 532, 59: 532, 544: 532, 532, 548: 532, 532, 532, 532, 532, 560: 532, 532, 669: 532, 716: 532, 532, 719: 532, 532, 532, 532, 833: 532, 532}, - {531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 52: 531, 544: 531, 531, 548: 531, 531, 531, 531, 531, 560: 531, 531, 669: 531, 716: 531, 531, 719: 531, 531, 531, 531}, - {460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 16: 4485, 52: 460, 544: 460, 4461, 548: 460, 460, 460, 460, 460, 560: 460, 460, 567: 4486, 600: 4482, 669: 460, 716: 460, 460, 719: 460, 460, 460, 460, 4484, 856: 5144, 868: 4483, 911: 5145}, - {460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 16: 4485, 52: 460, 544: 460, 4461, 548: 460, 460, 460, 460, 460, 560: 460, 460, 567: 4486, 600: 4482, 669: 460, 716: 460, 460, 719: 460, 460, 460, 460, 4484, 856: 5141, 868: 4483, 911: 5142}, + {537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 537, 52: 537, 60: 537, 544: 537, 537, 548: 537, 537, 537, 537, 537, 560: 537, 537, 658: 537, 710: 537, 717: 537, 537, 537, 537, 722: 537, 833: 537, 537}, + {536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, 52: 536, 60: 536, 544: 536, 536, 548: 536, 536, 536, 536, 536, 560: 536, 536, 658: 536, 710: 536, 717: 536, 536, 536, 536, 722: 536, 833: 536, 536}, + {535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, 52: 535, 544: 535, 535, 548: 535, 535, 535, 535, 535, 560: 535, 535, 658: 535, 710: 535, 717: 535, 535, 535, 535, 722: 535}, + {464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 16: 4504, 52: 464, 544: 464, 4480, 548: 464, 464, 464, 464, 464, 560: 464, 464, 567: 4505, 600: 4501, 658: 464, 710: 464, 717: 464, 464, 464, 464, 722: 464, 4503, 856: 5163, 868: 4502, 911: 5164}, + {464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 16: 4504, 52: 464, 544: 464, 4480, 548: 464, 464, 464, 464, 464, 560: 464, 464, 567: 4505, 600: 4501, 658: 464, 710: 464, 717: 464, 464, 464, 464, 722: 464, 4503, 856: 5160, 868: 4502, 911: 5161}, // 2160 - {545: 4461, 856: 5139}, - {545: 4461, 856: 5137}, - {476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 52: 476, 544: 476, 4461, 548: 476, 476, 476, 476, 476, 560: 476, 476, 669: 476, 716: 476, 476, 719: 476, 476, 476, 476, 856: 4462, 900: 5136}, - {545: 4461, 856: 5135}, - {522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 52: 522, 544: 522, 548: 522, 522, 522, 522, 522, 560: 522, 522, 669: 522, 716: 522, 522, 719: 522, 522, 522, 522}, + {545: 4480, 856: 5158}, + {545: 4480, 856: 5156}, + {480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 52: 480, 544: 480, 4480, 548: 480, 480, 480, 480, 480, 560: 480, 480, 658: 480, 710: 480, 717: 480, 480, 480, 480, 722: 480, 856: 4481, 900: 5155}, + {545: 4480, 856: 5154}, + {526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 52: 526, 544: 526, 548: 526, 526, 526, 526, 526, 560: 526, 526, 658: 526, 710: 526, 717: 526, 526, 526, 526, 722: 526}, // 2165 - {460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 16: 4485, 52: 460, 162: 5119, 5121, 165: 5120, 544: 460, 548: 460, 460, 460, 460, 460, 560: 460, 460, 567: 4486, 600: 4482, 669: 460, 716: 460, 460, 719: 460, 460, 460, 460, 4484, 868: 4483, 911: 5118, 1003: 5134}, - {545: 5130}, - {545: 5123}, - {518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 52: 518, 544: 518, 548: 518, 518, 518, 518, 518, 560: 518, 518, 669: 518, 716: 518, 518, 719: 518, 518, 518, 518}, - {460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 16: 4485, 52: 460, 162: 5119, 5121, 165: 5120, 544: 460, 548: 460, 460, 460, 460, 460, 560: 460, 460, 567: 5116, 600: 4482, 669: 460, 716: 460, 460, 719: 460, 460, 460, 460, 5115, 748: 5072, 5071, 755: 5117, 868: 4483, 911: 5118, 1003: 5114, 1040: 5113}, + {464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 16: 4504, 52: 464, 164: 5138, 5140, 167: 5139, 544: 464, 548: 464, 464, 464, 464, 464, 560: 464, 464, 567: 4505, 600: 4501, 658: 464, 710: 464, 717: 464, 464, 464, 464, 722: 464, 4503, 868: 4502, 911: 5137, 1003: 5153}, + {545: 5149}, + {545: 5142}, + {522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, 52: 522, 544: 522, 548: 522, 522, 522, 522, 522, 560: 522, 522, 658: 522, 710: 522, 717: 522, 522, 522, 522, 722: 522}, + {464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 16: 4504, 52: 464, 164: 5138, 5140, 167: 5139, 544: 464, 548: 464, 464, 464, 464, 464, 560: 464, 464, 567: 5135, 600: 4501, 658: 464, 710: 464, 717: 464, 464, 464, 464, 722: 464, 5134, 748: 5091, 5090, 755: 5136, 868: 4502, 911: 5137, 1003: 5133, 1040: 5132}, // 2170 - {463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, 52: 463, 544: 463, 463, 548: 463, 463, 463, 463, 463, 560: 463, 463, 624: 4455, 669: 463, 716: 463, 463, 719: 463, 463, 463, 463, 1244: 5111}, - {514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 16: 514, 52: 514, 544: 514, 514, 548: 514, 514, 514, 514, 514, 560: 514, 514, 567: 514, 600: 514, 669: 514, 716: 514, 514, 719: 514, 514, 514, 514, 514, 961: 5110}, - {513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 16: 513, 52: 513, 544: 513, 513, 548: 513, 513, 513, 513, 513, 560: 513, 513, 567: 513, 600: 513, 669: 513, 716: 513, 513, 719: 513, 513, 513, 513, 513, 961: 5109}, - {512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 16: 512, 52: 512, 544: 512, 512, 548: 512, 512, 512, 512, 512, 560: 512, 512, 567: 512, 600: 512, 669: 512, 716: 512, 512, 719: 512, 512, 512, 512, 512, 748: 5107, 5106, 961: 5108}, - {567: 5101, 723: 5100, 748: 5103, 5102}, + {467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 52: 467, 544: 467, 467, 548: 467, 467, 467, 467, 467, 560: 467, 467, 624: 4474, 658: 467, 710: 467, 717: 467, 467, 467, 467, 722: 467, 1246: 5130}, + {518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, 16: 518, 52: 518, 544: 518, 518, 548: 518, 518, 518, 518, 518, 560: 518, 518, 567: 518, 600: 518, 658: 518, 710: 518, 717: 518, 518, 518, 518, 722: 518, 518, 961: 5129}, + {517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 16: 517, 52: 517, 544: 517, 517, 548: 517, 517, 517, 517, 517, 560: 517, 517, 567: 517, 600: 517, 658: 517, 710: 517, 717: 517, 517, 517, 517, 722: 517, 517, 961: 5128}, + {516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 16: 516, 52: 516, 544: 516, 516, 548: 516, 516, 516, 516, 516, 560: 516, 516, 567: 516, 600: 516, 658: 516, 710: 516, 717: 516, 516, 516, 516, 722: 516, 516, 748: 5126, 5125, 961: 5127}, + {567: 5120, 723: 5119, 748: 5122, 5121}, // 2175 - {507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 16: 507, 52: 507, 162: 507, 507, 165: 507, 544: 507, 507, 548: 507, 507, 507, 507, 507, 560: 507, 507, 567: 507, 600: 507, 669: 507, 716: 507, 507, 719: 507, 507, 507, 507, 507}, - {506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 16: 506, 52: 506, 162: 506, 506, 165: 506, 544: 506, 506, 548: 506, 506, 506, 506, 506, 560: 506, 506, 567: 506, 600: 506, 669: 506, 716: 506, 506, 719: 506, 506, 506, 506, 506}, - {545: 503}, - {497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 52: 497, 59: 497, 544: 497, 497, 548: 497, 497, 497, 497, 497, 560: 497, 497, 669: 497, 716: 497, 497, 719: 497, 497, 497, 497, 833: 497, 497}, - {496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 52: 496, 59: 496, 544: 496, 496, 548: 496, 496, 496, 496, 496, 560: 496, 496, 669: 496, 716: 496, 496, 719: 496, 496, 496, 496, 833: 496, 496}, + {511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 16: 511, 52: 511, 164: 511, 511, 167: 511, 544: 511, 511, 548: 511, 511, 511, 511, 511, 560: 511, 511, 567: 511, 600: 511, 658: 511, 710: 511, 717: 511, 511, 511, 511, 722: 511, 511}, + {510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 16: 510, 52: 510, 164: 510, 510, 167: 510, 544: 510, 510, 548: 510, 510, 510, 510, 510, 560: 510, 510, 567: 510, 600: 510, 658: 510, 710: 510, 717: 510, 510, 510, 510, 722: 510, 510}, + {545: 507}, + {501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 52: 501, 60: 501, 544: 501, 501, 548: 501, 501, 501, 501, 501, 560: 501, 501, 658: 501, 710: 501, 717: 501, 501, 501, 501, 722: 501, 833: 501, 501}, + {500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 52: 500, 60: 500, 544: 500, 500, 548: 500, 500, 500, 500, 500, 560: 500, 500, 658: 500, 710: 500, 717: 500, 500, 500, 500, 722: 500, 833: 500, 500}, // 2180 - {495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 52: 495, 544: 495, 548: 495, 495, 495, 495, 495, 560: 495, 495, 669: 495, 716: 495, 495, 719: 495, 495, 495, 495}, - {476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 52: 476, 544: 476, 4461, 548: 476, 476, 476, 476, 476, 560: 476, 476, 669: 476, 716: 476, 476, 719: 476, 476, 476, 476, 856: 4462, 900: 5099}, - {493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 52: 493, 544: 493, 548: 493, 493, 493, 493, 493, 560: 493, 493, 669: 493, 716: 493, 493, 719: 493, 493, 493, 493}, - {492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 52: 492, 544: 492, 548: 492, 492, 492, 492, 492, 560: 492, 492, 669: 492, 716: 492, 492, 719: 492, 492, 492, 492}, - {490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 16: 490, 52: 490, 162: 490, 490, 165: 490, 544: 490, 548: 490, 490, 490, 490, 490, 560: 490, 490, 567: 490, 600: 490, 669: 490, 716: 490, 490, 719: 490, 490, 490, 490, 490}, + {499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 52: 499, 544: 499, 548: 499, 499, 499, 499, 499, 560: 499, 499, 658: 499, 710: 499, 717: 499, 499, 499, 499, 722: 499}, + {480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 52: 480, 544: 480, 4480, 548: 480, 480, 480, 480, 480, 560: 480, 480, 658: 480, 710: 480, 717: 480, 480, 480, 480, 722: 480, 856: 4481, 900: 5118}, + {497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 52: 497, 544: 497, 548: 497, 497, 497, 497, 497, 560: 497, 497, 658: 497, 710: 497, 717: 497, 497, 497, 497, 722: 497}, + {496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, 52: 496, 544: 496, 548: 496, 496, 496, 496, 496, 560: 496, 496, 658: 496, 710: 496, 717: 496, 496, 496, 496, 722: 496}, + {494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 16: 494, 52: 494, 164: 494, 494, 167: 494, 544: 494, 548: 494, 494, 494, 494, 494, 560: 494, 494, 567: 494, 600: 494, 658: 494, 710: 494, 717: 494, 494, 494, 494, 722: 494, 494}, // 2185 - {476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 16: 476, 52: 476, 162: 476, 476, 165: 476, 544: 476, 4461, 548: 476, 476, 476, 476, 476, 560: 476, 476, 567: 476, 600: 476, 669: 476, 716: 476, 476, 719: 476, 476, 476, 476, 476, 856: 4462, 900: 5098}, - {488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 16: 488, 52: 488, 162: 488, 488, 165: 488, 544: 488, 548: 488, 488, 488, 488, 488, 560: 488, 488, 567: 488, 600: 488, 669: 488, 716: 488, 488, 719: 488, 488, 488, 488, 488}, - {487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 16: 487, 52: 487, 162: 487, 487, 165: 487, 544: 487, 548: 487, 487, 487, 487, 487, 560: 487, 487, 567: 487, 600: 487, 669: 487, 716: 487, 487, 719: 487, 487, 487, 487, 487}, - {482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 52: 482, 544: 482, 548: 482, 482, 482, 482, 482, 560: 482, 482, 669: 482, 716: 482, 482, 719: 482, 482, 482, 482}, - {476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 52: 476, 544: 476, 4461, 548: 476, 476, 476, 476, 476, 560: 476, 476, 669: 476, 716: 476, 476, 719: 476, 476, 476, 476, 856: 4462, 900: 5097}, + {480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 16: 480, 52: 480, 164: 480, 480, 167: 480, 544: 480, 4480, 548: 480, 480, 480, 480, 480, 560: 480, 480, 567: 480, 600: 480, 658: 480, 710: 480, 717: 480, 480, 480, 480, 722: 480, 480, 856: 4481, 900: 5117}, + {492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, 16: 492, 52: 492, 164: 492, 492, 167: 492, 544: 492, 548: 492, 492, 492, 492, 492, 560: 492, 492, 567: 492, 600: 492, 658: 492, 710: 492, 717: 492, 492, 492, 492, 722: 492, 492}, + {491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 16: 491, 52: 491, 164: 491, 491, 167: 491, 544: 491, 548: 491, 491, 491, 491, 491, 560: 491, 491, 567: 491, 600: 491, 658: 491, 710: 491, 717: 491, 491, 491, 491, 722: 491, 491}, + {486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 52: 486, 544: 486, 548: 486, 486, 486, 486, 486, 560: 486, 486, 658: 486, 710: 486, 717: 486, 486, 486, 486, 722: 486}, + {480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 52: 480, 544: 480, 4480, 548: 480, 480, 480, 480, 480, 560: 480, 480, 658: 480, 710: 480, 717: 480, 480, 480, 480, 722: 480, 856: 4481, 900: 5116}, // 2190 - {476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 52: 476, 544: 476, 4461, 548: 476, 476, 476, 476, 476, 560: 476, 476, 669: 476, 716: 476, 476, 719: 476, 476, 476, 476, 856: 4462, 900: 5096}, - {476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 52: 476, 544: 476, 4461, 548: 476, 476, 476, 476, 476, 560: 476, 476, 669: 476, 716: 476, 476, 719: 476, 476, 476, 476, 856: 4462, 900: 5095}, - {476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 52: 476, 59: 476, 544: 476, 4461, 548: 476, 476, 476, 476, 476, 560: 476, 476, 669: 476, 716: 476, 476, 719: 476, 476, 476, 476, 833: 476, 476, 856: 4462, 900: 5089}, - {471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 52: 471, 59: 471, 544: 471, 548: 471, 471, 471, 471, 471, 560: 471, 471, 669: 471, 716: 471, 471, 719: 471, 471, 471, 471, 833: 471, 471, 996: 5090}, - {478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 52: 478, 59: 5092, 544: 478, 548: 478, 478, 478, 478, 478, 560: 478, 478, 669: 478, 716: 478, 478, 719: 478, 478, 478, 478, 833: 5091, 5093, 995: 5094}, + {480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 52: 480, 544: 480, 4480, 548: 480, 480, 480, 480, 480, 560: 480, 480, 658: 480, 710: 480, 717: 480, 480, 480, 480, 722: 480, 856: 4481, 900: 5115}, + {480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 52: 480, 544: 480, 4480, 548: 480, 480, 480, 480, 480, 560: 480, 480, 658: 480, 710: 480, 717: 480, 480, 480, 480, 722: 480, 856: 4481, 900: 5114}, + {480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 52: 480, 60: 480, 544: 480, 4480, 548: 480, 480, 480, 480, 480, 560: 480, 480, 658: 480, 710: 480, 717: 480, 480, 480, 480, 722: 480, 833: 480, 480, 856: 4481, 900: 5108}, + {475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 52: 475, 60: 475, 544: 475, 548: 475, 475, 475, 475, 475, 560: 475, 475, 658: 475, 710: 475, 717: 475, 475, 475, 475, 722: 475, 833: 475, 475, 996: 5109}, + {482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, 52: 482, 60: 5111, 544: 482, 548: 482, 482, 482, 482, 482, 560: 482, 482, 658: 482, 710: 482, 717: 482, 482, 482, 482, 722: 482, 833: 5110, 5112, 995: 5113}, // 2195 - {474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 52: 474, 59: 474, 544: 474, 548: 474, 474, 474, 474, 474, 560: 474, 474, 669: 474, 716: 474, 474, 719: 474, 474, 474, 474, 833: 474, 474}, - {473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 52: 473, 59: 473, 544: 473, 548: 473, 473, 473, 473, 473, 560: 473, 473, 669: 473, 716: 473, 473, 719: 473, 473, 473, 473, 833: 473, 473}, - {472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, 52: 472, 59: 472, 544: 472, 548: 472, 472, 472, 472, 472, 560: 472, 472, 669: 472, 716: 472, 472, 719: 472, 472, 472, 472, 833: 472, 472}, - {470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, 52: 470, 59: 470, 544: 470, 548: 470, 470, 470, 470, 470, 560: 470, 470, 669: 470, 716: 470, 470, 719: 470, 470, 470, 470, 833: 470, 470}, - {479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 479, 52: 479, 544: 479, 548: 479, 479, 479, 479, 479, 560: 479, 479, 669: 479, 716: 479, 479, 719: 479, 479, 479, 479}, + {478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, 52: 478, 60: 478, 544: 478, 548: 478, 478, 478, 478, 478, 560: 478, 478, 658: 478, 710: 478, 717: 478, 478, 478, 478, 722: 478, 833: 478, 478}, + {477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, 52: 477, 60: 477, 544: 477, 548: 477, 477, 477, 477, 477, 560: 477, 477, 658: 477, 710: 477, 717: 477, 477, 477, 477, 722: 477, 833: 477, 477}, + {476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 52: 476, 60: 476, 544: 476, 548: 476, 476, 476, 476, 476, 560: 476, 476, 658: 476, 710: 476, 717: 476, 476, 476, 476, 722: 476, 833: 476, 476}, + {474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, 52: 474, 60: 474, 544: 474, 548: 474, 474, 474, 474, 474, 560: 474, 474, 658: 474, 710: 474, 717: 474, 474, 474, 474, 722: 474, 833: 474, 474}, + {483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 52: 483, 544: 483, 548: 483, 483, 483, 483, 483, 560: 483, 483, 658: 483, 710: 483, 717: 483, 483, 483, 483, 722: 483}, // 2200 - {480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 52: 480, 544: 480, 548: 480, 480, 480, 480, 480, 560: 480, 480, 669: 480, 716: 480, 480, 719: 480, 480, 480, 480}, - {481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, 52: 481, 544: 481, 548: 481, 481, 481, 481, 481, 560: 481, 481, 669: 481, 716: 481, 481, 719: 481, 481, 481, 481}, - {489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 16: 489, 52: 489, 162: 489, 489, 165: 489, 544: 489, 548: 489, 489, 489, 489, 489, 560: 489, 489, 567: 489, 600: 489, 669: 489, 716: 489, 489, 719: 489, 489, 489, 489, 489}, - {494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, 52: 494, 544: 494, 548: 494, 494, 494, 494, 494, 560: 494, 494, 669: 494, 716: 494, 494, 719: 494, 494, 494, 494}, - {511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, 16: 511, 52: 511, 544: 511, 511, 548: 511, 511, 511, 511, 511, 560: 511, 511, 567: 511, 600: 511, 669: 511, 716: 511, 511, 719: 511, 511, 511, 511, 511, 961: 5105}, + {484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 52: 484, 544: 484, 548: 484, 484, 484, 484, 484, 560: 484, 484, 658: 484, 710: 484, 717: 484, 484, 484, 484, 722: 484}, + {485, 485, 485, 485, 485, 485, 485, 485, 485, 485, 485, 485, 485, 485, 485, 52: 485, 544: 485, 548: 485, 485, 485, 485, 485, 560: 485, 485, 658: 485, 710: 485, 717: 485, 485, 485, 485, 722: 485}, + {493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, 16: 493, 52: 493, 164: 493, 493, 167: 493, 544: 493, 548: 493, 493, 493, 493, 493, 560: 493, 493, 567: 493, 600: 493, 658: 493, 710: 493, 717: 493, 493, 493, 493, 722: 493, 493}, + {498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 52: 498, 544: 498, 548: 498, 498, 498, 498, 498, 560: 498, 498, 658: 498, 710: 498, 717: 498, 498, 498, 498, 722: 498}, + {515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 16: 515, 52: 515, 544: 515, 515, 548: 515, 515, 515, 515, 515, 560: 515, 515, 567: 515, 600: 515, 658: 515, 710: 515, 717: 515, 515, 515, 515, 722: 515, 515, 961: 5124}, // 2205 - {510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 16: 510, 52: 510, 544: 510, 510, 548: 510, 510, 510, 510, 510, 560: 510, 510, 567: 510, 600: 510, 669: 510, 716: 510, 510, 719: 510, 510, 510, 510, 510, 961: 5104}, - {545: 505}, + {514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 514, 16: 514, 52: 514, 544: 514, 514, 548: 514, 514, 514, 514, 514, 560: 514, 514, 567: 514, 600: 514, 658: 514, 710: 514, 717: 514, 514, 514, 514, 722: 514, 514, 961: 5123}, + {545: 509}, + {545: 508}, + {545: 503}, {545: 504}, - {545: 499}, - {545: 500}, // 2210 + {545: 506}, + {545: 505}, {545: 502}, - {545: 501}, - {545: 498}, - {508, 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, 16: 508, 52: 508, 162: 508, 508, 165: 508, 544: 508, 508, 548: 508, 508, 508, 508, 508, 560: 508, 508, 567: 508, 600: 508, 669: 508, 716: 508, 508, 719: 508, 508, 508, 508, 508}, - {509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 16: 509, 52: 509, 162: 509, 509, 165: 509, 544: 509, 509, 548: 509, 509, 509, 509, 509, 560: 509, 509, 567: 509, 600: 509, 669: 509, 716: 509, 509, 719: 509, 509, 509, 509, 509}, + {512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 16: 512, 52: 512, 164: 512, 512, 167: 512, 544: 512, 512, 548: 512, 512, 512, 512, 512, 560: 512, 512, 567: 512, 600: 512, 658: 512, 710: 512, 717: 512, 512, 512, 512, 722: 512, 512}, + {513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, 16: 513, 52: 513, 164: 513, 513, 167: 513, 544: 513, 513, 548: 513, 513, 513, 513, 513, 560: 513, 513, 567: 513, 600: 513, 658: 513, 710: 513, 717: 513, 513, 513, 513, 722: 513, 513}, // 2215 - {476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, 52: 476, 544: 476, 4461, 548: 476, 476, 476, 476, 476, 560: 476, 476, 669: 476, 716: 476, 476, 719: 476, 476, 476, 476, 856: 4462, 900: 5112}, - {515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, 52: 515, 544: 515, 548: 515, 515, 515, 515, 515, 560: 515, 515, 669: 515, 716: 515, 515, 719: 515, 515, 515, 515}, - {460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 16: 4485, 52: 460, 162: 5119, 5121, 165: 5120, 544: 460, 548: 460, 460, 460, 460, 460, 560: 460, 460, 567: 4486, 600: 4482, 669: 460, 716: 460, 460, 719: 460, 460, 460, 460, 4484, 868: 4483, 911: 5118, 1003: 5122}, - {516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, 52: 516, 544: 516, 548: 516, 516, 516, 516, 516, 560: 516, 516, 669: 516, 716: 516, 516, 719: 516, 516, 516, 516}, - {571: 4488, 961: 5110}, + {480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 52: 480, 544: 480, 4480, 548: 480, 480, 480, 480, 480, 560: 480, 480, 658: 480, 710: 480, 717: 480, 480, 480, 480, 722: 480, 856: 4481, 900: 5131}, + {519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 52: 519, 544: 519, 548: 519, 519, 519, 519, 519, 560: 519, 519, 658: 519, 710: 519, 717: 519, 519, 519, 519, 722: 519}, + {464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 16: 4504, 52: 464, 164: 5138, 5140, 167: 5139, 544: 464, 548: 464, 464, 464, 464, 464, 560: 464, 464, 567: 4505, 600: 4501, 658: 464, 710: 464, 717: 464, 464, 464, 464, 722: 464, 4503, 868: 4502, 911: 5137, 1003: 5141}, + {520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 52: 520, 544: 520, 548: 520, 520, 520, 520, 520, 560: 520, 520, 658: 520, 710: 520, 717: 520, 520, 520, 520, 722: 520}, + {571: 4507, 961: 5129}, // 2220 - {571: 4487, 961: 5109}, - {491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 52: 491, 544: 491, 548: 491, 491, 491, 491, 491, 560: 491, 491, 669: 491, 716: 491, 491, 719: 491, 491, 491, 491}, - {486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, 52: 486, 544: 486, 548: 486, 486, 486, 486, 486, 560: 486, 486, 669: 486, 716: 486, 486, 719: 486, 486, 486, 486}, - {485, 485, 485, 485, 485, 485, 485, 485, 485, 485, 485, 485, 485, 485, 485, 52: 485, 544: 485, 548: 485, 485, 485, 485, 485, 560: 485, 485, 669: 485, 716: 485, 485, 719: 485, 485, 485, 485}, - {484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, 52: 484, 544: 484, 548: 484, 484, 484, 484, 484, 560: 484, 484, 669: 484, 716: 484, 484, 719: 484, 484, 484, 484}, + {571: 4506, 961: 5128}, + {495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, 52: 495, 544: 495, 548: 495, 495, 495, 495, 495, 560: 495, 495, 658: 495, 710: 495, 717: 495, 495, 495, 495, 722: 495}, + {490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, 52: 490, 544: 490, 548: 490, 490, 490, 490, 490, 560: 490, 490, 658: 490, 710: 490, 717: 490, 490, 490, 490, 722: 490}, + {489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, 52: 489, 544: 489, 548: 489, 489, 489, 489, 489, 560: 489, 489, 658: 489, 710: 489, 717: 489, 489, 489, 489, 722: 489}, + {488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 488, 52: 488, 544: 488, 548: 488, 488, 488, 488, 488, 560: 488, 488, 658: 488, 710: 488, 717: 488, 488, 488, 488, 722: 488}, // 2225 - {483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, 52: 483, 544: 483, 548: 483, 483, 483, 483, 483, 560: 483, 483, 669: 483, 716: 483, 483, 719: 483, 483, 483, 483}, - {517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, 52: 517, 544: 517, 548: 517, 517, 517, 517, 517, 560: 517, 517, 669: 517, 716: 517, 517, 719: 517, 517, 517, 517}, - {547: 4019, 652: 4020, 654: 4021, 1036: 5125, 1311: 5124}, - {9: 5127, 52: 5126}, - {9: 445, 52: 445}, + {487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, 52: 487, 544: 487, 548: 487, 487, 487, 487, 487, 560: 487, 487, 658: 487, 710: 487, 717: 487, 487, 487, 487, 722: 487}, + {521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 52: 521, 544: 521, 548: 521, 521, 521, 521, 521, 560: 521, 521, 658: 521, 710: 521, 717: 521, 521, 521, 521, 722: 521}, + {547: 4038, 652: 4039, 654: 4040, 1036: 5144, 1314: 5143}, + {9: 5146, 52: 5145}, + {9: 449, 52: 449}, // 2230 - {460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 16: 4485, 52: 460, 162: 5119, 5121, 165: 5120, 544: 460, 548: 460, 460, 460, 460, 460, 560: 460, 460, 567: 4486, 600: 4482, 669: 460, 716: 460, 460, 719: 460, 460, 460, 460, 4484, 868: 4483, 911: 5118, 1003: 5129}, - {547: 4019, 652: 4020, 654: 4021, 1036: 5128}, - {9: 444, 52: 444}, - {519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, 52: 519, 544: 519, 548: 519, 519, 519, 519, 519, 560: 519, 519, 669: 519, 716: 519, 519, 719: 519, 519, 519, 519}, - {547: 4019, 652: 4020, 654: 4021, 1036: 5125, 1311: 5131}, + {464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 16: 4504, 52: 464, 164: 5138, 5140, 167: 5139, 544: 464, 548: 464, 464, 464, 464, 464, 560: 464, 464, 567: 4505, 600: 4501, 658: 464, 710: 464, 717: 464, 464, 464, 464, 722: 464, 4503, 868: 4502, 911: 5137, 1003: 5148}, + {547: 4038, 652: 4039, 654: 4040, 1036: 5147}, + {9: 448, 52: 448}, + {523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 52: 523, 544: 523, 548: 523, 523, 523, 523, 523, 560: 523, 523, 658: 523, 710: 523, 717: 523, 523, 523, 523, 722: 523}, + {547: 4038, 652: 4039, 654: 4040, 1036: 5144, 1314: 5150}, // 2235 - {9: 5127, 52: 5132}, - {460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 16: 4485, 52: 460, 162: 5119, 5121, 165: 5120, 544: 460, 548: 460, 460, 460, 460, 460, 560: 460, 460, 567: 4486, 600: 4482, 669: 460, 716: 460, 460, 719: 460, 460, 460, 460, 4484, 868: 4483, 911: 5118, 1003: 5133}, - {520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 52: 520, 544: 520, 548: 520, 520, 520, 520, 520, 560: 520, 520, 669: 520, 716: 520, 520, 719: 520, 520, 520, 520}, - {521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, 52: 521, 544: 521, 548: 521, 521, 521, 521, 521, 560: 521, 521, 669: 521, 716: 521, 521, 719: 521, 521, 521, 521}, - {523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, 52: 523, 544: 523, 548: 523, 523, 523, 523, 523, 560: 523, 523, 669: 523, 716: 523, 523, 719: 523, 523, 523, 523}, + {9: 5146, 52: 5151}, + {464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 16: 4504, 52: 464, 164: 5138, 5140, 167: 5139, 544: 464, 548: 464, 464, 464, 464, 464, 560: 464, 464, 567: 4505, 600: 4501, 658: 464, 710: 464, 717: 464, 464, 464, 464, 722: 464, 4503, 868: 4502, 911: 5137, 1003: 5152}, + {524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 52: 524, 544: 524, 548: 524, 524, 524, 524, 524, 560: 524, 524, 658: 524, 710: 524, 717: 524, 524, 524, 524, 722: 524}, + {525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 52: 525, 544: 525, 548: 525, 525, 525, 525, 525, 560: 525, 525, 658: 525, 710: 525, 717: 525, 525, 525, 525, 722: 525}, + {527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 52: 527, 544: 527, 548: 527, 527, 527, 527, 527, 560: 527, 527, 658: 527, 710: 527, 717: 527, 527, 527, 527, 722: 527}, // 2240 - {524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, 52: 524, 544: 524, 548: 524, 524, 524, 524, 524, 560: 524, 524, 669: 524, 716: 524, 524, 719: 524, 524, 524, 524}, - {460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 16: 4485, 52: 460, 544: 460, 548: 460, 460, 460, 460, 460, 560: 460, 460, 567: 4486, 600: 4482, 669: 460, 716: 460, 460, 719: 460, 460, 460, 460, 4484, 868: 4483, 911: 5138}, - {525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, 52: 525, 544: 525, 548: 525, 525, 525, 525, 525, 560: 525, 525, 669: 525, 716: 525, 525, 719: 525, 525, 525, 525}, - {460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 16: 4485, 52: 460, 544: 460, 548: 460, 460, 460, 460, 460, 560: 460, 460, 567: 4486, 600: 4482, 669: 460, 716: 460, 460, 719: 460, 460, 460, 460, 4484, 868: 4483, 911: 5140}, - {526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 526, 52: 526, 544: 526, 548: 526, 526, 526, 526, 526, 560: 526, 526, 669: 526, 716: 526, 526, 719: 526, 526, 526, 526}, + {528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 52: 528, 544: 528, 548: 528, 528, 528, 528, 528, 560: 528, 528, 658: 528, 710: 528, 717: 528, 528, 528, 528, 722: 528}, + {464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 16: 4504, 52: 464, 544: 464, 548: 464, 464, 464, 464, 464, 560: 464, 464, 567: 4505, 600: 4501, 658: 464, 710: 464, 717: 464, 464, 464, 464, 722: 464, 4503, 868: 4502, 911: 5157}, + {529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 52: 529, 544: 529, 548: 529, 529, 529, 529, 529, 560: 529, 529, 658: 529, 710: 529, 717: 529, 529, 529, 529, 722: 529}, + {464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 16: 4504, 52: 464, 544: 464, 548: 464, 464, 464, 464, 464, 560: 464, 464, 567: 4505, 600: 4501, 658: 464, 710: 464, 717: 464, 464, 464, 464, 722: 464, 4503, 868: 4502, 911: 5159}, + {530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 52: 530, 544: 530, 548: 530, 530, 530, 530, 530, 560: 530, 530, 658: 530, 710: 530, 717: 530, 530, 530, 530, 722: 530}, // 2245 - {460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 16: 4485, 52: 460, 544: 460, 548: 460, 460, 460, 460, 460, 560: 460, 460, 567: 4486, 600: 4482, 669: 460, 716: 460, 460, 719: 460, 460, 460, 460, 4484, 868: 4483, 911: 5143}, - {527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, 52: 527, 544: 527, 548: 527, 527, 527, 527, 527, 560: 527, 527, 669: 527, 716: 527, 527, 719: 527, 527, 527, 527}, - {528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, 52: 528, 544: 528, 548: 528, 528, 528, 528, 528, 560: 528, 528, 669: 528, 716: 528, 528, 719: 528, 528, 528, 528}, - {460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 16: 4485, 52: 460, 544: 460, 548: 460, 460, 460, 460, 460, 560: 460, 460, 567: 4486, 600: 4482, 669: 460, 716: 460, 460, 719: 460, 460, 460, 460, 4484, 868: 4483, 911: 5146}, - {529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, 52: 529, 544: 529, 548: 529, 529, 529, 529, 529, 560: 529, 529, 669: 529, 716: 529, 529, 719: 529, 529, 529, 529}, + {464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 16: 4504, 52: 464, 544: 464, 548: 464, 464, 464, 464, 464, 560: 464, 464, 567: 4505, 600: 4501, 658: 464, 710: 464, 717: 464, 464, 464, 464, 722: 464, 4503, 868: 4502, 911: 5162}, + {531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, 52: 531, 544: 531, 548: 531, 531, 531, 531, 531, 560: 531, 531, 658: 531, 710: 531, 717: 531, 531, 531, 531, 722: 531}, + {532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 52: 532, 544: 532, 548: 532, 532, 532, 532, 532, 560: 532, 532, 658: 532, 710: 532, 717: 532, 532, 532, 532, 722: 532}, + {464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, 16: 4504, 52: 464, 544: 464, 548: 464, 464, 464, 464, 464, 560: 464, 464, 567: 4505, 600: 4501, 658: 464, 710: 464, 717: 464, 464, 464, 464, 722: 464, 4503, 868: 4502, 911: 5165}, + {533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 52: 533, 544: 533, 548: 533, 533, 533, 533, 533, 560: 533, 533, 658: 533, 710: 533, 717: 533, 533, 533, 533, 722: 533}, // 2250 - {530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, 52: 530, 544: 530, 548: 530, 530, 530, 530, 530, 560: 530, 530, 669: 530, 716: 530, 530, 719: 530, 530, 530, 530}, - {534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 52: 534, 59: 534, 544: 534, 534, 548: 534, 534, 534, 534, 534, 560: 534, 534, 669: 534, 716: 534, 534, 719: 534, 534, 534, 534, 833: 534, 534}, - {558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, 52: 558, 544: 558, 548: 558, 558, 558, 558, 558, 560: 558, 558, 669: 558, 716: 558, 558, 719: 558, 558, 558, 558}, - {471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 52: 471, 59: 471, 544: 471, 548: 471, 471, 471, 471, 471, 560: 471, 471, 669: 471, 716: 471, 471, 719: 471, 471, 471, 471, 833: 471, 471, 996: 5150}, - {559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 52: 559, 59: 5092, 544: 559, 548: 559, 559, 559, 559, 559, 560: 559, 559, 669: 559, 716: 559, 559, 719: 559, 559, 559, 559, 833: 5091, 5093, 995: 5094}, + {534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, 52: 534, 544: 534, 548: 534, 534, 534, 534, 534, 560: 534, 534, 658: 534, 710: 534, 717: 534, 534, 534, 534, 722: 534}, + {538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 52: 538, 60: 538, 544: 538, 538, 548: 538, 538, 538, 538, 538, 560: 538, 538, 658: 538, 710: 538, 717: 538, 538, 538, 538, 722: 538, 833: 538, 538}, + {562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 52: 562, 544: 562, 548: 562, 562, 562, 562, 562, 560: 562, 562, 658: 562, 710: 562, 717: 562, 562, 562, 562, 722: 562}, + {475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 52: 475, 60: 475, 544: 475, 548: 475, 475, 475, 475, 475, 560: 475, 475, 658: 475, 710: 475, 717: 475, 475, 475, 475, 722: 475, 833: 475, 475, 996: 5169}, + {563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, 52: 563, 60: 5111, 544: 563, 548: 563, 563, 563, 563, 563, 560: 563, 563, 658: 563, 710: 563, 717: 563, 563, 563, 563, 722: 563, 833: 5110, 5112, 995: 5113}, // 2255 - {471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 52: 471, 59: 471, 544: 471, 548: 471, 471, 471, 471, 471, 560: 471, 471, 669: 471, 716: 471, 471, 719: 471, 471, 471, 471, 833: 471, 471, 996: 5152}, - {560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 52: 560, 59: 5092, 544: 560, 548: 560, 560, 560, 560, 560, 560: 560, 560, 669: 560, 716: 560, 560, 719: 560, 560, 560, 560, 833: 5091, 5093, 995: 5094}, - {561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 52: 561, 59: 5092, 544: 561, 548: 561, 561, 561, 561, 561, 560: 561, 561, 669: 561, 716: 561, 561, 719: 561, 561, 561, 561, 833: 5091, 5093, 995: 5094}, - {471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 52: 471, 59: 471, 544: 471, 548: 471, 471, 471, 471, 471, 560: 471, 471, 669: 471, 716: 471, 471, 719: 471, 471, 471, 471, 833: 471, 471, 996: 5155}, - {562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 562, 52: 562, 59: 5092, 544: 562, 548: 562, 562, 562, 562, 562, 560: 562, 562, 669: 562, 716: 562, 562, 719: 562, 562, 562, 562, 833: 5091, 5093, 995: 5094}, + {475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 52: 475, 60: 475, 544: 475, 548: 475, 475, 475, 475, 475, 560: 475, 475, 658: 475, 710: 475, 717: 475, 475, 475, 475, 722: 475, 833: 475, 475, 996: 5171}, + {564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 564, 52: 564, 60: 5111, 544: 564, 548: 564, 564, 564, 564, 564, 560: 564, 564, 658: 564, 710: 564, 717: 564, 564, 564, 564, 722: 564, 833: 5110, 5112, 995: 5113}, + {565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 565, 52: 565, 60: 5111, 544: 565, 548: 565, 565, 565, 565, 565, 560: 565, 565, 658: 565, 710: 565, 717: 565, 565, 565, 565, 722: 565, 833: 5110, 5112, 995: 5113}, + {475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, 52: 475, 60: 475, 544: 475, 548: 475, 475, 475, 475, 475, 560: 475, 475, 658: 475, 710: 475, 717: 475, 475, 475, 475, 722: 475, 833: 475, 475, 996: 5174}, + {566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 566, 52: 566, 60: 5111, 544: 566, 548: 566, 566, 566, 566, 566, 560: 566, 566, 658: 566, 710: 566, 717: 566, 566, 566, 566, 722: 566, 833: 5110, 5112, 995: 5113}, // 2260 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 669: 2726, 716: 2726, 2726, 719: 2726, 724: 2726, 760: 2726, 2726, 786: 5307, 3092, 3093, 3091, 1305: 5306}, - {2657, 2657, 2657, 2657, 2657, 2657, 9: 2657, 2657, 2657, 52: 2657, 560: 2657}, - {669: 2634}, - {561: 5305}, - {2624, 2624, 2624, 2624, 2624, 2624, 2624, 2624, 2624, 2624, 2624, 2624, 2624, 2624, 2624, 52: 2624, 544: 2624, 548: 2624, 2624, 2624, 2624, 2624, 560: 2624, 2624, 669: 2624, 716: 2624, 2624, 719: 2624, 2624, 2624, 2624}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 658: 2741, 710: 2741, 717: 2741, 2741, 724: 2741, 760: 2741, 2741, 786: 5333, 3111, 3112, 3110, 1308: 5332}, + {2672, 2672, 2672, 2672, 2672, 2672, 9: 2672, 2672, 2672, 52: 2672, 560: 2672}, + {658: 2649}, + {561: 5331}, + {2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 2639, 52: 2639, 544: 2639, 548: 2639, 2639, 2639, 2639, 2639, 560: 2639, 2639, 658: 2639, 710: 2639, 717: 2639, 2639, 2639, 2639, 722: 2639}, // 2265 - {2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623, 52: 2623, 544: 2623, 548: 2623, 2623, 2623, 2623, 2623, 560: 2623, 2623, 669: 2623, 716: 2623, 2623, 719: 2623, 2623, 2623, 2623}, - {669: 5301}, - {2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 52: 2620, 544: 2620, 548: 2620, 2620, 2620, 2620, 2620, 560: 2620, 2620, 669: 5300, 716: 2620, 2620, 719: 2620, 2620, 2620, 2620}, - {57: 5281, 247: 5285, 337: 5286, 545: 5280, 547: 3641, 557: 5008, 5009, 561: 3632, 566: 5282, 573: 3636, 642: 3631, 644: 3633, 650: 3635, 3634, 3639, 654: 3640, 661: 3638, 5266, 5265, 5261, 5262, 667: 5263, 5264, 792: 5007, 794: 3637, 5284, 1016: 5279, 1051: 5260, 1075: 5258, 5259, 5283, 1098: 5277, 1227: 5278, 1229: 5276, 1364: 5275}, - {549: 5273}, + {2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 2638, 52: 2638, 544: 2638, 548: 2638, 2638, 2638, 2638, 2638, 560: 2638, 2638, 658: 2638, 710: 2638, 717: 2638, 2638, 2638, 2638, 722: 2638}, + {658: 5325}, + {2633, 2633, 2633, 2633, 2633, 2633, 2633, 2633, 2633, 2633, 2633, 2633, 2633, 2633, 2633, 52: 2633, 58: 5320, 94: 5319, 544: 2633, 548: 2633, 2633, 2633, 2633, 2633, 560: 2633, 2633, 658: 5321, 710: 2633, 717: 2633, 2633, 2633, 2633, 722: 2633}, + {57: 5300, 247: 5304, 339: 5305, 545: 5299, 547: 3660, 557: 5027, 5028, 561: 3651, 566: 5301, 573: 3655, 643: 3650, 3652, 650: 3654, 3653, 3658, 654: 3659, 663: 3657, 5285, 5284, 5280, 5281, 669: 5282, 5283, 792: 5026, 794: 3656, 5303, 1016: 5298, 1051: 5279, 1076: 5277, 5278, 5302, 1099: 5296, 1229: 5297, 1231: 5295, 1368: 5294}, + {549: 5292}, // 2270 - {728: 5256}, - {547: 5255}, - {717: 5246}, - {551: 5239}, - {2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612, 52: 2612, 544: 2612, 548: 2612, 2612, 2612, 2612, 2612, 560: 2612, 2612, 669: 2612, 716: 2612, 2612, 719: 2612, 2612, 2612, 2612}, + {726: 5275}, + {547: 5274}, + {717: 5265}, + {551: 5258}, + {2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 52: 2625, 544: 2625, 548: 2625, 2625, 2625, 2625, 2625, 560: 2625, 2625, 658: 2625, 710: 2625, 717: 2625, 2625, 2625, 2625, 722: 2625}, // 2275 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 600: 3791, 786: 3793, 3092, 3093, 3091, 820: 3790, 991: 5238}, - {187: 5236, 266: 5237, 549: 5235, 1348: 5234}, - {246: 5233, 311: 5232, 549: 5231, 1488: 5230}, - {2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607, 52: 2607, 544: 2607, 5224, 548: 2607, 2607, 2607, 2607, 2607, 560: 2607, 2607, 669: 2607, 716: 2607, 2607, 719: 2607, 2607, 2607, 2607, 1339: 5223}, - {381: 5222}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 600: 3810, 786: 3812, 3111, 3112, 3110, 820: 3809, 991: 5257}, + {188: 5255, 267: 5256, 549: 5254, 1352: 5253}, + {246: 5252, 312: 5251, 549: 5250, 1493: 5249}, + {2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 2620, 52: 2620, 544: 2620, 5243, 548: 2620, 2620, 2620, 2620, 2620, 560: 2620, 2620, 658: 2620, 710: 2620, 717: 2620, 2620, 2620, 2620, 722: 2620, 1343: 5242}, + {382: 5241}, // 2280 - {2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593, 52: 2593, 544: 2593, 548: 2593, 2593, 2593, 2593, 2593, 560: 2593, 2593, 669: 2593, 716: 2593, 2593, 719: 2593, 2593, 2593, 2593}, - {2590, 2590, 2590, 2590, 2590, 2590, 5167, 5173, 5161, 2590, 2590, 2590, 5165, 5174, 5172, 52: 2590, 544: 5166, 548: 3868, 5164, 3867, 2598, 5171, 560: 2590, 5160, 669: 2635, 716: 5158, 2727, 719: 5163, 5156, 5178, 5175, 932: 5159, 945: 5168, 1028: 5170, 1047: 5221, 1063: 5169, 1086: 5162}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 5179}, - {2523, 2523, 2523, 2523, 2523, 2523, 2523, 2523, 2523, 2523, 2523, 2523, 2523, 2523, 2523, 52: 2523, 544: 2523, 5181, 548: 2523, 2523, 2523, 2523, 2523, 560: 2523, 2523, 669: 2523, 716: 2523, 2523, 719: 2523, 2523, 2523, 2523, 725: 2523, 1391: 5180}, - {2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 52: 2580, 544: 2580, 548: 2580, 2580, 2580, 2580, 2580, 560: 2580, 2580, 669: 2580, 716: 2580, 2580, 719: 2580, 2580, 2580, 2580, 725: 5196, 1407: 5197, 5198}, + {2606, 2606, 2606, 2606, 2606, 2606, 2606, 2606, 2606, 2606, 2606, 2606, 2606, 2606, 2606, 52: 2606, 544: 2606, 548: 2606, 2606, 2606, 2606, 2606, 560: 2606, 2606, 658: 2606, 710: 2606, 717: 2606, 2606, 2606, 2606, 722: 2606}, + {2603, 2603, 2603, 2603, 2603, 2603, 5186, 5192, 5180, 2603, 2603, 2603, 5184, 5193, 5191, 52: 2603, 544: 5185, 548: 3887, 5183, 3886, 2611, 5190, 560: 2603, 5179, 658: 2650, 710: 5177, 717: 2742, 5182, 5175, 5197, 722: 5194, 932: 5178, 945: 5187, 1028: 5189, 1047: 5240, 1063: 5188, 1087: 5181}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 5198}, + {2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 2536, 52: 2536, 544: 2536, 5200, 548: 2536, 2536, 2536, 2536, 2536, 560: 2536, 2536, 658: 2536, 710: 2536, 717: 2536, 2536, 2536, 2536, 722: 2536, 725: 2536, 1396: 5199}, + {2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593, 2593, 52: 2593, 544: 2593, 548: 2593, 2593, 2593, 2593, 2593, 560: 2593, 2593, 658: 2593, 710: 2593, 717: 2593, 2593, 2593, 2593, 722: 2593, 725: 5215, 1412: 5216, 5217}, // 2285 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 5185, 786: 4083, 3092, 3093, 3091, 836: 5184, 939: 5183, 949: 5182}, - {9: 5194, 52: 5193}, - {9: 2521, 52: 2521}, - {9: 476, 52: 476, 545: 4461, 592: 476, 619: 476, 856: 4462, 900: 5191}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 5186}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 5204, 786: 4102, 3111, 3112, 3110, 836: 5203, 939: 5202, 949: 5201}, + {9: 5213, 52: 5212}, + {9: 2534, 52: 2534}, + {9: 480, 52: 480, 545: 4480, 592: 480, 619: 480, 856: 4481, 900: 5210}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 5205}, // 2290 - {52: 5187, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {9: 1522, 52: 1522, 592: 5190, 619: 5189, 1080: 5188}, - {9: 2518, 52: 2518}, - {1521, 1521, 1521, 1521, 1521, 1521, 9: 1521, 52: 1521, 560: 1521}, - {1520, 1520, 1520, 1520, 1520, 1520, 9: 1520, 52: 1520, 560: 1520}, + {52: 5206, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {9: 1526, 52: 1526, 592: 5209, 619: 5208, 1081: 5207}, + {9: 2531, 52: 2531}, + {1525, 1525, 1525, 1525, 1525, 1525, 9: 1525, 52: 1525, 560: 1525}, + {1524, 1524, 1524, 1524, 1524, 1524, 9: 1524, 52: 1524, 560: 1524}, // 2295 - {9: 1522, 52: 1522, 592: 5190, 619: 5189, 1080: 5192}, - {9: 2519, 52: 2519}, - {2522, 2522, 2522, 2522, 2522, 2522, 2522, 2522, 2522, 2522, 2522, 2522, 2522, 2522, 2522, 52: 2522, 544: 2522, 548: 2522, 2522, 2522, 2522, 2522, 560: 2522, 2522, 669: 2522, 716: 2522, 2522, 719: 2522, 2522, 2522, 2522, 725: 2522}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 5185, 786: 4083, 3092, 3093, 3091, 836: 5184, 939: 5195}, - {9: 2520, 52: 2520}, + {9: 1526, 52: 1526, 592: 5209, 619: 5208, 1081: 5211}, + {9: 2532, 52: 2532}, + {2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 2535, 52: 2535, 544: 2535, 548: 2535, 2535, 2535, 2535, 2535, 560: 2535, 2535, 658: 2535, 710: 2535, 717: 2535, 2535, 2535, 2535, 722: 2535, 725: 2535}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 5204, 786: 4102, 3111, 3112, 3110, 836: 5203, 939: 5214}, + {9: 2533, 52: 2533}, // 2300 - {271: 5218, 430: 5219, 451: 5220}, - {2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 52: 2579, 544: 2579, 548: 2579, 2579, 2579, 2579, 2579, 560: 2579, 2579, 669: 2579, 716: 2579, 2579, 719: 2579, 2579, 2579, 2579}, - {2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 52: 2575, 544: 5200, 548: 2575, 2575, 2575, 2575, 2575, 560: 2575, 2575, 669: 2575, 716: 2575, 2575, 719: 2575, 2575, 2575, 2575, 1234: 5201, 5202, 1414: 5199}, - {2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 52: 2578, 544: 2578, 548: 2578, 2578, 2578, 2578, 2578, 560: 2578, 2578, 669: 2578, 716: 2578, 2578, 719: 2578, 2578, 2578, 2578}, - {728: 5216, 818: 5205}, + {272: 5237, 430: 5238, 451: 5239}, + {2592, 2592, 2592, 2592, 2592, 2592, 2592, 2592, 2592, 2592, 2592, 2592, 2592, 2592, 2592, 52: 2592, 544: 2592, 548: 2592, 2592, 2592, 2592, 2592, 560: 2592, 2592, 658: 2592, 710: 2592, 717: 2592, 2592, 2592, 2592, 722: 2592}, + {2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 2588, 52: 2588, 544: 5219, 548: 2588, 2588, 2588, 2588, 2588, 560: 2588, 2588, 658: 2588, 710: 2588, 717: 2588, 2588, 2588, 2588, 722: 2588, 1236: 5220, 5221, 1419: 5218}, + {2591, 2591, 2591, 2591, 2591, 2591, 2591, 2591, 2591, 2591, 2591, 2591, 2591, 2591, 2591, 52: 2591, 544: 2591, 548: 2591, 2591, 2591, 2591, 2591, 560: 2591, 2591, 658: 2591, 710: 2591, 717: 2591, 2591, 2591, 2591, 722: 2591}, + {726: 5235, 818: 5224}, // 2305 - {2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 52: 2574, 544: 5214, 548: 2574, 2574, 2574, 2574, 2574, 560: 2574, 2574, 669: 2574, 716: 2574, 2574, 719: 2574, 2574, 2574, 2574, 1235: 5215}, - {2573, 2573, 2573, 2573, 2573, 2573, 2573, 2573, 2573, 2573, 2573, 2573, 2573, 2573, 2573, 52: 2573, 544: 5203, 548: 2573, 2573, 2573, 2573, 2573, 560: 2573, 2573, 669: 2573, 716: 2573, 2573, 719: 2573, 2573, 2573, 2573, 1234: 5204}, - {818: 5205}, - {2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571, 52: 2571, 544: 2571, 548: 2571, 2571, 2571, 2571, 2571, 560: 2571, 2571, 669: 2571, 716: 2571, 2571, 719: 2571, 2571, 2571, 2571}, - {95: 5210, 571: 5209, 742: 5208, 744: 5207, 1265: 5206}, + {2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 2587, 52: 2587, 544: 5233, 548: 2587, 2587, 2587, 2587, 2587, 560: 2587, 2587, 658: 2587, 710: 2587, 717: 2587, 2587, 2587, 2587, 722: 2587, 1237: 5234}, + {2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 2586, 52: 2586, 544: 5222, 548: 2586, 2586, 2586, 2586, 2586, 560: 2586, 2586, 658: 2586, 710: 2586, 717: 2586, 2586, 2586, 2586, 722: 2586, 1236: 5223}, + {818: 5224}, + {2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 52: 2584, 544: 2584, 548: 2584, 2584, 2584, 2584, 2584, 560: 2584, 2584, 658: 2584, 710: 2584, 717: 2584, 2584, 2584, 2584, 722: 2584}, + {97: 5229, 571: 5228, 742: 5227, 744: 5226, 1267: 5225}, // 2310 - {2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 52: 2577, 544: 2577, 548: 2577, 2577, 2577, 2577, 2577, 560: 2577, 2577, 669: 2577, 716: 2577, 2577, 719: 2577, 2577, 2577, 2577}, - {2570, 2570, 2570, 2570, 2570, 2570, 2570, 2570, 2570, 2570, 2570, 2570, 2570, 2570, 2570, 52: 2570, 544: 2570, 548: 2570, 2570, 2570, 2570, 2570, 560: 2570, 2570, 669: 2570, 716: 2570, 2570, 719: 2570, 2570, 2570, 2570}, - {2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569, 52: 2569, 544: 2569, 548: 2569, 2569, 2569, 2569, 2569, 560: 2569, 2569, 669: 2569, 716: 2569, 2569, 719: 2569, 2569, 2569, 2569}, - {549: 5213, 561: 5212}, - {102: 5211}, + {2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 2590, 52: 2590, 544: 2590, 548: 2590, 2590, 2590, 2590, 2590, 560: 2590, 2590, 658: 2590, 710: 2590, 717: 2590, 2590, 2590, 2590, 722: 2590}, + {2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 52: 2583, 544: 2583, 548: 2583, 2583, 2583, 2583, 2583, 560: 2583, 2583, 658: 2583, 710: 2583, 717: 2583, 2583, 2583, 2583, 722: 2583}, + {2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 52: 2582, 544: 2582, 548: 2582, 2582, 2582, 2582, 2582, 560: 2582, 2582, 658: 2582, 710: 2582, 717: 2582, 2582, 2582, 2582, 722: 2582}, + {549: 5232, 561: 5231}, + {104: 5230}, // 2315 - {2567, 2567, 2567, 2567, 2567, 2567, 2567, 2567, 2567, 2567, 2567, 2567, 2567, 2567, 2567, 52: 2567, 544: 2567, 548: 2567, 2567, 2567, 2567, 2567, 560: 2567, 2567, 669: 2567, 716: 2567, 2567, 719: 2567, 2567, 2567, 2567}, - {2568, 2568, 2568, 2568, 2568, 2568, 2568, 2568, 2568, 2568, 2568, 2568, 2568, 2568, 2568, 52: 2568, 544: 2568, 548: 2568, 2568, 2568, 2568, 2568, 560: 2568, 2568, 669: 2568, 716: 2568, 2568, 719: 2568, 2568, 2568, 2568}, - {2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566, 52: 2566, 544: 2566, 548: 2566, 2566, 2566, 2566, 2566, 560: 2566, 2566, 669: 2566, 716: 2566, 2566, 719: 2566, 2566, 2566, 2566}, - {728: 5216}, - {2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572, 52: 2572, 544: 2572, 548: 2572, 2572, 2572, 2572, 2572, 560: 2572, 2572, 669: 2572, 716: 2572, 2572, 719: 2572, 2572, 2572, 2572}, + {2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 2580, 52: 2580, 544: 2580, 548: 2580, 2580, 2580, 2580, 2580, 560: 2580, 2580, 658: 2580, 710: 2580, 717: 2580, 2580, 2580, 2580, 722: 2580}, + {2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 52: 2581, 544: 2581, 548: 2581, 2581, 2581, 2581, 2581, 560: 2581, 2581, 658: 2581, 710: 2581, 717: 2581, 2581, 2581, 2581, 722: 2581}, + {2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 2579, 52: 2579, 544: 2579, 548: 2579, 2579, 2579, 2579, 2579, 560: 2579, 2579, 658: 2579, 710: 2579, 717: 2579, 2579, 2579, 2579, 722: 2579}, + {726: 5235}, + {2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 2585, 52: 2585, 544: 2585, 548: 2585, 2585, 2585, 2585, 2585, 560: 2585, 2585, 658: 2585, 710: 2585, 717: 2585, 2585, 2585, 2585, 722: 2585}, // 2320 - {95: 5210, 571: 5209, 742: 5208, 744: 5207, 1265: 5217}, - {2576, 2576, 2576, 2576, 2576, 2576, 2576, 2576, 2576, 2576, 2576, 2576, 2576, 2576, 2576, 52: 2576, 544: 2576, 548: 2576, 2576, 2576, 2576, 2576, 560: 2576, 2576, 669: 2576, 716: 2576, 2576, 719: 2576, 2576, 2576, 2576}, - {2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 2583, 52: 2583, 544: 2583, 548: 2583, 2583, 2583, 2583, 2583, 560: 2583, 2583, 669: 2583, 716: 2583, 2583, 719: 2583, 2583, 2583, 2583}, - {2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 2582, 52: 2582, 544: 2582, 548: 2582, 2582, 2582, 2582, 2582, 560: 2582, 2582, 669: 2582, 716: 2582, 2582, 719: 2582, 2582, 2582, 2582}, - {2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 2581, 52: 2581, 544: 2581, 548: 2581, 2581, 2581, 2581, 2581, 560: 2581, 2581, 669: 2581, 716: 2581, 2581, 719: 2581, 2581, 2581, 2581}, + {97: 5229, 571: 5228, 742: 5227, 744: 5226, 1267: 5236}, + {2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 2589, 52: 2589, 544: 2589, 548: 2589, 2589, 2589, 2589, 2589, 560: 2589, 2589, 658: 2589, 710: 2589, 717: 2589, 2589, 2589, 2589, 722: 2589}, + {2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596, 52: 2596, 544: 2596, 548: 2596, 2596, 2596, 2596, 2596, 560: 2596, 2596, 658: 2596, 710: 2596, 717: 2596, 2596, 2596, 2596, 722: 2596}, + {2595, 2595, 2595, 2595, 2595, 2595, 2595, 2595, 2595, 2595, 2595, 2595, 2595, 2595, 2595, 52: 2595, 544: 2595, 548: 2595, 2595, 2595, 2595, 2595, 560: 2595, 2595, 658: 2595, 710: 2595, 717: 2595, 2595, 2595, 2595, 722: 2595}, + {2594, 2594, 2594, 2594, 2594, 2594, 2594, 2594, 2594, 2594, 2594, 2594, 2594, 2594, 2594, 52: 2594, 544: 2594, 548: 2594, 2594, 2594, 2594, 2594, 560: 2594, 2594, 658: 2594, 710: 2594, 717: 2594, 2594, 2594, 2594, 722: 2594}, // 2325 - {2592, 2592, 2592, 2592, 2592, 2592, 2592, 2592, 2592, 2592, 2592, 2592, 2592, 2592, 2592, 52: 2592, 544: 2592, 548: 2592, 2592, 2592, 2592, 2592, 560: 2592, 2592, 669: 2592, 716: 2592, 2592, 719: 2592, 2592, 2592, 2592}, - {551: 2597}, - {2608, 2608, 2608, 2608, 2608, 2608, 2608, 2608, 2608, 2608, 2608, 2608, 2608, 2608, 2608, 52: 2608, 544: 2608, 548: 2608, 2608, 2608, 2608, 2608, 560: 2608, 2608, 669: 2608, 716: 2608, 2608, 719: 2608, 2608, 2608, 2608}, - {573: 3078, 814: 3922, 829: 5225}, - {9: 5227, 52: 5226}, + {2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605, 52: 2605, 544: 2605, 548: 2605, 2605, 2605, 2605, 2605, 560: 2605, 2605, 658: 2605, 710: 2605, 717: 2605, 2605, 2605, 2605, 722: 2605}, + {551: 2610}, + {2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 52: 2621, 544: 2621, 548: 2621, 2621, 2621, 2621, 2621, 560: 2621, 2621, 658: 2621, 710: 2621, 717: 2621, 2621, 2621, 2621, 722: 2621}, + {573: 3097, 814: 3941, 829: 5244}, + {9: 5246, 52: 5245}, // 2330 - {2606, 2606, 2606, 2606, 2606, 2606, 2606, 2606, 2606, 2606, 2606, 2606, 2606, 2606, 2606, 52: 2606, 544: 2606, 548: 2606, 2606, 2606, 2606, 2606, 560: 2606, 2606, 669: 2606, 716: 2606, 2606, 719: 2606, 2606, 2606, 2606}, - {573: 3078, 814: 3922, 829: 5228}, - {52: 5229}, - {2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605, 2605, 52: 2605, 544: 2605, 548: 2605, 2605, 2605, 2605, 2605, 560: 2605, 2605, 669: 2605, 716: 2605, 2605, 719: 2605, 2605, 2605, 2605}, - {2609, 2609, 2609, 2609, 2609, 2609, 2609, 2609, 2609, 2609, 2609, 2609, 2609, 2609, 2609, 52: 2609, 544: 2609, 548: 2609, 2609, 2609, 2609, 2609, 560: 2609, 2609, 669: 2609, 716: 2609, 2609, 719: 2609, 2609, 2609, 2609}, + {2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619, 52: 2619, 544: 2619, 548: 2619, 2619, 2619, 2619, 2619, 560: 2619, 2619, 658: 2619, 710: 2619, 717: 2619, 2619, 2619, 2619, 722: 2619}, + {573: 3097, 814: 3941, 829: 5247}, + {52: 5248}, + {2618, 2618, 2618, 2618, 2618, 2618, 2618, 2618, 2618, 2618, 2618, 2618, 2618, 2618, 2618, 52: 2618, 544: 2618, 548: 2618, 2618, 2618, 2618, 2618, 560: 2618, 2618, 658: 2618, 710: 2618, 717: 2618, 2618, 2618, 2618, 722: 2618}, + {2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622, 52: 2622, 544: 2622, 548: 2622, 2622, 2622, 2622, 2622, 560: 2622, 2622, 658: 2622, 710: 2622, 717: 2622, 2622, 2622, 2622, 722: 2622}, // 2335 - {2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 2604, 52: 2604, 544: 2604, 548: 2604, 2604, 2604, 2604, 2604, 560: 2604, 2604, 669: 2604, 716: 2604, 2604, 719: 2604, 2604, 2604, 2604}, - {2603, 2603, 2603, 2603, 2603, 2603, 2603, 2603, 2603, 2603, 2603, 2603, 2603, 2603, 2603, 52: 2603, 544: 2603, 548: 2603, 2603, 2603, 2603, 2603, 560: 2603, 2603, 669: 2603, 716: 2603, 2603, 719: 2603, 2603, 2603, 2603}, - {2602, 2602, 2602, 2602, 2602, 2602, 2602, 2602, 2602, 2602, 2602, 2602, 2602, 2602, 2602, 52: 2602, 544: 2602, 548: 2602, 2602, 2602, 2602, 2602, 560: 2602, 2602, 669: 2602, 716: 2602, 2602, 719: 2602, 2602, 2602, 2602}, - {2610, 2610, 2610, 2610, 2610, 2610, 2610, 2610, 2610, 2610, 2610, 2610, 2610, 2610, 2610, 52: 2610, 544: 2610, 548: 2610, 2610, 2610, 2610, 2610, 560: 2610, 2610, 669: 2610, 716: 2610, 2610, 719: 2610, 2610, 2610, 2610}, - {2601, 2601, 2601, 2601, 2601, 2601, 2601, 2601, 2601, 2601, 2601, 2601, 2601, 2601, 2601, 52: 2601, 544: 2601, 548: 2601, 2601, 2601, 2601, 2601, 560: 2601, 2601, 669: 2601, 716: 2601, 2601, 719: 2601, 2601, 2601, 2601}, + {2617, 2617, 2617, 2617, 2617, 2617, 2617, 2617, 2617, 2617, 2617, 2617, 2617, 2617, 2617, 52: 2617, 544: 2617, 548: 2617, 2617, 2617, 2617, 2617, 560: 2617, 2617, 658: 2617, 710: 2617, 717: 2617, 2617, 2617, 2617, 722: 2617}, + {2616, 2616, 2616, 2616, 2616, 2616, 2616, 2616, 2616, 2616, 2616, 2616, 2616, 2616, 2616, 52: 2616, 544: 2616, 548: 2616, 2616, 2616, 2616, 2616, 560: 2616, 2616, 658: 2616, 710: 2616, 717: 2616, 2616, 2616, 2616, 722: 2616}, + {2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 52: 2615, 544: 2615, 548: 2615, 2615, 2615, 2615, 2615, 560: 2615, 2615, 658: 2615, 710: 2615, 717: 2615, 2615, 2615, 2615, 722: 2615}, + {2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623, 2623, 52: 2623, 544: 2623, 548: 2623, 2623, 2623, 2623, 2623, 560: 2623, 2623, 658: 2623, 710: 2623, 717: 2623, 2623, 2623, 2623, 722: 2623}, + {2614, 2614, 2614, 2614, 2614, 2614, 2614, 2614, 2614, 2614, 2614, 2614, 2614, 2614, 2614, 52: 2614, 544: 2614, 548: 2614, 2614, 2614, 2614, 2614, 560: 2614, 2614, 658: 2614, 710: 2614, 717: 2614, 2614, 2614, 2614, 722: 2614}, // 2340 - {2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 2600, 52: 2600, 544: 2600, 548: 2600, 2600, 2600, 2600, 2600, 560: 2600, 2600, 669: 2600, 716: 2600, 2600, 719: 2600, 2600, 2600, 2600}, - {2599, 2599, 2599, 2599, 2599, 2599, 2599, 2599, 2599, 2599, 2599, 2599, 2599, 2599, 2599, 52: 2599, 544: 2599, 548: 2599, 2599, 2599, 2599, 2599, 560: 2599, 2599, 669: 2599, 716: 2599, 2599, 719: 2599, 2599, 2599, 2599}, - {2611, 2611, 2611, 2611, 2611, 2611, 2611, 2611, 2611, 2611, 2611, 2611, 2611, 2611, 2611, 52: 2611, 544: 2611, 548: 2611, 2611, 2611, 2611, 2611, 560: 2611, 2611, 669: 2611, 716: 2611, 2611, 719: 2611, 2611, 2611, 2611}, - {545: 5240}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 5241}, + {2613, 2613, 2613, 2613, 2613, 2613, 2613, 2613, 2613, 2613, 2613, 2613, 2613, 2613, 2613, 52: 2613, 544: 2613, 548: 2613, 2613, 2613, 2613, 2613, 560: 2613, 2613, 658: 2613, 710: 2613, 717: 2613, 2613, 2613, 2613, 722: 2613}, + {2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612, 2612, 52: 2612, 544: 2612, 548: 2612, 2612, 2612, 2612, 2612, 560: 2612, 2612, 658: 2612, 710: 2612, 717: 2612, 2612, 2612, 2612, 722: 2612}, + {2624, 2624, 2624, 2624, 2624, 2624, 2624, 2624, 2624, 2624, 2624, 2624, 2624, 2624, 2624, 52: 2624, 544: 2624, 548: 2624, 2624, 2624, 2624, 2624, 560: 2624, 2624, 658: 2624, 710: 2624, 717: 2624, 2624, 2624, 2624, 722: 2624}, + {545: 5259}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 5260}, // 2345 - {52: 5242, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596, 2596, 52: 2596, 544: 2596, 548: 2596, 2596, 2596, 2596, 2596, 560: 2596, 2596, 669: 2596, 716: 2596, 2596, 719: 2596, 2596, 2596, 2596, 1489: 5245, 1516: 5244, 5243}, - {2613, 2613, 2613, 2613, 2613, 2613, 2613, 2613, 2613, 2613, 2613, 2613, 2613, 2613, 2613, 52: 2613, 544: 2613, 548: 2613, 2613, 2613, 2613, 2613, 560: 2613, 2613, 669: 2613, 716: 2613, 2613, 719: 2613, 2613, 2613, 2613}, - {2595, 2595, 2595, 2595, 2595, 2595, 2595, 2595, 2595, 2595, 2595, 2595, 2595, 2595, 2595, 52: 2595, 544: 2595, 548: 2595, 2595, 2595, 2595, 2595, 560: 2595, 2595, 669: 2595, 716: 2595, 2595, 719: 2595, 2595, 2595, 2595}, - {2594, 2594, 2594, 2594, 2594, 2594, 2594, 2594, 2594, 2594, 2594, 2594, 2594, 2594, 2594, 52: 2594, 544: 2594, 548: 2594, 2594, 2594, 2594, 2594, 560: 2594, 2594, 669: 2594, 716: 2594, 2594, 719: 2594, 2594, 2594, 2594}, + {52: 5261, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {2609, 2609, 2609, 2609, 2609, 2609, 2609, 2609, 2609, 2609, 2609, 2609, 2609, 2609, 2609, 52: 2609, 544: 2609, 548: 2609, 2609, 2609, 2609, 2609, 560: 2609, 2609, 658: 2609, 710: 2609, 717: 2609, 2609, 2609, 2609, 722: 2609, 1494: 5264, 1523: 5263, 5262}, + {2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 52: 2626, 544: 2626, 548: 2626, 2626, 2626, 2626, 2626, 560: 2626, 2626, 658: 2626, 710: 2626, 717: 2626, 2626, 2626, 2626, 722: 2626}, + {2608, 2608, 2608, 2608, 2608, 2608, 2608, 2608, 2608, 2608, 2608, 2608, 2608, 2608, 2608, 52: 2608, 544: 2608, 548: 2608, 2608, 2608, 2608, 2608, 560: 2608, 2608, 658: 2608, 710: 2608, 717: 2608, 2608, 2608, 2608, 722: 2608}, + {2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607, 2607, 52: 2607, 544: 2607, 548: 2607, 2607, 2607, 2607, 2607, 560: 2607, 2607, 658: 2607, 710: 2607, 717: 2607, 2607, 2607, 2607, 722: 2607}, // 2350 - {545: 5247}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 5248}, - {52: 5249, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {2629, 2629, 2629, 2629, 2629, 2629, 2629, 2629, 2629, 2629, 2629, 2629, 2629, 2629, 2629, 52: 2629, 201: 4997, 544: 2629, 548: 3868, 2629, 3867, 2629, 2629, 560: 2629, 2629, 669: 2629, 716: 2629, 2629, 719: 2629, 2629, 2629, 2629, 932: 5250, 1059: 5251, 1184: 5252, 1369: 5253}, - {201: 4999, 561: 5254}, + {545: 5266}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 5267}, + {52: 5268, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644, 52: 2644, 202: 5016, 544: 2644, 548: 3887, 2644, 3886, 2644, 2644, 560: 2644, 2644, 658: 2644, 710: 2644, 717: 2644, 2644, 2644, 2644, 722: 2644, 932: 5269, 1059: 5270, 1186: 5271, 1373: 5272}, + {202: 5018, 561: 5273}, // 2355 - {2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 52: 2628, 544: 2628, 548: 2628, 2628, 2628, 2628, 2628, 560: 2628, 2628, 669: 2628, 716: 2628, 2628, 719: 2628, 2628, 2628, 2628}, - {2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 2626, 52: 2626, 544: 2626, 548: 2626, 2626, 2626, 2626, 2626, 560: 2626, 2626, 669: 2626, 716: 2626, 2626, 719: 2626, 2626, 2626, 2626}, - {2614, 2614, 2614, 2614, 2614, 2614, 2614, 2614, 2614, 2614, 2614, 2614, 2614, 2614, 2614, 52: 2614, 544: 2614, 548: 2614, 2614, 2614, 2614, 2614, 560: 2614, 2614, 669: 2614, 716: 2614, 2614, 719: 2614, 2614, 2614, 2614}, - {2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627, 52: 2627, 544: 2627, 548: 2627, 2627, 2627, 2627, 2627, 560: 2627, 2627, 669: 2627, 716: 2627, 2627, 719: 2627, 2627, 2627, 2627}, - {2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 2615, 52: 2615, 544: 2615, 548: 2615, 2615, 2615, 2615, 2615, 560: 2615, 2615, 669: 2615, 716: 2615, 2615, 719: 2615, 2615, 2615, 2615}, + {2643, 2643, 2643, 2643, 2643, 2643, 2643, 2643, 2643, 2643, 2643, 2643, 2643, 2643, 2643, 52: 2643, 544: 2643, 548: 2643, 2643, 2643, 2643, 2643, 560: 2643, 2643, 658: 2643, 710: 2643, 717: 2643, 2643, 2643, 2643, 722: 2643}, + {2641, 2641, 2641, 2641, 2641, 2641, 2641, 2641, 2641, 2641, 2641, 2641, 2641, 2641, 2641, 52: 2641, 544: 2641, 548: 2641, 2641, 2641, 2641, 2641, 560: 2641, 2641, 658: 2641, 710: 2641, 717: 2641, 2641, 2641, 2641, 722: 2641}, + {2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627, 2627, 52: 2627, 544: 2627, 548: 2627, 2627, 2627, 2627, 2627, 560: 2627, 2627, 658: 2627, 710: 2627, 717: 2627, 2627, 2627, 2627, 722: 2627}, + {2642, 2642, 2642, 2642, 2642, 2642, 2642, 2642, 2642, 2642, 2642, 2642, 2642, 2642, 2642, 52: 2642, 544: 2642, 548: 2642, 2642, 2642, 2642, 2642, 560: 2642, 2642, 658: 2642, 710: 2642, 717: 2642, 2642, 2642, 2642, 722: 2642}, + {2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 2628, 52: 2628, 544: 2628, 548: 2628, 2628, 2628, 2628, 2628, 560: 2628, 2628, 658: 2628, 710: 2628, 717: 2628, 2628, 2628, 2628, 722: 2628}, // 2360 - {662: 5266, 5265, 5261, 5262, 667: 5263, 5264, 1051: 5260, 1075: 5258, 5259, 5257}, - {2616, 2616, 2616, 2616, 2616, 2616, 2616, 2616, 2616, 2616, 2616, 2616, 2616, 2616, 2616, 52: 2616, 544: 2616, 548: 2616, 2616, 2616, 2616, 2616, 560: 2616, 2616, 669: 2616, 716: 2616, 2616, 719: 2616, 2616, 2616, 2616}, - {2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555, 52: 2555, 544: 2555, 548: 2555, 2555, 2555, 2555, 2555, 560: 2555, 2555, 669: 2555, 716: 2555, 2555, 719: 2555, 2555, 2555, 2555}, - {545: 5269}, - {545: 5267}, + {664: 5285, 5284, 5280, 5281, 669: 5282, 5283, 1051: 5279, 1076: 5277, 5278, 5276}, + {2629, 2629, 2629, 2629, 2629, 2629, 2629, 2629, 2629, 2629, 2629, 2629, 2629, 2629, 2629, 52: 2629, 544: 2629, 548: 2629, 2629, 2629, 2629, 2629, 560: 2629, 2629, 658: 2629, 710: 2629, 717: 2629, 2629, 2629, 2629, 722: 2629}, + {2568, 2568, 2568, 2568, 2568, 2568, 2568, 2568, 2568, 2568, 2568, 2568, 2568, 2568, 2568, 52: 2568, 544: 2568, 548: 2568, 2568, 2568, 2568, 2568, 560: 2568, 2568, 658: 2568, 710: 2568, 717: 2568, 2568, 2568, 2568, 722: 2568}, + {545: 5288}, + {545: 5286}, // 2365 - {2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551, 2551, 52: 2551, 544: 2551, 2538, 548: 2551, 2551, 2551, 2551, 2551, 560: 2551, 2551, 669: 2551, 716: 2551, 2551, 719: 2551, 2551, 2551, 2551}, - {2542, 2542, 2542, 2542, 2542, 2542, 2542, 2542, 2542, 2542, 2542, 2542, 2542, 2542, 2542, 52: 2542, 544: 2542, 2546, 548: 2542, 2542, 2542, 2542, 2542, 560: 2542, 2542, 669: 2542, 716: 2542, 2542, 719: 2542, 2542, 2542, 2542}, - {2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541, 2541, 52: 2541, 544: 2541, 2545, 548: 2541, 2541, 2541, 2541, 2541, 560: 2541, 2541, 669: 2541, 716: 2541, 2541, 719: 2541, 2541, 2541, 2541}, - {2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540, 2540, 52: 2540, 544: 2540, 2544, 548: 2540, 2540, 2540, 2540, 2540, 560: 2540, 2540, 669: 2540, 716: 2540, 2540, 719: 2540, 2540, 2540, 2540}, - {545: 2543}, + {2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 52: 2564, 544: 2564, 2551, 548: 2564, 2564, 2564, 2564, 2564, 560: 2564, 2564, 658: 2564, 710: 2564, 717: 2564, 2564, 2564, 2564, 722: 2564}, + {2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555, 2555, 52: 2555, 544: 2555, 2559, 548: 2555, 2555, 2555, 2555, 2555, 560: 2555, 2555, 658: 2555, 710: 2555, 717: 2555, 2555, 2555, 2555, 722: 2555}, + {2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554, 52: 2554, 544: 2554, 2558, 548: 2554, 2554, 2554, 2554, 2554, 560: 2554, 2554, 658: 2554, 710: 2554, 717: 2554, 2554, 2554, 2554, 722: 2554}, + {2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, 52: 2553, 544: 2553, 2557, 548: 2553, 2553, 2553, 2553, 2553, 560: 2553, 2553, 658: 2553, 710: 2553, 717: 2553, 2553, 2553, 2553, 722: 2553}, + {545: 2556}, // 2370 - {545: 2539}, - {52: 5268}, - {2552, 2552, 2552, 2552, 2552, 2552, 2552, 2552, 2552, 2552, 2552, 2552, 2552, 2552, 2552, 52: 2552, 544: 2552, 548: 2552, 2552, 2552, 2552, 2552, 560: 2552, 2552, 669: 2552, 716: 2552, 2552, 719: 2552, 2552, 2552, 2552}, - {52: 5270, 573: 3078, 814: 5271}, - {2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554, 2554, 52: 2554, 544: 2554, 548: 2554, 2554, 2554, 2554, 2554, 560: 2554, 2554, 669: 2554, 716: 2554, 2554, 719: 2554, 2554, 2554, 2554}, + {545: 2552}, + {52: 5287}, + {2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565, 52: 2565, 544: 2565, 548: 2565, 2565, 2565, 2565, 2565, 560: 2565, 2565, 658: 2565, 710: 2565, 717: 2565, 2565, 2565, 2565, 722: 2565}, + {52: 5289, 573: 3097, 814: 5290}, + {2567, 2567, 2567, 2567, 2567, 2567, 2567, 2567, 2567, 2567, 2567, 2567, 2567, 2567, 2567, 52: 2567, 544: 2567, 548: 2567, 2567, 2567, 2567, 2567, 560: 2567, 2567, 658: 2567, 710: 2567, 717: 2567, 2567, 2567, 2567, 722: 2567}, // 2375 - {52: 5272}, - {2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, 2553, 52: 2553, 544: 2553, 548: 2553, 2553, 2553, 2553, 2553, 560: 2553, 2553, 669: 2553, 716: 2553, 2553, 719: 2553, 2553, 2553, 2553}, - {197: 5274}, - {2617, 2617, 2617, 2617, 2617, 2617, 2617, 2617, 2617, 2617, 2617, 2617, 2617, 2617, 2617, 52: 2617, 544: 2617, 548: 2617, 2617, 2617, 2617, 2617, 560: 2617, 2617, 669: 2617, 716: 2617, 2617, 719: 2617, 2617, 2617, 2617}, - {2618, 2618, 2618, 2618, 2618, 2618, 2618, 2618, 2618, 2618, 2618, 2618, 2618, 2618, 2618, 52: 2618, 544: 2618, 548: 2618, 2618, 2618, 2618, 2618, 560: 2618, 2618, 669: 2618, 716: 2618, 2618, 719: 2618, 2618, 2618, 2618}, + {52: 5291}, + {2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566, 2566, 52: 2566, 544: 2566, 548: 2566, 2566, 2566, 2566, 2566, 560: 2566, 2566, 658: 2566, 710: 2566, 717: 2566, 2566, 2566, 2566, 722: 2566}, + {198: 5293}, + {2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 2630, 52: 2630, 544: 2630, 548: 2630, 2630, 2630, 2630, 2630, 560: 2630, 2630, 658: 2630, 710: 2630, 717: 2630, 2630, 2630, 2630, 722: 2630}, + {2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 2631, 52: 2631, 544: 2631, 548: 2631, 2631, 2631, 2631, 2631, 560: 2631, 2631, 658: 2631, 710: 2631, 717: 2631, 2631, 2631, 2631, 722: 2631}, // 2380 - {2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565, 2565, 52: 2565, 544: 2565, 548: 2565, 2565, 2565, 2565, 2565, 560: 2565, 2565, 669: 2565, 716: 2565, 2565, 719: 2565, 2565, 2565, 2565}, - {2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 2564, 52: 2564, 544: 2564, 548: 2564, 2564, 2564, 2564, 2564, 560: 2564, 2564, 669: 2564, 716: 2564, 2564, 719: 2564, 2564, 2564, 2564}, - {2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563, 52: 2563, 544: 2563, 548: 2563, 2563, 2563, 2563, 2563, 560: 2563, 2563, 669: 2563, 716: 2563, 2563, 719: 2563, 2563, 2563, 2563}, - {2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, 52: 2562, 544: 2562, 548: 2562, 2562, 2562, 2562, 2562, 560: 2562, 2562, 669: 2562, 716: 2562, 2562, 719: 2562, 2562, 2562, 2562}, - {57: 5281, 247: 5285, 337: 5286, 545: 5280, 566: 5282, 662: 5266, 5265, 5261, 5262, 667: 5263, 5264, 795: 5284, 1016: 5294, 1051: 5260, 1075: 5258, 5259, 5283, 1227: 5296, 1229: 5295}, + {2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 2578, 52: 2578, 544: 2578, 548: 2578, 2578, 2578, 2578, 2578, 560: 2578, 2578, 658: 2578, 710: 2578, 717: 2578, 2578, 2578, 2578, 722: 2578}, + {2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 2577, 52: 2577, 544: 2577, 548: 2577, 2577, 2577, 2577, 2577, 560: 2577, 2577, 658: 2577, 710: 2577, 717: 2577, 2577, 2577, 2577, 722: 2577}, + {2576, 2576, 2576, 2576, 2576, 2576, 2576, 2576, 2576, 2576, 2576, 2576, 2576, 2576, 2576, 52: 2576, 544: 2576, 548: 2576, 2576, 2576, 2576, 2576, 560: 2576, 2576, 658: 2576, 710: 2576, 717: 2576, 2576, 2576, 2576, 722: 2576}, + {2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 2575, 52: 2575, 544: 2575, 548: 2575, 2575, 2575, 2575, 2575, 560: 2575, 2575, 658: 2575, 710: 2575, 717: 2575, 2575, 2575, 2575, 722: 2575}, + {57: 5300, 247: 5304, 339: 5305, 545: 5299, 566: 5301, 664: 5285, 5284, 5280, 5281, 669: 5282, 5283, 795: 5303, 1016: 5313, 1051: 5279, 1076: 5277, 5278, 5302, 1229: 5315, 1231: 5314}, // 2385 - {545: 5290}, - {545: 5287}, - {2556, 2556, 2556, 2556, 2556, 2556, 2556, 2556, 2556, 2556, 2556, 2556, 2556, 2556, 2556, 52: 2556, 544: 2556, 548: 2556, 2556, 2556, 2556, 2556, 560: 2556, 2556, 669: 2556, 716: 2556, 2556, 719: 2556, 2556, 2556, 2556}, - {2549, 2549, 2549, 2549, 2549, 2549, 2549, 2549, 2549, 2549, 2549, 2549, 2549, 2549, 2549, 52: 2549, 544: 2549, 548: 2549, 2549, 2549, 2549, 2549, 560: 2549, 2549, 669: 2549, 716: 2549, 2549, 719: 2549, 2549, 2549, 2549}, - {197: 4643}, + {545: 5309}, + {545: 5306}, + {2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569, 2569, 52: 2569, 544: 2569, 548: 2569, 2569, 2569, 2569, 2569, 560: 2569, 2569, 658: 2569, 710: 2569, 717: 2569, 2569, 2569, 2569, 722: 2569}, + {2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, 2562, 52: 2562, 544: 2562, 548: 2562, 2562, 2562, 2562, 2562, 560: 2562, 2562, 658: 2562, 710: 2562, 717: 2562, 2562, 2562, 2562, 722: 2562}, + {198: 4662}, // 2390 - {545: 4640}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3898, 874: 5288}, - {9: 4049, 52: 5289}, - {2558, 2558, 2558, 2558, 2558, 2558, 2558, 2558, 2558, 2558, 2558, 2558, 2558, 2558, 2558, 52: 2558, 544: 2558, 548: 2558, 2558, 2558, 2558, 2558, 560: 2558, 2558, 669: 2558, 716: 2558, 2558, 719: 2558, 2558, 2558, 2558}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 5291, 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3898, 874: 5292}, + {545: 4659}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3917, 874: 5307}, + {9: 4068, 52: 5308}, + {2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571, 2571, 52: 2571, 544: 2571, 548: 2571, 2571, 2571, 2571, 2571, 560: 2571, 2571, 658: 2571, 710: 2571, 717: 2571, 2571, 2571, 2571, 722: 2571}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 5310, 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3917, 874: 5311}, // 2395 - {2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 2560, 52: 2560, 544: 2560, 548: 2560, 2560, 2560, 2560, 2560, 560: 2560, 2560, 669: 2560, 716: 2560, 2560, 719: 2560, 2560, 2560, 2560}, - {9: 4049, 52: 5293}, - {2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 2559, 52: 2559, 544: 2559, 548: 2559, 2559, 2559, 2559, 2559, 560: 2559, 2559, 669: 2559, 716: 2559, 2559, 719: 2559, 2559, 2559, 2559}, - {52: 5299}, - {52: 5298}, + {2573, 2573, 2573, 2573, 2573, 2573, 2573, 2573, 2573, 2573, 2573, 2573, 2573, 2573, 2573, 52: 2573, 544: 2573, 548: 2573, 2573, 2573, 2573, 2573, 560: 2573, 2573, 658: 2573, 710: 2573, 717: 2573, 2573, 2573, 2573, 722: 2573}, + {9: 4068, 52: 5312}, + {2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572, 2572, 52: 2572, 544: 2572, 548: 2572, 2572, 2572, 2572, 2572, 560: 2572, 2572, 658: 2572, 710: 2572, 717: 2572, 2572, 2572, 2572, 722: 2572}, + {52: 5318}, + {52: 5317}, // 2400 - {52: 5297}, - {2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 2550, 52: 2550, 544: 2550, 548: 2550, 2550, 2550, 2550, 2550, 560: 2550, 2550, 669: 2550, 716: 2550, 2550, 719: 2550, 2550, 2550, 2550}, - {2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 2557, 52: 2557, 544: 2557, 548: 2557, 2557, 2557, 2557, 2557, 560: 2557, 2557, 669: 2557, 716: 2557, 2557, 719: 2557, 2557, 2557, 2557}, - {2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 2561, 52: 2561, 544: 2561, 548: 2561, 2561, 2561, 2561, 2561, 560: 2561, 2561, 669: 2561, 716: 2561, 2561, 719: 2561, 2561, 2561, 2561}, - {2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619, 2619, 52: 2619, 544: 2619, 548: 2619, 2619, 2619, 2619, 2619, 560: 2619, 2619, 669: 2619, 716: 2619, 2619, 719: 2619, 2619, 2619, 2619}, + {52: 5316}, + {2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563, 2563, 52: 2563, 544: 2563, 548: 2563, 2563, 2563, 2563, 2563, 560: 2563, 2563, 658: 2563, 710: 2563, 717: 2563, 2563, 2563, 2563, 722: 2563}, + {2570, 2570, 2570, 2570, 2570, 2570, 2570, 2570, 2570, 2570, 2570, 2570, 2570, 2570, 2570, 52: 2570, 544: 2570, 548: 2570, 2570, 2570, 2570, 2570, 560: 2570, 2570, 658: 2570, 710: 2570, 717: 2570, 2570, 2570, 2570, 722: 2570}, + {2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 2574, 52: 2574, 544: 2574, 548: 2574, 2574, 2574, 2574, 2574, 560: 2574, 2574, 658: 2574, 710: 2574, 717: 2574, 2574, 2574, 2574, 722: 2574}, + {2635, 2635, 2635, 2635, 2635, 2635, 2635, 2635, 2635, 2635, 2635, 2635, 2635, 2635, 2635, 52: 2635, 544: 2635, 548: 2635, 2635, 2635, 2635, 2635, 560: 2635, 2635, 658: 2635, 710: 2635, 717: 2635, 2635, 2635, 2635, 722: 2635}, // 2405 - {2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622, 2622, 52: 2622, 114: 5302, 116: 5303, 544: 2622, 548: 2622, 2622, 2622, 2622, 2622, 560: 2622, 2622, 669: 2622, 716: 2622, 2622, 719: 2622, 2622, 2622, 2622, 988: 5304}, - {2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 2753, 19: 2753, 52: 2753, 111: 2753, 113: 2753, 2753, 2753, 2753, 118: 2753, 544: 2753, 546: 2753, 548: 2753, 2753, 2753, 2753, 2753, 556: 2753, 560: 2753, 2753, 577: 2753, 669: 2753, 716: 2753, 2753, 719: 2753, 2753, 2753, 2753}, - {2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 2752, 19: 2752, 52: 2752, 111: 2752, 113: 2752, 2752, 2752, 2752, 118: 2752, 544: 2752, 546: 2752, 548: 2752, 2752, 2752, 2752, 2752, 556: 2752, 560: 2752, 2752, 577: 2752, 669: 2752, 716: 2752, 2752, 719: 2752, 2752, 2752, 2752}, - {2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 2621, 52: 2621, 544: 2621, 548: 2621, 2621, 2621, 2621, 2621, 560: 2621, 2621, 669: 2621, 716: 2621, 2621, 719: 2621, 2621, 2621, 2621}, - {2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 2625, 52: 2625, 544: 2625, 548: 2625, 2625, 2625, 2625, 2625, 560: 2625, 2625, 669: 2625, 716: 2625, 2625, 719: 2625, 2625, 2625, 2625}, + {2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 2634, 52: 2634, 544: 2634, 548: 2634, 2634, 2634, 2634, 2634, 560: 2634, 2634, 658: 2634, 710: 2634, 717: 2634, 2634, 2634, 2634, 722: 2634}, + {2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 52: 2769, 58: 5322, 94: 5323, 544: 2769, 548: 2769, 2769, 2769, 2769, 2769, 560: 2769, 2769, 658: 2769, 710: 2769, 717: 2769, 2769, 2769, 2769, 722: 2769, 1064: 5324}, + {2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 2768, 52: 2768, 544: 2768, 548: 2768, 2768, 2768, 2768, 2768, 560: 2768, 2768, 658: 2768, 710: 2768, 717: 2768, 2768, 2768, 2768, 722: 2768}, + {2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 2767, 52: 2767, 544: 2767, 548: 2767, 2767, 2767, 2767, 2767, 560: 2767, 2767, 658: 2767, 710: 2767, 717: 2767, 2767, 2767, 2767, 722: 2767}, + {2632, 2632, 2632, 2632, 2632, 2632, 2632, 2632, 2632, 2632, 2632, 2632, 2632, 2632, 2632, 52: 2632, 544: 2632, 548: 2632, 2632, 2632, 2632, 2632, 560: 2632, 2632, 658: 2632, 710: 2632, 717: 2632, 2632, 2632, 2632, 722: 2632}, // 2410 - {669: 2725, 716: 2725, 2725, 719: 2725, 724: 2725, 760: 2725, 2725}, - {2724, 2724, 2724, 2724, 2724, 2724, 9: 2724, 560: 2724, 669: 2724, 716: 2724, 2724, 719: 2724, 724: 2724, 760: 2724, 2724}, - {2658, 2658, 2658, 2658, 2658, 2658, 9: 2658, 2658, 2658, 52: 2658, 560: 2658}, - {2783, 2783, 2783, 2783, 2783, 2783, 9: 2783, 560: 2783}, - {2735, 2735, 2735, 2735, 2735, 2735, 9: 2735, 560: 2735}, + {2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 52: 2769, 58: 5322, 94: 5323, 115: 5326, 117: 5327, 544: 2769, 548: 2769, 2769, 2769, 2769, 2769, 560: 2769, 2769, 658: 2769, 710: 2769, 717: 2769, 2769, 2769, 2769, 722: 2769, 988: 5329, 1064: 5328}, + {2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771, 2771, 19: 2771, 52: 2771, 58: 2771, 94: 2771, 108: 2771, 114: 2771, 2771, 2771, 2771, 2771, 544: 2771, 546: 2771, 548: 2771, 2771, 2771, 2771, 2771, 556: 2771, 560: 2771, 2771, 577: 2771, 658: 2771, 710: 2771, 717: 2771, 2771, 2771, 2771, 722: 2771}, + {2770, 2770, 2770, 2770, 2770, 2770, 2770, 2770, 2770, 2770, 2770, 2770, 2770, 2770, 2770, 19: 2770, 52: 2770, 58: 2770, 94: 2770, 108: 2770, 114: 2770, 2770, 2770, 2770, 2770, 544: 2770, 546: 2770, 548: 2770, 2770, 2770, 2770, 2770, 556: 2770, 560: 2770, 2770, 577: 2770, 658: 2770, 710: 2770, 717: 2770, 2770, 2770, 2770, 722: 2770}, + {2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 2637, 52: 2637, 544: 2637, 548: 2637, 2637, 2637, 2637, 2637, 560: 2637, 2637, 658: 2637, 710: 2637, 717: 2637, 2637, 2637, 2637, 722: 2637}, + {2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 2769, 52: 2769, 58: 5322, 94: 5323, 544: 2769, 548: 2769, 2769, 2769, 2769, 2769, 560: 2769, 2769, 658: 2769, 710: 2769, 717: 2769, 2769, 2769, 2769, 722: 2769, 1064: 5330}, // 2415 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 5312}, - {2734, 2734, 2734, 2734, 2734, 2734, 9: 2734, 560: 2734}, - {2: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 10: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 53: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 593: 5016, 869: 5314}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 5020, 971: 5315}, - {2736, 2736, 2736, 2736, 2736, 2736, 9: 2736, 5310, 5311, 560: 2736, 1048: 5316}, + {2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 2636, 52: 2636, 544: 2636, 548: 2636, 2636, 2636, 2636, 2636, 560: 2636, 2636, 658: 2636, 710: 2636, 717: 2636, 2636, 2636, 2636, 722: 2636}, + {2640, 2640, 2640, 2640, 2640, 2640, 2640, 2640, 2640, 2640, 2640, 2640, 2640, 2640, 2640, 52: 2640, 544: 2640, 548: 2640, 2640, 2640, 2640, 2640, 560: 2640, 2640, 658: 2640, 710: 2640, 717: 2640, 2640, 2640, 2640, 722: 2640}, + {658: 2740, 710: 2740, 717: 2740, 2740, 724: 2740, 760: 2740, 2740}, + {2739, 2739, 2739, 2739, 2739, 2739, 9: 2739, 560: 2739, 658: 2739, 710: 2739, 717: 2739, 2739, 724: 2739, 760: 2739, 2739}, + {2673, 2673, 2673, 2673, 2673, 2673, 9: 2673, 2673, 2673, 52: 2673, 560: 2673}, // 2420 - {2784, 2784, 2784, 2784, 2784, 2784, 9: 2784, 560: 2784}, - {2785, 2785, 2785, 2785, 2785, 2785, 9: 2785, 560: 2785}, - {2786, 2786, 2786, 2786, 2786, 2786, 9: 2786, 560: 2786}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 5322, 1121: 5321, 1327: 5320}, - {2787, 2787, 2787, 2787, 2787, 2787, 9: 5324, 560: 2787}, + {2801, 2801, 2801, 2801, 2801, 2801, 9: 2801, 560: 2801}, + {2750, 2750, 2750, 2750, 2750, 2750, 9: 2750, 560: 2750}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 5338}, + {2749, 2749, 2749, 2749, 2749, 2749, 9: 2749, 560: 2749}, + {2: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 10: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 53: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 593: 5035, 869: 5340}, // 2425 - {1532, 1532, 1532, 1532, 1532, 1532, 9: 1532, 560: 1532}, - {1522, 1522, 1522, 1522, 1522, 1522, 9: 1522, 560: 1522, 592: 5190, 619: 5189, 1080: 5323}, - {1530, 1530, 1530, 1530, 1530, 1530, 9: 1530, 560: 1530}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 5322, 1121: 5325}, - {1531, 1531, 1531, 1531, 1531, 1531, 9: 1531, 560: 1531}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 5039, 971: 5341}, + {2751, 2751, 2751, 2751, 2751, 2751, 9: 2751, 5336, 5337, 560: 2751, 1048: 5342}, + {2802, 2802, 2802, 2802, 2802, 2802, 9: 2802, 560: 2802}, + {2803, 2803, 2803, 2803, 2803, 2803, 9: 2803, 560: 2803}, + {2804, 2804, 2804, 2804, 2804, 2804, 9: 2804, 560: 2804}, // 2430 - {2: 771, 771, 771, 771, 771, 771, 771, 10: 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 53: 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 5329, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 730: 771, 910: 5328, 925: 5327}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 730: 5331, 786: 5333, 3092, 3093, 3091, 875: 5332, 943: 5330}, - {770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 53: 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770, 545: 770, 560: 770, 573: 770, 600: 770, 622: 770, 730: 770}, - {769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 53: 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 769, 545: 769, 560: 769, 573: 769, 600: 769, 622: 769, 730: 769}, - {2790, 2790, 2790, 2790, 2790, 2790, 9: 2790, 560: 2790}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 5348, 1123: 5347, 1331: 5346}, + {2805, 2805, 2805, 2805, 2805, 2805, 9: 5350, 560: 2805}, + {1536, 1536, 1536, 1536, 1536, 1536, 9: 1536, 560: 1536}, + {1526, 1526, 1526, 1526, 1526, 1526, 9: 1526, 560: 1526, 592: 5209, 619: 5208, 1081: 5349}, + {1534, 1534, 1534, 1534, 1534, 1534, 9: 1534, 560: 1534}, // 2435 - {2759, 2759, 2759, 2759, 2759, 2759, 9: 2759, 20: 2759, 560: 2759}, - {2758, 2758, 2758, 2758, 2758, 2758, 9: 5334, 20: 2758, 560: 2758}, - {2729, 2729, 2729, 2729, 2729, 2729, 9: 2729, 20: 2729, 52: 2729, 140: 2729, 211: 2729, 226: 2729, 546: 2729, 560: 2729, 574: 2729, 724: 2729, 730: 2729}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 5335, 3092, 3093, 3091}, - {2728, 2728, 2728, 2728, 2728, 2728, 9: 2728, 20: 2728, 52: 2728, 140: 2728, 211: 2728, 226: 2728, 546: 2728, 560: 2728, 574: 2728, 724: 2728, 730: 2728}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 5348, 1123: 5351}, + {1535, 1535, 1535, 1535, 1535, 1535, 9: 1535, 560: 1535}, + {2: 775, 775, 775, 775, 775, 775, 775, 10: 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 53: 775, 775, 775, 775, 775, 5355, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 730: 775, 910: 5354, 925: 5353}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 730: 5357, 786: 5359, 3111, 3112, 3110, 875: 5358, 943: 5356}, + {774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 53: 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 774, 545: 774, 560: 774, 573: 774, 600: 774, 622: 774, 730: 774}, // 2440 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 730: 5331, 786: 5333, 3092, 3093, 3091, 875: 5332, 943: 5338}, - {2791, 2791, 2791, 2791, 2791, 2791, 9: 2791, 560: 2791}, - {20: 5339}, - {2793, 2793, 2793, 2793, 2793, 2793, 9: 2793, 560: 2793}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 730: 5331, 786: 5333, 3092, 3093, 3091, 875: 5332, 943: 5342}, + {773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 53: 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, 545: 773, 560: 773, 573: 773, 600: 773, 622: 773, 730: 773}, + {2808, 2808, 2808, 2808, 2808, 2808, 9: 2808, 560: 2808}, + {2777, 2777, 2777, 2777, 2777, 2777, 9: 2777, 20: 2777, 560: 2777}, + {2776, 2776, 2776, 2776, 2776, 2776, 9: 5360, 20: 2776, 560: 2776}, + {2744, 2744, 2744, 2744, 2744, 2744, 9: 2744, 20: 2744, 52: 2744, 142: 2744, 212: 2744, 226: 2744, 546: 2744, 560: 2744, 574: 2744, 724: 2744, 730: 2744}, // 2445 - {2792, 2792, 2792, 2792, 2792, 2792, 9: 2792, 560: 2792}, - {20: 5343}, - {2794, 2794, 2794, 2794, 2794, 2794, 9: 2794, 560: 2794}, - {2: 771, 771, 771, 771, 771, 771, 771, 10: 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 53: 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 5329, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 730: 771, 910: 5328, 925: 5345}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 730: 5331, 786: 5333, 3092, 3093, 3091, 875: 5332, 943: 5346}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5361, 3111, 3112, 3110}, + {2743, 2743, 2743, 2743, 2743, 2743, 9: 2743, 20: 2743, 52: 2743, 142: 2743, 212: 2743, 226: 2743, 546: 2743, 560: 2743, 574: 2743, 724: 2743, 730: 2743}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 730: 5357, 786: 5359, 3111, 3112, 3110, 875: 5358, 943: 5364}, + {2809, 2809, 2809, 2809, 2809, 2809, 9: 2809, 560: 2809}, + {20: 5365}, // 2450 - {2795, 2795, 2795, 2795, 2795, 2795, 9: 2795, 560: 2795}, - {2: 771, 771, 771, 771, 771, 771, 771, 10: 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 53: 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 5329, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 730: 771, 910: 5328, 925: 5348}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 730: 5331, 786: 5333, 3092, 3093, 3091, 875: 5332, 943: 5349}, - {2796, 2796, 2796, 2796, 2796, 2796, 9: 2796, 560: 2796}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 730: 5331, 786: 5333, 3092, 3093, 3091, 875: 5332, 943: 5351}, + {2811, 2811, 2811, 2811, 2811, 2811, 9: 2811, 560: 2811}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 730: 5357, 786: 5359, 3111, 3112, 3110, 875: 5358, 943: 5368}, + {2810, 2810, 2810, 2810, 2810, 2810, 9: 2810, 560: 2810}, + {20: 5369}, + {2812, 2812, 2812, 2812, 2812, 2812, 9: 2812, 560: 2812}, // 2455 - {2797, 2797, 2797, 2797, 2797, 2797, 9: 2797, 560: 2797}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 5353, 3092, 3093, 3091}, - {546: 5354}, - {622: 5355}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 5356}, + {2: 775, 775, 775, 775, 775, 775, 775, 10: 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 53: 775, 775, 775, 775, 775, 5355, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 730: 775, 910: 5354, 925: 5371}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 730: 5357, 786: 5359, 3111, 3112, 3110, 875: 5358, 943: 5372}, + {2813, 2813, 2813, 2813, 2813, 2813, 9: 2813, 560: 2813}, + {2: 775, 775, 775, 775, 775, 775, 775, 10: 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 53: 775, 775, 775, 775, 775, 5355, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 730: 775, 910: 5354, 925: 5374}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 730: 5357, 786: 5359, 3111, 3112, 3110, 875: 5358, 943: 5375}, // 2460 - {2757, 2757, 2757, 2757, 2757, 2757, 9: 2757, 286: 5360, 546: 5359, 560: 2757, 1529: 5358, 5357}, - {2798, 2798, 2798, 2798, 2798, 2798, 9: 2798, 560: 2798}, - {2756, 2756, 2756, 2756, 2756, 2756, 9: 2756, 560: 2756}, - {258: 5362}, - {258: 5361}, + {2814, 2814, 2814, 2814, 2814, 2814, 9: 2814, 560: 2814}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 730: 5357, 786: 5359, 3111, 3112, 3110, 875: 5358, 943: 5377}, + {2815, 2815, 2815, 2815, 2815, 2815, 9: 2815, 560: 2815}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5379, 3111, 3112, 3110}, + {546: 5380}, // 2465 - {2754, 2754, 2754, 2754, 2754, 2754, 9: 2754, 560: 2754}, - {2755, 2755, 2755, 2755, 2755, 2755, 9: 2755, 560: 2755}, - {203: 5364}, - {210: 5365}, - {545: 5366}, + {622: 5381}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 5382}, + {2775, 2775, 2775, 2775, 2775, 2775, 9: 2775, 287: 5386, 546: 5385, 560: 2775, 1536: 5384, 5383}, + {2816, 2816, 2816, 2816, 2816, 2816, 9: 2816, 560: 2816}, + {2774, 2774, 2774, 2774, 2774, 2774, 9: 2774, 560: 2774}, // 2470 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 5367}, - {52: 5368, 557: 3838, 3839, 3844, 575: 3840, 623: 3841, 626: 3842, 3835, 3845, 3834, 3843, 3836, 3837}, - {2153, 2153, 2153, 2153, 2153, 2153, 9: 2153, 560: 2153, 593: 5016, 869: 5369}, - {2800, 2800, 2800, 2800, 2800, 2800, 9: 2800, 560: 2800}, - {2: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 10: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 53: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 593: 5016, 869: 5388}, + {259: 5388}, + {259: 5387}, + {2772, 2772, 2772, 2772, 2772, 2772, 9: 2772, 560: 2772}, + {2773, 2773, 2773, 2773, 2773, 2773, 9: 2773, 560: 2773}, + {204: 5390}, // 2475 - {669: 5387}, - {2: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 10: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 53: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 593: 5016, 869: 5385}, - {2: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 10: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 53: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 593: 5016, 869: 5383}, - {2: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 10: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 53: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 593: 5016, 869: 5381}, - {669: 5378}, + {211: 5391}, + {545: 5392}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 5393}, + {52: 5394, 557: 3857, 3858, 3863, 575: 3859, 623: 3860, 626: 3861, 3854, 3864, 3853, 3862, 3855, 3856}, + {2159, 2159, 2159, 2159, 2159, 2159, 9: 2159, 560: 2159, 593: 5035, 869: 5395}, // 2480 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 5377, 3092, 3093, 3091}, - {2765, 2765, 2765, 2765, 2765, 2765, 9: 2765, 560: 2765}, - {2: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 10: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 53: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 593: 5016, 869: 5379}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 5307, 3092, 3093, 3091, 1305: 5380}, - {2788, 2788, 2788, 2788, 2788, 2788, 9: 2788, 560: 2788}, + {2818, 2818, 2818, 2818, 2818, 2818, 9: 2818, 560: 2818}, + {2: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 10: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 53: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 593: 5035, 869: 5414}, + {658: 5413}, + {2: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 10: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 53: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 593: 5035, 869: 5411}, + {2: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 10: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 53: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 593: 5035, 869: 5409}, // 2485 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 5382, 3092, 3093, 3091}, - {2789, 2789, 2789, 2789, 2789, 2789, 9: 2789, 560: 2789}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 5384, 3092, 3093, 3091}, - {2799, 2799, 2799, 2799, 2799, 2799, 9: 2799, 560: 2799}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 5333, 3092, 3093, 3091, 875: 5386}, + {2: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 10: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 53: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 593: 5035, 869: 5407}, + {658: 5404}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5403, 3111, 3112, 3110}, + {2783, 2783, 2783, 2783, 2783, 2783, 9: 2783, 560: 2783}, + {2: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 10: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 53: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 593: 5035, 869: 5405}, // 2490 - {2801, 2801, 2801, 2801, 2801, 2801, 9: 5334, 560: 2801}, - {2802, 2802, 2802, 2802, 2802, 2802, 9: 2802, 560: 2802}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 5389}, - {2361, 2361, 2361, 2361, 2361, 2361, 9: 2361, 560: 2361, 742: 5392, 744: 5391, 1029: 5390}, - {2803, 2803, 2803, 2803, 2803, 2803, 9: 2803, 560: 2803}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5333, 3111, 3112, 3110, 1308: 5406}, + {2806, 2806, 2806, 2806, 2806, 2806, 9: 2806, 560: 2806}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5408, 3111, 3112, 3110}, + {2807, 2807, 2807, 2807, 2807, 2807, 9: 2807, 560: 2807}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5410, 3111, 3112, 3110}, // 2495 - {2360, 2360, 2360, 2360, 2360, 2360, 9: 2360, 560: 2360}, - {2359, 2359, 2359, 2359, 2359, 2359, 9: 2359, 560: 2359}, - {167: 5329, 573: 771, 910: 5328, 925: 5394}, - {573: 3078, 814: 5395}, - {2804, 2804, 2804, 2804, 2804, 2804, 9: 2804, 560: 2804}, + {2817, 2817, 2817, 2817, 2817, 2817, 9: 2817, 560: 2817}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5359, 3111, 3112, 3110, 875: 5412}, + {2819, 2819, 2819, 2819, 2819, 2819, 9: 5360, 560: 2819}, + {2820, 2820, 2820, 2820, 2820, 2820, 9: 2820, 560: 2820}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 5415}, // 2500 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 730: 5331, 786: 5333, 3092, 3093, 3091, 875: 5332, 943: 5397}, - {2805, 2805, 2805, 2805, 2805, 2805, 9: 2805, 560: 2805}, - {203: 5399}, - {210: 5400}, - {545: 5401}, + {2367, 2367, 2367, 2367, 2367, 2367, 9: 2367, 560: 2367, 742: 5418, 744: 5417, 1029: 5416}, + {2821, 2821, 2821, 2821, 2821, 2821, 9: 2821, 560: 2821}, + {2366, 2366, 2366, 2366, 2366, 2366, 9: 2366, 560: 2366}, + {2365, 2365, 2365, 2365, 2365, 2365, 9: 2365, 560: 2365}, + {58: 5355, 573: 775, 910: 5354, 925: 5420}, // 2505 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 5402}, - {52: 5403, 557: 3838, 3839, 3844, 575: 3840, 623: 3841, 626: 3842, 3835, 3845, 3834, 3843, 3836, 3837}, - {771, 771, 771, 771, 771, 771, 9: 771, 167: 5329, 560: 771, 910: 5328, 925: 5404}, - {2809, 2809, 2809, 2809, 2809, 2809, 9: 2809, 560: 2809}, - {2: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 10: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 53: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 545: 2151, 593: 5423, 899: 5543}, + {573: 3097, 814: 5421}, + {2822, 2822, 2822, 2822, 2822, 2822, 9: 2822, 560: 2822}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 730: 5357, 786: 5359, 3111, 3112, 3110, 875: 5358, 943: 5423}, + {2823, 2823, 2823, 2823, 2823, 2823, 9: 2823, 560: 2823}, + {204: 5425}, // 2510 - {2812, 2812, 2812, 2812, 2812, 2812, 9: 2812, 560: 2812}, - {2151, 2151, 2151, 2151, 2151, 2151, 9: 2151, 125: 2151, 167: 2151, 545: 2151, 560: 2151, 593: 5423, 899: 5492, 910: 2151}, - {2: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 10: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 53: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 593: 5423, 899: 5483}, - {669: 4974, 716: 5410, 5415, 719: 5413, 724: 4975, 760: 5414, 5411, 940: 5412, 1355: 5416}, - {669: 5477}, + {211: 5426}, + {545: 5427}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 5428}, + {52: 5429, 557: 3857, 3858, 3863, 575: 3859, 623: 3860, 626: 3861, 3854, 3864, 3853, 3862, 3855, 3856}, + {775, 775, 775, 775, 775, 775, 9: 775, 58: 5355, 560: 775, 910: 5354, 925: 5430}, // 2515 - {2: 2740, 2740, 2740, 2740, 2740, 2740, 2740, 10: 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 53: 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 545: 2740, 669: 4974, 724: 4975, 940: 5432, 1212: 5471}, - {2: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 10: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 53: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 545: 2151, 556: 2151, 593: 5423, 899: 5465}, - {2: 2740, 2740, 2740, 2740, 2740, 2740, 2740, 10: 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 53: 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 2740, 545: 2740, 556: 2740, 669: 4974, 724: 4975, 940: 5432, 1212: 5433}, - {669: 5421}, - {545: 5417}, + {2827, 2827, 2827, 2827, 2827, 2827, 9: 2827, 560: 2827}, + {2: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 10: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 53: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 545: 2157, 593: 5449, 899: 5571}, + {2830, 2830, 2830, 2830, 2830, 2830, 9: 2830, 560: 2830}, + {2157, 2157, 2157, 2157, 2157, 2157, 9: 2157, 58: 2157, 127: 2157, 545: 2157, 560: 2157, 593: 5449, 899: 5520, 910: 2157}, + {2: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 10: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 53: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 593: 5449, 899: 5511}, // 2520 - {638, 638, 638, 638, 638, 638, 9: 638, 52: 638, 560: 638}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 5418}, - {52: 5419, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {2629, 2629, 2629, 2629, 2629, 2629, 9: 2629, 52: 2629, 201: 4997, 548: 3868, 550: 3867, 560: 2629, 932: 4998, 1059: 5251, 1184: 5420}, - {2584, 2584, 2584, 2584, 2584, 2584, 9: 2584, 52: 2584, 560: 2584}, + {658: 4993, 710: 5436, 717: 5441, 5439, 724: 4994, 760: 5440, 5437, 940: 5438, 1359: 5442}, + {658: 5505}, + {2: 2755, 2755, 2755, 2755, 2755, 2755, 2755, 10: 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 53: 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 545: 2755, 658: 4993, 724: 4994, 940: 5458, 1214: 5499}, + {2: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 10: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 53: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 545: 2157, 556: 2157, 593: 5449, 899: 5493}, + {2: 2755, 2755, 2755, 2755, 2755, 2755, 2755, 10: 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 53: 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 2755, 545: 2755, 556: 2755, 658: 4993, 724: 4994, 940: 5458, 1214: 5459}, // 2525 - {2: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 10: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 53: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 545: 2151, 593: 5423, 899: 5422}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 2147, 786: 5427, 3092, 3093, 3091, 998: 5426}, - {548: 3868, 550: 3867, 932: 5424}, - {659: 5425}, - {2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 53: 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 2150, 545: 2150, 547: 2150, 549: 2150, 556: 2150, 560: 2150, 575: 2150, 645: 2150, 910: 2150}, + {658: 5447}, + {545: 5443}, + {642, 642, 642, 642, 642, 642, 9: 642, 52: 642, 560: 642}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 5444}, + {52: 5445, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, // 2530 - {545: 5428}, - {545: 2146}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 5185, 786: 4083, 3092, 3093, 3091, 836: 5184, 939: 5183, 949: 5429}, - {9: 5194, 52: 5430}, - {721: 5178, 1028: 5431}, + {2644, 2644, 2644, 2644, 2644, 2644, 9: 2644, 52: 2644, 202: 5016, 548: 3887, 550: 3886, 560: 2644, 932: 5017, 1059: 5270, 1186: 5446}, + {2597, 2597, 2597, 2597, 2597, 2597, 9: 2597, 52: 2597, 560: 2597}, + {2: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 10: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 53: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 545: 2157, 593: 5449, 899: 5448}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 2153, 786: 5453, 3111, 3112, 3110, 998: 5452}, + {548: 3887, 550: 3886, 932: 5450}, // 2535 - {2585, 2585, 2585, 2585, 2585, 2585, 9: 2585, 52: 2585, 560: 2585}, - {2: 2739, 2739, 2739, 2739, 2739, 2739, 2739, 10: 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 53: 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 2739, 545: 2739, 556: 2739}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 2147, 556: 2147, 786: 5435, 3092, 3093, 3091, 998: 5436, 1068: 5434}, - {545: 5445}, - {113: 5443, 545: 2146, 556: 2146}, + {660: 5451}, + {2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 53: 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 2156, 545: 2156, 547: 2156, 549: 2156, 556: 2156, 560: 2156, 575: 2156, 645: 2156, 910: 2156}, + {545: 5454}, + {545: 2152}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 5204, 786: 4102, 3111, 3112, 3110, 836: 5203, 939: 5202, 949: 5455}, // 2540 - {545: 2137, 556: 5437}, - {192: 5440, 218: 5442, 238: 5439, 253: 5441, 1021: 5438}, - {545: 2136}, - {2130, 2130, 2130, 2130, 2130, 2130, 2130, 9: 2130, 19: 2130, 52: 2130, 111: 2130, 113: 2130, 2130, 2130, 2130, 118: 2130, 544: 2130, 2130, 2130, 556: 2130, 560: 2130, 577: 2130}, - {2129, 2129, 2129, 2129, 2129, 2129, 2129, 9: 2129, 19: 2129, 52: 2129, 111: 2129, 113: 2129, 2129, 2129, 2129, 118: 2129, 544: 2129, 2129, 2129, 556: 2129, 560: 2129, 577: 2129}, + {9: 5213, 52: 5456}, + {720: 5197, 1028: 5457}, + {2598, 2598, 2598, 2598, 2598, 2598, 9: 2598, 52: 2598, 560: 2598}, + {2: 2754, 2754, 2754, 2754, 2754, 2754, 2754, 10: 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 53: 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 2754, 545: 2754, 556: 2754}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 2153, 556: 2153, 786: 5461, 3111, 3112, 3110, 998: 5462, 1069: 5460}, // 2545 - {2128, 2128, 2128, 2128, 2128, 2128, 2128, 9: 2128, 19: 2128, 52: 2128, 111: 2128, 113: 2128, 2128, 2128, 2128, 118: 2128, 544: 2128, 2128, 2128, 556: 2128, 560: 2128, 577: 2128}, - {2127, 2127, 2127, 2127, 2127, 2127, 2127, 9: 2127, 19: 2127, 52: 2127, 111: 2127, 113: 2127, 2127, 2127, 2127, 118: 2127, 544: 2127, 2127, 2127, 556: 2127, 560: 2127, 577: 2127}, - {192: 5440, 218: 5442, 238: 5439, 253: 5441, 1021: 5444}, - {545: 2135}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 5185, 786: 4083, 3092, 3093, 3091, 836: 5184, 939: 5183, 949: 5446}, + {545: 5471}, + {114: 5469, 545: 2152, 556: 2152}, + {545: 2141, 556: 5463}, + {193: 5466, 218: 5468, 238: 5465, 253: 5467, 1021: 5464}, + {545: 2140}, // 2550 - {9: 5194, 52: 5447}, - {2145, 2145, 2145, 2145, 2145, 2145, 2145, 9: 2145, 19: 2145, 52: 2145, 113: 2145, 2145, 2145, 2145, 118: 2145, 546: 2145, 556: 2145, 560: 2145, 1000: 5448}, - {2586, 2586, 2586, 2586, 2586, 2586, 5453, 9: 2586, 19: 5450, 52: 2586, 113: 5457, 5302, 4994, 5303, 118: 4993, 546: 5452, 556: 5456, 560: 2586, 977: 5454, 979: 5451, 988: 5455, 999: 5449}, - {2144, 2144, 2144, 2144, 2144, 2144, 2144, 9: 2144, 19: 2144, 52: 2144, 111: 2144, 113: 2144, 2144, 2144, 2144, 118: 2144, 546: 2144, 556: 2144, 560: 2144, 577: 2144}, - {569: 4655, 573: 2356, 817: 5463}, + {2134, 2134, 2134, 2134, 2134, 2134, 2134, 9: 2134, 19: 2134, 52: 2134, 58: 2134, 94: 2134, 108: 2134, 114: 2134, 2134, 2134, 2134, 2134, 544: 2134, 2134, 2134, 556: 2134, 560: 2134, 577: 2134}, + {2133, 2133, 2133, 2133, 2133, 2133, 2133, 9: 2133, 19: 2133, 52: 2133, 58: 2133, 94: 2133, 108: 2133, 114: 2133, 2133, 2133, 2133, 2133, 544: 2133, 2133, 2133, 556: 2133, 560: 2133, 577: 2133}, + {2132, 2132, 2132, 2132, 2132, 2132, 2132, 9: 2132, 19: 2132, 52: 2132, 58: 2132, 94: 2132, 108: 2132, 114: 2132, 2132, 2132, 2132, 2132, 544: 2132, 2132, 2132, 556: 2132, 560: 2132, 577: 2132}, + {2131, 2131, 2131, 2131, 2131, 2131, 2131, 9: 2131, 19: 2131, 52: 2131, 58: 2131, 94: 2131, 108: 2131, 114: 2131, 2131, 2131, 2131, 2131, 544: 2131, 2131, 2131, 556: 2131, 560: 2131, 577: 2131}, + {193: 5466, 218: 5468, 238: 5465, 253: 5467, 1021: 5470}, // 2555 - {2142, 2142, 2142, 2142, 2142, 2142, 2142, 9: 2142, 19: 2142, 52: 2142, 111: 2142, 113: 2142, 2142, 2142, 2142, 118: 2142, 546: 2142, 556: 2142, 560: 2142, 577: 2142}, - {429: 5461}, - {547: 5460}, - {2139, 2139, 2139, 2139, 2139, 2139, 2139, 9: 2139, 19: 2139, 52: 2139, 111: 2139, 113: 2139, 2139, 2139, 2139, 118: 2139, 546: 2139, 556: 2139, 560: 2139, 577: 2139}, - {2138, 2138, 2138, 2138, 2138, 2138, 2138, 9: 2138, 19: 2138, 52: 2138, 111: 2138, 113: 2138, 2138, 2138, 2138, 118: 2138, 546: 2138, 556: 2138, 560: 2138, 577: 2138}, + {545: 2139}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 5204, 786: 4102, 3111, 3112, 3110, 836: 5203, 939: 5202, 949: 5472}, + {9: 5213, 52: 5473}, + {2151, 2151, 2151, 2151, 2151, 2151, 2151, 9: 2151, 19: 2151, 52: 2151, 58: 2151, 94: 2151, 114: 2151, 2151, 2151, 2151, 2151, 546: 2151, 556: 2151, 560: 2151, 1000: 5474}, + {2599, 2599, 2599, 2599, 2599, 2599, 5479, 9: 2599, 19: 5476, 52: 2599, 58: 5483, 94: 5482, 114: 5485, 5326, 5013, 5327, 5012, 546: 5478, 556: 5484, 560: 2599, 977: 5480, 979: 5477, 988: 5481, 999: 5475}, // 2560 - {192: 5440, 218: 5442, 238: 5439, 253: 5441, 1021: 5459}, - {192: 5440, 218: 5442, 238: 5439, 253: 5441, 1021: 5458}, - {2131, 2131, 2131, 2131, 2131, 2131, 2131, 9: 2131, 19: 2131, 52: 2131, 111: 2131, 113: 2131, 2131, 2131, 2131, 118: 2131, 544: 2131, 546: 2131, 556: 2131, 560: 2131, 577: 2131}, - {2132, 2132, 2132, 2132, 2132, 2132, 2132, 9: 2132, 19: 2132, 52: 2132, 111: 2132, 113: 2132, 2132, 2132, 2132, 118: 2132, 544: 2132, 546: 2132, 556: 2132, 560: 2132, 577: 2132}, - {2140, 2140, 2140, 2140, 2140, 2140, 2140, 9: 2140, 19: 2140, 52: 2140, 111: 2140, 113: 2140, 2140, 2140, 2140, 118: 2140, 546: 2140, 556: 2140, 560: 2140, 577: 2140}, + {2150, 2150, 2150, 2150, 2150, 2150, 2150, 9: 2150, 19: 2150, 52: 2150, 58: 2150, 94: 2150, 108: 2150, 114: 2150, 2150, 2150, 2150, 2150, 546: 2150, 556: 2150, 560: 2150, 577: 2150}, + {569: 4674, 573: 2362, 817: 5491}, + {2148, 2148, 2148, 2148, 2148, 2148, 2148, 9: 2148, 19: 2148, 52: 2148, 58: 2148, 94: 2148, 108: 2148, 114: 2148, 2148, 2148, 2148, 2148, 546: 2148, 556: 2148, 560: 2148, 577: 2148}, + {429: 5489}, + {547: 5488}, // 2565 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 5462, 3092, 3093, 3091}, - {2141, 2141, 2141, 2141, 2141, 2141, 2141, 9: 2141, 19: 2141, 52: 2141, 111: 2141, 113: 2141, 2141, 2141, 2141, 118: 2141, 546: 2141, 556: 2141, 560: 2141, 577: 2141}, - {573: 3078, 814: 3922, 829: 5464}, - {2143, 2143, 2143, 2143, 2143, 2143, 2143, 9: 2143, 19: 2143, 52: 2143, 111: 2143, 113: 2143, 2143, 2143, 2143, 118: 2143, 546: 2143, 556: 2143, 560: 2143, 577: 2143}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 2147, 556: 2147, 786: 5435, 3092, 3093, 3091, 998: 5436, 1068: 5466}, + {2145, 2145, 2145, 2145, 2145, 2145, 2145, 9: 2145, 19: 2145, 52: 2145, 58: 2145, 94: 2145, 108: 2145, 114: 2145, 2145, 2145, 2145, 2145, 546: 2145, 556: 2145, 560: 2145, 577: 2145}, + {2144, 2144, 2144, 2144, 2144, 2144, 2144, 9: 2144, 19: 2144, 52: 2144, 58: 2144, 94: 2144, 108: 2144, 114: 2144, 2144, 2144, 2144, 2144, 546: 2144, 556: 2144, 560: 2144, 577: 2144}, + {2143, 2143, 2143, 2143, 2143, 2143, 2143, 9: 2143, 19: 2143, 52: 2143, 58: 2143, 94: 2143, 108: 2143, 114: 2143, 2143, 2143, 2143, 2143, 546: 2143, 556: 2143, 560: 2143, 577: 2143}, + {2142, 2142, 2142, 2142, 2142, 2142, 2142, 9: 2142, 19: 2142, 52: 2142, 58: 2142, 94: 2142, 108: 2142, 114: 2142, 2142, 2142, 2142, 2142, 546: 2142, 556: 2142, 560: 2142, 577: 2142}, + {193: 5466, 218: 5468, 238: 5465, 253: 5467, 1021: 5487}, // 2570 - {545: 5467}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 5185, 786: 4083, 3092, 3093, 3091, 836: 5184, 939: 5183, 949: 5468}, - {9: 5194, 52: 5469}, - {2145, 2145, 2145, 2145, 2145, 2145, 2145, 9: 2145, 19: 2145, 52: 2145, 113: 2145, 2145, 2145, 2145, 118: 2145, 546: 2145, 556: 2145, 560: 2145, 1000: 5470}, - {2587, 2587, 2587, 2587, 2587, 2587, 5453, 9: 2587, 19: 5450, 52: 2587, 113: 5457, 5302, 4994, 5303, 118: 4993, 546: 5452, 556: 5456, 560: 2587, 977: 5454, 979: 5451, 988: 5455, 999: 5449}, + {193: 5466, 218: 5468, 238: 5465, 253: 5467, 1021: 5486}, + {2135, 2135, 2135, 2135, 2135, 2135, 2135, 9: 2135, 19: 2135, 52: 2135, 58: 2135, 94: 2135, 108: 2135, 114: 2135, 2135, 2135, 2135, 2135, 544: 2135, 546: 2135, 556: 2135, 560: 2135, 577: 2135}, + {2136, 2136, 2136, 2136, 2136, 2136, 2136, 9: 2136, 19: 2136, 52: 2136, 58: 2136, 94: 2136, 108: 2136, 114: 2136, 2136, 2136, 2136, 2136, 544: 2136, 546: 2136, 556: 2136, 560: 2136, 577: 2136}, + {2146, 2146, 2146, 2146, 2146, 2146, 2146, 9: 2146, 19: 2146, 52: 2146, 58: 2146, 94: 2146, 108: 2146, 114: 2146, 2146, 2146, 2146, 2146, 546: 2146, 556: 2146, 560: 2146, 577: 2146}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5490, 3111, 3112, 3110}, // 2575 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 2147, 786: 5427, 3092, 3093, 3091, 998: 5472}, - {545: 5473}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 5185, 786: 4083, 3092, 3093, 3091, 836: 5184, 939: 5183, 949: 5474}, - {9: 5194, 52: 5475}, - {2145, 2145, 2145, 2145, 2145, 2145, 2145, 9: 2145, 19: 2145, 52: 2145, 113: 2145, 2145, 2145, 2145, 118: 2145, 546: 2145, 556: 2145, 560: 2145, 1000: 5476}, + {2147, 2147, 2147, 2147, 2147, 2147, 2147, 9: 2147, 19: 2147, 52: 2147, 58: 2147, 94: 2147, 108: 2147, 114: 2147, 2147, 2147, 2147, 2147, 546: 2147, 556: 2147, 560: 2147, 577: 2147}, + {573: 3097, 814: 3941, 829: 5492}, + {2149, 2149, 2149, 2149, 2149, 2149, 2149, 9: 2149, 19: 2149, 52: 2149, 58: 2149, 94: 2149, 108: 2149, 114: 2149, 2149, 2149, 2149, 2149, 546: 2149, 556: 2149, 560: 2149, 577: 2149}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 2153, 556: 2153, 786: 5461, 3111, 3112, 3110, 998: 5462, 1069: 5494}, + {545: 5495}, // 2580 - {2588, 2588, 2588, 2588, 2588, 2588, 5453, 9: 2588, 19: 5450, 52: 2588, 113: 5457, 5302, 4994, 5303, 118: 4993, 546: 5452, 556: 5456, 560: 2588, 977: 5454, 979: 5451, 988: 5455, 999: 5449}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 2147, 556: 2147, 786: 5435, 3092, 3093, 3091, 998: 5436, 1068: 5478}, - {545: 5479}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 5185, 786: 4083, 3092, 3093, 3091, 836: 5184, 939: 5183, 949: 5480}, - {9: 5194, 52: 5481}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 5204, 786: 4102, 3111, 3112, 3110, 836: 5203, 939: 5202, 949: 5496}, + {9: 5213, 52: 5497}, + {2151, 2151, 2151, 2151, 2151, 2151, 2151, 9: 2151, 19: 2151, 52: 2151, 58: 2151, 94: 2151, 114: 2151, 2151, 2151, 2151, 2151, 546: 2151, 556: 2151, 560: 2151, 1000: 5498}, + {2600, 2600, 2600, 2600, 2600, 2600, 5479, 9: 2600, 19: 5476, 52: 2600, 58: 5483, 94: 5482, 114: 5485, 5326, 5013, 5327, 5012, 546: 5478, 556: 5484, 560: 2600, 977: 5480, 979: 5477, 988: 5481, 999: 5475}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 2153, 786: 5453, 3111, 3112, 3110, 998: 5500}, // 2585 - {2145, 2145, 2145, 2145, 2145, 2145, 2145, 9: 2145, 19: 2145, 52: 2145, 113: 2145, 2145, 2145, 2145, 118: 2145, 546: 2145, 556: 2145, 560: 2145, 1000: 5482}, - {2589, 2589, 2589, 2589, 2589, 2589, 5453, 9: 2589, 19: 5450, 52: 2589, 113: 5457, 5302, 4994, 5303, 118: 4993, 546: 5452, 556: 5456, 560: 2589, 977: 5454, 979: 5451, 988: 5455, 999: 5449}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 5484, 3092, 3093, 3091}, - {297: 5486, 305: 5488, 308: 5487, 1302: 5485}, - {545: 5489}, + {545: 5501}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 5204, 786: 4102, 3111, 3112, 3110, 836: 5203, 939: 5202, 949: 5502}, + {9: 5213, 52: 5503}, + {2151, 2151, 2151, 2151, 2151, 2151, 2151, 9: 2151, 19: 2151, 52: 2151, 58: 2151, 94: 2151, 114: 2151, 2151, 2151, 2151, 2151, 546: 2151, 556: 2151, 560: 2151, 1000: 5504}, + {2601, 2601, 2601, 2601, 2601, 2601, 5479, 9: 2601, 19: 5476, 52: 2601, 58: 5483, 94: 5482, 114: 5485, 5326, 5013, 5327, 5012, 546: 5478, 556: 5484, 560: 2601, 977: 5480, 979: 5477, 988: 5481, 999: 5475}, // 2590 - {52: 2531, 545: 2531}, - {52: 2530, 545: 2530}, - {52: 2529, 545: 2529}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 4084, 918: 5490}, - {9: 4086, 52: 5491}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 2153, 556: 2153, 786: 5461, 3111, 3112, 3110, 998: 5462, 1069: 5506}, + {545: 5507}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 5204, 786: 4102, 3111, 3112, 3110, 836: 5203, 939: 5202, 949: 5508}, + {9: 5213, 52: 5509}, + {2151, 2151, 2151, 2151, 2151, 2151, 2151, 9: 2151, 19: 2151, 52: 2151, 58: 2151, 94: 2151, 114: 2151, 2151, 2151, 2151, 2151, 546: 2151, 556: 2151, 560: 2151, 1000: 5510}, // 2595 - {2808, 2808, 2808, 2808, 2808, 2808, 9: 2808, 560: 2808}, - {771, 771, 771, 771, 771, 771, 9: 771, 125: 771, 167: 5329, 545: 771, 560: 771, 910: 5328, 925: 5493}, - {2452, 2452, 2452, 2452, 2452, 2452, 9: 2452, 125: 5495, 545: 5496, 560: 2452, 1248: 5494}, - {2811, 2811, 2811, 2811, 2811, 2811, 9: 2811, 560: 2811}, - {573: 3078, 814: 5542}, + {2602, 2602, 2602, 2602, 2602, 2602, 5479, 9: 2602, 19: 5476, 52: 2602, 58: 5483, 94: 5482, 114: 5485, 5326, 5013, 5327, 5012, 546: 5478, 556: 5484, 560: 2602, 977: 5480, 979: 5477, 988: 5481, 999: 5475}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5512, 3111, 3112, 3110}, + {298: 5514, 306: 5516, 309: 5515, 1304: 5513}, + {545: 5517}, + {52: 2544, 545: 2544}, // 2600 - {560: 5499, 1083: 5498, 1247: 5497}, - {9: 5540, 52: 5539}, - {9: 2450, 52: 2450}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 5500, 3092, 3093, 3091}, - {6: 2429, 2429, 9: 2429, 18: 2429, 20: 2429, 22: 2429, 2429, 2429, 2429, 2429, 2429, 52: 2429, 190: 5505, 273: 5504, 545: 2429, 549: 5503, 562: 5502, 724: 2429, 1431: 5501}, + {52: 2543, 545: 2543}, + {52: 2542, 545: 2542}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 4103, 918: 5518}, + {9: 4105, 52: 5519}, + {2826, 2826, 2826, 2826, 2826, 2826, 9: 2826, 560: 2826}, // 2605 - {6: 2442, 2442, 9: 2442, 18: 2442, 20: 2442, 22: 2442, 2442, 2442, 2442, 2442, 2442, 52: 2442, 545: 2442, 724: 2442, 1082: 5526}, - {203: 5506, 620: 5507}, - {6: 2426, 2426, 9: 2426, 18: 2426, 20: 2426, 22: 2426, 2426, 2426, 2426, 2426, 2426, 52: 2426, 545: 2426, 724: 2426}, - {6: 2424, 2424, 9: 2424, 18: 2424, 20: 2424, 22: 2424, 2424, 2424, 2424, 2424, 2424, 52: 2424, 545: 2424, 724: 2424}, - {6: 2423, 2423, 9: 2423, 18: 2423, 20: 2423, 22: 2423, 2423, 2423, 2423, 2423, 2423, 52: 2423, 545: 2423, 724: 2423}, + {775, 775, 775, 775, 775, 775, 9: 775, 58: 5355, 127: 775, 545: 775, 560: 775, 910: 5354, 925: 5521}, + {2458, 2458, 2458, 2458, 2458, 2458, 9: 2458, 127: 5523, 545: 5524, 560: 2458, 1250: 5522}, + {2829, 2829, 2829, 2829, 2829, 2829, 9: 2829, 560: 2829}, + {573: 3097, 814: 5570}, + {560: 5527, 1084: 5526, 1249: 5525}, // 2610 - {210: 5516}, - {545: 5508}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 5510, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 5511, 1164: 5512, 1363: 5509}, - {9: 5514, 52: 5513}, - {9: 2237, 52: 2237, 545: 3956}, + {9: 5568, 52: 5567}, + {9: 2456, 52: 2456}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5528, 3111, 3112, 3110}, + {6: 2435, 2435, 9: 2435, 18: 2435, 20: 2435, 22: 2435, 2435, 2435, 2435, 2435, 2435, 52: 2435, 191: 5533, 274: 5532, 545: 2435, 549: 5531, 562: 5530, 724: 2435, 1436: 5529}, + {6: 2448, 2448, 9: 2448, 18: 2448, 20: 2448, 22: 2448, 2448, 2448, 2448, 2448, 2448, 52: 2448, 545: 2448, 724: 2448, 1083: 5554}, // 2615 - {9: 2236, 52: 2236, 557: 3838, 3839, 3844, 575: 3840, 623: 3841, 626: 3842, 3835, 3845, 3834, 3843, 3836, 3837}, - {9: 2220, 52: 2220}, - {6: 2425, 2425, 9: 2425, 18: 2425, 20: 2425, 22: 2425, 2425, 2425, 2425, 2425, 2425, 52: 2425, 545: 2425, 724: 2425}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 5510, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 5511, 1164: 5515}, - {9: 2219, 52: 2219}, + {204: 5534, 620: 5535}, + {6: 2432, 2432, 9: 2432, 18: 2432, 20: 2432, 22: 2432, 2432, 2432, 2432, 2432, 2432, 52: 2432, 545: 2432, 724: 2432}, + {6: 2430, 2430, 9: 2430, 18: 2430, 20: 2430, 22: 2430, 2430, 2430, 2430, 2430, 2430, 52: 2430, 545: 2430, 724: 2430}, + {6: 2429, 2429, 9: 2429, 18: 2429, 20: 2429, 22: 2429, 2429, 2429, 2429, 2429, 2429, 52: 2429, 545: 2429, 724: 2429}, + {211: 5544}, // 2620 - {545: 5518, 735: 5517}, - {6: 2428, 2428, 9: 2428, 18: 2428, 20: 2428, 22: 2428, 2428, 2428, 2428, 2428, 2428, 52: 2428, 545: 2428, 724: 2428}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 735: 5520, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 5521, 1226: 5522, 1412: 5519}, - {9: 5524, 52: 5523}, - {9: 2235, 52: 2235}, + {545: 5536}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 5538, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 5539, 1166: 5540, 1367: 5537}, + {9: 5542, 52: 5541}, + {9: 2243, 52: 2243, 545: 3975}, + {9: 2242, 52: 2242, 557: 3857, 3858, 3863, 575: 3859, 623: 3860, 626: 3861, 3854, 3864, 3853, 3862, 3855, 3856}, // 2625 - {9: 2234, 52: 2234, 557: 3838, 3839, 3844, 575: 3840, 623: 3841, 626: 3842, 3835, 3845, 3834, 3843, 3836, 3837}, - {9: 2222, 52: 2222}, - {6: 2427, 2427, 9: 2427, 18: 2427, 20: 2427, 22: 2427, 2427, 2427, 2427, 2427, 2427, 52: 2427, 545: 2427, 724: 2427}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 735: 5520, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 5521, 1226: 5525}, - {9: 2221, 52: 2221}, + {9: 2226, 52: 2226}, + {6: 2431, 2431, 9: 2431, 18: 2431, 20: 2431, 22: 2431, 2431, 2431, 2431, 2431, 2431, 52: 2431, 545: 2431, 724: 2431}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 5538, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 5539, 1166: 5543}, + {9: 2225, 52: 2225}, + {545: 5546, 735: 5545}, // 2630 - {6: 4793, 5530, 9: 2447, 18: 4749, 20: 4801, 22: 4794, 4797, 4796, 4799, 4800, 4802, 52: 2447, 545: 5528, 724: 4798, 880: 4803, 927: 5529, 1493: 5527}, - {9: 2448, 52: 2448}, - {124: 5533, 1303: 5532, 1492: 5531}, - {2441, 2441, 6: 2441, 2441, 9: 2441, 18: 2441, 20: 2441, 22: 2441, 2441, 2441, 2441, 2441, 2441, 52: 2441, 545: 2441, 724: 2441}, - {22: 4945}, + {6: 2434, 2434, 9: 2434, 18: 2434, 20: 2434, 22: 2434, 2434, 2434, 2434, 2434, 2434, 52: 2434, 545: 2434, 724: 2434}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 735: 5548, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 5549, 1228: 5550, 1417: 5547}, + {9: 5552, 52: 5551}, + {9: 2241, 52: 2241}, + {9: 2240, 52: 2240, 557: 3857, 3858, 3863, 575: 3859, 623: 3860, 626: 3861, 3854, 3864, 3853, 3862, 3855, 3856}, // 2635 - {9: 5537, 52: 5536}, - {9: 2445, 52: 2445}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 5534, 3092, 3093, 3091}, - {6: 2442, 2442, 9: 2442, 18: 2442, 20: 2442, 22: 2442, 2442, 2442, 2442, 2442, 2442, 52: 2442, 724: 2442, 1082: 5535}, - {6: 4793, 5530, 9: 2443, 18: 4749, 20: 4801, 22: 4794, 4797, 4796, 4799, 4800, 4802, 52: 2443, 724: 4798, 880: 4803, 927: 5529}, + {9: 2228, 52: 2228}, + {6: 2433, 2433, 9: 2433, 18: 2433, 20: 2433, 22: 2433, 2433, 2433, 2433, 2433, 2433, 52: 2433, 545: 2433, 724: 2433}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 735: 5548, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 5549, 1228: 5553}, + {9: 2227, 52: 2227}, + {6: 4812, 5558, 9: 2453, 18: 4768, 20: 4820, 22: 4813, 4816, 4815, 4818, 4819, 4821, 52: 2453, 545: 5556, 724: 4817, 880: 4822, 927: 5557, 1498: 5555}, // 2640 - {9: 2446, 52: 2446}, - {124: 5533, 1303: 5538}, - {9: 2444, 52: 2444}, - {2451, 2451, 2451, 2451, 2451, 2451, 9: 2451, 544: 2451, 2451, 2451, 551: 2451, 560: 2451, 562: 2451, 2451, 566: 2451, 622: 2451, 670: 2451}, - {560: 5499, 1083: 5541}, + {9: 2454, 52: 2454}, + {126: 5561, 1306: 5560, 1497: 5559}, + {2447, 2447, 6: 2447, 2447, 9: 2447, 18: 2447, 20: 2447, 22: 2447, 2447, 2447, 2447, 2447, 2447, 52: 2447, 545: 2447, 724: 2447}, + {22: 4964}, + {9: 5565, 52: 5564}, // 2645 - {9: 2449, 52: 2449}, - {2810, 2810, 2810, 2810, 2810, 2810, 9: 2810, 560: 2810}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 5545, 786: 4083, 3092, 3093, 3091, 836: 5020, 971: 5544}, - {2736, 2736, 2736, 2736, 2736, 2736, 9: 2736, 5310, 5311, 560: 2736, 1048: 5553}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 669: 2727, 716: 2727, 2727, 719: 2727, 5156, 724: 2727, 760: 2727, 2727, 786: 4083, 3092, 3093, 3091, 836: 5020, 945: 5409, 971: 5547, 1019: 5548, 1101: 5549, 1306: 5546}, + {9: 2451, 52: 2451}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5562, 3111, 3112, 3110}, + {6: 2448, 2448, 9: 2448, 18: 2448, 20: 2448, 22: 2448, 2448, 2448, 2448, 2448, 2448, 52: 2448, 724: 2448, 1083: 5563}, + {6: 4812, 5558, 9: 2449, 18: 4768, 20: 4820, 22: 4813, 4816, 4815, 4818, 4819, 4821, 52: 2449, 724: 4817, 880: 4822, 927: 5557}, + {9: 2452, 52: 2452}, // 2650 - {9: 5551, 52: 5550}, - {9: 635, 52: 635}, - {9: 634, 52: 634}, - {9: 633, 52: 633}, - {2813, 2813, 2813, 2813, 2813, 2813, 9: 2813, 560: 2813}, + {126: 5561, 1306: 5566}, + {9: 2450, 52: 2450}, + {2457, 2457, 2457, 2457, 2457, 2457, 9: 2457, 544: 2457, 2457, 2457, 551: 2457, 560: 2457, 562: 2457, 2457, 566: 2457, 622: 2457, 662: 2457, 726: 2457}, + {560: 5527, 1084: 5569}, + {9: 2455, 52: 2455}, // 2655 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 669: 2727, 716: 2727, 2727, 719: 2727, 5156, 724: 2727, 760: 2727, 2727, 786: 4083, 3092, 3093, 3091, 836: 5020, 945: 5409, 971: 5547, 1019: 5548, 1101: 5552}, - {9: 632, 52: 632}, - {2814, 2814, 2814, 2814, 2814, 2814, 9: 2814, 560: 2814}, - {16: 4485, 567: 4486, 723: 4484, 868: 5555}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 549: 5557, 600: 4413, 786: 3793, 3092, 3093, 3091, 820: 4412, 921: 5556}, + {2828, 2828, 2828, 2828, 2828, 2828, 9: 2828, 560: 2828}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 5573, 786: 4102, 3111, 3112, 3110, 836: 5039, 971: 5572}, + {2751, 2751, 2751, 2751, 2751, 2751, 9: 2751, 5336, 5337, 560: 2751, 1048: 5581}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 658: 2742, 710: 2742, 717: 2742, 2742, 5175, 724: 2742, 760: 2742, 2742, 786: 4102, 3111, 3112, 3110, 836: 5039, 945: 5435, 971: 5575, 1019: 5576, 1103: 5577, 1309: 5574}, + {9: 5579, 52: 5578}, // 2660 - {452, 452, 452, 452, 452, 452, 9: 452, 552: 5559, 560: 452, 1236: 5561}, - {452, 452, 452, 452, 452, 452, 9: 452, 552: 5559, 560: 452, 1236: 5558}, - {2815, 2815, 2815, 2815, 2815, 2815, 9: 2815, 560: 2815}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 600: 3791, 786: 3793, 3092, 3093, 3091, 820: 3790, 991: 5560}, - {451, 451, 451, 451, 451, 451, 9: 451, 560: 451}, + {9: 639, 52: 639}, + {9: 638, 52: 638}, + {9: 637, 52: 637}, + {2831, 2831, 2831, 2831, 2831, 2831, 9: 2831, 560: 2831}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 658: 2742, 710: 2742, 717: 2742, 2742, 5175, 724: 2742, 760: 2742, 2742, 786: 4102, 3111, 3112, 3110, 836: 5039, 945: 5435, 971: 5575, 1019: 5576, 1103: 5580}, // 2665 - {2816, 2816, 2816, 2816, 2816, 2816, 9: 2816, 560: 2816}, - {227: 5574}, - {211: 5564}, - {227: 5565}, - {573: 3078, 814: 3922, 829: 5566}, + {9: 636, 52: 636}, + {2832, 2832, 2832, 2832, 2832, 2832, 9: 2832, 560: 2832}, + {16: 4504, 567: 4505, 723: 4503, 868: 5583}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 549: 5585, 600: 4432, 786: 3812, 3111, 3112, 3110, 820: 4431, 921: 5584}, + {456, 456, 456, 456, 456, 456, 9: 456, 552: 5587, 560: 456, 1238: 5589}, // 2670 - {2821, 2821, 2821, 2821, 2821, 2821, 9: 2821, 232: 5567, 560: 2821, 1073: 5568}, - {331: 5569}, - {2817, 2817, 2817, 2817, 2817, 2817, 9: 2817, 560: 2817}, - {547: 5571, 1490: 5570}, - {2820, 2820, 2820, 2820, 2820, 2820, 9: 5572, 16: 2820, 18: 2820, 21: 2820, 549: 2820, 552: 2820, 560: 2820, 567: 2820, 571: 2820, 723: 2820}, + {456, 456, 456, 456, 456, 456, 9: 456, 552: 5587, 560: 456, 1238: 5586}, + {2833, 2833, 2833, 2833, 2833, 2833, 9: 2833, 560: 2833}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 600: 3810, 786: 3812, 3111, 3112, 3110, 820: 3809, 991: 5588}, + {455, 455, 455, 455, 455, 455, 9: 455, 560: 455}, + {2834, 2834, 2834, 2834, 2834, 2834, 9: 2834, 560: 2834}, // 2675 - {450, 450, 450, 450, 450, 450, 9: 450, 16: 450, 18: 450, 21: 450, 549: 450, 552: 450, 560: 450, 567: 450, 571: 450, 723: 450}, - {547: 5573}, - {449, 449, 449, 449, 449, 449, 9: 449, 16: 449, 18: 449, 21: 449, 549: 449, 552: 449, 560: 449, 567: 449, 571: 449, 723: 449}, - {573: 3078, 814: 3922, 829: 5575}, - {2821, 2821, 2821, 2821, 2821, 2821, 9: 2821, 232: 5567, 560: 2821, 1073: 5576}, + {227: 5602}, + {212: 5592}, + {227: 5593}, + {573: 3097, 814: 3941, 829: 5594}, + {2839, 2839, 2839, 2839, 2839, 2839, 9: 2839, 232: 5595, 560: 2839, 1074: 5596}, // 2680 - {2818, 2818, 2818, 2818, 2818, 2818, 9: 2818, 560: 2818}, - {8: 591, 29: 591}, - {585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 15: 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 585, 544: 585, 585, 585, 549: 585, 551: 585, 585, 585, 560: 585, 562: 585, 585, 566: 585, 585, 580: 585, 622: 585, 670: 585, 723: 585, 585}, - {6: 4793, 4795, 592, 15: 4812, 2486, 4810, 4749, 4814, 4801, 4830, 4794, 4797, 4796, 4799, 4800, 4802, 4809, 592, 4820, 4821, 4831, 4807, 4808, 4813, 4815, 4827, 4826, 4835, 4828, 4825, 4818, 4823, 4824, 4817, 4819, 4822, 4811, 4832, 4833, 549: 4792, 552: 2486, 4829, 567: 2486, 580: 5577, 723: 2486, 4798, 880: 4803, 906: 4805, 927: 4804, 948: 4806, 955: 4816, 960: 5580}, - {584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 15: 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 544: 584, 584, 584, 549: 584, 551: 584, 584, 584, 560: 584, 562: 584, 584, 566: 584, 584, 580: 584, 622: 584, 670: 584, 723: 584, 584}, + {333: 5597}, + {2835, 2835, 2835, 2835, 2835, 2835, 9: 2835, 560: 2835}, + {547: 5599, 1495: 5598}, + {2838, 2838, 2838, 2838, 2838, 2838, 9: 5600, 16: 2838, 18: 2838, 21: 2838, 549: 2838, 552: 2838, 560: 2838, 567: 2838, 571: 2838, 723: 2838}, + {454, 454, 454, 454, 454, 454, 9: 454, 16: 454, 18: 454, 21: 454, 549: 454, 552: 454, 560: 454, 567: 454, 571: 454, 723: 454}, // 2685 - {547: 5583, 549: 5582}, - {2831, 2831, 2831, 2831, 2831, 2831, 9: 2831, 560: 2831}, - {2830, 2830, 2830, 2830, 2830, 2830, 9: 2830, 560: 2830}, - {547: 5586, 549: 5585}, - {2833, 2833, 2833, 2833, 2833, 2833, 9: 2833, 560: 2833}, + {547: 5601}, + {453, 453, 453, 453, 453, 453, 9: 453, 16: 453, 18: 453, 21: 453, 549: 453, 552: 453, 560: 453, 567: 453, 571: 453, 723: 453}, + {573: 3097, 814: 3941, 829: 5603}, + {2839, 2839, 2839, 2839, 2839, 2839, 9: 2839, 232: 5595, 560: 2839, 1074: 5604}, + {2836, 2836, 2836, 2836, 2836, 2836, 9: 2836, 560: 2836}, // 2690 - {2832, 2832, 2832, 2832, 2832, 2832, 9: 2832, 560: 2832}, - {2: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 10: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 53: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 547: 2356, 549: 2356, 569: 4655, 571: 5589, 817: 5588}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 5591, 549: 5593, 786: 5594, 3092, 3093, 3091, 1005: 5592}, - {549: 5590}, - {2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 15: 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 2834, 52: 2834, 544: 2834, 2834, 2834, 549: 2834, 551: 2834, 2834, 2834, 560: 2834, 562: 2834, 2834, 566: 2834, 2834, 571: 2834, 580: 2834, 622: 2834, 670: 2834, 723: 2834, 2834}, + {8: 595, 29: 595}, + {589, 589, 589, 589, 589, 589, 589, 589, 589, 589, 15: 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, 589, 589, 589, 589, 589, 544: 589, 589, 589, 549: 589, 551: 589, 589, 589, 560: 589, 562: 589, 589, 566: 589, 589, 580: 589, 622: 589, 662: 589, 723: 589, 589}, + {6: 4812, 4814, 596, 15: 4831, 2499, 4829, 4768, 4833, 4820, 4849, 4813, 4816, 4815, 4818, 4819, 4821, 4828, 596, 4839, 4840, 4850, 4826, 4827, 4832, 4834, 4846, 4845, 4854, 4847, 4844, 4837, 4842, 4843, 4836, 4838, 4841, 4830, 4851, 4852, 549: 4811, 552: 2499, 4848, 567: 2499, 580: 5605, 723: 2499, 4817, 880: 4822, 906: 4824, 927: 4823, 948: 4825, 955: 4835, 960: 5608}, + {588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 15: 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 588, 544: 588, 588, 588, 549: 588, 551: 588, 588, 588, 560: 588, 562: 588, 588, 566: 588, 588, 580: 588, 622: 588, 662: 588, 723: 588, 588}, + {547: 5611, 549: 5610}, // 2695 - {2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 15: 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 2837, 52: 2837, 544: 2837, 2837, 2837, 549: 2837, 551: 2837, 2837, 2837, 560: 2837, 562: 2837, 2837, 566: 2837, 2837, 571: 2837, 580: 2837, 622: 2837, 670: 2837, 723: 2837, 2837}, - {2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 15: 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 2836, 52: 2836, 544: 2836, 2836, 2836, 549: 2836, 551: 2836, 2836, 2836, 560: 2836, 562: 2836, 2836, 566: 2836, 2836, 571: 2836, 580: 2836, 622: 2836, 670: 2836, 723: 2836, 2836}, - {2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 15: 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 2835, 52: 2835, 544: 2835, 2835, 2835, 549: 2835, 551: 2835, 2835, 2835, 560: 2835, 562: 2835, 2835, 566: 2835, 2835, 571: 2835, 580: 2835, 622: 2835, 670: 2835, 723: 2835, 2835}, - {2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 15: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 52: 2504, 117: 2504, 128: 2504, 2504, 2504, 2504, 2504, 2504, 2504, 2504, 137: 2504, 2504, 2504, 544: 2504, 2504, 2504, 549: 2504, 551: 2504, 2504, 2504, 560: 2504, 562: 2504, 2504, 566: 2504, 2504, 571: 2504, 580: 2504, 622: 2504, 670: 2504, 723: 2504, 2504}, - {227: 5600}, + {2849, 2849, 2849, 2849, 2849, 2849, 9: 2849, 560: 2849}, + {2848, 2848, 2848, 2848, 2848, 2848, 9: 2848, 560: 2848}, + {547: 5614, 549: 5613}, + {2851, 2851, 2851, 2851, 2851, 2851, 9: 2851, 560: 2851}, + {2850, 2850, 2850, 2850, 2850, 2850, 9: 2850, 560: 2850}, // 2700 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 5333, 3092, 3093, 3091, 875: 5597}, - {2889, 2889, 9: 5334, 211: 5598}, - {227: 5599}, - {2888, 2888}, - {2890, 2890}, + {2: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 10: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 53: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 547: 2362, 549: 2362, 569: 4674, 571: 5617, 817: 5616}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 5619, 549: 5621, 786: 5622, 3111, 3112, 3110, 1005: 5620}, + {549: 5618}, + {2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 15: 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 52: 2852, 544: 2852, 2852, 2852, 549: 2852, 551: 2852, 2852, 2852, 560: 2852, 562: 2852, 2852, 566: 2852, 2852, 571: 2852, 580: 2852, 622: 2852, 662: 2852, 723: 2852, 2852}, + {2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 15: 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 2855, 52: 2855, 544: 2855, 2855, 2855, 549: 2855, 551: 2855, 2855, 2855, 560: 2855, 562: 2855, 2855, 566: 2855, 2855, 571: 2855, 580: 2855, 622: 2855, 662: 2855, 723: 2855, 2855}, // 2705 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 5333, 3092, 3093, 3091, 875: 5602}, - {2681, 2681, 9: 5334, 546: 5605, 724: 5604, 917: 5603}, - {2893, 2893}, - {1124, 1124, 3341, 3505, 3305, 3180, 3221, 3343, 3105, 1124, 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 546: 1124, 716: 5622, 786: 5621, 3092, 3093, 3091, 978: 5620}, - {573: 5610, 650: 4148, 4147, 814: 5608, 933: 5609, 1129: 5607, 1332: 5606}, + {2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 15: 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 2854, 52: 2854, 544: 2854, 2854, 2854, 549: 2854, 551: 2854, 2854, 2854, 560: 2854, 562: 2854, 2854, 566: 2854, 2854, 571: 2854, 580: 2854, 622: 2854, 662: 2854, 723: 2854, 2854}, + {2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 15: 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 2853, 52: 2853, 544: 2853, 2853, 2853, 549: 2853, 551: 2853, 2853, 2853, 560: 2853, 562: 2853, 2853, 566: 2853, 2853, 571: 2853, 580: 2853, 622: 2853, 662: 2853, 723: 2853, 2853}, + {2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 15: 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 52: 2517, 120: 2517, 130: 2517, 2517, 2517, 2517, 2517, 2517, 2517, 2517, 139: 2517, 2517, 2517, 544: 2517, 2517, 2517, 549: 2517, 551: 2517, 2517, 2517, 560: 2517, 562: 2517, 2517, 566: 2517, 2517, 571: 2517, 580: 2517, 622: 2517, 662: 2517, 723: 2517, 2517}, + {227: 5628}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5359, 3111, 3112, 3110, 875: 5625}, // 2710 - {2680, 2680, 9: 5618}, - {2679, 2679, 9: 2679}, - {294: 5612, 300: 5614, 350: 5615, 371: 5613}, - {254: 5611}, - {254: 2534, 294: 2255, 300: 2255, 350: 2255, 371: 2255}, + {2908, 2908, 9: 5360, 212: 5626}, + {227: 5627}, + {2907, 2907}, + {2909, 2909}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5359, 3111, 3112, 3110, 875: 5630}, // 2715 - {2672, 2672, 9: 2672}, - {2677, 2677, 9: 2677}, - {2676, 2676, 9: 2676}, - {397: 5616, 470: 5617}, - {2673, 2673, 9: 2673}, + {2696, 2696, 9: 5360, 546: 5633, 724: 5632, 917: 5631}, + {2912, 2912}, + {1128, 1128, 3360, 3524, 3324, 3199, 3240, 3362, 3124, 1128, 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 546: 1128, 710: 5650, 786: 5649, 3111, 3112, 3110, 978: 5648}, + {573: 5638, 650: 4167, 4166, 814: 5636, 933: 5637, 1131: 5635, 1336: 5634}, + {2695, 2695, 9: 5646}, // 2720 - {2675, 2675, 9: 2675}, - {2674, 2674, 9: 2674}, - {573: 5610, 650: 4148, 4147, 814: 5608, 933: 5609, 1129: 5619}, - {2678, 2678, 9: 2678}, - {2681, 2681, 9: 5624, 546: 5605, 917: 5623}, + {2694, 2694, 9: 2694}, + {295: 5640, 301: 5642, 352: 5643, 373: 5641}, + {254: 5639}, + {254: 2547, 295: 2261, 301: 2261, 352: 2261, 373: 2261}, + {2687, 2687, 9: 2687}, // 2725 - {1123, 1123, 9: 1123, 52: 1123, 546: 1123}, - {1121, 1121, 9: 1121, 52: 1121, 546: 1121}, - {2892, 2892}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 716: 5626, 786: 5625, 3092, 3093, 3091}, - {1122, 1122, 9: 1122, 52: 1122, 546: 1122}, + {2692, 2692, 9: 2692}, + {2691, 2691, 9: 2691}, + {398: 5644, 470: 5645}, + {2688, 2688, 9: 2688}, + {2690, 2690, 9: 2690}, // 2730 - {1120, 1120, 9: 1120, 52: 1120, 546: 1120}, - {2894, 2894}, - {2829, 2829}, - {32: 5740, 431: 5739}, - {560: 5731}, + {2689, 2689, 9: 2689}, + {573: 5638, 650: 4167, 4166, 814: 5636, 933: 5637, 1131: 5647}, + {2693, 2693, 9: 2693}, + {2696, 2696, 9: 5652, 546: 5633, 917: 5651}, + {1127, 1127, 9: 1127, 52: 1127, 546: 1127}, // 2735 - {735: 5724}, - {10: 5717}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 737: 5635, 786: 5634, 3092, 3093, 3091}, - {2442, 2442, 6: 2442, 2442, 18: 2442, 20: 2442, 22: 2442, 2442, 2442, 2442, 2442, 2442, 260: 4750, 724: 2442, 1043: 5715, 1082: 5716}, - {192: 2460, 418: 5640, 458: 5641, 605: 5639, 669: 2460, 1217: 5642, 5637, 1304: 5638, 1433: 5636}, + {1125, 1125, 9: 1125, 52: 1125, 546: 1125}, + {2911, 2911}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 710: 5654, 786: 5653, 3111, 3112, 3110}, + {1126, 1126, 9: 1126, 52: 1126, 546: 1126}, + {1124, 1124, 9: 1124, 52: 1124, 546: 1124}, // 2740 - {2454, 2454, 124: 2454, 5705, 544: 2454, 2454, 2454, 551: 2454, 562: 2454, 2454, 566: 2454, 622: 2454, 670: 2454, 1434: 5704}, - {192: 5692, 669: 5691}, - {2478, 2478, 124: 2478, 2478, 544: 2478, 2478, 2478, 551: 2478, 562: 2478, 2478, 566: 2478, 622: 2478, 670: 2478}, - {140: 4009, 166: 4008, 545: 5655, 947: 5656}, - {140: 4009, 166: 4008, 545: 5648, 947: 5649}, + {2913, 2913}, + {2847, 2847}, + {32: 5781, 431: 5780}, + {560: 5772}, + {735: 5765}, // 2745 - {2471, 2471, 124: 2471, 2471, 544: 2471, 2471, 2471, 551: 2471, 562: 2471, 2471, 566: 2471, 570: 5644, 622: 2471, 655: 5643, 670: 2471}, - {192: 2459, 669: 2459}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 5646}, - {573: 3078, 814: 3922, 829: 5645}, - {2472, 2472, 124: 2472, 2472, 544: 2472, 2472, 2472, 551: 2472, 562: 2472, 2472, 566: 2472, 622: 2472, 670: 2472}, + {10: 5758}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 737: 5663, 786: 5662, 3111, 3112, 3110}, + {2448, 2448, 6: 2448, 2448, 18: 2448, 20: 2448, 22: 2448, 2448, 2448, 2448, 2448, 2448, 261: 4769, 724: 2448, 1043: 5756, 1083: 5757}, + {193: 2466, 418: 5668, 458: 5669, 605: 5667, 658: 2466, 1219: 5670, 5665, 1307: 5666, 1438: 5664}, + {2460, 2460, 126: 2460, 5733, 544: 2460, 2460, 2460, 551: 2460, 562: 2460, 2460, 566: 2460, 622: 2460, 662: 2460, 726: 2460, 1439: 5732}, // 2750 - {127: 3823, 136: 3831, 143: 3819, 147: 3816, 149: 3818, 3815, 3817, 3821, 3822, 3827, 3826, 3825, 3829, 3830, 3824, 3828, 3820, 581: 3801, 3799, 3800, 3798, 3796, 608: 3813, 3810, 3812, 3811, 3807, 3809, 3808, 3805, 3806, 3804, 3814, 815: 3797, 3795, 902: 3803, 916: 5647}, - {2473, 2473, 124: 2473, 2473, 544: 2473, 2473, 2473, 551: 2473, 562: 2473, 2473, 566: 2473, 622: 2473, 670: 2473}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 5653}, - {545: 5650}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 4084, 918: 5651}, + {193: 5720, 658: 5719}, + {2484, 2484, 126: 2484, 2484, 544: 2484, 2484, 2484, 551: 2484, 562: 2484, 2484, 566: 2484, 622: 2484, 662: 2484, 726: 2484}, + {142: 4028, 168: 4027, 545: 5683, 947: 5684}, + {142: 4028, 168: 4027, 545: 5676, 947: 5677}, + {2477, 2477, 126: 2477, 2477, 544: 2477, 2477, 2477, 551: 2477, 562: 2477, 2477, 566: 2477, 570: 5672, 622: 2477, 655: 5671, 662: 2477, 726: 2477}, // 2755 - {9: 4086, 52: 5652}, - {2474, 2474, 124: 2474, 2474, 544: 2474, 2474, 2474, 551: 2474, 562: 2474, 2474, 566: 2474, 622: 2474, 670: 2474}, - {52: 5654, 557: 3838, 3839, 3844, 575: 3840, 623: 3841, 626: 3842, 3835, 3845, 3834, 3843, 3836, 3837}, - {2475, 2475, 124: 2475, 2475, 544: 2475, 2475, 2475, 551: 2475, 562: 2475, 2475, 566: 2475, 622: 2475, 670: 2475}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 5688}, + {193: 2465, 658: 2465}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 5674}, + {573: 3097, 814: 3941, 829: 5673}, + {2478, 2478, 126: 2478, 2478, 544: 2478, 2478, 2478, 551: 2478, 562: 2478, 2478, 566: 2478, 622: 2478, 662: 2478, 726: 2478}, + {129: 3842, 138: 3850, 145: 3838, 149: 3835, 151: 3837, 3834, 3836, 3840, 3841, 3846, 3845, 3844, 3848, 3849, 3843, 3847, 3839, 581: 3820, 3818, 3819, 3817, 3815, 608: 3832, 3829, 3831, 3830, 3826, 3828, 3827, 3824, 3825, 3823, 3833, 815: 3816, 3814, 902: 3822, 916: 5675}, // 2760 - {545: 5657}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 4084, 918: 5658}, - {9: 4086, 52: 5659}, - {2470, 2470, 124: 2470, 2470, 544: 2470, 2470, 2470, 551: 2470, 562: 2470, 2470, 566: 2470, 622: 2470, 655: 5661, 670: 2470, 1249: 5660}, - {2476, 2476, 124: 2476, 2476, 544: 2476, 2476, 2476, 551: 2476, 562: 2476, 2476, 566: 2476, 622: 2476, 670: 2476}, + {2479, 2479, 126: 2479, 2479, 544: 2479, 2479, 2479, 551: 2479, 562: 2479, 2479, 566: 2479, 622: 2479, 662: 2479, 726: 2479}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 5681}, + {545: 5678}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 4103, 918: 5679}, + {9: 4105, 52: 5680}, // 2765 - {545: 5662}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 5664, 1395: 5663}, - {52: 5666}, - {52: 2468, 127: 3823, 136: 3831, 143: 3819, 147: 3816, 149: 3818, 3815, 3817, 3821, 3822, 3827, 3826, 3825, 3829, 3830, 3824, 3828, 3820, 557: 3838, 3839, 3844, 575: 3840, 608: 3813, 3810, 3812, 3811, 3807, 3809, 3808, 3805, 3806, 3804, 3814, 623: 3841, 626: 3842, 3835, 3845, 3834, 3843, 3836, 3837, 902: 3803, 916: 5665}, - {52: 2467}, + {2480, 2480, 126: 2480, 2480, 544: 2480, 2480, 2480, 551: 2480, 562: 2480, 2480, 566: 2480, 622: 2480, 662: 2480, 726: 2480}, + {52: 5682, 557: 3857, 3858, 3863, 575: 3859, 623: 3860, 626: 3861, 3854, 3864, 3853, 3862, 3855, 3856}, + {2481, 2481, 126: 2481, 2481, 544: 2481, 2481, 2481, 551: 2481, 562: 2481, 2481, 566: 2481, 622: 2481, 662: 2481, 726: 2481}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 5716}, + {545: 5685}, // 2770 - {2462, 2462, 10: 5668, 124: 2462, 2462, 544: 2462, 2462, 2462, 551: 2462, 561: 2462, 2462, 2462, 566: 2462, 622: 2462, 670: 2462, 735: 2462, 1377: 5667}, - {2466, 2466, 124: 2466, 2466, 544: 2466, 2466, 2466, 551: 2466, 561: 5683, 2466, 2466, 566: 2466, 622: 2466, 670: 2466, 735: 2466, 1413: 5682}, - {560: 5669}, - {203: 5670}, - {210: 5671}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 4103, 918: 5686}, + {9: 4105, 52: 5687}, + {2476, 2476, 126: 2476, 2476, 544: 2476, 2476, 2476, 551: 2476, 562: 2476, 2476, 566: 2476, 622: 2476, 655: 5689, 662: 2476, 726: 2476, 1251: 5688}, + {2482, 2482, 126: 2482, 2482, 544: 2482, 2482, 2482, 551: 2482, 562: 2482, 2482, 566: 2482, 622: 2482, 662: 2482, 726: 2482}, + {545: 5690}, // 2775 - {545: 5672}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 5673}, - {52: 5674, 557: 3838, 3839, 3844, 575: 3840, 623: 3841, 626: 3842, 3835, 3845, 3834, 3843, 3836, 3837}, - {244: 5675}, - {560: 5676}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 5692, 1400: 5691}, + {52: 5694}, + {52: 2474, 129: 3842, 138: 3850, 145: 3838, 149: 3835, 151: 3837, 3834, 3836, 3840, 3841, 3846, 3845, 3844, 3848, 3849, 3843, 3847, 3839, 557: 3857, 3858, 3863, 575: 3859, 608: 3832, 3829, 3831, 3830, 3826, 3828, 3827, 3824, 3825, 3823, 3833, 623: 3860, 626: 3861, 3854, 3864, 3853, 3862, 3855, 3856, 902: 3822, 916: 5693}, + {52: 2473}, + {2468, 2468, 10: 5696, 126: 2468, 2468, 544: 2468, 2468, 2468, 551: 2468, 561: 2468, 2468, 2468, 566: 2468, 622: 2468, 662: 2468, 726: 2468, 735: 2468, 1381: 5695}, // 2780 - {203: 5677}, - {210: 5678}, - {545: 5679}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 5680}, - {52: 5681, 557: 3838, 3839, 3844, 575: 3840, 623: 3841, 626: 3842, 3835, 3845, 3834, 3843, 3836, 3837}, + {2472, 2472, 126: 2472, 2472, 544: 2472, 2472, 2472, 551: 2472, 561: 5711, 2472, 2472, 566: 2472, 622: 2472, 662: 2472, 726: 2472, 735: 2472, 1418: 5710}, + {560: 5697}, + {204: 5698}, + {211: 5699}, + {545: 5700}, // 2785 - {2461, 2461, 124: 2461, 2461, 544: 2461, 2461, 2461, 551: 2461, 561: 2461, 2461, 2461, 566: 2461, 622: 2461, 670: 2461, 735: 2461}, - {2464, 2464, 124: 2464, 2464, 544: 2464, 2464, 2464, 551: 2464, 562: 2464, 2464, 566: 2464, 622: 2464, 670: 2464, 735: 5686, 1411: 5685}, - {560: 5684}, - {2465, 2465, 124: 2465, 2465, 544: 2465, 2465, 2465, 551: 2465, 562: 2465, 2465, 566: 2465, 622: 2465, 670: 2465, 735: 2465}, - {2469, 2469, 124: 2469, 2469, 544: 2469, 2469, 2469, 551: 2469, 562: 2469, 2469, 566: 2469, 622: 2469, 670: 2469}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 5701}, + {52: 5702, 557: 3857, 3858, 3863, 575: 3859, 623: 3860, 626: 3861, 3854, 3864, 3853, 3862, 3855, 3856}, + {244: 5703}, + {560: 5704}, + {204: 5705}, // 2790 - {560: 5687}, - {2463, 2463, 124: 2463, 2463, 544: 2463, 2463, 2463, 551: 2463, 562: 2463, 2463, 566: 2463, 622: 2463, 670: 2463}, - {52: 5689, 557: 3838, 3839, 3844, 575: 3840, 623: 3841, 626: 3842, 3835, 3845, 3834, 3843, 3836, 3837}, - {2470, 2470, 124: 2470, 2470, 544: 2470, 2470, 2470, 551: 2470, 562: 2470, 2470, 566: 2470, 622: 2470, 655: 5661, 670: 2470, 1249: 5690}, - {2477, 2477, 124: 2477, 2477, 544: 2477, 2477, 2477, 551: 2477, 562: 2477, 2477, 566: 2477, 622: 2477, 670: 2477}, + {211: 5706}, + {545: 5707}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 5708}, + {52: 5709, 557: 3857, 3858, 3863, 575: 3859, 623: 3860, 626: 3861, 3854, 3864, 3853, 3862, 3855, 3856}, + {2467, 2467, 126: 2467, 2467, 544: 2467, 2467, 2467, 551: 2467, 561: 2467, 2467, 2467, 566: 2467, 622: 2467, 662: 2467, 726: 2467, 735: 2467}, // 2795 - {111: 5697, 545: 2480, 1432: 5696}, - {545: 5693}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 5694}, - {52: 5695, 557: 3838, 3839, 3844, 575: 3840, 623: 3841, 626: 3842, 3835, 3845, 3834, 3843, 3836, 3837}, - {2481, 2481, 124: 2481, 2481, 284: 2481, 544: 2481, 2481, 2481, 551: 2481, 562: 2481, 2481, 566: 2481, 622: 2481, 670: 2481}, + {2470, 2470, 126: 2470, 2470, 544: 2470, 2470, 2470, 551: 2470, 562: 2470, 2470, 566: 2470, 622: 2470, 662: 2470, 726: 2470, 735: 5714, 1416: 5713}, + {560: 5712}, + {2471, 2471, 126: 2471, 2471, 544: 2471, 2471, 2471, 551: 2471, 562: 2471, 2471, 566: 2471, 622: 2471, 662: 2471, 726: 2471, 735: 2471}, + {2475, 2475, 126: 2475, 2475, 544: 2475, 2475, 2475, 551: 2475, 562: 2475, 2475, 566: 2475, 622: 2475, 662: 2475, 726: 2475}, + {560: 5715}, // 2800 - {545: 5700}, - {569: 5698}, - {573: 3078, 814: 5699}, - {545: 2479}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 2651, 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 4084, 918: 5701, 1140: 5702}, + {2469, 2469, 126: 2469, 2469, 544: 2469, 2469, 2469, 551: 2469, 562: 2469, 2469, 566: 2469, 622: 2469, 662: 2469, 726: 2469}, + {52: 5717, 557: 3857, 3858, 3863, 575: 3859, 623: 3860, 626: 3861, 3854, 3864, 3853, 3862, 3855, 3856}, + {2476, 2476, 126: 2476, 2476, 544: 2476, 2476, 2476, 551: 2476, 562: 2476, 2476, 566: 2476, 622: 2476, 655: 5689, 662: 2476, 726: 2476, 1251: 5718}, + {2483, 2483, 126: 2483, 2483, 544: 2483, 2483, 2483, 551: 2483, 562: 2483, 2483, 566: 2483, 622: 2483, 662: 2483, 726: 2483}, + {108: 5725, 545: 2486, 1437: 5724}, // 2805 - {9: 4086, 52: 2650}, - {52: 5703}, - {2482, 2482, 124: 2482, 2482, 284: 2482, 544: 2482, 2482, 2482, 551: 2482, 562: 2482, 2482, 566: 2482, 622: 2482, 670: 2482}, - {2458, 2458, 124: 5708, 544: 2458, 2458, 2458, 551: 2458, 562: 2458, 2458, 566: 2458, 622: 2458, 670: 2458, 1495: 5707}, - {573: 3078, 814: 3922, 829: 5706}, + {545: 5721}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 5722}, + {52: 5723, 557: 3857, 3858, 3863, 575: 3859, 623: 3860, 626: 3861, 3854, 3864, 3853, 3862, 3855, 3856}, + {2487, 2487, 126: 2487, 2487, 285: 2487, 544: 2487, 2487, 2487, 551: 2487, 562: 2487, 2487, 566: 2487, 622: 2487, 662: 2487, 726: 2487}, + {545: 5728}, // 2810 - {2453, 2453, 124: 2453, 544: 2453, 2453, 2453, 551: 2453, 562: 2453, 2453, 566: 2453, 622: 2453, 670: 2453}, - {2452, 2452, 544: 2452, 5496, 2452, 551: 2452, 562: 2452, 2452, 566: 2452, 622: 2452, 670: 2452, 1248: 5714}, - {737: 5709}, - {192: 2460, 669: 2460, 1217: 5642, 5637, 1304: 5710}, - {2456, 2456, 284: 5712, 544: 2456, 2456, 2456, 551: 2456, 562: 2456, 2456, 566: 2456, 622: 2456, 670: 2456, 1494: 5711}, + {569: 5726}, + {573: 3097, 814: 5727}, + {545: 2485}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 2666, 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 4103, 918: 5729, 1142: 5730}, + {9: 4105, 52: 2665}, // 2815 - {2457, 2457, 544: 2457, 2457, 2457, 551: 2457, 562: 2457, 2457, 566: 2457, 622: 2457, 670: 2457}, - {573: 3078, 814: 3922, 829: 5713}, - {2455, 2455, 544: 2455, 2455, 2455, 551: 2455, 562: 2455, 2455, 566: 2455, 622: 2455, 670: 2455}, - {2483, 2483, 544: 2483, 2483, 2483, 551: 2483, 562: 2483, 2483, 566: 2483, 622: 2483, 670: 2483}, - {2824, 2824}, + {52: 5731}, + {2488, 2488, 126: 2488, 2488, 285: 2488, 544: 2488, 2488, 2488, 551: 2488, 562: 2488, 2488, 566: 2488, 622: 2488, 662: 2488, 726: 2488}, + {2464, 2464, 126: 5736, 544: 2464, 2464, 2464, 551: 2464, 562: 2464, 2464, 566: 2464, 622: 2464, 662: 2464, 726: 2464, 1500: 5735}, + {573: 3097, 814: 3941, 829: 5734}, + {2459, 2459, 126: 2459, 544: 2459, 2459, 2459, 551: 2459, 562: 2459, 2459, 566: 2459, 622: 2459, 662: 2459, 726: 2459}, // 2820 - {2823, 2823, 6: 4793, 5530, 18: 4749, 20: 4801, 22: 4794, 4797, 4796, 4799, 4800, 4802, 724: 4798, 880: 4803, 927: 5529}, - {560: 5718}, - {203: 5719}, - {210: 5720}, - {545: 5721}, + {2458, 2458, 544: 2458, 5524, 2458, 551: 2458, 562: 2458, 2458, 566: 2458, 622: 2458, 662: 2458, 726: 2458, 1250: 5742}, + {737: 5737}, + {193: 2466, 658: 2466, 1219: 5670, 5665, 1307: 5738}, + {2462, 2462, 285: 5740, 544: 2462, 2462, 2462, 551: 2462, 562: 2462, 2462, 566: 2462, 622: 2462, 662: 2462, 726: 2462, 1499: 5739}, + {2463, 2463, 544: 2463, 2463, 2463, 551: 2463, 562: 2463, 2463, 566: 2463, 622: 2463, 662: 2463, 726: 2463}, // 2825 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 5722}, - {52: 5723, 557: 3838, 3839, 3844, 575: 3840, 623: 3841, 626: 3842, 3835, 3845, 3834, 3843, 3836, 3837}, - {2825, 2825}, - {560: 5725}, - {203: 5726}, + {573: 3097, 814: 3941, 829: 5741}, + {2461, 2461, 544: 2461, 2461, 2461, 551: 2461, 562: 2461, 2461, 566: 2461, 622: 2461, 662: 2461, 726: 2461}, + {2490, 2490, 544: 2490, 2490, 2490, 551: 2490, 562: 2490, 2490, 566: 2490, 622: 2490, 662: 2490, 726: 5744, 1511: 5743}, + {2496, 2496, 544: 2496, 2496, 2496, 551: 2496, 562: 2496, 2496, 566: 2496, 622: 2496, 662: 2496}, + {328: 5745}, // 2830 - {210: 5727}, - {545: 5728}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 5729}, - {52: 5730, 557: 3838, 3839, 3844, 575: 3840, 623: 3841, 626: 3842, 3835, 3845, 3834, 3843, 3836, 3837}, - {2826, 2826}, + {545: 5746}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5747, 3111, 3112, 3110, 1318: 5748, 1510: 5749}, + {58: 5753, 94: 5754, 1388: 5755}, + {9: 2492, 52: 2492}, + {9: 5750, 52: 5751}, // 2835 - {771, 771, 771, 771, 771, 771, 771, 771, 771, 10: 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 53: 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 5329, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 771, 910: 5328, 925: 5732}, - {2761, 2761, 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 5333, 3092, 3093, 3091, 875: 5734, 1455: 5733}, - {2827, 2827}, - {9: 5334, 574: 5735}, - {545: 5736}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5747, 3111, 3112, 3110, 1318: 5752}, + {2489, 2489, 544: 2489, 2489, 2489, 551: 2489, 562: 2489, 2489, 566: 2489, 622: 2489, 662: 2489}, + {9: 2491, 52: 2491}, + {9: 2495, 52: 2495}, + {9: 2494, 52: 2494}, // 2840 - {560: 5499, 1083: 5498, 1247: 5737}, - {9: 5540, 52: 5738}, - {2760, 2760}, - {2828, 2828}, - {2822, 2822}, + {9: 2493, 52: 2493}, + {2842, 2842}, + {2841, 2841, 6: 4812, 5558, 18: 4768, 20: 4820, 22: 4813, 4816, 4815, 4818, 4819, 4821, 724: 4817, 880: 4822, 927: 5557}, + {560: 5759}, + {204: 5760}, // 2845 - {167: 5742, 950: 270, 1223: 5743}, - {950: 269}, - {950: 5744}, - {547: 5745}, - {156, 156, 245: 156, 421: 5747, 736: 156, 1410: 5746}, + {211: 5761}, + {545: 5762}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 5763}, + {52: 5764, 557: 3857, 3858, 3863, 575: 3859, 623: 3860, 626: 3861, 3854, 3864, 3853, 3862, 3855, 3856}, + {2843, 2843}, // 2850 - {154, 154, 245: 5750, 736: 154, 1409: 5749}, - {573: 3078, 814: 5748}, - {155, 155, 245: 155, 736: 155}, - {253, 253, 736: 4037, 1071: 5757}, - {152, 152, 250: 152, 432: 5752, 736: 152, 1436: 5751}, + {560: 5766}, + {204: 5767}, + {211: 5768}, + {545: 5769}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 5770}, // 2855 - {150, 150, 250: 5755, 736: 150, 1435: 5754}, - {573: 3078, 814: 5753}, + {52: 5771, 557: 3857, 3858, 3863, 575: 3859, 623: 3860, 626: 3861, 3854, 3864, 3853, 3862, 3855, 3856}, + {2844, 2844}, + {775, 775, 775, 775, 775, 775, 775, 775, 775, 10: 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 53: 775, 775, 775, 775, 775, 5355, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 775, 910: 5354, 925: 5773}, + {2779, 2779, 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5359, 3111, 3112, 3110, 875: 5775, 1460: 5774}, + {2845, 2845}, + // 2860 + {9: 5360, 574: 5776}, + {545: 5777}, + {560: 5527, 1084: 5526, 1249: 5778}, + {9: 5568, 52: 5779}, + {2778, 2778}, + // 2865 + {2846, 2846}, + {2840, 2840}, + {58: 5783, 950: 270, 1225: 5784}, + {950: 269}, + {950: 5785}, + // 2870 + {547: 5786}, + {156, 156, 245: 156, 421: 5788, 736: 156, 1415: 5787}, + {154, 154, 245: 5791, 736: 154, 1414: 5790}, + {573: 3097, 814: 5789}, + {155, 155, 245: 155, 736: 155}, + // 2875 + {253, 253, 736: 4056, 1072: 5798}, + {152, 152, 250: 152, 432: 5793, 736: 152, 1441: 5792}, + {150, 150, 250: 5796, 736: 150, 1440: 5795}, + {573: 3097, 814: 5794}, {151, 151, 250: 151, 736: 151}, + // 2880 {153, 153, 736: 153}, - {573: 3078, 814: 5756}, - // 2860 + {573: 3097, 814: 5797}, {149, 149, 736: 149}, {157, 157}, - {28: 203, 57: 203, 170: 203, 545: 203, 566: 203, 573: 203}, - {57: 5281, 545: 5759, 566: 5282, 1016: 5294}, + {28: 203, 57: 203, 171: 203, 545: 203, 566: 203, 573: 203}, + // 2885 + {57: 5300, 545: 5800, 566: 5301, 1016: 5313}, {208, 208}, - // 2865 - {573: 3078, 814: 5765}, - {573: 3078, 814: 5764}, + {573: 3097, 814: 5806}, + {573: 3097, 814: 5805}, {205, 205}, + // 2890 {206, 206}, {207, 207}, - // 2870 - {164: 5768, 622: 5767, 1102: 5769}, - {2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 10: 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 53: 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 2358, 546: 2358, 575: 2358, 593: 2358}, - {2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 10: 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 53: 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 2357, 546: 2357, 575: 2357, 593: 2357}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 3985, 898: 5770}, - {209, 209, 9: 3987}, - // 2875 - {570: 5774}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 5773}, + {166: 5809, 622: 5808, 1104: 5810}, + {2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 10: 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 53: 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 2364, 546: 2364, 575: 2364, 593: 2364}, + {2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 10: 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 53: 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 2363, 546: 2363, 575: 2363, 593: 2363}, + // 2895 + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 4004, 898: 5811}, + {209, 209, 9: 4006}, + {570: 5815}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 5814}, {570: 210}, - {573: 3078, 814: 5775}, - {314: 5777, 546: 214, 566: 214, 601: 214, 728: 214, 818: 214, 1365: 5776}, - // 2880 - {546: 2948, 566: 2933, 601: 2932, 728: 3059, 818: 2912, 830: 5780, 837: 3058, 2913, 5784, 5785, 5783, 850: 2914, 854: 5782, 1470: 5781}, - {446: 5778}, - {170: 5779, 546: 213, 566: 213, 601: 213, 728: 213, 818: 213}, - {546: 212, 566: 212, 601: 212, 728: 212, 818: 212}, - {728: 3059, 818: 2912, 837: 5788, 5786, 850: 5787}, - // 2885 + // 2900 + {573: 3097, 814: 5816}, + {315: 5818, 546: 214, 566: 214, 601: 214, 726: 214, 818: 214, 1369: 5817}, + {546: 2967, 566: 2952, 601: 2951, 726: 3078, 818: 2931, 830: 5821, 837: 3077, 2932, 5825, 5826, 5824, 850: 2933, 854: 5823, 1475: 5822}, + {446: 5819}, + {171: 5820, 546: 213, 566: 213, 601: 213, 726: 213, 818: 213}, + // 2905 + {546: 212, 566: 212, 601: 212, 726: 212, 818: 212}, + {726: 3078, 818: 2931, 837: 5829, 5827, 850: 5828}, {219, 219}, {218, 218}, {217, 217}, + // 2910 {216, 216}, {215, 215}, - // 2890 - {2380, 2380}, - {2379, 2379}, - {437, 437, 556: 437}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 5801, 1307: 5802, 1497: 5800}, + {2386, 2386}, + {2385, 2385}, + {441, 441, 556: 441}, + // 2915 + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 5842, 1310: 5843, 1502: 5841}, {228, 228, 228, 228, 228, 228, 228, 228, 228, 10: 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 53: 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 575: 228}, - // 2895 {227, 227, 227, 227, 227, 227, 227, 227, 227, 10: 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 53: 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 575: 227}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 5793, 898: 5794}, - {1269, 1269, 9: 1269, 560: 5795}, - {201, 201, 9: 3987}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 5797, 786: 5333, 3092, 3093, 3091, 875: 5796}, - // 2900 - {200, 200, 9: 5334}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 5333, 3092, 3093, 3091, 875: 5798}, - {9: 5334, 52: 5799}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 5834, 898: 5835}, + {1273, 1273, 9: 1273, 560: 5836}, + // 2920 + {201, 201, 9: 4006}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 5838, 786: 5359, 3111, 3112, 3110, 875: 5837}, + {200, 200, 9: 5360}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5359, 3111, 3112, 3110, 875: 5839}, + {9: 5360, 52: 5840}, + // 2925 {199, 199}, - {229, 229, 9: 5808}, - // 2905 - {743: 5804, 784: 5805, 1404: 5803}, + {229, 229, 9: 5849}, + {743: 5845, 784: 5846, 1409: 5844}, {221, 221, 9: 221}, {226, 226, 9: 226}, - {225, 225, 9: 225, 167: 5807}, - {223, 223, 9: 223, 167: 5806}, - // 2910 + // 2930 + {225, 225, 9: 225, 58: 5848}, + {223, 223, 9: 223, 58: 5847}, {222, 222, 9: 222}, {224, 224, 9: 224}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 5801, 1307: 5809}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 5842, 1310: 5850}, + // 2935 {220, 220, 9: 220}, {230, 230}, - // 2915 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 5812, 898: 5813}, - {1269, 1269, 9: 1269, 560: 5814}, - {198, 198, 9: 3987}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 5816, 786: 5333, 3092, 3093, 3091, 875: 5815}, - {197, 197, 9: 5334}, - // 2920 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 5333, 3092, 3093, 3091, 875: 5817}, - {9: 5334, 52: 5818}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 5853, 898: 5854}, + {1273, 1273, 9: 1273, 560: 5855}, + {198, 198, 9: 4006}, + // 2940 + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 5857, 786: 5359, 3111, 3112, 3110, 875: 5856}, + {197, 197, 9: 5360}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5359, 3111, 3112, 3110, 875: 5858}, + {9: 5360, 52: 5859}, {196, 196}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 5820}, - {545: 5821, 571: 2639, 576: 2639, 1142: 5822}, - // 2925 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 2645, 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 643: 3737, 786: 4083, 3092, 3093, 3091, 791: 5855, 836: 5854, 1141: 5853, 1350: 5852, 5856}, - {571: 5823, 576: 247, 1221: 5824}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 3957, 3092, 3093, 3091, 793: 5847, 1220: 5846, 1403: 5845}, - {576: 5825}, - {545: 2949, 2948, 5828, 562: 2947, 622: 2946, 670: 2942, 790: 5826, 821: 5827, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 3902, 5831, 5830, 1388: 5829}, - // 2930 - {231, 231, 546: 231, 553: 1029, 564: 1029, 1029, 568: 3915, 570: 3914, 579: 3913, 857: 3916, 3917}, - {234, 234, 546: 234, 553: 1030, 564: 1030, 1030}, - {276, 276, 242: 5841, 546: 276, 1195: 5842}, - {242, 242, 546: 5832, 1072: 5833}, + // 2945 + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 5861}, + {545: 5862, 571: 2654, 576: 2654, 1144: 5863}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 2660, 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 641: 3756, 786: 4102, 3111, 3112, 3110, 791: 5896, 836: 5895, 1143: 5894, 1354: 5893, 5897}, + {571: 5864, 576: 247, 1223: 5865}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 3976, 3111, 3112, 3110, 793: 5888, 1222: 5887, 1408: 5886}, + // 2950 + {576: 5866}, + {545: 2968, 2967, 5869, 562: 2966, 622: 2965, 662: 2961, 790: 5867, 821: 5868, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 3921, 5872, 5871, 1393: 5870}, + {231, 231, 546: 231, 553: 1033, 564: 1033, 1033, 568: 3934, 570: 3933, 579: 3932, 857: 3935, 3936}, + {234, 234, 546: 234, 553: 1034, 564: 1034, 1034}, + {276, 276, 242: 5882, 546: 276, 1197: 5883}, + // 2955 + {242, 242, 546: 5873, 1073: 5874}, {233, 233, 546: 233}, - // 2935 {232, 232, 546: 232}, - {57: 5836, 1219: 5835, 1402: 5834}, + {57: 5877, 1221: 5876, 1407: 5875}, {235, 235}, - {241, 241, 9: 5839}, + // 2960 + {241, 241, 9: 5880}, {240, 240, 9: 240}, - // 2940 - {238, 238, 9: 238, 569: 5837}, - {547: 3641, 557: 5008, 5009, 561: 3632, 573: 3636, 642: 3631, 644: 3633, 650: 3635, 3634, 3639, 654: 3640, 661: 3638, 792: 5007, 794: 3637, 1098: 5838}, + {238, 238, 9: 238, 569: 5878}, + {547: 3660, 557: 5027, 5028, 561: 3651, 573: 3655, 643: 3650, 3652, 650: 3654, 3653, 3658, 654: 3659, 663: 3657, 792: 5026, 794: 3656, 1099: 5879}, {237, 237, 9: 237}, - {57: 5836, 1219: 5840}, + // 2965 + {57: 5877, 1221: 5881}, {239, 239, 9: 239}, - // 2945 - {547: 5844}, - {242, 242, 546: 5832, 1072: 5843}, + {547: 5885}, + {242, 242, 546: 5873, 1073: 5884}, {236, 236}, + // 2970 {275, 275, 546: 275, 563: 275, 566: 275, 574: 275}, - {246, 246, 9: 5850, 546: 246, 576: 246}, - // 2950 + {246, 246, 9: 5891, 546: 246, 576: 246}, {244, 244, 9: 244, 546: 244, 576: 244}, - {569: 5848}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3955, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3951, 908: 5849}, + {569: 5889}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3974, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3970, 908: 5890}, + // 2975 {243, 243, 9: 243, 546: 243, 576: 243}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 3957, 3092, 3093, 3091, 793: 5847, 1220: 5851}, - // 2955 + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 3976, 3111, 3112, 3110, 793: 5888, 1222: 5892}, {245, 245, 9: 245, 546: 245, 576: 245}, - {9: 5858, 52: 2644}, - {9: 2643, 52: 2643}, - {9: 2641, 52: 2641}, - {9: 2640, 52: 2640}, - // 2960 - {52: 5857}, - {2638, 2638, 546: 2638, 571: 2638, 576: 2638}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 643: 3737, 786: 4083, 3092, 3093, 3091, 791: 5855, 836: 5854, 1141: 5859}, - {9: 2642, 52: 2642}, - {167: 278, 847: 5864, 950: 278, 1406: 5863}, - // 2965 - {547: 5862}, - {202, 202}, - {167: 5742, 950: 270, 1223: 5865}, - {167: 277, 950: 277}, - {950: 5866}, - // 2970 - {547: 5867}, - {242: 5841, 563: 276, 566: 276, 574: 276, 1195: 5868}, - {563: 5869, 566: 5870, 574: 2422, 1180: 5871}, - {2421, 2421, 544: 2421, 2421, 2421, 551: 2421, 562: 2421, 574: 2421, 622: 2421, 670: 2421}, - {2420, 2420, 544: 2420, 2420, 2420, 551: 2420, 562: 2420, 574: 2420, 622: 2420, 670: 2420}, - // 2975 - {574: 5872}, - {622: 5873}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 5874}, - {272, 272, 140: 272, 166: 272, 545: 272, 272, 563: 272, 571: 272, 723: 5876, 736: 272, 1347: 5875}, - {268, 268, 140: 4009, 166: 4008, 545: 268, 268, 563: 268, 571: 268, 736: 268, 947: 4007, 1189: 5879}, + {9: 5899, 52: 2659}, + {9: 2658, 52: 2658}, // 2980 - {571: 5877}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 600: 4413, 786: 3793, 3092, 3093, 3091, 820: 4412, 921: 5878}, - {271, 271, 140: 271, 166: 271, 545: 271, 271, 563: 271, 571: 271, 736: 271}, - {253, 253, 545: 253, 253, 563: 253, 571: 253, 736: 4037, 1071: 5880}, - {274, 274, 545: 274, 274, 563: 5882, 571: 274, 1386: 5881}, + {9: 2656, 52: 2656}, + {9: 2655, 52: 2655}, + {52: 5898}, + {2653, 2653, 546: 2653, 571: 2653, 576: 2653}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 641: 3756, 786: 4102, 3111, 3112, 3110, 791: 5896, 836: 5895, 1143: 5900}, // 2985 - {2639, 2639, 545: 5821, 2639, 571: 2639, 1142: 5885}, - {573: 3078, 814: 5883}, - {736: 5884}, - {273, 273, 545: 273, 273, 571: 273}, - {247, 247, 546: 247, 571: 5823, 1221: 5886}, + {9: 2657, 52: 2657}, + {58: 278, 847: 5905, 950: 278, 1411: 5904}, + {547: 5903}, + {202, 202}, + {58: 5783, 950: 270, 1225: 5906}, // 2990 - {242, 242, 546: 5832, 1072: 5887}, - {279, 279}, - {9: 336, 57: 336, 544: 336, 576: 336, 643: 2124, 726: 336, 740: 2124}, - {9: 301, 544: 301, 301, 576: 301, 643: 2091, 726: 301, 740: 2091}, - {9: 315, 544: 315, 315, 576: 315, 643: 2065, 726: 315, 740: 2065}, + {58: 277, 950: 277}, + {950: 5907}, + {547: 5908}, + {242: 5882, 563: 276, 566: 276, 574: 276, 1197: 5909}, + {563: 5910, 566: 5911, 574: 2428, 1182: 5912}, // 2995 - {9: 302, 544: 302, 302, 576: 302, 643: 2062, 726: 302, 740: 2062}, - {9: 291, 544: 291, 291, 576: 291, 643: 2025, 726: 291, 740: 2025}, - {9: 311, 544: 311, 311, 576: 311, 643: 1945, 726: 311, 740: 1945}, - {9: 316, 544: 316, 316, 576: 316, 643: 1938, 726: 316, 740: 1938}, - {355: 5996, 389: 5997, 643: 1919, 740: 1919}, + {2427, 2427, 544: 2427, 2427, 2427, 551: 2427, 562: 2427, 574: 2427, 622: 2427, 662: 2427}, + {2426, 2426, 544: 2426, 2426, 2426, 551: 2426, 562: 2426, 574: 2426, 622: 2426, 662: 2426}, + {574: 5913}, + {622: 5914}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 5915}, // 3000 - {9: 303, 544: 303, 303, 576: 303, 643: 1916, 726: 303, 740: 1916}, - {9: 292, 544: 292, 292, 576: 292, 643: 1913, 726: 292, 740: 1913}, - {643: 5994, 740: 5993}, - {9: 948, 544: 948, 576: 948, 643: 443, 726: 948, 740: 443}, - {9: 947, 544: 947, 576: 947, 726: 947}, + {272, 272, 142: 272, 168: 272, 545: 272, 272, 563: 272, 571: 272, 723: 5917, 736: 272, 1351: 5916}, + {268, 268, 142: 4028, 168: 4027, 545: 268, 268, 563: 268, 571: 268, 736: 268, 947: 4026, 1191: 5920}, + {571: 5918}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 600: 4432, 786: 3812, 3111, 3112, 3110, 820: 4431, 921: 5919}, + {271, 271, 142: 271, 168: 271, 545: 271, 271, 563: 271, 571: 271, 736: 271}, // 3005 - {9: 332, 57: 5992, 544: 332, 576: 332, 726: 332}, - {9: 334, 544: 334, 576: 334, 726: 334}, - {9: 333, 544: 333, 576: 333, 726: 333}, - {576: 5990}, - {9: 312, 544: 312, 312, 574: 5988, 576: 312, 726: 312}, + {253, 253, 545: 253, 253, 563: 253, 571: 253, 736: 4056, 1072: 5921}, + {274, 274, 545: 274, 274, 563: 5923, 571: 274, 1391: 5922}, + {2654, 2654, 545: 5862, 2654, 571: 2654, 1144: 5926}, + {573: 3097, 814: 5924}, + {736: 5925}, // 3010 - {9: 329, 544: 329, 576: 329, 726: 329}, - {9: 5940, 544: 5941, 576: 5942}, - {9: 327, 544: 327, 5937, 576: 327, 726: 327}, - {9: 325, 251: 5936, 544: 325, 325, 576: 325, 726: 325}, - {9: 323, 348: 5935, 544: 323, 323, 576: 323, 726: 323}, + {273, 273, 545: 273, 273, 571: 273}, + {247, 247, 546: 247, 571: 5864, 1223: 5927}, + {242, 242, 546: 5873, 1073: 5928}, + {279, 279}, + {9: 336, 57: 336, 544: 336, 576: 336, 641: 2128, 727: 336, 740: 2128}, // 3015 - {9: 322, 20: 5929, 142: 5931, 195: 5932, 228: 5930, 5928, 348: 5933, 544: 322, 322, 576: 322, 726: 322}, - {9: 319, 544: 319, 319, 576: 319, 726: 319}, - {9: 318, 544: 318, 318, 576: 318, 726: 318}, - {9: 317, 195: 5927, 544: 317, 317, 576: 317, 726: 317}, - {9: 314, 544: 314, 314, 576: 314, 726: 314}, + {9: 301, 544: 301, 301, 576: 301, 641: 2095, 727: 301, 740: 2095}, + {9: 315, 544: 315, 315, 576: 315, 641: 2069, 727: 315, 740: 2069}, + {9: 302, 544: 302, 302, 576: 302, 641: 2066, 727: 302, 740: 2066}, + {9: 291, 544: 291, 291, 576: 291, 641: 2029, 727: 291, 740: 2029}, + {9: 311, 544: 311, 311, 576: 311, 641: 1949, 727: 311, 740: 1949}, // 3020 - {9: 313, 544: 313, 313, 576: 313, 726: 313}, - {142: 5926, 1161: 5925}, - {9: 309, 544: 309, 309, 576: 309, 726: 309}, - {1023: 5924}, - {9: 307, 544: 307, 307, 576: 307, 726: 307}, + {9: 316, 544: 316, 316, 576: 316, 641: 1942, 727: 316, 740: 1942}, + {357: 6037, 390: 6038, 641: 1923, 740: 1923}, + {9: 303, 544: 303, 303, 576: 303, 641: 1920, 727: 303, 740: 1920}, + {9: 292, 544: 292, 292, 576: 292, 641: 1917, 727: 292, 740: 1917}, + {641: 6035, 740: 6034}, // 3025 - {9: 304, 544: 304, 304, 576: 304, 726: 304}, - {164: 5923}, - {9: 299, 544: 299, 299, 576: 299, 726: 299}, - {9: 308, 544: 308, 308, 576: 308, 726: 308}, - {9: 310, 544: 310, 310, 576: 310, 726: 310}, + {9: 952, 544: 952, 576: 952, 641: 447, 727: 952, 740: 447}, + {9: 951, 544: 951, 576: 951, 727: 951}, + {9: 332, 57: 6033, 544: 332, 576: 332, 727: 332}, + {9: 334, 544: 334, 576: 334, 727: 334}, + {9: 333, 544: 333, 576: 333, 727: 333}, // 3030 - {9: 297, 544: 297, 297, 576: 297, 726: 297}, - {9: 295, 544: 295, 295, 576: 295, 726: 295}, - {9: 321, 544: 321, 321, 576: 321, 726: 321}, - {9: 320, 544: 320, 320, 576: 320, 726: 320}, - {164: 5934}, + {576: 6031}, + {9: 312, 544: 312, 312, 574: 6029, 576: 312, 727: 312}, + {9: 329, 544: 329, 576: 329, 727: 329}, + {9: 5981, 544: 5982, 576: 5983}, + {9: 327, 544: 327, 5978, 576: 327, 727: 327}, // 3035 - {9: 298, 544: 298, 298, 576: 298, 726: 298}, - {9: 296, 544: 296, 296, 576: 296, 726: 296}, - {9: 294, 544: 294, 294, 576: 294, 726: 294}, - {9: 300, 544: 300, 300, 576: 300, 726: 300}, - {9: 293, 544: 293, 293, 576: 293, 726: 293}, + {9: 325, 251: 5977, 544: 325, 325, 576: 325, 727: 325}, + {9: 323, 350: 5976, 544: 323, 323, 576: 323, 727: 323}, + {9: 322, 20: 5970, 144: 5972, 196: 5973, 228: 5971, 5969, 350: 5974, 544: 322, 322, 576: 322, 727: 322}, + {9: 319, 544: 319, 319, 576: 319, 727: 319}, + {9: 318, 544: 318, 318, 576: 318, 727: 318}, // 3040 - {9: 324, 544: 324, 324, 576: 324, 726: 324}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 4084, 918: 5938}, - {9: 4086, 52: 5939}, - {9: 326, 544: 326, 576: 326, 726: 326}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 5888, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 5890, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 5896, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 5892, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 5889, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 5897, 3270, 3531, 5891, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 5894, 3176, 3177, 3424, 5895, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 5893, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 5899, 577: 5922, 601: 5916, 670: 5905, 721: 5920, 724: 5915, 728: 5918, 730: 5909, 738: 5910, 741: 5914, 754: 5911, 786: 3793, 3092, 3093, 3091, 818: 5913, 820: 5898, 913: 5900, 924: 5904, 975: 5919, 986: 5917, 1060: 5901, 1087: 5902, 5908, 1094: 5903, 5987, 1105: 5912, 1109: 5921}, + {9: 317, 196: 5968, 544: 317, 317, 576: 317, 727: 317}, + {9: 314, 544: 314, 314, 576: 314, 727: 314}, + {9: 313, 544: 313, 313, 576: 313, 727: 313}, + {144: 5967, 1163: 5966}, + {9: 309, 544: 309, 309, 576: 309, 727: 309}, // 3045 - {2: 290, 290, 290, 290, 290, 290, 290, 10: 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 53: 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 5954, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 575: 290, 622: 5953, 982: 5955, 1230: 5956}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 645: 5944, 786: 3793, 3092, 3093, 3091, 820: 5943, 870: 5945, 987: 5946}, - {961, 961, 6: 961, 9: 961, 15: 961, 51: 961, 53: 961, 961, 961, 961, 142: 961, 193: 961, 546: 961, 556: 961, 569: 961, 643: 5951, 672: 961, 726: 961, 732: 961, 739: 961, 5950}, - {1424, 1424, 6: 1424, 9: 1424, 15: 1424, 51: 1424, 53: 1424, 1424, 1424, 1424, 142: 1424, 193: 1424, 545: 4422, 1424, 556: 1424, 569: 1424, 672: 1424, 726: 1424, 732: 1424, 739: 1424, 1240: 5949}, - {957, 957, 9: 957, 546: 957}, + {1023: 5965}, + {9: 307, 544: 307, 307, 576: 307, 727: 307}, + {9: 304, 544: 304, 304, 576: 304, 727: 304}, + {166: 5964}, + {9: 299, 544: 299, 299, 576: 299, 727: 299}, // 3050 - {280, 280, 9: 5947}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 645: 5944, 786: 3793, 3092, 3093, 3091, 820: 5943, 870: 5948}, - {956, 956, 9: 956, 546: 956}, - {958, 958, 6: 958, 9: 958, 15: 958, 51: 958, 53: 958, 958, 958, 958, 142: 958, 193: 958, 546: 958, 556: 958, 569: 958, 672: 958, 726: 958, 732: 958, 739: 958}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 786: 3793, 3092, 3093, 3091, 820: 5952}, + {9: 308, 544: 308, 308, 576: 308, 727: 308}, + {9: 310, 544: 310, 310, 576: 310, 727: 310}, + {9: 297, 544: 297, 297, 576: 297, 727: 297}, + {9: 295, 544: 295, 295, 576: 295, 727: 295}, + {9: 321, 544: 321, 321, 576: 321, 727: 321}, // 3055 - {959, 959, 6: 959, 9: 959, 15: 959, 51: 959, 53: 959, 959, 959, 959, 142: 959, 193: 959, 546: 959, 556: 959, 569: 959, 672: 959, 726: 959, 732: 959, 739: 959}, - {960, 960, 6: 960, 9: 960, 15: 960, 51: 960, 53: 960, 960, 960, 960, 142: 960, 193: 960, 546: 960, 556: 960, 569: 960, 672: 960, 726: 960, 732: 960, 739: 960}, - {2: 289, 289, 289, 289, 289, 289, 289, 10: 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, 289, 289, 289, 289, 289, 289, 53: 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 575: 289}, - {2: 288, 288, 288, 288, 288, 288, 288, 10: 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 53: 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 575: 288}, - {2: 287, 287, 287, 287, 287, 287, 287, 10: 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 53: 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 575: 287}, + {9: 320, 544: 320, 320, 576: 320, 727: 320}, + {166: 5975}, + {9: 298, 544: 298, 298, 576: 298, 727: 298}, + {9: 296, 544: 296, 296, 576: 296, 727: 296}, + {9: 294, 544: 294, 294, 576: 294, 727: 294}, // 3060 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 5957, 786: 5958, 3092, 3093, 3091, 1257: 5959}, - {576: 286, 726: 286, 729: 5985}, - {576: 282, 726: 282, 729: 5982}, - {576: 5960}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 645: 5944, 786: 3793, 3092, 3093, 3091, 820: 5943, 870: 5961, 1011: 5962, 1039: 5963}, + {9: 300, 544: 300, 300, 576: 300, 727: 300}, + {9: 293, 544: 293, 293, 576: 293, 727: 293}, + {9: 324, 544: 324, 324, 576: 324, 727: 324}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 4103, 918: 5979}, + {9: 4105, 52: 5980}, // 3065 - {374, 374, 6: 374, 9: 374, 15: 374, 51: 374, 53: 374, 374, 374, 374, 193: 5967, 546: 374, 739: 374, 1337: 5966}, - {421, 421, 6: 421, 9: 421, 15: 421, 51: 421, 53: 421, 421, 421, 421, 546: 421, 739: 421}, - {281, 281, 9: 5964}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 645: 5944, 786: 3793, 3092, 3093, 3091, 820: 5943, 870: 5961, 1011: 5965}, - {420, 420, 6: 420, 9: 420, 15: 420, 51: 420, 53: 420, 420, 420, 420, 546: 420, 739: 420}, + {9: 326, 544: 326, 576: 326, 727: 326}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 5929, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 5931, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 5937, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 5933, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 5930, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 5938, 3289, 3550, 5932, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 5935, 3195, 3196, 3443, 5936, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 5934, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 5940, 577: 5963, 601: 5957, 662: 5946, 720: 5961, 724: 5956, 726: 5959, 730: 5950, 738: 5951, 741: 5955, 754: 5952, 786: 3812, 3111, 3112, 3110, 818: 5954, 820: 5939, 913: 5941, 924: 5945, 975: 5960, 986: 5958, 1060: 5942, 1088: 5943, 5949, 1095: 5944, 6028, 1107: 5953, 1111: 5962}, + {2: 290, 290, 290, 290, 290, 290, 290, 10: 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 53: 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 5995, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 575: 290, 622: 5994, 982: 5996, 1232: 5997}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 645: 5985, 786: 3812, 3111, 3112, 3110, 820: 5984, 870: 5986, 987: 5987}, + {965, 965, 6: 965, 9: 965, 15: 965, 51: 965, 53: 965, 965, 965, 965, 144: 965, 194: 965, 546: 965, 556: 965, 569: 965, 641: 5992, 672: 965, 727: 965, 732: 965, 739: 965, 5991}, // 3070 - {422, 422, 6: 422, 9: 422, 15: 422, 51: 422, 53: 422, 422, 422, 422, 546: 422, 739: 422}, - {546: 5969, 737: 5968}, - {15: 5980, 547: 5977, 1014: 5979}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 786: 3793, 3092, 3093, 3091, 820: 5971, 1338: 5970}, - {372, 372, 6: 372, 9: 372, 15: 372, 51: 372, 53: 372, 372, 372, 372, 546: 372, 551: 5973, 737: 5972, 739: 372}, + {1428, 1428, 6: 1428, 9: 1428, 15: 1428, 51: 1428, 53: 1428, 1428, 1428, 1428, 144: 1428, 194: 1428, 545: 4441, 1428, 556: 1428, 569: 1428, 672: 1428, 727: 1428, 732: 1428, 739: 1428, 1242: 5990}, + {961, 961, 9: 961, 546: 961}, + {280, 280, 9: 5988}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 645: 5985, 786: 3812, 3111, 3112, 3110, 820: 5984, 870: 5989}, + {960, 960, 9: 960, 546: 960}, // 3075 - {368, 368, 6: 368, 9: 368, 15: 368, 51: 368, 53: 368, 368, 368, 368, 546: 368, 551: 368, 737: 368, 739: 368}, - {547: 5977, 1014: 5978}, - {547: 5975, 652: 5976, 1202: 5974}, - {370, 370, 6: 370, 9: 370, 15: 370, 51: 370, 53: 370, 370, 370, 370, 546: 370, 739: 370}, - {367, 367, 6: 367, 9: 367, 15: 367, 51: 367, 53: 367, 367, 367, 367, 546: 367, 739: 367}, + {962, 962, 6: 962, 9: 962, 15: 962, 51: 962, 53: 962, 962, 962, 962, 144: 962, 194: 962, 546: 962, 556: 962, 569: 962, 672: 962, 727: 962, 732: 962, 739: 962}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 786: 3812, 3111, 3112, 3110, 820: 5993}, + {963, 963, 6: 963, 9: 963, 15: 963, 51: 963, 53: 963, 963, 963, 963, 144: 963, 194: 963, 546: 963, 556: 963, 569: 963, 672: 963, 727: 963, 732: 963, 739: 963}, + {964, 964, 6: 964, 9: 964, 15: 964, 51: 964, 53: 964, 964, 964, 964, 144: 964, 194: 964, 546: 964, 556: 964, 569: 964, 672: 964, 727: 964, 732: 964, 739: 964}, + {2: 289, 289, 289, 289, 289, 289, 289, 10: 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, 289, 289, 289, 289, 289, 289, 53: 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 575: 289}, // 3080 - {366, 366, 6: 366, 9: 366, 15: 366, 51: 366, 53: 366, 366, 366, 366, 546: 366, 739: 366}, - {953, 953, 6: 953, 9: 953, 15: 953, 51: 953, 953, 953, 953, 953, 953, 546: 953, 739: 953}, - {371, 371, 6: 371, 9: 371, 15: 371, 51: 371, 53: 371, 371, 371, 371, 546: 371, 739: 371}, - {373, 373, 6: 373, 9: 373, 15: 373, 51: 373, 53: 373, 373, 373, 373, 546: 373, 739: 373}, - {547: 5975, 652: 5976, 1202: 5981}, + {2: 288, 288, 288, 288, 288, 288, 288, 10: 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 53: 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 288, 575: 288}, + {2: 287, 287, 287, 287, 287, 287, 287, 10: 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 53: 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 575: 287}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 5998, 786: 5999, 3111, 3112, 3110, 1259: 6000}, + {576: 286, 727: 286, 729: 6026}, + {576: 282, 727: 282, 729: 6023}, // 3085 - {369, 369, 6: 369, 9: 369, 15: 369, 51: 369, 53: 369, 369, 369, 369, 546: 369, 739: 369}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 5983, 786: 5984, 3092, 3093, 3091}, - {576: 284, 726: 284}, - {576: 283, 726: 283}, - {575: 5986}, + {576: 6001}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 645: 5985, 786: 3812, 3111, 3112, 3110, 820: 5984, 870: 6002, 1011: 6003, 1039: 6004}, + {378, 378, 6: 378, 9: 378, 15: 378, 51: 378, 53: 378, 378, 378, 378, 194: 6008, 546: 378, 739: 378, 1341: 6007}, + {425, 425, 6: 425, 9: 425, 15: 425, 51: 425, 53: 425, 425, 425, 425, 546: 425, 739: 425}, + {281, 281, 9: 6005}, // 3090 - {576: 285, 726: 285}, - {9: 328, 544: 328, 576: 328, 726: 328}, - {349: 5989}, - {9: 330, 544: 330, 576: 330, 726: 330}, - {349: 5991}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 645: 5985, 786: 3812, 3111, 3112, 3110, 820: 5984, 870: 6002, 1011: 6006}, + {424, 424, 6: 424, 9: 424, 15: 424, 51: 424, 53: 424, 424, 424, 424, 546: 424, 739: 424}, + {426, 426, 6: 426, 9: 426, 15: 426, 51: 426, 53: 426, 426, 426, 426, 546: 426, 739: 426}, + {546: 6010, 737: 6009}, + {15: 6021, 547: 6018, 1014: 6020}, // 3095 - {9: 331, 544: 331, 576: 331, 726: 331}, - {9: 335, 57: 335, 544: 335, 576: 335, 726: 335}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 786: 3793, 3092, 3093, 3091, 820: 5995}, - {949, 949, 9: 949, 544: 949, 576: 949, 726: 949}, - {950, 950, 9: 950, 544: 950, 576: 950, 726: 950}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 786: 3812, 3111, 3112, 3110, 820: 6012, 1342: 6011}, + {376, 376, 6: 376, 9: 376, 15: 376, 51: 376, 53: 376, 376, 376, 376, 546: 376, 551: 6014, 737: 6013, 739: 376}, + {372, 372, 6: 372, 9: 372, 15: 372, 51: 372, 53: 372, 372, 372, 372, 546: 372, 551: 372, 737: 372, 739: 372}, + {547: 6018, 1014: 6019}, + {547: 6016, 652: 6017, 1204: 6015}, // 3100 - {9: 306, 544: 306, 306, 576: 306, 726: 306}, - {9: 305, 544: 305, 305, 576: 305, 726: 305}, - {544: 6040, 643: 2038, 740: 2038}, - {9: 5940, 544: 6000, 726: 6001}, - {2: 290, 290, 290, 290, 290, 290, 290, 10: 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 53: 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 5954, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 575: 290, 622: 5953, 982: 5955, 1230: 6003}, + {374, 374, 6: 374, 9: 374, 15: 374, 51: 374, 53: 374, 374, 374, 374, 546: 374, 739: 374}, + {371, 371, 6: 371, 9: 371, 15: 371, 51: 371, 53: 371, 371, 371, 371, 546: 371, 739: 371}, + {370, 370, 6: 370, 9: 370, 15: 370, 51: 370, 53: 370, 370, 370, 370, 546: 370, 739: 370}, + {957, 957, 6: 957, 9: 957, 15: 957, 51: 957, 957, 957, 957, 957, 957, 546: 957, 739: 957}, + {375, 375, 6: 375, 9: 375, 15: 375, 51: 375, 53: 375, 375, 375, 375, 546: 375, 739: 375}, // 3105 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 645: 5944, 786: 3793, 3092, 3093, 3091, 820: 5943, 870: 5945, 987: 6002}, - {343, 343, 9: 5947}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 5957, 786: 5958, 3092, 3093, 3091, 1257: 6004}, - {726: 6005}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 645: 5944, 786: 3793, 3092, 3093, 3091, 820: 5943, 870: 5961, 1011: 5962, 1039: 6006}, + {377, 377, 6: 377, 9: 377, 15: 377, 51: 377, 53: 377, 377, 377, 377, 546: 377, 739: 377}, + {547: 6016, 652: 6017, 1204: 6022}, + {373, 373, 6: 373, 9: 373, 15: 373, 51: 373, 53: 373, 373, 373, 373, 546: 373, 739: 373}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 6024, 786: 6025, 3111, 3112, 3110}, + {576: 284, 727: 284}, // 3110 - {411, 411, 9: 5964, 546: 411, 739: 6008, 1091: 6007, 6009}, - {410, 410, 6: 410, 15: 410, 51: 410, 53: 410, 410, 410, 410, 546: 410}, - {172: 6029, 6027, 179: 6030, 6028, 6031, 423: 6022, 472: 6024, 1093: 6026, 1457: 6025, 1482: 6023}, - {342, 342, 546: 6011, 1321: 6010}, - {345, 345}, + {576: 283, 727: 283}, + {575: 6027}, + {576: 285, 727: 285}, + {9: 328, 544: 328, 576: 328, 727: 328}, + {351: 6030}, // 3115 - {174: 6015, 6013, 6014, 6016, 975: 6012}, - {1023: 6021}, - {573: 3078, 814: 6020}, - {573: 3078, 814: 6019}, - {573: 3078, 814: 6018}, + {9: 330, 544: 330, 576: 330, 727: 330}, + {351: 6032}, + {9: 331, 544: 331, 576: 331, 727: 331}, + {9: 335, 57: 335, 544: 335, 576: 335, 727: 335}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 786: 3812, 3111, 3112, 3110, 820: 6036}, // 3120 - {573: 3078, 814: 6017}, - {337, 337}, - {338, 338}, - {339, 339}, - {340, 340}, + {953, 953, 9: 953, 544: 953, 576: 953, 727: 953}, + {954, 954, 9: 954, 544: 954, 576: 954, 727: 954}, + {9: 306, 544: 306, 306, 576: 306, 727: 306}, + {9: 305, 544: 305, 305, 576: 305, 727: 305}, + {544: 6081, 641: 2042, 740: 2042}, // 3125 - {341, 341}, - {409, 409, 6: 409, 15: 409, 51: 409, 53: 409, 409, 409, 409, 546: 409}, - {408, 408, 6: 408, 15: 408, 51: 408, 53: 408, 408, 408, 408, 546: 408}, - {407, 407, 6: 407, 15: 407, 51: 407, 53: 407, 407, 407, 407, 546: 407}, - {406, 406, 6: 406, 15: 406, 51: 406, 53: 406, 406, 406, 406, 172: 6029, 6027, 179: 6030, 6028, 6031, 546: 406, 581: 6037, 1093: 6038}, + {9: 5981, 544: 6041, 727: 6042}, + {2: 290, 290, 290, 290, 290, 290, 290, 10: 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 53: 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 5995, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 575: 290, 622: 5994, 982: 5996, 1232: 6044}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 645: 5985, 786: 3812, 3111, 3112, 3110, 820: 5984, 870: 5986, 987: 6043}, + {343, 343, 9: 5988}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 5998, 786: 5999, 3111, 3112, 3110, 1259: 6045}, // 3130 - {405, 405, 6: 405, 15: 405, 51: 405, 53: 405, 405, 405, 405, 172: 405, 405, 179: 405, 405, 405, 546: 405, 581: 405}, - {547: 6036}, - {547: 6035}, - {547: 6034}, - {547: 6033}, + {727: 6046}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 645: 5985, 786: 3812, 3111, 3112, 3110, 820: 5984, 870: 6002, 1011: 6003, 1039: 6047}, + {415, 415, 9: 6005, 546: 415, 739: 6049, 1092: 6048, 6050}, + {414, 414, 6: 414, 15: 414, 51: 414, 53: 414, 414, 414, 414, 546: 414}, + {173: 6070, 6068, 180: 6071, 6069, 6072, 423: 6063, 472: 6065, 1094: 6067, 1462: 6066, 1487: 6064}, // 3135 - {547: 6032}, - {398, 398, 6: 398, 15: 398, 51: 398, 53: 398, 398, 398, 398, 172: 398, 398, 179: 398, 398, 398, 546: 398, 581: 398}, - {399, 399, 6: 399, 15: 399, 51: 399, 53: 399, 399, 399, 399, 172: 399, 399, 179: 399, 399, 399, 546: 399, 581: 399}, - {400, 400, 6: 400, 15: 400, 51: 400, 53: 400, 400, 400, 400, 172: 400, 400, 179: 400, 400, 400, 546: 400, 581: 400}, - {401, 401, 6: 401, 15: 401, 51: 401, 53: 401, 401, 401, 401, 172: 401, 401, 179: 401, 401, 401, 546: 401, 581: 401}, + {342, 342, 546: 6052, 1325: 6051}, + {345, 345}, + {175: 6056, 6054, 6055, 6057, 975: 6053}, + {1023: 6062}, + {573: 3097, 814: 6061}, // 3140 - {402, 402, 6: 402, 15: 402, 51: 402, 53: 402, 402, 402, 402, 172: 402, 402, 179: 402, 402, 402, 546: 402, 581: 402}, - {172: 6029, 6027, 179: 6030, 6028, 6031, 1093: 6039}, - {403, 403, 6: 403, 15: 403, 51: 403, 53: 403, 403, 403, 403, 172: 403, 403, 179: 403, 403, 403, 546: 403, 581: 403}, - {404, 404, 6: 404, 15: 404, 51: 404, 53: 404, 404, 404, 404, 172: 404, 404, 179: 404, 404, 404, 546: 404, 581: 404}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 645: 5944, 786: 3793, 3092, 3093, 3091, 820: 5943, 870: 6041}, + {573: 3097, 814: 6060}, + {573: 3097, 814: 6059}, + {573: 3097, 814: 6058}, + {337, 337}, + {338, 338}, // 3145 - {726: 6042}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 645: 5944, 786: 3793, 3092, 3093, 3091, 820: 5943, 870: 5945, 987: 6043}, - {342, 342, 9: 5947, 546: 6011, 1321: 6044}, - {344, 344}, - {2505, 2505, 9: 2505, 16: 2505, 18: 2505, 21: 2505, 549: 2505, 552: 2505, 567: 2505, 571: 2505, 576: 2505, 578: 2505, 597: 2505, 723: 2505, 726: 2505, 779: 2505, 2505}, + {339, 339}, + {340, 340}, + {341, 341}, + {413, 413, 6: 413, 15: 413, 51: 413, 53: 413, 413, 413, 413, 546: 413}, + {412, 412, 6: 412, 15: 412, 51: 412, 53: 412, 412, 412, 412, 546: 412}, // 3150 - {434, 434}, - {2: 1069, 1069, 1069, 1069, 1069, 1069, 1069, 10: 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 53: 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 545: 1069, 547: 1069, 1069, 1069, 1069, 554: 1069, 1069, 557: 1069, 1069, 1069, 561: 1069, 1069, 1069, 566: 1069, 1069, 573: 1069, 1069, 1069, 1069, 588: 1069, 593: 1069, 600: 1069, 1069, 633: 1069, 640: 1069, 642: 1069, 1069, 1069, 1069, 650: 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 671: 1069, 673: 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 725: 1069, 730: 1069, 843: 1069, 1069, 847: 1069, 849: 1069, 851: 1069, 855: 1069, 864: 1069, 1069, 1069}, - {2: 1067, 1067, 1067, 1067, 1067, 1067, 1067, 10: 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 53: 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 545: 1067, 563: 1067, 574: 1067, 1067, 1067, 657: 1067, 847: 1067, 849: 1067, 851: 1067}, - {2: 1274, 1274, 1274, 1274, 1274, 1274, 1274, 10: 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 53: 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 545: 1274, 563: 1274, 575: 1274, 657: 1274, 847: 6050, 849: 6052, 851: 6051, 952: 6053, 1006: 6054}, - {2: 1277, 1277, 1277, 1277, 1277, 1277, 1277, 10: 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 53: 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 545: 1277, 547: 1277, 1277, 1277, 1277, 554: 1277, 1277, 557: 1277, 1277, 1277, 561: 1277, 1277, 1277, 566: 1277, 1277, 573: 1277, 1277, 1277, 1277, 588: 1277, 593: 1277, 600: 1277, 1277, 633: 1277, 640: 1277, 642: 1277, 1277, 1277, 1277, 650: 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 671: 1277, 673: 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 725: 1277, 730: 1277, 843: 1277, 1277, 847: 1277, 849: 1277, 851: 1277, 855: 1277, 864: 1277, 1277, 1277}, + {411, 411, 6: 411, 15: 411, 51: 411, 53: 411, 411, 411, 411, 546: 411}, + {410, 410, 6: 410, 15: 410, 51: 410, 53: 410, 410, 410, 410, 173: 6070, 6068, 180: 6071, 6069, 6072, 546: 410, 581: 6078, 1094: 6079}, + {409, 409, 6: 409, 15: 409, 51: 409, 53: 409, 409, 409, 409, 173: 409, 409, 180: 409, 409, 409, 546: 409, 581: 409}, + {547: 6077}, + {547: 6076}, // 3155 - {2: 1276, 1276, 1276, 1276, 1276, 1276, 1276, 10: 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 53: 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 545: 1276, 547: 1276, 1276, 1276, 1276, 554: 1276, 1276, 557: 1276, 1276, 1276, 561: 1276, 1276, 1276, 566: 1276, 1276, 573: 1276, 1276, 1276, 1276, 588: 1276, 593: 1276, 600: 1276, 1276, 633: 1276, 640: 1276, 642: 1276, 1276, 1276, 1276, 650: 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 671: 1276, 673: 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 725: 1276, 730: 1276, 843: 1276, 1276, 847: 1276, 849: 1276, 851: 1276, 855: 1276, 864: 1276, 1276, 1276}, - {2: 1275, 1275, 1275, 1275, 1275, 1275, 1275, 10: 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 53: 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 545: 1275, 547: 1275, 1275, 1275, 1275, 554: 1275, 1275, 557: 1275, 1275, 1275, 561: 1275, 1275, 1275, 566: 1275, 1275, 573: 1275, 1275, 1275, 1275, 588: 1275, 593: 1275, 600: 1275, 1275, 633: 1275, 640: 1275, 642: 1275, 1275, 1275, 1275, 650: 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 671: 1275, 673: 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 725: 1275, 730: 1275, 843: 1275, 1275, 847: 1275, 849: 1275, 851: 1275, 855: 1275, 864: 1275, 1275, 1275}, - {2: 1273, 1273, 1273, 1273, 1273, 1273, 1273, 10: 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 53: 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 1273, 545: 1273, 563: 1273, 574: 1273, 1273, 1273, 657: 1273}, - {2: 2149, 2149, 2149, 2149, 2149, 2149, 2149, 10: 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 53: 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 545: 2149, 563: 4743, 575: 2149, 657: 2149, 976: 6055}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 6064, 575: 3984, 657: 6059, 786: 3983, 3092, 3093, 3091, 6063, 819: 6062, 909: 6061, 914: 6060, 6058, 973: 6056, 1010: 6057}, + {547: 6075}, + {547: 6074}, + {547: 6073}, + {402, 402, 6: 402, 15: 402, 51: 402, 53: 402, 402, 402, 402, 173: 402, 402, 180: 402, 402, 402, 546: 402, 581: 402}, + {403, 403, 6: 403, 15: 403, 51: 403, 53: 403, 403, 403, 403, 173: 403, 403, 180: 403, 403, 403, 546: 403, 581: 403}, // 3160 - {1147, 1147, 9: 1147, 52: 1147, 544: 1147, 546: 1147, 553: 1147, 556: 1147, 564: 1147, 1147, 568: 1147, 570: 1147, 1147, 1147, 574: 1147, 577: 1147, 1147, 1147, 586: 1147, 1147, 589: 1147}, - {9: 6114, 571: 6183}, - {9: 1145, 554: 6077, 6078, 571: 6168, 588: 6076, 591: 6079, 594: 6075, 6080, 6081, 931: 6074, 936: 6073}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6165, 3092, 3093, 3091}, - {1143, 1143, 9: 1143, 52: 1143, 544: 1143, 546: 1143, 553: 1143, 1143, 1143, 1143, 564: 1143, 1143, 568: 1143, 570: 1143, 1143, 1143, 574: 1143, 577: 1143, 1143, 1143, 586: 1143, 1143, 1143, 1143, 591: 1143, 594: 1143, 1143, 1143, 599: 1143}, + {404, 404, 6: 404, 15: 404, 51: 404, 53: 404, 404, 404, 404, 173: 404, 404, 180: 404, 404, 404, 546: 404, 581: 404}, + {405, 405, 6: 405, 15: 405, 51: 405, 53: 405, 405, 405, 405, 173: 405, 405, 180: 405, 405, 405, 546: 405, 581: 405}, + {406, 406, 6: 406, 15: 406, 51: 406, 53: 406, 406, 406, 406, 173: 406, 406, 180: 406, 406, 406, 546: 406, 581: 406}, + {173: 6070, 6068, 180: 6071, 6069, 6072, 1094: 6080}, + {407, 407, 6: 407, 15: 407, 51: 407, 53: 407, 407, 407, 407, 173: 407, 407, 180: 407, 407, 407, 546: 407, 581: 407}, // 3165 - {1142, 1142, 9: 1142, 52: 1142, 544: 1142, 546: 1142, 553: 1142, 1142, 1142, 1142, 564: 1142, 1142, 568: 1142, 570: 1142, 1142, 1142, 574: 1142, 577: 1142, 1142, 1142, 586: 1142, 1142, 1142, 1142, 591: 1142, 594: 1142, 1142, 1142, 599: 1142}, - {1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 546: 1138, 551: 1138, 553: 1138, 1138, 1138, 1138, 560: 6118, 563: 1138, 1138, 1138, 568: 1138, 570: 1138, 1138, 1138, 574: 1138, 577: 1138, 1138, 1138, 1138, 586: 1138, 1138, 1138, 1138, 1138, 1138, 594: 1138, 1138, 1138, 599: 1138, 606: 1138, 745: 1138, 981: 6117}, - {1136, 1136, 3341, 3505, 3305, 3180, 3221, 3343, 3105, 1136, 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 1136, 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 1136, 546: 1136, 551: 6071, 553: 1136, 1136, 1136, 1136, 564: 1136, 1136, 568: 1136, 570: 1136, 1136, 1136, 574: 1136, 577: 1136, 1136, 1136, 586: 1136, 1136, 1136, 1136, 591: 1136, 594: 1136, 1136, 1136, 599: 1136, 786: 6070, 3092, 3093, 3091, 1032: 6069, 6068}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 6064, 2948, 562: 2947, 575: 3984, 622: 2946, 657: 6059, 670: 2942, 786: 3983, 3092, 3093, 3091, 6067, 819: 6062, 821: 3903, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 3902, 3905, 3904, 909: 6061, 914: 6060, 6066, 973: 6056, 1010: 6065}, - {9: 6114, 52: 6115}, + {408, 408, 6: 408, 15: 408, 51: 408, 53: 408, 408, 408, 408, 173: 408, 408, 180: 408, 408, 408, 546: 408, 581: 408}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 645: 5985, 786: 3812, 3111, 3112, 3110, 820: 5984, 870: 6082}, + {727: 6083}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 645: 5985, 786: 3812, 3111, 3112, 3110, 820: 5984, 870: 5986, 987: 6084}, + {342, 342, 9: 5988, 546: 6052, 1325: 6085}, // 3170 - {1145, 1145, 9: 1145, 52: 1145, 544: 1145, 546: 1145, 553: 1145, 6077, 6078, 1145, 564: 1145, 1145, 568: 1145, 570: 1145, 1145, 1145, 574: 1145, 577: 1145, 1145, 1145, 586: 1145, 1145, 6076, 1145, 591: 6079, 594: 6075, 6080, 6081, 931: 6074, 936: 6073}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 1136, 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 4048, 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 551: 6071, 553: 1029, 1136, 1136, 564: 1029, 1029, 568: 3915, 570: 3914, 579: 3913, 588: 1136, 591: 1136, 594: 1136, 1136, 1136, 786: 6070, 3092, 3093, 3091, 857: 3916, 3917, 1032: 6069, 6068}, - {1140, 1140, 9: 1140, 52: 1140, 544: 1140, 546: 1140, 553: 1140, 1140, 1140, 1140, 564: 1140, 1140, 568: 1140, 570: 1140, 1140, 1140, 574: 1140, 577: 1140, 1140, 1140, 586: 1140, 1140, 1140, 1140, 591: 1140, 594: 1140, 1140, 1140, 599: 1140}, - {1135, 1135, 9: 1135, 52: 1135, 544: 1135, 546: 1135, 553: 1135, 1135, 1135, 1135, 563: 1135, 1135, 1135, 568: 1135, 570: 1135, 1135, 1135, 574: 1135, 577: 1135, 1135, 1135, 1135, 586: 1135, 1135, 1135, 1135, 1135, 1135, 594: 1135, 1135, 1135, 599: 1135, 606: 1135, 745: 1135}, - {1134, 1134, 9: 1134, 52: 1134, 544: 1134, 546: 1134, 553: 1134, 1134, 1134, 1134, 563: 1134, 1134, 1134, 568: 1134, 570: 1134, 1134, 1134, 574: 1134, 577: 1134, 1134, 1134, 1134, 586: 1134, 1134, 1134, 1134, 1134, 1134, 594: 1134, 1134, 1134, 599: 1134, 606: 1134, 745: 1134}, + {344, 344}, + {2518, 2518, 9: 2518, 16: 2518, 18: 2518, 21: 2518, 549: 2518, 552: 2518, 567: 2518, 571: 2518, 576: 2518, 578: 2518, 597: 2518, 723: 2518, 727: 2518, 779: 2518, 2518}, + {438, 438}, + {2: 1073, 1073, 1073, 1073, 1073, 1073, 1073, 10: 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 53: 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 545: 1073, 547: 1073, 1073, 1073, 1073, 554: 1073, 1073, 557: 1073, 1073, 1073, 561: 1073, 1073, 1073, 566: 1073, 1073, 573: 1073, 1073, 1073, 1073, 588: 1073, 593: 1073, 600: 1073, 1073, 633: 1073, 640: 1073, 1073, 643: 1073, 1073, 1073, 650: 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 659: 1073, 1073, 1073, 663: 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 673: 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, 711: 1073, 1073, 1073, 1073, 1073, 1073, 725: 1073, 730: 1073, 843: 1073, 1073, 847: 1073, 849: 1073, 851: 1073, 855: 1073, 864: 1073, 1073, 1073}, + {2: 1071, 1071, 1071, 1071, 1071, 1071, 1071, 10: 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 53: 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 545: 1071, 563: 1071, 574: 1071, 1071, 1071, 657: 1071, 847: 1071, 849: 1071, 851: 1071}, // 3175 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6072, 3092, 3093, 3091}, - {1133, 1133, 9: 1133, 52: 1133, 544: 1133, 546: 1133, 553: 1133, 1133, 1133, 1133, 563: 1133, 1133, 1133, 568: 1133, 570: 1133, 1133, 1133, 574: 1133, 577: 1133, 1133, 1133, 1133, 586: 1133, 1133, 1133, 1133, 1133, 1133, 594: 1133, 1133, 1133, 599: 1133, 606: 1133, 745: 1133}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 6064, 575: 3984, 786: 3983, 3092, 3093, 3091, 6063, 819: 6062, 909: 6061, 914: 6060, 6107}, - {591: 1103, 1026: 6094, 1246: 6098}, - {554: 6077, 6078, 591: 6091, 931: 6092}, + {2: 1278, 1278, 1278, 1278, 1278, 1278, 1278, 10: 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 53: 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 545: 1278, 563: 1278, 575: 1278, 657: 1278, 847: 6091, 849: 6093, 851: 6092, 952: 6094, 1006: 6095}, + {2: 1281, 1281, 1281, 1281, 1281, 1281, 1281, 10: 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 53: 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 545: 1281, 547: 1281, 1281, 1281, 1281, 554: 1281, 1281, 557: 1281, 1281, 1281, 561: 1281, 1281, 1281, 566: 1281, 1281, 573: 1281, 1281, 1281, 1281, 588: 1281, 593: 1281, 600: 1281, 1281, 633: 1281, 640: 1281, 1281, 643: 1281, 1281, 1281, 650: 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 659: 1281, 1281, 1281, 663: 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 673: 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 711: 1281, 1281, 1281, 1281, 1281, 1281, 725: 1281, 730: 1281, 843: 1281, 1281, 847: 1281, 849: 1281, 851: 1281, 855: 1281, 864: 1281, 1281, 1281}, + {2: 1280, 1280, 1280, 1280, 1280, 1280, 1280, 10: 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 53: 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 545: 1280, 547: 1280, 1280, 1280, 1280, 554: 1280, 1280, 557: 1280, 1280, 1280, 561: 1280, 1280, 1280, 566: 1280, 1280, 573: 1280, 1280, 1280, 1280, 588: 1280, 593: 1280, 600: 1280, 1280, 633: 1280, 640: 1280, 1280, 643: 1280, 1280, 1280, 650: 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 659: 1280, 1280, 1280, 663: 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 673: 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 711: 1280, 1280, 1280, 1280, 1280, 1280, 725: 1280, 730: 1280, 843: 1280, 1280, 847: 1280, 849: 1280, 851: 1280, 855: 1280, 864: 1280, 1280, 1280}, + {2: 1279, 1279, 1279, 1279, 1279, 1279, 1279, 10: 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 53: 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 545: 1279, 547: 1279, 1279, 1279, 1279, 554: 1279, 1279, 557: 1279, 1279, 1279, 561: 1279, 1279, 1279, 566: 1279, 1279, 573: 1279, 1279, 1279, 1279, 588: 1279, 593: 1279, 600: 1279, 1279, 633: 1279, 640: 1279, 1279, 643: 1279, 1279, 1279, 650: 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 659: 1279, 1279, 1279, 663: 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 673: 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 711: 1279, 1279, 1279, 1279, 1279, 1279, 725: 1279, 730: 1279, 843: 1279, 1279, 847: 1279, 849: 1279, 851: 1279, 855: 1279, 864: 1279, 1279, 1279}, + {2: 1277, 1277, 1277, 1277, 1277, 1277, 1277, 10: 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 53: 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 1277, 545: 1277, 563: 1277, 574: 1277, 1277, 1277, 657: 1277}, // 3180 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 6064, 575: 3984, 786: 3983, 3092, 3093, 3091, 6063, 819: 6062, 909: 6061, 914: 6060, 6084}, - {591: 1105, 1026: 1105}, - {591: 1104, 1026: 1104}, - {2: 1101, 1101, 1101, 1101, 1101, 1101, 1101, 10: 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 53: 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, 545: 1101, 575: 1101}, - {591: 6083}, + {2: 2155, 2155, 2155, 2155, 2155, 2155, 2155, 10: 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 53: 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 545: 2155, 563: 4762, 575: 2155, 657: 2155, 976: 6096}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 6105, 575: 4003, 657: 6100, 786: 4002, 3111, 3112, 3110, 6104, 819: 6103, 909: 6102, 914: 6101, 6099, 973: 6097, 1010: 6098}, + {1151, 1151, 9: 1151, 52: 1151, 544: 1151, 546: 1151, 553: 1151, 556: 1151, 564: 1151, 1151, 568: 1151, 570: 1151, 1151, 1151, 574: 1151, 577: 1151, 1151, 1151, 586: 1151, 1151, 589: 1151}, + {9: 6155, 571: 6224}, + {9: 1149, 554: 6118, 6119, 571: 6209, 588: 6117, 591: 6120, 594: 6116, 6121, 6122, 931: 6115, 936: 6114}, // 3185 - {591: 6082}, - {2: 1099, 1099, 1099, 1099, 1099, 1099, 1099, 10: 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 53: 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, 545: 1099, 575: 1099}, - {2: 1100, 1100, 1100, 1100, 1100, 1100, 1100, 10: 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 53: 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 545: 1100, 575: 1100}, - {1108, 1108, 9: 1108, 52: 1108, 544: 6085, 546: 1108, 553: 1108, 1108, 1108, 6086, 564: 1108, 1108, 568: 1108, 570: 1108, 1108, 1108, 574: 1108, 577: 1108, 1108, 1108, 586: 1108, 1108, 1108, 1108, 591: 1108, 594: 1108, 1108, 1108, 599: 1108, 931: 6074, 936: 6073}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 6090}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6206, 3111, 3112, 3110}, + {1147, 1147, 9: 1147, 52: 1147, 544: 1147, 546: 1147, 553: 1147, 1147, 1147, 1147, 564: 1147, 1147, 568: 1147, 570: 1147, 1147, 1147, 574: 1147, 577: 1147, 1147, 1147, 586: 1147, 1147, 1147, 1147, 591: 1147, 594: 1147, 1147, 1147, 599: 1147}, + {1146, 1146, 9: 1146, 52: 1146, 544: 1146, 546: 1146, 553: 1146, 1146, 1146, 1146, 564: 1146, 1146, 568: 1146, 570: 1146, 1146, 1146, 574: 1146, 577: 1146, 1146, 1146, 586: 1146, 1146, 1146, 1146, 591: 1146, 594: 1146, 1146, 1146, 599: 1146}, + {1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 546: 1142, 551: 1142, 553: 1142, 1142, 1142, 1142, 560: 6159, 563: 1142, 1142, 1142, 568: 1142, 570: 1142, 1142, 1142, 574: 1142, 577: 1142, 1142, 1142, 1142, 586: 1142, 1142, 1142, 1142, 1142, 1142, 594: 1142, 1142, 1142, 599: 1142, 606: 1142, 745: 1142, 981: 6158}, + {1140, 1140, 3360, 3524, 3324, 3199, 3240, 3362, 3124, 1140, 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 1140, 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 1140, 546: 1140, 551: 6112, 553: 1140, 1140, 1140, 1140, 564: 1140, 1140, 568: 1140, 570: 1140, 1140, 1140, 574: 1140, 577: 1140, 1140, 1140, 586: 1140, 1140, 1140, 1140, 591: 1140, 594: 1140, 1140, 1140, 599: 1140, 786: 6111, 3111, 3112, 3110, 1032: 6110, 6109}, // 3190 - {545: 6087}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 4084, 918: 6088}, - {9: 4086, 52: 6089}, - {1106, 1106, 9: 1106, 52: 1106, 544: 1106, 546: 1106, 553: 1106, 1106, 1106, 1106, 564: 1106, 1106, 568: 1106, 570: 1106, 1106, 1106, 574: 1106, 577: 1106, 1106, 1106, 586: 1106, 1106, 1106, 1106, 591: 1106, 594: 1106, 1106, 1106, 599: 1106}, - {1107, 1107, 9: 1107, 52: 1107, 544: 1107, 546: 1107, 553: 1107, 1107, 1107, 1107, 564: 1107, 1107, 568: 1107, 570: 1107, 1107, 1107, 574: 1107, 577: 1107, 1107, 1107, 581: 3801, 3799, 3800, 3798, 3796, 1107, 1107, 1107, 1107, 591: 1107, 594: 1107, 1107, 1107, 599: 1107, 815: 3797, 3795}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 6105, 2967, 562: 2966, 575: 4003, 622: 2965, 657: 6100, 662: 2961, 786: 4002, 3111, 3112, 3110, 6108, 819: 6103, 821: 3922, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 3921, 3924, 3923, 909: 6102, 914: 6101, 6107, 973: 6097, 1010: 6106}, + {9: 6155, 52: 6156}, + {1149, 1149, 9: 1149, 52: 1149, 544: 1149, 546: 1149, 553: 1149, 6118, 6119, 1149, 564: 1149, 1149, 568: 1149, 570: 1149, 1149, 1149, 574: 1149, 577: 1149, 1149, 1149, 586: 1149, 1149, 6117, 1149, 591: 6120, 594: 6116, 6121, 6122, 931: 6115, 936: 6114}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 1140, 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 4067, 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 551: 6112, 553: 1033, 1140, 1140, 564: 1033, 1033, 568: 3934, 570: 3933, 579: 3932, 588: 1140, 591: 1140, 594: 1140, 1140, 1140, 786: 6111, 3111, 3112, 3110, 857: 3935, 3936, 1032: 6110, 6109}, + {1144, 1144, 9: 1144, 52: 1144, 544: 1144, 546: 1144, 553: 1144, 1144, 1144, 1144, 564: 1144, 1144, 568: 1144, 570: 1144, 1144, 1144, 574: 1144, 577: 1144, 1144, 1144, 586: 1144, 1144, 1144, 1144, 591: 1144, 594: 1144, 1144, 1144, 599: 1144}, // 3195 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 6064, 575: 3984, 786: 3983, 3092, 3093, 3091, 6063, 819: 6062, 909: 6061, 914: 6060, 6097}, - {591: 1103, 1026: 6094, 1246: 6093}, - {591: 6095}, - {591: 1102}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 6064, 575: 3984, 786: 3983, 3092, 3093, 3091, 6063, 819: 6062, 909: 6061, 914: 6060, 6096}, + {1139, 1139, 9: 1139, 52: 1139, 544: 1139, 546: 1139, 553: 1139, 1139, 1139, 1139, 563: 1139, 1139, 1139, 568: 1139, 570: 1139, 1139, 1139, 574: 1139, 577: 1139, 1139, 1139, 1139, 586: 1139, 1139, 1139, 1139, 1139, 1139, 594: 1139, 1139, 1139, 599: 1139, 606: 1139, 745: 1139}, + {1138, 1138, 9: 1138, 52: 1138, 544: 1138, 546: 1138, 553: 1138, 1138, 1138, 1138, 563: 1138, 1138, 1138, 568: 1138, 570: 1138, 1138, 1138, 574: 1138, 577: 1138, 1138, 1138, 1138, 586: 1138, 1138, 1138, 1138, 1138, 1138, 594: 1138, 1138, 1138, 599: 1138, 606: 1138, 745: 1138}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6113, 3111, 3112, 3110}, + {1137, 1137, 9: 1137, 52: 1137, 544: 1137, 546: 1137, 553: 1137, 1137, 1137, 1137, 563: 1137, 1137, 1137, 568: 1137, 570: 1137, 1137, 1137, 574: 1137, 577: 1137, 1137, 1137, 1137, 586: 1137, 1137, 1137, 1137, 1137, 1137, 594: 1137, 1137, 1137, 599: 1137, 606: 1137, 745: 1137}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 6105, 575: 4003, 786: 4002, 3111, 3112, 3110, 6104, 819: 6103, 909: 6102, 914: 6101, 6148}, // 3200 - {1109, 1109, 9: 1109, 52: 1109, 544: 1109, 546: 1109, 553: 1109, 1109, 1109, 1109, 564: 1109, 1109, 568: 1109, 570: 1109, 1109, 1109, 574: 1109, 577: 1109, 1109, 1109, 586: 1109, 1109, 1109, 1109, 591: 1109, 594: 1109, 1109, 1109, 599: 1109, 931: 6074, 936: 6073}, - {1110, 1110, 9: 1110, 52: 1110, 544: 1110, 546: 1110, 553: 1110, 1110, 1110, 1110, 564: 1110, 1110, 568: 1110, 570: 1110, 1110, 1110, 574: 1110, 577: 1110, 1110, 1110, 586: 1110, 1110, 1110, 1110, 591: 1110, 594: 1110, 1110, 1110, 599: 1110, 931: 6074, 936: 6073}, - {591: 6099}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 6064, 575: 3984, 786: 3983, 3092, 3093, 3091, 6063, 819: 6062, 909: 6061, 914: 6060, 6100}, - {544: 6101, 554: 6077, 6078, 6102, 588: 6076, 591: 6079, 594: 6075, 6080, 6081, 931: 6074, 936: 6073}, + {591: 1107, 1026: 6135, 1248: 6139}, + {554: 6118, 6119, 591: 6132, 931: 6133}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 6105, 575: 4003, 786: 4002, 3111, 3112, 3110, 6104, 819: 6103, 909: 6102, 914: 6101, 6125}, + {591: 1109, 1026: 1109}, + {591: 1108, 1026: 1108}, // 3205 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 6106}, - {545: 6103}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 4084, 918: 6104}, - {9: 4086, 52: 6105}, - {1111, 1111, 9: 1111, 52: 1111, 544: 1111, 546: 1111, 553: 1111, 1111, 1111, 1111, 564: 1111, 1111, 568: 1111, 570: 1111, 1111, 1111, 574: 1111, 577: 1111, 1111, 1111, 586: 1111, 1111, 1111, 1111, 591: 1111, 594: 1111, 1111, 1111, 599: 1111}, + {2: 1105, 1105, 1105, 1105, 1105, 1105, 1105, 10: 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 53: 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 1105, 545: 1105, 575: 1105}, + {591: 6124}, + {591: 6123}, + {2: 1103, 1103, 1103, 1103, 1103, 1103, 1103, 10: 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 53: 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 545: 1103, 575: 1103}, + {2: 1104, 1104, 1104, 1104, 1104, 1104, 1104, 10: 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 53: 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, 545: 1104, 575: 1104}, // 3210 - {1112, 1112, 9: 1112, 52: 1112, 544: 1112, 546: 1112, 553: 1112, 1112, 1112, 1112, 564: 1112, 1112, 568: 1112, 570: 1112, 1112, 1112, 574: 1112, 577: 1112, 1112, 1112, 581: 3801, 3799, 3800, 3798, 3796, 1112, 1112, 1112, 1112, 591: 1112, 594: 1112, 1112, 1112, 599: 1112, 815: 3797, 3795}, - {1115, 1115, 9: 1115, 52: 1115, 544: 6108, 546: 1115, 553: 1115, 6077, 6078, 6109, 564: 1115, 1115, 568: 1115, 570: 1115, 1115, 1115, 574: 1115, 577: 1115, 1115, 1115, 586: 1115, 1115, 6076, 1115, 591: 6079, 594: 6075, 6080, 6081, 599: 1115, 931: 6074, 936: 6073}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 6113}, - {545: 6110}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 4084, 918: 6111}, + {1112, 1112, 9: 1112, 52: 1112, 544: 6126, 546: 1112, 553: 1112, 1112, 1112, 6127, 564: 1112, 1112, 568: 1112, 570: 1112, 1112, 1112, 574: 1112, 577: 1112, 1112, 1112, 586: 1112, 1112, 1112, 1112, 591: 1112, 594: 1112, 1112, 1112, 599: 1112, 931: 6115, 936: 6114}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 6131}, + {545: 6128}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 4103, 918: 6129}, + {9: 4105, 52: 6130}, // 3215 - {9: 4086, 52: 6112}, - {1113, 1113, 9: 1113, 52: 1113, 544: 1113, 546: 1113, 553: 1113, 1113, 1113, 1113, 564: 1113, 1113, 568: 1113, 570: 1113, 1113, 1113, 574: 1113, 577: 1113, 1113, 1113, 586: 1113, 1113, 1113, 1113, 591: 1113, 594: 1113, 1113, 1113, 599: 1113}, - {1114, 1114, 9: 1114, 52: 1114, 544: 1114, 546: 1114, 553: 1114, 1114, 1114, 1114, 564: 1114, 1114, 568: 1114, 570: 1114, 1114, 1114, 574: 1114, 577: 1114, 1114, 1114, 581: 3801, 3799, 3800, 3798, 3796, 1114, 1114, 1114, 1114, 591: 1114, 594: 1114, 1114, 1114, 599: 1114, 815: 3797, 3795}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 6064, 575: 3984, 657: 6059, 786: 3983, 3092, 3093, 3091, 6063, 819: 6062, 909: 6061, 914: 6060, 6066, 973: 6116}, - {1139, 1139, 9: 1139, 52: 1139, 544: 1139, 546: 1139, 553: 1139, 1139, 1139, 1139, 564: 1139, 1139, 568: 1139, 570: 1139, 1139, 1139, 574: 1139, 577: 1139, 1139, 1139, 586: 1139, 1139, 1139, 1139, 591: 1139, 594: 1139, 1139, 1139, 599: 1139}, + {1110, 1110, 9: 1110, 52: 1110, 544: 1110, 546: 1110, 553: 1110, 1110, 1110, 1110, 564: 1110, 1110, 568: 1110, 570: 1110, 1110, 1110, 574: 1110, 577: 1110, 1110, 1110, 586: 1110, 1110, 1110, 1110, 591: 1110, 594: 1110, 1110, 1110, 599: 1110}, + {1111, 1111, 9: 1111, 52: 1111, 544: 1111, 546: 1111, 553: 1111, 1111, 1111, 1111, 564: 1111, 1111, 568: 1111, 570: 1111, 1111, 1111, 574: 1111, 577: 1111, 1111, 1111, 581: 3820, 3818, 3819, 3817, 3815, 1111, 1111, 1111, 1111, 591: 1111, 594: 1111, 1111, 1111, 599: 1111, 815: 3816, 3814}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 6105, 575: 4003, 786: 4002, 3111, 3112, 3110, 6104, 819: 6103, 909: 6102, 914: 6101, 6138}, + {591: 1107, 1026: 6135, 1248: 6134}, + {591: 6136}, // 3220 - {1146, 1146, 9: 1146, 52: 1146, 544: 1146, 546: 1146, 553: 1146, 556: 1146, 564: 1146, 1146, 568: 1146, 570: 1146, 1146, 1146, 574: 1146, 577: 1146, 1146, 1146, 586: 1146, 1146, 589: 1146}, - {1136, 1136, 3341, 3505, 3305, 3180, 3221, 3343, 3105, 1136, 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 1136, 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 1136, 546: 1136, 551: 6071, 553: 1136, 1136, 1136, 1136, 563: 1136, 1136, 1136, 568: 1136, 570: 1136, 1136, 1136, 574: 1136, 577: 1136, 1136, 1136, 1136, 586: 1136, 1136, 1136, 1136, 1136, 1136, 594: 1136, 1136, 1136, 599: 1136, 606: 1136, 745: 1136, 786: 6070, 3092, 3093, 3091, 1032: 6069, 6122}, - {545: 6119}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 5333, 3092, 3093, 3091, 875: 6120}, - {9: 5334, 52: 6121}, + {591: 1106}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 6105, 575: 4003, 786: 4002, 3111, 3112, 3110, 6104, 819: 6103, 909: 6102, 914: 6101, 6137}, + {1113, 1113, 9: 1113, 52: 1113, 544: 1113, 546: 1113, 553: 1113, 1113, 1113, 1113, 564: 1113, 1113, 568: 1113, 570: 1113, 1113, 1113, 574: 1113, 577: 1113, 1113, 1113, 586: 1113, 1113, 1113, 1113, 591: 1113, 594: 1113, 1113, 1113, 599: 1113, 931: 6115, 936: 6114}, + {1114, 1114, 9: 1114, 52: 1114, 544: 1114, 546: 1114, 553: 1114, 1114, 1114, 1114, 564: 1114, 1114, 568: 1114, 570: 1114, 1114, 1114, 574: 1114, 577: 1114, 1114, 1114, 586: 1114, 1114, 1114, 1114, 591: 1114, 594: 1114, 1114, 1114, 599: 1114, 931: 6115, 936: 6114}, + {591: 6140}, // 3225 - {1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 551: 1137, 553: 1137, 1137, 1137, 1137, 562: 1137, 1137, 1137, 1137, 568: 1137, 570: 1137, 1137, 1137, 574: 1137, 577: 1137, 1137, 1137, 1137, 586: 1137, 1137, 1137, 1137, 1137, 1137, 594: 1137, 1137, 1137, 599: 1137, 606: 1137, 622: 1137, 641: 1137, 670: 1137, 724: 1137, 737: 1137, 745: 1137}, - {2156, 2156, 9: 2156, 52: 2156, 544: 2156, 546: 2156, 553: 2156, 2156, 2156, 2156, 563: 2156, 2156, 2156, 568: 2156, 570: 2156, 2156, 2156, 574: 2156, 577: 2156, 2156, 2156, 2156, 586: 2156, 2156, 2156, 2156, 2156, 2156, 594: 2156, 2156, 2156, 599: 2156, 606: 2156, 745: 4708, 1012: 6123, 1335: 6124}, - {2155, 2155, 9: 2155, 52: 2155, 544: 2155, 546: 2155, 553: 2155, 2155, 2155, 2155, 563: 2155, 2155, 2155, 568: 2155, 570: 2155, 2155, 2155, 574: 2155, 577: 2155, 2155, 2155, 2155, 586: 2155, 2155, 2155, 2155, 2155, 2155, 594: 2155, 2155, 2155, 599: 2155, 606: 2155}, - {1117, 1117, 9: 1117, 52: 1117, 544: 1117, 546: 1117, 553: 1117, 1117, 1117, 1117, 563: 6127, 1117, 1117, 568: 1117, 570: 1117, 1117, 1117, 574: 1117, 577: 1117, 1117, 1117, 6128, 586: 1117, 1117, 1117, 1117, 6126, 1117, 594: 1117, 1117, 1117, 599: 1117, 606: 1117, 1066: 6130, 6129, 1206: 6131, 6125}, - {1232, 1232, 9: 1232, 52: 1232, 544: 1232, 546: 1232, 553: 1232, 1232, 1232, 1232, 564: 1232, 1232, 568: 1232, 570: 1232, 1232, 1232, 574: 1232, 577: 1232, 1232, 1232, 586: 1232, 1232, 1232, 1232, 591: 1232, 594: 1232, 1232, 1232, 599: 1232, 606: 6146, 1500: 6147}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 6105, 575: 4003, 786: 4002, 3111, 3112, 3110, 6104, 819: 6103, 909: 6102, 914: 6101, 6141}, + {544: 6142, 554: 6118, 6119, 6143, 588: 6117, 591: 6120, 594: 6116, 6121, 6122, 931: 6115, 936: 6114}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 6147}, + {545: 6144}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 4103, 918: 6145}, // 3230 - {669: 4974, 724: 4975, 940: 6145}, - {669: 4974, 724: 4975, 940: 6144}, - {669: 4974, 724: 4975, 940: 6143}, - {545: 1129, 572: 6133, 1389: 6134}, - {1119, 1119, 9: 1119, 52: 1119, 544: 1119, 546: 1119, 553: 1119, 1119, 1119, 1119, 563: 1119, 1119, 1119, 568: 1119, 570: 1119, 1119, 1119, 574: 1119, 577: 1119, 1119, 1119, 1119, 586: 1119, 1119, 1119, 1119, 1119, 1119, 594: 1119, 1119, 1119, 599: 1119, 606: 1119}, + {9: 4105, 52: 6146}, + {1115, 1115, 9: 1115, 52: 1115, 544: 1115, 546: 1115, 553: 1115, 1115, 1115, 1115, 564: 1115, 1115, 568: 1115, 570: 1115, 1115, 1115, 574: 1115, 577: 1115, 1115, 1115, 586: 1115, 1115, 1115, 1115, 591: 1115, 594: 1115, 1115, 1115, 599: 1115}, + {1116, 1116, 9: 1116, 52: 1116, 544: 1116, 546: 1116, 553: 1116, 1116, 1116, 1116, 564: 1116, 1116, 568: 1116, 570: 1116, 1116, 1116, 574: 1116, 577: 1116, 1116, 1116, 581: 3820, 3818, 3819, 3817, 3815, 1116, 1116, 1116, 1116, 591: 1116, 594: 1116, 1116, 1116, 599: 1116, 815: 3816, 3814}, + {1119, 1119, 9: 1119, 52: 1119, 544: 6149, 546: 1119, 553: 1119, 6118, 6119, 6150, 564: 1119, 1119, 568: 1119, 570: 1119, 1119, 1119, 574: 1119, 577: 1119, 1119, 1119, 586: 1119, 1119, 6117, 1119, 591: 6120, 594: 6116, 6121, 6122, 599: 1119, 931: 6115, 936: 6114}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 6154}, // 3235 - {1116, 1116, 9: 1116, 52: 1116, 544: 1116, 546: 1116, 553: 1116, 1116, 1116, 1116, 563: 6127, 1116, 1116, 568: 1116, 570: 1116, 1116, 1116, 574: 1116, 577: 1116, 1116, 1116, 6128, 586: 1116, 1116, 1116, 1116, 6126, 1116, 594: 1116, 1116, 1116, 599: 1116, 606: 1116, 1066: 6132, 6129}, - {1118, 1118, 9: 1118, 52: 1118, 544: 1118, 546: 1118, 553: 1118, 1118, 1118, 1118, 563: 1118, 1118, 1118, 568: 1118, 570: 1118, 1118, 1118, 574: 1118, 577: 1118, 1118, 1118, 1118, 586: 1118, 1118, 1118, 1118, 1118, 1118, 594: 1118, 1118, 1118, 599: 1118, 606: 1118}, - {579: 6139, 586: 6140, 591: 6138}, - {545: 6135}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 1124, 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 1124, 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 716: 5622, 786: 5621, 3092, 3093, 3091, 978: 6136}, + {545: 6151}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 4103, 918: 6152}, + {9: 4105, 52: 6153}, + {1117, 1117, 9: 1117, 52: 1117, 544: 1117, 546: 1117, 553: 1117, 1117, 1117, 1117, 564: 1117, 1117, 568: 1117, 570: 1117, 1117, 1117, 574: 1117, 577: 1117, 1117, 1117, 586: 1117, 1117, 1117, 1117, 591: 1117, 594: 1117, 1117, 1117, 599: 1117}, + {1118, 1118, 9: 1118, 52: 1118, 544: 1118, 546: 1118, 553: 1118, 1118, 1118, 1118, 564: 1118, 1118, 568: 1118, 570: 1118, 1118, 1118, 574: 1118, 577: 1118, 1118, 1118, 581: 3820, 3818, 3819, 3817, 3815, 1118, 1118, 1118, 1118, 591: 1118, 594: 1118, 1118, 1118, 599: 1118, 815: 3816, 3814}, // 3240 - {9: 5624, 52: 6137}, - {1125, 1125, 9: 1125, 52: 1125, 544: 1125, 546: 1125, 553: 1125, 1125, 1125, 1125, 563: 1125, 1125, 1125, 568: 1125, 570: 1125, 1125, 1125, 574: 1125, 577: 1125, 1125, 1125, 1125, 586: 1125, 1125, 1125, 1125, 1125, 1125, 594: 1125, 1125, 1125, 599: 1125, 606: 1125}, - {545: 1128}, - {737: 6142}, - {737: 6141}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 6105, 575: 4003, 657: 6100, 786: 4002, 3111, 3112, 3110, 6104, 819: 6103, 909: 6102, 914: 6101, 6107, 973: 6157}, + {1143, 1143, 9: 1143, 52: 1143, 544: 1143, 546: 1143, 553: 1143, 1143, 1143, 1143, 564: 1143, 1143, 568: 1143, 570: 1143, 1143, 1143, 574: 1143, 577: 1143, 1143, 1143, 586: 1143, 1143, 1143, 1143, 591: 1143, 594: 1143, 1143, 1143, 599: 1143}, + {1150, 1150, 9: 1150, 52: 1150, 544: 1150, 546: 1150, 553: 1150, 556: 1150, 564: 1150, 1150, 568: 1150, 570: 1150, 1150, 1150, 574: 1150, 577: 1150, 1150, 1150, 586: 1150, 1150, 589: 1150}, + {1140, 1140, 3360, 3524, 3324, 3199, 3240, 3362, 3124, 1140, 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 1140, 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 1140, 546: 1140, 551: 6112, 553: 1140, 1140, 1140, 1140, 563: 1140, 1140, 1140, 568: 1140, 570: 1140, 1140, 1140, 574: 1140, 577: 1140, 1140, 1140, 1140, 586: 1140, 1140, 1140, 1140, 1140, 1140, 594: 1140, 1140, 1140, 599: 1140, 606: 1140, 745: 1140, 786: 6111, 3111, 3112, 3110, 1032: 6110, 6163}, + {545: 6160}, // 3245 - {545: 1126}, - {545: 1127}, - {545: 1130, 572: 1130}, - {545: 1131, 572: 1131}, - {545: 1132, 572: 1132}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5359, 3111, 3112, 3110, 875: 6161}, + {9: 5360, 52: 6162}, + {1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 551: 1141, 553: 1141, 1141, 1141, 1141, 562: 1141, 1141, 1141, 1141, 568: 1141, 570: 1141, 1141, 1141, 574: 1141, 577: 1141, 1141, 1141, 1141, 586: 1141, 1141, 1141, 1141, 1141, 1141, 594: 1141, 1141, 1141, 599: 1141, 606: 1141, 622: 1141, 642: 1141, 662: 1141, 724: 1141, 737: 1141, 745: 1141}, + {2162, 2162, 9: 2162, 52: 2162, 544: 2162, 546: 2162, 553: 2162, 2162, 2162, 2162, 563: 2162, 2162, 2162, 568: 2162, 570: 2162, 2162, 2162, 574: 2162, 577: 2162, 2162, 2162, 2162, 586: 2162, 2162, 2162, 2162, 2162, 2162, 594: 2162, 2162, 2162, 599: 2162, 606: 2162, 745: 4727, 1012: 6164, 1339: 6165}, + {2161, 2161, 9: 2161, 52: 2161, 544: 2161, 546: 2161, 553: 2161, 2161, 2161, 2161, 563: 2161, 2161, 2161, 568: 2161, 570: 2161, 2161, 2161, 574: 2161, 577: 2161, 2161, 2161, 2161, 586: 2161, 2161, 2161, 2161, 2161, 2161, 594: 2161, 2161, 2161, 599: 2161, 606: 2161}, // 3250 - {117: 6151, 383: 6150, 457: 6149, 545: 1229, 1499: 6148}, - {1141, 1141, 9: 1141, 52: 1141, 544: 1141, 546: 1141, 553: 1141, 1141, 1141, 1141, 564: 1141, 1141, 568: 1141, 570: 1141, 1141, 1141, 574: 1141, 577: 1141, 1141, 1141, 586: 1141, 1141, 1141, 1141, 591: 1141, 594: 1141, 1141, 1141, 599: 1141}, - {545: 6152}, - {545: 1228}, - {545: 1227}, + {1121, 1121, 9: 1121, 52: 1121, 544: 1121, 546: 1121, 553: 1121, 1121, 1121, 1121, 563: 6168, 1121, 1121, 568: 1121, 570: 1121, 1121, 1121, 574: 1121, 577: 1121, 1121, 1121, 6169, 586: 1121, 1121, 1121, 1121, 6167, 1121, 594: 1121, 1121, 1121, 599: 1121, 606: 1121, 1067: 6171, 6170, 1208: 6172, 6166}, + {1236, 1236, 9: 1236, 52: 1236, 544: 1236, 546: 1236, 553: 1236, 1236, 1236, 1236, 564: 1236, 1236, 568: 1236, 570: 1236, 1236, 1236, 574: 1236, 577: 1236, 1236, 1236, 586: 1236, 1236, 1236, 1236, 591: 1236, 594: 1236, 1236, 1236, 599: 1236, 606: 6187, 1505: 6188}, + {658: 4993, 724: 4994, 940: 6186}, + {658: 4993, 724: 4994, 940: 6185}, + {658: 4993, 724: 4994, 940: 6184}, // 3255 - {545: 1226}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 6154, 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 6153}, - {52: 1225, 433: 6162, 581: 3801, 3799, 3800, 3798, 3796, 602: 6161, 815: 3797, 3795, 1501: 6160}, - {1222, 1222, 9: 1222, 52: 1222, 281: 6156, 544: 1222, 546: 1222, 553: 1222, 1222, 1222, 1222, 564: 1222, 1222, 568: 1222, 570: 1222, 1222, 1222, 574: 1222, 577: 1222, 1222, 1222, 586: 1222, 1222, 1222, 1222, 591: 1222, 594: 1222, 1222, 1222, 599: 1222, 1269: 6155}, - {1230, 1230, 9: 1230, 52: 1230, 544: 1230, 546: 1230, 553: 1230, 1230, 1230, 1230, 564: 1230, 1230, 568: 1230, 570: 1230, 1230, 1230, 574: 1230, 577: 1230, 1230, 1230, 586: 1230, 1230, 1230, 1230, 591: 1230, 594: 1230, 1230, 1230, 599: 1230}, + {545: 1133, 572: 6174, 1394: 6175}, + {1123, 1123, 9: 1123, 52: 1123, 544: 1123, 546: 1123, 553: 1123, 1123, 1123, 1123, 563: 1123, 1123, 1123, 568: 1123, 570: 1123, 1123, 1123, 574: 1123, 577: 1123, 1123, 1123, 1123, 586: 1123, 1123, 1123, 1123, 1123, 1123, 594: 1123, 1123, 1123, 599: 1123, 606: 1123}, + {1120, 1120, 9: 1120, 52: 1120, 544: 1120, 546: 1120, 553: 1120, 1120, 1120, 1120, 563: 6168, 1120, 1120, 568: 1120, 570: 1120, 1120, 1120, 574: 1120, 577: 1120, 1120, 1120, 6169, 586: 1120, 1120, 1120, 1120, 6167, 1120, 594: 1120, 1120, 1120, 599: 1120, 606: 1120, 1067: 6173, 6170}, + {1122, 1122, 9: 1122, 52: 1122, 544: 1122, 546: 1122, 553: 1122, 1122, 1122, 1122, 563: 1122, 1122, 1122, 568: 1122, 570: 1122, 1122, 1122, 574: 1122, 577: 1122, 1122, 1122, 1122, 586: 1122, 1122, 1122, 1122, 1122, 1122, 594: 1122, 1122, 1122, 599: 1122, 606: 1122}, + {579: 6180, 586: 6181, 591: 6179}, // 3260 - {545: 6157}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 6158}, - {52: 6159, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {1221, 1221, 9: 1221, 52: 1221, 544: 1221, 546: 1221, 553: 1221, 1221, 1221, 1221, 564: 1221, 1221, 568: 1221, 570: 1221, 1221, 1221, 574: 1221, 577: 1221, 1221, 1221, 586: 1221, 1221, 1221, 1221, 591: 1221, 594: 1221, 1221, 1221, 599: 1221}, - {52: 6163}, + {545: 6176}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 1128, 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 1128, 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 710: 5650, 786: 5649, 3111, 3112, 3110, 978: 6177}, + {9: 5652, 52: 6178}, + {1129, 1129, 9: 1129, 52: 1129, 544: 1129, 546: 1129, 553: 1129, 1129, 1129, 1129, 563: 1129, 1129, 1129, 568: 1129, 570: 1129, 1129, 1129, 574: 1129, 577: 1129, 1129, 1129, 1129, 586: 1129, 1129, 1129, 1129, 1129, 1129, 594: 1129, 1129, 1129, 599: 1129, 606: 1129}, + {545: 1132}, // 3265 - {52: 1224}, - {52: 1223}, - {1222, 1222, 9: 1222, 52: 1222, 281: 6156, 544: 1222, 546: 1222, 553: 1222, 1222, 1222, 1222, 564: 1222, 1222, 568: 1222, 570: 1222, 1222, 1222, 574: 1222, 577: 1222, 1222, 1222, 586: 1222, 1222, 1222, 1222, 591: 1222, 594: 1222, 1222, 1222, 599: 1222, 1269: 6164}, - {1231, 1231, 9: 1231, 52: 1231, 544: 1231, 546: 1231, 553: 1231, 1231, 1231, 1231, 564: 1231, 1231, 568: 1231, 570: 1231, 1231, 1231, 574: 1231, 577: 1231, 1231, 1231, 586: 1231, 1231, 1231, 1231, 591: 1231, 594: 1231, 1231, 1231, 599: 1231}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 6064, 575: 3984, 786: 3983, 3092, 3093, 3091, 6063, 819: 6062, 909: 6061, 914: 6060, 6166}, + {737: 6183}, + {737: 6182}, + {545: 1130}, + {545: 1131}, + {545: 1134, 572: 1134}, // 3270 - {554: 6077, 6078, 588: 6076, 591: 6079, 594: 6075, 6080, 6081, 599: 6167, 931: 6074, 936: 6073}, - {1144, 1144, 9: 1144, 52: 1144, 544: 1144, 546: 1144, 553: 1144, 556: 1144, 564: 1144, 1144, 568: 1144, 570: 1144, 1144, 1144, 574: 1144, 577: 1144, 1144, 1144, 586: 1144, 1144, 589: 1144}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 6169, 1013: 6170, 1042: 6171}, - {569: 6180, 732: 6181, 907: 6179}, - {2670, 2670, 9: 2670, 556: 2670, 570: 2670, 578: 2670, 2670}, + {545: 1135, 572: 1135}, + {545: 1136, 572: 1136}, + {120: 6192, 384: 6191, 457: 6190, 545: 1233, 1504: 6189}, + {1145, 1145, 9: 1145, 52: 1145, 544: 1145, 546: 1145, 553: 1145, 1145, 1145, 1145, 564: 1145, 1145, 568: 1145, 570: 1145, 1145, 1145, 574: 1145, 577: 1145, 1145, 1145, 586: 1145, 1145, 1145, 1145, 591: 1145, 594: 1145, 1145, 1145, 599: 1145}, + {545: 6193}, // 3275 - {432, 432, 9: 6172, 556: 432, 570: 432, 578: 4729, 432, 904: 4730, 6173}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 6169, 1013: 6178}, - {1519, 1519, 556: 1519, 570: 1519, 579: 3913, 857: 3967, 926: 6174}, - {1098, 1098, 556: 1098, 570: 6175, 1216: 6176}, - {573: 3078, 656: 3924, 814: 3922, 829: 3923, 1001: 6177}, + {545: 1232}, + {545: 1231}, + {545: 1230}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 6195, 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 6194}, + {52: 1229, 433: 6203, 581: 3820, 3818, 3819, 3817, 3815, 602: 6202, 815: 3816, 3814, 1506: 6201}, // 3280 - {436, 436, 556: 436}, - {1097, 1097, 556: 1097}, - {2669, 2669, 9: 2669, 556: 2669, 570: 2669, 578: 2669, 2669}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3955, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3951, 908: 6182}, - {2: 991, 991, 991, 991, 991, 991, 991, 10: 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 53: 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 547: 991, 991, 991, 991, 554: 991, 991, 557: 991, 991, 991, 561: 991, 991, 566: 991, 991, 573: 991, 593: 991, 600: 991, 991, 633: 991, 640: 991, 642: 991, 991, 991, 991, 650: 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 671: 991, 673: 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 991, 725: 991}, + {1226, 1226, 9: 1226, 52: 1226, 282: 6197, 544: 1226, 546: 1226, 553: 1226, 1226, 1226, 1226, 564: 1226, 1226, 568: 1226, 570: 1226, 1226, 1226, 574: 1226, 577: 1226, 1226, 1226, 586: 1226, 1226, 1226, 1226, 591: 1226, 594: 1226, 1226, 1226, 599: 1226, 1271: 6196}, + {1234, 1234, 9: 1234, 52: 1234, 544: 1234, 546: 1234, 553: 1234, 1234, 1234, 1234, 564: 1234, 1234, 568: 1234, 570: 1234, 1234, 1234, 574: 1234, 577: 1234, 1234, 1234, 586: 1234, 1234, 1234, 1234, 591: 1234, 594: 1234, 1234, 1234, 599: 1234}, + {545: 6198}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 6199}, + {52: 6200, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, // 3285 - {2: 990, 990, 990, 990, 990, 990, 990, 10: 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 53: 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 547: 990, 990, 990, 990, 554: 990, 990, 557: 990, 990, 990, 561: 990, 990, 566: 990, 990, 573: 990, 593: 990, 600: 990, 990, 633: 990, 640: 990, 642: 990, 990, 990, 990, 650: 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 671: 990, 673: 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 990, 725: 990}, - {2671, 2671, 9: 2671, 556: 2671, 570: 2671, 578: 2671, 2671}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 6169, 1013: 6170, 1042: 6184}, - {432, 432, 9: 6172, 556: 432, 578: 4729, 904: 4730, 6185}, - {435, 435, 556: 435}, + {1225, 1225, 9: 1225, 52: 1225, 544: 1225, 546: 1225, 553: 1225, 1225, 1225, 1225, 564: 1225, 1225, 568: 1225, 570: 1225, 1225, 1225, 574: 1225, 577: 1225, 1225, 1225, 586: 1225, 1225, 1225, 1225, 591: 1225, 594: 1225, 1225, 1225, 599: 1225}, + {52: 6204}, + {52: 1228}, + {52: 1227}, + {1226, 1226, 9: 1226, 52: 1226, 282: 6197, 544: 1226, 546: 1226, 553: 1226, 1226, 1226, 1226, 564: 1226, 1226, 568: 1226, 570: 1226, 1226, 1226, 574: 1226, 577: 1226, 1226, 1226, 586: 1226, 1226, 1226, 1226, 591: 1226, 594: 1226, 1226, 1226, 599: 1226, 1271: 6205}, // 3290 - {2: 582, 582, 582, 582, 582, 582, 582, 10: 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, 53: 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 582, 582, 582, 582, 582, 582, 582, 575: 582}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 6188}, - {581, 581}, - {22: 6199, 148: 6192, 164: 5768, 168: 777, 251: 6191, 257: 6202, 268: 6200, 285: 6193, 299: 6197, 320: 6201, 324: 6194, 600: 6198, 622: 5767, 1102: 6196, 1379: 6190, 1405: 6195}, - {787, 787}, + {1235, 1235, 9: 1235, 52: 1235, 544: 1235, 546: 1235, 553: 1235, 1235, 1235, 1235, 564: 1235, 1235, 568: 1235, 570: 1235, 1235, 1235, 574: 1235, 577: 1235, 1235, 1235, 586: 1235, 1235, 1235, 1235, 591: 1235, 594: 1235, 1235, 1235, 599: 1235}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 6105, 575: 4003, 786: 4002, 3111, 3112, 3110, 6104, 819: 6103, 909: 6102, 914: 6101, 6207}, + {554: 6118, 6119, 588: 6117, 591: 6120, 594: 6116, 6121, 6122, 599: 6208, 931: 6115, 936: 6114}, + {1148, 1148, 9: 1148, 52: 1148, 544: 1148, 546: 1148, 553: 1148, 556: 1148, 564: 1148, 1148, 568: 1148, 570: 1148, 1148, 1148, 574: 1148, 577: 1148, 1148, 1148, 586: 1148, 1148, 589: 1148}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 6210, 1013: 6211, 1042: 6212}, // 3295 - {784, 784}, - {783, 783}, - {277: 6209}, - {781, 781}, - {168: 6208}, + {569: 6221, 732: 6222, 907: 6220}, + {2685, 2685, 9: 2685, 556: 2685, 570: 2685, 578: 2685, 2685}, + {436, 436, 9: 6213, 556: 436, 570: 436, 578: 4748, 436, 904: 4749, 6214}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 6210, 1013: 6219}, + {1523, 1523, 556: 1523, 570: 1523, 579: 3932, 857: 3986, 926: 6215}, // 3300 - {768, 768, 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 546: 768, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 3985, 898: 4867, 1308: 6203}, - {778, 778}, - {168: 776}, - {168: 775}, - {168: 774}, + {1102, 1102, 556: 1102, 570: 6216, 1218: 6217}, + {573: 3097, 656: 3943, 814: 3941, 829: 3942, 1001: 6218}, + {440, 440, 556: 440}, + {1101, 1101, 556: 1101}, + {2684, 2684, 9: 2684, 556: 2684, 570: 2684, 578: 2684, 2684}, // 3305 - {168: 773}, - {168: 772}, - {766, 766, 546: 6205, 1527: 6204}, - {779, 779}, - {743: 6206}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3974, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3970, 908: 6223}, + {2: 995, 995, 995, 995, 995, 995, 995, 10: 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 53: 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 547: 995, 995, 995, 995, 554: 995, 995, 557: 995, 995, 995, 561: 995, 995, 566: 995, 995, 573: 995, 593: 995, 600: 995, 995, 633: 995, 640: 995, 995, 643: 995, 995, 995, 650: 995, 995, 995, 995, 995, 995, 995, 995, 659: 995, 995, 995, 663: 995, 995, 995, 995, 995, 995, 995, 995, 995, 673: 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 995, 711: 995, 995, 995, 995, 995, 995, 725: 995}, + {2: 994, 994, 994, 994, 994, 994, 994, 10: 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 53: 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 547: 994, 994, 994, 994, 554: 994, 994, 557: 994, 994, 994, 561: 994, 994, 566: 994, 994, 573: 994, 593: 994, 600: 994, 994, 633: 994, 640: 994, 994, 643: 994, 994, 994, 650: 994, 994, 994, 994, 994, 994, 994, 994, 659: 994, 994, 994, 663: 994, 994, 994, 994, 994, 994, 994, 994, 994, 673: 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 994, 711: 994, 994, 994, 994, 994, 994, 725: 994}, + {2686, 2686, 9: 2686, 556: 2686, 570: 2686, 578: 2686, 2686}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 6210, 1013: 6211, 1042: 6225}, // 3310 - {577: 6207}, - {765, 765}, - {780, 780}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6210, 3092, 3093, 3091, 1085: 6211}, - {786, 786, 9: 786}, + {436, 436, 9: 6213, 556: 436, 578: 4748, 904: 4749, 6226}, + {439, 439, 556: 439}, + {2: 586, 586, 586, 586, 586, 586, 586, 10: 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, 53: 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, 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, 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, 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, 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, 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, 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, 575: 586}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 6229}, + {585, 585}, // 3315 - {782, 782, 9: 6212}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6213, 3092, 3093, 3091}, - {785, 785, 9: 785}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 6333, 3350, 3247, 3098, 3475, 3126, 6334, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 6332, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 6335}, - {622: 6318, 724: 6319}, + {22: 6240, 150: 6233, 166: 5809, 169: 781, 251: 6232, 257: 6243, 269: 6241, 286: 6234, 300: 6238, 321: 6242, 325: 6235, 600: 6239, 622: 5808, 1104: 6237, 1383: 6231, 1410: 6236}, + {791, 791}, + {788, 788}, + {787, 787}, + {278: 6250}, // 3320 - {724: 6315}, - {622: 6310, 724: 6309}, - {622: 6307}, - {263: 6304}, - {263: 6301}, + {785, 785}, + {169: 6249}, + {772, 772, 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 546: 772, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 4004, 898: 4886, 1311: 6244}, + {782, 782}, + {169: 780}, // 3325 - {263: 6295}, - {189: 6292, 283: 6294, 357: 6293, 405: 6290, 428: 6291}, - {264: 6287, 267: 6286}, - {622: 6245}, - {189: 6239, 217: 6241, 233: 798, 256: 6243, 328: 6242, 1487: 6240}, + {169: 779}, + {169: 778}, + {169: 777}, + {169: 776}, + {770, 770, 546: 6246, 1534: 6245}, // 3330 - {189: 6238}, - {189: 6237}, - {289: 6232}, - {289: 6230}, - {195: 6231}, + {783, 783}, + {743: 6247}, + {577: 6248}, + {769, 769}, + {784, 784}, // 3335 - {906, 906}, - {195: 6233}, - {447: 6235, 716: 6234, 1340: 6236}, - {939, 939}, - {938, 938}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6251, 3111, 3112, 3110, 1086: 6252}, + {790, 790, 9: 790}, + {786, 786, 9: 6253}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6254, 3111, 3112, 3110}, + {789, 789, 9: 789}, // 3340 - {908, 908}, - {913, 913}, - {914, 914}, - {915, 915}, - {233: 6244}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 6374, 3649, 3369, 3266, 3117, 3494, 3145, 6375, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 6373, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 6376}, + {622: 6359, 724: 6360}, + {724: 6356}, + {622: 6351, 724: 6350}, + {622: 6348}, // 3345 - {233: 797}, - {233: 796}, - {233: 795}, - {909, 909}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 6246}, + {264: 6345}, + {264: 6342}, + {264: 6336}, + {190: 6333, 284: 6335, 359: 6334, 406: 6331, 428: 6332}, + {265: 6328, 268: 6327}, // 3350 - {754: 6247, 1050: 6248}, - {217: 6251, 228: 6250, 622: 2373, 1081: 6249}, - {916, 916}, - {622: 6253}, - {164: 2372, 622: 2372}, + {622: 6286}, + {94: 6282, 190: 6280, 233: 802, 256: 6284, 330: 6283, 1492: 6281}, + {190: 6279}, + {190: 6278}, + {290: 6273}, // 3355 - {228: 6252}, - {164: 2371, 622: 2371}, - {2: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 10: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 53: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 575: 2151, 593: 5423, 899: 6254}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 6255}, - {631, 631, 6: 631, 631, 631, 15: 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, 544: 631, 6259, 631, 549: 631, 551: 631, 631, 631, 560: 631, 562: 631, 631, 566: 631, 631, 580: 631, 597: 6258, 622: 631, 670: 631, 723: 631, 631, 1400: 6257, 1496: 6256}, + {290: 6271}, + {196: 6272}, + {910, 910}, + {196: 6274}, + {447: 6276, 710: 6275, 1344: 6277}, // 3360 - {588, 588, 6: 4793, 4795, 592, 15: 4812, 2486, 4810, 4749, 4814, 4801, 4830, 4794, 4797, 4796, 4799, 4800, 4802, 4809, 592, 4820, 4821, 4831, 4807, 4808, 4813, 4815, 4827, 4826, 4835, 4828, 4825, 4818, 4823, 4824, 4817, 4819, 4822, 4811, 4832, 4833, 544: 588, 588, 588, 549: 4792, 551: 588, 2486, 4829, 560: 588, 562: 588, 588, 566: 588, 2486, 580: 5577, 622: 588, 670: 588, 723: 2486, 4798, 880: 4803, 906: 4805, 927: 4804, 948: 4806, 955: 4816, 960: 4834, 1035: 6274, 1158: 6273}, - {2489, 2489, 544: 6267, 1233: 6266}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 6265}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 597: 6260, 669: 2727, 716: 2727, 2727, 719: 2727, 5156, 724: 2727, 760: 2727, 2727, 786: 4083, 3092, 3093, 3091, 836: 5020, 945: 5409, 971: 5547, 1019: 5548, 1101: 5549, 1306: 6261}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 6263}, + {943, 943}, + {942, 942}, + {912, 912}, + {917, 917}, + {918, 918}, // 3365 - {9: 5551, 52: 6262}, - {630, 630, 6: 630, 630, 630, 15: 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, 544: 630, 630, 630, 549: 630, 551: 630, 630, 630, 560: 630, 562: 630, 630, 566: 630, 630, 580: 630, 622: 630, 670: 630, 723: 630, 630}, - {52: 6264}, - {2407, 2407, 544: 2407}, - {2408, 2408, 544: 2408}, + {919, 919}, + {233: 6285}, + {233: 801}, + {233: 800}, + {233: 799}, // 3370 - {2490, 2490}, - {94: 6268}, - {436: 6270, 818: 6269}, - {602: 6272}, - {602: 6271}, + {913, 913}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 6287}, + {754: 6288, 1050: 6289}, + {94: 6292, 228: 6291, 622: 2379, 1082: 6290}, + {920, 920}, // 3375 - {2487, 2487}, - {2488, 2488}, - {2484, 2484, 544: 2484, 2484, 2484, 551: 2484, 560: 6276, 562: 2484, 2484, 566: 2484, 622: 2484, 670: 2484, 1250: 6275}, - {587, 587, 6: 4793, 4795, 592, 5579, 15: 4812, 2486, 4810, 4749, 4814, 4801, 4830, 4794, 4797, 4796, 4799, 4800, 4802, 4809, 592, 4820, 4821, 4831, 4807, 4808, 4813, 4815, 4827, 4826, 4835, 4828, 4825, 4818, 4823, 4824, 4817, 4819, 4822, 4811, 4832, 4833, 544: 587, 587, 587, 549: 4792, 551: 587, 2486, 4829, 560: 587, 562: 587, 587, 566: 587, 2486, 580: 5577, 622: 587, 670: 587, 723: 2486, 4798, 880: 4803, 906: 4805, 927: 4804, 948: 4806, 955: 4816, 960: 5578}, - {2422, 2422, 544: 2422, 2422, 2422, 551: 2422, 562: 2422, 5869, 566: 5870, 622: 2422, 670: 2422, 1180: 6277}, + {622: 6294}, + {166: 2378, 622: 2378}, + {228: 6293}, + {166: 2377, 622: 2377}, + {2: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 10: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 53: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 575: 2157, 593: 5449, 899: 6295}, // 3380 - {737: 5635}, - {2419, 2419, 544: 2419, 2419, 2419, 551: 6279, 562: 2419, 622: 2419, 670: 2419, 1336: 6278}, - {2417, 2417, 544: 2417, 2949, 2948, 562: 2947, 622: 2946, 670: 2942, 790: 6284, 821: 6282, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 3902, 6283, 6281, 1358: 6280}, - {2418, 2418, 544: 2418, 2418, 2418, 562: 2418, 622: 2418, 670: 2418}, - {2489, 2489, 544: 6267, 1233: 6285}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 6296}, + {635, 635, 6: 635, 635, 635, 15: 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, 544: 635, 6300, 635, 549: 635, 551: 635, 635, 635, 560: 635, 562: 635, 635, 566: 635, 635, 580: 635, 597: 6299, 622: 635, 662: 635, 723: 635, 635, 1405: 6298, 1501: 6297}, + {592, 592, 6: 4812, 4814, 596, 15: 4831, 2499, 4829, 4768, 4833, 4820, 4849, 4813, 4816, 4815, 4818, 4819, 4821, 4828, 596, 4839, 4840, 4850, 4826, 4827, 4832, 4834, 4846, 4845, 4854, 4847, 4844, 4837, 4842, 4843, 4836, 4838, 4841, 4830, 4851, 4852, 544: 592, 592, 592, 549: 4811, 551: 592, 2499, 4848, 560: 592, 562: 592, 592, 566: 592, 2499, 580: 5605, 622: 592, 662: 592, 723: 2499, 4817, 880: 4822, 906: 4824, 927: 4823, 948: 4825, 955: 4835, 960: 4853, 1035: 6315, 1160: 6314}, + {2502, 2502, 544: 6308, 1235: 6307}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 6306}, // 3385 - {2416, 2416, 544: 2416}, - {2415, 2415, 544: 2415, 553: 1030, 564: 1030, 1030}, - {2414, 2414, 544: 2414}, - {2413, 2413, 544: 2413, 553: 1029, 564: 1029, 1029, 568: 3915, 570: 3914, 579: 3913, 857: 3916, 3917}, - {2491, 2491}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 597: 6301, 658: 2742, 710: 2742, 717: 2742, 2742, 5175, 724: 2742, 760: 2742, 2742, 786: 4102, 3111, 3112, 3110, 836: 5039, 945: 5435, 971: 5575, 1019: 5576, 1103: 5577, 1309: 6302}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 6304}, + {9: 5579, 52: 6303}, + {634, 634, 6: 634, 634, 634, 15: 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, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, 544: 634, 634, 634, 549: 634, 551: 634, 634, 634, 560: 634, 562: 634, 634, 566: 634, 634, 580: 634, 622: 634, 662: 634, 723: 634, 634}, + {52: 6305}, // 3390 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6210, 3092, 3093, 3091, 1085: 6289}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6210, 3092, 3093, 3091, 1085: 6288}, - {918, 918, 9: 6212}, - {919, 919, 9: 6212}, - {921, 921}, + {2413, 2413, 544: 2413}, + {2414, 2414, 544: 2414}, + {2503, 2503}, + {96: 6309}, + {436: 6311, 818: 6310}, // 3395 - {920, 920}, - {912, 912}, - {911, 911}, - {910, 910}, - {231: 6296}, + {602: 6313}, + {602: 6312}, + {2500, 2500}, + {2501, 2501}, + {2497, 2497, 544: 2497, 2497, 2497, 551: 2497, 560: 6317, 562: 2497, 2497, 566: 2497, 622: 2497, 662: 2497, 1252: 6316}, // 3400 - {573: 3078, 814: 4605, 846: 6298, 1022: 6297}, - {925, 925, 9: 6299}, - {898, 898, 9: 898}, - {573: 3078, 814: 4605, 846: 6300}, - {897, 897, 9: 897}, + {591, 591, 6: 4812, 4814, 596, 5607, 15: 4831, 2499, 4829, 4768, 4833, 4820, 4849, 4813, 4816, 4815, 4818, 4819, 4821, 4828, 596, 4839, 4840, 4850, 4826, 4827, 4832, 4834, 4846, 4845, 4854, 4847, 4844, 4837, 4842, 4843, 4836, 4838, 4841, 4830, 4851, 4852, 544: 591, 591, 591, 549: 4811, 551: 591, 2499, 4848, 560: 591, 562: 591, 591, 566: 591, 2499, 580: 5605, 622: 591, 662: 591, 723: 2499, 4817, 880: 4822, 906: 4824, 927: 4823, 948: 4825, 955: 4835, 960: 5606}, + {2428, 2428, 544: 2428, 2428, 2428, 551: 2428, 562: 2428, 5910, 566: 5911, 622: 2428, 662: 2428, 1182: 6318}, + {737: 5663}, + {2425, 2425, 544: 2425, 2425, 2425, 551: 6320, 562: 2425, 622: 2425, 662: 2425, 1340: 6319}, + {2423, 2423, 544: 2423, 2968, 2967, 562: 2966, 622: 2965, 662: 2961, 790: 6325, 821: 6323, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 3921, 6324, 6322, 1362: 6321}, // 3405 - {231: 6302}, - {573: 3078, 814: 4605, 846: 6298, 1022: 6303}, - {926, 926, 9: 6299}, - {231: 6305}, - {573: 3078, 814: 4605, 846: 6298, 1022: 6306}, + {2424, 2424, 544: 2424, 2424, 2424, 562: 2424, 622: 2424, 662: 2424}, + {2502, 2502, 544: 6308, 1235: 6326}, + {2422, 2422, 544: 2422}, + {2421, 2421, 544: 2421, 553: 1034, 564: 1034, 1034}, + {2420, 2420, 544: 2420}, // 3410 - {927, 927, 9: 6299}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 3985, 898: 6308}, - {928, 928, 9: 3987}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 6313}, - {577: 6311}, + {2419, 2419, 544: 2419, 553: 1033, 564: 1033, 1033, 568: 3934, 570: 3933, 579: 3932, 857: 3935, 3936}, + {2504, 2504}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6251, 3111, 3112, 3110, 1086: 6330}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6251, 3111, 3112, 3110, 1086: 6329}, + {922, 922, 9: 6253}, // 3415 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 3985, 898: 6312}, - {917, 917, 9: 3987}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6314, 3092, 3093, 3091}, - {930, 930}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 6316}, + {923, 923, 9: 6253}, + {925, 925}, + {924, 924}, + {916, 916}, + {915, 915}, // 3420 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6317, 3092, 3093, 3091}, - {931, 931}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 3985, 898: 6331}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 6320}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6321, 3092, 3093, 3091}, + {914, 914}, + {231: 6337}, + {573: 3097, 814: 4624, 846: 6339, 1022: 6338}, + {929, 929, 9: 6340}, + {902, 902, 9: 902}, // 3425 - {932, 932, 545: 6324, 1201: 6323, 1384: 6322}, - {929, 929, 9: 6329}, + {573: 3097, 814: 4624, 846: 6341}, {901, 901, 9: 901}, - {573: 3078, 814: 4605, 846: 6325}, - {9: 6326}, + {231: 6343}, + {573: 3097, 814: 4624, 846: 6339, 1022: 6344}, + {930, 930, 9: 6340}, // 3430 - {573: 3078, 814: 4605, 846: 6327}, - {52: 6328}, - {899, 899, 9: 899}, - {545: 6324, 1201: 6330}, - {900, 900, 9: 900}, + {231: 6346}, + {573: 3097, 814: 4624, 846: 6339, 1022: 6347}, + {931, 931, 9: 6340}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 4004, 898: 6349}, + {932, 932, 9: 4006}, // 3435 - {933, 933, 9: 3987}, - {195: 6360, 222: 2105, 729: 2105}, - {222: 1924, 440: 6352, 462: 6353, 729: 1924, 1325: 6351}, - {937, 937, 219: 6338, 222: 1732, 231: 6337, 729: 1732}, - {222: 6336}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 6354}, + {577: 6352}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 4004, 898: 6353}, + {921, 921, 9: 4006}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6355, 3111, 3112, 3110}, // 3440 {934, 934}, - {432, 432, 573: 3078, 578: 4729, 814: 4605, 846: 6349, 904: 4730, 6348}, - {439: 6339}, - {570: 6340, 573: 3078, 814: 4605, 846: 6298, 1022: 6341, 1326: 6342}, - {573: 3078, 814: 3922, 829: 6343}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 6357}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6358, 3111, 3112, 3110}, + {935, 935}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 4004, 898: 6372}, // 3445 - {924, 924, 9: 6299}, - {923, 923}, - {942, 942, 9: 6344, 224: 6345}, - {573: 3078, 814: 3922, 829: 6347}, - {573: 3078, 814: 3922, 829: 6346}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 6361}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6362, 3111, 3112, 3110}, + {936, 936, 545: 6365, 1203: 6364, 1389: 6363}, + {933, 933, 9: 6370}, + {905, 905, 9: 905}, // 3450 - {940, 940}, - {941, 941}, - {936, 936}, - {432, 432, 578: 4729, 904: 4730, 6350}, - {935, 935}, + {573: 3097, 814: 4624, 846: 6366}, + {9: 6367}, + {573: 3097, 814: 4624, 846: 6368}, + {52: 6369}, + {903, 903, 9: 903}, // 3455 - {922, 922}, - {573: 3078, 814: 6359}, - {413: 6355, 573: 3078, 730: 6356, 814: 6354}, - {904, 904}, - {573: 3078, 814: 6358}, + {545: 6365, 1203: 6371}, + {904, 904, 9: 904}, + {937, 937, 9: 4006}, + {196: 6401, 222: 2109, 729: 2109}, + {222: 1928, 440: 6393, 462: 6394, 729: 1928, 1329: 6392}, // 3460 - {573: 3078, 814: 6357}, - {902, 902}, - {903, 903}, - {905, 905}, - {907, 907}, + {941, 941, 219: 6379, 222: 1736, 231: 6378, 729: 1736}, + {222: 6377}, + {938, 938}, + {436, 436, 573: 3097, 578: 4748, 814: 4624, 846: 6390, 904: 4749, 6389}, + {439: 6380}, // 3465 - {2: 454, 454, 454, 454, 454, 454, 454, 10: 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 53: 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 454, 547: 454, 549: 454, 569: 2093, 600: 454, 729: 2093, 732: 2093}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 6516, 569: 2091, 729: 2091, 732: 2091, 786: 6515, 3092, 3093, 3091}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 6513, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 569: 2054, 729: 2054, 732: 2054, 786: 6375, 3092, 3093, 3091, 942: 6416}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 569: 2048, 729: 2048, 732: 2048, 786: 6375, 3092, 3093, 3091, 942: 6510}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 549: 6506, 569: 2046, 600: 4413, 729: 2046, 732: 2046, 786: 3793, 3092, 3093, 3091, 820: 4412, 921: 6505}, + {570: 6381, 573: 3097, 814: 4624, 846: 6339, 1022: 6382, 1330: 6383}, + {573: 3097, 814: 3941, 829: 6384}, + {928, 928, 9: 6340}, + {927, 927}, + {946, 946, 9: 6385, 224: 6386}, // 3470 - {569: 6180, 572: 6495, 729: 2041, 732: 2041, 907: 6494}, - {569: 2033, 586: 6492, 729: 2033, 732: 2033}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 6396, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 6397, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 6401, 549: 6489, 569: 2031, 729: 2031, 6487, 732: 2031, 786: 3793, 3092, 3093, 3091, 820: 5898, 913: 6403, 934: 6404, 6402, 984: 6400, 1284: 6488, 1469: 6486}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 6484, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 569: 2028, 729: 2028, 732: 2028, 786: 6375, 3092, 3093, 3091, 942: 6413}, - {243: 6469, 569: 2010, 729: 2010, 732: 2010, 743: 6470, 1038: 6468, 1104: 6467}, + {573: 3097, 814: 3941, 829: 6388}, + {573: 3097, 814: 3941, 829: 6387}, + {944, 944}, + {945, 945}, + {940, 940}, // 3475 - {398: 6421, 400: 6420, 569: 1952, 729: 1952, 732: 1952, 1342: 6422}, - {547: 6419, 569: 1721, 729: 1721, 732: 1721}, - {1022, 1022, 9: 6409}, - {195: 6395}, - {569: 989, 729: 6393, 732: 989}, + {436, 436, 578: 4748, 904: 4749, 6391}, + {939, 939}, + {926, 926}, + {573: 3097, 814: 6400}, + {413: 6396, 573: 3097, 730: 6397, 814: 6395}, // 3480 - {569: 6180, 732: 6181, 907: 6391}, - {569: 6180, 732: 6181, 907: 6386}, - {569: 6180, 732: 6181, 907: 6384}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 549: 6383, 600: 4413, 786: 3793, 3092, 3093, 3091, 820: 4412, 921: 6382, 1346: 6381}, - {967, 967, 9: 967}, + {908, 908}, + {573: 3097, 814: 6399}, + {573: 3097, 814: 6398}, + {906, 906}, + {907, 907}, // 3485 - {974, 974, 9: 974}, - {973, 973, 9: 973}, - {972, 972, 9: 972}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 6385}, - {979, 979, 9: 979, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, + {909, 909}, + {911, 911}, + {2: 458, 458, 458, 458, 458, 458, 458, 10: 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, 458, 458, 458, 458, 53: 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 547: 458, 549: 458, 569: 2097, 600: 458, 729: 2097, 732: 2097}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 6557, 569: 2095, 729: 2095, 732: 2095, 786: 6556, 3111, 3112, 3110}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 6554, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 569: 2058, 729: 2058, 732: 2058, 786: 6416, 3111, 3112, 3110, 942: 6457}, // 3490 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 6388, 3659, 547: 3641, 3657, 3955, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 6387, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3951, 908: 6389, 957: 6390}, - {993, 993, 3341, 3505, 3305, 3180, 3221, 3343, 3105, 993, 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3671, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 4517, 3652, 3734, 3651, 3648}, - {994, 994, 9: 994}, - {992, 992, 9: 992}, - {980, 980, 9: 980}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 569: 2052, 729: 2052, 732: 2052, 786: 6416, 3111, 3112, 3110, 942: 6551}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 549: 6547, 569: 2050, 600: 4432, 729: 2050, 732: 2050, 786: 3812, 3111, 3112, 3110, 820: 4431, 921: 6546}, + {569: 6221, 572: 6536, 729: 2045, 732: 2045, 907: 6535}, + {569: 2037, 586: 6533, 729: 2037, 732: 2037}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 6437, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 6438, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 6442, 549: 6530, 569: 2035, 729: 2035, 6528, 732: 2035, 786: 3812, 3111, 3112, 3110, 820: 5939, 913: 6444, 934: 6445, 6443, 984: 6441, 1286: 6529, 1474: 6527}, // 3495 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 6388, 3659, 547: 3641, 3657, 3955, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 6387, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3951, 908: 6389, 957: 6392}, - {984, 984, 9: 984}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6394, 3092, 3093, 3091}, - {569: 988, 732: 988}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 6396, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 6397, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 6401, 730: 6399, 786: 3793, 3092, 3093, 3091, 820: 5898, 913: 6403, 934: 6404, 6402, 984: 6400, 1284: 6398}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 6525, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 569: 2032, 729: 2032, 732: 2032, 786: 6416, 3111, 3112, 3110, 942: 6454}, + {243: 6510, 569: 2014, 729: 2014, 732: 2014, 743: 6511, 1038: 6509, 1106: 6508}, + {399: 6462, 401: 6461, 569: 1956, 729: 1956, 732: 1956, 1346: 6463}, + {547: 6460, 569: 1725, 729: 1725, 732: 1725}, + {1026, 1026, 9: 6450}, // 3500 - {951, 951, 9: 951, 643: 2124, 726: 951, 740: 2124}, - {1010, 1010, 643: 1947, 726: 1010, 740: 1947}, - {726: 6407}, - {726: 1009}, - {1008, 1008, 9: 6405, 726: 1008}, + {196: 6436}, + {569: 993, 729: 6434, 732: 993}, + {569: 6221, 732: 6222, 907: 6432}, + {569: 6221, 732: 6222, 907: 6427}, + {569: 6221, 732: 6222, 907: 6425}, // 3505 - {952, 952, 9: 952, 643: 443, 726: 952, 740: 443}, - {946, 946, 9: 946, 726: 946}, - {945, 945, 9: 945, 726: 945}, - {944, 944, 9: 944, 726: 944}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 6396, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 6401, 786: 3793, 3092, 3093, 3091, 820: 5898, 913: 6403, 934: 6406, 6402}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 549: 6424, 600: 4432, 786: 3812, 3111, 3112, 3110, 820: 4431, 921: 6423, 1350: 6422}, + {971, 971, 9: 971}, + {978, 978, 9: 978}, + {977, 977, 9: 977}, + {976, 976, 9: 976}, // 3510 - {943, 943, 9: 943, 726: 943}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 645: 5944, 786: 3793, 3092, 3093, 3091, 820: 5943, 870: 5945, 987: 6408}, - {1011, 1011, 9: 5947}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 6361, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 6364, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 6410, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 6411, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 6365, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 567: 4486, 643: 6378, 666: 6377, 723: 4484, 786: 6375, 3092, 3093, 3091, 868: 6379, 942: 6376, 1113: 6412}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 569: 2054, 729: 2054, 732: 2054, 786: 6375, 3092, 3093, 3091, 942: 6416}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 6426}, + {983, 983, 9: 983, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 6429, 3678, 547: 3660, 3676, 3974, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 6428, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3970, 908: 6430, 957: 6431}, + {997, 997, 3360, 3524, 3324, 3199, 3240, 3362, 3124, 997, 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3690, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 4536, 3671, 3753, 3670, 3667}, + {998, 998, 9: 998}, // 3515 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 569: 2028, 729: 2028, 732: 2028, 786: 6375, 3092, 3093, 3091, 942: 6413}, - {966, 966, 9: 966}, - {569: 6180, 732: 6181, 907: 6414}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 6388, 3659, 547: 3641, 3657, 3955, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 6387, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3951, 908: 6389, 957: 6415}, - {982, 982, 9: 982}, + {996, 996, 9: 996}, + {984, 984, 9: 984}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 6429, 3678, 547: 3660, 3676, 3974, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 6428, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3970, 908: 6430, 957: 6433}, + {988, 988, 9: 988}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6435, 3111, 3112, 3110}, // 3520 - {569: 6180, 732: 6181, 907: 6417}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 6388, 3659, 547: 3641, 3657, 3955, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 6387, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3951, 908: 6389, 957: 6418}, - {983, 983, 9: 983}, - {1014, 1014}, - {572: 2528}, + {569: 992, 732: 992}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 6437, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 6438, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 6442, 730: 6440, 786: 3812, 3111, 3112, 3110, 820: 5939, 913: 6444, 934: 6445, 6443, 984: 6441, 1286: 6439}, + {955, 955, 9: 955, 641: 2128, 727: 955, 740: 2128}, + {1014, 1014, 641: 1951, 727: 1014, 740: 1951}, + {727: 6448}, // 3525 - {572: 2527}, - {572: 6423}, - {545: 2949, 2948, 562: 2947, 566: 2933, 601: 2932, 622: 2946, 670: 2942, 672: 6435, 728: 3059, 790: 6426, 818: 6424, 821: 6427, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 6425, 6429, 6428, 837: 3058, 6431, 6432, 6433, 6430, 944: 6434}, - {2: 1068, 1068, 1068, 1068, 1068, 1068, 1068, 10: 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 53: 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 563: 1068, 576: 1068, 847: 1068, 849: 1068, 851: 1068, 855: 6047, 959: 6048, 1009: 6440}, - {545: 2949, 562: 2947, 622: 2946, 670: 2942, 728: 3059, 790: 3910, 821: 3909, 2943, 2944, 2945, 2954, 2952, 3911, 3912, 837: 5788}, + {727: 1013}, + {1012, 1012, 9: 6446, 727: 1012}, + {956, 956, 9: 956, 641: 447, 727: 956, 740: 447}, + {950, 950, 9: 950, 727: 950}, + {949, 949, 9: 949, 727: 949}, // 3530 - {359, 359, 553: 1029, 556: 359, 564: 1029, 1029, 568: 3915, 570: 3914, 579: 3913, 857: 3916, 3917}, - {361, 361, 553: 1030, 556: 361, 564: 1030, 1030}, - {362, 362, 556: 362}, - {360, 360, 556: 360}, - {358, 358, 556: 358}, + {948, 948, 9: 948, 727: 948}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 6437, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 6442, 786: 3812, 3111, 3112, 3110, 820: 5939, 913: 6444, 934: 6447, 6443}, + {947, 947, 9: 947, 727: 947}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 645: 5985, 786: 3812, 3111, 3112, 3110, 820: 5984, 870: 5986, 987: 6449}, + {1015, 1015, 9: 5988}, // 3535 - {357, 357, 556: 357}, - {356, 356, 556: 356}, - {355, 355, 556: 355}, - {348, 348, 556: 6438}, - {230: 6436}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 6402, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 6405, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 6451, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 6452, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 6406, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 567: 4505, 641: 6419, 668: 6418, 723: 4503, 786: 6416, 3111, 3112, 3110, 868: 6420, 942: 6417, 1115: 6453}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 569: 2058, 729: 2058, 732: 2058, 786: 6416, 3111, 3112, 3110, 942: 6457}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 569: 2032, 729: 2032, 732: 2032, 786: 6416, 3111, 3112, 3110, 942: 6454}, + {970, 970, 9: 970}, + {569: 6221, 732: 6222, 907: 6455}, // 3540 - {547: 6437}, - {346, 346}, - {545: 2949, 2948, 562: 2947, 566: 2933, 601: 2932, 622: 2946, 670: 2942, 728: 3059, 790: 6426, 818: 6424, 821: 6427, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 6425, 6429, 6428, 837: 3058, 6431, 6432, 6433, 6430, 944: 6439}, - {347, 347}, - {2: 1274, 1274, 1274, 1274, 1274, 1274, 1274, 10: 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 53: 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 563: 1274, 576: 1274, 847: 6050, 849: 6052, 851: 6051, 952: 6053, 1006: 6441}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 6429, 3678, 547: 3660, 3676, 3974, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 6428, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3970, 908: 6430, 957: 6456}, + {986, 986, 9: 986}, + {569: 6221, 732: 6222, 907: 6458}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 6429, 3678, 547: 3660, 3676, 3974, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 6428, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3970, 908: 6430, 957: 6459}, + {987, 987, 9: 987}, // 3545 - {2: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 10: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 53: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 6443, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 563: 1261, 576: 1261, 1263: 6442}, - {2: 2149, 2149, 2149, 2149, 2149, 2149, 2149, 10: 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 53: 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 563: 4743, 576: 2149, 976: 6444}, - {2: 1260, 1260, 1260, 1260, 1260, 1260, 1260, 10: 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 53: 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 563: 1260, 576: 1260}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 576: 6445, 786: 6447, 3092, 3093, 3091, 1034: 6448, 1100: 6446}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 6460}, + {1018, 1018}, + {572: 2541}, + {572: 2540}, + {572: 6464}, + {545: 2968, 2967, 562: 2966, 566: 2952, 601: 2951, 622: 2965, 662: 2961, 672: 6476, 726: 3078, 790: 6467, 818: 6465, 821: 6468, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 6466, 6470, 6469, 837: 3077, 6472, 6473, 6474, 6471, 944: 6475}, // 3550 - {9: 6456, 576: 6455}, - {9: 1263, 556: 1263, 576: 1263, 729: 6450, 1025: 6449}, - {9: 1265, 556: 1265, 576: 1265}, - {9: 1267, 556: 1267, 576: 1267}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 6452, 786: 6451, 3092, 3093, 3091}, + {2: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 10: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 53: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 563: 1072, 576: 1072, 847: 1072, 849: 1072, 851: 1072, 855: 6088, 959: 6089, 1009: 6481}, + {545: 2968, 562: 2966, 622: 2965, 662: 2961, 726: 3078, 790: 3929, 821: 3928, 2962, 2963, 2964, 2973, 2971, 3930, 3931, 837: 5829}, + {363, 363, 553: 1033, 556: 363, 564: 1033, 1033, 568: 3934, 570: 3933, 579: 3932, 857: 3935, 3936}, + {365, 365, 553: 1034, 556: 365, 564: 1034, 1034}, + {366, 366, 556: 366}, // 3555 - {9: 1263, 556: 1263, 576: 1263, 729: 6454, 1025: 6453}, - {9: 1262, 556: 1262, 576: 1262}, - {9: 1266, 556: 1266, 576: 1266}, - {575: 6452}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 6064, 575: 3984, 657: 6059, 786: 3983, 3092, 3093, 3091, 6063, 819: 6062, 909: 6061, 914: 6060, 6066, 973: 6056, 1010: 6458}, + {364, 364, 556: 364}, + {362, 362, 556: 362}, + {361, 361, 556: 361}, + {360, 360, 556: 360}, + {359, 359, 556: 359}, // 3560 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6447, 3092, 3093, 3091, 1034: 6457}, - {9: 1264, 556: 1264, 576: 1264}, - {432, 432, 9: 6114, 556: 432, 578: 4729, 904: 4730, 6459}, - {2384, 2384, 556: 2384}, - {1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 10: 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 53: 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 551: 1138, 556: 1138, 560: 6118, 563: 1138, 570: 1138, 578: 1138, 1138, 1138, 590: 1138, 981: 6461}, + {348, 348, 556: 6479}, + {230: 6477}, + {547: 6478}, + {346, 346}, + {545: 2968, 2967, 562: 2966, 566: 2952, 601: 2951, 622: 2965, 662: 2961, 726: 3078, 790: 6467, 818: 6465, 821: 6468, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 6466, 6470, 6469, 837: 3077, 6472, 6473, 6474, 6471, 944: 6480}, // 3565 - {1136, 1136, 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 551: 6071, 556: 1136, 563: 1136, 570: 1136, 578: 1136, 1136, 1136, 590: 1136, 786: 6070, 3092, 3093, 3091, 1032: 6069, 6462}, - {1117, 1117, 556: 1117, 563: 6127, 570: 1117, 578: 1117, 1117, 6128, 590: 6126, 1066: 6130, 6129, 1206: 6131, 6463}, - {432, 432, 556: 432, 570: 432, 578: 4729, 432, 904: 4730, 6464}, - {1519, 1519, 556: 1519, 570: 1519, 579: 3913, 857: 3967, 926: 6465}, - {1098, 1098, 556: 1098, 570: 6175, 1216: 6466}, + {347, 347}, + {2: 1278, 1278, 1278, 1278, 1278, 1278, 1278, 10: 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 53: 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 563: 1278, 576: 1278, 847: 6091, 849: 6093, 851: 6092, 952: 6094, 1006: 6482}, + {2: 1265, 1265, 1265, 1265, 1265, 1265, 1265, 10: 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 53: 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 6484, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 563: 1265, 576: 1265, 1265: 6483}, + {2: 2155, 2155, 2155, 2155, 2155, 2155, 2155, 10: 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 53: 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 563: 4762, 576: 2155, 976: 6485}, + {2: 1264, 1264, 1264, 1264, 1264, 1264, 1264, 10: 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 53: 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 1264, 563: 1264, 576: 1264}, // 3570 - {2385, 2385, 556: 2385}, - {1017, 1017, 9: 6482}, - {1004, 1004, 9: 1004}, - {417: 6474}, - {205: 6472, 784: 6471}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 576: 6486, 786: 6488, 3111, 3112, 3110, 1034: 6489, 1102: 6487}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 6501}, + {9: 6497, 576: 6496}, + {9: 1267, 556: 1267, 576: 1267, 729: 6491, 1025: 6490}, + {9: 1269, 556: 1269, 576: 1269}, // 3575 - {1001, 1001, 9: 1001}, - {1000, 1000, 9: 1000, 745: 4708, 1012: 6473}, - {999, 999, 9: 999}, - {281: 6476, 449: 6478, 743: 6477, 1396: 6475}, - {1002, 1002, 9: 1002}, + {9: 1271, 556: 1271, 576: 1271}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 6493, 786: 6492, 3111, 3112, 3110}, + {9: 1267, 556: 1267, 576: 1267, 729: 6495, 1025: 6494}, + {9: 1266, 556: 1266, 576: 1266}, + {9: 1270, 556: 1270, 576: 1270}, // 3580 - {743: 6481}, - {393: 6479, 467: 6480}, - {995, 995, 9: 995}, - {997, 997, 9: 997}, - {996, 996, 9: 996}, + {575: 6493}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 6105, 575: 4003, 657: 6100, 786: 4002, 3111, 3112, 3110, 6104, 819: 6103, 909: 6102, 914: 6101, 6107, 973: 6097, 1010: 6499}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6488, 3111, 3112, 3110, 1034: 6498}, + {9: 1268, 556: 1268, 576: 1268}, + {436, 436, 9: 6155, 556: 436, 578: 4748, 904: 4749, 6500}, // 3585 - {998, 998, 9: 998}, - {243: 6469, 743: 6470, 1038: 6483}, - {1003, 1003, 9: 1003}, - {243: 6469, 569: 2010, 729: 2010, 732: 2010, 743: 6470, 1038: 6468, 1104: 6485}, - {1018, 1018, 9: 6482}, + {2390, 2390, 556: 2390}, + {1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 10: 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 53: 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 551: 1142, 556: 1142, 560: 6159, 563: 1142, 570: 1142, 578: 1142, 1142, 1142, 590: 1142, 981: 6502}, + {1140, 1140, 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 551: 6112, 556: 1140, 563: 1140, 570: 1140, 578: 1140, 1140, 1140, 590: 1140, 786: 6111, 3111, 3112, 3110, 1032: 6110, 6503}, + {1121, 1121, 556: 1121, 563: 6168, 570: 1121, 578: 1121, 1121, 6169, 590: 6167, 1067: 6171, 6170, 1208: 6172, 6504}, + {436, 436, 556: 436, 570: 436, 578: 4748, 436, 904: 4749, 6505}, // 3590 - {1012, 1012}, - {1009, 1009, 564: 6490}, - {1006, 1006}, - {1005, 1005}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 6396, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 6401, 786: 3793, 3092, 3093, 3091, 820: 5898, 913: 6403, 934: 6404, 6402, 984: 6491}, + {1523, 1523, 556: 1523, 570: 1523, 579: 3932, 857: 3986, 926: 6506}, + {1102, 1102, 556: 1102, 570: 6216, 1218: 6507}, + {2391, 2391, 556: 2391}, + {1021, 1021, 9: 6523}, + {1008, 1008, 9: 1008}, // 3595 - {1007, 1007, 9: 6405}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 549: 4663, 786: 4662, 3092, 3093, 3091, 954: 6493}, - {1013, 1013}, - {15: 6500, 547: 6499, 1251: 6504}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 645: 5944, 786: 3793, 3092, 3093, 3091, 820: 5943, 870: 6496}, + {417: 6515}, + {206: 6513, 784: 6512}, + {1005, 1005, 9: 1005}, + {1004, 1004, 9: 1004, 745: 4727, 1012: 6514}, + {1003, 1003, 9: 1003}, // 3600 - {569: 6180, 732: 6181, 907: 6497}, - {15: 6500, 547: 6499, 1251: 6498}, - {1020, 1020}, - {955, 955}, - {545: 6501}, + {282: 6517, 449: 6519, 743: 6518, 1401: 6516}, + {1006, 1006, 9: 1006}, + {743: 6522}, + {394: 6520, 467: 6521}, + {999, 999, 9: 999}, // 3605 - {547: 5977, 1014: 6502}, - {52: 6503}, - {954, 954}, - {1021, 1021}, - {978, 978, 9: 978, 552: 6507}, + {1001, 1001, 9: 1001}, + {1000, 1000, 9: 1000}, + {1002, 1002, 9: 1002}, + {243: 6510, 743: 6511, 1038: 6524}, + {1007, 1007, 9: 1007}, // 3610 - {975, 975, 9: 975}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 549: 6508, 786: 3793, 3092, 3093, 3091, 820: 6509}, - {977, 977, 9: 977}, - {976, 976, 9: 976}, - {569: 6180, 732: 6181, 907: 6511}, + {243: 6510, 569: 2014, 729: 2014, 732: 2014, 743: 6511, 1038: 6509, 1106: 6526}, + {1022, 1022, 9: 6523}, + {1016, 1016}, + {1013, 1013, 564: 6531}, + {1010, 1010}, // 3615 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 6388, 3659, 547: 3641, 3657, 3955, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 6387, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3951, 908: 6389, 957: 6512}, - {981, 981, 9: 981}, - {243: 6469, 569: 2010, 729: 2010, 732: 2010, 743: 6470, 1038: 6468, 1104: 6514}, - {1019, 1019, 9: 6482}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6518, 3092, 3093, 3091, 1018: 6525}, + {1009, 1009}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 6437, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 6442, 786: 3812, 3111, 3112, 3110, 820: 5939, 913: 6444, 934: 6445, 6443, 984: 6532}, + {1011, 1011, 9: 6446}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 549: 4682, 786: 4681, 3111, 3112, 3110, 954: 6534}, + {1017, 1017}, // 3620 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6518, 3092, 3093, 3091, 1018: 6517}, - {569: 6180, 732: 6181, 907: 6523}, - {558: 6520, 569: 987, 729: 6519, 732: 987}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6518, 3092, 3093, 3091, 1018: 6522}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6518, 3092, 3093, 3091, 1018: 6521}, + {15: 6541, 547: 6540, 1253: 6545}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 645: 5985, 786: 3812, 3111, 3112, 3110, 820: 5984, 870: 6537}, + {569: 6221, 732: 6222, 907: 6538}, + {15: 6541, 547: 6540, 1253: 6539}, + {1024, 1024}, // 3625 - {569: 985, 732: 985}, - {569: 986, 732: 986}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 6388, 3659, 547: 3641, 3657, 3955, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 6387, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3951, 908: 6389, 957: 6524}, - {1015, 1015}, - {569: 6180, 732: 6181, 907: 6526}, + {959, 959}, + {545: 6542}, + {547: 6018, 1014: 6543}, + {52: 6544}, + {958, 958}, // 3630 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 6388, 3659, 547: 3641, 3657, 3955, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 6387, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3951, 908: 6389, 957: 6527}, - {1016, 1016}, - {726: 6537}, - {726: 6530}, - {339: 6531}, + {1025, 1025}, + {982, 982, 9: 982, 552: 6548}, + {979, 979, 9: 979}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 549: 6549, 786: 3812, 3111, 3112, 3110, 820: 6550}, + {981, 981, 9: 981}, // 3635 - {569: 6532}, - {547: 6533}, - {572: 6534}, - {338: 6535}, - {547: 6536}, + {980, 980, 9: 980}, + {569: 6221, 732: 6222, 907: 6552}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 6429, 3678, 547: 3660, 3676, 3974, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 6428, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3970, 908: 6430, 957: 6553}, + {985, 985, 9: 985}, + {243: 6510, 569: 2014, 729: 2014, 732: 2014, 743: 6511, 1038: 6509, 1106: 6555}, // 3640 - {1023, 1023}, - {339: 6538}, - {569: 6539}, - {547: 6540}, - {572: 6541}, + {1023, 1023, 9: 6523}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6559, 3111, 3112, 3110, 1018: 6566}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6559, 3111, 3112, 3110, 1018: 6558}, + {569: 6221, 732: 6222, 907: 6564}, + {558: 6561, 569: 991, 729: 6560, 732: 991}, // 3645 - {338: 6542}, - {547: 6543}, - {1024, 1024}, - {545: 2949, 562: 2947, 622: 2946, 670: 2942, 790: 6555, 821: 6554, 2943, 2944, 2945, 6556}, - {545: 1459, 562: 1459, 622: 1459, 670: 1459, 730: 4233, 843: 4231, 4232, 901: 6548, 903: 6549, 1054: 6551, 1097: 6553}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6559, 3111, 3112, 3110, 1018: 6563}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6559, 3111, 3112, 3110, 1018: 6562}, + {569: 989, 732: 989}, + {569: 990, 732: 990}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 6429, 3678, 547: 3660, 3676, 3974, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 6428, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3970, 908: 6430, 957: 6565}, // 3650 - {545: 1459, 562: 1459, 622: 1459, 670: 1459, 730: 4233, 843: 4231, 4232, 901: 6548, 903: 6549, 1054: 6551, 1097: 6552}, - {545: 1459, 562: 1459, 622: 1459, 670: 1459, 730: 4233, 843: 4231, 4232, 901: 6548, 903: 6549, 1054: 6551, 1097: 6550}, - {2: 1462, 1462, 1462, 1462, 1462, 1462, 1462, 10: 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 53: 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 545: 1462, 547: 1462, 1462, 1462, 1462, 554: 1462, 1462, 557: 1462, 1462, 1462, 561: 1462, 1462, 566: 1462, 1462, 573: 1462, 575: 1462, 588: 1462, 593: 1462, 600: 1462, 1462, 622: 1462, 633: 1462, 640: 1462, 642: 1462, 1462, 1462, 1462, 650: 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 670: 1462, 1462, 673: 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 725: 1462, 730: 1462, 843: 1462, 1462, 847: 1462, 849: 1462, 851: 1462, 855: 1462, 864: 1462, 1462, 1462}, - {545: 1458, 562: 1458, 622: 1458, 670: 1458}, - {545: 1026, 562: 1026, 622: 1026, 670: 1026}, + {1019, 1019}, + {569: 6221, 732: 6222, 907: 6567}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 6429, 3678, 547: 3660, 3676, 3974, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 6428, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3970, 908: 6430, 957: 6568}, + {1020, 1020}, + {727: 6578}, // 3655 - {545: 1025, 562: 1025, 622: 1025, 670: 1025}, - {545: 1027, 562: 1027, 622: 1027, 670: 1027}, - {545: 1028, 562: 1028, 622: 1028, 670: 1028}, - {1040, 1040, 52: 1040, 544: 1040, 546: 1040, 553: 1030, 556: 1040, 564: 1030, 1030}, - {1039, 1039, 52: 1039, 544: 1039, 546: 1039, 553: 1029, 556: 1039, 564: 1029, 1029, 568: 3915, 570: 3914, 579: 3913, 857: 6557, 6558}, + {727: 6571}, + {341: 6572}, + {569: 6573}, + {547: 6574}, + {572: 6575}, // 3660 - {553: 1031, 564: 1031, 1031}, - {1038, 1038, 52: 1038, 544: 1038, 546: 1038, 556: 1038, 568: 3915, 570: 3914, 858: 6559}, - {1037, 1037, 52: 1037, 544: 1037, 546: 1037, 556: 1037}, - {1036, 1036, 52: 1036, 544: 1036, 546: 1036, 556: 1036}, - {52: 4048, 553: 1029, 564: 1029, 1029, 568: 3915, 570: 3914, 579: 3913, 857: 3916, 3917}, + {340: 6576}, + {547: 6577}, + {1027, 1027}, + {341: 6579}, + {569: 6580}, // 3665 - {9: 6575, 545: 1213, 562: 1213, 622: 1213, 670: 1213, 728: 1213, 818: 1213}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6564, 3092, 3093, 3091, 1049: 6563, 1322: 6574}, - {9: 1210, 545: 1210, 562: 1210, 622: 1210, 670: 1210, 728: 1210, 818: 1210}, - {545: 6565, 551: 2649, 1385: 6566}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6570, 3092, 3093, 3091, 997: 6569}, + {547: 6581}, + {572: 6582}, + {340: 6583}, + {547: 6584}, + {1028, 1028}, // 3670 - {551: 6567}, - {545: 2949, 790: 6568}, - {9: 1209, 545: 1209, 562: 1209, 622: 1209, 670: 1209, 728: 1209, 818: 1209}, - {9: 6572, 52: 6571}, - {2647, 2647, 9: 2647, 52: 2647, 546: 2647}, + {545: 2968, 562: 2966, 622: 2965, 662: 2961, 790: 6596, 821: 6595, 2962, 2963, 2964, 6597}, + {545: 1463, 562: 1463, 622: 1463, 662: 1463, 730: 4252, 843: 4250, 4251, 901: 6589, 903: 6590, 1054: 6592, 1098: 6594}, + {545: 1463, 562: 1463, 622: 1463, 662: 1463, 730: 4252, 843: 4250, 4251, 901: 6589, 903: 6590, 1054: 6592, 1098: 6593}, + {545: 1463, 562: 1463, 622: 1463, 662: 1463, 730: 4252, 843: 4250, 4251, 901: 6589, 903: 6590, 1054: 6592, 1098: 6591}, + {2: 1466, 1466, 1466, 1466, 1466, 1466, 1466, 10: 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 53: 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 545: 1466, 547: 1466, 1466, 1466, 1466, 554: 1466, 1466, 557: 1466, 1466, 1466, 561: 1466, 1466, 566: 1466, 1466, 573: 1466, 575: 1466, 588: 1466, 593: 1466, 600: 1466, 1466, 622: 1466, 633: 1466, 640: 1466, 1466, 643: 1466, 1466, 1466, 650: 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 659: 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 673: 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 711: 1466, 1466, 1466, 1466, 1466, 1466, 725: 1466, 730: 1466, 843: 1466, 1466, 847: 1466, 849: 1466, 851: 1466, 855: 1466, 864: 1466, 1466, 1466}, // 3675 - {551: 2648}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6573, 3092, 3093, 3091}, - {2646, 2646, 9: 2646, 52: 2646, 546: 2646}, - {9: 6575, 545: 1212, 562: 1212, 622: 1212, 670: 1212, 728: 1212, 818: 1212}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6564, 3092, 3093, 3091, 1049: 6576}, + {545: 1462, 562: 1462, 622: 1462, 662: 1462}, + {545: 1030, 562: 1030, 622: 1030, 662: 1030}, + {545: 1029, 562: 1029, 622: 1029, 662: 1029}, + {545: 1031, 562: 1031, 622: 1031, 662: 1031}, + {545: 1032, 562: 1032, 622: 1032, 662: 1032}, // 3680 - {9: 1211, 545: 1211, 562: 1211, 622: 1211, 670: 1211, 728: 1211, 818: 1211}, - {1519, 1519, 52: 1519, 544: 1519, 546: 1519, 553: 1519, 556: 1519, 564: 1519, 1519, 568: 1519, 570: 1519, 572: 1519, 574: 1519, 577: 1519, 579: 3913, 857: 3967, 926: 6578}, - {1084, 1084, 52: 1084, 544: 1084, 546: 1084, 553: 1084, 556: 1084, 564: 1084, 1084, 568: 3915, 570: 3914, 572: 1084, 574: 1084, 577: 1084, 858: 3972, 941: 6579}, - {1055, 1055, 52: 1055, 544: 1055, 546: 1055, 553: 1055, 556: 1055, 564: 1055, 1055, 572: 3974, 574: 1055, 577: 3975, 1007: 6580}, - {1061, 1061, 52: 1061, 544: 1061, 546: 1061, 553: 1061, 556: 1061, 564: 1061, 1061, 574: 4003, 1008: 6581}, + {1044, 1044, 52: 1044, 544: 1044, 546: 1044, 553: 1034, 556: 1044, 564: 1034, 1034}, + {1043, 1043, 52: 1043, 544: 1043, 546: 1043, 553: 1033, 556: 1043, 564: 1033, 1033, 568: 3934, 570: 3933, 579: 3932, 857: 6598, 6599}, + {553: 1035, 564: 1035, 1035}, + {1042, 1042, 52: 1042, 544: 1042, 546: 1042, 556: 1042, 568: 3934, 570: 3933, 858: 6600}, + {1041, 1041, 52: 1041, 544: 1041, 546: 1041, 556: 1041}, // 3685 - {1217, 1217, 52: 1217, 544: 1217, 546: 1217, 553: 1217, 556: 1217, 564: 1217, 1217}, - {1084, 1084, 52: 1084, 544: 1084, 546: 1084, 553: 1084, 556: 1084, 564: 1084, 1084, 568: 3915, 570: 3914, 572: 1084, 574: 1084, 577: 1084, 858: 3972, 941: 6583}, - {1055, 1055, 52: 1055, 544: 1055, 546: 1055, 553: 1055, 556: 1055, 564: 1055, 1055, 572: 3974, 574: 1055, 577: 3975, 1007: 6584}, - {1061, 1061, 52: 1061, 544: 1061, 546: 1061, 553: 1061, 556: 1061, 564: 1061, 1061, 574: 4003, 1008: 6585}, - {1218, 1218, 52: 1218, 544: 1218, 546: 1218, 553: 1218, 556: 1218, 564: 1218, 1218}, + {1040, 1040, 52: 1040, 544: 1040, 546: 1040, 556: 1040}, + {52: 4067, 553: 1033, 564: 1033, 1033, 568: 3934, 570: 3933, 579: 3932, 857: 3935, 3936}, + {9: 6616, 545: 1217, 562: 1217, 622: 1217, 662: 1217, 726: 1217, 818: 1217}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6605, 3111, 3112, 3110, 1049: 6604, 1326: 6615}, + {9: 1214, 545: 1214, 562: 1214, 622: 1214, 662: 1214, 726: 1214, 818: 1214}, // 3690 - {737: 6593}, - {1519, 1519, 52: 1519, 544: 1519, 546: 1519, 553: 1519, 556: 1519, 564: 1519, 1519, 568: 1519, 570: 1519, 572: 1519, 574: 1519, 577: 1519, 579: 3913, 857: 3967, 926: 6589}, - {1062, 1062, 52: 1062, 544: 1062, 546: 1062, 553: 1062, 556: 1062, 564: 1062, 1062, 568: 1062, 570: 1062, 572: 1062, 574: 1062, 577: 1062, 579: 1062, 587: 1062, 589: 1062}, - {1084, 1084, 52: 1084, 544: 1084, 546: 1084, 553: 1084, 556: 1084, 564: 1084, 1084, 568: 3915, 570: 3914, 572: 1084, 574: 1084, 577: 1084, 858: 3972, 941: 6590}, - {1055, 1055, 52: 1055, 544: 1055, 546: 1055, 553: 1055, 556: 1055, 564: 1055, 1055, 572: 3974, 574: 1055, 577: 3975, 1007: 6591}, + {545: 6606, 551: 2664, 1390: 6607}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6611, 3111, 3112, 3110, 997: 6610}, + {551: 6608}, + {545: 2968, 790: 6609}, + {9: 1213, 545: 1213, 562: 1213, 622: 1213, 662: 1213, 726: 1213, 818: 1213}, // 3695 - {1061, 1061, 52: 1061, 544: 1061, 546: 1061, 553: 1061, 556: 1061, 564: 1061, 1061, 574: 4003, 1008: 6592}, - {1219, 1219, 52: 1219, 544: 1219, 546: 1219, 553: 1219, 556: 1219, 564: 1219, 1219}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3937, 990: 3939, 1017: 6594}, - {2161, 2161, 9: 3940, 52: 2161, 544: 2161, 546: 6595, 553: 2161, 556: 2161, 564: 2161, 2161, 568: 2161, 570: 2161, 572: 2161, 574: 2161, 577: 2161, 579: 2161, 587: 2161, 589: 2161, 1528: 6596}, - {445: 6597}, + {9: 6613, 52: 6612}, + {2662, 2662, 9: 2662, 52: 2662, 546: 2662}, + {551: 2663}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6614, 3111, 3112, 3110}, + {2661, 2661, 9: 2661, 52: 2661, 546: 2661}, // 3700 - {2159, 2159, 52: 2159, 544: 2159, 546: 2159, 553: 2159, 556: 2159, 564: 2159, 2159, 568: 2159, 570: 2159, 572: 2159, 574: 2159, 577: 2159, 579: 2159, 587: 2159, 589: 2159}, - {2160, 2160, 52: 2160, 544: 2160, 546: 2160, 553: 2160, 556: 2160, 564: 2160, 2160, 568: 2160, 570: 2160, 572: 2160, 574: 2160, 577: 2160, 579: 2160, 587: 2160, 589: 2160}, - {432, 432, 52: 432, 544: 432, 546: 432, 553: 432, 556: 432, 564: 432, 432, 568: 432, 570: 432, 572: 432, 574: 432, 577: 432, 4729, 432, 586: 432, 904: 4730, 6623}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 6064, 575: 3984, 657: 6059, 786: 3983, 3092, 3093, 3091, 6063, 819: 6062, 909: 6061, 914: 6060, 6066, 973: 6056, 1010: 6608, 1366: 6607, 1498: 6606}, - {1063, 1063, 52: 1063, 544: 1063, 546: 1063, 553: 1063, 556: 1063, 564: 1063, 1063, 568: 1063, 570: 1063, 572: 1063, 574: 1063, 577: 1063, 579: 1063, 586: 6586, 1065: 6588, 1096: 6601}, + {9: 6616, 545: 1216, 562: 1216, 622: 1216, 662: 1216, 726: 1216, 818: 1216}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6605, 3111, 3112, 3110, 1049: 6617}, + {9: 1215, 545: 1215, 562: 1215, 622: 1215, 662: 1215, 726: 1215, 818: 1215}, + {1523, 1523, 52: 1523, 544: 1523, 546: 1523, 553: 1523, 556: 1523, 564: 1523, 1523, 568: 1523, 570: 1523, 572: 1523, 574: 1523, 577: 1523, 579: 3932, 857: 3986, 926: 6619}, + {1088, 1088, 52: 1088, 544: 1088, 546: 1088, 553: 1088, 556: 1088, 564: 1088, 1088, 568: 3934, 570: 3933, 572: 1088, 574: 1088, 577: 1088, 858: 3991, 941: 6620}, // 3705 - {1519, 1519, 52: 1519, 544: 1519, 546: 1519, 553: 1519, 556: 1519, 564: 1519, 1519, 568: 1519, 570: 1519, 572: 1519, 574: 1519, 577: 1519, 579: 3913, 857: 3967, 926: 6602}, - {1084, 1084, 52: 1084, 544: 1084, 546: 1084, 553: 1084, 556: 1084, 564: 1084, 1084, 568: 3915, 570: 3914, 572: 1084, 574: 1084, 577: 1084, 858: 3972, 941: 6603}, - {1055, 1055, 52: 1055, 544: 1055, 546: 1055, 553: 1055, 556: 1055, 564: 1055, 1055, 572: 3974, 574: 1055, 577: 3975, 1007: 6604}, - {1061, 1061, 52: 1061, 544: 1061, 546: 1061, 553: 1061, 556: 1061, 564: 1061, 1061, 574: 4003, 1008: 6605}, - {1220, 1220, 52: 1220, 544: 1220, 546: 1220, 553: 1220, 556: 1220, 564: 1220, 1220}, + {1059, 1059, 52: 1059, 544: 1059, 546: 1059, 553: 1059, 556: 1059, 564: 1059, 1059, 572: 3993, 574: 1059, 577: 3994, 1007: 6621}, + {1065, 1065, 52: 1065, 544: 1065, 546: 1065, 553: 1065, 556: 1065, 564: 1065, 1065, 574: 4022, 1008: 6622}, + {1221, 1221, 52: 1221, 544: 1221, 546: 1221, 553: 1221, 556: 1221, 564: 1221, 1221}, + {1088, 1088, 52: 1088, 544: 1088, 546: 1088, 553: 1088, 556: 1088, 564: 1088, 1088, 568: 3934, 570: 3933, 572: 1088, 574: 1088, 577: 1088, 858: 3991, 941: 6624}, + {1059, 1059, 52: 1059, 544: 1059, 546: 1059, 553: 1059, 556: 1059, 564: 1059, 1059, 572: 3993, 574: 1059, 577: 3994, 1007: 6625}, // 3710 - {432, 432, 52: 432, 544: 432, 546: 432, 553: 432, 556: 432, 564: 432, 432, 568: 432, 570: 432, 572: 432, 574: 432, 577: 432, 4729, 432, 586: 432, 432, 589: 432, 904: 4730, 6609}, - {1208, 1208, 52: 1208, 544: 1208, 546: 1208, 553: 1208, 556: 1208, 564: 1208, 1208, 568: 1208, 570: 1208, 572: 1208, 574: 1208, 577: 1208, 1208, 1208, 586: 1208}, - {1148, 1148, 9: 6114, 52: 1148, 544: 1148, 546: 1148, 553: 1148, 556: 1148, 564: 1148, 1148, 568: 1148, 570: 1148, 572: 1148, 574: 1148, 577: 1148, 1148, 1148, 586: 1148, 1148, 589: 1148}, - {1063, 1063, 52: 1063, 544: 1063, 546: 1063, 553: 1063, 556: 1063, 564: 1063, 1063, 568: 1063, 570: 1063, 572: 1063, 574: 1063, 577: 1063, 579: 1063, 586: 6586, 1063, 589: 1063, 1065: 6588, 1096: 6610}, - {2158, 2158, 52: 2158, 544: 2158, 546: 2158, 553: 2158, 556: 2158, 564: 2158, 2158, 568: 2158, 570: 2158, 572: 2158, 574: 2158, 577: 2158, 579: 2158, 587: 6611, 589: 2158, 1203: 6612}, + {1065, 1065, 52: 1065, 544: 1065, 546: 1065, 553: 1065, 556: 1065, 564: 1065, 1065, 574: 4022, 1008: 6626}, + {1222, 1222, 52: 1222, 544: 1222, 546: 1222, 553: 1222, 556: 1222, 564: 1222, 1222}, + {737: 6634}, + {1523, 1523, 52: 1523, 544: 1523, 546: 1523, 553: 1523, 556: 1523, 564: 1523, 1523, 568: 1523, 570: 1523, 572: 1523, 574: 1523, 577: 1523, 579: 3932, 857: 3986, 926: 6630}, + {1066, 1066, 52: 1066, 544: 1066, 546: 1066, 553: 1066, 556: 1066, 564: 1066, 1066, 568: 1066, 570: 1066, 572: 1066, 574: 1066, 577: 1066, 579: 1066, 587: 1066, 589: 1066}, // 3715 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 6622}, - {1207, 1207, 52: 1207, 544: 1207, 546: 1207, 553: 1207, 556: 1207, 564: 1207, 1207, 568: 1207, 570: 1207, 572: 1207, 574: 1207, 577: 1207, 579: 1207, 589: 6614, 1520: 6613}, - {1233, 1233, 52: 1233, 544: 1233, 546: 1233, 553: 1233, 556: 1233, 564: 1233, 1233, 568: 1233, 570: 1233, 572: 1233, 574: 1233, 577: 1233, 579: 1233}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4125, 3092, 3093, 3091, 1041: 6617, 1318: 6616, 1521: 6615}, - {1206, 1206, 9: 6620, 52: 1206, 544: 1206, 546: 1206, 553: 1206, 556: 1206, 564: 1206, 1206, 568: 1206, 570: 1206, 572: 1206, 574: 1206, 577: 1206, 579: 1206}, + {1088, 1088, 52: 1088, 544: 1088, 546: 1088, 553: 1088, 556: 1088, 564: 1088, 1088, 568: 3934, 570: 3933, 572: 1088, 574: 1088, 577: 1088, 858: 3991, 941: 6631}, + {1059, 1059, 52: 1059, 544: 1059, 546: 1059, 553: 1059, 556: 1059, 564: 1059, 1059, 572: 3993, 574: 1059, 577: 3994, 1007: 6632}, + {1065, 1065, 52: 1065, 544: 1065, 546: 1065, 553: 1065, 556: 1065, 564: 1065, 1065, 574: 4022, 1008: 6633}, + {1223, 1223, 52: 1223, 544: 1223, 546: 1223, 553: 1223, 556: 1223, 564: 1223, 1223}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3956, 990: 3958, 1017: 6635}, // 3720 - {1205, 1205, 9: 1205, 52: 1205, 544: 1205, 546: 1205, 553: 1205, 556: 1205, 564: 1205, 1205, 568: 1205, 570: 1205, 572: 1205, 574: 1205, 577: 1205, 579: 1205}, - {551: 6618}, - {545: 4126, 1320: 6619}, - {1203, 1203, 9: 1203, 52: 1203, 544: 1203, 546: 1203, 553: 1203, 556: 1203, 564: 1203, 1203, 568: 1203, 570: 1203, 572: 1203, 574: 1203, 577: 1203, 579: 1203}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4125, 3092, 3093, 3091, 1041: 6617, 1318: 6621}, + {2167, 2167, 9: 3959, 52: 2167, 544: 2167, 546: 6636, 553: 2167, 556: 2167, 564: 2167, 2167, 568: 2167, 570: 2167, 572: 2167, 574: 2167, 577: 2167, 579: 2167, 587: 2167, 589: 2167, 1535: 6637}, + {445: 6638}, + {2165, 2165, 52: 2165, 544: 2165, 546: 2165, 553: 2165, 556: 2165, 564: 2165, 2165, 568: 2165, 570: 2165, 572: 2165, 574: 2165, 577: 2165, 579: 2165, 587: 2165, 589: 2165}, + {2166, 2166, 52: 2166, 544: 2166, 546: 2166, 553: 2166, 556: 2166, 564: 2166, 2166, 568: 2166, 570: 2166, 572: 2166, 574: 2166, 577: 2166, 579: 2166, 587: 2166, 589: 2166}, + {436, 436, 52: 436, 544: 436, 546: 436, 553: 436, 556: 436, 564: 436, 436, 568: 436, 570: 436, 572: 436, 574: 436, 577: 436, 4748, 436, 586: 436, 904: 4749, 6664}, // 3725 - {1204, 1204, 9: 1204, 52: 1204, 544: 1204, 546: 1204, 553: 1204, 556: 1204, 564: 1204, 1204, 568: 1204, 570: 1204, 572: 1204, 574: 1204, 577: 1204, 579: 1204}, - {2157, 2157, 52: 2157, 544: 2157, 546: 2157, 553: 2157, 556: 2157, 564: 2157, 2157, 568: 2157, 570: 2157, 572: 2157, 574: 2157, 576: 2157, 2157, 2157, 2157, 581: 3801, 3799, 3800, 3798, 3796, 2157, 589: 2157, 815: 3797, 3795}, - {1234, 1234, 52: 1234, 544: 1234, 546: 1234, 553: 1234, 556: 1234, 564: 1234, 1234, 568: 1234, 570: 1234, 572: 1234, 574: 1234, 577: 1234, 579: 1234, 586: 1234}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 575: 6640, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 6641, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 6639, 1187: 6642, 1376: 6643, 1464: 6644}, - {2: 1082, 1082, 1082, 1082, 1082, 1082, 1082, 10: 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 53: 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 545: 1082, 547: 1082, 1082, 1082, 1082, 554: 1082, 1082, 557: 1082, 1082, 1082, 561: 1082, 1082, 566: 1082, 1082, 573: 1082, 575: 1082, 588: 1082, 593: 1082, 600: 1082, 1082, 633: 1082, 640: 1082, 642: 1082, 1082, 1082, 1082, 650: 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 671: 1082, 673: 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 725: 1082, 730: 1082, 843: 1082, 1082, 847: 1082, 849: 1082, 851: 1082, 855: 1082, 864: 1082, 1082, 1082}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 6105, 575: 4003, 657: 6100, 786: 4002, 3111, 3112, 3110, 6104, 819: 6103, 909: 6102, 914: 6101, 6107, 973: 6097, 1010: 6649, 1370: 6648, 1503: 6647}, + {1067, 1067, 52: 1067, 544: 1067, 546: 1067, 553: 1067, 556: 1067, 564: 1067, 1067, 568: 1067, 570: 1067, 572: 1067, 574: 1067, 577: 1067, 579: 1067, 586: 6627, 1066: 6629, 1097: 6642}, + {1523, 1523, 52: 1523, 544: 1523, 546: 1523, 553: 1523, 556: 1523, 564: 1523, 1523, 568: 1523, 570: 1523, 572: 1523, 574: 1523, 577: 1523, 579: 3932, 857: 3986, 926: 6643}, + {1088, 1088, 52: 1088, 544: 1088, 546: 1088, 553: 1088, 556: 1088, 564: 1088, 1088, 568: 3934, 570: 3933, 572: 1088, 574: 1088, 577: 1088, 858: 3991, 941: 6644}, + {1059, 1059, 52: 1059, 544: 1059, 546: 1059, 553: 1059, 556: 1059, 564: 1059, 1059, 572: 3993, 574: 1059, 577: 3994, 1007: 6645}, // 3730 - {2: 1081, 1081, 1081, 1081, 1081, 1081, 1081, 10: 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 53: 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 545: 1081, 547: 1081, 1081, 1081, 1081, 554: 1081, 1081, 557: 1081, 1081, 1081, 561: 1081, 1081, 566: 1081, 1081, 573: 1081, 575: 1081, 588: 1081, 593: 1081, 600: 1081, 1081, 633: 1081, 640: 1081, 642: 1081, 1081, 1081, 1081, 650: 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 671: 1081, 673: 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 725: 1081, 730: 1081, 843: 1081, 1081, 847: 1081, 849: 1081, 851: 1081, 855: 1081, 864: 1081, 1081, 1081}, - {2: 1080, 1080, 1080, 1080, 1080, 1080, 1080, 10: 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 53: 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 545: 1080, 547: 1080, 1080, 1080, 1080, 554: 1080, 1080, 557: 1080, 1080, 1080, 561: 1080, 1080, 566: 1080, 1080, 573: 1080, 575: 1080, 588: 1080, 593: 1080, 600: 1080, 1080, 633: 1080, 640: 1080, 642: 1080, 1080, 1080, 1080, 650: 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 671: 1080, 673: 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 725: 1080, 730: 1080, 843: 1080, 1080, 847: 1080, 849: 1080, 851: 1080, 855: 1080, 864: 1080, 1080, 1080}, - {2: 1079, 1079, 1079, 1079, 1079, 1079, 1079, 10: 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 53: 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 545: 1079, 547: 1079, 1079, 1079, 1079, 554: 1079, 1079, 557: 1079, 1079, 1079, 561: 1079, 1079, 566: 1079, 1079, 573: 1079, 575: 1079, 588: 1079, 593: 1079, 600: 1079, 1079, 633: 1079, 640: 1079, 642: 1079, 1079, 1079, 1079, 650: 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 671: 1079, 673: 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 725: 1079, 730: 1079, 843: 1079, 1079, 847: 1079, 849: 1079, 851: 1079, 855: 1079, 864: 1079, 1079, 1079}, - {2: 1078, 1078, 1078, 1078, 1078, 1078, 1078, 10: 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 53: 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 545: 1078, 547: 1078, 1078, 1078, 1078, 554: 1078, 1078, 557: 1078, 1078, 1078, 561: 1078, 1078, 566: 1078, 1078, 573: 1078, 575: 1078, 588: 1078, 593: 1078, 600: 1078, 1078, 633: 1078, 640: 1078, 642: 1078, 1078, 1078, 1078, 650: 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 671: 1078, 673: 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 725: 1078, 730: 1078, 843: 1078, 1078, 847: 1078, 849: 1078, 851: 1078, 855: 1078, 864: 1078, 1078, 1078}, - {2: 1077, 1077, 1077, 1077, 1077, 1077, 1077, 10: 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 53: 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 545: 1077, 547: 1077, 1077, 1077, 1077, 554: 1077, 1077, 557: 1077, 1077, 1077, 561: 1077, 1077, 566: 1077, 1077, 573: 1077, 575: 1077, 588: 1077, 593: 1077, 600: 1077, 1077, 633: 1077, 640: 1077, 642: 1077, 1077, 1077, 1077, 650: 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 671: 1077, 673: 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 1077, 725: 1077, 730: 1077, 843: 1077, 1077, 847: 1077, 849: 1077, 851: 1077, 855: 1077, 864: 1077, 1077, 1077}, + {1065, 1065, 52: 1065, 544: 1065, 546: 1065, 553: 1065, 556: 1065, 564: 1065, 1065, 574: 4022, 1008: 6646}, + {1224, 1224, 52: 1224, 544: 1224, 546: 1224, 553: 1224, 556: 1224, 564: 1224, 1224}, + {436, 436, 52: 436, 544: 436, 546: 436, 553: 436, 556: 436, 564: 436, 436, 568: 436, 570: 436, 572: 436, 574: 436, 577: 436, 4748, 436, 586: 436, 436, 589: 436, 904: 4749, 6650}, + {1212, 1212, 52: 1212, 544: 1212, 546: 1212, 553: 1212, 556: 1212, 564: 1212, 1212, 568: 1212, 570: 1212, 572: 1212, 574: 1212, 577: 1212, 1212, 1212, 586: 1212}, + {1152, 1152, 9: 6155, 52: 1152, 544: 1152, 546: 1152, 553: 1152, 556: 1152, 564: 1152, 1152, 568: 1152, 570: 1152, 572: 1152, 574: 1152, 577: 1152, 1152, 1152, 586: 1152, 1152, 589: 1152}, // 3735 - {2: 1076, 1076, 1076, 1076, 1076, 1076, 1076, 10: 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 53: 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 545: 1076, 547: 1076, 1076, 1076, 1076, 554: 1076, 1076, 557: 1076, 1076, 1076, 561: 1076, 1076, 566: 1076, 1076, 573: 1076, 575: 1076, 588: 1076, 593: 1076, 600: 1076, 1076, 633: 1076, 640: 1076, 642: 1076, 1076, 1076, 1076, 650: 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 671: 1076, 673: 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 725: 1076, 730: 1076, 843: 1076, 1076, 847: 1076, 849: 1076, 851: 1076, 855: 1076, 864: 1076, 1076, 1076}, - {2: 1075, 1075, 1075, 1075, 1075, 1075, 1075, 10: 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 53: 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 545: 1075, 547: 1075, 1075, 1075, 1075, 554: 1075, 1075, 557: 1075, 1075, 1075, 561: 1075, 1075, 566: 1075, 1075, 573: 1075, 575: 1075, 588: 1075, 593: 1075, 600: 1075, 1075, 633: 1075, 640: 1075, 642: 1075, 1075, 1075, 1075, 650: 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 671: 1075, 673: 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 725: 1075, 730: 1075, 843: 1075, 1075, 847: 1075, 849: 1075, 851: 1075, 855: 1075, 864: 1075, 1075, 1075}, - {2: 1074, 1074, 1074, 1074, 1074, 1074, 1074, 10: 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 53: 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 545: 1074, 547: 1074, 1074, 1074, 1074, 554: 1074, 1074, 557: 1074, 1074, 1074, 561: 1074, 1074, 566: 1074, 1074, 573: 1074, 575: 1074, 588: 1074, 593: 1074, 600: 1074, 1074, 633: 1074, 640: 1074, 642: 1074, 1074, 1074, 1074, 650: 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 671: 1074, 673: 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 725: 1074, 730: 1074, 843: 1074, 1074, 847: 1074, 849: 1074, 851: 1074, 855: 1074, 864: 1074, 1074, 1074}, - {2: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 10: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 53: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 6630, 6636, 6637, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 545: 1072, 547: 1072, 1072, 1072, 1072, 554: 1072, 1072, 557: 1072, 1072, 1072, 561: 1072, 1072, 566: 1072, 1072, 573: 1072, 575: 1072, 588: 6633, 593: 1072, 600: 1072, 1072, 633: 1072, 640: 1072, 642: 1072, 1072, 1072, 1072, 650: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 671: 1072, 673: 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 725: 1072, 730: 4233, 843: 4231, 4232, 847: 6050, 849: 6052, 851: 6051, 855: 6047, 864: 6629, 6632, 6628, 901: 6548, 903: 6626, 952: 6627, 959: 6625, 1281: 6638, 6631}, - {2: 1070, 1070, 1070, 1070, 1070, 1070, 1070, 10: 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 53: 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 545: 1070, 547: 1070, 1070, 1070, 1070, 554: 1070, 1070, 557: 1070, 1070, 1070, 561: 1070, 1070, 566: 1070, 1070, 573: 1070, 575: 1070, 588: 1070, 593: 1070, 600: 1070, 1070, 633: 1070, 640: 1070, 642: 1070, 1070, 1070, 1070, 650: 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 671: 1070, 673: 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 725: 1070, 730: 1070, 843: 1070, 1070, 847: 1070, 849: 1070, 851: 1070, 855: 1070, 864: 1070, 1070, 1070}, + {1067, 1067, 52: 1067, 544: 1067, 546: 1067, 553: 1067, 556: 1067, 564: 1067, 1067, 568: 1067, 570: 1067, 572: 1067, 574: 1067, 577: 1067, 579: 1067, 586: 6627, 1067, 589: 1067, 1066: 6629, 1097: 6651}, + {2164, 2164, 52: 2164, 544: 2164, 546: 2164, 553: 2164, 556: 2164, 564: 2164, 2164, 568: 2164, 570: 2164, 572: 2164, 574: 2164, 577: 2164, 579: 2164, 587: 6652, 589: 2164, 1205: 6653}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 6663}, + {1211, 1211, 52: 1211, 544: 1211, 546: 1211, 553: 1211, 556: 1211, 564: 1211, 1211, 568: 1211, 570: 1211, 572: 1211, 574: 1211, 577: 1211, 579: 1211, 589: 6655, 1527: 6654}, + {1237, 1237, 52: 1237, 544: 1237, 546: 1237, 553: 1237, 556: 1237, 564: 1237, 1237, 568: 1237, 570: 1237, 572: 1237, 574: 1237, 577: 1237, 579: 1237}, // 3740 - {2: 1066, 1066, 1066, 1066, 1066, 1066, 1066, 10: 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 53: 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 545: 1066, 547: 1066, 1066, 1066, 1066, 554: 1066, 1066, 557: 1066, 1066, 1066, 561: 1066, 1066, 566: 1066, 1066, 573: 1066, 575: 1066, 588: 1066, 593: 1066, 600: 1066, 1066, 633: 1066, 640: 1066, 642: 1066, 1066, 1066, 1066, 650: 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 671: 1066, 673: 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 725: 1066, 730: 1066, 843: 1066, 1066, 847: 1066, 849: 1066, 851: 1066, 855: 1066, 864: 1066, 1066, 1066}, - {2: 1065, 1065, 1065, 1065, 1065, 1065, 1065, 10: 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 53: 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 545: 1065, 547: 1065, 1065, 1065, 1065, 554: 1065, 1065, 557: 1065, 1065, 1065, 561: 1065, 1065, 566: 1065, 1065, 573: 1065, 575: 1065, 588: 1065, 593: 1065, 600: 1065, 1065, 633: 1065, 640: 1065, 642: 1065, 1065, 1065, 1065, 650: 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 671: 1065, 673: 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 725: 1065, 730: 1065, 843: 1065, 1065, 847: 1065, 849: 1065, 851: 1065, 855: 1065, 864: 1065, 1065, 1065}, - {2: 1071, 1071, 1071, 1071, 1071, 1071, 1071, 10: 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 53: 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 545: 1071, 547: 1071, 1071, 1071, 1071, 554: 1071, 1071, 557: 1071, 1071, 1071, 561: 1071, 1071, 566: 1071, 1071, 573: 1071, 575: 1071, 588: 1071, 593: 1071, 600: 1071, 1071, 633: 1071, 640: 1071, 642: 1071, 1071, 1071, 1071, 650: 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 671: 1071, 673: 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, 725: 1071, 730: 1071, 843: 1071, 1071, 847: 1071, 849: 1071, 851: 1071, 855: 1071, 864: 1071, 1071, 1071}, - {2169, 2169, 3341, 3505, 3305, 3180, 3221, 3343, 3105, 2169, 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 2169, 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 2169, 546: 2169, 6657, 551: 6656, 553: 2169, 556: 2169, 564: 2169, 2169, 568: 2169, 570: 2169, 572: 2169, 574: 2169, 576: 2169, 2169, 2169, 2169, 581: 3801, 3799, 3800, 3798, 3796, 2169, 2169, 786: 6655, 3092, 3093, 3091, 815: 3797, 3795, 1373: 6654, 6653}, - {2173, 2173, 9: 2173, 52: 2173, 544: 2173, 546: 2173, 553: 2173, 556: 2173, 564: 2173, 2173, 568: 2173, 570: 2173, 572: 2173, 574: 2173, 576: 2173, 2173, 2173, 2173, 586: 2173, 2173}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4144, 3111, 3112, 3110, 1041: 6658, 1322: 6657, 1528: 6656}, + {1210, 1210, 9: 6661, 52: 1210, 544: 1210, 546: 1210, 553: 1210, 556: 1210, 564: 1210, 1210, 568: 1210, 570: 1210, 572: 1210, 574: 1210, 577: 1210, 579: 1210}, + {1209, 1209, 9: 1209, 52: 1209, 544: 1209, 546: 1209, 553: 1209, 556: 1209, 564: 1209, 1209, 568: 1209, 570: 1209, 572: 1209, 574: 1209, 577: 1209, 579: 1209}, + {551: 6659}, + {545: 4145, 1324: 6660}, // 3745 - {1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 546: 1501, 1501, 1501, 550: 1501, 1501, 1501, 1501, 556: 1501, 1501, 1501, 1501, 564: 1501, 1501, 568: 1501, 1501, 1501, 572: 1501, 574: 1501, 1501, 1501, 1501, 1501, 1501, 581: 1501, 1501, 1501, 1501, 1501, 1501, 1501, 597: 1501, 620: 1501, 623: 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 1501, 634: 1501, 1501, 1501, 1501, 1501, 1501, 641: 1501, 646: 1501, 1501, 1501, 1501, 718: 1501, 729: 6648, 733: 1501, 1501}, - {2163, 2163, 9: 2163, 52: 2163, 544: 2163, 546: 2163, 553: 2163, 556: 2163, 564: 2163, 2163, 568: 2163, 570: 2163, 572: 2163, 574: 2163, 576: 2163, 2163, 2163, 2163, 586: 2163, 2163}, - {1064, 1064, 9: 6646, 52: 1064, 544: 1064, 546: 1064, 553: 1064, 556: 1064, 564: 1064, 1064, 568: 1064, 570: 1064, 572: 1064, 574: 1064, 576: 1064, 1064, 1064, 1064, 586: 1064, 1064}, - {2158, 2158, 52: 2158, 544: 2158, 546: 2158, 553: 2158, 556: 2158, 564: 2158, 2158, 568: 2158, 570: 2158, 572: 2158, 574: 2158, 576: 2158, 2158, 2158, 2158, 586: 2158, 6611, 1203: 6645}, - {1235, 1235, 52: 1235, 544: 1235, 546: 1235, 553: 1235, 556: 1235, 564: 1235, 1235, 568: 1235, 570: 1235, 572: 1235, 574: 1235, 576: 1235, 1235, 1235, 1235, 586: 1235}, + {1207, 1207, 9: 1207, 52: 1207, 544: 1207, 546: 1207, 553: 1207, 556: 1207, 564: 1207, 1207, 568: 1207, 570: 1207, 572: 1207, 574: 1207, 577: 1207, 579: 1207}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4144, 3111, 3112, 3110, 1041: 6658, 1322: 6662}, + {1208, 1208, 9: 1208, 52: 1208, 544: 1208, 546: 1208, 553: 1208, 556: 1208, 564: 1208, 1208, 568: 1208, 570: 1208, 572: 1208, 574: 1208, 577: 1208, 579: 1208}, + {2163, 2163, 52: 2163, 544: 2163, 546: 2163, 553: 2163, 556: 2163, 564: 2163, 2163, 568: 2163, 570: 2163, 572: 2163, 574: 2163, 576: 2163, 2163, 2163, 2163, 581: 3820, 3818, 3819, 3817, 3815, 2163, 589: 2163, 815: 3816, 3814}, + {1238, 1238, 52: 1238, 544: 1238, 546: 1238, 553: 1238, 556: 1238, 564: 1238, 1238, 568: 1238, 570: 1238, 572: 1238, 574: 1238, 577: 1238, 579: 1238, 586: 1238}, // 3750 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 575: 6640, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 6641, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 6639, 1187: 6647}, - {2162, 2162, 9: 2162, 52: 2162, 544: 2162, 546: 2162, 553: 2162, 556: 2162, 564: 2162, 2162, 568: 2162, 570: 2162, 572: 2162, 574: 2162, 576: 2162, 2162, 2162, 2162, 586: 2162, 2162}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 6649, 786: 6650, 3092, 3093, 3091}, - {2172, 2172, 9: 2172, 52: 2172, 544: 2172, 546: 2172, 553: 2172, 556: 2172, 564: 2172, 2172, 568: 2172, 570: 2172, 572: 2172, 574: 2172, 576: 2172, 2172, 2172, 2172, 586: 2172, 2172}, - {1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 4544, 1500, 1500, 1500, 550: 1500, 1500, 1500, 1500, 556: 1500, 1500, 1500, 1500, 564: 1500, 1500, 568: 1500, 1500, 1500, 572: 1500, 574: 1500, 1500, 1500, 1500, 1500, 1500, 581: 1500, 1500, 1500, 1500, 1500, 1500, 1500, 597: 1500, 620: 1500, 623: 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 634: 1500, 1500, 1500, 1500, 1500, 1500, 641: 1500, 646: 1500, 1500, 1500, 1500, 718: 1500, 729: 6651, 733: 1500, 1500}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 575: 6681, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 6682, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 6680, 1189: 6683, 1380: 6684, 1469: 6685}, + {2: 1086, 1086, 1086, 1086, 1086, 1086, 1086, 10: 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 53: 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 545: 1086, 547: 1086, 1086, 1086, 1086, 554: 1086, 1086, 557: 1086, 1086, 1086, 561: 1086, 1086, 566: 1086, 1086, 573: 1086, 575: 1086, 588: 1086, 593: 1086, 600: 1086, 1086, 633: 1086, 640: 1086, 1086, 643: 1086, 1086, 1086, 650: 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 659: 1086, 1086, 1086, 663: 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 673: 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 711: 1086, 1086, 1086, 1086, 1086, 1086, 725: 1086, 730: 1086, 843: 1086, 1086, 847: 1086, 849: 1086, 851: 1086, 855: 1086, 864: 1086, 1086, 1086}, + {2: 1085, 1085, 1085, 1085, 1085, 1085, 1085, 10: 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 53: 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 545: 1085, 547: 1085, 1085, 1085, 1085, 554: 1085, 1085, 557: 1085, 1085, 1085, 561: 1085, 1085, 566: 1085, 1085, 573: 1085, 575: 1085, 588: 1085, 593: 1085, 600: 1085, 1085, 633: 1085, 640: 1085, 1085, 643: 1085, 1085, 1085, 650: 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 659: 1085, 1085, 1085, 663: 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 673: 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 711: 1085, 1085, 1085, 1085, 1085, 1085, 725: 1085, 730: 1085, 843: 1085, 1085, 847: 1085, 849: 1085, 851: 1085, 855: 1085, 864: 1085, 1085, 1085}, + {2: 1084, 1084, 1084, 1084, 1084, 1084, 1084, 10: 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 53: 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 545: 1084, 547: 1084, 1084, 1084, 1084, 554: 1084, 1084, 557: 1084, 1084, 1084, 561: 1084, 1084, 566: 1084, 1084, 573: 1084, 575: 1084, 588: 1084, 593: 1084, 600: 1084, 1084, 633: 1084, 640: 1084, 1084, 643: 1084, 1084, 1084, 650: 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 659: 1084, 1084, 1084, 663: 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 673: 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, 711: 1084, 1084, 1084, 1084, 1084, 1084, 725: 1084, 730: 1084, 843: 1084, 1084, 847: 1084, 849: 1084, 851: 1084, 855: 1084, 864: 1084, 1084, 1084}, + {2: 1083, 1083, 1083, 1083, 1083, 1083, 1083, 10: 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 53: 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 545: 1083, 547: 1083, 1083, 1083, 1083, 554: 1083, 1083, 557: 1083, 1083, 1083, 561: 1083, 1083, 566: 1083, 1083, 573: 1083, 575: 1083, 588: 1083, 593: 1083, 600: 1083, 1083, 633: 1083, 640: 1083, 1083, 643: 1083, 1083, 1083, 650: 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 659: 1083, 1083, 1083, 663: 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 673: 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 711: 1083, 1083, 1083, 1083, 1083, 1083, 725: 1083, 730: 1083, 843: 1083, 1083, 847: 1083, 849: 1083, 851: 1083, 855: 1083, 864: 1083, 1083, 1083}, // 3755 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 6652, 786: 3963, 3092, 3093, 3091}, - {2171, 2171, 9: 2171, 52: 2171, 544: 2171, 546: 2171, 553: 2171, 556: 2171, 564: 2171, 2171, 568: 2171, 570: 2171, 572: 2171, 574: 2171, 576: 2171, 2171, 2171, 2171, 586: 2171, 2171}, - {2170, 2170, 9: 2170, 52: 2170, 544: 2170, 546: 2170, 553: 2170, 556: 2170, 564: 2170, 2170, 568: 2170, 570: 2170, 572: 2170, 574: 2170, 576: 2170, 2170, 2170, 2170, 586: 2170, 2170}, - {2168, 2168, 9: 2168, 52: 2168, 544: 2168, 546: 2168, 553: 2168, 556: 2168, 564: 2168, 2168, 568: 2168, 570: 2168, 572: 2168, 574: 2168, 576: 2168, 2168, 2168, 2168, 586: 2168, 2168}, - {2167, 2167, 9: 2167, 52: 2167, 544: 2167, 546: 2167, 553: 2167, 556: 2167, 564: 2167, 2167, 568: 2167, 570: 2167, 572: 2167, 574: 2167, 576: 2167, 2167, 2167, 2167, 586: 2167, 2167}, + {2: 1082, 1082, 1082, 1082, 1082, 1082, 1082, 10: 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 53: 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 545: 1082, 547: 1082, 1082, 1082, 1082, 554: 1082, 1082, 557: 1082, 1082, 1082, 561: 1082, 1082, 566: 1082, 1082, 573: 1082, 575: 1082, 588: 1082, 593: 1082, 600: 1082, 1082, 633: 1082, 640: 1082, 1082, 643: 1082, 1082, 1082, 650: 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 659: 1082, 1082, 1082, 663: 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 673: 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 1082, 711: 1082, 1082, 1082, 1082, 1082, 1082, 725: 1082, 730: 1082, 843: 1082, 1082, 847: 1082, 849: 1082, 851: 1082, 855: 1082, 864: 1082, 1082, 1082}, + {2: 1081, 1081, 1081, 1081, 1081, 1081, 1081, 10: 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 53: 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 545: 1081, 547: 1081, 1081, 1081, 1081, 554: 1081, 1081, 557: 1081, 1081, 1081, 561: 1081, 1081, 566: 1081, 1081, 573: 1081, 575: 1081, 588: 1081, 593: 1081, 600: 1081, 1081, 633: 1081, 640: 1081, 1081, 643: 1081, 1081, 1081, 650: 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 659: 1081, 1081, 1081, 663: 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 673: 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 711: 1081, 1081, 1081, 1081, 1081, 1081, 725: 1081, 730: 1081, 843: 1081, 1081, 847: 1081, 849: 1081, 851: 1081, 855: 1081, 864: 1081, 1081, 1081}, + {2: 1080, 1080, 1080, 1080, 1080, 1080, 1080, 10: 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 53: 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 545: 1080, 547: 1080, 1080, 1080, 1080, 554: 1080, 1080, 557: 1080, 1080, 1080, 561: 1080, 1080, 566: 1080, 1080, 573: 1080, 575: 1080, 588: 1080, 593: 1080, 600: 1080, 1080, 633: 1080, 640: 1080, 1080, 643: 1080, 1080, 1080, 650: 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 659: 1080, 1080, 1080, 663: 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 673: 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, 711: 1080, 1080, 1080, 1080, 1080, 1080, 725: 1080, 730: 1080, 843: 1080, 1080, 847: 1080, 849: 1080, 851: 1080, 855: 1080, 864: 1080, 1080, 1080}, + {2: 1079, 1079, 1079, 1079, 1079, 1079, 1079, 10: 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 53: 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 545: 1079, 547: 1079, 1079, 1079, 1079, 554: 1079, 1079, 557: 1079, 1079, 1079, 561: 1079, 1079, 566: 1079, 1079, 573: 1079, 575: 1079, 588: 1079, 593: 1079, 600: 1079, 1079, 633: 1079, 640: 1079, 1079, 643: 1079, 1079, 1079, 650: 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 659: 1079, 1079, 1079, 663: 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 673: 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 711: 1079, 1079, 1079, 1079, 1079, 1079, 725: 1079, 730: 1079, 843: 1079, 1079, 847: 1079, 849: 1079, 851: 1079, 855: 1079, 864: 1079, 1079, 1079}, + {2: 1078, 1078, 1078, 1078, 1078, 1078, 1078, 10: 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 53: 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 545: 1078, 547: 1078, 1078, 1078, 1078, 554: 1078, 1078, 557: 1078, 1078, 1078, 561: 1078, 1078, 566: 1078, 1078, 573: 1078, 575: 1078, 588: 1078, 593: 1078, 600: 1078, 1078, 633: 1078, 640: 1078, 1078, 643: 1078, 1078, 1078, 650: 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 659: 1078, 1078, 1078, 663: 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 673: 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 1078, 711: 1078, 1078, 1078, 1078, 1078, 1078, 725: 1078, 730: 1078, 843: 1078, 1078, 847: 1078, 849: 1078, 851: 1078, 855: 1078, 864: 1078, 1078, 1078}, // 3760 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 6659, 786: 6658, 3092, 3093, 3091}, - {2165, 2165, 9: 2165, 52: 2165, 544: 2165, 546: 2165, 553: 2165, 556: 2165, 564: 2165, 2165, 568: 2165, 570: 2165, 572: 2165, 574: 2165, 576: 2165, 2165, 2165, 2165, 586: 2165, 2165}, - {2166, 2166, 9: 2166, 52: 2166, 544: 2166, 546: 2166, 553: 2166, 556: 2166, 564: 2166, 2166, 568: 2166, 570: 2166, 572: 2166, 574: 2166, 576: 2166, 2166, 2166, 2166, 586: 2166, 2166}, - {2164, 2164, 9: 2164, 52: 2164, 544: 2164, 546: 2164, 553: 2164, 556: 2164, 564: 2164, 2164, 568: 2164, 570: 2164, 572: 2164, 574: 2164, 576: 2164, 2164, 2164, 2164, 586: 2164, 2164}, - {1236, 1236}, + {2: 1076, 1076, 1076, 1076, 1076, 1076, 1076, 10: 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 53: 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 6671, 6677, 6678, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 545: 1076, 547: 1076, 1076, 1076, 1076, 554: 1076, 1076, 557: 1076, 1076, 1076, 561: 1076, 1076, 566: 1076, 1076, 573: 1076, 575: 1076, 588: 6674, 593: 1076, 600: 1076, 1076, 633: 1076, 640: 1076, 1076, 643: 1076, 1076, 1076, 650: 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 659: 1076, 1076, 1076, 663: 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 673: 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, 711: 1076, 1076, 1076, 1076, 1076, 1076, 725: 1076, 730: 4252, 843: 4250, 4251, 847: 6091, 849: 6093, 851: 6092, 855: 6088, 864: 6670, 6673, 6669, 901: 6589, 903: 6667, 952: 6668, 959: 6666, 1283: 6679, 6672}, + {2: 1074, 1074, 1074, 1074, 1074, 1074, 1074, 10: 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 53: 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 545: 1074, 547: 1074, 1074, 1074, 1074, 554: 1074, 1074, 557: 1074, 1074, 1074, 561: 1074, 1074, 566: 1074, 1074, 573: 1074, 575: 1074, 588: 1074, 593: 1074, 600: 1074, 1074, 633: 1074, 640: 1074, 1074, 643: 1074, 1074, 1074, 650: 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 659: 1074, 1074, 1074, 663: 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 673: 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 1074, 711: 1074, 1074, 1074, 1074, 1074, 1074, 725: 1074, 730: 1074, 843: 1074, 1074, 847: 1074, 849: 1074, 851: 1074, 855: 1074, 864: 1074, 1074, 1074}, + {2: 1070, 1070, 1070, 1070, 1070, 1070, 1070, 10: 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 53: 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 545: 1070, 547: 1070, 1070, 1070, 1070, 554: 1070, 1070, 557: 1070, 1070, 1070, 561: 1070, 1070, 566: 1070, 1070, 573: 1070, 575: 1070, 588: 1070, 593: 1070, 600: 1070, 1070, 633: 1070, 640: 1070, 1070, 643: 1070, 1070, 1070, 650: 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 659: 1070, 1070, 1070, 663: 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 673: 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 1070, 711: 1070, 1070, 1070, 1070, 1070, 1070, 725: 1070, 730: 1070, 843: 1070, 1070, 847: 1070, 849: 1070, 851: 1070, 855: 1070, 864: 1070, 1070, 1070}, + {2: 1069, 1069, 1069, 1069, 1069, 1069, 1069, 10: 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 53: 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 545: 1069, 547: 1069, 1069, 1069, 1069, 554: 1069, 1069, 557: 1069, 1069, 1069, 561: 1069, 1069, 566: 1069, 1069, 573: 1069, 575: 1069, 588: 1069, 593: 1069, 600: 1069, 1069, 633: 1069, 640: 1069, 1069, 643: 1069, 1069, 1069, 650: 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 659: 1069, 1069, 1069, 663: 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 673: 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 711: 1069, 1069, 1069, 1069, 1069, 1069, 725: 1069, 730: 1069, 843: 1069, 1069, 847: 1069, 849: 1069, 851: 1069, 855: 1069, 864: 1069, 1069, 1069}, + {2: 1075, 1075, 1075, 1075, 1075, 1075, 1075, 10: 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 53: 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 545: 1075, 547: 1075, 1075, 1075, 1075, 554: 1075, 1075, 557: 1075, 1075, 1075, 561: 1075, 1075, 566: 1075, 1075, 573: 1075, 575: 1075, 588: 1075, 593: 1075, 600: 1075, 1075, 633: 1075, 640: 1075, 1075, 643: 1075, 1075, 1075, 650: 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 659: 1075, 1075, 1075, 663: 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 673: 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 711: 1075, 1075, 1075, 1075, 1075, 1075, 725: 1075, 730: 1075, 843: 1075, 1075, 847: 1075, 849: 1075, 851: 1075, 855: 1075, 864: 1075, 1075, 1075}, // 3765 - {1248, 1248}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 6675, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6676, 3092, 3093, 3091}, - {95: 6668, 298: 6667}, - {1240, 1240}, - {912: 6666}, + {2175, 2175, 3360, 3524, 3324, 3199, 3240, 3362, 3124, 2175, 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 2175, 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 2175, 546: 2175, 6698, 551: 6697, 553: 2175, 556: 2175, 564: 2175, 2175, 568: 2175, 570: 2175, 572: 2175, 574: 2175, 576: 2175, 2175, 2175, 2175, 581: 3820, 3818, 3819, 3817, 3815, 2175, 2175, 786: 6696, 3111, 3112, 3110, 815: 3816, 3814, 1377: 6695, 6694}, + {2179, 2179, 9: 2179, 52: 2179, 544: 2179, 546: 2179, 553: 2179, 556: 2179, 564: 2179, 2179, 568: 2179, 570: 2179, 572: 2179, 574: 2179, 576: 2179, 2179, 2179, 2179, 586: 2179, 2179}, + {1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 546: 1505, 1505, 1505, 550: 1505, 1505, 1505, 1505, 556: 1505, 1505, 1505, 1505, 564: 1505, 1505, 568: 1505, 1505, 1505, 572: 1505, 574: 1505, 1505, 1505, 1505, 1505, 1505, 581: 1505, 1505, 1505, 1505, 1505, 1505, 1505, 597: 1505, 620: 1505, 623: 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 1505, 634: 1505, 1505, 1505, 1505, 1505, 1505, 642: 1505, 646: 1505, 1505, 1505, 1505, 721: 1505, 729: 6689, 733: 1505, 1505}, + {2169, 2169, 9: 2169, 52: 2169, 544: 2169, 546: 2169, 553: 2169, 556: 2169, 564: 2169, 2169, 568: 2169, 570: 2169, 572: 2169, 574: 2169, 576: 2169, 2169, 2169, 2169, 586: 2169, 2169}, + {1068, 1068, 9: 6687, 52: 1068, 544: 1068, 546: 1068, 553: 1068, 556: 1068, 564: 1068, 1068, 568: 1068, 570: 1068, 572: 1068, 574: 1068, 576: 1068, 1068, 1068, 1068, 586: 1068, 1068}, // 3770 - {1239, 1239}, - {1242, 1242, 95: 6673}, - {298: 6669}, - {1241, 1241, 95: 6671, 912: 6670}, - {1244, 1244}, + {2164, 2164, 52: 2164, 544: 2164, 546: 2164, 553: 2164, 556: 2164, 564: 2164, 2164, 568: 2164, 570: 2164, 572: 2164, 574: 2164, 576: 2164, 2164, 2164, 2164, 586: 2164, 6652, 1205: 6686}, + {1239, 1239, 52: 1239, 544: 1239, 546: 1239, 553: 1239, 556: 1239, 564: 1239, 1239, 568: 1239, 570: 1239, 572: 1239, 574: 1239, 576: 1239, 1239, 1239, 1239, 586: 1239}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 575: 6681, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 6682, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 6680, 1189: 6688}, + {2168, 2168, 9: 2168, 52: 2168, 544: 2168, 546: 2168, 553: 2168, 556: 2168, 564: 2168, 2168, 568: 2168, 570: 2168, 572: 2168, 574: 2168, 576: 2168, 2168, 2168, 2168, 586: 2168, 2168}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 6690, 786: 6691, 3111, 3112, 3110}, // 3775 - {912: 6672}, - {1243, 1243}, - {912: 6674}, - {1245, 1245}, - {1929, 1929, 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6677, 3092, 3093, 3091}, + {2178, 2178, 9: 2178, 52: 2178, 544: 2178, 546: 2178, 553: 2178, 556: 2178, 564: 2178, 2178, 568: 2178, 570: 2178, 572: 2178, 574: 2178, 576: 2178, 2178, 2178, 2178, 586: 2178, 2178}, + {1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 4563, 1504, 1504, 1504, 550: 1504, 1504, 1504, 1504, 556: 1504, 1504, 1504, 1504, 564: 1504, 1504, 568: 1504, 1504, 1504, 572: 1504, 574: 1504, 1504, 1504, 1504, 1504, 1504, 581: 1504, 1504, 1504, 1504, 1504, 1504, 1504, 597: 1504, 620: 1504, 623: 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 1504, 634: 1504, 1504, 1504, 1504, 1504, 1504, 642: 1504, 646: 1504, 1504, 1504, 1504, 721: 1504, 729: 6692, 733: 1504, 1504}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 6693, 786: 3982, 3111, 3112, 3110}, + {2177, 2177, 9: 2177, 52: 2177, 544: 2177, 546: 2177, 553: 2177, 556: 2177, 564: 2177, 2177, 568: 2177, 570: 2177, 572: 2177, 574: 2177, 576: 2177, 2177, 2177, 2177, 586: 2177, 2177}, + {2176, 2176, 9: 2176, 52: 2176, 544: 2176, 546: 2176, 553: 2176, 556: 2176, 564: 2176, 2176, 568: 2176, 570: 2176, 572: 2176, 574: 2176, 576: 2176, 2176, 2176, 2176, 586: 2176, 2176}, // 3780 - {1247, 1247}, - {1246, 1246}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6679, 3092, 3093, 3091}, - {1252, 1252}, - {1256, 1256, 556: 6681}, + {2174, 2174, 9: 2174, 52: 2174, 544: 2174, 546: 2174, 553: 2174, 556: 2174, 564: 2174, 2174, 568: 2174, 570: 2174, 572: 2174, 574: 2174, 576: 2174, 2174, 2174, 2174, 586: 2174, 2174}, + {2173, 2173, 9: 2173, 52: 2173, 544: 2173, 546: 2173, 553: 2173, 556: 2173, 564: 2173, 2173, 568: 2173, 570: 2173, 572: 2173, 574: 2173, 576: 2173, 2173, 2173, 2173, 586: 2173, 2173}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 6700, 786: 6699, 3111, 3112, 3110}, + {2171, 2171, 9: 2171, 52: 2171, 544: 2171, 546: 2171, 553: 2171, 556: 2171, 564: 2171, 2171, 568: 2171, 570: 2171, 572: 2171, 574: 2171, 576: 2171, 2171, 2171, 2171, 586: 2171, 2171}, + {2172, 2172, 9: 2172, 52: 2172, 544: 2172, 546: 2172, 553: 2172, 556: 2172, 564: 2172, 2172, 568: 2172, 570: 2172, 572: 2172, 574: 2172, 576: 2172, 2172, 2172, 2172, 586: 2172, 2172}, // 3785 - {643: 3737, 791: 6683, 1506: 6682}, - {1255, 1255, 9: 6684}, - {1254, 1254, 9: 1254}, - {643: 3737, 791: 6685}, - {1253, 1253, 9: 1253}, + {2170, 2170, 9: 2170, 52: 2170, 544: 2170, 546: 2170, 553: 2170, 556: 2170, 564: 2170, 2170, 568: 2170, 570: 2170, 572: 2170, 574: 2170, 576: 2170, 2170, 2170, 2170, 586: 2170, 2170}, + {1240, 1240}, + {1252, 1252}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 6716, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6717, 3111, 3112, 3110}, + {97: 6709, 299: 6708}, // 3790 - {576: 6687}, - {547: 6689, 643: 3737, 791: 6690, 1439: 6688}, - {1259, 1259}, - {1258, 1258}, - {1257, 1257}, + {1244, 1244}, + {912: 6707}, + {1243, 1243}, + {1246, 1246, 97: 6714}, + {299: 6710}, // 3795 - {2: 1274, 1274, 1274, 1274, 1274, 1274, 1274, 10: 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 53: 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 574: 1274, 1274, 847: 6050, 849: 6052, 851: 6051, 952: 6053, 1006: 6692}, - {2: 1575, 1575, 1575, 1575, 1575, 1575, 1575, 10: 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 53: 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 574: 6693, 1575, 1211: 6694}, - {2: 1574, 1574, 1574, 1574, 1574, 1574, 1574, 10: 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 53: 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 575: 1574}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 6695}, - {197: 1138, 545: 1138, 1138, 560: 6118, 562: 1138, 571: 1138, 622: 1138, 670: 1138, 981: 6696}, + {1245, 1245, 97: 6712, 912: 6711}, + {1248, 1248}, + {912: 6713}, + {1247, 1247}, + {912: 6715}, // 3800 - {197: 6704, 545: 6697, 2948, 562: 6705, 571: 6703, 622: 2946, 670: 2942, 790: 6702, 821: 6700, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 3902, 6701, 6699, 1112: 6698, 1210: 6706}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 2651, 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 2949, 2948, 562: 2947, 622: 2946, 670: 2942, 786: 4083, 3092, 3093, 3091, 6560, 821: 3903, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 3902, 3905, 3904, 836: 4084, 918: 5701, 1140: 6719}, - {545: 3949, 956: 6716, 1110: 6715}, - {1567, 1567, 544: 1567, 556: 1567}, - {1566, 1566, 544: 1566, 553: 1030, 556: 1566, 564: 1030, 1030}, + {1249, 1249}, + {1933, 1933, 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6718, 3111, 3112, 3110}, + {1251, 1251}, + {1250, 1250}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6720, 3111, 3112, 3110}, // 3805 - {1565, 1565, 544: 1565, 556: 1565}, - {1564, 1564, 544: 1564, 553: 1029, 556: 1564, 564: 1029, 1029, 568: 3915, 570: 3914, 579: 3913, 857: 3916, 3917}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 6708, 1352: 6707}, - {545: 1562}, - {545: 1561, 653: 3948, 1030: 3947, 1111: 3946}, + {1256, 1256}, + {1260, 1260, 556: 6722}, + {641: 3756, 791: 6724, 1513: 6723}, + {1259, 1259, 9: 6725}, + {1258, 1258, 9: 1258}, // 3810 - {1547, 1547, 556: 1547}, - {1563, 1563, 9: 6711, 544: 1563, 556: 1563}, - {569: 6180, 732: 6181, 907: 6709}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3955, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3951, 908: 6710}, - {1551, 1551, 9: 1551, 544: 1551, 556: 1551}, + {641: 3756, 791: 6726}, + {1257, 1257, 9: 1257}, + {576: 6728}, + {547: 6730, 641: 3756, 791: 6731, 1444: 6729}, + {1263, 1263}, // 3815 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 6712}, - {569: 6180, 732: 6181, 907: 6713}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3955, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3951, 908: 6714}, - {1550, 1550, 9: 1550, 544: 1550, 556: 1550}, - {1568, 1568, 9: 6717, 544: 1568, 556: 1568}, + {1262, 1262}, + {1261, 1261}, + {2: 1278, 1278, 1278, 1278, 1278, 1278, 1278, 10: 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 53: 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 574: 1278, 1278, 847: 6091, 849: 6093, 851: 6092, 952: 6094, 1006: 6733}, + {2: 1579, 1579, 1579, 1579, 1579, 1579, 1579, 10: 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 53: 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 574: 6734, 1579, 1213: 6735}, + {2: 1578, 1578, 1578, 1578, 1578, 1578, 1578, 10: 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 53: 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 575: 1578}, // 3820 - {1560, 1560, 9: 1560, 544: 1560, 556: 1560}, - {545: 3949, 956: 6718}, - {1559, 1559, 9: 1559, 544: 1559, 556: 1559}, - {52: 6720}, - {197: 6704, 545: 2949, 2948, 562: 6705, 622: 2946, 670: 2942, 790: 6725, 821: 6723, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 3902, 6724, 6722, 1112: 6721}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 6736}, + {198: 1142, 545: 1142, 1142, 560: 6159, 562: 1142, 571: 1142, 622: 1142, 662: 1142, 981: 6737}, + {198: 6745, 545: 6738, 2967, 562: 6746, 571: 6744, 622: 2965, 662: 2961, 790: 6743, 821: 6741, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 3921, 6742, 6740, 1114: 6739, 1212: 6747}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 2666, 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 2968, 2967, 562: 2966, 622: 2965, 662: 2961, 786: 4102, 3111, 3112, 3110, 6601, 821: 3922, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 3921, 3924, 3923, 836: 4103, 918: 5729, 1142: 6760}, + {545: 3968, 956: 6757, 1112: 6756}, // 3825 - {545: 3949, 956: 6716, 1110: 6726}, - {1572, 1572, 544: 1572, 556: 1572}, - {1571, 1571, 544: 1571, 553: 1030, 556: 1571, 564: 1030, 1030}, - {1570, 1570, 544: 1570, 556: 1570}, - {1569, 1569, 544: 1569, 553: 1029, 556: 1569, 564: 1029, 1029, 568: 3915, 570: 3914, 579: 3913, 857: 3916, 3917}, + {1571, 1571, 544: 1571, 556: 1571}, + {1570, 1570, 544: 1570, 553: 1034, 556: 1570, 564: 1034, 1034}, + {1569, 1569, 544: 1569, 556: 1569}, + {1568, 1568, 544: 1568, 553: 1033, 556: 1568, 564: 1033, 1033, 568: 3934, 570: 3933, 579: 3932, 857: 3935, 3936}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 6749, 1356: 6748}, // 3830 - {1573, 1573, 9: 6717, 544: 1573, 556: 1573}, - {2: 1274, 1274, 1274, 1274, 1274, 1274, 1274, 10: 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 53: 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 563: 1274, 574: 1274, 1274, 847: 6050, 849: 6052, 851: 6051, 952: 6053, 1006: 6728}, - {2: 2149, 2149, 2149, 2149, 2149, 2149, 2149, 10: 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 53: 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 563: 4743, 574: 2149, 2149, 976: 6729}, - {2: 1575, 1575, 1575, 1575, 1575, 1575, 1575, 10: 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 53: 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 1575, 574: 6693, 1575, 1211: 6730}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 6731}, + {545: 1566}, + {545: 1565, 653: 3967, 1030: 3966, 1113: 3965}, + {1551, 1551, 556: 1551}, + {1567, 1567, 9: 6752, 544: 1567, 556: 1567}, + {569: 6221, 732: 6222, 907: 6750}, // 3835 - {197: 1138, 545: 1138, 1138, 560: 6118, 562: 1138, 571: 1138, 622: 1138, 670: 1138, 981: 6732}, - {197: 6704, 545: 6697, 2948, 562: 6705, 571: 6703, 622: 2946, 670: 2942, 790: 6702, 821: 6700, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 3902, 6701, 6699, 1112: 6698, 1210: 6733}, - {1549, 1549, 544: 6735, 556: 1549, 1415: 6734}, - {1576, 1576, 556: 1576}, - {315: 6736}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3974, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3970, 908: 6751}, + {1555, 1555, 9: 1555, 544: 1555, 556: 1555}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 6753}, + {569: 6221, 732: 6222, 907: 6754}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3974, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3970, 908: 6755}, // 3840 - {669: 6737}, - {728: 6738}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 6169, 1013: 6170, 1042: 6739}, - {1548, 1548, 9: 6172, 556: 1548}, - {1580, 1580, 545: 6748, 729: 2124}, + {1554, 1554, 9: 1554, 544: 1554, 556: 1554}, + {1572, 1572, 9: 6758, 544: 1572, 556: 1572}, + {1564, 1564, 9: 1564, 544: 1564, 556: 1564}, + {545: 3968, 956: 6759}, + {1563, 1563, 9: 1563, 544: 1563, 556: 1563}, // 3845 - {1581, 1581}, - {729: 6743}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6744, 3092, 3093, 3091}, - {1579, 1579, 545: 6745}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 2218, 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3898, 874: 4404, 938: 6746}, + {52: 6761}, + {198: 6745, 545: 2968, 2967, 562: 6746, 622: 2965, 662: 2961, 790: 6766, 821: 6764, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 3921, 6765, 6763, 1114: 6762}, + {545: 3968, 956: 6757, 1112: 6767}, + {1576, 1576, 544: 1576, 556: 1576}, + {1575, 1575, 544: 1575, 553: 1034, 556: 1575, 564: 1034, 1034}, // 3850 - {52: 6747}, - {1577, 1577}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 2218, 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 3898, 874: 4404, 938: 6749}, - {52: 6750}, - {1578, 1578}, + {1574, 1574, 544: 1574, 556: 1574}, + {1573, 1573, 544: 1573, 553: 1033, 556: 1573, 564: 1033, 1033, 568: 3934, 570: 3933, 579: 3932, 857: 3935, 3936}, + {1577, 1577, 9: 6758, 544: 1577, 556: 1577}, + {2: 1278, 1278, 1278, 1278, 1278, 1278, 1278, 10: 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 53: 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 563: 1278, 574: 1278, 1278, 847: 6091, 849: 6093, 851: 6092, 952: 6094, 1006: 6769}, + {2: 2155, 2155, 2155, 2155, 2155, 2155, 2155, 10: 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 53: 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 563: 4762, 574: 2155, 2155, 976: 6770}, // 3855 - {2: 2378, 2378, 2378, 2378, 2378, 2378, 2378, 10: 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 53: 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 2378, 549: 2378, 552: 2378, 567: 2378, 571: 2378, 575: 2378, 593: 2378, 723: 2378}, - {576: 6857}, - {576: 6762}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 6757, 786: 6045, 3092, 3093, 3091, 922: 6759, 1362: 6758}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 3985, 898: 6756}, + {2: 1579, 1579, 1579, 1579, 1579, 1579, 1579, 10: 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 53: 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 574: 6734, 1579, 1213: 6771}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 6772}, + {198: 1142, 545: 1142, 1142, 560: 6159, 562: 1142, 571: 1142, 622: 1142, 662: 1142, 981: 6773}, + {198: 6745, 545: 6738, 2967, 562: 6746, 571: 6744, 622: 2965, 662: 2961, 790: 6743, 821: 6741, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 3921, 6742, 6740, 1114: 6739, 1212: 6774}, + {1553, 1553, 544: 6776, 556: 1553, 1420: 6775}, // 3860 - {9: 3987, 576: 2309, 726: 2309}, - {576: 2311, 726: 2311}, - {9: 6760, 576: 2310, 726: 2310}, - {9: 2308, 576: 2308, 726: 2308}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6045, 3092, 3093, 3091, 922: 6761}, + {1580, 1580, 556: 1580}, + {316: 6777}, + {658: 6778}, + {726: 6779}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 6210, 1013: 6211, 1042: 6780}, // 3865 - {9: 2307, 576: 2307, 726: 2307}, - {547: 6763}, - {2306, 2306, 17: 2306, 58: 2306, 60: 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 544: 2306, 727: 2306, 967: 6764}, - {2312, 2312, 17: 6800, 58: 6767, 60: 6796, 6789, 6772, 6768, 6769, 6786, 6766, 6776, 6784, 6799, 6775, 6785, 6783, 6777, 6788, 6787, 6802, 6806, 6780, 6797, 6781, 6790, 6771, 6798, 6803, 6770, 6773, 6804, 6774, 6782, 6805, 6778, 6779, 544: 6791, 727: 6801, 963: 6793, 6792, 6795, 6765, 968: 6794}, - {2305, 2305, 17: 2305, 58: 2305, 60: 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 2305, 544: 2305, 727: 2305}, + {1552, 1552, 9: 6213, 556: 1552}, + {1584, 1584, 545: 6789, 729: 2128}, + {1585, 1585}, + {729: 6784}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6785, 3111, 3112, 3110}, // 3870 - {569: 2304, 573: 2304}, - {569: 2303, 573: 2303}, - {569: 2302, 573: 2302}, - {569: 2301, 573: 2301}, - {569: 2300, 573: 2300, 642: 2300, 644: 2300}, + {1583, 1583, 545: 6786}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 2224, 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3917, 874: 4423, 938: 6787}, + {52: 6788}, + {1581, 1581}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 2224, 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 3917, 874: 4423, 938: 6790}, // 3875 - {569: 2299, 573: 2299, 642: 2299, 644: 2299}, - {569: 2298, 573: 2298, 642: 2298, 644: 2298}, - {569: 2297, 573: 2297, 642: 2297, 644: 2297}, - {569: 2296, 573: 2296, 642: 2296, 644: 2296}, - {569: 2295, 573: 2295, 642: 2295, 644: 2295}, + {52: 6791}, + {1582, 1582}, + {2: 2384, 2384, 2384, 2384, 2384, 2384, 2384, 10: 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 53: 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 2384, 549: 2384, 552: 2384, 567: 2384, 571: 2384, 575: 2384, 593: 2384, 723: 2384}, + {576: 6898}, + {576: 6803}, // 3880 - {569: 2294, 573: 2294, 642: 2294, 644: 2294}, - {569: 2293, 573: 2293, 642: 2293, 644: 2293}, - {569: 2292, 573: 2292, 642: 2292, 644: 2292}, - {569: 2291, 573: 2291, 642: 2291, 644: 2291}, - {569: 2290, 573: 2290, 642: 2290, 644: 2290}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 6798, 786: 6086, 3111, 3112, 3110, 922: 6800, 1366: 6799}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 4004, 898: 6797}, + {9: 4006, 576: 2315, 727: 2315}, + {576: 2317, 727: 2317}, + {9: 6801, 576: 2316, 727: 2316}, // 3885 - {569: 2289, 573: 2289, 642: 2289, 644: 2289}, - {547: 2288, 569: 2288}, - {547: 2287, 569: 2287}, - {547: 2286, 569: 2286}, - {547: 2285, 569: 2285}, + {9: 2314, 576: 2314, 727: 2314}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6086, 3111, 3112, 3110, 922: 6802}, + {9: 2313, 576: 2313, 727: 2313}, + {547: 6804}, + {2312, 2312, 17: 2312, 59: 2312, 61: 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 544: 2312, 728: 2312, 967: 6805}, // 3890 - {547: 2284, 569: 2284}, - {547: 2283, 569: 2283}, - {547: 2282, 569: 2282}, - {2: 2281, 2281, 2281, 2281, 2281, 2281, 2281, 10: 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 53: 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 547: 2281, 563: 2281, 566: 2281, 569: 2281}, - {2: 2280, 2280, 2280, 2280, 2280, 2280, 2280, 10: 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 53: 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 547: 2280, 563: 2280, 566: 2280, 569: 2280}, + {2318, 2318, 17: 6841, 59: 6808, 61: 6837, 6830, 6813, 6809, 6810, 6827, 6807, 6817, 6825, 6840, 6816, 6826, 6824, 6818, 6829, 6828, 6843, 6847, 6821, 6838, 6822, 6831, 6812, 6839, 6844, 6811, 6814, 6845, 6815, 6823, 6846, 6819, 6820, 544: 6832, 728: 6842, 963: 6834, 6833, 6836, 6806, 968: 6835}, + {2311, 2311, 17: 2311, 59: 2311, 61: 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311, 2311, 544: 2311, 728: 2311}, + {569: 2310, 573: 2310}, + {569: 2309, 573: 2309}, + {569: 2308, 573: 2308}, // 3895 - {315: 6856}, - {569: 4655, 573: 2356, 817: 6854}, - {569: 4655, 573: 2356, 642: 2356, 644: 2356, 817: 6852}, - {547: 2356, 569: 4655, 817: 6850}, - {2: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 10: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 53: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 547: 2356, 563: 2356, 566: 2356, 569: 4655, 817: 6845}, + {569: 2307, 573: 2307}, + {569: 2306, 573: 2306, 643: 2306, 2306}, + {569: 2305, 573: 2305, 643: 2305, 2305}, + {569: 2304, 573: 2304, 643: 2304, 2304}, + {569: 2303, 573: 2303, 643: 2303, 2303}, // 3900 - {547: 2356, 569: 4655, 573: 2356, 817: 6840}, - {547: 2356, 569: 4655, 573: 2356, 817: 6837}, - {569: 4655, 573: 2356, 817: 6832}, - {140: 2356, 166: 2356, 569: 4655, 573: 2356, 817: 6829}, - {248: 2356, 2356, 252: 2356, 569: 4655, 573: 2356, 642: 2356, 644: 2356, 817: 6826}, + {569: 2302, 573: 2302, 643: 2302, 2302}, + {569: 2301, 573: 2301, 643: 2301, 2301}, + {569: 2300, 573: 2300, 643: 2300, 2300}, + {569: 2299, 573: 2299, 643: 2299, 2299}, + {569: 2298, 573: 2298, 643: 2298, 2298}, // 3905 - {248: 2356, 2356, 252: 2356, 569: 4655, 573: 2356, 642: 2356, 644: 2356, 817: 6817}, - {547: 2356, 569: 4655, 817: 6815}, - {547: 2356, 569: 4655, 817: 6813}, - {547: 2356, 569: 4655, 817: 6811}, - {547: 2356, 569: 4655, 817: 6809}, + {569: 2297, 573: 2297, 643: 2297, 2297}, + {569: 2296, 573: 2296, 643: 2296, 2296}, + {569: 2295, 573: 2295, 643: 2295, 2295}, + {547: 2294, 569: 2294}, + {547: 2293, 569: 2293}, // 3910 - {547: 2356, 569: 4655, 817: 6807}, - {547: 6808}, - {2258, 2258, 17: 2258, 58: 2258, 60: 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 544: 2258, 727: 2258}, - {547: 6810}, - {2259, 2259, 17: 2259, 58: 2259, 60: 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 544: 2259, 727: 2259}, + {547: 2292, 569: 2292}, + {547: 2291, 569: 2291}, + {547: 2290, 569: 2290}, + {547: 2289, 569: 2289}, + {547: 2288, 569: 2288}, // 3915 - {547: 6812}, - {2260, 2260, 17: 2260, 58: 2260, 60: 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 544: 2260, 727: 2260}, - {547: 6814}, - {2261, 2261, 17: 2261, 58: 2261, 60: 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 2261, 544: 2261, 727: 2261}, - {547: 6816}, + {2: 2287, 2287, 2287, 2287, 2287, 2287, 2287, 10: 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 53: 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 2287, 547: 2287, 563: 2287, 566: 2287, 569: 2287}, + {2: 2286, 2286, 2286, 2286, 2286, 2286, 2286, 10: 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 53: 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 2286, 547: 2286, 563: 2286, 566: 2286, 569: 2286}, + {316: 6897}, + {569: 4674, 573: 2362, 817: 6895}, + {569: 4674, 573: 2362, 643: 2362, 2362, 817: 6893}, // 3920 - {2262, 2262, 17: 2262, 58: 2262, 60: 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 544: 2262, 727: 2262}, - {248: 6823, 6824, 252: 6825, 573: 3078, 642: 6821, 644: 6822, 814: 6820, 1015: 6818, 1241: 6819}, - {2264, 2264, 17: 2264, 58: 2264, 60: 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 544: 2264, 727: 2264}, - {2263, 2263, 17: 2263, 58: 2263, 60: 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 2263, 544: 2263, 727: 2263}, - {2254, 2254, 9: 2254, 17: 2254, 58: 2254, 60: 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 119: 2254, 2254, 2254, 2254, 2254, 544: 2254, 727: 2254}, + {547: 2362, 569: 4674, 817: 6891}, + {2: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 10: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 53: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 547: 2362, 563: 2362, 566: 2362, 569: 4674, 817: 6886}, + {547: 2362, 569: 4674, 573: 2362, 817: 6881}, + {547: 2362, 569: 4674, 573: 2362, 817: 6878}, + {569: 4674, 573: 2362, 817: 6873}, // 3925 - {2253, 2253, 9: 2253, 17: 2253, 58: 2253, 60: 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 2253, 119: 2253, 2253, 2253, 2253, 2253, 544: 2253, 727: 2253}, - {2252, 2252, 9: 2252, 17: 2252, 58: 2252, 60: 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 2252, 119: 2252, 2252, 2252, 2252, 2252, 544: 2252, 727: 2252}, - {2251, 2251, 17: 2251, 58: 2251, 60: 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 2251, 544: 2251, 727: 2251}, - {2250, 2250, 17: 2250, 58: 2250, 60: 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 2250, 544: 2250, 727: 2250}, - {2249, 2249, 17: 2249, 58: 2249, 60: 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 2249, 544: 2249, 727: 2249}, + {142: 2362, 168: 2362, 569: 4674, 573: 2362, 817: 6870}, + {248: 2362, 2362, 252: 2362, 569: 4674, 573: 2362, 643: 2362, 2362, 817: 6867}, + {248: 2362, 2362, 252: 2362, 569: 4674, 573: 2362, 643: 2362, 2362, 817: 6858}, + {547: 2362, 569: 4674, 817: 6856}, + {547: 2362, 569: 4674, 817: 6854}, // 3930 - {248: 6823, 6824, 252: 6825, 573: 3078, 642: 6821, 644: 6822, 814: 6820, 1015: 6827, 1241: 6828}, - {2266, 2266, 17: 2266, 58: 2266, 60: 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 544: 2266, 727: 2266}, - {2265, 2265, 17: 2265, 58: 2265, 60: 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 544: 2265, 727: 2265}, - {140: 4009, 166: 4008, 573: 3078, 814: 3922, 829: 6831, 947: 6830}, - {2268, 2268, 17: 2268, 58: 2268, 60: 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 544: 2268, 727: 2268}, + {547: 2362, 569: 4674, 817: 6852}, + {547: 2362, 569: 4674, 817: 6850}, + {547: 2362, 569: 4674, 817: 6848}, + {547: 6849}, + {2264, 2264, 17: 2264, 59: 2264, 61: 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 2264, 544: 2264, 728: 2264}, // 3935 - {2267, 2267, 17: 2267, 58: 2267, 60: 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 544: 2267, 727: 2267}, - {573: 3078, 814: 3922, 829: 6833}, - {274: 6834}, - {623: 6835}, - {147: 6836}, + {547: 6851}, + {2265, 2265, 17: 2265, 59: 2265, 61: 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 544: 2265, 728: 2265}, + {547: 6853}, + {2266, 2266, 17: 2266, 59: 2266, 61: 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 2266, 544: 2266, 728: 2266}, + {547: 6855}, // 3940 - {2269, 2269, 17: 2269, 58: 2269, 60: 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 544: 2269, 727: 2269}, - {547: 6838, 573: 3078, 814: 3922, 829: 6839}, - {2271, 2271, 17: 2271, 58: 2271, 60: 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 544: 2271, 727: 2271}, - {2270, 2270, 17: 2270, 58: 2270, 60: 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 544: 2270, 727: 2270}, - {547: 6842, 573: 3078, 814: 3922, 829: 6841}, + {2267, 2267, 17: 2267, 59: 2267, 61: 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 2267, 544: 2267, 728: 2267}, + {547: 6857}, + {2268, 2268, 17: 2268, 59: 2268, 61: 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 2268, 544: 2268, 728: 2268}, + {248: 6864, 6865, 252: 6866, 573: 3097, 643: 6862, 6863, 814: 6861, 1015: 6859, 1243: 6860}, + {2270, 2270, 17: 2270, 59: 2270, 61: 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 2270, 544: 2270, 728: 2270}, // 3945 - {2272, 2272, 17: 2272, 58: 2272, 60: 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 127: 3823, 136: 3831, 143: 3819, 147: 3816, 149: 3818, 3815, 3817, 3821, 3822, 3827, 3826, 3825, 3829, 3830, 3824, 3828, 3820, 544: 2272, 727: 2272, 902: 6843}, - {2273, 2273, 17: 2273, 58: 2273, 60: 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 544: 2273, 727: 2273}, - {380: 6844}, - {2274, 2274, 17: 2274, 58: 2274, 60: 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 544: 2274, 727: 2274}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 563: 6848, 566: 6849, 786: 3793, 3092, 3093, 3091, 820: 6847, 1491: 6846}, + {2269, 2269, 17: 2269, 59: 2269, 61: 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 2269, 544: 2269, 728: 2269}, + {2260, 2260, 9: 2260, 17: 2260, 59: 2260, 61: 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 121: 2260, 2260, 2260, 2260, 2260, 544: 2260, 728: 2260}, + {2259, 2259, 9: 2259, 17: 2259, 59: 2259, 61: 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 2259, 121: 2259, 2259, 2259, 2259, 2259, 544: 2259, 728: 2259}, + {2258, 2258, 9: 2258, 17: 2258, 59: 2258, 61: 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 2258, 121: 2258, 2258, 2258, 2258, 2258, 544: 2258, 728: 2258}, + {2257, 2257, 17: 2257, 59: 2257, 61: 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 2257, 544: 2257, 728: 2257}, // 3950 - {2275, 2275, 17: 2275, 58: 2275, 60: 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 544: 2275, 727: 2275}, - {441, 441, 17: 441, 58: 441, 60: 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, 544: 441, 727: 441}, - {440, 440, 17: 440, 58: 440, 60: 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, 544: 440, 727: 440}, - {439, 439, 17: 439, 58: 439, 60: 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, 439, 439, 439, 439, 439, 439, 439, 544: 439, 727: 439}, - {547: 6851}, + {2256, 2256, 17: 2256, 59: 2256, 61: 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 2256, 544: 2256, 728: 2256}, + {2255, 2255, 17: 2255, 59: 2255, 61: 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 2255, 544: 2255, 728: 2255}, + {248: 6864, 6865, 252: 6866, 573: 3097, 643: 6862, 6863, 814: 6861, 1015: 6868, 1243: 6869}, + {2272, 2272, 17: 2272, 59: 2272, 61: 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 2272, 544: 2272, 728: 2272}, + {2271, 2271, 17: 2271, 59: 2271, 61: 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 2271, 544: 2271, 728: 2271}, // 3955 - {2276, 2276, 17: 2276, 58: 2276, 60: 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 544: 2276, 727: 2276}, - {573: 3078, 642: 6821, 644: 6822, 814: 6820, 1015: 6853}, - {2277, 2277, 17: 2277, 58: 2277, 60: 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 544: 2277, 727: 2277}, - {573: 3078, 814: 3922, 829: 6855}, - {2278, 2278, 17: 2278, 58: 2278, 60: 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 544: 2278, 727: 2278}, + {142: 4028, 168: 4027, 573: 3097, 814: 3941, 829: 6872, 947: 6871}, + {2274, 2274, 17: 2274, 59: 2274, 61: 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 2274, 544: 2274, 728: 2274}, + {2273, 2273, 17: 2273, 59: 2273, 61: 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 2273, 544: 2273, 728: 2273}, + {573: 3097, 814: 3941, 829: 6874}, + {275: 6875}, // 3960 - {2: 2279, 2279, 2279, 2279, 2279, 2279, 2279, 10: 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 53: 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 547: 2279, 563: 2279, 566: 2279, 569: 2279}, - {547: 6858}, - {2306, 2306, 17: 2306, 58: 2306, 60: 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 544: 2306, 727: 2306, 967: 6859}, - {2313, 2313, 17: 6800, 58: 6767, 60: 6796, 6789, 6772, 6768, 6769, 6786, 6766, 6776, 6784, 6799, 6775, 6785, 6783, 6777, 6788, 6787, 6802, 6806, 6780, 6797, 6781, 6790, 6771, 6798, 6803, 6770, 6773, 6804, 6774, 6782, 6805, 6778, 6779, 544: 6791, 727: 6801, 963: 6793, 6792, 6795, 6765, 968: 6794}, - {219: 6864}, + {623: 6876}, + {149: 6877}, + {2275, 2275, 17: 2275, 59: 2275, 61: 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 2275, 544: 2275, 728: 2275}, + {547: 6879, 573: 3097, 814: 3941, 829: 6880}, + {2277, 2277, 17: 2277, 59: 2277, 61: 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 2277, 544: 2277, 728: 2277}, // 3965 - {219: 6862}, - {573: 3078, 814: 4605, 846: 6863}, - {2248, 2248}, - {573: 3078, 814: 4605, 846: 6865}, - {2315, 2315}, + {2276, 2276, 17: 2276, 59: 2276, 61: 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 2276, 544: 2276, 728: 2276}, + {547: 6883, 573: 3097, 814: 3941, 829: 6882}, + {2278, 2278, 17: 2278, 59: 2278, 61: 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 2278, 129: 3842, 138: 3850, 145: 3838, 149: 3835, 151: 3837, 3834, 3836, 3840, 3841, 3846, 3845, 3844, 3848, 3849, 3843, 3847, 3839, 544: 2278, 728: 2278, 902: 6884}, + {2279, 2279, 17: 2279, 59: 2279, 61: 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 2279, 544: 2279, 728: 2279}, + {381: 6885}, // 3970 - {168: 7044, 335: 7045}, - {219: 7040}, - {804, 804, 578: 7037, 597: 7036, 1472: 7035}, - {18: 7020, 51: 7021, 142: 7017, 229: 7022, 255: 7019, 622: 7016, 658: 7018, 982: 7023}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 7005, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 7006}, + {2280, 2280, 17: 2280, 59: 2280, 61: 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 2280, 544: 2280, 728: 2280}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 563: 6889, 566: 6890, 786: 3812, 3111, 3112, 3110, 820: 6888, 1496: 6887}, + {2281, 2281, 17: 2281, 59: 2281, 61: 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 2281, 544: 2281, 728: 2281}, + {445, 445, 17: 445, 59: 445, 61: 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 445, 544: 445, 728: 445}, + {444, 444, 17: 444, 59: 444, 61: 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 544: 444, 728: 444}, // 3975 - {885, 885, 572: 7000}, - {148: 6999}, - {419: 6997}, - {148: 6996}, - {140: 4009, 164: 6991, 166: 4008, 278: 6990, 947: 6992}, + {443, 443, 17: 443, 59: 443, 61: 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 544: 443, 728: 443}, + {547: 6892}, + {2282, 2282, 17: 2282, 59: 2282, 61: 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 2282, 544: 2282, 728: 2282}, + {573: 3097, 643: 6862, 6863, 814: 6861, 1015: 6894}, + {2283, 2283, 17: 2283, 59: 2283, 61: 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 2283, 544: 2283, 728: 2283}, // 3980 - {879, 879}, - {869, 869, 246: 6972, 291: 6973, 303: 6974, 306: 6971, 330: 6976, 341: 6975, 356: 6978, 360: 6977, 568: 869, 570: 869, 572: 869, 730: 6979, 1287: 6970, 1475: 6969, 6968}, - {877, 877}, - {876, 876}, - {807, 807, 331: 6960, 572: 6959, 578: 807, 597: 807}, + {573: 3097, 814: 3941, 829: 6896}, + {2284, 2284, 17: 2284, 59: 2284, 61: 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284, 2284, 544: 2284, 728: 2284}, + {2: 2285, 2285, 2285, 2285, 2285, 2285, 2285, 10: 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 53: 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 2285, 547: 2285, 563: 2285, 566: 2285, 569: 2285}, + {547: 6899}, + {2312, 2312, 17: 2312, 59: 2312, 61: 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 544: 2312, 728: 2312, 967: 6900}, // 3985 - {219: 6956, 231: 6957}, - {576: 852, 620: 852}, - {576: 851, 620: 851}, - {576: 850, 620: 850}, - {847, 847, 578: 847, 597: 847}, + {2319, 2319, 17: 6841, 59: 6808, 61: 6837, 6830, 6813, 6809, 6810, 6827, 6807, 6817, 6825, 6840, 6816, 6826, 6824, 6818, 6829, 6828, 6843, 6847, 6821, 6838, 6822, 6831, 6812, 6839, 6844, 6811, 6814, 6845, 6815, 6823, 6846, 6819, 6820, 544: 6832, 728: 6842, 963: 6834, 6833, 6836, 6806, 968: 6835}, + {219: 6905}, + {219: 6903}, + {573: 3097, 814: 4624, 846: 6904}, + {2254, 2254}, // 3990 - {846, 846, 578: 846, 597: 846}, - {845, 845, 578: 845, 597: 845}, - {844, 844, 578: 844, 597: 844}, - {164: 6954}, - {576: 6924, 620: 6925, 919: 6949}, + {573: 3097, 814: 4624, 846: 6906}, + {2321, 2321}, + {169: 7085, 337: 7086}, + {219: 7081}, + {808, 808, 578: 7078, 597: 7077, 1477: 7076}, // 3995 - {140: 794, 166: 794, 271: 6920, 1237: 6943}, - {545: 6938}, - {835, 835, 578: 835, 597: 835}, - {833, 833, 578: 833, 597: 833}, - {148: 6936, 189: 6937, 259: 6935}, + {18: 7061, 51: 7062, 144: 7058, 229: 7063, 255: 7060, 622: 7057, 659: 7059, 982: 7064}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 7046, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 7047}, + {889, 889, 572: 7041}, + {150: 7040}, + {419: 7038}, // 4000 - {829, 829, 578: 829, 597: 829}, - {792, 792, 576: 6924, 578: 792, 597: 792, 620: 6925, 919: 6927, 958: 6934}, - {148: 6933}, - {148: 6932}, - {148: 6931}, + {150: 7037}, + {142: 4028, 166: 7032, 168: 4027, 279: 7031, 947: 7033}, + {883, 883}, + {873, 873, 246: 7013, 292: 7014, 304: 7015, 307: 7012, 332: 7017, 343: 7016, 358: 7019, 362: 7018, 568: 873, 570: 873, 572: 873, 730: 7020, 1289: 7011, 1480: 7010, 7009}, + {881, 881}, // 4005 - {148: 6930}, - {148: 6929}, - {792, 792, 576: 6924, 578: 792, 597: 792, 620: 6925, 919: 6927, 958: 6926}, + {880, 880}, + {811, 811, 333: 7001, 572: 7000, 578: 811, 597: 811}, + {219: 6997, 231: 6998}, + {576: 856, 620: 856}, + {576: 855, 620: 855}, + // 4010 + {576: 854, 620: 854}, + {851, 851, 578: 851, 597: 851}, + {850, 850, 578: 850, 597: 850}, + {849, 849, 578: 849, 597: 849}, + {848, 848, 578: 848, 597: 848}, + // 4015 + {166: 6995}, + {576: 6965, 620: 6966, 919: 6990}, + {142: 798, 168: 798, 272: 6961, 1239: 6984}, + {545: 6979}, + {839, 839, 578: 839, 597: 839}, + // 4020 + {837, 837, 578: 837, 597: 837}, + {150: 6977, 190: 6978, 260: 6976}, + {833, 833, 578: 833, 597: 833}, + {796, 796, 576: 6965, 578: 796, 597: 796, 620: 6966, 919: 6968, 958: 6975}, + {150: 6974}, + // 4025 + {150: 6973}, + {150: 6972}, + {150: 6971}, + {150: 6970}, + {796, 796, 576: 6965, 578: 796, 597: 796, 620: 6966, 919: 6968, 958: 6967}, + // 4030 + {825, 825, 578: 825, 597: 825}, + {824, 824, 578: 824, 597: 824}, + {823, 823, 578: 823, 597: 823}, + {822, 822, 578: 822, 597: 822}, {821, 821, 578: 821, 597: 821}, + // 4035 {820, 820, 578: 820, 597: 820}, - // 4010 {819, 819, 578: 819, 597: 819}, {818, 818, 578: 818, 597: 818}, {817, 817, 578: 817, 597: 817}, {816, 816, 578: 816, 597: 816}, + // 4040 {815, 815, 578: 815, 597: 815}, - // 4015 - {814, 814, 578: 814, 597: 814}, + {150: 6964}, {813, 813, 578: 813, 597: 813}, {812, 812, 578: 812, 597: 812}, - {811, 811, 578: 811, 597: 811}, - {148: 6923}, - // 4020 - {809, 809, 578: 809, 597: 809}, - {808, 808, 578: 808, 597: 808}, - {148: 800, 189: 800, 259: 800}, - {148: 799, 189: 799, 213: 799, 259: 799}, - {140: 793, 164: 793, 166: 793, 278: 793}, - // 4025 - {148: 789}, - {148: 788}, - {810, 810, 578: 810, 597: 810}, - {2: 849, 849, 849, 849, 849, 849, 849, 10: 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 53: 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, 575: 849}, - {2: 848, 848, 848, 848, 848, 848, 848, 10: 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 53: 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, 575: 848}, - // 4030 - {822, 822, 578: 822, 597: 822}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6045, 3092, 3093, 3091, 922: 6928}, - {791, 791, 578: 791, 597: 791}, - {823, 823, 578: 823, 597: 823}, - {824, 824, 578: 824, 597: 824}, - // 4035 - {825, 825, 578: 825, 597: 825}, + {150: 804, 190: 804, 260: 804}, + // 4045 + {150: 803, 190: 803, 214: 803, 260: 803}, + {142: 797, 166: 797, 168: 797, 279: 797}, + {150: 793}, + {150: 792}, + {814, 814, 578: 814, 597: 814}, + // 4050 + {2: 853, 853, 853, 853, 853, 853, 853, 10: 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 53: 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 853, 575: 853}, + {2: 852, 852, 852, 852, 852, 852, 852, 10: 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 53: 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, 575: 852}, {826, 826, 578: 826, 597: 826}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6086, 3111, 3112, 3110, 922: 6969}, + {795, 795, 578: 795, 597: 795}, + // 4055 {827, 827, 578: 827, 597: 827}, {828, 828, 578: 828, 597: 828}, - {832, 832, 578: 832, 597: 832}, - // 4040 - {831, 831, 578: 831, 597: 831}, + {829, 829, 578: 829, 597: 829}, {830, 830, 578: 830, 597: 830}, - {575: 6939}, - {52: 6940}, - {325: 6942, 377: 6941}, - // 4045 + {831, 831, 578: 831, 597: 831}, + // 4060 + {832, 832, 578: 832, 597: 832}, {836, 836, 578: 836, 597: 836}, + {835, 835, 578: 835, 597: 835}, {834, 834, 578: 834, 597: 834}, - {140: 4009, 166: 4008, 947: 6944}, - {576: 6924, 620: 6925, 919: 6946, 1289: 6945}, - {792, 792, 576: 6924, 578: 792, 597: 792, 620: 6925, 919: 6927, 958: 6948}, - // 4050 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 6947}, - {790, 790, 576: 790, 578: 790, 597: 790, 620: 790}, - {837, 837, 578: 837, 597: 837}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 6950, 3092, 3093, 3091, 819: 6951}, - {1272, 1272, 576: 6924, 578: 1272, 597: 1272, 620: 6925, 729: 3991, 919: 6952}, - // 4055 - {840, 840, 578: 840, 597: 840}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6953, 3092, 3093, 3091}, - {839, 839, 578: 839, 597: 839}, - {792, 792, 576: 6924, 578: 792, 597: 792, 620: 6925, 919: 6927, 958: 6955}, - {842, 842, 578: 842, 597: 842}, - // 4060 - {573: 3078, 814: 4605, 846: 6958}, - {805, 805, 578: 805, 597: 805}, - {874, 874}, - {622: 6963, 658: 6751, 946: 6962, 1473: 6961}, - {806, 806, 578: 806, 597: 806}, + {575: 6980}, // 4065 - {875, 875}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6045, 3092, 3093, 3091, 922: 6967}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 6964}, - {871, 871, 560: 6965}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6966, 3092, 3093, 3091}, + {52: 6981}, + {326: 6983, 378: 6982}, + {840, 840, 578: 840, 597: 840}, + {838, 838, 578: 838, 597: 838}, + {142: 4028, 168: 4027, 947: 6985}, // 4070 - {870, 870}, - {872, 872}, - {856, 856, 568: 856, 570: 856, 572: 6986, 1474: 6985}, - {868, 868, 9: 6983, 568: 868, 570: 868, 572: 868}, - {867, 867, 9: 867, 568: 867, 570: 867, 572: 867}, + {576: 6965, 620: 6966, 919: 6987, 1291: 6986}, + {796, 796, 576: 6965, 578: 796, 597: 796, 620: 6966, 919: 6968, 958: 6989}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 6988}, + {794, 794, 576: 794, 578: 794, 597: 794, 620: 794}, + {841, 841, 578: 841, 597: 841}, // 4075 - {865, 865, 9: 865, 568: 865, 570: 865, 572: 865}, - {864, 864, 9: 864, 568: 864, 570: 864, 572: 864}, - {415: 6982}, - {456: 6981}, - {407: 6980}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 6991, 3111, 3112, 3110, 819: 6992}, + {1276, 1276, 576: 6965, 578: 1276, 597: 1276, 620: 6966, 729: 4010, 919: 6993}, + {844, 844, 578: 844, 597: 844}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6994, 3111, 3112, 3110}, + {843, 843, 578: 843, 597: 843}, // 4080 - {860, 860, 9: 860, 568: 860, 570: 860, 572: 860}, - {859, 859, 9: 859, 568: 859, 570: 859, 572: 859}, - {858, 858, 9: 858, 568: 858, 570: 858, 572: 858}, - {857, 857, 9: 857, 568: 857, 570: 857, 572: 857}, - {861, 861, 9: 861, 568: 861, 570: 861, 572: 861}, + {796, 796, 576: 6965, 578: 796, 597: 796, 620: 6966, 919: 6968, 958: 6996}, + {846, 846, 578: 846, 597: 846}, + {573: 3097, 814: 4624, 846: 6999}, + {809, 809, 578: 809, 597: 809}, + {878, 878}, // 4085 - {862, 862, 9: 862, 568: 862, 570: 862, 572: 862}, - {863, 863, 9: 863, 568: 863, 570: 863, 572: 863}, - {246: 6972, 291: 6973, 303: 6974, 306: 6971, 330: 6976, 341: 6975, 356: 6978, 360: 6977, 730: 6979, 1287: 6984}, - {866, 866, 9: 866, 568: 866, 570: 866, 572: 866}, - {1084, 1084, 568: 3915, 570: 3914, 858: 3972, 941: 6989}, + {622: 7004, 659: 6792, 946: 7003, 1478: 7002}, + {810, 810, 578: 810, 597: 810}, + {879, 879}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6086, 3111, 3112, 3110, 922: 7008}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 7005}, // 4090 - {170: 6987}, - {573: 3078, 814: 4605, 846: 6988}, - {855, 855, 568: 855, 570: 855}, - {878, 878}, - {880, 880}, + {875, 875, 560: 7006}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 7007, 3111, 3112, 3110}, + {874, 874}, + {876, 876}, + {860, 860, 568: 860, 570: 860, 572: 7027, 1479: 7026}, // 4095 - {792, 792, 576: 6924, 578: 792, 597: 792, 620: 6925, 919: 6927, 958: 6995}, - {576: 6924, 620: 6925, 919: 6946, 1289: 6993}, - {792, 792, 576: 6924, 578: 792, 597: 792, 620: 6925, 919: 6927, 958: 6994}, - {838, 838, 578: 838, 597: 838}, - {843, 843, 578: 843, 597: 843}, + {872, 872, 9: 7024, 568: 872, 570: 872, 572: 872}, + {871, 871, 9: 871, 568: 871, 570: 871, 572: 871}, + {869, 869, 9: 869, 568: 869, 570: 869, 572: 869}, + {868, 868, 9: 868, 568: 868, 570: 868, 572: 868}, + {415: 7023}, // 4100 - {881, 881}, - {148: 6998}, - {882, 882}, - {883, 883}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 645: 5944, 786: 3793, 3092, 3093, 3091, 820: 5943, 870: 7001}, + {456: 7022}, + {408: 7021}, + {864, 864, 9: 864, 568: 864, 570: 864, 572: 864}, + {863, 863, 9: 863, 568: 863, 570: 863, 572: 863}, + {862, 862, 9: 862, 568: 862, 570: 862, 572: 862}, // 4105 - {854, 854, 556: 7003, 1507: 7002}, - {884, 884}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 6396, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 6401, 786: 3793, 3092, 3093, 3091, 820: 5898, 913: 6403, 934: 6404, 6402, 984: 7004}, - {853, 853, 9: 6405}, - {792, 792, 117: 2022, 222: 2022, 560: 2022, 576: 6924, 578: 792, 597: 792, 620: 6925, 724: 2022, 729: 2022, 919: 6927, 958: 7015}, + {861, 861, 9: 861, 568: 861, 570: 861, 572: 861}, + {865, 865, 9: 865, 568: 865, 570: 865, 572: 865}, + {866, 866, 9: 866, 568: 866, 570: 866, 572: 866}, + {867, 867, 9: 867, 568: 867, 570: 867, 572: 867}, + {246: 7013, 292: 7014, 304: 7015, 307: 7012, 332: 7017, 343: 7016, 358: 7019, 362: 7018, 730: 7020, 1289: 7025}, // 4110 - {117: 1138, 222: 7008, 560: 6118, 724: 1138, 981: 7007}, - {117: 7009, 724: 7010}, - {887, 887}, - {432, 432, 578: 4729, 904: 4730, 7014}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 7011, 3092, 3093, 3091}, + {870, 870, 9: 870, 568: 870, 570: 870, 572: 870}, + {1088, 1088, 568: 3934, 570: 3933, 858: 3991, 941: 7030}, + {171: 7028}, + {573: 3097, 814: 4624, 846: 7029}, + {859, 859, 568: 859, 570: 859}, // 4115 - {117: 7012}, - {432, 432, 578: 4729, 904: 4730, 7013}, - {886, 886}, - {888, 888}, - {841, 841, 578: 841, 597: 841}, + {882, 882}, + {884, 884}, + {796, 796, 576: 6965, 578: 796, 597: 796, 620: 6966, 919: 6968, 958: 7036}, + {576: 6965, 620: 6966, 919: 6987, 1291: 7034}, + {796, 796, 576: 6965, 578: 796, 597: 796, 620: 6966, 919: 6968, 958: 7035}, // 4120 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 7034}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 7033}, - {2: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 10: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 53: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 593: 5423, 899: 7031}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 7030}, - {225: 7028}, + {842, 842, 578: 842, 597: 842}, + {847, 847, 578: 847, 597: 847}, + {885, 885}, + {150: 7039}, + {886, 886}, // 4125 - {586: 7026}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 645: 5944, 786: 3793, 3092, 3093, 3091, 820: 5943, 870: 7025}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 7024}, - {873, 873}, - {889, 889}, + {887, 887}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 645: 5985, 786: 3812, 3111, 3112, 3110, 820: 5984, 870: 7042}, + {858, 858, 556: 7044, 1514: 7043}, + {888, 888}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 6437, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 6442, 786: 3812, 3111, 3112, 3110, 820: 5939, 913: 6444, 934: 6445, 6443, 984: 7045}, // 4130 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 549: 4663, 786: 4662, 3092, 3093, 3091, 954: 7027}, - {890, 890}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 5594, 3092, 3093, 3091, 1005: 7029}, + {857, 857, 9: 6446}, + {796, 796, 120: 2026, 222: 2026, 560: 2026, 576: 6965, 578: 796, 597: 796, 620: 6966, 724: 2026, 729: 2026, 919: 6968, 958: 7056}, + {120: 1142, 222: 7049, 560: 6159, 724: 1142, 981: 7048}, + {120: 7050, 724: 7051}, {891, 891}, - {892, 892}, // 4135 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6045, 3092, 3093, 3091, 922: 7032}, - {893, 893}, - {894, 894}, - {895, 895}, - {896, 896}, + {436, 436, 578: 4748, 904: 4749, 7055}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 7052, 3111, 3112, 3110}, + {120: 7053}, + {436, 436, 578: 4748, 904: 4749, 7054}, + {890, 890}, // 4140 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3737, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3671, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 7039, 3652, 3734, 3651, 3648}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 7038}, - {802, 802, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {803, 803, 552: 3748, 718: 3749}, - {170: 7042, 573: 3078, 814: 4605, 846: 7041}, + {892, 892}, + {845, 845, 578: 845, 597: 845}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 7075}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 7074}, + {2: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 10: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 53: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 593: 5449, 899: 7072}, // 4145 - {2317, 2317}, - {573: 3078, 814: 4605, 846: 7043}, - {2316, 2316}, - {148: 7048, 335: 7049}, - {576: 7046}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 7071}, + {225: 7069}, + {586: 7067}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 645: 5985, 786: 3812, 3111, 3112, 3110, 820: 5984, 870: 7066}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 7065}, // 4150 - {547: 7047}, - {2314, 2314}, - {2319, 2319}, - {576: 7050}, - {547: 7051}, + {877, 877}, + {893, 893}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 549: 4682, 786: 4681, 3111, 3112, 3110, 954: 7068}, + {894, 894}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5622, 3111, 3112, 3110, 1005: 7070}, // 4155 - {2318, 2318}, - {168: 7053}, - {576: 7054}, - {547: 7055}, - {2306, 2306, 17: 2306, 58: 2306, 60: 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 544: 2306, 727: 2306, 967: 7056}, + {895, 895}, + {896, 896}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6086, 3111, 3112, 3110, 922: 7073}, + {897, 897}, + {898, 898}, // 4160 - {2320, 2320, 17: 6800, 58: 6767, 60: 6796, 6789, 6772, 6768, 6769, 6786, 6766, 6776, 6784, 6799, 6775, 6785, 6783, 6777, 6788, 6787, 6802, 6806, 6780, 6797, 6781, 6790, 6771, 6798, 6803, 6770, 6773, 6804, 6774, 6782, 6805, 6778, 6779, 544: 6791, 727: 6801, 963: 6793, 6792, 6795, 6765, 968: 6794}, - {168: 7058}, - {2321, 2321}, - {168: 7060}, - {2306, 2306, 17: 2306, 58: 2306, 60: 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 544: 2306, 727: 2306, 967: 7061}, + {899, 899}, + {900, 900}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3756, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3690, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 7080, 3671, 3753, 3670, 3667}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 7079}, + {806, 806, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, // 4165 - {2322, 2322, 17: 6800, 58: 6767, 60: 6796, 6789, 6772, 6768, 6769, 6786, 6766, 6776, 6784, 6799, 6775, 6785, 6783, 6777, 6788, 6787, 6802, 6806, 6780, 6797, 6781, 6790, 6771, 6798, 6803, 6770, 6773, 6804, 6774, 6782, 6805, 6778, 6779, 544: 6791, 727: 6801, 963: 6793, 6792, 6795, 6765, 968: 6794}, - {168: 7063}, + {807, 807, 552: 3767, 721: 3768}, + {171: 7083, 573: 3097, 814: 4624, 846: 7082}, {2323, 2323}, - {726: 7069}, - {726: 7066}, + {573: 3097, 814: 4624, 846: 7084}, + {2322, 2322}, // 4170 - {547: 7067}, - {2306, 2306, 17: 2306, 58: 2306, 60: 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 544: 2306, 727: 2306, 967: 7068}, - {2324, 2324, 17: 6800, 58: 6767, 60: 6796, 6789, 6772, 6768, 6769, 6786, 6766, 6776, 6784, 6799, 6775, 6785, 6783, 6777, 6788, 6787, 6802, 6806, 6780, 6797, 6781, 6790, 6771, 6798, 6803, 6770, 6773, 6804, 6774, 6782, 6805, 6778, 6779, 544: 6791, 727: 6801, 963: 6793, 6792, 6795, 6765, 968: 6794}, - {547: 7070}, - {2306, 2306, 17: 2306, 58: 2306, 60: 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 544: 2306, 727: 2306, 967: 7071}, + {150: 7089, 337: 7090}, + {576: 7087}, + {547: 7088}, + {2320, 2320}, + {2325, 2325}, // 4175 - {2325, 2325, 17: 6800, 58: 6767, 60: 6796, 6789, 6772, 6768, 6769, 6786, 6766, 6776, 6784, 6799, 6775, 6785, 6783, 6777, 6788, 6787, 6802, 6806, 6780, 6797, 6781, 6790, 6771, 6798, 6803, 6770, 6773, 6804, 6774, 6782, 6805, 6778, 6779, 544: 6791, 727: 6801, 963: 6793, 6792, 6795, 6765, 968: 6794}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 7073, 3092, 3093, 3091}, - {2326, 2326}, - {2327, 2327}, - {2346, 2346, 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 7109}, + {576: 7091}, + {547: 7092}, + {2324, 2324}, + {169: 7094}, + {576: 7095}, // 4180 - {2344, 2344}, - {28: 7107}, - {2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 10: 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 53: 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 2057, 569: 7096, 729: 2057}, - {141: 3064, 242: 7082, 545: 2949, 2948, 562: 2947, 566: 2933, 601: 2932, 622: 2946, 670: 2942, 728: 3059, 738: 4713, 790: 4714, 818: 2912, 821: 4715, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 4721, 4720, 837: 3058, 2913, 4718, 4719, 4717, 850: 2914, 854: 4716, 920: 4722, 923: 4723, 937: 7081}, - {1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 10: 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 53: 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 574: 5819, 729: 1857}, + {547: 7096}, + {2312, 2312, 17: 2312, 59: 2312, 61: 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 544: 2312, 728: 2312, 967: 7097}, + {2326, 2326, 17: 6841, 59: 6808, 61: 6837, 6830, 6813, 6809, 6810, 6827, 6807, 6817, 6825, 6840, 6816, 6826, 6824, 6818, 6829, 6828, 6843, 6847, 6821, 6838, 6822, 6831, 6812, 6839, 6844, 6811, 6814, 6845, 6815, 6823, 6846, 6819, 6820, 544: 6832, 728: 6842, 963: 6834, 6833, 6836, 6806, 968: 6835}, + {169: 7099}, + {2327, 2327}, // 4185 - {2338, 2338}, - {569: 7083}, - {183: 7087, 293: 7090, 312: 7089, 361: 7093, 373: 7086, 7092, 376: 7091, 547: 7085, 653: 7088, 1186: 7084}, - {141: 3064, 545: 2949, 2948, 562: 2947, 566: 2933, 601: 2932, 622: 2946, 670: 2942, 728: 3059, 738: 4713, 790: 4714, 818: 2912, 821: 4715, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 4721, 4720, 837: 3058, 2913, 4718, 4719, 4717, 850: 2914, 854: 4716, 920: 4722, 923: 4723, 937: 7095}, - {141: 3064, 545: 2949, 2948, 562: 2947, 566: 2933, 601: 2932, 622: 2946, 670: 2942, 728: 3059, 738: 4713, 790: 4714, 818: 2912, 821: 4715, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 4721, 4720, 837: 3058, 2913, 4718, 4719, 4717, 850: 2914, 854: 4716, 920: 4722, 923: 4723, 937: 7094}, + {169: 7101}, + {2312, 2312, 17: 2312, 59: 2312, 61: 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 544: 2312, 728: 2312, 967: 7102}, + {2328, 2328, 17: 6841, 59: 6808, 61: 6837, 6830, 6813, 6809, 6810, 6827, 6807, 6817, 6825, 6840, 6816, 6826, 6824, 6818, 6829, 6828, 6843, 6847, 6821, 6838, 6822, 6831, 6812, 6839, 6844, 6811, 6814, 6845, 6815, 6823, 6846, 6819, 6820, 544: 6832, 728: 6842, 963: 6834, 6833, 6836, 6806, 968: 6835}, + {169: 7104}, + {2329, 2329}, // 4190 - {141: 2335, 545: 2335, 2335, 562: 2335, 566: 2335, 572: 2335, 601: 2335, 622: 2335, 670: 2335, 728: 2335, 738: 2335, 818: 2335}, - {141: 2334, 545: 2334, 2334, 562: 2334, 566: 2334, 572: 2334, 601: 2334, 622: 2334, 670: 2334, 728: 2334, 738: 2334, 818: 2334}, - {141: 2333, 545: 2333, 2333, 562: 2333, 566: 2333, 572: 2333, 601: 2333, 622: 2333, 670: 2333, 728: 2333, 738: 2333, 818: 2333}, - {141: 2332, 545: 2332, 2332, 562: 2332, 566: 2332, 572: 2332, 601: 2332, 622: 2332, 670: 2332, 728: 2332, 738: 2332, 818: 2332}, - {141: 2331, 545: 2331, 2331, 562: 2331, 566: 2331, 572: 2331, 601: 2331, 622: 2331, 670: 2331, 728: 2331, 738: 2331, 818: 2331}, + {727: 7110}, + {727: 7107}, + {547: 7108}, + {2312, 2312, 17: 2312, 59: 2312, 61: 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 544: 2312, 728: 2312, 967: 7109}, + {2330, 2330, 17: 6841, 59: 6808, 61: 6837, 6830, 6813, 6809, 6810, 6827, 6807, 6817, 6825, 6840, 6816, 6826, 6824, 6818, 6829, 6828, 6843, 6847, 6821, 6838, 6822, 6831, 6812, 6839, 6844, 6811, 6814, 6845, 6815, 6823, 6846, 6819, 6820, 544: 6832, 728: 6842, 963: 6834, 6833, 6836, 6806, 968: 6835}, // 4195 - {141: 2330, 545: 2330, 2330, 562: 2330, 566: 2330, 572: 2330, 601: 2330, 622: 2330, 670: 2330, 728: 2330, 738: 2330, 818: 2330}, - {141: 2329, 545: 2329, 2329, 562: 2329, 566: 2329, 572: 2329, 601: 2329, 622: 2329, 670: 2329, 728: 2329, 738: 2329, 818: 2329}, - {141: 2328, 545: 2328, 2328, 562: 2328, 566: 2328, 572: 2328, 601: 2328, 622: 2328, 670: 2328, 728: 2328, 738: 2328, 818: 2328}, - {2336, 2336}, - {2337, 2337}, + {547: 7111}, + {2312, 2312, 17: 2312, 59: 2312, 61: 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 2312, 544: 2312, 728: 2312, 967: 7112}, + {2331, 2331, 17: 6841, 59: 6808, 61: 6837, 6830, 6813, 6809, 6810, 6827, 6807, 6817, 6825, 6840, 6816, 6826, 6824, 6818, 6829, 6828, 6843, 6847, 6821, 6838, 6822, 6831, 6812, 6839, 6844, 6811, 6814, 6845, 6815, 6823, 6846, 6819, 6820, 544: 6832, 728: 6842, 963: 6834, 6833, 6836, 6806, 968: 6835}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 7114, 3111, 3112, 3110}, + {2332, 2332}, // 4200 - {183: 7087, 293: 7090, 312: 7089, 361: 7093, 373: 7086, 7092, 376: 7091, 547: 7097, 653: 7088, 1186: 7098}, - {141: 3064, 545: 2949, 2948, 562: 2947, 566: 2933, 572: 7103, 601: 2932, 622: 2946, 670: 2942, 728: 3059, 738: 4713, 790: 4714, 818: 2912, 821: 4715, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 4721, 4720, 837: 3058, 2913, 4718, 4719, 4717, 850: 2914, 854: 4716, 920: 4722, 923: 4723, 937: 7104}, - {141: 3064, 545: 2949, 2948, 562: 2947, 566: 2933, 572: 7099, 601: 2932, 622: 2946, 670: 2942, 728: 3059, 738: 4713, 790: 4714, 818: 2912, 821: 4715, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 4721, 4720, 837: 3058, 2913, 4718, 4719, 4717, 850: 2914, 854: 4716, 920: 4722, 923: 4723, 937: 7100}, - {28: 7101}, - {2339, 2339}, + {2333, 2333}, + {2352, 2352, 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 7150}, + {2350, 2350}, + {28: 7148}, + {2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 10: 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 53: 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061, 569: 7137, 729: 2061}, // 4205 - {573: 3078, 814: 7102}, - {2340, 2340}, - {28: 7105}, - {2341, 2341}, - {573: 3078, 814: 7106}, + {143: 3083, 242: 7123, 545: 2968, 2967, 562: 2966, 566: 2952, 601: 2951, 622: 2965, 662: 2961, 726: 3078, 738: 4732, 790: 4733, 818: 2931, 821: 4734, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 4740, 4739, 837: 3077, 2932, 4737, 4738, 4736, 850: 2933, 854: 4735, 920: 4741, 923: 4742, 937: 7122}, + {1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 10: 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 53: 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 574: 5860, 729: 1861}, + {2344, 2344}, + {569: 7124}, + {184: 7128, 294: 7131, 313: 7130, 363: 7134, 375: 7127, 7133, 7132, 547: 7126, 653: 7129, 1188: 7125}, // 4210 + {143: 3083, 545: 2968, 2967, 562: 2966, 566: 2952, 601: 2951, 622: 2965, 662: 2961, 726: 3078, 738: 4732, 790: 4733, 818: 2931, 821: 4734, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 4740, 4739, 837: 3077, 2932, 4737, 4738, 4736, 850: 2933, 854: 4735, 920: 4741, 923: 4742, 937: 7136}, + {143: 3083, 545: 2968, 2967, 562: 2966, 566: 2952, 601: 2951, 622: 2965, 662: 2961, 726: 3078, 738: 4732, 790: 4733, 818: 2931, 821: 4734, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 4740, 4739, 837: 3077, 2932, 4737, 4738, 4736, 850: 2933, 854: 4735, 920: 4741, 923: 4742, 937: 7135}, + {143: 2341, 545: 2341, 2341, 562: 2341, 566: 2341, 572: 2341, 601: 2341, 622: 2341, 662: 2341, 726: 2341, 738: 2341, 818: 2341}, + {143: 2340, 545: 2340, 2340, 562: 2340, 566: 2340, 572: 2340, 601: 2340, 622: 2340, 662: 2340, 726: 2340, 738: 2340, 818: 2340}, + {143: 2339, 545: 2339, 2339, 562: 2339, 566: 2339, 572: 2339, 601: 2339, 622: 2339, 662: 2339, 726: 2339, 738: 2339, 818: 2339}, + // 4215 + {143: 2338, 545: 2338, 2338, 562: 2338, 566: 2338, 572: 2338, 601: 2338, 622: 2338, 662: 2338, 726: 2338, 738: 2338, 818: 2338}, + {143: 2337, 545: 2337, 2337, 562: 2337, 566: 2337, 572: 2337, 601: 2337, 622: 2337, 662: 2337, 726: 2337, 738: 2337, 818: 2337}, + {143: 2336, 545: 2336, 2336, 562: 2336, 566: 2336, 572: 2336, 601: 2336, 622: 2336, 662: 2336, 726: 2336, 738: 2336, 818: 2336}, + {143: 2335, 545: 2335, 2335, 562: 2335, 566: 2335, 572: 2335, 601: 2335, 622: 2335, 662: 2335, 726: 2335, 738: 2335, 818: 2335}, + {143: 2334, 545: 2334, 2334, 562: 2334, 566: 2334, 572: 2334, 601: 2334, 622: 2334, 662: 2334, 726: 2334, 738: 2334, 818: 2334}, + // 4220 {2342, 2342}, - {573: 3078, 814: 7108}, {2343, 2343}, + {184: 7128, 294: 7131, 313: 7130, 363: 7134, 375: 7127, 7133, 7132, 547: 7138, 653: 7129, 1188: 7139}, + {143: 3083, 545: 2968, 2967, 562: 2966, 566: 2952, 572: 7144, 601: 2951, 622: 2965, 662: 2961, 726: 3078, 738: 4732, 790: 4733, 818: 2931, 821: 4734, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 4740, 4739, 837: 3077, 2932, 4737, 4738, 4736, 850: 2933, 854: 4735, 920: 4741, 923: 4742, 937: 7145}, + {143: 3083, 545: 2968, 2967, 562: 2966, 566: 2952, 572: 7140, 601: 2951, 622: 2965, 662: 2961, 726: 3078, 738: 4732, 790: 4733, 818: 2931, 821: 4734, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 4740, 4739, 837: 3077, 2932, 4737, 4738, 4736, 850: 2933, 854: 4735, 920: 4741, 923: 4742, 937: 7141}, + // 4225 + {28: 7142}, {2345, 2345}, - {2353, 2353}, - // 4215 - {569: 7136}, - {93: 2905, 2908, 96: 2938, 2906, 206: 2921, 459: 7132, 545: 2949, 2948, 562: 2947, 566: 2933, 571: 7115, 601: 2932, 622: 2946, 670: 2942, 727: 2904, 3059, 790: 7113, 818: 2912, 821: 7114, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 7121, 7120, 837: 3058, 2913, 7118, 7119, 7117, 850: 2914, 854: 7116, 860: 7129, 7124, 7127, 7128, 912: 2922, 924: 7130, 962: 7123, 980: 7122, 983: 7126, 985: 7125, 1037: 7131}, - {659, 659, 553: 1029, 564: 1029, 1029, 568: 3915, 570: 3914, 579: 3913, 857: 3916, 3917}, - {661, 661, 553: 1030, 564: 1030, 1030}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 6366, 6361, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 6367, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 6364, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 6363, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 6369, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 6362, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 6372, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 6370, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 6365, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 567: 4486, 643: 6378, 666: 6377, 723: 4484, 786: 6375, 3092, 3093, 3091, 868: 6379, 942: 6376, 1113: 6380, 1316: 6373}, - // 4220 + {573: 3097, 814: 7143}, + {2346, 2346}, + {28: 7146}, + // 4230 + {2347, 2347}, + {573: 3097, 814: 7147}, + {2348, 2348}, + {573: 3097, 814: 7149}, + {2349, 2349}, + // 4235 + {2351, 2351}, + {2359, 2359}, + {569: 7177}, + {95: 2924, 2927, 98: 2957, 2925, 207: 2940, 459: 7173, 545: 2968, 2967, 562: 2966, 566: 2952, 571: 7156, 601: 2951, 622: 2965, 662: 2961, 726: 3078, 728: 2923, 790: 7154, 818: 2931, 821: 7155, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 7162, 7161, 837: 3077, 2932, 7159, 7160, 7158, 850: 2933, 854: 7157, 860: 7170, 7165, 7168, 7169, 912: 2941, 924: 7171, 962: 7164, 980: 7163, 983: 7167, 985: 7166, 1037: 7172}, + {663, 663, 553: 1033, 564: 1033, 1033, 568: 3934, 570: 3933, 579: 3932, 857: 3935, 3936}, + // 4240 + {665, 665, 553: 1034, 564: 1034, 1034}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 6407, 6402, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 6408, 53: 3116, 3336, 3466, 3467, 3770, 6405, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 6404, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 6410, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 6403, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 6413, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 6411, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 6406, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 567: 4505, 641: 6419, 668: 6418, 723: 4503, 786: 6416, 3111, 3112, 3110, 868: 6420, 942: 6417, 1115: 6421, 1320: 6414}, + {670, 670}, + {669, 669}, + {668, 668}, + // 4245 + {667, 667}, {666, 666}, - {665, 665}, {664, 664}, - {663, 663}, {662, 662}, - // 4225 + {661, 661}, + // 4250 {660, 660}, + {659, 659}, {658, 658}, {657, 657}, {656, 656}, - {655, 655}, - // 4230 - {654, 654}, - {653, 653}, - {652, 652}, - {651, 651}, - {23: 5860}, - // 4235 - {2351, 2351}, - {569: 7133}, - {547: 7134}, - {93: 2905, 2908, 96: 2938, 2906, 206: 2921, 545: 2949, 2948, 562: 2947, 566: 2933, 571: 7115, 601: 2932, 622: 2946, 670: 2942, 727: 2904, 3059, 790: 7113, 818: 2912, 821: 7114, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 7121, 7120, 837: 3058, 2913, 7118, 7119, 7117, 850: 2914, 854: 7116, 860: 7129, 7124, 7127, 7128, 912: 2922, 924: 7130, 962: 7123, 980: 7122, 983: 7126, 985: 7125, 1037: 7135}, - {2350, 2350}, - // 4240 - {547: 7137}, - {93: 2905, 2908, 96: 2938, 2906, 206: 2921, 545: 2949, 2948, 562: 2947, 566: 2933, 571: 7115, 601: 2932, 622: 2946, 670: 2942, 727: 2904, 3059, 790: 7113, 818: 2912, 821: 7114, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 7121, 7120, 837: 3058, 2913, 7118, 7119, 7117, 850: 2914, 854: 7116, 860: 7129, 7124, 7127, 7128, 912: 2922, 924: 7130, 962: 7123, 980: 7122, 983: 7126, 985: 7125, 1037: 7138}, - {2352, 2352}, - {2: 1274, 1274, 1274, 1274, 1274, 1274, 1274, 10: 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 53: 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 1274, 563: 1274, 576: 1274, 847: 6050, 849: 6052, 851: 6051, 952: 6053, 1006: 7140}, - {2: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 10: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 53: 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 6443, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 1261, 563: 1261, 576: 1261, 1263: 7141}, - // 4245 - {2: 2149, 2149, 2149, 2149, 2149, 2149, 2149, 10: 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 53: 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 2149, 563: 4743, 576: 2149, 976: 7142}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 576: 7143, 786: 6447, 3092, 3093, 3091, 1034: 6448, 1100: 6446}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 7145, 3092, 3093, 3091, 819: 6460, 1034: 6448, 1100: 7144}, - {9: 6456, 556: 7148}, - {1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1263, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 53: 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 551: 1272, 556: 1263, 560: 1272, 563: 1272, 570: 1272, 578: 1272, 1272, 1272, 590: 1272, 729: 7146, 1025: 6449}, - // 4250 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 6452, 786: 7147, 3092, 3093, 3091}, - {1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1263, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 53: 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 551: 1271, 556: 1263, 560: 1271, 563: 1271, 570: 1271, 578: 1271, 1271, 1271, 590: 1271, 729: 6454, 1025: 6453}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 6064, 575: 3984, 657: 6059, 786: 3983, 3092, 3093, 3091, 6063, 819: 6062, 909: 6061, 914: 6060, 6066, 973: 6056, 1010: 7149}, - {432, 432, 9: 6114, 578: 4729, 904: 4730, 7150}, - {2383, 2383}, // 4255 - {2386, 2386, 9: 4049}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 7224, 3092, 3093, 3091}, - {2: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 10: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 53: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 593: 5016, 869: 7222}, - {2: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 10: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 53: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 593: 5016, 869: 7213}, - {724: 7208}, + {655, 655}, + {23: 5901}, + {2357, 2357}, + {569: 7174}, + {547: 7175}, // 4260 - {164: 5768, 622: 5767, 1102: 7204}, - {213: 800, 228: 6252}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 593: 7199, 786: 3983, 3092, 3093, 3091, 819: 3985, 898: 7198}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 593: 7195, 645: 5944, 786: 3793, 3092, 3093, 3091, 820: 5943, 870: 5945, 987: 7194}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 6396, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 6401, 593: 7191, 786: 3793, 3092, 3093, 3091, 820: 5898, 913: 6403, 934: 6404, 6402, 984: 7190}, + {95: 2924, 2927, 98: 2957, 2925, 207: 2940, 545: 2968, 2967, 562: 2966, 566: 2952, 571: 7156, 601: 2951, 622: 2965, 662: 2961, 726: 3078, 728: 2923, 790: 7154, 818: 2931, 821: 7155, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 7162, 7161, 837: 3077, 2932, 7159, 7160, 7158, 850: 2933, 854: 7157, 860: 7170, 7165, 7168, 7169, 912: 2941, 924: 7171, 962: 7164, 980: 7163, 983: 7167, 985: 7166, 1037: 7176}, + {2356, 2356}, + {547: 7178}, + {95: 2924, 2927, 98: 2957, 2925, 207: 2940, 545: 2968, 2967, 562: 2966, 566: 2952, 571: 7156, 601: 2951, 622: 2965, 662: 2961, 726: 3078, 728: 2923, 790: 7154, 818: 2931, 821: 7155, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 7162, 7161, 837: 3077, 2932, 7159, 7160, 7158, 850: 2933, 854: 7157, 860: 7170, 7165, 7168, 7169, 912: 2941, 924: 7171, 962: 7164, 980: 7163, 983: 7167, 985: 7166, 1037: 7179}, + {2358, 2358}, // 4265 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 7186, 898: 7185}, - {213: 7177}, - {225: 7174}, - {586: 7171}, - {2: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 10: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 53: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 575: 2153, 593: 5016, 869: 7169}, + {2: 1278, 1278, 1278, 1278, 1278, 1278, 1278, 10: 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 53: 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278, 563: 1278, 576: 1278, 847: 6091, 849: 6093, 851: 6092, 952: 6094, 1006: 7181}, + {2: 1265, 1265, 1265, 1265, 1265, 1265, 1265, 10: 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 53: 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 6484, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 563: 1265, 576: 1265, 1265: 7182}, + {2: 2155, 2155, 2155, 2155, 2155, 2155, 2155, 10: 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 53: 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 2155, 563: 4762, 576: 2155, 976: 7183}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 576: 7184, 786: 6488, 3111, 3112, 3110, 1034: 6489, 1102: 6487}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 7186, 3111, 3112, 3110, 819: 6501, 1034: 6489, 1102: 7185}, // 4270 - {2: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 10: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 53: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 575: 2153, 593: 5016, 869: 7167}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 7168}, - {29, 29}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 3985, 898: 7170}, - {165, 165, 9: 3987}, + {9: 6497, 556: 7189}, + {1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1267, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 53: 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 551: 1276, 556: 1267, 560: 1276, 563: 1276, 570: 1276, 578: 1276, 1276, 1276, 590: 1276, 729: 7187, 1025: 6490}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 6493, 786: 7188, 3111, 3112, 3110}, + {1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1267, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 53: 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 551: 1275, 556: 1267, 560: 1275, 563: 1275, 570: 1275, 578: 1275, 1275, 1275, 590: 1275, 729: 6495, 1025: 6494}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 6105, 575: 4003, 657: 6100, 786: 4002, 3111, 3112, 3110, 6104, 819: 6103, 909: 6102, 914: 6101, 6107, 973: 6097, 1010: 7190}, // 4275 - {2: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 10: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 53: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 549: 2153, 593: 5016, 869: 7172}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 549: 4663, 786: 4662, 3092, 3093, 3091, 954: 7173}, - {192, 192}, - {2: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 10: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 53: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 593: 5016, 869: 7175}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 5594, 3092, 3093, 3091, 1005: 7176}, + {436, 436, 9: 6155, 578: 4748, 904: 4749, 7191}, + {2389, 2389}, + {2392, 2392, 9: 4068}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 7270, 3111, 3112, 3110}, + {2: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 10: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 53: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 593: 5035, 869: 7268}, // 4280 - {195, 195}, - {572: 7178}, - {545: 2949, 2948, 562: 2947, 566: 2933, 601: 2932, 622: 2946, 670: 2942, 672: 7180, 728: 3059, 790: 6426, 818: 6424, 821: 6427, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 6425, 6429, 6428, 837: 3058, 6431, 6432, 6433, 6430, 944: 7179}, - {351, 351, 556: 7183}, - {230: 7181}, + {2: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 10: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 53: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 593: 5035, 869: 7259}, + {724: 7254}, + {166: 5809, 622: 5808, 1104: 7250}, + {214: 804, 228: 6293}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 593: 7245, 786: 4002, 3111, 3112, 3110, 819: 4004, 898: 7244}, // 4285 - {547: 7182}, - {349, 349}, - {545: 2949, 2948, 562: 2947, 566: 2933, 601: 2932, 622: 2946, 670: 2942, 728: 3059, 790: 6426, 818: 6424, 821: 6427, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 6425, 6429, 6428, 837: 3058, 6431, 6432, 6433, 6430, 944: 7184}, - {350, 350}, - {2364, 2364, 9: 3987}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 593: 7241, 645: 5985, 786: 3812, 3111, 3112, 3110, 820: 5984, 870: 5986, 987: 7240}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 6437, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 6442, 593: 7237, 786: 3812, 3111, 3112, 3110, 820: 5939, 913: 6444, 934: 6445, 6443, 984: 7236}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 7232, 898: 7231}, + {214: 7218}, + {225: 7215}, // 4290 - {1269, 1269, 9: 1269, 217: 7188, 560: 7187}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 5333, 3092, 3093, 3091, 875: 7189}, - {2362, 2362}, - {2363, 2363, 9: 5334}, - {2366, 2366, 9: 6405}, + {586: 7212}, + {2: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 10: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 53: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 575: 2159, 593: 5035, 869: 7210}, + {2: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 10: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 53: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 575: 2159, 593: 5035, 869: 7208}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 7209}, + {29, 29}, // 4295 - {659: 7192}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 6396, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 6401, 786: 3793, 3092, 3093, 3091, 820: 5898, 913: 6403, 934: 6404, 6402, 984: 7193}, - {2365, 2365, 9: 6405}, - {2368, 2368, 9: 5947}, - {659: 7196}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 4004, 898: 7211}, + {165, 165, 9: 4006}, + {2: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 10: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 53: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 549: 2159, 593: 5035, 869: 7213}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 549: 4682, 786: 4681, 3111, 3112, 3110, 954: 7214}, + {192, 192}, // 4300 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 645: 5944, 786: 3793, 3092, 3093, 3091, 820: 5943, 870: 5945, 987: 7197}, - {2367, 2367, 9: 5947}, - {2361, 2361, 9: 3987, 742: 5392, 744: 5391, 1029: 7203}, - {659: 7200}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 3985, 898: 7201}, + {2: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 10: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 53: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 593: 5035, 869: 7216}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5622, 3111, 3112, 3110, 1005: 7217}, + {195, 195}, + {572: 7219}, + {545: 2968, 2967, 562: 2966, 566: 2952, 601: 2951, 622: 2965, 662: 2961, 672: 7221, 726: 3078, 790: 6467, 818: 6465, 821: 6468, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 6466, 6470, 6469, 837: 3077, 6472, 6473, 6474, 6471, 944: 7220}, // 4305 - {2361, 2361, 9: 3987, 742: 5392, 744: 5391, 1029: 7202}, - {2369, 2369}, - {2370, 2370}, - {2: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 10: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 53: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 575: 2153, 593: 5016, 869: 7205}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 3985, 898: 7206}, + {351, 351, 556: 7229}, + {230: 7222}, + {547: 7225, 641: 3756, 791: 7226, 1100: 7223, 1305: 7224}, + {355, 355, 9: 355}, + {349, 349, 9: 7227}, // 4310 - {2361, 2361, 9: 3987, 742: 5392, 744: 5391, 1029: 7207}, - {2374, 2374}, - {2: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 10: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 53: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 593: 5016, 869: 7209}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 7210, 3092, 3093, 3091}, - {544: 7211}, + {353, 353, 9: 353}, + {352, 352, 9: 352}, + {547: 7225, 641: 3756, 791: 7226, 1100: 7228}, + {354, 354, 9: 354}, + {545: 2968, 2967, 562: 2966, 566: 2952, 601: 2951, 622: 2965, 662: 2961, 726: 3078, 790: 6467, 818: 6465, 821: 6468, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 6466, 6470, 6469, 837: 3077, 6472, 6473, 6474, 6471, 944: 7230}, // 4315 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 7212}, - {2375, 2375}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 7214, 3092, 3093, 3091}, - {544: 7215}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 7216}, + {350, 350}, + {2370, 2370, 9: 4006}, + {1273, 1273, 9: 1273, 94: 7234, 560: 7233}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5359, 3111, 3112, 3110, 875: 7235}, + {2368, 2368}, // 4320 - {2517, 2517, 111: 4787, 577: 4788, 989: 7218, 1002: 7217, 1208: 7219}, - {2516, 2516, 111: 4787, 989: 7221}, - {2515, 2515, 577: 4788, 1002: 7220}, - {2376, 2376}, - {2513, 2513}, + {2369, 2369, 9: 5360}, + {2372, 2372, 9: 6446}, + {660: 7238}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 6437, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 6442, 786: 3812, 3111, 3112, 3110, 820: 5939, 913: 6444, 934: 6445, 6443, 984: 7239}, + {2371, 2371, 9: 6446}, // 4325 - {2514, 2514}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6045, 3092, 3093, 3091, 922: 7223}, - {2377, 2377}, - {2525, 2525}, - {2: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 10: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 53: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 593: 5423, 899: 7701}, + {2374, 2374, 9: 5988}, + {660: 7242}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 645: 5985, 786: 3812, 3111, 3112, 3110, 820: 5984, 870: 5986, 987: 7243}, + {2373, 2373, 9: 5988}, + {2367, 2367, 9: 4006, 742: 5418, 744: 5417, 1029: 7249}, // 4330 - {724: 7689}, - {724: 2511}, - {724: 2510}, - {724: 2509}, - {2: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 10: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 53: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 593: 5423, 899: 7666}, + {660: 7246}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 4004, 898: 7247}, + {2367, 2367, 9: 4006, 742: 5418, 744: 5417, 1029: 7248}, + {2375, 2375}, + {2376, 2376}, // 4335 - {18: 7584, 111: 7583, 142: 2403, 191: 2403, 672: 2403, 1510: 7582}, - {566: 7581}, - {2: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 10: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 53: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 547: 2151, 593: 5423, 645: 2151, 899: 7526}, - {2: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 10: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 53: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 547: 2151, 593: 5423, 899: 7520}, - {213: 7507}, + {2: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 10: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 53: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 575: 2159, 593: 5035, 869: 7251}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 4004, 898: 7252}, + {2367, 2367, 9: 4006, 742: 5418, 744: 5417, 1029: 7253}, + {2380, 2380}, + {2: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 10: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 53: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 593: 5035, 869: 7255}, // 4340 - {586: 7448}, - {2: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 10: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 53: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 575: 2151, 593: 5423, 899: 7412}, - {2: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 10: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 53: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 575: 2151, 593: 5423, 899: 7239}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 7240}, - {545: 7241}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 7256, 3111, 3112, 3110}, + {544: 7257}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 7258}, + {2381, 2381}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 7260, 3111, 3112, 3110}, // 4345 - {2: 128, 128, 128, 128, 128, 128, 128, 10: 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 133, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 620: 7245, 1209: 7247, 1245: 7246, 1294: 7244, 7243, 1423: 7248, 1481: 7242}, - {9: 7410, 52: 132}, + {544: 7261}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 7262}, + {2530, 2530, 108: 4806, 577: 4807, 989: 7264, 1002: 7263, 1210: 7265}, + {2529, 2529, 108: 4806, 989: 7267}, + {2528, 2528, 577: 4807, 1002: 7266}, + // 4350 + {2382, 2382}, + {2526, 2526}, + {2527, 2527}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6086, 3111, 3112, 3110, 922: 7269}, + {2383, 2383}, + // 4355 + {2538, 2538}, + {2: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 10: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 53: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 593: 5449, 899: 7748}, + {724: 7736}, + {724: 2524}, + {724: 2523}, + // 4360 + {724: 2522}, + {2: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 10: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 53: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 593: 5449, 899: 7713}, + {18: 7631, 108: 7630, 144: 2409, 192: 2409, 672: 2409, 1517: 7629}, + {566: 7628}, + {2: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 10: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 53: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 547: 2157, 593: 5449, 645: 2157, 899: 7573}, + // 4365 + {2: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 10: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 53: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 547: 2157, 593: 5449, 899: 7567}, + {214: 7554}, + {586: 7494}, + {2: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 10: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 53: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 575: 2157, 593: 5449, 899: 7458}, + {2: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 10: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 53: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 575: 2157, 593: 5449, 899: 7285}, + // 4370 + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 7286}, + {545: 7287}, + {2: 128, 128, 128, 128, 128, 128, 128, 10: 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 133, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 620: 7291, 1211: 7293, 1247: 7292, 1296: 7290, 7289, 1428: 7294, 1486: 7288}, + {9: 7456, 52: 132}, {9: 130, 52: 130}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 7408, 3092, 3093, 3091}, + // 4375 + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 7454, 3111, 3112, 3110}, {2: 127, 127, 127, 127, 127, 127, 127, 10: 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 53: 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127}, - // 4350 {2: 126, 126, 126, 126, 126, 126, 126, 10: 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 53: 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126}, {2: 125, 125, 125, 125, 125, 125, 125, 10: 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 53: 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125}, - {52: 7249}, - {57: 7277, 93: 7269, 2908, 96: 2938, 98: 3057, 101: 7266, 103: 7268, 545: 2949, 2948, 562: 2947, 566: 2933, 568: 7267, 571: 7115, 590: 3060, 592: 2919, 7270, 598: 2917, 601: 2932, 622: 2946, 633: 7273, 640: 7276, 670: 2942, 727: 2904, 3059, 790: 7250, 818: 2912, 821: 7251, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 7252, 7261, 837: 3058, 2913, 7256, 7257, 7254, 2918, 845: 7275, 850: 2914, 852: 7278, 7279, 7262, 860: 7263, 7258, 7259, 7253, 872: 7260, 2920, 876: 7264, 7255, 881: 7265, 7274, 7283, 7286, 7287, 7282, 7290, 7288, 7289, 7291, 7285, 7292, 7272, 7271, 7280, 7281, 7284}, - {122, 122, 553: 1029, 564: 1029, 1029, 568: 3915, 570: 3914, 579: 3913, 857: 3916, 3917}, - // 4355 - {124, 124, 553: 1030, 564: 1030, 1030}, + {52: 7295}, + // 4380 + {57: 7323, 95: 7315, 2927, 98: 2957, 100: 3076, 103: 7312, 105: 7314, 545: 2968, 2967, 562: 2966, 566: 2952, 568: 7313, 571: 7156, 590: 3079, 592: 2938, 7316, 598: 2936, 601: 2951, 622: 2965, 633: 7319, 640: 7322, 662: 2961, 726: 3078, 728: 2923, 790: 7296, 818: 2931, 821: 7297, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 7298, 7307, 837: 3077, 2932, 7302, 7303, 7300, 2937, 845: 7321, 850: 2933, 852: 7324, 7325, 7308, 860: 7309, 7304, 7305, 7299, 872: 7306, 2939, 876: 7310, 7301, 881: 7311, 7320, 7329, 7332, 7333, 7328, 7336, 7334, 7335, 7337, 7331, 7338, 7318, 7317, 7326, 7327, 7330}, + {122, 122, 553: 1033, 564: 1033, 1033, 568: 3934, 570: 3933, 579: 3932, 857: 3935, 3936}, + {124, 124, 553: 1034, 564: 1034, 1034}, {123, 123}, {121, 121}, + // 4385 {120, 120}, {119, 119}, - // 4360 {118, 118}, {117, 117}, {116, 116}, + // 4390 {115, 115}, {114, 114}, - // 4365 {113, 113}, {112, 112}, {111, 111}, + // 4395 {110, 110}, {105, 105}, - // 4370 - {57: 7407}, - {57: 82, 247: 7398, 576: 7399, 1450: 7397}, - {57: 7396}, - {57: 77, 93: 77, 77, 96: 77, 98: 77, 101: 77, 103: 77, 106: 77, 240: 7349, 545: 77, 77, 562: 77, 566: 77, 568: 77, 571: 77, 590: 77, 592: 77, 77, 598: 77, 601: 77, 622: 77, 633: 77, 640: 77, 670: 77, 727: 77, 77, 818: 77, 842: 77, 845: 77, 852: 77, 77, 1260: 7351, 1444: 7350, 7352}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 7338, 1262: 7339}, - // 4375 + {57: 7453}, + {57: 82, 247: 7444, 576: 7445, 1455: 7443}, + {57: 7442}, + // 4400 + {57: 77, 95: 77, 77, 98: 77, 100: 77, 103: 77, 105: 77, 109: 77, 240: 7395, 545: 77, 77, 562: 77, 566: 77, 568: 77, 571: 77, 590: 77, 592: 77, 77, 598: 77, 601: 77, 622: 77, 633: 77, 640: 77, 662: 77, 726: 77, 728: 77, 818: 77, 842: 77, 845: 77, 852: 77, 77, 1262: 7397, 1449: 7396, 7398}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 7384, 1264: 7385}, {63, 63}, {62, 62}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 603: 7318, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 7315, 1280: 7316, 1463: 7317}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 603: 7364, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 7361, 1282: 7362, 1468: 7363}, + // 4405 {51, 51}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 7310}, - // 4380 - {57: 7277, 93: 7269, 2908, 96: 2938, 98: 3057, 101: 7266, 103: 7268, 545: 2949, 2948, 562: 2947, 566: 2933, 568: 7267, 571: 7115, 590: 3060, 592: 2919, 7270, 598: 2917, 601: 2932, 622: 2946, 633: 7273, 640: 7276, 670: 2942, 727: 2904, 3059, 790: 7250, 818: 2912, 821: 7251, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 7252, 7261, 837: 3058, 2913, 7256, 7257, 7254, 2918, 845: 7275, 850: 2914, 852: 7278, 7279, 7262, 860: 7263, 7258, 7259, 7253, 872: 7260, 2920, 876: 7264, 7255, 881: 7265, 7274, 7283, 7286, 7287, 7282, 7290, 7288, 7289, 7291, 7285, 7301, 7272, 7271, 7280, 7281, 7284, 953: 7302}, - {1324: 7295}, - {57: 7294}, - {57: 7293}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 7356}, + {57: 7323, 95: 7315, 2927, 98: 2957, 100: 3076, 103: 7312, 105: 7314, 545: 2968, 2967, 562: 2966, 566: 2952, 568: 7313, 571: 7156, 590: 3079, 592: 2938, 7316, 598: 2936, 601: 2951, 622: 2965, 633: 7319, 640: 7322, 662: 2961, 726: 3078, 728: 2923, 790: 7296, 818: 2931, 821: 7297, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 7298, 7307, 837: 3077, 2932, 7302, 7303, 7300, 2937, 845: 7321, 850: 2933, 852: 7324, 7325, 7308, 860: 7309, 7304, 7305, 7299, 872: 7306, 2939, 876: 7310, 7301, 881: 7311, 7320, 7329, 7332, 7333, 7328, 7336, 7334, 7335, 7337, 7331, 7347, 7318, 7317, 7326, 7327, 7330, 953: 7348}, + {1328: 7341}, + {57: 7340}, + // 4410 + {57: 7339}, {42, 42}, - // 4385 {41, 41}, {40, 40}, {39, 39}, + // 4415 {38, 38}, {37, 37}, - // 4390 {36, 36}, {35, 35}, {34, 34}, + // 4420 {33, 33}, {32, 32}, - // 4395 {31, 31}, {30, 30}, {43, 43}, + // 4425 {44, 44}, - {93: 7269, 640: 7276, 845: 7275, 881: 7296, 7297}, - // 4400 - {47, 47, 57: 7298, 1259: 7300}, - {47, 47, 57: 7298, 1259: 7299}, + {95: 7315, 640: 7322, 845: 7321, 881: 7342, 7343}, + {47, 47, 57: 7344, 1261: 7346}, + {47, 47, 57: 7344, 1261: 7345}, {46, 46}, + // 4430 {45, 45}, {48, 48}, - // 4405 - {7309}, - {57: 7277, 93: 7269, 2908, 96: 2938, 98: 3057, 101: 7266, 103: 7268, 545: 2949, 2948, 562: 2947, 566: 2933, 568: 7267, 571: 7115, 590: 3060, 592: 2919, 7270, 598: 2917, 601: 2932, 622: 2946, 633: 7273, 640: 7276, 670: 2942, 727: 2904, 3059, 790: 7250, 818: 2912, 821: 7251, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 7252, 7261, 837: 3058, 2913, 7256, 7257, 7254, 2918, 845: 7275, 850: 2914, 852: 7278, 7279, 7262, 860: 7263, 7258, 7259, 7253, 872: 7260, 2920, 876: 7264, 7255, 881: 7265, 7274, 7283, 7286, 7287, 7282, 7290, 7288, 7289, 7291, 7285, 7303, 7272, 7271, 7280, 7281, 7284, 1108: 7304}, - {7308}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 7305}, - {106: 7306, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - // 4410 - {640: 7307}, - {49, 49, 57: 49}, - {57: 70, 93: 70, 70, 96: 70, 98: 70, 101: 70, 103: 70, 106: 70, 545: 70, 70, 562: 70, 566: 70, 568: 70, 571: 70, 590: 70, 592: 70, 70, 598: 70, 601: 70, 603: 70, 70, 622: 70, 633: 70, 640: 70, 670: 70, 727: 70, 70, 818: 70, 842: 70, 845: 70, 852: 70, 70, 1058: 70, 1108: 70}, - {57: 71, 93: 71, 71, 96: 71, 98: 71, 101: 71, 103: 71, 106: 71, 545: 71, 71, 562: 71, 566: 71, 568: 71, 571: 71, 590: 71, 592: 71, 71, 598: 71, 601: 71, 603: 71, 71, 622: 71, 633: 71, 640: 71, 670: 71, 727: 71, 71, 818: 71, 842: 71, 845: 71, 852: 71, 71, 1058: 71, 1108: 71}, - {265: 7311, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - // 4415 - {57: 7277, 93: 7269, 2908, 96: 2938, 98: 3057, 101: 7266, 103: 7268, 545: 2949, 2948, 562: 2947, 566: 2933, 568: 7267, 571: 7115, 590: 3060, 592: 2919, 7270, 598: 2917, 601: 2932, 622: 2946, 633: 7273, 640: 7276, 670: 2942, 727: 2904, 3059, 790: 7250, 818: 2912, 821: 7251, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 7252, 7261, 837: 3058, 2913, 7256, 7257, 7254, 2918, 845: 7275, 850: 2914, 852: 7278, 7279, 7262, 860: 7263, 7258, 7259, 7253, 872: 7260, 2920, 876: 7264, 7255, 881: 7265, 7274, 7283, 7286, 7287, 7282, 7290, 7288, 7289, 7291, 7285, 7301, 7272, 7271, 7280, 7281, 7284, 953: 7312}, - {57: 7277, 93: 7269, 2908, 96: 2938, 98: 3057, 101: 7266, 103: 7268, 106: 7313, 545: 2949, 2948, 562: 2947, 566: 2933, 568: 7267, 571: 7115, 590: 3060, 592: 2919, 7270, 598: 2917, 601: 2932, 622: 2946, 633: 7273, 640: 7276, 670: 2942, 727: 2904, 3059, 790: 7250, 818: 2912, 821: 7251, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 7252, 7261, 837: 3058, 2913, 7256, 7257, 7254, 2918, 845: 7275, 850: 2914, 852: 7278, 7279, 7262, 860: 7263, 7258, 7259, 7253, 872: 7260, 2920, 876: 7264, 7255, 881: 7265, 7274, 7283, 7286, 7287, 7282, 7290, 7288, 7289, 7291, 7285, 7303, 7272, 7271, 7280, 7281, 7284}, - {845: 7314}, - {50, 50, 57: 50}, - {581: 3801, 3799, 3800, 3798, 3796, 603: 7330, 815: 3797, 3795, 1291: 7328, 1478: 7329}, - // 4420 - {106: 59, 603: 59, 59}, - {106: 55, 603: 7318, 7323, 1181: 7324, 1280: 7322}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 7319}, - {581: 3801, 3799, 3800, 3798, 3796, 621: 7320, 815: 3797, 3795}, - {57: 7277, 93: 7269, 2908, 96: 2938, 98: 3057, 101: 7266, 103: 7268, 545: 2949, 2948, 562: 2947, 566: 2933, 568: 7267, 571: 7115, 590: 3060, 592: 2919, 7270, 598: 2917, 601: 2932, 622: 2946, 633: 7273, 640: 7276, 670: 2942, 727: 2904, 3059, 790: 7250, 818: 2912, 821: 7251, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 7252, 7261, 837: 3058, 2913, 7256, 7257, 7254, 2918, 845: 7275, 850: 2914, 852: 7278, 7279, 7262, 860: 7263, 7258, 7259, 7253, 872: 7260, 2920, 876: 7264, 7255, 881: 7265, 7274, 7283, 7286, 7287, 7282, 7290, 7288, 7289, 7291, 7285, 7301, 7272, 7271, 7280, 7281, 7284, 953: 7321}, - // 4425 - {57: 7277, 93: 7269, 2908, 96: 2938, 98: 3057, 101: 7266, 103: 7268, 106: 56, 545: 2949, 2948, 562: 2947, 566: 2933, 568: 7267, 571: 7115, 590: 3060, 592: 2919, 7270, 598: 2917, 601: 2932, 603: 56, 56, 622: 2946, 633: 7273, 640: 7276, 670: 2942, 727: 2904, 3059, 790: 7250, 818: 2912, 821: 7251, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 7252, 7261, 837: 3058, 2913, 7256, 7257, 7254, 2918, 845: 7275, 850: 2914, 852: 7278, 7279, 7262, 860: 7263, 7258, 7259, 7253, 872: 7260, 2920, 876: 7264, 7255, 881: 7265, 7274, 7283, 7286, 7287, 7282, 7290, 7288, 7289, 7291, 7285, 7303, 7272, 7271, 7280, 7281, 7284}, - {106: 58, 603: 58, 58}, - {57: 7277, 93: 7269, 2908, 96: 2938, 98: 3057, 101: 7266, 103: 7268, 545: 2949, 2948, 562: 2947, 566: 2933, 568: 7267, 571: 7115, 590: 3060, 592: 2919, 7270, 598: 2917, 601: 2932, 622: 2946, 633: 7273, 640: 7276, 670: 2942, 727: 2904, 3059, 790: 7250, 818: 2912, 821: 7251, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 7252, 7261, 837: 3058, 2913, 7256, 7257, 7254, 2918, 845: 7275, 850: 2914, 852: 7278, 7279, 7262, 860: 7263, 7258, 7259, 7253, 872: 7260, 2920, 876: 7264, 7255, 881: 7265, 7274, 7283, 7286, 7287, 7282, 7290, 7288, 7289, 7291, 7285, 7301, 7272, 7271, 7280, 7281, 7284, 953: 7327}, - {106: 7325}, - {633: 7326}, - // 4430 - {52, 52}, - {57: 7277, 93: 7269, 2908, 96: 2938, 98: 3057, 101: 7266, 103: 7268, 106: 54, 545: 2949, 2948, 562: 2947, 566: 2933, 568: 7267, 571: 7115, 590: 3060, 592: 2919, 7270, 598: 2917, 601: 2932, 622: 2946, 633: 7273, 640: 7276, 670: 2942, 727: 2904, 3059, 790: 7250, 818: 2912, 821: 7251, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 7252, 7261, 837: 3058, 2913, 7256, 7257, 7254, 2918, 845: 7275, 850: 2914, 852: 7278, 7279, 7262, 860: 7263, 7258, 7259, 7253, 872: 7260, 2920, 876: 7264, 7255, 881: 7265, 7274, 7283, 7286, 7287, 7282, 7290, 7288, 7289, 7291, 7285, 7303, 7272, 7271, 7280, 7281, 7284}, - {106: 61, 603: 61, 61}, - {106: 55, 603: 7330, 7323, 1181: 7335, 1291: 7334}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 7331}, + {7355}, + {57: 7323, 95: 7315, 2927, 98: 2957, 100: 3076, 103: 7312, 105: 7314, 545: 2968, 2967, 562: 2966, 566: 2952, 568: 7313, 571: 7156, 590: 3079, 592: 2938, 7316, 598: 2936, 601: 2951, 622: 2965, 633: 7319, 640: 7322, 662: 2961, 726: 3078, 728: 2923, 790: 7296, 818: 2931, 821: 7297, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 7298, 7307, 837: 3077, 2932, 7302, 7303, 7300, 2937, 845: 7321, 850: 2933, 852: 7324, 7325, 7308, 860: 7309, 7304, 7305, 7299, 872: 7306, 2939, 876: 7310, 7301, 881: 7311, 7320, 7329, 7332, 7333, 7328, 7336, 7334, 7335, 7337, 7331, 7349, 7318, 7317, 7326, 7327, 7330, 1110: 7350}, + {7354}, // 4435 - {581: 3801, 3799, 3800, 3798, 3796, 621: 7332, 815: 3797, 3795}, - {57: 7277, 93: 7269, 2908, 96: 2938, 98: 3057, 101: 7266, 103: 7268, 545: 2949, 2948, 562: 2947, 566: 2933, 568: 7267, 571: 7115, 590: 3060, 592: 2919, 7270, 598: 2917, 601: 2932, 622: 2946, 633: 7273, 640: 7276, 670: 2942, 727: 2904, 3059, 790: 7250, 818: 2912, 821: 7251, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 7252, 7261, 837: 3058, 2913, 7256, 7257, 7254, 2918, 845: 7275, 850: 2914, 852: 7278, 7279, 7262, 860: 7263, 7258, 7259, 7253, 872: 7260, 2920, 876: 7264, 7255, 881: 7265, 7274, 7283, 7286, 7287, 7282, 7290, 7288, 7289, 7291, 7285, 7301, 7272, 7271, 7280, 7281, 7284, 953: 7333}, - {57: 7277, 93: 7269, 2908, 96: 2938, 98: 3057, 101: 7266, 103: 7268, 106: 57, 545: 2949, 2948, 562: 2947, 566: 2933, 568: 7267, 571: 7115, 590: 3060, 592: 2919, 7270, 598: 2917, 601: 2932, 603: 57, 57, 622: 2946, 633: 7273, 640: 7276, 670: 2942, 727: 2904, 3059, 790: 7250, 818: 2912, 821: 7251, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 7252, 7261, 837: 3058, 2913, 7256, 7257, 7254, 2918, 845: 7275, 850: 2914, 852: 7278, 7279, 7262, 860: 7263, 7258, 7259, 7253, 872: 7260, 2920, 876: 7264, 7255, 881: 7265, 7274, 7283, 7286, 7287, 7282, 7290, 7288, 7289, 7291, 7285, 7303, 7272, 7271, 7280, 7281, 7284}, - {106: 60, 603: 60, 60}, - {106: 7336}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 7351}, + {109: 7352, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {640: 7353}, + {49, 49, 57: 49}, + {57: 70, 95: 70, 70, 98: 70, 100: 70, 103: 70, 105: 70, 109: 70, 545: 70, 70, 562: 70, 566: 70, 568: 70, 571: 70, 590: 70, 592: 70, 70, 598: 70, 601: 70, 603: 70, 70, 622: 70, 633: 70, 640: 70, 662: 70, 726: 70, 728: 70, 818: 70, 842: 70, 845: 70, 852: 70, 70, 1058: 70, 1110: 70}, // 4440 - {633: 7337}, - {53, 53}, - {581: 3801, 3799, 3800, 3798, 3796, 621: 7342, 815: 3797, 3795}, - {106: 7340}, - {593: 7341}, + {57: 71, 95: 71, 71, 98: 71, 100: 71, 103: 71, 105: 71, 109: 71, 545: 71, 71, 562: 71, 566: 71, 568: 71, 571: 71, 590: 71, 592: 71, 71, 598: 71, 601: 71, 603: 71, 71, 622: 71, 633: 71, 640: 71, 662: 71, 726: 71, 728: 71, 818: 71, 842: 71, 845: 71, 852: 71, 71, 1058: 71, 1110: 71}, + {266: 7357, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {57: 7323, 95: 7315, 2927, 98: 2957, 100: 3076, 103: 7312, 105: 7314, 545: 2968, 2967, 562: 2966, 566: 2952, 568: 7313, 571: 7156, 590: 3079, 592: 2938, 7316, 598: 2936, 601: 2951, 622: 2965, 633: 7319, 640: 7322, 662: 2961, 726: 3078, 728: 2923, 790: 7296, 818: 2931, 821: 7297, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 7298, 7307, 837: 3077, 2932, 7302, 7303, 7300, 2937, 845: 7321, 850: 2933, 852: 7324, 7325, 7308, 860: 7309, 7304, 7305, 7299, 872: 7306, 2939, 876: 7310, 7301, 881: 7311, 7320, 7329, 7332, 7333, 7328, 7336, 7334, 7335, 7337, 7331, 7347, 7318, 7317, 7326, 7327, 7330, 953: 7358}, + {57: 7323, 95: 7315, 2927, 98: 2957, 100: 3076, 103: 7312, 105: 7314, 109: 7359, 545: 2968, 2967, 562: 2966, 566: 2952, 568: 7313, 571: 7156, 590: 3079, 592: 2938, 7316, 598: 2936, 601: 2951, 622: 2965, 633: 7319, 640: 7322, 662: 2961, 726: 3078, 728: 2923, 790: 7296, 818: 2931, 821: 7297, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 7298, 7307, 837: 3077, 2932, 7302, 7303, 7300, 2937, 845: 7321, 850: 2933, 852: 7324, 7325, 7308, 860: 7309, 7304, 7305, 7299, 872: 7306, 2939, 876: 7310, 7301, 881: 7311, 7320, 7329, 7332, 7333, 7328, 7336, 7334, 7335, 7337, 7331, 7349, 7318, 7317, 7326, 7327, 7330}, + {845: 7360}, // 4445 - {68, 68}, - {57: 7277, 93: 7269, 2908, 96: 2938, 98: 3057, 101: 7266, 103: 7268, 545: 2949, 2948, 562: 2947, 566: 2933, 568: 7267, 571: 7115, 590: 3060, 592: 2919, 7270, 598: 2917, 601: 2932, 622: 2946, 633: 7273, 640: 7276, 670: 2942, 727: 2904, 3059, 790: 7250, 818: 2912, 821: 7251, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 7252, 7261, 837: 3058, 2913, 7256, 7257, 7254, 2918, 845: 7275, 850: 2914, 852: 7278, 7279, 7262, 860: 7263, 7258, 7259, 7253, 872: 7260, 2920, 876: 7264, 7255, 881: 7265, 7274, 7283, 7286, 7287, 7282, 7290, 7288, 7289, 7291, 7285, 7301, 7272, 7271, 7280, 7281, 7284, 953: 7343}, - {57: 7277, 93: 7269, 2908, 96: 2938, 98: 3057, 101: 7266, 103: 7268, 106: 66, 545: 2949, 2948, 562: 2947, 566: 2933, 568: 7267, 571: 7115, 590: 3060, 592: 2919, 7270, 598: 2917, 601: 2932, 604: 7346, 622: 2946, 633: 7273, 640: 7276, 670: 2942, 727: 2904, 3059, 790: 7250, 818: 2912, 821: 7251, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 7252, 7261, 837: 3058, 2913, 7256, 7257, 7254, 2918, 845: 7275, 850: 2914, 852: 7278, 7279, 7262, 860: 7263, 7258, 7259, 7253, 872: 7260, 2920, 876: 7264, 7255, 881: 7265, 7274, 7283, 7286, 7287, 7282, 7290, 7288, 7289, 7291, 7285, 7303, 7272, 7271, 7280, 7281, 7284, 1058: 7345, 1440: 7344}, - {106: 67}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 7338, 1262: 7348}, + {50, 50, 57: 50}, + {581: 3820, 3818, 3819, 3817, 3815, 603: 7376, 815: 3816, 3814, 1293: 7374, 1483: 7375}, + {109: 59, 603: 59, 59}, + {109: 55, 603: 7364, 7369, 1183: 7370, 1282: 7368}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 7365}, // 4450 - {57: 7277, 93: 7269, 2908, 96: 2938, 98: 3057, 101: 7266, 103: 7268, 545: 2949, 2948, 562: 2947, 566: 2933, 568: 7267, 571: 7115, 590: 3060, 592: 2919, 7270, 598: 2917, 601: 2932, 622: 2946, 633: 7273, 640: 7276, 670: 2942, 727: 2904, 3059, 790: 7250, 818: 2912, 821: 7251, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 7252, 7261, 837: 3058, 2913, 7256, 7257, 7254, 2918, 845: 7275, 850: 2914, 852: 7278, 7279, 7262, 860: 7263, 7258, 7259, 7253, 872: 7260, 2920, 876: 7264, 7255, 881: 7265, 7274, 7283, 7286, 7287, 7282, 7290, 7288, 7289, 7291, 7285, 7301, 7272, 7271, 7280, 7281, 7284, 953: 7347}, - {57: 7277, 93: 7269, 2908, 96: 2938, 98: 3057, 101: 7266, 103: 7268, 106: 64, 545: 2949, 2948, 562: 2947, 566: 2933, 568: 7267, 571: 7115, 590: 3060, 592: 2919, 7270, 598: 2917, 601: 2932, 622: 2946, 633: 7273, 640: 7276, 670: 2942, 727: 2904, 3059, 790: 7250, 818: 2912, 821: 7251, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 7252, 7261, 837: 3058, 2913, 7256, 7257, 7254, 2918, 845: 7275, 850: 2914, 852: 7278, 7279, 7262, 860: 7263, 7258, 7259, 7253, 872: 7260, 2920, 876: 7264, 7255, 881: 7265, 7274, 7283, 7286, 7287, 7282, 7290, 7288, 7289, 7291, 7285, 7303, 7272, 7271, 7280, 7281, 7284}, - {106: 65}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 7360, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 7361, 3092, 3093, 3091, 1356: 7364, 1370: 7365, 1443: 7362, 1447: 7363}, - {57: 76, 93: 76, 76, 96: 76, 98: 76, 101: 76, 103: 76, 106: 76, 240: 7349, 545: 76, 76, 562: 76, 566: 76, 568: 76, 571: 76, 590: 76, 592: 76, 76, 598: 76, 601: 76, 622: 76, 633: 76, 640: 76, 670: 76, 727: 76, 76, 818: 76, 842: 76, 845: 76, 852: 76, 76, 1260: 7358}, + {581: 3820, 3818, 3819, 3817, 3815, 621: 7366, 815: 3816, 3814}, + {57: 7323, 95: 7315, 2927, 98: 2957, 100: 3076, 103: 7312, 105: 7314, 545: 2968, 2967, 562: 2966, 566: 2952, 568: 7313, 571: 7156, 590: 3079, 592: 2938, 7316, 598: 2936, 601: 2951, 622: 2965, 633: 7319, 640: 7322, 662: 2961, 726: 3078, 728: 2923, 790: 7296, 818: 2931, 821: 7297, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 7298, 7307, 837: 3077, 2932, 7302, 7303, 7300, 2937, 845: 7321, 850: 2933, 852: 7324, 7325, 7308, 860: 7309, 7304, 7305, 7299, 872: 7306, 2939, 876: 7310, 7301, 881: 7311, 7320, 7329, 7332, 7333, 7328, 7336, 7334, 7335, 7337, 7331, 7347, 7318, 7317, 7326, 7327, 7330, 953: 7367}, + {57: 7323, 95: 7315, 2927, 98: 2957, 100: 3076, 103: 7312, 105: 7314, 109: 56, 545: 2968, 2967, 562: 2966, 566: 2952, 568: 7313, 571: 7156, 590: 3079, 592: 2938, 7316, 598: 2936, 601: 2951, 603: 56, 56, 622: 2965, 633: 7319, 640: 7322, 662: 2961, 726: 3078, 728: 2923, 790: 7296, 818: 2931, 821: 7297, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 7298, 7307, 837: 3077, 2932, 7302, 7303, 7300, 2937, 845: 7321, 850: 2933, 852: 7324, 7325, 7308, 860: 7309, 7304, 7305, 7299, 872: 7306, 2939, 876: 7310, 7301, 881: 7311, 7320, 7329, 7332, 7333, 7328, 7336, 7334, 7335, 7337, 7331, 7349, 7318, 7317, 7326, 7327, 7330}, + {109: 58, 603: 58, 58}, + {57: 7323, 95: 7315, 2927, 98: 2957, 100: 3076, 103: 7312, 105: 7314, 545: 2968, 2967, 562: 2966, 566: 2952, 568: 7313, 571: 7156, 590: 3079, 592: 2938, 7316, 598: 2936, 601: 2951, 622: 2965, 633: 7319, 640: 7322, 662: 2961, 726: 3078, 728: 2923, 790: 7296, 818: 2931, 821: 7297, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 7298, 7307, 837: 3077, 2932, 7302, 7303, 7300, 2937, 845: 7321, 850: 2933, 852: 7324, 7325, 7308, 860: 7309, 7304, 7305, 7299, 872: 7306, 2939, 876: 7310, 7301, 881: 7311, 7320, 7329, 7332, 7333, 7328, 7336, 7334, 7335, 7337, 7331, 7347, 7318, 7317, 7326, 7327, 7330, 953: 7373}, // 4455 - {7357}, - {57: 73, 93: 73, 73, 96: 73, 98: 73, 101: 73, 103: 73, 106: 73, 545: 73, 73, 562: 73, 566: 73, 568: 73, 571: 73, 590: 73, 592: 73, 73, 598: 73, 601: 73, 622: 73, 633: 73, 640: 73, 670: 73, 727: 73, 73, 818: 73, 842: 73, 845: 73, 852: 73, 73, 1451: 7353}, - {57: 7277, 93: 7269, 2908, 96: 2938, 98: 3057, 101: 7266, 103: 7268, 106: 7355, 545: 2949, 2948, 562: 2947, 566: 2933, 568: 7267, 571: 7115, 590: 3060, 592: 2919, 7270, 598: 2917, 601: 2932, 622: 2946, 633: 7273, 640: 7276, 670: 2942, 727: 2904, 3059, 790: 7250, 818: 2912, 821: 7251, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 7252, 7261, 837: 3058, 2913, 7256, 7257, 7254, 2918, 845: 7275, 850: 2914, 852: 7278, 7279, 7262, 860: 7263, 7258, 7259, 7253, 872: 7260, 2920, 876: 7264, 7255, 881: 7265, 7274, 7283, 7286, 7287, 7282, 7290, 7288, 7289, 7291, 7285, 7354, 7272, 7271, 7280, 7281, 7284}, - {7356}, - {69, 69, 57: 69}, + {109: 7371}, + {633: 7372}, + {52, 52}, + {57: 7323, 95: 7315, 2927, 98: 2957, 100: 3076, 103: 7312, 105: 7314, 109: 54, 545: 2968, 2967, 562: 2966, 566: 2952, 568: 7313, 571: 7156, 590: 3079, 592: 2938, 7316, 598: 2936, 601: 2951, 622: 2965, 633: 7319, 640: 7322, 662: 2961, 726: 3078, 728: 2923, 790: 7296, 818: 2931, 821: 7297, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 7298, 7307, 837: 3077, 2932, 7302, 7303, 7300, 2937, 845: 7321, 850: 2933, 852: 7324, 7325, 7308, 860: 7309, 7304, 7305, 7299, 872: 7306, 2939, 876: 7310, 7301, 881: 7311, 7320, 7329, 7332, 7333, 7328, 7336, 7334, 7335, 7337, 7331, 7349, 7318, 7317, 7326, 7327, 7330}, + {109: 61, 603: 61, 61}, // 4460 - {57: 72, 93: 72, 72, 96: 72, 98: 72, 101: 72, 103: 72, 106: 72, 545: 72, 72, 562: 72, 566: 72, 568: 72, 571: 72, 590: 72, 592: 72, 72, 598: 72, 601: 72, 622: 72, 633: 72, 640: 72, 670: 72, 727: 72, 72, 818: 72, 842: 72, 845: 72, 852: 72, 72}, - {57: 75, 93: 75, 75, 96: 75, 98: 75, 101: 75, 103: 75, 106: 75, 240: 75, 545: 75, 75, 562: 75, 566: 75, 568: 75, 571: 75, 590: 75, 592: 75, 75, 598: 75, 601: 75, 622: 75, 633: 75, 640: 75, 670: 75, 727: 75, 75, 818: 75, 842: 75, 845: 75, 852: 75, 75}, - {7359}, - {57: 74, 93: 74, 74, 96: 74, 98: 74, 101: 74, 103: 74, 106: 74, 240: 74, 545: 74, 74, 562: 74, 566: 74, 568: 74, 571: 74, 590: 74, 592: 74, 74, 598: 74, 601: 74, 622: 74, 633: 74, 640: 74, 670: 74, 727: 74, 74, 818: 74, 842: 74, 845: 74, 852: 74, 74}, - {9: 2124, 127: 2124, 136: 2124, 183: 2124, 185: 2124, 2124, 2124, 2124, 196: 2124, 198: 2124, 200: 2124, 209: 2124, 214: 2124, 2124, 2124, 220: 2124, 2124, 223: 2124, 567: 2124, 571: 2124, 600: 2124, 723: 2124, 746: 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 755: 2124, 2124, 2124, 2124, 2124, 762: 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 2124, 1360: 7389}, + {109: 55, 603: 7376, 7369, 1183: 7381, 1293: 7380}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 7377}, + {581: 3820, 3818, 3819, 3817, 3815, 621: 7378, 815: 3816, 3814}, + {57: 7323, 95: 7315, 2927, 98: 2957, 100: 3076, 103: 7312, 105: 7314, 545: 2968, 2967, 562: 2966, 566: 2952, 568: 7313, 571: 7156, 590: 3079, 592: 2938, 7316, 598: 2936, 601: 2951, 622: 2965, 633: 7319, 640: 7322, 662: 2961, 726: 3078, 728: 2923, 790: 7296, 818: 2931, 821: 7297, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 7298, 7307, 837: 3077, 2932, 7302, 7303, 7300, 2937, 845: 7321, 850: 2933, 852: 7324, 7325, 7308, 860: 7309, 7304, 7305, 7299, 872: 7306, 2939, 876: 7310, 7301, 881: 7311, 7320, 7329, 7332, 7333, 7328, 7336, 7334, 7335, 7337, 7331, 7347, 7318, 7317, 7326, 7327, 7330, 953: 7379}, + {57: 7323, 95: 7315, 2927, 98: 2957, 100: 3076, 103: 7312, 105: 7314, 109: 57, 545: 2968, 2967, 562: 2966, 566: 2952, 568: 7313, 571: 7156, 590: 3079, 592: 2938, 7316, 598: 2936, 601: 2951, 603: 57, 57, 622: 2965, 633: 7319, 640: 7322, 662: 2961, 726: 3078, 728: 2923, 790: 7296, 818: 2931, 821: 7297, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 7298, 7307, 837: 3077, 2932, 7302, 7303, 7300, 2937, 845: 7321, 850: 2933, 852: 7324, 7325, 7308, 860: 7309, 7304, 7305, 7299, 872: 7306, 2939, 876: 7310, 7301, 881: 7311, 7320, 7329, 7332, 7333, 7328, 7336, 7334, 7335, 7337, 7331, 7349, 7318, 7317, 7326, 7327, 7330}, // 4465 - {9: 104, 127: 104, 136: 104, 183: 104, 185: 104, 104, 104, 104, 196: 104, 198: 104, 200: 104, 209: 104, 214: 104, 104, 104, 220: 104, 104, 223: 104, 567: 104, 571: 104, 600: 104, 723: 104, 746: 104, 104, 104, 104, 104, 104, 104, 104, 755: 104, 104, 104, 104, 104, 762: 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104}, - {9: 7383, 127: 5074, 136: 5075, 183: 5064, 185: 5085, 5084, 5047, 5087, 196: 5086, 198: 5066, 200: 5044, 209: 5081, 214: 5053, 5043, 5062, 220: 5070, 5069, 223: 5073, 567: 5068, 571: 5063, 600: 5058, 723: 5067, 746: 5050, 5048, 5072, 5071, 5045, 5041, 5035, 5049, 755: 5059, 5042, 5077, 5051, 5052, 762: 5036, 5037, 5038, 5039, 5040, 5065, 5079, 5083, 5078, 5033, 5082, 5034, 5046, 5032, 5076, 5031, 5080, 969: 5054, 1040: 5056, 1044: 5030, 5060, 5027, 1053: 5025, 1061: 5028, 5029, 1069: 5026, 1074: 5055, 1078: 5023, 5057, 1099: 5024, 1103: 5061, 1106: 7384, 1115: 5088}, - {272: 7366}, - {272: 97}, - {272: 96}, + {109: 60, 603: 60, 60}, + {109: 7382}, + {633: 7383}, + {53, 53}, + {581: 3820, 3818, 3819, 3817, 3815, 621: 7388, 815: 3816, 3814}, // 4470 - {572: 7367}, - {550: 7372, 573: 3078, 814: 7374, 1258: 7370, 1261: 7369, 1296: 7373, 7375, 7371, 1448: 7368}, - {9: 7381, 57: 7277, 93: 7269, 2908, 96: 2938, 98: 3057, 101: 7266, 103: 7268, 545: 2949, 2948, 562: 2947, 566: 2933, 568: 7267, 571: 7115, 590: 3060, 592: 2919, 7270, 598: 2917, 601: 2932, 622: 2946, 633: 7273, 640: 7276, 670: 2942, 727: 2904, 3059, 790: 7250, 818: 2912, 821: 7251, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 7252, 7261, 837: 3058, 2913, 7256, 7257, 7254, 2918, 845: 7275, 850: 2914, 852: 7278, 7279, 7262, 860: 7263, 7258, 7259, 7253, 872: 7260, 2920, 876: 7264, 7255, 881: 7265, 7274, 7283, 7286, 7287, 7282, 7290, 7288, 7289, 7291, 7285, 7380, 7272, 7271, 7280, 7281, 7284}, - {9: 95, 57: 95, 93: 95, 95, 96: 95, 98: 95, 101: 95, 103: 95, 545: 95, 95, 562: 95, 566: 95, 568: 95, 571: 95, 590: 95, 592: 95, 95, 598: 95, 601: 95, 622: 95, 633: 95, 640: 95, 670: 95, 727: 95, 95, 818: 95, 842: 95, 845: 95, 852: 95, 95}, - {9: 93, 57: 93, 93: 93, 93, 96: 93, 98: 93, 101: 93, 103: 93, 545: 93, 93, 562: 93, 566: 93, 568: 93, 571: 93, 590: 93, 592: 93, 93, 598: 93, 601: 93, 622: 93, 633: 93, 640: 93, 670: 93, 727: 93, 93, 818: 93, 842: 93, 845: 93, 852: 93, 93}, + {109: 7386}, + {593: 7387}, + {68, 68}, + {57: 7323, 95: 7315, 2927, 98: 2957, 100: 3076, 103: 7312, 105: 7314, 545: 2968, 2967, 562: 2966, 566: 2952, 568: 7313, 571: 7156, 590: 3079, 592: 2938, 7316, 598: 2936, 601: 2951, 622: 2965, 633: 7319, 640: 7322, 662: 2961, 726: 3078, 728: 2923, 790: 7296, 818: 2931, 821: 7297, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 7298, 7307, 837: 3077, 2932, 7302, 7303, 7300, 2937, 845: 7321, 850: 2933, 852: 7324, 7325, 7308, 860: 7309, 7304, 7305, 7299, 872: 7306, 2939, 876: 7310, 7301, 881: 7311, 7320, 7329, 7332, 7333, 7328, 7336, 7334, 7335, 7337, 7331, 7347, 7318, 7317, 7326, 7327, 7330, 953: 7389}, + {57: 7323, 95: 7315, 2927, 98: 2957, 100: 3076, 103: 7312, 105: 7314, 109: 66, 545: 2968, 2967, 562: 2966, 566: 2952, 568: 7313, 571: 7156, 590: 3079, 592: 2938, 7316, 598: 2936, 601: 2951, 604: 7392, 622: 2965, 633: 7319, 640: 7322, 662: 2961, 726: 3078, 728: 2923, 790: 7296, 818: 2931, 821: 7297, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 7298, 7307, 837: 3077, 2932, 7302, 7303, 7300, 2937, 845: 7321, 850: 2933, 852: 7324, 7325, 7308, 860: 7309, 7304, 7305, 7299, 872: 7306, 2939, 876: 7310, 7301, 881: 7311, 7320, 7329, 7332, 7333, 7328, 7336, 7334, 7335, 7337, 7331, 7349, 7318, 7317, 7326, 7327, 7330, 1058: 7391, 1445: 7390}, // 4475 - {9: 92, 57: 92, 93: 92, 92, 96: 92, 98: 92, 101: 92, 103: 92, 545: 92, 92, 562: 92, 566: 92, 568: 92, 571: 92, 590: 92, 592: 92, 92, 598: 92, 601: 92, 622: 92, 633: 92, 640: 92, 670: 92, 727: 92, 92, 818: 92, 842: 92, 845: 92, 852: 92, 92}, - {408: 7379}, - {9: 90, 57: 90, 93: 90, 90, 96: 90, 98: 90, 101: 90, 103: 90, 545: 90, 90, 562: 90, 566: 90, 568: 90, 571: 90, 590: 90, 592: 90, 90, 598: 90, 601: 90, 622: 90, 633: 90, 640: 90, 670: 90, 727: 90, 90, 818: 90, 842: 90, 845: 90, 852: 90, 90}, - {9: 89, 57: 89, 93: 89, 89, 96: 89, 98: 89, 101: 89, 103: 89, 545: 89, 89, 562: 89, 566: 89, 568: 89, 571: 89, 590: 89, 592: 89, 89, 598: 89, 601: 89, 622: 89, 633: 89, 640: 89, 670: 89, 727: 89, 89, 818: 89, 842: 89, 845: 89, 852: 89, 89}, - {197: 7377, 547: 87, 1425: 7376}, + {109: 67}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 7384, 1264: 7394}, + {57: 7323, 95: 7315, 2927, 98: 2957, 100: 3076, 103: 7312, 105: 7314, 545: 2968, 2967, 562: 2966, 566: 2952, 568: 7313, 571: 7156, 590: 3079, 592: 2938, 7316, 598: 2936, 601: 2951, 622: 2965, 633: 7319, 640: 7322, 662: 2961, 726: 3078, 728: 2923, 790: 7296, 818: 2931, 821: 7297, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 7298, 7307, 837: 3077, 2932, 7302, 7303, 7300, 2937, 845: 7321, 850: 2933, 852: 7324, 7325, 7308, 860: 7309, 7304, 7305, 7299, 872: 7306, 2939, 876: 7310, 7301, 881: 7311, 7320, 7329, 7332, 7333, 7328, 7336, 7334, 7335, 7337, 7331, 7347, 7318, 7317, 7326, 7327, 7330, 953: 7393}, + {57: 7323, 95: 7315, 2927, 98: 2957, 100: 3076, 103: 7312, 105: 7314, 109: 64, 545: 2968, 2967, 562: 2966, 566: 2952, 568: 7313, 571: 7156, 590: 3079, 592: 2938, 7316, 598: 2936, 601: 2951, 622: 2965, 633: 7319, 640: 7322, 662: 2961, 726: 3078, 728: 2923, 790: 7296, 818: 2931, 821: 7297, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 7298, 7307, 837: 3077, 2932, 7302, 7303, 7300, 2937, 845: 7321, 850: 2933, 852: 7324, 7325, 7308, 860: 7309, 7304, 7305, 7299, 872: 7306, 2939, 876: 7310, 7301, 881: 7311, 7320, 7329, 7332, 7333, 7328, 7336, 7334, 7335, 7337, 7331, 7349, 7318, 7317, 7326, 7327, 7330}, + {109: 65}, // 4480 - {547: 7378}, - {547: 86}, - {9: 88, 57: 88, 93: 88, 88, 96: 88, 98: 88, 101: 88, 103: 88, 545: 88, 88, 562: 88, 566: 88, 568: 88, 571: 88, 590: 88, 592: 88, 88, 598: 88, 601: 88, 622: 88, 633: 88, 640: 88, 670: 88, 727: 88, 88, 818: 88, 842: 88, 845: 88, 852: 88, 88}, - {9: 91, 57: 91, 93: 91, 91, 96: 91, 98: 91, 101: 91, 103: 91, 545: 91, 91, 562: 91, 566: 91, 568: 91, 571: 91, 590: 91, 592: 91, 91, 598: 91, 601: 91, 622: 91, 633: 91, 640: 91, 670: 91, 727: 91, 91, 818: 91, 842: 91, 845: 91, 852: 91, 91}, - {98}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 7406, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 7407, 3111, 3112, 3110, 1360: 7410, 1374: 7411, 1448: 7408, 1452: 7409}, + {57: 76, 95: 76, 76, 98: 76, 100: 76, 103: 76, 105: 76, 109: 76, 240: 7395, 545: 76, 76, 562: 76, 566: 76, 568: 76, 571: 76, 590: 76, 592: 76, 76, 598: 76, 601: 76, 622: 76, 633: 76, 640: 76, 662: 76, 726: 76, 728: 76, 818: 76, 842: 76, 845: 76, 852: 76, 76, 1262: 7404}, + {7403}, + {57: 73, 95: 73, 73, 98: 73, 100: 73, 103: 73, 105: 73, 109: 73, 545: 73, 73, 562: 73, 566: 73, 568: 73, 571: 73, 590: 73, 592: 73, 73, 598: 73, 601: 73, 622: 73, 633: 73, 640: 73, 662: 73, 726: 73, 728: 73, 818: 73, 842: 73, 845: 73, 852: 73, 73, 1456: 7399}, + {57: 7323, 95: 7315, 2927, 98: 2957, 100: 3076, 103: 7312, 105: 7314, 109: 7401, 545: 2968, 2967, 562: 2966, 566: 2952, 568: 7313, 571: 7156, 590: 3079, 592: 2938, 7316, 598: 2936, 601: 2951, 622: 2965, 633: 7319, 640: 7322, 662: 2961, 726: 3078, 728: 2923, 790: 7296, 818: 2931, 821: 7297, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 7298, 7307, 837: 3077, 2932, 7302, 7303, 7300, 2937, 845: 7321, 850: 2933, 852: 7324, 7325, 7308, 860: 7309, 7304, 7305, 7299, 872: 7306, 2939, 876: 7310, 7301, 881: 7311, 7320, 7329, 7332, 7333, 7328, 7336, 7334, 7335, 7337, 7331, 7400, 7318, 7317, 7326, 7327, 7330}, // 4485 - {550: 7372, 573: 3078, 814: 7374, 1258: 7370, 1261: 7382, 1296: 7373, 7375, 7371}, - {9: 94, 57: 94, 93: 94, 94, 96: 94, 98: 94, 101: 94, 103: 94, 545: 94, 94, 562: 94, 566: 94, 568: 94, 571: 94, 590: 94, 592: 94, 94, 598: 94, 601: 94, 622: 94, 633: 94, 640: 94, 670: 94, 727: 94, 94, 818: 94, 842: 94, 845: 94, 852: 94, 94}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 7388, 3092, 3093, 3091}, - {102, 549: 7385, 1449: 7386}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3173, 3121, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3090, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3205, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3212, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3134, 3625, 3527, 3622, 3286, 3192, 3163, 3279, 3280, 3275, 3233, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3214, 3096, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3132, 3154, 3201, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3202, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3218, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3157, 3237, 3167, 3395, 3321, 3088, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3274, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3089, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3220, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3538, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3194, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3514, 3216, 3515, 3516, 3108, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3533, 3534, 3358, 3607, 3608, 3587, 3586, 3398, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3256, 3273, 3544, 3399, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3552, 3553, 3554, 3269, 3565, 3566, 3577, 3206, 3561, 3562, 3563, 3596, 3215, 545: 3659, 547: 3641, 3657, 3667, 3741, 554: 3672, 3676, 557: 3656, 3655, 3695, 561: 3632, 3668, 566: 3675, 3693, 573: 3636, 593: 3670, 600: 3663, 3694, 633: 3665, 640: 3674, 642: 3631, 3739, 3633, 3677, 650: 3635, 3634, 3639, 3660, 3640, 3746, 3650, 3662, 3669, 3661, 3666, 3638, 3691, 3673, 3678, 3683, 3736, 3684, 3685, 671: 3714, 673: 3653, 3654, 3709, 3710, 3711, 3712, 3713, 3664, 3696, 3706, 3707, 3700, 3715, 3716, 3717, 3701, 3719, 3720, 3702, 3718, 3697, 3705, 3703, 3689, 3721, 3722, 3726, 3679, 3682, 3725, 3731, 3730, 3732, 3729, 3733, 3728, 3727, 3724, 3723, 3681, 3680, 3686, 3687, 725: 3742, 786: 3642, 3092, 3093, 3091, 3658, 3735, 3649, 3643, 3637, 3708, 3646, 3644, 3645, 3688, 3699, 3698, 3692, 3690, 3704, 3747, 3652, 3734, 3651, 3648, 3745, 3744, 3743, 7387}, + {7402}, + {69, 69, 57: 69}, + {57: 72, 95: 72, 72, 98: 72, 100: 72, 103: 72, 105: 72, 109: 72, 545: 72, 72, 562: 72, 566: 72, 568: 72, 571: 72, 590: 72, 592: 72, 72, 598: 72, 601: 72, 622: 72, 633: 72, 640: 72, 662: 72, 726: 72, 728: 72, 818: 72, 842: 72, 845: 72, 852: 72, 72}, + {57: 75, 95: 75, 75, 98: 75, 100: 75, 103: 75, 105: 75, 109: 75, 240: 75, 545: 75, 75, 562: 75, 566: 75, 568: 75, 571: 75, 590: 75, 592: 75, 75, 598: 75, 601: 75, 622: 75, 633: 75, 640: 75, 662: 75, 726: 75, 728: 75, 818: 75, 842: 75, 845: 75, 852: 75, 75}, + {7405}, // 4490 - {100}, - {101, 581: 3801, 3799, 3800, 3798, 3796, 815: 3797, 3795}, - {9: 103, 127: 103, 136: 103, 183: 103, 185: 103, 103, 103, 103, 196: 103, 198: 103, 200: 103, 209: 103, 214: 103, 103, 103, 220: 103, 103, 223: 103, 567: 103, 571: 103, 600: 103, 723: 103, 746: 103, 103, 103, 103, 103, 103, 103, 103, 755: 103, 103, 103, 103, 103, 762: 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103}, - {572: 7390}, - {545: 2949, 2948, 562: 2947, 622: 2946, 670: 2942, 790: 7391, 821: 7392, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 3902, 7393, 7394, 1442: 7395}, + {57: 74, 95: 74, 74, 98: 74, 100: 74, 103: 74, 105: 74, 109: 74, 240: 74, 545: 74, 74, 562: 74, 566: 74, 568: 74, 571: 74, 590: 74, 592: 74, 74, 598: 74, 601: 74, 622: 74, 633: 74, 640: 74, 662: 74, 726: 74, 728: 74, 818: 74, 842: 74, 845: 74, 852: 74, 74}, + {9: 2128, 129: 2128, 138: 2128, 184: 2128, 186: 2128, 2128, 2128, 2128, 197: 2128, 199: 2128, 201: 2128, 210: 2128, 215: 2128, 2128, 2128, 220: 2128, 2128, 223: 2128, 567: 2128, 571: 2128, 600: 2128, 723: 2128, 746: 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 755: 2128, 2128, 2128, 2128, 2128, 762: 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 2128, 1364: 7435}, + {9: 104, 129: 104, 138: 104, 184: 104, 186: 104, 104, 104, 104, 197: 104, 199: 104, 201: 104, 210: 104, 215: 104, 104, 104, 220: 104, 104, 223: 104, 567: 104, 571: 104, 600: 104, 723: 104, 746: 104, 104, 104, 104, 104, 104, 104, 104, 755: 104, 104, 104, 104, 104, 762: 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104}, + {9: 7429, 129: 5093, 138: 5094, 184: 5083, 186: 5104, 5103, 5066, 5106, 197: 5105, 199: 5085, 201: 5063, 210: 5100, 215: 5072, 5062, 5081, 220: 5089, 5088, 223: 5092, 567: 5087, 571: 5082, 600: 5077, 723: 5086, 746: 5069, 5067, 5091, 5090, 5064, 5060, 5054, 5068, 755: 5078, 5061, 5096, 5070, 5071, 762: 5055, 5056, 5057, 5058, 5059, 5084, 5098, 5102, 5097, 5052, 5101, 5053, 5065, 5051, 5095, 5050, 5099, 969: 5073, 1040: 5075, 1044: 5049, 5079, 5046, 1053: 5044, 1061: 5047, 5048, 1070: 5045, 1075: 5074, 1079: 5042, 5076, 1101: 5043, 1105: 5080, 1108: 7430, 1117: 5107}, + {273: 7412}, // 4495 - {107, 553: 1029, 564: 1029, 1029, 568: 3915, 570: 3914, 579: 3913, 857: 3916, 3917}, - {109, 553: 1030, 564: 1030, 1030}, + {273: 97}, + {273: 96}, + {572: 7413}, + {550: 7418, 573: 3097, 814: 7420, 1260: 7416, 1263: 7415, 1298: 7419, 7421, 7417, 1453: 7414}, + {9: 7427, 57: 7323, 95: 7315, 2927, 98: 2957, 100: 3076, 103: 7312, 105: 7314, 545: 2968, 2967, 562: 2966, 566: 2952, 568: 7313, 571: 7156, 590: 3079, 592: 2938, 7316, 598: 2936, 601: 2951, 622: 2965, 633: 7319, 640: 7322, 662: 2961, 726: 3078, 728: 2923, 790: 7296, 818: 2931, 821: 7297, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 7298, 7307, 837: 3077, 2932, 7302, 7303, 7300, 2937, 845: 7321, 850: 2933, 852: 7324, 7325, 7308, 860: 7309, 7304, 7305, 7299, 872: 7306, 2939, 876: 7310, 7301, 881: 7311, 7320, 7329, 7332, 7333, 7328, 7336, 7334, 7335, 7337, 7331, 7426, 7318, 7317, 7326, 7327, 7330}, + // 4500 + {9: 95, 57: 95, 95: 95, 95, 98: 95, 100: 95, 103: 95, 105: 95, 545: 95, 95, 562: 95, 566: 95, 568: 95, 571: 95, 590: 95, 592: 95, 95, 598: 95, 601: 95, 622: 95, 633: 95, 640: 95, 662: 95, 726: 95, 728: 95, 818: 95, 842: 95, 845: 95, 852: 95, 95}, + {9: 93, 57: 93, 95: 93, 93, 98: 93, 100: 93, 103: 93, 105: 93, 545: 93, 93, 562: 93, 566: 93, 568: 93, 571: 93, 590: 93, 592: 93, 93, 598: 93, 601: 93, 622: 93, 633: 93, 640: 93, 662: 93, 726: 93, 728: 93, 818: 93, 842: 93, 845: 93, 852: 93, 93}, + {9: 92, 57: 92, 95: 92, 92, 98: 92, 100: 92, 103: 92, 105: 92, 545: 92, 92, 562: 92, 566: 92, 568: 92, 571: 92, 590: 92, 592: 92, 92, 598: 92, 601: 92, 622: 92, 633: 92, 640: 92, 662: 92, 726: 92, 728: 92, 818: 92, 842: 92, 845: 92, 852: 92, 92}, + {409: 7425}, + {9: 90, 57: 90, 95: 90, 90, 98: 90, 100: 90, 103: 90, 105: 90, 545: 90, 90, 562: 90, 566: 90, 568: 90, 571: 90, 590: 90, 592: 90, 90, 598: 90, 601: 90, 622: 90, 633: 90, 640: 90, 662: 90, 726: 90, 728: 90, 818: 90, 842: 90, 845: 90, 852: 90, 90}, + // 4505 + {9: 89, 57: 89, 95: 89, 89, 98: 89, 100: 89, 103: 89, 105: 89, 545: 89, 89, 562: 89, 566: 89, 568: 89, 571: 89, 590: 89, 592: 89, 89, 598: 89, 601: 89, 622: 89, 633: 89, 640: 89, 662: 89, 726: 89, 728: 89, 818: 89, 842: 89, 845: 89, 852: 89, 89}, + {198: 7423, 547: 87, 1430: 7422}, + {547: 7424}, + {547: 86}, + {9: 88, 57: 88, 95: 88, 88, 98: 88, 100: 88, 103: 88, 105: 88, 545: 88, 88, 562: 88, 566: 88, 568: 88, 571: 88, 590: 88, 592: 88, 88, 598: 88, 601: 88, 622: 88, 633: 88, 640: 88, 662: 88, 726: 88, 728: 88, 818: 88, 842: 88, 845: 88, 852: 88, 88}, + // 4510 + {9: 91, 57: 91, 95: 91, 91, 98: 91, 100: 91, 103: 91, 105: 91, 545: 91, 91, 562: 91, 566: 91, 568: 91, 571: 91, 590: 91, 592: 91, 91, 598: 91, 601: 91, 622: 91, 633: 91, 640: 91, 662: 91, 726: 91, 728: 91, 818: 91, 842: 91, 845: 91, 852: 91, 91}, + {98}, + {550: 7418, 573: 3097, 814: 7420, 1260: 7416, 1263: 7428, 1298: 7419, 7421, 7417}, + {9: 94, 57: 94, 95: 94, 94, 98: 94, 100: 94, 103: 94, 105: 94, 545: 94, 94, 562: 94, 566: 94, 568: 94, 571: 94, 590: 94, 592: 94, 94, 598: 94, 601: 94, 622: 94, 633: 94, 640: 94, 662: 94, 726: 94, 728: 94, 818: 94, 842: 94, 845: 94, 852: 94, 94}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 7434, 3111, 3112, 3110}, + // 4515 + {102, 549: 7431, 1454: 7432}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3192, 3140, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3109, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3224, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3231, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3153, 3644, 3546, 3641, 3305, 3211, 3182, 3298, 3299, 3294, 3252, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3233, 3115, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3151, 3173, 3220, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3221, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3237, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3176, 3256, 3186, 3414, 3340, 3107, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3293, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3108, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3239, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3557, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3213, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3533, 3235, 3534, 3535, 3127, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3552, 3553, 3377, 3626, 3627, 3606, 3605, 3417, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3275, 3292, 3563, 3418, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3571, 3572, 3573, 3288, 3584, 3585, 3596, 3225, 3580, 3581, 3582, 3615, 3234, 545: 3678, 547: 3660, 3676, 3686, 3760, 554: 3691, 3695, 557: 3675, 3674, 3714, 561: 3651, 3687, 566: 3694, 3712, 573: 3655, 593: 3689, 600: 3682, 3713, 633: 3684, 640: 3693, 3758, 643: 3650, 3652, 3696, 650: 3654, 3653, 3658, 3679, 3659, 3765, 3669, 3681, 659: 3688, 3680, 3685, 663: 3657, 3710, 3692, 3697, 3702, 3755, 3703, 3704, 3733, 673: 3672, 3673, 3728, 3729, 3730, 3731, 3732, 3683, 3715, 3725, 3726, 3719, 3734, 3735, 3736, 3720, 3738, 3739, 3721, 3737, 3716, 3724, 3722, 3708, 3740, 3741, 3745, 3698, 3701, 3744, 3750, 3749, 3751, 3748, 3752, 3747, 3746, 711: 3743, 3742, 3700, 3699, 3705, 3706, 725: 3761, 786: 3661, 3111, 3112, 3110, 3677, 3754, 3668, 3662, 3656, 3727, 3665, 3663, 3664, 3707, 3718, 3717, 3711, 3709, 3723, 3766, 3671, 3753, 3670, 3667, 3764, 3763, 3762, 7433}, + {100}, + {101, 581: 3820, 3818, 3819, 3817, 3815, 815: 3816, 3814}, + {9: 103, 129: 103, 138: 103, 184: 103, 186: 103, 103, 103, 103, 197: 103, 199: 103, 201: 103, 210: 103, 215: 103, 103, 103, 220: 103, 103, 223: 103, 567: 103, 571: 103, 600: 103, 723: 103, 746: 103, 103, 103, 103, 103, 103, 103, 103, 755: 103, 103, 103, 103, 103, 762: 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103}, + // 4520 + {572: 7436}, + {545: 2968, 2967, 562: 2966, 622: 2965, 662: 2961, 790: 7437, 821: 7438, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 3921, 7439, 7440, 1447: 7441}, + {107, 553: 1033, 564: 1033, 1033, 568: 3934, 570: 3933, 579: 3932, 857: 3935, 3936}, + {109, 553: 1034, 564: 1034, 1034}, {108}, + // 4525 {106}, {99}, - // 4500 {83, 83}, - {57: 7401}, - {576: 7400}, + {57: 7447}, + {576: 7446}, + // 4530 {57: 80}, {57: 81}, - // 4505 - {574: 7402}, - {57: 7404, 1446: 7403}, - {84, 84, 9: 7405}, + {574: 7448}, + {57: 7450, 1451: 7449}, + {84, 84, 9: 7451}, + // 4535 {79, 79, 9: 79}, - {57: 7406}, - // 4510 + {57: 7452}, {78, 78, 9: 78}, {85, 85}, - {127: 5074, 136: 5075, 183: 5064, 185: 5085, 5084, 5047, 5087, 196: 5086, 198: 5066, 200: 5044, 209: 5081, 214: 5053, 5043, 5062, 220: 5070, 5069, 223: 5073, 567: 5068, 571: 5063, 600: 5058, 723: 5067, 746: 5050, 5048, 5072, 5071, 5045, 5041, 5035, 5049, 755: 5059, 5042, 5077, 5051, 5052, 762: 5036, 5037, 5038, 5039, 5040, 5065, 5079, 5083, 5078, 5033, 5082, 5034, 5046, 5032, 5076, 5031, 5080, 969: 5054, 1040: 5056, 1044: 5030, 5060, 5027, 1053: 5025, 1061: 5028, 5029, 1069: 5026, 1074: 5055, 1078: 5023, 5057, 1099: 5024, 1103: 5061, 1106: 7409, 1115: 5088}, + {129: 5093, 138: 5094, 184: 5083, 186: 5104, 5103, 5066, 5106, 197: 5105, 199: 5085, 201: 5063, 210: 5100, 215: 5072, 5062, 5081, 220: 5089, 5088, 223: 5092, 567: 5087, 571: 5082, 600: 5077, 723: 5086, 746: 5069, 5067, 5091, 5090, 5064, 5060, 5054, 5068, 755: 5078, 5061, 5096, 5070, 5071, 762: 5055, 5056, 5057, 5058, 5059, 5084, 5098, 5102, 5097, 5052, 5101, 5053, 5065, 5051, 5095, 5050, 5099, 969: 5073, 1040: 5075, 1044: 5049, 5079, 5046, 1053: 5044, 1061: 5047, 5048, 1070: 5045, 1075: 5074, 1079: 5042, 5076, 1101: 5043, 1105: 5080, 1108: 7455, 1117: 5107}, + // 4540 {9: 129, 52: 129}, - {2: 128, 128, 128, 128, 128, 128, 128, 10: 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 53: 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 620: 7245, 1209: 7247, 1245: 7246, 1294: 7244, 7411}, - // 4515 + {2: 128, 128, 128, 128, 128, 128, 128, 10: 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 53: 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 620: 7291, 1211: 7293, 1247: 7292, 1296: 7290, 7457}, {9: 131, 52: 131}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 7413}, - {188, 188, 6: 188, 188, 188, 15: 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 95: 7421, 97: 7418, 99: 7424, 7425, 104: 7426, 7419, 107: 7417, 7427, 7423, 7420, 549: 188, 552: 188, 188, 567: 188, 580: 188, 723: 188, 188, 735: 7422, 1031: 7416, 1357: 7414, 1467: 7415}, - {588, 588, 6: 4793, 4795, 592, 15: 4812, 2486, 4810, 4749, 4814, 4801, 4830, 4794, 4797, 4796, 4799, 4800, 4802, 4809, 592, 4820, 4821, 4831, 4807, 4808, 4813, 4815, 4827, 4826, 4835, 4828, 4825, 4818, 4823, 4824, 4817, 4819, 4822, 4811, 4832, 4833, 549: 4792, 552: 2486, 4829, 567: 2486, 580: 5577, 723: 2486, 4798, 880: 4803, 906: 4805, 927: 4804, 948: 4806, 955: 4816, 960: 4834, 1035: 6274, 1158: 7447}, - {187, 187, 6: 187, 187, 187, 15: 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 95: 7421, 97: 7418, 99: 7424, 7425, 104: 7426, 7419, 107: 7417, 7427, 7423, 7420, 549: 187, 552: 187, 187, 567: 187, 580: 187, 723: 187, 187, 735: 7422, 1031: 7446}, - // 4520 - {186, 186, 6: 186, 186, 186, 15: 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 95: 186, 97: 186, 99: 186, 186, 104: 186, 186, 107: 186, 186, 186, 186, 549: 186, 552: 186, 186, 567: 186, 580: 186, 723: 186, 186, 735: 186}, - {557: 2356, 2356, 569: 4655, 573: 2356, 737: 7443, 817: 7442}, - {546: 7439, 557: 2356, 2356, 569: 4655, 573: 2356, 817: 7438}, - {557: 2356, 2356, 569: 4655, 573: 2356, 817: 7436}, - {179, 179, 6: 179, 179, 179, 15: 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 95: 179, 97: 179, 99: 179, 179, 104: 179, 179, 107: 179, 179, 179, 179, 112: 179, 549: 179, 552: 179, 179, 567: 179, 580: 179, 723: 179, 179, 735: 179}, - // 4525 - {99: 7434, 104: 7435, 7432, 735: 7433}, - {557: 2356, 2356, 569: 4655, 573: 2356, 817: 7430}, - {176, 176, 6: 176, 176, 176, 15: 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 95: 176, 97: 176, 99: 176, 176, 104: 176, 176, 107: 176, 176, 176, 176, 112: 176, 549: 176, 552: 176, 176, 567: 176, 580: 176, 723: 176, 176, 735: 176}, - {557: 2356, 2356, 569: 4655, 573: 2356, 817: 7428}, - {173, 173, 6: 173, 173, 173, 15: 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 95: 173, 97: 173, 99: 173, 173, 104: 173, 173, 107: 173, 173, 173, 173, 112: 173, 549: 173, 552: 173, 173, 567: 173, 580: 173, 723: 173, 173, 735: 173}, - // 4530 - {171, 171, 6: 171, 171, 171, 15: 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, 171, 171, 171, 171, 95: 171, 97: 171, 99: 171, 171, 104: 171, 171, 107: 171, 171, 171, 171, 112: 171, 549: 171, 552: 171, 171, 567: 171, 580: 171, 723: 171, 171, 735: 171}, - {170, 170, 6: 170, 170, 170, 15: 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, 170, 170, 170, 170, 95: 170, 97: 170, 99: 170, 170, 104: 170, 170, 107: 170, 170, 170, 170, 112: 170, 549: 170, 552: 170, 170, 567: 170, 580: 170, 723: 170, 170, 735: 170}, - {557: 4608, 4609, 573: 3078, 814: 4605, 846: 4607, 928: 7429}, - {174, 174, 6: 174, 174, 174, 15: 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, 95: 174, 97: 174, 99: 174, 174, 104: 174, 174, 107: 174, 174, 174, 174, 112: 174, 549: 174, 552: 174, 174, 567: 174, 580: 174, 723: 174, 174, 735: 174}, - {557: 4608, 4609, 573: 3078, 814: 4605, 846: 4607, 928: 7431}, - // 4535 - {177, 177, 6: 177, 177, 177, 15: 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, 177, 177, 177, 177, 95: 177, 97: 177, 99: 177, 177, 104: 177, 177, 107: 177, 177, 177, 177, 112: 177, 549: 177, 552: 177, 177, 567: 177, 580: 177, 723: 177, 177, 735: 177}, - {178, 178, 6: 178, 178, 178, 15: 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 95: 178, 97: 178, 99: 178, 178, 104: 178, 178, 107: 178, 178, 178, 178, 112: 178, 549: 178, 552: 178, 178, 567: 178, 580: 178, 723: 178, 178, 735: 178}, - {175, 175, 6: 175, 175, 175, 15: 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 95: 175, 97: 175, 99: 175, 175, 104: 175, 175, 107: 175, 175, 175, 175, 112: 175, 549: 175, 552: 175, 175, 567: 175, 580: 175, 723: 175, 175, 735: 175}, - {172, 172, 6: 172, 172, 172, 15: 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, 172, 172, 172, 172, 95: 172, 97: 172, 99: 172, 172, 104: 172, 172, 107: 172, 172, 172, 172, 112: 172, 549: 172, 552: 172, 172, 567: 172, 580: 172, 723: 172, 172, 735: 172}, - {169, 169, 6: 169, 169, 169, 15: 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 95: 169, 97: 169, 99: 169, 169, 104: 169, 169, 107: 169, 169, 169, 169, 112: 169, 549: 169, 552: 169, 169, 567: 169, 580: 169, 723: 169, 169, 735: 169}, - // 4540 - {557: 4608, 4609, 573: 3078, 814: 4605, 846: 4607, 928: 7437}, - {180, 180, 6: 180, 180, 180, 15: 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 95: 180, 97: 180, 99: 180, 180, 104: 180, 180, 107: 180, 180, 180, 180, 112: 180, 549: 180, 552: 180, 180, 567: 180, 580: 180, 723: 180, 180, 735: 180}, - {557: 4608, 4609, 573: 3078, 814: 4605, 846: 4607, 928: 7441}, - {557: 4608, 4609, 573: 3078, 814: 4605, 846: 4607, 928: 7440}, - {181, 181, 6: 181, 181, 181, 15: 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, 95: 181, 97: 181, 99: 181, 181, 104: 181, 181, 107: 181, 181, 181, 181, 112: 181, 549: 181, 552: 181, 181, 567: 181, 580: 181, 723: 181, 181, 735: 181}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 7459}, + {188, 188, 6: 188, 188, 188, 15: 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 97: 7467, 99: 7464, 101: 7470, 7471, 106: 7472, 7465, 110: 7463, 7473, 7469, 7466, 549: 188, 552: 188, 188, 567: 188, 580: 188, 723: 188, 188, 735: 7468, 1031: 7462, 1361: 7460, 1472: 7461}, // 4545 - {182, 182, 6: 182, 182, 182, 15: 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 95: 182, 97: 182, 99: 182, 182, 104: 182, 182, 107: 182, 182, 182, 182, 112: 182, 549: 182, 552: 182, 182, 567: 182, 580: 182, 723: 182, 182, 735: 182}, - {557: 4608, 4609, 573: 3078, 814: 4605, 846: 4607, 928: 7445}, - {557: 4608, 4609, 573: 3078, 814: 4605, 846: 4607, 928: 7444}, - {183, 183, 6: 183, 183, 183, 15: 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 95: 183, 97: 183, 99: 183, 183, 104: 183, 183, 107: 183, 183, 183, 183, 112: 183, 549: 183, 552: 183, 183, 567: 183, 580: 183, 723: 183, 183, 735: 183}, - {184, 184, 6: 184, 184, 184, 15: 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, 95: 184, 97: 184, 99: 184, 184, 104: 184, 184, 107: 184, 184, 184, 184, 112: 184, 549: 184, 552: 184, 184, 567: 184, 580: 184, 723: 184, 184, 735: 184}, + {592, 592, 6: 4812, 4814, 596, 15: 4831, 2499, 4829, 4768, 4833, 4820, 4849, 4813, 4816, 4815, 4818, 4819, 4821, 4828, 596, 4839, 4840, 4850, 4826, 4827, 4832, 4834, 4846, 4845, 4854, 4847, 4844, 4837, 4842, 4843, 4836, 4838, 4841, 4830, 4851, 4852, 549: 4811, 552: 2499, 4848, 567: 2499, 580: 5605, 723: 2499, 4817, 880: 4822, 906: 4824, 927: 4823, 948: 4825, 955: 4835, 960: 4853, 1035: 6315, 1160: 7493}, + {187, 187, 6: 187, 187, 187, 15: 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 97: 7467, 99: 7464, 101: 7470, 7471, 106: 7472, 7465, 110: 7463, 7473, 7469, 7466, 549: 187, 552: 187, 187, 567: 187, 580: 187, 723: 187, 187, 735: 7468, 1031: 7492}, + {186, 186, 6: 186, 186, 186, 15: 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 97: 186, 99: 186, 101: 186, 186, 106: 186, 186, 110: 186, 186, 186, 186, 549: 186, 552: 186, 186, 567: 186, 580: 186, 723: 186, 186, 735: 186}, + {557: 2362, 2362, 569: 4674, 573: 2362, 737: 7489, 817: 7488}, + {546: 7485, 557: 2362, 2362, 569: 4674, 573: 2362, 817: 7484}, // 4550 - {185, 185, 6: 185, 185, 185, 15: 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 95: 185, 97: 185, 99: 185, 185, 104: 185, 185, 107: 185, 185, 185, 185, 549: 185, 552: 185, 185, 567: 185, 580: 185, 723: 185, 185, 735: 185}, - {189, 189}, - {2: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 10: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 53: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 549: 2151, 593: 5423, 899: 7449}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 549: 4663, 786: 4662, 3092, 3093, 3091, 954: 7450}, - {119: 7457, 7455, 7454, 7456, 7453, 994: 7451, 1271: 7452}, + {557: 2362, 2362, 569: 4674, 573: 2362, 817: 7482}, + {179, 179, 6: 179, 179, 179, 15: 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 97: 179, 99: 179, 101: 179, 179, 106: 179, 179, 110: 179, 179, 179, 179, 119: 179, 549: 179, 552: 179, 179, 567: 179, 580: 179, 723: 179, 179, 735: 179}, + {101: 7480, 106: 7481, 7478, 735: 7479}, + {557: 2362, 2362, 569: 4674, 573: 2362, 817: 7476}, + {176, 176, 6: 176, 176, 176, 15: 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 97: 176, 99: 176, 101: 176, 176, 106: 176, 176, 110: 176, 176, 176, 176, 119: 176, 549: 176, 552: 176, 176, 567: 176, 580: 176, 723: 176, 176, 735: 176}, // 4555 - {2887, 2887, 9: 2887, 119: 2887, 2887, 2887, 2887, 2887}, - {194, 194, 9: 7505, 119: 7457, 7455, 7454, 7456, 7453, 994: 7504}, - {569: 4655, 573: 2356, 817: 7502}, - {322: 2356, 333: 2356, 2356, 569: 4655, 817: 7497}, - {2864, 2864, 9: 2864, 119: 2864, 2864, 2864, 2864, 2864, 569: 4655, 573: 2356, 642: 2356, 644: 2356, 817: 7495}, + {557: 2362, 2362, 569: 4674, 573: 2362, 817: 7474}, + {173, 173, 6: 173, 173, 173, 15: 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 97: 173, 99: 173, 101: 173, 173, 106: 173, 173, 110: 173, 173, 173, 173, 119: 173, 549: 173, 552: 173, 173, 567: 173, 580: 173, 723: 173, 173, 735: 173}, + {171, 171, 6: 171, 171, 171, 15: 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, 171, 171, 171, 171, 97: 171, 99: 171, 101: 171, 171, 106: 171, 171, 110: 171, 171, 171, 171, 119: 171, 549: 171, 552: 171, 171, 567: 171, 580: 171, 723: 171, 171, 735: 171}, + {170, 170, 6: 170, 170, 170, 15: 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, 170, 170, 170, 170, 97: 170, 99: 170, 101: 170, 170, 106: 170, 170, 110: 170, 170, 170, 170, 119: 170, 549: 170, 552: 170, 170, 567: 170, 580: 170, 723: 170, 170, 735: 170}, + {557: 4627, 4628, 573: 3097, 814: 4624, 846: 4626, 928: 7475}, // 4560 - {545: 2356, 561: 2356, 569: 4655, 817: 7471}, - {545: 2356, 561: 2356, 569: 4655, 817: 7458}, - {545: 7459, 561: 7460}, - {52: 7462, 208: 7464, 1055: 7463, 1458: 7461}, - {2857, 2857, 9: 2857, 119: 2857, 2857, 2857, 2857, 2857}, + {174, 174, 6: 174, 174, 174, 15: 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, 97: 174, 99: 174, 101: 174, 174, 106: 174, 174, 110: 174, 174, 174, 174, 119: 174, 549: 174, 552: 174, 174, 567: 174, 580: 174, 723: 174, 174, 735: 174}, + {557: 4627, 4628, 573: 3097, 814: 4624, 846: 4626, 928: 7477}, + {177, 177, 6: 177, 177, 177, 15: 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, 177, 177, 177, 177, 97: 177, 99: 177, 101: 177, 177, 106: 177, 177, 110: 177, 177, 177, 177, 119: 177, 549: 177, 552: 177, 177, 567: 177, 580: 177, 723: 177, 177, 735: 177}, + {178, 178, 6: 178, 178, 178, 15: 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 97: 178, 99: 178, 101: 178, 178, 106: 178, 178, 110: 178, 178, 178, 178, 119: 178, 549: 178, 552: 178, 178, 567: 178, 580: 178, 723: 178, 178, 735: 178}, + {175, 175, 6: 175, 175, 175, 15: 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 97: 175, 99: 175, 101: 175, 175, 106: 175, 175, 110: 175, 175, 175, 175, 119: 175, 549: 175, 552: 175, 175, 567: 175, 580: 175, 723: 175, 175, 735: 175}, // 4565 - {9: 7469, 52: 7467, 208: 7464, 1055: 7468}, - {2858, 2858, 9: 2858, 119: 2858, 2858, 2858, 2858, 2858}, - {9: 2856, 52: 2856, 208: 2856}, - {547: 2356, 569: 4655, 817: 7465}, - {547: 7466}, + {172, 172, 6: 172, 172, 172, 15: 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, 172, 172, 172, 172, 97: 172, 99: 172, 101: 172, 172, 106: 172, 172, 110: 172, 172, 172, 172, 119: 172, 549: 172, 552: 172, 172, 567: 172, 580: 172, 723: 172, 172, 735: 172}, + {169, 169, 6: 169, 169, 169, 15: 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 97: 169, 99: 169, 101: 169, 169, 106: 169, 169, 110: 169, 169, 169, 169, 119: 169, 549: 169, 552: 169, 169, 567: 169, 580: 169, 723: 169, 169, 735: 169}, + {557: 4627, 4628, 573: 3097, 814: 4624, 846: 4626, 928: 7483}, + {180, 180, 6: 180, 180, 180, 15: 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 97: 180, 99: 180, 101: 180, 180, 106: 180, 180, 110: 180, 180, 180, 180, 119: 180, 549: 180, 552: 180, 180, 567: 180, 580: 180, 723: 180, 180, 735: 180}, + {557: 4627, 4628, 573: 3097, 814: 4624, 846: 4626, 928: 7487}, // 4570 - {9: 2853, 52: 2853, 208: 2853}, - {2859, 2859, 9: 2859, 119: 2859, 2859, 2859, 2859, 2859}, - {9: 2855, 52: 2855, 208: 2855}, - {208: 7464, 1055: 7470}, - {9: 2854, 52: 2854, 208: 2854}, + {557: 4627, 4628, 573: 3097, 814: 4624, 846: 4626, 928: 7486}, + {181, 181, 6: 181, 181, 181, 15: 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, 97: 181, 99: 181, 101: 181, 181, 106: 181, 181, 110: 181, 181, 181, 181, 119: 181, 549: 181, 552: 181, 181, 567: 181, 580: 181, 723: 181, 181, 735: 181}, + {182, 182, 6: 182, 182, 182, 15: 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 97: 182, 99: 182, 101: 182, 182, 106: 182, 182, 110: 182, 182, 182, 182, 119: 182, 549: 182, 552: 182, 182, 567: 182, 580: 182, 723: 182, 182, 735: 182}, + {557: 4627, 4628, 573: 3097, 814: 4624, 846: 4626, 928: 7491}, + {557: 4627, 4628, 573: 3097, 814: 4624, 846: 4626, 928: 7490}, // 4575 - {545: 7472, 561: 7473}, - {52: 7479, 102: 7477, 144: 7478, 146: 7476, 1056: 7474, 1460: 7475}, - {2860, 2860, 9: 2860, 119: 2860, 2860, 2860, 2860, 2860}, - {9: 2881, 52: 2881, 102: 2881, 144: 2881, 146: 2881}, - {9: 7492, 52: 7493, 102: 7477, 144: 7478, 146: 7476, 1056: 7491}, + {183, 183, 6: 183, 183, 183, 15: 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 97: 183, 99: 183, 101: 183, 183, 106: 183, 183, 110: 183, 183, 183, 183, 119: 183, 549: 183, 552: 183, 183, 567: 183, 580: 183, 723: 183, 183, 735: 183}, + {184, 184, 6: 184, 184, 184, 15: 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, 97: 184, 99: 184, 101: 184, 184, 106: 184, 184, 110: 184, 184, 184, 184, 119: 184, 549: 184, 552: 184, 184, 567: 184, 580: 184, 723: 184, 184, 735: 184}, + {185, 185, 6: 185, 185, 185, 15: 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 97: 185, 99: 185, 101: 185, 185, 106: 185, 185, 110: 185, 185, 185, 185, 549: 185, 552: 185, 185, 567: 185, 580: 185, 723: 185, 185, 735: 185}, + {189, 189}, + {2: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 10: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 53: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 549: 2157, 593: 5449, 899: 7495}, // 4580 - {547: 2356, 569: 4655, 817: 7489}, - {239: 2356, 241: 2356, 569: 4655, 817: 7487, 951: 2356}, - {126: 2356, 269: 2356, 282: 2356, 569: 4655, 817: 7480}, - {2861, 2861, 9: 2861, 119: 2861, 2861, 2861, 2861, 2861}, - {126: 4650, 269: 4648, 282: 4649, 1273: 7481}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 549: 4682, 786: 4681, 3111, 3112, 3110, 954: 7496}, + {121: 7503, 7501, 7500, 7502, 7499, 994: 7497, 1273: 7498}, + {2906, 2906, 9: 2906, 121: 2906, 2906, 2906, 2906, 2906}, + {194, 194, 9: 7552, 121: 7503, 7501, 7500, 7502, 7499, 994: 7551}, + {258: 2362, 569: 4674, 573: 2362, 817: 7548}, // 4585 - {9: 2869, 52: 2869, 102: 2869, 144: 2869, 146: 2869, 169: 7483, 1518: 7482}, - {9: 2870, 52: 2870, 102: 2870, 144: 2870, 146: 2870}, - {375: 2356, 547: 2356, 569: 4655, 817: 7484}, - {375: 7486, 547: 7485}, - {9: 2868, 52: 2868, 102: 2868, 144: 2868, 146: 2868}, + {323: 2362, 335: 2362, 2362, 569: 4674, 817: 7543}, + {2882, 2882, 9: 2882, 121: 2882, 2882, 2882, 2882, 2882, 569: 4674, 573: 2362, 643: 2362, 2362, 817: 7541}, + {545: 2362, 561: 2362, 569: 4674, 817: 7517}, + {545: 2362, 561: 2362, 569: 4674, 817: 7504}, + {545: 7505, 561: 7506}, // 4590 - {9: 2867, 52: 2867, 102: 2867, 144: 2867, 146: 2867}, - {239: 4658, 241: 4657, 951: 4659, 1272: 7488}, - {9: 2871, 52: 2871, 102: 2871, 144: 2871, 146: 2871}, - {547: 7490}, - {9: 2872, 52: 2872, 102: 2872, 144: 2872, 146: 2872}, + {52: 7508, 209: 7510, 1055: 7509, 1463: 7507}, + {2875, 2875, 9: 2875, 121: 2875, 2875, 2875, 2875, 2875}, + {9: 7515, 52: 7513, 209: 7510, 1055: 7514}, + {2876, 2876, 9: 2876, 121: 2876, 2876, 2876, 2876, 2876}, + {9: 2874, 52: 2874, 209: 2874}, // 4595 - {9: 2880, 52: 2880, 102: 2880, 144: 2880, 146: 2880}, - {102: 7477, 144: 7478, 146: 7476, 1056: 7494}, - {2862, 2862, 9: 2862, 119: 2862, 2862, 2862, 2862, 2862}, - {9: 2879, 52: 2879, 102: 2879, 144: 2879, 146: 2879}, - {573: 3078, 642: 6821, 644: 6822, 814: 6820, 1015: 7496}, + {547: 2362, 569: 4674, 817: 7511}, + {547: 7512}, + {9: 2871, 52: 2871, 209: 2871}, + {2877, 2877, 9: 2877, 121: 2877, 2877, 2877, 2877, 2877}, + {9: 2873, 52: 2873, 209: 2873}, // 4600 - {2863, 2863, 9: 2863, 119: 2863, 2863, 2863, 2863, 2863}, - {322: 7500, 333: 7498, 7499, 1459: 7501}, - {2884, 2884, 9: 2884, 119: 2884, 2884, 2884, 2884, 2884}, - {2883, 2883, 9: 2883, 119: 2883, 2883, 2883, 2883, 2883}, - {2882, 2882, 9: 2882, 119: 2882, 2882, 2882, 2882, 2882}, + {209: 7510, 1055: 7516}, + {9: 2872, 52: 2872, 209: 2872}, + {545: 7518, 561: 7519}, + {52: 7525, 104: 7523, 146: 7524, 148: 7522, 1056: 7520, 1465: 7521}, + {2878, 2878, 9: 2878, 121: 2878, 2878, 2878, 2878, 2878}, // 4605 - {2865, 2865, 9: 2865, 119: 2865, 2865, 2865, 2865, 2865}, - {573: 3078, 814: 3922, 829: 7503}, - {2866, 2866, 9: 2866, 119: 2866, 2866, 2866, 2866, 2866}, - {2886, 2886, 9: 2886, 119: 2886, 2886, 2886, 2886, 2886}, - {119: 7457, 7455, 7454, 7456, 7453, 994: 7506}, + {9: 2900, 52: 2900, 104: 2900, 146: 2900, 148: 2900}, + {9: 7538, 52: 7539, 104: 7523, 146: 7524, 148: 7522, 1056: 7537}, + {547: 2362, 569: 4674, 817: 7535}, + {239: 2362, 241: 2362, 569: 4674, 817: 7533, 951: 2362}, + {128: 2362, 270: 2362, 283: 2362, 569: 4674, 817: 7526}, // 4610 - {2885, 2885, 9: 2885, 119: 2885, 2885, 2885, 2885, 2885}, - {556: 7509, 572: 7508, 576: 7510}, - {545: 2949, 2948, 562: 2947, 566: 2933, 601: 2932, 622: 2946, 670: 2942, 728: 3059, 790: 6426, 818: 6424, 821: 6427, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 6425, 6429, 6428, 837: 3058, 6431, 6432, 6433, 6430, 944: 7517}, - {545: 2949, 2948, 562: 2947, 566: 2933, 601: 2932, 622: 2946, 670: 2942, 728: 3059, 790: 6426, 818: 6424, 821: 6427, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 6425, 6429, 6428, 837: 3058, 6431, 6432, 6433, 6430, 944: 7516}, - {273: 7511}, + {2879, 2879, 9: 2879, 121: 2879, 2879, 2879, 2879, 2879}, + {128: 4669, 270: 4667, 283: 4668, 1275: 7527}, + {9: 2888, 52: 2888, 104: 2888, 146: 2888, 148: 2888, 170: 7529, 1525: 7528}, + {9: 2889, 52: 2889, 104: 2889, 146: 2889, 148: 2889}, + {258: 2362, 547: 2362, 569: 4674, 817: 7530}, // 4615 - {556: 7512}, - {126: 7513}, - {230: 7514}, - {547: 7515}, - {352, 352}, + {258: 7532, 547: 7531}, + {9: 2887, 52: 2887, 104: 2887, 146: 2887, 148: 2887}, + {9: 2886, 52: 2886, 104: 2886, 146: 2886, 148: 2886}, + {239: 4677, 241: 4676, 951: 4678, 1274: 7534}, + {9: 2890, 52: 2890, 104: 2890, 146: 2890, 148: 2890}, // 4620 - {353, 353}, - {556: 7518}, - {545: 2949, 2948, 562: 2947, 566: 2933, 601: 2932, 622: 2946, 670: 2942, 728: 3059, 790: 6426, 818: 6424, 821: 6427, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 6425, 6429, 6428, 837: 3058, 6431, 6432, 6433, 6430, 944: 7519}, - {354, 354}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 6396, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 6401, 786: 3793, 3092, 3093, 3091, 820: 5898, 913: 6403, 934: 7522, 6402, 1279: 7523, 1461: 7521}, + {547: 7536}, + {9: 2891, 52: 2891, 104: 2891, 146: 2891, 148: 2891}, + {9: 2899, 52: 2899, 104: 2899, 146: 2899, 148: 2899}, + {104: 7523, 146: 7524, 148: 7522, 1056: 7540}, + {2880, 2880, 9: 2880, 121: 2880, 2880, 2880, 2880, 2880}, // 4625 - {429, 429, 9: 7524}, - {365, 365, 9: 365}, - {364, 364, 9: 364}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 6396, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 6401, 786: 3793, 3092, 3093, 3091, 820: 5898, 913: 6403, 934: 7522, 6402, 1279: 7525}, - {363, 363, 9: 363}, + {9: 2898, 52: 2898, 104: 2898, 146: 2898, 148: 2898}, + {573: 3097, 643: 6862, 6863, 814: 6861, 1015: 7542}, + {2881, 2881, 9: 2881, 121: 2881, 2881, 2881, 2881, 2881}, + {323: 7546, 335: 7544, 7545, 1464: 7547}, + {2903, 2903, 9: 2903, 121: 2903, 2903, 2903, 2903, 2903}, // 4630 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 645: 5944, 786: 3793, 3092, 3093, 3091, 820: 5943, 870: 5961, 1011: 5962, 1039: 7527}, - {411, 411, 6: 411, 9: 5964, 15: 411, 51: 411, 53: 411, 411, 411, 411, 546: 411, 739: 6008, 1091: 6007, 7528}, - {419, 419, 6: 419, 15: 419, 51: 419, 53: 419, 419, 419, 419, 546: 7530, 1148: 7529}, - {392, 392, 6: 392, 15: 7546, 51: 392, 53: 392, 7545, 7547, 7548, 1084: 7544, 1252: 7543, 7542}, - {174: 7535, 7533, 7534, 7536, 1147: 7532, 1354: 7531}, + {2902, 2902, 9: 2902, 121: 2902, 2902, 2902, 2902, 2902}, + {2901, 2901, 9: 2901, 121: 2901, 2901, 2901, 2901, 2901}, + {2883, 2883, 9: 2883, 121: 2883, 2883, 2883, 2883, 2883}, + {258: 7550, 573: 3097, 814: 3941, 829: 7549}, + {2885, 2885, 9: 2885, 121: 2885, 2885, 2885, 2885, 2885}, // 4635 - {418, 418, 6: 418, 15: 418, 51: 418, 53: 418, 418, 418, 418, 174: 7535, 7533, 7534, 7536, 1147: 7541}, - {417, 417, 6: 417, 15: 417, 51: 417, 53: 417, 417, 417, 417, 174: 417, 417, 417, 417}, - {573: 3078, 814: 4605, 846: 7540}, - {573: 3078, 814: 4605, 846: 7539}, - {573: 3078, 814: 4605, 846: 7538}, + {2884, 2884, 9: 2884, 121: 2884, 2884, 2884, 2884, 2884}, + {2905, 2905, 9: 2905, 121: 2905, 2905, 2905, 2905, 2905}, + {121: 7503, 7501, 7500, 7502, 7499, 994: 7553}, + {2904, 2904, 9: 2904, 121: 2904, 2904, 2904, 2904, 2904}, + {556: 7556, 572: 7555, 576: 7557}, // 4640 - {573: 3078, 814: 4605, 846: 7537}, - {412, 412, 6: 412, 15: 412, 51: 412, 53: 412, 412, 412, 412, 174: 412, 412, 412, 412}, - {413, 413, 6: 413, 15: 413, 51: 413, 53: 413, 413, 413, 413, 174: 413, 413, 413, 413}, - {414, 414, 6: 414, 15: 414, 51: 414, 53: 414, 414, 414, 414, 174: 414, 414, 414, 414}, - {415, 415, 6: 415, 15: 415, 51: 415, 53: 415, 415, 415, 415, 174: 415, 415, 415, 415}, + {545: 2968, 2967, 562: 2966, 566: 2952, 601: 2951, 622: 2965, 662: 2961, 726: 3078, 790: 6467, 818: 6465, 821: 6468, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 6466, 6470, 6469, 837: 3077, 6472, 6473, 6474, 6471, 944: 7564}, + {545: 2968, 2967, 562: 2966, 566: 2952, 601: 2951, 622: 2965, 662: 2961, 726: 3078, 790: 6467, 818: 6465, 821: 6468, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 6466, 6470, 6469, 837: 3077, 6472, 6473, 6474, 6471, 944: 7563}, + {274: 7558}, + {556: 7559}, + {128: 7560}, // 4645 - {416, 416, 6: 416, 15: 416, 51: 416, 53: 416, 416, 416, 416, 174: 416, 416, 416, 416}, - {397, 397, 6: 7573, 51: 397, 53: 7574, 1145: 7572}, - {391, 391, 6: 391, 15: 7546, 51: 391, 53: 391, 7545, 7547, 7548, 1084: 7571}, - {390, 390, 6: 390, 15: 390, 51: 390, 53: 390, 390, 390, 390}, - {577: 7570, 1107: 7569}, + {230: 7561}, + {547: 7225, 641: 3756, 791: 7226, 1100: 7223, 1305: 7562}, + {356, 356, 9: 7227}, + {357, 357}, + {556: 7565}, // 4650 - {273: 7552, 404: 7554, 444: 7553, 739: 7555}, - {573: 3078, 814: 4605, 846: 7551}, - {212: 7550, 573: 3078, 814: 4605, 846: 7549}, - {377, 377, 6: 377, 15: 377, 51: 377, 53: 377, 377, 377, 377}, - {376, 376, 6: 376, 15: 376, 51: 376, 53: 376, 376, 376, 376}, + {545: 2968, 2967, 562: 2966, 566: 2952, 601: 2951, 622: 2965, 662: 2961, 726: 3078, 790: 6467, 818: 6465, 821: 6468, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 6466, 6470, 6469, 837: 3077, 6472, 6473, 6474, 6471, 944: 7566}, + {358, 358}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 6437, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 6442, 786: 3812, 3111, 3112, 3110, 820: 5939, 913: 6444, 934: 7569, 6443, 1281: 7570, 1466: 7568}, + {433, 433, 9: 7571}, + {369, 369, 9: 369}, // 4655 - {378, 378, 6: 378, 15: 378, 51: 378, 53: 378, 378, 378, 378}, - {549: 7567, 573: 3078, 814: 7568}, - {655: 7563}, - {382, 382, 6: 382, 15: 382, 51: 382, 53: 382, 382, 382, 382, 422: 7559, 549: 7560, 655: 7558}, - {190: 7556}, + {368, 368, 9: 368}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 6437, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 6442, 786: 3812, 3111, 3112, 3110, 820: 5939, 913: 6444, 934: 7569, 6443, 1281: 7572}, + {367, 367, 9: 367}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 645: 5985, 786: 3812, 3111, 3112, 3110, 820: 5984, 870: 6002, 1011: 6003, 1039: 7574}, + {415, 415, 6: 415, 9: 6005, 15: 415, 51: 415, 53: 415, 415, 415, 415, 546: 415, 739: 6049, 1092: 6048, 7575}, // 4660 - {549: 7557}, - {375, 375, 6: 375, 15: 375, 51: 375, 53: 375, 375, 375, 375}, - {573: 3078, 814: 4605, 846: 7561}, - {380, 380, 6: 380, 15: 380, 51: 380, 53: 380, 380, 380, 380}, - {379, 379, 6: 379, 15: 379, 51: 379, 53: 379, 379, 379, 379}, + {423, 423, 6: 423, 15: 423, 51: 423, 53: 423, 423, 423, 423, 546: 7577, 1150: 7576}, + {396, 396, 6: 396, 15: 7593, 51: 396, 53: 396, 7592, 7594, 7595, 1085: 7591, 1254: 7590, 7589}, + {175: 7582, 7580, 7581, 7583, 1149: 7579, 1358: 7578}, + {422, 422, 6: 422, 15: 422, 51: 422, 53: 422, 422, 422, 422, 175: 7582, 7580, 7581, 7583, 1149: 7588}, + {421, 421, 6: 421, 15: 421, 51: 421, 53: 421, 421, 421, 421, 175: 421, 421, 421, 421}, // 4665 - {143: 7562}, - {381, 381, 6: 381, 15: 381, 51: 381, 53: 381, 381, 381, 381}, - {549: 7564, 573: 3078, 814: 7565}, - {384, 384, 6: 384, 15: 384, 51: 384, 53: 384, 384, 384, 384}, - {143: 7566}, + {573: 3097, 814: 4624, 846: 7587}, + {573: 3097, 814: 4624, 846: 7586}, + {573: 3097, 814: 4624, 846: 7585}, + {573: 3097, 814: 4624, 846: 7584}, + {416, 416, 6: 416, 15: 416, 51: 416, 53: 416, 416, 416, 416, 175: 416, 416, 416, 416}, // 4670 - {383, 383, 6: 383, 15: 383, 51: 383, 53: 383, 383, 383, 383}, - {386, 386, 6: 386, 15: 386, 51: 386, 53: 386, 386, 386, 386}, - {385, 385, 6: 385, 15: 385, 51: 385, 53: 385, 385, 385, 385}, - {388, 388, 6: 388, 15: 388, 51: 388, 53: 388, 388, 388, 388}, - {387, 387, 6: 387, 15: 387, 51: 387, 53: 387, 387, 387, 387}, + {417, 417, 6: 417, 15: 417, 51: 417, 53: 417, 417, 417, 417, 175: 417, 417, 417, 417}, + {418, 418, 6: 418, 15: 418, 51: 418, 53: 418, 418, 418, 418, 175: 418, 418, 418, 418}, + {419, 419, 6: 419, 15: 419, 51: 419, 53: 419, 419, 419, 419, 175: 419, 419, 419, 419}, + {420, 420, 6: 420, 15: 420, 51: 420, 53: 420, 420, 420, 420, 175: 420, 420, 420, 420}, + {401, 401, 6: 7620, 51: 401, 53: 7621, 1147: 7619}, // 4675 - {389, 389, 6: 389, 15: 389, 51: 389, 53: 389, 389, 389, 389}, - {394, 394, 51: 7578, 1270: 7577}, - {547: 7576}, - {547: 7575}, - {395, 395, 51: 395}, + {395, 395, 6: 395, 15: 7593, 51: 395, 53: 395, 7592, 7594, 7595, 1085: 7618}, + {394, 394, 6: 394, 15: 394, 51: 394, 53: 394, 394, 394, 394}, + {577: 7617, 1109: 7616}, + {274: 7599, 405: 7601, 444: 7600, 739: 7602}, + {573: 3097, 814: 4624, 846: 7598}, // 4680 - {396, 396, 51: 396}, - {430, 430}, - {586: 7579}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 549: 4663, 786: 4662, 3092, 3093, 3091, 954: 7580}, - {393, 393}, + {213: 7597, 573: 3097, 814: 4624, 846: 7596}, + {381, 381, 6: 381, 15: 381, 51: 381, 53: 381, 381, 381, 381}, + {380, 380, 6: 380, 15: 380, 51: 380, 53: 380, 380, 380, 380}, + {382, 382, 6: 382, 15: 382, 51: 382, 53: 382, 382, 382, 382}, + {549: 7614, 573: 3097, 814: 7615}, // 4685 - {18: 2404, 111: 2404, 142: 2404, 191: 2404, 672: 2404}, - {142: 2399, 191: 7634, 672: 2399, 1512: 7633}, - {569: 7629}, - {225: 7585}, - {2: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 10: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 53: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 593: 5423, 899: 7586}, + {655: 7610}, + {386, 386, 6: 386, 15: 386, 51: 386, 53: 386, 386, 386, 386, 422: 7606, 549: 7607, 655: 7605}, + {191: 7603}, + {549: 7604}, + {379, 379, 6: 379, 15: 379, 51: 379, 53: 379, 379, 379, 379}, // 4690 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 5594, 3092, 3093, 3091, 1005: 7587}, - {117: 7591, 128: 7596, 7598, 7592, 7597, 7600, 7594, 7590, 7595, 137: 7601, 7599, 7593, 993: 7588, 1254: 7589}, - {2852, 2852, 9: 2852, 117: 2852, 128: 2852, 2852, 2852, 2852, 2852, 2852, 2852, 2852, 137: 2852, 2852, 2852}, - {191, 191, 9: 7627, 117: 7591, 128: 7596, 7598, 7592, 7597, 7600, 7594, 7590, 7595, 137: 7601, 7599, 7593, 993: 7626}, - {547: 2356, 569: 4655, 817: 7624}, + {573: 3097, 814: 4624, 846: 7608}, + {384, 384, 6: 384, 15: 384, 51: 384, 53: 384, 384, 384, 384}, + {383, 383, 6: 383, 15: 383, 51: 383, 53: 383, 383, 383, 383}, + {145: 7609}, + {385, 385, 6: 385, 15: 385, 51: 385, 53: 385, 385, 385, 385}, // 4695 - {547: 2356, 569: 4655, 817: 7622}, - {569: 4655, 573: 2356, 817: 7620}, - {569: 4655, 573: 2356, 817: 7618}, - {569: 4655, 573: 2356, 817: 7616}, - {547: 2356, 569: 4655, 817: 7614}, + {549: 7611, 573: 3097, 814: 7612}, + {388, 388, 6: 388, 15: 388, 51: 388, 53: 388, 388, 388, 388}, + {145: 7613}, + {387, 387, 6: 387, 15: 387, 51: 387, 53: 387, 387, 387, 387}, + {390, 390, 6: 390, 15: 390, 51: 390, 53: 390, 390, 390, 390}, // 4700 - {547: 2356, 569: 4655, 817: 7612}, - {547: 2356, 569: 4655, 817: 7610}, - {547: 2356, 569: 4655, 817: 7608}, - {547: 2356, 569: 4655, 817: 7606}, - {547: 2356, 569: 4655, 817: 7604}, + {389, 389, 6: 389, 15: 389, 51: 389, 53: 389, 389, 389, 389}, + {392, 392, 6: 392, 15: 392, 51: 392, 53: 392, 392, 392, 392}, + {391, 391, 6: 391, 15: 391, 51: 391, 53: 391, 391, 391, 391}, + {393, 393, 6: 393, 15: 393, 51: 393, 53: 393, 393, 393, 393}, + {398, 398, 51: 7625, 1272: 7624}, // 4705 - {547: 2356, 569: 4655, 817: 7602}, - {547: 7603}, - {2838, 2838, 9: 2838, 117: 2838, 128: 2838, 2838, 2838, 2838, 2838, 2838, 2838, 2838, 137: 2838, 2838, 2838}, - {547: 7605}, - {2839, 2839, 9: 2839, 117: 2839, 128: 2839, 2839, 2839, 2839, 2839, 2839, 2839, 2839, 137: 2839, 2839, 2839}, + {547: 7623}, + {547: 7622}, + {399, 399, 51: 399}, + {400, 400, 51: 400}, + {434, 434}, // 4710 - {547: 7607}, - {2840, 2840, 9: 2840, 117: 2840, 128: 2840, 2840, 2840, 2840, 2840, 2840, 2840, 2840, 137: 2840, 2840, 2840}, - {547: 7609}, - {2841, 2841, 9: 2841, 117: 2841, 128: 2841, 2841, 2841, 2841, 2841, 2841, 2841, 2841, 137: 2841, 2841, 2841}, - {547: 7611}, + {586: 7626}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 549: 4682, 786: 4681, 3111, 3112, 3110, 954: 7627}, + {397, 397}, + {18: 2410, 108: 2410, 144: 2410, 192: 2410, 672: 2410}, + {144: 2405, 192: 7681, 672: 2405, 1519: 7680}, // 4715 - {2842, 2842, 9: 2842, 117: 2842, 128: 2842, 2842, 2842, 2842, 2842, 2842, 2842, 2842, 137: 2842, 2842, 2842}, - {547: 7613}, - {2843, 2843, 9: 2843, 117: 2843, 128: 2843, 2843, 2843, 2843, 2843, 2843, 2843, 2843, 137: 2843, 2843, 2843}, - {547: 7615}, - {2844, 2844, 9: 2844, 117: 2844, 128: 2844, 2844, 2844, 2844, 2844, 2844, 2844, 2844, 137: 2844, 2844, 2844}, + {569: 7676}, + {225: 7632}, + {2: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 10: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 53: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 593: 5449, 899: 7633}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5622, 3111, 3112, 3110, 1005: 7634}, + {120: 7638, 130: 7643, 7645, 7639, 7644, 7647, 7641, 7637, 7642, 139: 7648, 7646, 7640, 993: 7635, 1256: 7636}, // 4720 - {573: 3078, 814: 3922, 829: 7617}, - {2845, 2845, 9: 2845, 117: 2845, 128: 2845, 2845, 2845, 2845, 2845, 2845, 2845, 2845, 137: 2845, 2845, 2845}, - {573: 3078, 814: 3922, 829: 7619}, - {2846, 2846, 9: 2846, 117: 2846, 128: 2846, 2846, 2846, 2846, 2846, 2846, 2846, 2846, 137: 2846, 2846, 2846}, - {573: 3078, 814: 3922, 829: 7621}, + {2870, 2870, 9: 2870, 120: 2870, 130: 2870, 2870, 2870, 2870, 2870, 2870, 2870, 2870, 139: 2870, 2870, 2870}, + {191, 191, 9: 7674, 120: 7638, 130: 7643, 7645, 7639, 7644, 7647, 7641, 7637, 7642, 139: 7648, 7646, 7640, 993: 7673}, + {547: 2362, 569: 4674, 817: 7671}, + {547: 2362, 569: 4674, 817: 7669}, + {569: 4674, 573: 2362, 817: 7667}, // 4725 - {2847, 2847, 9: 2847, 117: 2847, 128: 2847, 2847, 2847, 2847, 2847, 2847, 2847, 2847, 137: 2847, 2847, 2847}, - {547: 7623}, - {2848, 2848, 9: 2848, 117: 2848, 128: 2848, 2848, 2848, 2848, 2848, 2848, 2848, 2848, 137: 2848, 2848, 2848}, - {547: 7625}, - {2849, 2849, 9: 2849, 117: 2849, 128: 2849, 2849, 2849, 2849, 2849, 2849, 2849, 2849, 137: 2849, 2849, 2849}, + {569: 4674, 573: 2362, 817: 7665}, + {569: 4674, 573: 2362, 817: 7663}, + {547: 2362, 569: 4674, 817: 7661}, + {547: 2362, 569: 4674, 817: 7659}, + {547: 2362, 569: 4674, 817: 7657}, // 4730 - {2851, 2851, 9: 2851, 117: 2851, 128: 2851, 2851, 2851, 2851, 2851, 2851, 2851, 2851, 137: 2851, 2851, 2851}, - {117: 7591, 128: 7596, 7598, 7592, 7597, 7600, 7594, 7590, 7595, 137: 7601, 7599, 7593, 993: 7628}, - {2850, 2850, 9: 2850, 117: 2850, 128: 2850, 2850, 2850, 2850, 2850, 2850, 2850, 2850, 137: 2850, 2850, 2850}, - {4: 7631, 460: 7632, 468: 7630}, - {142: 2402, 191: 2402, 672: 2402}, + {547: 2362, 569: 4674, 817: 7655}, + {547: 2362, 569: 4674, 817: 7653}, + {547: 2362, 569: 4674, 817: 7651}, + {547: 2362, 569: 4674, 817: 7649}, + {547: 7650}, // 4735 - {142: 2401, 191: 2401, 672: 2401}, - {142: 2400, 191: 2400, 672: 2400}, - {142: 2397, 672: 7638, 1515: 7637}, - {569: 7635}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 645: 5944, 786: 3793, 3092, 3093, 3091, 820: 5943, 870: 7636}, + {2856, 2856, 9: 2856, 120: 2856, 130: 2856, 2856, 2856, 2856, 2856, 2856, 2856, 2856, 139: 2856, 2856, 2856}, + {547: 7652}, + {2857, 2857, 9: 2857, 120: 2857, 130: 2857, 2857, 2857, 2857, 2857, 2857, 2857, 2857, 139: 2857, 2857, 2857}, + {547: 7654}, + {2858, 2858, 9: 2858, 120: 2858, 130: 2858, 2858, 2858, 2858, 2858, 2858, 2858, 2858, 139: 2858, 2858, 2858}, // 4740 - {142: 2398, 672: 2398}, - {142: 7642}, - {448: 7639}, - {191: 7640, 414: 7641}, - {142: 2396}, + {547: 7656}, + {2859, 2859, 9: 2859, 120: 2859, 130: 2859, 2859, 2859, 2859, 2859, 2859, 2859, 2859, 139: 2859, 2859, 2859}, + {547: 7658}, + {2860, 2860, 9: 2860, 120: 2860, 130: 2860, 2860, 2860, 2860, 2860, 2860, 2860, 2860, 139: 2860, 2860, 2860}, + {547: 7660}, // 4745 - {142: 2395}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 7644, 1514: 7643}, - {545: 7646, 551: 2393, 1513: 7645}, - {545: 2394, 551: 2394}, - {551: 7652}, + {2861, 2861, 9: 2861, 120: 2861, 130: 2861, 2861, 2861, 2861, 2861, 2861, 2861, 2861, 139: 2861, 2861, 2861}, + {547: 7662}, + {2862, 2862, 9: 2862, 120: 2862, 130: 2862, 2862, 2862, 2862, 2862, 2862, 2862, 2862, 139: 2862, 2862, 2862}, + {573: 3097, 814: 3941, 829: 7664}, + {2863, 2863, 9: 2863, 120: 2863, 130: 2863, 2863, 2863, 2863, 2863, 2863, 2863, 2863, 139: 2863, 2863, 2863}, // 4750 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 7648, 3092, 3093, 3091, 1349: 7647}, - {9: 7650, 52: 7649}, - {9: 2391, 52: 2391}, - {551: 2392}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 7651, 3092, 3093, 3091}, + {573: 3097, 814: 3941, 829: 7666}, + {2864, 2864, 9: 2864, 120: 2864, 130: 2864, 2864, 2864, 2864, 2864, 2864, 2864, 2864, 139: 2864, 2864, 2864}, + {573: 3097, 814: 3941, 829: 7668}, + {2865, 2865, 9: 2865, 120: 2865, 130: 2865, 2865, 2865, 2865, 2865, 2865, 2865, 2865, 139: 2865, 2865, 2865}, + {547: 7670}, // 4755 - {9: 2390, 52: 2390}, - {545: 2949, 2948, 562: 2947, 622: 2946, 670: 2942, 790: 7656, 821: 7654, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 3902, 7655, 7653, 1359: 7657}, - {2412, 2412, 546: 2412}, - {2411, 2411, 546: 2411, 553: 1030, 564: 1030, 1030}, - {2410, 2410, 546: 2410}, + {2866, 2866, 9: 2866, 120: 2866, 130: 2866, 2866, 2866, 2866, 2866, 2866, 2866, 2866, 139: 2866, 2866, 2866}, + {547: 7672}, + {2867, 2867, 9: 2867, 120: 2867, 130: 2867, 2867, 2867, 2867, 2867, 2867, 2867, 2867, 139: 2867, 2867, 2867}, + {2869, 2869, 9: 2869, 120: 2869, 130: 2869, 2869, 2869, 2869, 2869, 2869, 2869, 2869, 139: 2869, 2869, 2869}, + {120: 7638, 130: 7643, 7645, 7639, 7644, 7647, 7641, 7637, 7642, 139: 7648, 7646, 7640, 993: 7675}, // 4760 - {2409, 2409, 546: 2409, 553: 1029, 564: 1029, 1029, 568: 3915, 570: 3914, 579: 3913, 857: 3916, 3917}, - {2389, 2389, 546: 7659, 1511: 7658}, - {2406, 2406}, - {167: 7661, 386: 7660}, - {717: 7664}, + {2868, 2868, 9: 2868, 120: 2868, 130: 2868, 2868, 2868, 2868, 2868, 2868, 2868, 2868, 139: 2868, 2868, 2868}, + {4: 7678, 460: 7679, 468: 7677}, + {144: 2408, 192: 2408, 672: 2408}, + {144: 2407, 192: 2407, 672: 2407}, + {144: 2406, 192: 2406, 672: 2406}, // 4765 - {717: 7662}, - {1023: 7663}, - {2387, 2387}, - {1023: 7665}, - {2388, 2388}, + {144: 2403, 672: 7685, 1522: 7684}, + {569: 7682}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 645: 5985, 786: 3812, 3111, 3112, 3110, 820: 5984, 870: 7683}, + {144: 2404, 672: 2404}, + {144: 7689}, // 4770 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6045, 3092, 3093, 3091, 922: 7667}, - {2495, 2495, 16: 2486, 18: 2486, 21: 2486, 549: 4792, 552: 2486, 567: 2486, 571: 7671, 723: 2486, 880: 7670, 906: 7669, 972: 7673, 1052: 7672, 1361: 7668}, - {2506, 2506}, - {16: 4485, 18: 4749, 21: 7681, 552: 7680, 567: 4486, 723: 4484, 868: 7679, 880: 7682}, - {2497, 2497, 16: 2497, 18: 2497, 21: 2497, 549: 2497, 552: 2497, 567: 2497, 571: 2497, 723: 2497}, + {448: 7686}, + {192: 7687, 414: 7688}, + {144: 2402}, + {144: 2401}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 7691, 1521: 7690}, // 4775 - {211: 7675}, - {2494, 2494, 16: 2486, 18: 2486, 21: 2486, 549: 4792, 552: 2486, 567: 2486, 571: 7671, 723: 2486, 880: 7670, 906: 7669, 972: 7674}, - {2493, 2493, 16: 2493, 18: 2493, 21: 2493, 549: 2493, 552: 2493, 567: 2493, 571: 2493, 723: 2493}, - {2492, 2492, 16: 2492, 18: 2492, 21: 2492, 549: 2492, 552: 2492, 567: 2492, 571: 2492, 723: 2492}, - {227: 7676}, + {545: 7693, 551: 2399, 1520: 7692}, + {545: 2400, 551: 2400}, + {551: 7699}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 7695, 3111, 3112, 3110, 1353: 7694}, + {9: 7697, 52: 7696}, // 4780 - {573: 3078, 814: 3922, 829: 7677}, - {2821, 2821, 16: 2821, 18: 2821, 21: 2821, 232: 5567, 549: 2821, 552: 2821, 567: 2821, 571: 2821, 723: 2821, 1073: 7678}, - {2496, 2496, 16: 2496, 18: 2496, 21: 2496, 549: 2496, 552: 2496, 567: 2496, 571: 2496, 723: 2496}, - {2: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 10: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 53: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 547: 2356, 569: 4655, 600: 2356, 817: 7687}, - {2: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 10: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 53: 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 547: 2356, 569: 4655, 600: 2356, 817: 7685}, + {9: 2397, 52: 2397}, + {551: 2398}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 7698, 3111, 3112, 3110}, + {9: 2396, 52: 2396}, + {545: 2968, 2967, 562: 2966, 622: 2965, 662: 2961, 790: 7703, 821: 7701, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 3921, 7702, 7700, 1363: 7704}, // 4785 - {547: 2356, 569: 4655, 817: 7683}, - {2498, 2498, 16: 2498, 18: 2498, 21: 2498, 549: 2498, 552: 2498, 567: 2498, 571: 2498, 723: 2498}, - {547: 4864, 1183: 7684}, - {2499, 2499, 16: 2499, 18: 2499, 21: 2499, 549: 2499, 552: 2499, 567: 2499, 571: 2499, 723: 2499}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 600: 3791, 786: 3793, 3092, 3093, 3091, 820: 3790, 991: 7686}, + {2418, 2418, 546: 2418}, + {2417, 2417, 546: 2417, 553: 1034, 564: 1034, 1034}, + {2416, 2416, 546: 2416}, + {2415, 2415, 546: 2415, 553: 1033, 564: 1033, 1033, 568: 3934, 570: 3933, 579: 3932, 857: 3935, 3936}, + {2395, 2395, 546: 7706, 1518: 7705}, // 4790 - {2500, 2500, 16: 2500, 18: 2500, 21: 2500, 549: 2500, 552: 2500, 567: 2500, 571: 2500, 723: 2500}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 600: 4413, 786: 3793, 3092, 3093, 3091, 820: 4412, 921: 7688}, - {2501, 2501, 16: 2501, 18: 2501, 21: 2501, 549: 2501, 552: 2501, 567: 2501, 571: 2501, 723: 2501}, - {2: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 10: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 53: 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 2151, 593: 5423, 899: 7690}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 7691, 3092, 3093, 3091}, + {2412, 2412}, + {58: 7708, 387: 7707}, + {717: 7711}, + {717: 7709}, + {1023: 7710}, // 4795 - {113: 5457, 544: 2134, 556: 5456, 979: 7693, 1392: 7692}, - {544: 7694}, - {544: 2133}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 7695}, - {545: 7696}, + {2393, 2393}, + {1023: 7712}, + {2394, 2394}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6086, 3111, 3112, 3110, 922: 7714}, + {2508, 2508, 16: 2499, 18: 2499, 21: 2499, 549: 4811, 552: 2499, 567: 2499, 571: 7718, 723: 2499, 880: 7717, 906: 7716, 972: 7720, 1052: 7719, 1365: 7715}, // 4800 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 545: 5185, 786: 4083, 3092, 3093, 3091, 836: 5184, 939: 5183, 949: 7697}, - {9: 5194, 52: 7698}, - {2145, 2145, 6: 2145, 19: 2145, 111: 2145, 113: 2145, 2145, 2145, 2145, 118: 2145, 546: 2145, 556: 2145, 577: 2145, 1000: 7699}, - {2517, 2517, 6: 5453, 19: 5450, 111: 4787, 113: 5457, 5302, 4994, 5303, 118: 4993, 546: 5452, 556: 5456, 577: 4788, 977: 5454, 979: 5451, 988: 5455, 7218, 999: 5449, 1002: 7217, 1208: 7700}, - {2524, 2524}, + {2519, 2519}, + {16: 4504, 18: 4768, 21: 7728, 552: 7727, 567: 4505, 723: 4503, 868: 7726, 880: 7729}, + {2510, 2510, 16: 2510, 18: 2510, 21: 2510, 549: 2510, 552: 2510, 567: 2510, 571: 2510, 723: 2510}, + {212: 7722}, + {2507, 2507, 16: 2499, 18: 2499, 21: 2499, 549: 4811, 552: 2499, 567: 2499, 571: 7718, 723: 2499, 880: 7717, 906: 7716, 972: 7721}, // 4805 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 7702, 3092, 3093, 3091}, - {545: 7703}, - {297: 5486, 305: 5488, 308: 5487, 1302: 7704}, - {52: 7705}, - {544: 7706}, + {2506, 2506, 16: 2506, 18: 2506, 21: 2506, 549: 2506, 552: 2506, 567: 2506, 571: 2506, 723: 2506}, + {2505, 2505, 16: 2505, 18: 2505, 21: 2505, 549: 2505, 552: 2505, 567: 2505, 571: 2505, 723: 2505}, + {227: 7723}, + {573: 3097, 814: 3941, 829: 7724}, + {2839, 2839, 16: 2839, 18: 2839, 21: 2839, 232: 5595, 549: 2839, 552: 2839, 567: 2839, 571: 2839, 723: 2839, 1074: 7725}, // 4810 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 7707}, - {545: 7708}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 4083, 3092, 3093, 3091, 836: 4084, 918: 7709}, - {9: 4086, 52: 7710}, - {2526, 2526}, + {2509, 2509, 16: 2509, 18: 2509, 21: 2509, 549: 2509, 552: 2509, 567: 2509, 571: 2509, 723: 2509}, + {2: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 10: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 53: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 547: 2362, 569: 4674, 600: 2362, 817: 7734}, + {2: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 10: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 53: 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 2362, 547: 2362, 569: 4674, 600: 2362, 817: 7732}, + {547: 2362, 569: 4674, 817: 7730}, + {2511, 2511, 16: 2511, 18: 2511, 21: 2511, 549: 2511, 552: 2511, 567: 2511, 571: 2511, 723: 2511}, // 4815 - {2636, 2636}, - {2659, 2659}, - {2665, 2665, 546: 7715, 743: 7714}, - {205: 7722, 784: 7721}, - {387: 7717, 396: 7716}, + {547: 4883, 1185: 7731}, + {2512, 2512, 16: 2512, 18: 2512, 21: 2512, 549: 2512, 552: 2512, 567: 2512, 571: 2512, 723: 2512}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 600: 3810, 786: 3812, 3111, 3112, 3110, 820: 3809, 991: 7733}, + {2513, 2513, 16: 2513, 18: 2513, 21: 2513, 549: 2513, 552: 2513, 567: 2513, 571: 2513, 723: 2513}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 600: 4432, 786: 3812, 3111, 3112, 3110, 820: 4431, 921: 7735}, // 4820 - {60: 7720}, - {395: 7718}, - {205: 7719}, - {2662, 2662}, - {2663, 2663}, + {2514, 2514, 16: 2514, 18: 2514, 21: 2514, 549: 2514, 552: 2514, 567: 2514, 571: 2514, 723: 2514}, + {2: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 10: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 53: 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 2157, 593: 5449, 899: 7737}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 7738, 3111, 3112, 3110}, + {114: 5485, 544: 2138, 556: 5484, 979: 7740, 1397: 7739}, + {544: 7741}, // 4825 - {2664, 2664}, - {2661, 2661, 745: 4708, 1012: 7723}, - {2660, 2660}, - {2667, 2667}, - {2666, 2666}, + {544: 2137}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 7742}, + {545: 7743}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 545: 5204, 786: 4102, 3111, 3112, 3110, 836: 5203, 939: 5202, 949: 7744}, + {9: 5213, 52: 7745}, // 4830 - {326: 7728, 622: 7727}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 7740, 898: 7739}, - {622: 7729}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 7730}, - {560: 7732, 724: 7731}, + {2151, 2151, 6: 2151, 19: 2151, 58: 2151, 94: 2151, 108: 2151, 114: 2151, 2151, 2151, 2151, 2151, 546: 2151, 556: 2151, 577: 2151, 1000: 7746}, + {2530, 2530, 6: 5479, 19: 5476, 58: 5483, 94: 5482, 108: 4806, 114: 5485, 5326, 5013, 5327, 5012, 546: 5478, 556: 5484, 577: 4807, 977: 5480, 979: 5477, 988: 5481, 7264, 999: 5475, 1002: 7263, 1210: 7747}, + {2537, 2537}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 7749, 3111, 3112, 3110}, + {545: 7750}, // 4835 - {1124, 1124, 3341, 3505, 3305, 3180, 3221, 3343, 3105, 1124, 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 546: 1124, 716: 5622, 786: 5621, 3092, 3093, 3091, 978: 7737}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 5333, 3092, 3093, 3091, 875: 7733}, - {9: 5334, 724: 7734}, - {1124, 1124, 3341, 3505, 3305, 3180, 3221, 3343, 3105, 1124, 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 546: 1124, 716: 5622, 786: 5621, 3092, 3093, 3091, 978: 7735}, - {2681, 2681, 9: 5624, 546: 5605, 917: 7736}, + {298: 5514, 306: 5516, 309: 5515, 1304: 7751}, + {52: 7752}, + {544: 7753}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 7754}, + {545: 7755}, // 4840 - {2689, 2689}, - {2681, 2681, 9: 5624, 546: 5605, 917: 7738}, - {2692, 2692}, - {2684, 2684, 9: 3987, 226: 7760, 546: 2684, 730: 7759, 1118: 7770}, - {1269, 1269, 9: 1269, 140: 7745, 226: 1269, 546: 1269, 560: 7742, 724: 7741, 728: 7743, 730: 1269, 741: 7744}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 4102, 3111, 3112, 3110, 836: 4103, 918: 7756}, + {9: 4105, 52: 7757}, + {2539, 2539}, + {2651, 2651}, + {2674, 2674}, // 4845 - {1124, 1124, 3341, 3505, 3305, 3180, 3221, 3343, 3105, 1124, 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 546: 1124, 716: 5622, 786: 5621, 3092, 3093, 3091, 978: 7768}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 5333, 3092, 3093, 3091, 875: 7755}, - {323: 7751}, - {323: 7748}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6570, 3092, 3093, 3091, 997: 7746}, + {2680, 2680, 546: 7762, 743: 7761}, + {206: 7769, 784: 7768}, + {388: 7764, 397: 7763}, + {61: 7767}, + {396: 7765}, // 4850 - {2681, 2681, 9: 6572, 546: 5605, 917: 7747}, - {2686, 2686}, - {544: 7749}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6570, 3092, 3093, 3091, 997: 7750}, - {2687, 2687, 9: 6572}, + {206: 7766}, + {2677, 2677}, + {2678, 2678}, + {2679, 2679}, + {2676, 2676, 745: 4727, 1012: 7770}, // 4855 - {544: 7752}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6570, 3092, 3093, 3091, 997: 7753}, - {2681, 2681, 9: 6572, 546: 5605, 917: 7754}, - {2688, 2688}, - {2684, 2684, 9: 5334, 140: 7758, 226: 7760, 546: 2684, 724: 7757, 730: 7759, 1118: 7756}, + {2675, 2675}, + {2682, 2682}, + {2681, 2681}, + {327: 7775, 622: 7774}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 7787, 898: 7786}, // 4860 - {2681, 2681, 546: 5605, 917: 7767}, - {1124, 1124, 3341, 3505, 3305, 3180, 3221, 3343, 3105, 1124, 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 546: 1124, 716: 5622, 786: 5621, 3092, 3093, 3091, 978: 7765}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6570, 3092, 3093, 3091, 997: 7763}, - {140: 7762}, - {140: 7761}, + {622: 7776}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 7777}, + {560: 7779, 724: 7778}, + {1128, 1128, 3360, 3524, 3324, 3199, 3240, 3362, 3124, 1128, 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 546: 1128, 710: 5650, 786: 5649, 3111, 3112, 3110, 978: 7784}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5359, 3111, 3112, 3110, 875: 7780}, // 4865 - {2682, 2682, 546: 2682}, - {2683, 2683, 546: 2683}, - {2681, 2681, 9: 6572, 546: 5605, 917: 7764}, - {2685, 2685}, - {2681, 2681, 9: 5624, 546: 5605, 917: 7766}, + {9: 5360, 724: 7781}, + {1128, 1128, 3360, 3524, 3324, 3199, 3240, 3362, 3124, 1128, 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 546: 1128, 710: 5650, 786: 5649, 3111, 3112, 3110, 978: 7782}, + {2696, 2696, 9: 5652, 546: 5633, 917: 7783}, + {2704, 2704}, + {2696, 2696, 9: 5652, 546: 5633, 917: 7785}, // 4870 - {2690, 2690}, - {2691, 2691}, - {2681, 2681, 9: 5624, 546: 5605, 917: 7769}, - {2693, 2693}, - {2681, 2681, 546: 5605, 917: 7771}, + {2707, 2707}, + {2699, 2699, 9: 4006, 226: 7807, 546: 2699, 730: 7806, 1120: 7817}, + {1273, 1273, 9: 1273, 142: 7792, 226: 1273, 546: 1273, 560: 7789, 724: 7788, 726: 7790, 730: 1273, 741: 7791}, + {1128, 1128, 3360, 3524, 3324, 3199, 3240, 3362, 3124, 1128, 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 546: 1128, 710: 5650, 786: 5649, 3111, 3112, 3110, 978: 7815}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5359, 3111, 3112, 3110, 875: 7802}, // 4875 - {2694, 2694}, - {622: 7777}, - {572: 7775}, - {622: 2696}, - {560: 7776, 622: 2697}, + {324: 7798}, + {324: 7795}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6611, 3111, 3112, 3110, 997: 7793}, + {2696, 2696, 9: 6613, 546: 5633, 917: 7794}, + {2701, 2701}, // 4880 - {622: 2695}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 7778}, - {560: 6118, 641: 1138, 724: 1138, 737: 1138, 981: 7779}, - {641: 7782, 724: 7781, 737: 7783, 1292: 7780}, - {2702, 2702}, + {544: 7796}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6611, 3111, 3112, 3110, 997: 7797}, + {2702, 2702, 9: 6613}, + {544: 7799}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6611, 3111, 3112, 3110, 997: 7800}, // 4885 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 7790, 3092, 3093, 3091}, - {545: 3949, 956: 7785}, - {545: 3949, 956: 6716, 1110: 7784}, - {2699, 2699, 9: 6717}, - {581: 7786}, + {2696, 2696, 9: 6613, 546: 5633, 917: 7801}, + {2703, 2703}, + {2699, 2699, 9: 5360, 142: 7805, 226: 7807, 546: 2699, 724: 7804, 730: 7806, 1120: 7803}, + {2696, 2696, 546: 5633, 917: 7814}, + {1128, 1128, 3360, 3524, 3324, 3199, 3240, 3362, 3124, 1128, 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 546: 1128, 710: 5650, 786: 5649, 3111, 3112, 3110, 978: 7812}, // 4890 - {545: 3949, 956: 7787}, - {117: 7788}, - {573: 3078, 814: 4605, 846: 7789}, - {2700, 2700}, - {641: 7782, 737: 7783, 1292: 7791}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6611, 3111, 3112, 3110, 997: 7810}, + {142: 7809}, + {142: 7808}, + {2697, 2697, 546: 2697}, + {2698, 2698, 546: 2698}, // 4895 - {2701, 2701}, - {779: 7810, 7811}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 7804, 898: 7803}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 6045, 3092, 3093, 3091, 922: 7795}, - {2705, 2705, 726: 7798, 779: 7796, 7797, 1192: 7799}, + {2696, 2696, 9: 6613, 546: 5633, 917: 7811}, + {2700, 2700}, + {2696, 2696, 9: 5652, 546: 5633, 917: 7813}, + {2705, 2705}, + {2706, 2706}, // 4900 - {547: 7802}, - {573: 3078, 814: 3922, 829: 7801}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 7800, 3092, 3093, 3091}, - {2703, 2703}, - {2704, 2704}, + {2696, 2696, 9: 5652, 546: 5633, 917: 7816}, + {2708, 2708}, + {2696, 2696, 546: 5633, 917: 7818}, + {2709, 2709}, + {622: 7824}, // 4905 - {2707, 2707}, - {2710, 2710}, - {9: 3987, 779: 7806, 7807}, - {2705, 2705, 9: 1269, 726: 7798, 779: 1269, 1269, 1192: 7805}, - {2706, 2706}, + {572: 7822}, + {622: 2711}, + {560: 7823, 622: 2712}, + {622: 2710}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 7825}, // 4910 - {547: 7809}, - {573: 3078, 814: 3922, 829: 7808}, - {2708, 2708}, - {2711, 2711}, - {547: 7813}, + {560: 6159, 642: 1142, 724: 1142, 737: 1142, 981: 7826}, + {642: 7829, 724: 7828, 737: 7830, 1294: 7827}, + {2717, 2717}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 7837, 3111, 3112, 3110}, + {545: 3968, 956: 7832}, // 4915 - {573: 3078, 814: 3922, 829: 7812}, - {2709, 2709}, - {2712, 2712}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 737: 7815, 786: 3983, 3092, 3093, 3091, 819: 7816}, - {219: 7818}, + {545: 3968, 956: 6757, 1112: 7831}, + {2714, 2714, 9: 6758}, + {581: 7833}, + {545: 3968, 956: 7834}, + {120: 7835}, // 4920 - {2714, 2714, 573: 3078, 814: 4605, 846: 7817}, - {2713, 2713}, - {573: 3078, 814: 4605, 846: 7819}, + {573: 3097, 814: 4624, 846: 7836}, {2715, 2715}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 7831, 1310: 7830, 1502: 7829}, + {642: 7829, 737: 7830, 1294: 7838}, + {2716, 2716}, + {779: 7857, 7858}, // 4925 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 645: 5944, 786: 3793, 3092, 3093, 3091, 820: 5943, 870: 7824, 1315: 7823, 1505: 7822}, - {2719, 2719, 9: 7827}, - {2718, 2718, 9: 2718}, - {726: 7825}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 645: 5944, 786: 3793, 3092, 3093, 3091, 820: 5943, 870: 7826}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 7851, 898: 7850}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 6086, 3111, 3112, 3110, 922: 7842}, + {2720, 2720, 727: 7845, 779: 7843, 7844, 1194: 7846}, + {547: 7849}, + {573: 3097, 814: 3941, 829: 7848}, // 4930 - {2716, 2716, 9: 2716}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 645: 5944, 786: 3793, 3092, 3093, 3091, 820: 5943, 870: 7824, 1315: 7828}, - {2717, 2717, 9: 2717}, - {2723, 2723, 9: 7834}, - {2722, 2722, 9: 2722}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 7847, 3111, 3112, 3110}, + {2718, 2718}, + {2719, 2719}, + {2722, 2722}, + {2725, 2725}, // 4935 - {726: 7832}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 7833}, - {2720, 2720, 9: 2720}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 7831, 1310: 7835}, - {2721, 2721, 9: 2721}, + {9: 4006, 779: 7853, 7854}, + {2720, 2720, 9: 1273, 727: 7845, 779: 1273, 1273, 1194: 7852}, + {2721, 2721}, + {547: 7856}, + {573: 3097, 814: 3941, 829: 7855}, // 4940 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 2486, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 549: 4792, 552: 2486, 567: 2486, 571: 7671, 723: 2486, 786: 6045, 3092, 3093, 3091, 880: 7670, 906: 7669, 922: 7885, 972: 7673, 1052: 7886}, - {2: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 10: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 53: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 547: 2153, 593: 5016, 645: 2153, 869: 7871}, - {346: 7865, 1394: 7864}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 7862, 3092, 3093, 3091}, - {586: 7858}, + {2723, 2723}, + {2726, 2726}, + {547: 7860}, + {573: 3097, 814: 3941, 829: 7859}, + {2724, 2724}, // 4945 - {225: 7854}, - {2: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 10: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 53: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 575: 2153, 593: 5016, 869: 7843}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 575: 3984, 786: 3983, 3092, 3093, 3091, 819: 7844}, - {95: 7421, 97: 7418, 99: 7424, 7425, 104: 7426, 7419, 107: 7417, 7427, 7423, 7420, 112: 7848, 735: 7422, 1031: 7847, 1125: 7846, 1328: 7845}, - {164, 164, 95: 7421, 97: 7418, 99: 7424, 7425, 104: 7426, 7419, 107: 7417, 7427, 7423, 7420, 112: 7848, 735: 7422, 1031: 7847, 1125: 7853}, + {2727, 2727}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 737: 7862, 786: 4002, 3111, 3112, 3110, 819: 7863}, + {219: 7865}, + {2729, 2729, 573: 3097, 814: 4624, 846: 7864}, + {2728, 2728}, // 4950 - {163, 163, 95: 163, 97: 163, 99: 163, 163, 104: 163, 163, 107: 163, 163, 163, 163, 112: 163, 735: 163}, - {161, 161, 95: 161, 97: 161, 99: 161, 161, 104: 161, 161, 107: 161, 161, 161, 161, 112: 161, 735: 161}, - {160, 160, 95: 160, 97: 160, 99: 160, 160, 104: 160, 160, 107: 160, 160, 160, 160, 112: 160, 546: 7850, 557: 2356, 2356, 569: 4655, 573: 2356, 735: 160, 817: 7849}, - {557: 4608, 4609, 573: 3078, 814: 4605, 846: 4607, 928: 7852}, - {557: 4608, 4609, 573: 3078, 814: 4605, 846: 4607, 928: 7851}, + {573: 3097, 814: 4624, 846: 7866}, + {2730, 2730}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 7878, 1313: 7877, 1507: 7876}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 645: 5985, 786: 3812, 3111, 3112, 3110, 820: 5984, 870: 7871, 1319: 7870, 1512: 7869}, + {2734, 2734, 9: 7874}, // 4955 - {158, 158, 95: 158, 97: 158, 99: 158, 158, 104: 158, 158, 107: 158, 158, 158, 158, 112: 158, 735: 158}, - {159, 159, 95: 159, 97: 159, 99: 159, 159, 104: 159, 159, 107: 159, 159, 159, 159, 112: 159, 735: 159}, - {162, 162, 95: 162, 97: 162, 99: 162, 162, 104: 162, 162, 107: 162, 162, 162, 162, 112: 162, 735: 162}, - {2: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 10: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 53: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 593: 5016, 869: 7855}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 786: 5594, 3092, 3093, 3091, 1005: 7856}, + {2733, 2733, 9: 2733}, + {727: 7872}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 645: 5985, 786: 3812, 3111, 3112, 3110, 820: 5984, 870: 7873}, + {2731, 2731, 9: 2731}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 645: 5985, 786: 3812, 3111, 3112, 3110, 820: 5984, 870: 7871, 1319: 7875}, // 4960 - {117: 7591, 128: 7596, 7598, 7592, 7597, 7600, 7594, 7590, 7595, 137: 7601, 7599, 7593, 993: 7588, 1254: 7857}, - {190, 190, 9: 7627, 117: 7591, 128: 7596, 7598, 7592, 7597, 7600, 7594, 7590, 7595, 137: 7601, 7599, 7593, 993: 7626}, - {2: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 10: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 53: 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 2153, 549: 2153, 593: 5016, 869: 7859}, - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 3767, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 549: 4663, 786: 4662, 3092, 3093, 3091, 954: 7860}, - {119: 7457, 7455, 7454, 7456, 7453, 994: 7451, 1271: 7861}, + {2732, 2732, 9: 2732}, + {2738, 2738, 9: 7881}, + {2737, 2737, 9: 2737}, + {727: 7879}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 7880}, // 4965 - {193, 193, 9: 7505, 119: 7457, 7455, 7454, 7456, 7453, 994: 7504}, - {18: 4749, 880: 7863}, - {425, 425}, - {426, 426}, - {461: 7866}, + {2735, 2735, 9: 2735}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 7878, 1313: 7882}, + {2736, 2736, 9: 2736}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 2499, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 549: 4811, 552: 2499, 567: 2499, 571: 7718, 723: 2499, 786: 6086, 3111, 3112, 3110, 880: 7717, 906: 7716, 922: 7932, 972: 7720, 1052: 7933}, + {2: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 10: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 53: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 547: 2159, 593: 5035, 645: 2159, 869: 7918}, // 4970 - {424, 424, 95: 7867}, - {96: 7868}, - {544: 7869}, - {268: 7870}, - {423, 423}, + {348: 7912, 1399: 7911}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 7909, 3111, 3112, 3110}, + {586: 7905}, + {225: 7901}, + {2: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 10: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 53: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 575: 2159, 593: 5035, 869: 7890}, // 4975 - {2: 3341, 3505, 3305, 3180, 3221, 3343, 3105, 10: 3153, 3106, 3244, 3362, 3355, 3759, 3754, 3224, 3545, 3226, 3198, 3139, 3142, 3131, 3164, 3228, 3229, 3337, 3223, 3363, 3494, 3500, 3444, 3104, 3222, 3225, 3236, 3171, 3175, 3232, 3347, 3188, 3272, 3102, 3103, 3271, 3345, 3101, 3360, 3445, 3446, 3181, 53: 3097, 3317, 3447, 3448, 3751, 3432, 3187, 3190, 3414, 3411, 3466, 3467, 3468, 3403, 3415, 3418, 3419, 3416, 3420, 3421, 3417, 3470, 3469, 3621, 3616, 3464, 3410, 3465, 3422, 3405, 3406, 3620, 3409, 3412, 3618, 3413, 3423, 3619, 3463, 3462, 3110, 3125, 3258, 3184, 3191, 3763, 3390, 3389, 3193, 3094, 3119, 3391, 3386, 3140, 3385, 3392, 3387, 3388, 3302, 3182, 3375, 3440, 3373, 3441, 3509, 3374, 3628, 3614, 3610, 3627, 3609, 3196, 3266, 3546, 3764, 3598, 3603, 3590, 3602, 3604, 3593, 3599, 3600, 3372, 3601, 3605, 3597, 3122, 3357, 3261, 3756, 3625, 3527, 3622, 3776, 3192, 3758, 3774, 3775, 3773, 3769, 3364, 3365, 3366, 3367, 3368, 3369, 3371, 3765, 3752, 3115, 3197, 3361, 3151, 3166, 3381, 3530, 3283, 3287, 3311, 3313, 3291, 3292, 3293, 3294, 3282, 3124, 3312, 3443, 3532, 3238, 3555, 3133, 3755, 3154, 3761, 3263, 3130, 3303, 3161, 3219, 3240, 3183, 3762, 3210, 3460, 3401, 3113, 3141, 3156, 3165, 3376, 3243, 3285, 3437, 3629, 3199, 3200, 3503, 3207, 3262, 3111, 3112, 3144, 3160, 3353, 3485, 3230, 3231, 3578, 3169, 3170, 3425, 3549, 3378, 3299, 7872, 3449, 3484, 3379, 3547, 3174, 3493, 3208, 3426, 3114, 3624, 3451, 3623, 3757, 3237, 3167, 3395, 3321, 3777, 3433, 3434, 3397, 3257, 3435, 3352, 3490, 3393, 3186, 3290, 3350, 3247, 3098, 3475, 3126, 3480, 3252, 3136, 3138, 3254, 3145, 3582, 3155, 3158, 3452, 3335, 3404, 3213, 3431, 3281, 3250, 3310, 3356, 3239, 3626, 3492, 3195, 3502, 3351, 3471, 3472, 3109, 3259, 3322, 3615, 3520, 3473, 3454, 3116, 3476, 3120, 3427, 3477, 3772, 3127, 3324, 3522, 3479, 3319, 3135, 3481, 3333, 3359, 3344, 3528, 3483, 3512, 3137, 3354, 3149, 3384, 3585, 3159, 3162, 3611, 3334, 3382, 3146, 3318, 3535, 3377, 3536, 3328, 3380, 3438, 3613, 3612, 3617, 3264, 3778, 3486, 3487, 3268, 3326, 3488, 3436, 3178, 3179, 3298, 3407, 3300, 3550, 3489, 3348, 3349, 3288, 3189, 3297, 3330, 3495, 3100, 3560, 3329, 3606, 3567, 3568, 3569, 3570, 3572, 3571, 3573, 3574, 3575, 3504, 3203, 3331, 3595, 3630, 3594, 3211, 3095, 3383, 3400, 3107, 3402, 3428, 3099, 3474, 3309, 3117, 3118, 3296, 3439, 3768, 3478, 3241, 3123, 3128, 3129, 3482, 3253, 3529, 3255, 3143, 3265, 3148, 3316, 3579, 3150, 3327, 3453, 3260, 3234, 3501, 3249, 3537, 3304, 3323, 3370, 3246, 3336, 3783, 3227, 3394, 3315, 3267, 3458, 3457, 3459, 3506, 3580, 3172, 3339, 3342, 3396, 3430, 3507, 3760, 3442, 3277, 3278, 3284, 3542, 3510, 3543, 3408, 3450, 3185, 3513, 3346, 3308, 3245, 3491, 3340, 3496, 3497, 3498, 3499, 3325, 3429, 3338, 3564, 3306, 3588, 3576, 3456, 3461, 3204, 3235, 3242, 3307, 3209, 3508, 3455, 3314, 3781, 3216, 3515, 3516, 3753, 3517, 3518, 3519, 3581, 3521, 3524, 3523, 3525, 3526, 3147, 3301, 3270, 3531, 3152, 3589, 3782, 3534, 3358, 3607, 3608, 3788, 3787, 3779, 3591, 3592, 3540, 3320, 3539, 3168, 3541, 3548, 3276, 3176, 3177, 3424, 3295, 3511, 3770, 3771, 3544, 3780, 3289, 3217, 3332, 3248, 3251, 3583, 3556, 3557, 3558, 3559, 3551, 3584, 3784, 3553, 3554, 3269, 3785, 3786, 3577, 3206, 3561, 3562, 3563, 3596, 3766, 547: 3792, 645: 5944, 786: 3793, 3092, 3093, 3091, 820: 5943, 870: 5961, 1011: 5962, 1039: 7873}, - {1996, 1996, 6: 1996, 9: 1996, 15: 1996, 51: 1996, 53: 1996, 1996, 1996, 1996, 193: 1996, 545: 7879, 1996, 643: 1996, 739: 1996, 1996}, - {411, 411, 6: 411, 9: 5964, 15: 411, 51: 411, 53: 411, 411, 411, 411, 546: 411, 739: 6008, 1091: 6007, 7874}, - {419, 419, 6: 419, 15: 419, 51: 419, 53: 419, 419, 419, 419, 546: 7530, 1148: 7875}, - {392, 392, 6: 392, 15: 7546, 51: 392, 53: 392, 7545, 7547, 7548, 1084: 7544, 1252: 7543, 7876}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 575: 4003, 786: 4002, 3111, 3112, 3110, 819: 7891}, + {97: 7467, 99: 7464, 101: 7470, 7471, 106: 7472, 7465, 110: 7463, 7473, 7469, 7466, 119: 7895, 735: 7468, 1031: 7894, 1127: 7893, 1332: 7892}, + {164, 164, 97: 7467, 99: 7464, 101: 7470, 7471, 106: 7472, 7465, 110: 7463, 7473, 7469, 7466, 119: 7895, 735: 7468, 1031: 7894, 1127: 7900}, + {163, 163, 97: 163, 99: 163, 101: 163, 163, 106: 163, 163, 110: 163, 163, 163, 163, 119: 163, 735: 163}, + {161, 161, 97: 161, 99: 161, 101: 161, 161, 106: 161, 161, 110: 161, 161, 161, 161, 119: 161, 735: 161}, // 4980 - {397, 397, 6: 7573, 51: 397, 53: 7574, 1145: 7877}, - {394, 394, 51: 7578, 1270: 7878}, - {428, 428}, - {52: 7880}, - {193: 7881}, + {160, 160, 97: 160, 99: 160, 101: 160, 160, 106: 160, 160, 110: 160, 160, 160, 160, 119: 160, 546: 7897, 557: 2362, 2362, 569: 4674, 573: 2362, 735: 160, 817: 7896}, + {557: 4627, 4628, 573: 3097, 814: 4624, 846: 4626, 928: 7899}, + {557: 4627, 4628, 573: 3097, 814: 4624, 846: 4626, 928: 7898}, + {158, 158, 97: 158, 99: 158, 101: 158, 158, 106: 158, 158, 110: 158, 158, 158, 158, 119: 158, 735: 158}, + {159, 159, 97: 159, 99: 159, 101: 159, 159, 106: 159, 159, 110: 159, 159, 159, 159, 119: 159, 735: 159}, // 4985 - {737: 7882}, - {547: 5977, 1014: 7883}, - {427, 427}, - {16: 1667, 18: 1667, 21: 1667, 225: 5587, 549: 1667, 552: 1667, 567: 1667, 571: 1667, 723: 1667}, - {16: 2486, 18: 2486, 21: 2486, 549: 4792, 552: 2486, 567: 2486, 571: 7671, 723: 2486, 880: 7670, 906: 7669, 972: 7673, 1052: 7887}, + {162, 162, 97: 162, 99: 162, 101: 162, 162, 106: 162, 162, 110: 162, 162, 162, 162, 119: 162, 735: 162}, + {2: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 10: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 53: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 593: 5035, 869: 7902}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 786: 5622, 3111, 3112, 3110, 1005: 7903}, + {120: 7638, 130: 7643, 7645, 7639, 7644, 7647, 7641, 7637, 7642, 139: 7648, 7646, 7640, 993: 7635, 1256: 7904}, + {190, 190, 9: 7674, 120: 7638, 130: 7643, 7645, 7639, 7644, 7647, 7641, 7637, 7642, 139: 7648, 7646, 7640, 993: 7673}, // 4990 - {2507, 2507, 16: 2486, 18: 2486, 21: 2486, 549: 4792, 552: 2486, 567: 2486, 571: 7671, 723: 2486, 880: 7670, 906: 7669, 972: 7674}, - {2508, 2508, 16: 2486, 18: 2486, 21: 2486, 549: 4792, 552: 2486, 567: 2486, 571: 7671, 723: 2486, 880: 7670, 906: 7669, 972: 7674}, - {2354, 2354, 3: 2903, 58: 2926, 93: 2905, 2908, 96: 2938, 2906, 3057, 112: 2940, 126: 3072, 141: 3064, 170: 3074, 199: 2923, 206: 2921, 234: 2934, 261: 2929, 265: 2911, 270: 2959, 276: 2925, 279: 2901, 287: 2958, 3067, 290: 2907, 295: 3073, 307: 2937, 317: 2935, 319: 2902, 321: 2941, 343: 2927, 347: 2930, 354: 2939, 359: 2924, 372: 2916, 545: 2949, 2948, 562: 2947, 566: 2933, 571: 2957, 577: 3066, 590: 3060, 592: 2919, 598: 2917, 601: 2932, 622: 2946, 670: 2942, 724: 3071, 727: 2904, 3059, 738: 2899, 741: 2910, 754: 2909, 781: 2956, 3068, 2900, 790: 2953, 818: 2912, 821: 2955, 2943, 2944, 2945, 2954, 2952, 2951, 2950, 830: 2915, 3037, 3036, 837: 3058, 2913, 3018, 3030, 3046, 2918, 850: 2914, 854: 2976, 860: 2970, 2974, 3027, 3038, 872: 2978, 2920, 876: 3045, 3047, 912: 2922, 920: 2963, 923: 3017, 3063, 951: 3070, 962: 2971, 975: 3061, 980: 3021, 983: 3032, 985: 3035, 2928, 1050: 2983, 1107: 3065, 1116: 2991, 2961, 1119: 2962, 2965, 1122: 2968, 2966, 2969, 1126: 2967, 1128: 2964, 1130: 2972, 2973, 1133: 2979, 2931, 3016, 3055, 1138: 2980, 1149: 2987, 2981, 2982, 2988, 2989, 2990, 2986, 2992, 2993, 1159: 2985, 2984, 1162: 2975, 2936, 1165: 2994, 3008, 2995, 2996, 2999, 2998, 3004, 3003, 3005, 3000, 3006, 3007, 2997, 3002, 3001, 1182: 2960, 1185: 2977, 1190: 3012, 3010, 1193: 3011, 3009, 1198: 3014, 3015, 3013, 1204: 3052, 3019, 1213: 3069, 3020, 1222: 3022, 1224: 3023, 3049, 1228: 3053, 1238: 3054, 1255: 3025, 3026, 1264: 3031, 1267: 3028, 3029, 1274: 3051, 3062, 3034, 3033, 1283: 3039, 1285: 3041, 3040, 1288: 3043, 1290: 3050, 1293: 3042, 1299: 7889, 1312: 3044, 3024, 3048}, - {639, 639}, + {2: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 10: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 53: 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 2159, 549: 2159, 593: 5035, 869: 7906}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 3786, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 549: 4682, 786: 4681, 3111, 3112, 3110, 954: 7907}, + {121: 7503, 7501, 7500, 7502, 7499, 994: 7497, 1273: 7908}, + {193, 193, 9: 7552, 121: 7503, 7501, 7500, 7502, 7499, 994: 7551}, + {18: 4768, 880: 7910}, + // 4995 + {429, 429}, + {430, 430}, + {461: 7913}, + {428, 428, 97: 7914}, + {98: 7915}, + // 5000 + {544: 7916}, + {269: 7917}, + {427, 427}, + {2: 3360, 3524, 3324, 3199, 3240, 3362, 3124, 10: 3172, 3125, 3263, 3381, 3374, 3778, 3773, 3243, 3564, 3245, 3217, 3158, 3161, 3150, 3183, 3247, 3248, 3356, 3242, 3382, 3513, 3519, 3463, 3123, 3241, 3244, 3255, 3190, 3194, 3251, 3366, 3207, 3291, 3121, 3122, 3290, 3364, 3120, 3379, 3464, 3465, 3200, 53: 3116, 3336, 3466, 3467, 3770, 3185, 3451, 3206, 3209, 3433, 3430, 3485, 3486, 3487, 3422, 3434, 3437, 3438, 3435, 3439, 3440, 3436, 3489, 3488, 3640, 3635, 3483, 3429, 3484, 3441, 3424, 3425, 3639, 3428, 3431, 3637, 3432, 3442, 3638, 3482, 3481, 3179, 3129, 3144, 3277, 3203, 3210, 3782, 3409, 3408, 3212, 3113, 3138, 3410, 3405, 3321, 3159, 3404, 3411, 3406, 3407, 3394, 3459, 3392, 3460, 3393, 3201, 3528, 3647, 3633, 3629, 3646, 3628, 3215, 3285, 3565, 3783, 3617, 3622, 3609, 3621, 3623, 3612, 3618, 3619, 3391, 3620, 3624, 3616, 3141, 3376, 3280, 3775, 3644, 3546, 3641, 3795, 3211, 3777, 3793, 3794, 3792, 3788, 3383, 3384, 3385, 3386, 3387, 3388, 3390, 3784, 3771, 3134, 3216, 3380, 3170, 3400, 3549, 3302, 3306, 3330, 3332, 3310, 3311, 3312, 3313, 3301, 3143, 3331, 3462, 3551, 3257, 3574, 3152, 3774, 3173, 3780, 3282, 3149, 3322, 3180, 3238, 3259, 3202, 3781, 3229, 3479, 3420, 3132, 3160, 3175, 3184, 3395, 3262, 3304, 3456, 3648, 3218, 3219, 3522, 3226, 3281, 3130, 3131, 3163, 3372, 3504, 3249, 3250, 3597, 3188, 3189, 3444, 3568, 3397, 3318, 7919, 3468, 3503, 3398, 3566, 3193, 3512, 3227, 3445, 3133, 3643, 3470, 3642, 3776, 3256, 3186, 3414, 3340, 3796, 3452, 3453, 3416, 3276, 3454, 3371, 3509, 3412, 3205, 3309, 3649, 3369, 3266, 3117, 3494, 3145, 3499, 3271, 3155, 3157, 3273, 3164, 3601, 3174, 3177, 3471, 3354, 3423, 3232, 3450, 3300, 3269, 3329, 3375, 3258, 3645, 3511, 3214, 3521, 3370, 3490, 3491, 3128, 3278, 3341, 3634, 3539, 3492, 3473, 3135, 3495, 3139, 3446, 3496, 3791, 3146, 3343, 3541, 3498, 3338, 3154, 3500, 3352, 3378, 3363, 3547, 3502, 3531, 3156, 3373, 3168, 3403, 3604, 3178, 3181, 3630, 3353, 3401, 3165, 3337, 3268, 3554, 3396, 3555, 3347, 3399, 3457, 3632, 3631, 3636, 3283, 3797, 3505, 3506, 3287, 3345, 3507, 3455, 3197, 3198, 3317, 3426, 3319, 3569, 3508, 3367, 3368, 3307, 3208, 3316, 3349, 3514, 3119, 3579, 3348, 3625, 3586, 3587, 3588, 3589, 3591, 3590, 3592, 3593, 3594, 3523, 3222, 3350, 3614, 3613, 3230, 3114, 3402, 3419, 3126, 3421, 3447, 3118, 3493, 3328, 3136, 3137, 3315, 3458, 3787, 3497, 3260, 3142, 3147, 3148, 3501, 3272, 3548, 3274, 3162, 3284, 3167, 3335, 3598, 3169, 3346, 3472, 3279, 3253, 3520, 3556, 3323, 3342, 3389, 3265, 3355, 3802, 3246, 3413, 3334, 3286, 3477, 3476, 3478, 3525, 3599, 3191, 3358, 3361, 3415, 3449, 3526, 3779, 3461, 3296, 3297, 3303, 3561, 3529, 3562, 3427, 3469, 3204, 3532, 3365, 3327, 3264, 3510, 3359, 3515, 3516, 3517, 3518, 3344, 3448, 3357, 3583, 3325, 3607, 3595, 3475, 3480, 3223, 3254, 3261, 3326, 3228, 3527, 3474, 3333, 3800, 3235, 3534, 3535, 3772, 3536, 3537, 3538, 3600, 3540, 3543, 3542, 3544, 3545, 3166, 3320, 3289, 3550, 3171, 3608, 3801, 3553, 3377, 3626, 3627, 3807, 3806, 3798, 3610, 3611, 3559, 3339, 3558, 3187, 3560, 3567, 3295, 3195, 3196, 3443, 3314, 3530, 3789, 3790, 3563, 3799, 3308, 3236, 3351, 3267, 3270, 3602, 3575, 3576, 3577, 3578, 3570, 3603, 3803, 3572, 3573, 3288, 3804, 3805, 3596, 3225, 3580, 3581, 3582, 3615, 3785, 547: 3811, 645: 5985, 786: 3812, 3111, 3112, 3110, 820: 5984, 870: 6002, 1011: 6003, 1039: 7920}, + {2000, 2000, 6: 2000, 9: 2000, 15: 2000, 51: 2000, 53: 2000, 2000, 2000, 2000, 194: 2000, 545: 7926, 2000, 641: 2000, 739: 2000, 2000}, + // 5005 + {415, 415, 6: 415, 9: 6005, 15: 415, 51: 415, 53: 415, 415, 415, 415, 546: 415, 739: 6049, 1092: 6048, 7921}, + {423, 423, 6: 423, 15: 423, 51: 423, 53: 423, 423, 423, 423, 546: 7577, 1150: 7922}, + {396, 396, 6: 396, 15: 7593, 51: 396, 53: 396, 7592, 7594, 7595, 1085: 7591, 1254: 7590, 7923}, + {401, 401, 6: 7620, 51: 401, 53: 7621, 1147: 7924}, + {398, 398, 51: 7625, 1272: 7925}, + // 5010 + {432, 432}, + {52: 7927}, + {194: 7928}, + {737: 7929}, + {547: 6018, 1014: 7930}, + // 5015 + {431, 431}, + {16: 1671, 18: 1671, 21: 1671, 225: 5615, 549: 1671, 552: 1671, 567: 1671, 571: 1671, 723: 1671}, + {16: 2499, 18: 2499, 21: 2499, 549: 4811, 552: 2499, 567: 2499, 571: 7718, 723: 2499, 880: 7717, 906: 7716, 972: 7720, 1052: 7934}, + {2520, 2520, 16: 2499, 18: 2499, 21: 2499, 549: 4811, 552: 2499, 567: 2499, 571: 7718, 723: 2499, 880: 7717, 906: 7716, 972: 7721}, + {2521, 2521, 16: 2499, 18: 2499, 21: 2499, 549: 4811, 552: 2499, 567: 2499, 571: 7718, 723: 2499, 880: 7717, 906: 7716, 972: 7721}, + // 5020 + {2360, 2360, 3: 2922, 59: 2945, 95: 2924, 2927, 98: 2957, 2925, 3076, 119: 2959, 128: 3091, 143: 3083, 171: 3093, 200: 2942, 207: 2940, 234: 2953, 262: 2948, 266: 2930, 271: 2978, 277: 2944, 280: 2920, 288: 2977, 3086, 291: 2926, 296: 3092, 308: 2956, 318: 2954, 320: 2921, 322: 2960, 345: 2946, 349: 2949, 356: 2958, 361: 2943, 374: 2935, 545: 2968, 2967, 562: 2966, 566: 2952, 571: 2976, 577: 3085, 590: 3079, 592: 2938, 598: 2936, 601: 2951, 622: 2965, 662: 2961, 724: 3090, 726: 3078, 728: 2923, 738: 2918, 741: 2929, 754: 2928, 781: 2975, 3087, 2919, 790: 2972, 818: 2931, 821: 2974, 2962, 2963, 2964, 2973, 2971, 2970, 2969, 830: 2934, 3056, 3055, 837: 3077, 2932, 3037, 3049, 3065, 2937, 850: 2933, 854: 2995, 860: 2989, 2993, 3046, 3057, 872: 2997, 2939, 876: 3064, 3066, 912: 2941, 920: 2982, 923: 3036, 3082, 951: 3089, 962: 2990, 975: 3080, 980: 3040, 983: 3051, 985: 3054, 2947, 1050: 3002, 1109: 3084, 1118: 3010, 2980, 1121: 2981, 2984, 1124: 2987, 2985, 2988, 1128: 2986, 1130: 2983, 1132: 2991, 2992, 1135: 2998, 2950, 3035, 3074, 1140: 2999, 1151: 3006, 3000, 3001, 3007, 3008, 3009, 3005, 3011, 3012, 1161: 3004, 3003, 1164: 2994, 2955, 1167: 3013, 3027, 3014, 3015, 3018, 3017, 3023, 3022, 3024, 3019, 3025, 3026, 3016, 3021, 3020, 1184: 2979, 1187: 2996, 1192: 3031, 3029, 1195: 3030, 3028, 1200: 3033, 3034, 3032, 1206: 3071, 3038, 1215: 3088, 3039, 1224: 3041, 1226: 3042, 3068, 1230: 3072, 1240: 3073, 1257: 3044, 3045, 1266: 3050, 1269: 3047, 3048, 1276: 3070, 3081, 3053, 3052, 1285: 3058, 1287: 3060, 3059, 1290: 3062, 1292: 3069, 1295: 3061, 1301: 7936, 1315: 3063, 3043, 3067}, + {643, 643}, } ) @@ -12994,7 +13061,7 @@ func yylex1(yylex yyLexer, lval *yySymType) (n int) { } func yyParse(yylex yyLexer, parser *Parser) int { - const yyError = 1535 + const yyError = 1542 yyEx, _ := yylex.(yyLexerEx) var yyn int @@ -13360,23 +13427,23 @@ yynewstate: } case 31: { - parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourcePriority, UintValue: yyS[yypt-0].item.(uint64)} + parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourceRURate, BoolValue: true} } case 32: { - parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourceBurstableOpiton, BoolValue: true} + parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourcePriority, UintValue: yyS[yypt-0].item.(uint64)} } case 33: { - parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourceBurstableOpiton, BoolValue: yyS[yypt-0].item.(bool)} + parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourceBurstableOpiton, BoolValue: true} } case 34: { - parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourceGroupRunaway, RunawayOptionList: yyS[yypt-1].item.([]*ast.ResourceGroupRunawayOption)} + parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourceBurstableOpiton, BoolValue: yyS[yypt-0].item.(bool)} } case 35: { - parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourceGroupRunaway, RunawayOptionList: nil} + parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourceGroupRunaway, RunawayOptionList: yyS[yypt-1].item.([]*ast.ResourceGroupRunawayOption)} } case 36: { @@ -13384,11 +13451,11 @@ yynewstate: } case 37: { - parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourceGroupBackground, BackgroundOptions: yyS[yypt-1].item.([]*ast.ResourceGroupBackgroundOption)} + parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourceGroupRunaway, RunawayOptionList: nil} } case 38: { - parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourceGroupBackground, BackgroundOptions: nil} + parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourceGroupBackground, BackgroundOptions: yyS[yypt-1].item.([]*ast.ResourceGroupBackgroundOption)} } case 39: { @@ -13396,9 +13463,13 @@ yynewstate: } case 40: { - parser.yyVAL.item = []*ast.ResourceGroupBackgroundOption{yyS[yypt-0].item.(*ast.ResourceGroupBackgroundOption)} + parser.yyVAL.item = &ast.ResourceGroupOption{Tp: ast.ResourceGroupBackground, BackgroundOptions: nil} } case 41: + { + parser.yyVAL.item = []*ast.ResourceGroupBackgroundOption{yyS[yypt-0].item.(*ast.ResourceGroupBackgroundOption)} + } + case 42: { if !ast.CheckBackgroundAppend(yyS[yypt-1].item.([]*ast.ResourceGroupBackgroundOption), yyS[yypt-0].item.(*ast.ResourceGroupBackgroundOption)) { yylex.AppendError(yylex.Errorf("Dupliated background options specified")) @@ -13406,7 +13477,7 @@ yynewstate: } parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.ResourceGroupBackgroundOption), yyS[yypt-0].item.(*ast.ResourceGroupBackgroundOption)) } - case 42: + case 43: { if !ast.CheckBackgroundAppend(yyS[yypt-2].item.([]*ast.ResourceGroupBackgroundOption), yyS[yypt-0].item.(*ast.ResourceGroupBackgroundOption)) { yylex.AppendError(yylex.Errorf("Dupliated background options specified")) @@ -13414,31 +13485,31 @@ yynewstate: } parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.ResourceGroupBackgroundOption), yyS[yypt-0].item.(*ast.ResourceGroupBackgroundOption)) } - case 43: + case 44: { parser.yyVAL.item = &ast.ResourceGroupBackgroundOption{Type: ast.BackgroundOptionTaskNames, StrValue: yyS[yypt-0].ident} } - case 44: + case 45: { parser.yyVAL.item = []*ast.PlacementOption{yyS[yypt-0].item.(*ast.PlacementOption)} } - case 45: + case 46: { parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.PlacementOption), yyS[yypt-0].item.(*ast.PlacementOption)) } - case 46: + case 47: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.PlacementOption), yyS[yypt-0].item.(*ast.PlacementOption)) } - case 47: + case 48: { parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionPrimaryRegion, StrValue: yyS[yypt-0].ident} } - case 48: + case 49: { parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionRegions, StrValue: yyS[yypt-0].ident} } - case 49: + case 50: { cnt := yyS[yypt-0].item.(uint64) if cnt == 0 { @@ -13447,45 +13518,41 @@ yynewstate: } parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionFollowerCount, UintValue: cnt} } - case 50: - { - parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionVoterCount, UintValue: yyS[yypt-0].item.(uint64)} - } case 51: { - parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionLearnerCount, UintValue: yyS[yypt-0].item.(uint64)} + parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionVoterCount, UintValue: yyS[yypt-0].item.(uint64)} } case 52: { - parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionSchedule, StrValue: yyS[yypt-0].ident} + parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionLearnerCount, UintValue: yyS[yypt-0].item.(uint64)} } case 53: { - parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionConstraints, StrValue: yyS[yypt-0].ident} + parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionSchedule, StrValue: yyS[yypt-0].ident} } case 54: { - parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionLeaderConstraints, StrValue: yyS[yypt-0].ident} + parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionConstraints, StrValue: yyS[yypt-0].ident} } case 55: { - parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionFollowerConstraints, StrValue: yyS[yypt-0].ident} + parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionLeaderConstraints, StrValue: yyS[yypt-0].ident} } case 56: { - parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionVoterConstraints, StrValue: yyS[yypt-0].ident} + parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionFollowerConstraints, StrValue: yyS[yypt-0].ident} } case 57: { - parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionLearnerConstraints, StrValue: yyS[yypt-0].ident} + parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionVoterConstraints, StrValue: yyS[yypt-0].ident} } case 58: { - parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionSurvivalPreferences, StrValue: yyS[yypt-0].ident} + parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionLearnerConstraints, StrValue: yyS[yypt-0].ident} } case 59: { - parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionPolicy, StrValue: yyS[yypt-0].ident} + parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionSurvivalPreferences, StrValue: yyS[yypt-0].ident} } case 60: { @@ -13501,21 +13568,25 @@ yynewstate: } case 63: { - parser.yyVAL.item = &ast.AttributesSpec{Default: true} + parser.yyVAL.item = &ast.PlacementOption{Tp: ast.PlacementOptionPolicy, StrValue: yyS[yypt-0].ident} } case 64: { - parser.yyVAL.item = &ast.AttributesSpec{Default: false, Attributes: yyS[yypt-0].ident} + parser.yyVAL.item = &ast.AttributesSpec{Default: true} } case 65: { - parser.yyVAL.item = &ast.StatsOptionsSpec{Default: true} + parser.yyVAL.item = &ast.AttributesSpec{Default: false, Attributes: yyS[yypt-0].ident} } case 66: { - parser.yyVAL.item = &ast.StatsOptionsSpec{Default: false, StatsOptions: yyS[yypt-0].ident} + parser.yyVAL.item = &ast.StatsOptionsSpec{Default: true} } case 67: + { + parser.yyVAL.item = &ast.StatsOptionsSpec{Default: false, StatsOptions: yyS[yypt-0].ident} + } + case 68: { if yyS[yypt-0].item != nil { parser.yyVAL.item = &ast.AlterTableSpec{ @@ -13526,19 +13597,19 @@ yynewstate: parser.yyVAL.item = nil } } - case 68: + case 69: { parser.yyVAL.item = &ast.AlterTableSpec{ Tp: ast.AlterTableRemovePartitioning, } } - case 69: + case 70: { ret := yyS[yypt-0].item.(*ast.AlterTableSpec) ret.NoWriteToBinlog = yyS[yypt-1].item.(bool) parser.yyVAL.item = ret } - case 70: + case 71: { partitionMethod := ast.PartitionMethod{Expr: yyS[yypt-1].expr} startOffset := parser.yyVAL.offset @@ -13550,7 +13621,7 @@ yynewstate: Partition: &ast.PartitionOptions{PartitionMethod: partitionMethod}, } } - case 71: + case 72: { partitionMethod := ast.PartitionMethod{Expr: yyS[yypt-1].expr} startOffset := parser.yyVAL.offset @@ -13563,7 +13634,7 @@ yynewstate: Partition: &ast.PartitionOptions{PartitionMethod: partitionMethod}, } } - case 72: + case 73: { parser.yyVAL.item = &ast.AlterTableSpec{ Tp: ast.AlterTablePartitionAttributes, @@ -13571,7 +13642,7 @@ yynewstate: AttributesSpec: yyS[yypt-0].item.(*ast.AttributesSpec), } } - case 73: + case 74: { parser.yyVAL.item = &ast.AlterTableSpec{ Tp: ast.AlterTablePartitionOptions, @@ -13579,28 +13650,28 @@ yynewstate: Options: yyS[yypt-0].item.([]*ast.TableOption), } } - case 74: + case 75: { parser.yyVAL.item = &ast.AlterTableSpec{ Tp: ast.AlterTableRemoveTTL, } } - case 75: + case 76: { parser.yyVAL.item = []string{} } - case 76: + case 77: { parser.yyVAL.item = yyS[yypt-0].item } - case 77: + case 78: { parser.yyVAL.item = &ast.AlterTableSpec{ Tp: ast.AlterTableOption, Options: yyS[yypt-0].item.([]*ast.TableOption), } } - case 78: + case 79: { tiflashReplicaSpec := &ast.TiFlashReplicaSpec{ Count: yyS[yypt-1].item.(uint64), @@ -13611,7 +13682,7 @@ yynewstate: TiFlashReplica: tiflashReplicaSpec, } } - case 79: + case 80: { tiflashReplicaSpec := &ast.TiFlashReplicaSpec{ Count: yyS[yypt-1].item.(uint64), @@ -13623,7 +13694,7 @@ yynewstate: TiFlashReplica: tiflashReplicaSpec, } } - case 80: + case 81: { op := &ast.AlterTableSpec{ Tp: ast.AlterTableOption, @@ -13635,7 +13706,7 @@ yynewstate: } parser.yyVAL.item = op } - case 81: + case 82: { op := &ast.AlterTableSpec{ Tp: ast.AlterTableOption, @@ -13647,7 +13718,7 @@ yynewstate: } parser.yyVAL.item = op } - case 82: + case 83: { parser.yyVAL.item = &ast.AlterTableSpec{ IfNotExists: yyS[yypt-2].item.(bool), @@ -13656,7 +13727,7 @@ yynewstate: Position: yyS[yypt-0].item.(*ast.ColumnPosition), } } - case 83: + case 84: { tes := yyS[yypt-1].item.([]interface{}) var columnDefs []*ast.ColumnDef @@ -13676,7 +13747,7 @@ yynewstate: NewConstraints: constraints, } } - case 84: + case 85: { constraint := yyS[yypt-0].item.(*ast.Constraint) parser.yyVAL.item = &ast.AlterTableSpec{ @@ -13684,7 +13755,7 @@ yynewstate: Constraint: constraint, } } - case 85: + case 86: { var defs []*ast.PartitionDefinition if yyS[yypt-0].item != nil { @@ -13702,7 +13773,7 @@ yynewstate: PartDefinitions: defs, } } - case 86: + case 87: { noWriteToBinlog := yyS[yypt-2].item.(bool) if noWriteToBinlog { @@ -13716,7 +13787,7 @@ yynewstate: Num: getUint64FromNUM(yyS[yypt-0].item), } } - case 87: + case 88: { noWriteToBinlog := yyS[yypt-0].item.(bool) if noWriteToBinlog { @@ -13735,7 +13806,7 @@ yynewstate: Partition: &ast.PartitionOptions{PartitionMethod: partitionMethod}, } } - case 88: + case 89: { statsSpec := &ast.StatisticsSpec{ StatsName: yyS[yypt-4].ident, @@ -13748,21 +13819,21 @@ yynewstate: Statistics: statsSpec, } } - case 89: + case 90: { parser.yyVAL.item = &ast.AlterTableSpec{ Tp: ast.AlterTableAttributes, AttributesSpec: yyS[yypt-0].item.(*ast.AttributesSpec), } } - case 90: + case 91: { parser.yyVAL.item = &ast.AlterTableSpec{ Tp: ast.AlterTableStatsOptions, StatsOptionsSpec: yyS[yypt-0].item.(*ast.StatsOptionsSpec), } } - case 91: + case 92: { yylex.AppendError(yylex.Errorf("The CHECK PARTITIONING clause is parsed but not implement yet.")) parser.lastErrorAsWarn() @@ -13776,7 +13847,7 @@ yynewstate: } parser.yyVAL.item = ret } - case 92: + case 93: { noWriteToBinlog := yyS[yypt-1].item.(bool) if noWriteToBinlog { @@ -13789,7 +13860,7 @@ yynewstate: Num: getUint64FromNUM(yyS[yypt-0].item), } } - case 93: + case 94: { parser.yyVAL.item = &ast.AlterTableSpec{ IfExists: yyS[yypt-2].item.(bool), @@ -13797,11 +13868,11 @@ yynewstate: OldColumnName: yyS[yypt-1].item.(*ast.ColumnName), } } - case 94: + case 95: { parser.yyVAL.item = &ast.AlterTableSpec{Tp: ast.AlterTableDropPrimaryKey} } - case 95: + case 96: { parser.yyVAL.item = &ast.AlterTableSpec{ IfExists: yyS[yypt-1].item.(bool), @@ -13809,7 +13880,7 @@ yynewstate: PartitionNames: yyS[yypt-0].item.([]model.CIStr), } } - case 96: + case 97: { partitionMethod := ast.PartitionMethod{Expr: yyS[yypt-2].expr} startOffset := parser.yyVAL.offset @@ -13823,7 +13894,7 @@ yynewstate: Partition: &ast.PartitionOptions{PartitionMethod: partitionMethod}, } } - case 97: + case 98: { statsSpec := &ast.StatisticsSpec{ StatsName: yyS[yypt-0].ident, @@ -13834,7 +13905,7 @@ yynewstate: Statistics: statsSpec, } } - case 98: + case 99: { parser.yyVAL.item = &ast.AlterTableSpec{ Tp: ast.AlterTableExchangePartition, @@ -13843,7 +13914,7 @@ yynewstate: WithValidation: yyS[yypt-0].item.(bool), } } - case 99: + case 100: { ret := &ast.AlterTableSpec{ Tp: ast.AlterTableTruncatePartition, @@ -13855,7 +13926,7 @@ yynewstate: } parser.yyVAL.item = ret } - case 100: + case 101: { ret := &ast.AlterTableSpec{ NoWriteToBinlog: yyS[yypt-1].item.(bool), @@ -13868,7 +13939,7 @@ yynewstate: } parser.yyVAL.item = ret } - case 101: + case 102: { ret := &ast.AlterTableSpec{ NoWriteToBinlog: yyS[yypt-1].item.(bool), @@ -13881,7 +13952,7 @@ yynewstate: } parser.yyVAL.item = ret } - case 102: + case 103: { ret := &ast.AlterTableSpec{ Tp: ast.AlterTableImportPartitionTablespace, @@ -13895,7 +13966,7 @@ yynewstate: yylex.AppendError(yylex.Errorf("The IMPORT PARTITION TABLESPACE clause is parsed but ignored by all storage engines.")) parser.lastErrorAsWarn() } - case 103: + case 104: { ret := &ast.AlterTableSpec{ Tp: ast.AlterTableDiscardPartitionTablespace, @@ -13909,7 +13980,7 @@ yynewstate: yylex.AppendError(yylex.Errorf("The DISCARD PARTITION TABLESPACE clause is parsed but ignored by all storage engines.")) parser.lastErrorAsWarn() } - case 104: + case 105: { ret := &ast.AlterTableSpec{ Tp: ast.AlterTableImportTablespace, @@ -13918,7 +13989,7 @@ yynewstate: yylex.AppendError(yylex.Errorf("The IMPORT TABLESPACE clause is parsed but ignored by all storage engines.")) parser.lastErrorAsWarn() } - case 105: + case 106: { ret := &ast.AlterTableSpec{ Tp: ast.AlterTableDiscardTablespace, @@ -13927,7 +13998,7 @@ yynewstate: yylex.AppendError(yylex.Errorf("The DISCARD TABLESPACE clause is parsed but ignored by all storage engines.")) parser.lastErrorAsWarn() } - case 106: + case 107: { ret := &ast.AlterTableSpec{ Tp: ast.AlterTableRebuildPartition, @@ -13940,7 +14011,7 @@ yynewstate: } parser.yyVAL.item = ret } - case 107: + case 108: { parser.yyVAL.item = &ast.AlterTableSpec{ IfExists: yyS[yypt-1].item.(bool), @@ -13948,7 +14019,7 @@ yynewstate: Name: yyS[yypt-0].ident, } } - case 108: + case 109: { parser.yyVAL.item = &ast.AlterTableSpec{ IfExists: yyS[yypt-1].item.(bool), @@ -13956,26 +14027,26 @@ yynewstate: Name: yyS[yypt-0].ident, } } - case 109: + case 110: { parser.yyVAL.item = &ast.AlterTableSpec{ Tp: ast.AlterTableOrderByColumns, OrderByList: yyS[yypt-0].item.([]*ast.AlterOrderItem), } } - case 110: + case 111: { parser.yyVAL.item = &ast.AlterTableSpec{ Tp: ast.AlterTableDisableKeys, } } - case 111: + case 112: { parser.yyVAL.item = &ast.AlterTableSpec{ Tp: ast.AlterTableEnableKeys, } } - case 112: + case 113: { parser.yyVAL.item = &ast.AlterTableSpec{ IfExists: yyS[yypt-2].item.(bool), @@ -13984,7 +14055,7 @@ yynewstate: Position: yyS[yypt-0].item.(*ast.ColumnPosition), } } - case 113: + case 114: { parser.yyVAL.item = &ast.AlterTableSpec{ IfExists: yyS[yypt-3].item.(bool), @@ -13994,7 +14065,7 @@ yynewstate: Position: yyS[yypt-0].item.(*ast.ColumnPosition), } } - case 114: + case 115: { option := &ast.ColumnOption{Expr: yyS[yypt-0].expr} colDef := &ast.ColumnDef{ @@ -14006,7 +14077,7 @@ yynewstate: NewColumns: []*ast.ColumnDef{colDef}, } } - case 115: + case 116: { option := &ast.ColumnOption{Expr: yyS[yypt-1].expr} colDef := &ast.ColumnDef{ @@ -14018,7 +14089,7 @@ yynewstate: NewColumns: []*ast.ColumnDef{colDef}, } } - case 116: + case 117: { colDef := &ast.ColumnDef{ Name: yyS[yypt-2].item.(*ast.ColumnName), @@ -14028,7 +14099,7 @@ yynewstate: NewColumns: []*ast.ColumnDef{colDef}, } } - case 117: + case 118: { oldColName := &ast.ColumnName{Name: model.NewCIStr(yyS[yypt-2].ident)} newColName := &ast.ColumnName{Name: model.NewCIStr(yyS[yypt-0].ident)} @@ -14038,28 +14109,28 @@ yynewstate: NewColumnName: newColName, } } - case 118: + case 119: { parser.yyVAL.item = &ast.AlterTableSpec{ Tp: ast.AlterTableRenameTable, NewTable: yyS[yypt-0].item.(*ast.TableName), } } - case 119: + case 120: { parser.yyVAL.item = &ast.AlterTableSpec{ Tp: ast.AlterTableRenameTable, NewTable: yyS[yypt-0].item.(*ast.TableName), } } - case 120: + case 121: { parser.yyVAL.item = &ast.AlterTableSpec{ Tp: ast.AlterTableRenameTable, NewTable: yyS[yypt-0].item.(*ast.TableName), } } - case 121: + case 122: { parser.yyVAL.item = &ast.AlterTableSpec{ Tp: ast.AlterTableRenameIndex, @@ -14067,21 +14138,21 @@ yynewstate: ToKey: model.NewCIStr(yyS[yypt-0].ident), } } - case 122: + case 123: { parser.yyVAL.item = &ast.AlterTableSpec{ Tp: ast.AlterTableLock, LockType: yyS[yypt-0].item.(ast.LockType), } } - case 123: + case 124: { parser.yyVAL.item = &ast.AlterTableSpec{ Tp: ast.AlterTableWriteable, Writeable: yyS[yypt-0].item.(bool), } } - case 124: + case 125: { // Parse it and ignore it. Just for compatibility. parser.yyVAL.item = &ast.AlterTableSpec{ @@ -14089,28 +14160,28 @@ yynewstate: Algorithm: yyS[yypt-0].item.(ast.AlgorithmType), } } - case 125: + case 126: { // Parse it and ignore it. Just for compatibility. parser.yyVAL.item = &ast.AlterTableSpec{ Tp: ast.AlterTableForce, } } - case 126: + case 127: { // Parse it and ignore it. Just for compatibility. parser.yyVAL.item = &ast.AlterTableSpec{ Tp: ast.AlterTableWithValidation, } } - case 127: + case 128: { // Parse it and ignore it. Just for compatibility. parser.yyVAL.item = &ast.AlterTableSpec{ Tp: ast.AlterTableWithoutValidation, } } - case 128: + case 129: { // Parse it and ignore it. Just for compatibility. parser.yyVAL.item = &ast.AlterTableSpec{ @@ -14119,7 +14190,7 @@ yynewstate: yylex.AppendError(yylex.Errorf("The SECONDARY_LOAD clause is parsed but not implement yet.")) parser.lastErrorAsWarn() } - case 129: + case 130: { // Parse it and ignore it. Just for compatibility. parser.yyVAL.item = &ast.AlterTableSpec{ @@ -14128,7 +14199,7 @@ yynewstate: yylex.AppendError(yylex.Errorf("The SECONDARY_UNLOAD VALIDATION clause is parsed but not implement yet.")) parser.lastErrorAsWarn() } - case 130: + case 131: { c := &ast.Constraint{ Name: yyS[yypt-1].ident, @@ -14139,7 +14210,7 @@ yynewstate: Constraint: c, } } - case 131: + case 132: { // Parse it and ignore it. Just for compatibility. c := &ast.Constraint{ @@ -14150,7 +14221,7 @@ yynewstate: Constraint: c, } } - case 132: + case 133: { parser.yyVAL.item = &ast.AlterTableSpec{ Tp: ast.AlterTableIndexInvisible, @@ -14158,19 +14229,19 @@ yynewstate: Visibility: yyS[yypt-0].item.(ast.IndexVisibility), } } - case 133: + case 134: { parser.yyVAL.item = &ast.AlterTableSpec{ Tp: ast.AlterTableCache, } } - case 134: + case 135: { parser.yyVAL.item = &ast.AlterTableSpec{ Tp: ast.AlterTableNoCache, } } - case 135: + case 136: { ret := &ast.AlterTableSpec{ Tp: ast.AlterTableReorganizePartition, @@ -14178,7 +14249,7 @@ yynewstate: } parser.yyVAL.item = ret } - case 136: + case 137: { ret := &ast.AlterTableSpec{ Tp: ast.AlterTableReorganizePartition, @@ -14187,56 +14258,68 @@ yynewstate: } parser.yyVAL.item = ret } - case 137: + case 138: { parser.yyVAL.item = nil } - case 139: + case 140: { parser.yyVAL.item = true } - case 141: + case 142: { parser.yyVAL.item = true } - case 142: + case 143: { parser.yyVAL.item = false } - case 143: + case 144: { parser.yyVAL.item = model.PrimaryKeyTypeClustered } - case 144: + case 145: { parser.yyVAL.item = model.PrimaryKeyTypeNonClustered } - case 145: + case 146: + { + parser.yyVAL.ident = "" + } + case 147: + { + parser.yyVAL.ident = "" + } + case 148: + { + parser.yyVAL.ident = "Global" + } + case 149: { parser.yyVAL.item = ast.AlgorithmTypeDefault } - case 146: + case 150: { parser.yyVAL.item = ast.AlgorithmTypeCopy } - case 147: + case 151: { parser.yyVAL.item = ast.AlgorithmTypeInplace } - case 148: + case 152: { parser.yyVAL.item = ast.AlgorithmTypeInstant } - case 149: + case 153: { yylex.AppendError(ErrUnknownAlterAlgorithm.GenWithStackByArgs(yyS[yypt-2].ident)) return 1 } - case 150: + case 154: { parser.yyVAL.item = ast.LockTypeDefault } - case 151: + case 155: { id := strings.ToUpper(yyS[yypt-0].ident) @@ -14251,130 +14334,130 @@ yynewstate: return 1 } } - case 152: + case 156: { parser.yyVAL.item = true } - case 153: + case 157: { parser.yyVAL.item = false } - case 160: + case 164: { parser.yyVAL.item = &ast.ColumnPosition{Tp: ast.ColumnPositionNone} } - case 161: + case 165: { parser.yyVAL.item = &ast.ColumnPosition{Tp: ast.ColumnPositionFirst} } - case 162: + case 166: { parser.yyVAL.item = &ast.ColumnPosition{ Tp: ast.ColumnPositionAfter, RelativeColumn: yyS[yypt-0].item.(*ast.ColumnName), } } - case 163: + case 167: { parser.yyVAL.item = make([]*ast.AlterTableSpec, 0, 1) } - case 165: + case 169: { parser.yyVAL.item = []*ast.AlterTableSpec{yyS[yypt-0].item.(*ast.AlterTableSpec)} } - case 166: + case 170: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.AlterTableSpec), yyS[yypt-0].item.(*ast.AlterTableSpec)) } - case 167: + case 171: { parser.yyVAL.item = []model.CIStr{model.NewCIStr(yyS[yypt-0].ident)} } - case 168: + case 172: { parser.yyVAL.item = append(yyS[yypt-2].item.([]model.CIStr), model.NewCIStr(yyS[yypt-0].ident)) } - case 169: + case 173: { parser.yyVAL.item = nil } - case 170: + case 174: { parser.yyVAL.item = nil } - case 171: + case 175: { parser.yyVAL.item = yyS[yypt-0].ident } - case 173: + case 177: { parser.yyVAL.statement = &ast.RenameTableStmt{ TableToTables: yyS[yypt-0].item.([]*ast.TableToTable), } } - case 174: + case 178: { parser.yyVAL.item = []*ast.TableToTable{yyS[yypt-0].item.(*ast.TableToTable)} } - case 175: + case 179: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.TableToTable), yyS[yypt-0].item.(*ast.TableToTable)) } - case 176: + case 180: { parser.yyVAL.item = &ast.TableToTable{ OldTable: yyS[yypt-2].item.(*ast.TableName), NewTable: yyS[yypt-0].item.(*ast.TableName), } } - case 177: + case 181: { parser.yyVAL.statement = &ast.RenameUserStmt{ UserToUsers: yyS[yypt-0].item.([]*ast.UserToUser), } } - case 178: + case 182: { parser.yyVAL.item = []*ast.UserToUser{yyS[yypt-0].item.(*ast.UserToUser)} } - case 179: + case 183: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.UserToUser), yyS[yypt-0].item.(*ast.UserToUser)) } - case 180: + case 184: { parser.yyVAL.item = &ast.UserToUser{ OldUser: yyS[yypt-2].item.(*auth.UserIdentity), NewUser: yyS[yypt-0].item.(*auth.UserIdentity), } } - case 181: + case 185: { parser.yyVAL.statement = &ast.RecoverTableStmt{ JobID: yyS[yypt-0].item.(int64), } } - case 182: + case 186: { parser.yyVAL.statement = &ast.RecoverTableStmt{ Table: yyS[yypt-0].item.(*ast.TableName), } } - case 183: + case 187: { parser.yyVAL.statement = &ast.RecoverTableStmt{ Table: yyS[yypt-1].item.(*ast.TableName), JobNum: yyS[yypt-0].item.(int64), } } - case 184: + case 188: { parser.yyVAL.statement = &ast.FlashBackToTimestampStmt{ FlashbackTS: ast.NewValueExpr(yyS[yypt-0].ident, "", ""), FlashbackTSO: 0, } } - case 185: + case 189: { parser.yyVAL.statement = &ast.FlashBackToTimestampStmt{ Tables: yyS[yypt-2].item.([]*ast.TableName), @@ -14382,7 +14465,7 @@ yynewstate: FlashbackTSO: 0, } } - case 186: + case 190: { parser.yyVAL.statement = &ast.FlashBackToTimestampStmt{ DBName: model.NewCIStr(yyS[yypt-2].ident), @@ -14390,7 +14473,7 @@ yynewstate: FlashbackTSO: 0, } } - case 187: + case 191: { if tsoValue, ok := yyS[yypt-0].item.(uint64); ok && tsoValue > 0 { parser.yyVAL.statement = &ast.FlashBackToTimestampStmt{ @@ -14401,7 +14484,7 @@ yynewstate: return 1 } } - case 188: + case 192: { if tsoValue, ok := yyS[yypt-0].item.(uint64); ok && tsoValue > 0 { parser.yyVAL.statement = &ast.FlashBackToTimestampStmt{ @@ -14413,7 +14496,7 @@ yynewstate: return 1 } } - case 189: + case 193: { if tsoValue, ok := yyS[yypt-0].item.(uint64); ok && tsoValue > 0 { parser.yyVAL.statement = &ast.FlashBackToTimestampStmt{ @@ -14425,29 +14508,29 @@ yynewstate: return 1 } } - case 190: + case 194: { parser.yyVAL.statement = &ast.FlashBackTableStmt{ Table: yyS[yypt-1].item.(*ast.TableName), NewName: yyS[yypt-0].ident, } } - case 191: + case 195: { parser.yyVAL.ident = "" } - case 192: + case 196: { parser.yyVAL.ident = yyS[yypt-0].ident } - case 193: + case 197: { parser.yyVAL.statement = &ast.FlashBackDatabaseStmt{ DBName: model.NewCIStr(yyS[yypt-1].ident), NewName: yyS[yypt-0].ident, } } - case 194: + case 198: { parser.yyVAL.statement = &ast.SplitRegionStmt{ SplitSyntaxOpt: yyS[yypt-4].item.(*ast.SplitSyntaxOption), @@ -14456,7 +14539,7 @@ yynewstate: SplitOpt: yyS[yypt-0].item.(*ast.SplitOption), } } - case 195: + case 199: { parser.yyVAL.statement = &ast.SplitRegionStmt{ SplitSyntaxOpt: yyS[yypt-6].item.(*ast.SplitSyntaxOption), @@ -14466,7 +14549,7 @@ yynewstate: SplitOpt: yyS[yypt-0].item.(*ast.SplitOption), } } - case 196: + case 200: { parser.yyVAL.item = &ast.SplitOption{ Lower: yyS[yypt-4].item.([]ast.ExprNode), @@ -14474,52 +14557,52 @@ yynewstate: Num: yyS[yypt-0].item.(int64), } } - case 197: + case 201: { parser.yyVAL.item = &ast.SplitOption{ ValueLists: yyS[yypt-0].item.([][]ast.ExprNode), } } - case 198: + case 202: { parser.yyVAL.item = &ast.SplitSyntaxOption{} } - case 199: + case 203: { parser.yyVAL.item = &ast.SplitSyntaxOption{ HasRegionFor: true, } } - case 200: + case 204: { parser.yyVAL.item = &ast.SplitSyntaxOption{ HasPartition: true, } } - case 201: + case 205: { parser.yyVAL.item = &ast.SplitSyntaxOption{ HasRegionFor: true, HasPartition: true, } } - case 202: + case 206: { parser.yyVAL.statement = &ast.AnalyzeTableStmt{TableNames: yyS[yypt-2].item.([]*ast.TableName), NoWriteToBinLog: yyS[yypt-4].item.(bool), ColumnChoice: yyS[yypt-1].item.(model.ColumnChoice), AnalyzeOpts: yyS[yypt-0].item.([]ast.AnalyzeOpt)} } - case 203: + case 207: { parser.yyVAL.statement = &ast.AnalyzeTableStmt{TableNames: []*ast.TableName{yyS[yypt-3].item.(*ast.TableName)}, NoWriteToBinLog: yyS[yypt-5].item.(bool), IndexNames: yyS[yypt-1].item.([]model.CIStr), IndexFlag: true, AnalyzeOpts: yyS[yypt-0].item.([]ast.AnalyzeOpt)} } - case 204: + case 208: { parser.yyVAL.statement = &ast.AnalyzeTableStmt{TableNames: []*ast.TableName{yyS[yypt-3].item.(*ast.TableName)}, NoWriteToBinLog: yyS[yypt-6].item.(bool), IndexNames: yyS[yypt-1].item.([]model.CIStr), IndexFlag: true, Incremental: true, AnalyzeOpts: yyS[yypt-0].item.([]ast.AnalyzeOpt)} } - case 205: + case 209: { parser.yyVAL.statement = &ast.AnalyzeTableStmt{TableNames: []*ast.TableName{yyS[yypt-4].item.(*ast.TableName)}, NoWriteToBinLog: yyS[yypt-6].item.(bool), PartitionNames: yyS[yypt-2].item.([]model.CIStr), ColumnChoice: yyS[yypt-1].item.(model.ColumnChoice), AnalyzeOpts: yyS[yypt-0].item.([]ast.AnalyzeOpt)} } - case 206: + case 210: { parser.yyVAL.statement = &ast.AnalyzeTableStmt{ TableNames: []*ast.TableName{yyS[yypt-5].item.(*ast.TableName)}, @@ -14530,7 +14613,7 @@ yynewstate: AnalyzeOpts: yyS[yypt-0].item.([]ast.AnalyzeOpt), } } - case 207: + case 211: { parser.yyVAL.statement = &ast.AnalyzeTableStmt{ TableNames: []*ast.TableName{yyS[yypt-5].item.(*ast.TableName)}, @@ -14542,7 +14625,7 @@ yynewstate: AnalyzeOpts: yyS[yypt-0].item.([]ast.AnalyzeOpt), } } - case 208: + case 212: { parser.yyVAL.statement = &ast.AnalyzeTableStmt{ TableNames: []*ast.TableName{yyS[yypt-5].item.(*ast.TableName)}, @@ -14552,7 +14635,7 @@ yynewstate: HistogramOperation: ast.HistogramOperationUpdate, } } - case 209: + case 213: { parser.yyVAL.statement = &ast.AnalyzeTableStmt{ TableNames: []*ast.TableName{yyS[yypt-4].item.(*ast.TableName)}, @@ -14561,7 +14644,7 @@ yynewstate: HistogramOperation: ast.HistogramOperationDrop, } } - case 210: + case 214: { parser.yyVAL.statement = &ast.AnalyzeTableStmt{ TableNames: []*ast.TableName{yyS[yypt-3].item.(*ast.TableName)}, @@ -14570,7 +14653,7 @@ yynewstate: ColumnChoice: model.ColumnList, AnalyzeOpts: yyS[yypt-0].item.([]ast.AnalyzeOpt)} } - case 211: + case 215: { parser.yyVAL.statement = &ast.AnalyzeTableStmt{ TableNames: []*ast.TableName{yyS[yypt-5].item.(*ast.TableName)}, @@ -14580,122 +14663,122 @@ yynewstate: ColumnChoice: model.ColumnList, AnalyzeOpts: yyS[yypt-0].item.([]ast.AnalyzeOpt)} } - case 212: + case 216: { parser.yyVAL.item = model.DefaultChoice } - case 213: + case 217: { parser.yyVAL.item = model.AllColumns } - case 214: + case 218: { parser.yyVAL.item = model.PredicateColumns } - case 215: + case 219: { parser.yyVAL.item = []ast.AnalyzeOpt{} } - case 216: + case 220: { parser.yyVAL.item = yyS[yypt-0].item.([]ast.AnalyzeOpt) } - case 217: + case 221: { parser.yyVAL.item = []ast.AnalyzeOpt{yyS[yypt-0].item.(ast.AnalyzeOpt)} } - case 218: + case 222: { parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.AnalyzeOpt), yyS[yypt-0].item.(ast.AnalyzeOpt)) } - case 219: + case 223: { parser.yyVAL.item = ast.AnalyzeOpt{Type: ast.AnalyzeOptNumBuckets, Value: ast.NewValueExpr(yyS[yypt-1].item, "", "")} } - case 220: + case 224: { parser.yyVAL.item = ast.AnalyzeOpt{Type: ast.AnalyzeOptNumTopN, Value: ast.NewValueExpr(yyS[yypt-1].item, "", "")} } - case 221: + case 225: { parser.yyVAL.item = ast.AnalyzeOpt{Type: ast.AnalyzeOptCMSketchDepth, Value: ast.NewValueExpr(yyS[yypt-2].item, "", "")} } - case 222: + case 226: { parser.yyVAL.item = ast.AnalyzeOpt{Type: ast.AnalyzeOptCMSketchWidth, Value: ast.NewValueExpr(yyS[yypt-2].item, "", "")} } - case 223: + case 227: { parser.yyVAL.item = ast.AnalyzeOpt{Type: ast.AnalyzeOptNumSamples, Value: ast.NewValueExpr(yyS[yypt-1].item, "", "")} } - case 224: + case 228: { parser.yyVAL.item = ast.AnalyzeOpt{Type: ast.AnalyzeOptSampleRate, Value: ast.NewValueExpr(yyS[yypt-1].item, "", "")} } - case 225: + case 229: { parser.yyVAL.item = &ast.Assignment{Column: yyS[yypt-2].item.(*ast.ColumnName), Expr: yyS[yypt-0].expr} } - case 226: + case 230: { parser.yyVAL.item = []*ast.Assignment{yyS[yypt-0].item.(*ast.Assignment)} } - case 227: + case 231: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.Assignment), yyS[yypt-0].item.(*ast.Assignment)) } - case 228: + case 232: { parser.yyVAL.statement = &ast.BeginStmt{} } - case 229: + case 233: { parser.yyVAL.statement = &ast.BeginStmt{ Mode: ast.Pessimistic, } } - case 230: + case 234: { parser.yyVAL.statement = &ast.BeginStmt{ Mode: ast.Optimistic, } } - case 231: + case 235: { parser.yyVAL.statement = &ast.BeginStmt{} } - case 232: + case 236: { parser.yyVAL.statement = &ast.BeginStmt{} } - case 233: + case 237: { parser.yyVAL.statement = &ast.BeginStmt{} } - case 234: + case 238: { parser.yyVAL.statement = &ast.BeginStmt{ CausalConsistencyOnly: true, } } - case 235: + case 239: { parser.yyVAL.statement = &ast.BeginStmt{ ReadOnly: true, } } - case 236: + case 240: { parser.yyVAL.statement = &ast.BeginStmt{ ReadOnly: true, AsOf: yyS[yypt-0].item.(*ast.AsOfClause), } } - case 237: + case 241: { parser.yyVAL.statement = &ast.BinlogStmt{Str: yyS[yypt-0].ident} } - case 238: + case 242: { colDef := &ast.ColumnDef{Name: yyS[yypt-2].item.(*ast.ColumnName), Tp: yyS[yypt-1].item.(*types.FieldType), Options: yyS[yypt-0].item.([]*ast.ColumnOption)} if err := colDef.Validate(); err != nil { @@ -14704,7 +14787,7 @@ yynewstate: } parser.yyVAL.item = colDef } - case 239: + case 243: { // TODO: check flen 0 tp := types.NewFieldType(mysql.TypeLonglong) @@ -14718,103 +14801,103 @@ yynewstate: } parser.yyVAL.item = colDef } - case 240: + case 244: { parser.yyVAL.item = &ast.ColumnName{Name: model.NewCIStr(yyS[yypt-0].ident)} } - case 241: + case 245: { parser.yyVAL.item = &ast.ColumnName{Table: model.NewCIStr(yyS[yypt-2].ident), Name: model.NewCIStr(yyS[yypt-0].ident)} } - case 242: + case 246: { parser.yyVAL.item = &ast.ColumnName{Schema: model.NewCIStr(yyS[yypt-4].ident), Table: model.NewCIStr(yyS[yypt-2].ident), Name: model.NewCIStr(yyS[yypt-0].ident)} } - case 243: + case 247: { parser.yyVAL.item = []*ast.ColumnName{yyS[yypt-0].item.(*ast.ColumnName)} } - case 244: + case 248: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.ColumnName), yyS[yypt-0].item.(*ast.ColumnName)) } - case 245: + case 249: { parser.yyVAL.item = []*ast.ColumnName{} } - case 247: + case 251: { parser.yyVAL.item = []model.CIStr{} } - case 248: + case 252: { parser.yyVAL.item = yyS[yypt-1].item } - case 249: + case 253: { parser.yyVAL.item = []model.CIStr{model.NewCIStr(yyS[yypt-0].ident)} } - case 250: + case 254: { parser.yyVAL.item = append(yyS[yypt-2].item.([]model.CIStr), model.NewCIStr(yyS[yypt-0].ident)) } - case 251: + case 255: { parser.yyVAL.item = []*ast.ColumnNameOrUserVar{} } - case 253: + case 257: { parser.yyVAL.item = []*ast.ColumnNameOrUserVar{yyS[yypt-0].item.(*ast.ColumnNameOrUserVar)} } - case 254: + case 258: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.ColumnNameOrUserVar), yyS[yypt-0].item.(*ast.ColumnNameOrUserVar)) } - case 255: + case 259: { parser.yyVAL.item = &ast.ColumnNameOrUserVar{ColumnName: yyS[yypt-0].item.(*ast.ColumnName)} } - case 256: + case 260: { parser.yyVAL.item = &ast.ColumnNameOrUserVar{UserVar: yyS[yypt-0].expr.(*ast.VariableExpr)} } - case 257: + case 261: { parser.yyVAL.item = []*ast.ColumnNameOrUserVar{} } - case 258: + case 262: { parser.yyVAL.item = yyS[yypt-1].item.([]*ast.ColumnNameOrUserVar) } - case 259: + case 263: { parser.yyVAL.statement = &ast.CommitStmt{} } - case 260: + case 264: { parser.yyVAL.statement = &ast.CommitStmt{CompletionType: yyS[yypt-0].item.(ast.CompletionType)} } - case 264: + case 268: { parser.yyVAL.ident = "NOT" } - case 265: + case 269: { parser.yyVAL.item = true } - case 266: + case 270: { parser.yyVAL.item = false } - case 267: + case 271: { parser.yyVAL.item = true } - case 269: + case 273: { parser.yyVAL.item = 0 } - case 270: + case 274: { if yyS[yypt-0].item.(bool) { parser.yyVAL.item = 1 @@ -14822,57 +14905,65 @@ yynewstate: parser.yyVAL.item = 2 } } - case 271: + case 275: { parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionNotNull} } - case 272: + case 276: { parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionNull} } - case 273: + case 277: { parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionAutoIncrement} } - case 274: + case 278: { // KEY is normally a synonym for INDEX. The key attribute PRIMARY KEY // can also be specified as just KEY when given in a column definition. // See http://dev.mysql.com/doc/refman/5.7/en/create-table.html - parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionPrimaryKey} + parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionPrimaryKey, StrValue: yyS[yypt-0].ident} } - case 275: + case 279: { // KEY is normally a synonym for INDEX. The key attribute PRIMARY KEY // can also be specified as just KEY when given in a column definition. // See http://dev.mysql.com/doc/refman/5.7/en/create-table.html - parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionPrimaryKey, PrimaryKeyTp: yyS[yypt-0].item.(model.PrimaryKeyType)} + parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionPrimaryKey, PrimaryKeyTp: yyS[yypt-1].item.(model.PrimaryKeyType), StrValue: yyS[yypt-0].ident} } - case 276: + case 280: + { + parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionUniqKey, StrValue: "Global"} + } + case 281: { parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionUniqKey} } - case 277: + case 282: { parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionUniqKey} } - case 278: + case 283: + { + parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionUniqKey, StrValue: yyS[yypt-0].ident} + } + case 284: { parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionDefaultValue, Expr: yyS[yypt-0].expr} } - case 279: + case 285: { parser.yyVAL.item = []*ast.ColumnOption{{Tp: ast.ColumnOptionNotNull}, {Tp: ast.ColumnOptionAutoIncrement}, {Tp: ast.ColumnOptionUniqKey}} } - case 280: + case 286: { parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionOnUpdate, Expr: yyS[yypt-0].expr} } - case 281: + case 287: { parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionComment, Expr: ast.NewValueExpr(yyS[yypt-0].ident, "", "")} } - case 282: + case 288: { // See https://dev.mysql.com/doc/refman/5.7/en/create-table.html // The CHECK clause is parsed but ignored by all storage engines. @@ -14899,7 +14990,7 @@ yynewstate: default: } } - case 283: + case 289: { startOffset := parser.startOffset(&yyS[yypt-2]) endOffset := parser.endOffset(&yyS[yypt-1]) @@ -14912,68 +15003,68 @@ yynewstate: Stored: yyS[yypt-0].item.(bool), } } - case 284: + case 290: { parser.yyVAL.item = &ast.ColumnOption{ Tp: ast.ColumnOptionReference, Refer: yyS[yypt-0].item.(*ast.ReferenceDef), } } - case 285: + case 291: { parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionCollate, StrValue: yyS[yypt-0].ident} } - case 286: + case 292: { parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionColumnFormat, StrValue: yyS[yypt-0].ident} } - case 287: + case 293: { parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionStorage, StrValue: yyS[yypt-0].ident} yylex.AppendError(yylex.Errorf("The STORAGE clause is parsed but ignored by all storage engines.")) parser.lastErrorAsWarn() } - case 288: + case 294: { parser.yyVAL.item = &ast.ColumnOption{Tp: ast.ColumnOptionAutoRandom, AutoRandOpt: yyS[yypt-0].item.(ast.AutoRandomOption)} } - case 289: + case 295: { parser.yyVAL.item = ast.AutoRandomOption{ShardBits: types.UnspecifiedLength, RangeBits: types.UnspecifiedLength} } - case 290: + case 296: { parser.yyVAL.item = ast.AutoRandomOption{ShardBits: int(yyS[yypt-1].item.(uint64)), RangeBits: types.UnspecifiedLength} } - case 291: + case 297: { parser.yyVAL.item = ast.AutoRandomOption{ShardBits: int(yyS[yypt-3].item.(uint64)), RangeBits: int(yyS[yypt-1].item.(uint64))} } - case 295: + case 301: { parser.yyVAL.ident = "DEFAULT" } - case 296: + case 302: { parser.yyVAL.ident = "FIXED" } - case 297: + case 303: { parser.yyVAL.ident = "DYNAMIC" } - case 300: + case 306: { parser.yyVAL.item = false } - case 301: + case 307: { parser.yyVAL.item = false } - case 302: + case 308: { parser.yyVAL.item = true } - case 303: + case 309: { if columnOption, ok := yyS[yypt-0].item.(*ast.ColumnOption); ok { parser.yyVAL.item = []*ast.ColumnOption{columnOption} @@ -14981,7 +15072,7 @@ yynewstate: parser.yyVAL.item = yyS[yypt-0].item } } - case 304: + case 310: { if columnOption, ok := yyS[yypt-0].item.(*ast.ColumnOption); ok { parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.ColumnOption), columnOption) @@ -14989,11 +15080,11 @@ yynewstate: parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.ColumnOption), yyS[yypt-0].item.([]*ast.ColumnOption)...) } } - case 305: + case 311: { parser.yyVAL.item = []*ast.ColumnOption{} } - case 307: + case 313: { c := &ast.Constraint{ Tp: ast.ConstraintPrimaryKey, @@ -15012,7 +15103,7 @@ yynewstate: } parser.yyVAL.item = c } - case 308: + case 314: { c := &ast.Constraint{ Tp: ast.ConstraintFulltext, @@ -15025,7 +15116,7 @@ yynewstate: } parser.yyVAL.item = c } - case 309: + case 315: { c := &ast.Constraint{ IfNotExists: yyS[yypt-5].item.(bool), @@ -15045,7 +15136,7 @@ yynewstate: } parser.yyVAL.item = c } - case 310: + case 316: { c := &ast.Constraint{ Tp: ast.ConstraintUniq, @@ -15065,7 +15156,7 @@ yynewstate: } parser.yyVAL.item = c } - case 311: + case 317: { parser.yyVAL.item = &ast.Constraint{ IfNotExists: yyS[yypt-5].item.(bool), @@ -15076,7 +15167,7 @@ yynewstate: IsEmptyIndex: yyS[yypt-4].item.(*ast.NullString).Empty, } } - case 312: + case 318: { parser.yyVAL.item = &ast.Constraint{ Tp: ast.ConstraintCheck, @@ -15084,29 +15175,29 @@ yynewstate: Enforced: yyS[yypt-0].item.(bool), } } - case 313: + case 319: { parser.yyVAL.item = ast.MatchFull } - case 314: + case 320: { parser.yyVAL.item = ast.MatchPartial } - case 315: + case 321: { parser.yyVAL.item = ast.MatchSimple } - case 316: + case 322: { parser.yyVAL.item = ast.MatchNone } - case 317: + case 323: { parser.yyVAL.item = yyS[yypt-0].item yylex.AppendError(yylex.Errorf("The MATCH clause is parsed but ignored by all storage engines.")) parser.lastErrorAsWarn() } - case 318: + case 324: { onDeleteUpdate := yyS[yypt-0].item.([2]interface{}) parser.yyVAL.item = &ast.ReferenceDef{ @@ -15117,109 +15208,109 @@ yynewstate: Match: yyS[yypt-1].item.(ast.MatchType), } } - case 319: + case 325: { parser.yyVAL.item = &ast.OnDeleteOpt{ReferOpt: yyS[yypt-0].item.(model.ReferOptionType)} } - case 320: + case 326: { parser.yyVAL.item = &ast.OnUpdateOpt{ReferOpt: yyS[yypt-0].item.(model.ReferOptionType)} } - case 321: + case 327: { parser.yyVAL.item = [2]interface{}{&ast.OnDeleteOpt{}, &ast.OnUpdateOpt{}} } - case 322: + case 328: { parser.yyVAL.item = [2]interface{}{yyS[yypt-0].item, &ast.OnUpdateOpt{}} } - case 323: + case 329: { parser.yyVAL.item = [2]interface{}{&ast.OnDeleteOpt{}, yyS[yypt-0].item} } - case 324: + case 330: { parser.yyVAL.item = [2]interface{}{yyS[yypt-1].item, yyS[yypt-0].item} } - case 325: + case 331: { parser.yyVAL.item = [2]interface{}{yyS[yypt-0].item, yyS[yypt-1].item} } - case 326: + case 332: { parser.yyVAL.item = model.ReferOptionRestrict } - case 327: + case 333: { parser.yyVAL.item = model.ReferOptionCascade } - case 328: + case 334: { parser.yyVAL.item = model.ReferOptionSetNull } - case 329: + case 335: { parser.yyVAL.item = model.ReferOptionNoAction } - case 330: + case 336: { parser.yyVAL.item = model.ReferOptionSetDefault yylex.AppendError(yylex.Errorf("The SET DEFAULT clause is parsed but ignored by all storage engines.")) parser.lastErrorAsWarn() } - case 335: + case 341: { parser.yyVAL.expr = yyS[yypt-1].expr.(*ast.FuncCallExpr) } - case 336: + case 342: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-2].ident), } } - case 337: + case 343: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-3].ident), Args: yyS[yypt-1].item.([]ast.ExprNode), } } - case 338: + case 344: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-3].ident), Args: yyS[yypt-1].item.([]ast.ExprNode), } } - case 339: + case 345: { parser.yyVAL.expr = yyS[yypt-1].expr.(*ast.FuncCallExpr) } - case 341: + case 347: { parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr("CURRENT_TIMESTAMP")} } - case 342: + case 348: { parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr("CURRENT_TIMESTAMP")} } - case 343: + case 349: { parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr("CURRENT_TIMESTAMP"), Args: []ast.ExprNode{ast.NewValueExpr(yyS[yypt-1].item, parser.charset, parser.collation)}} } - case 344: + case 350: { parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr("CURRENT_DATE")} } - case 345: + case 351: { parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr("CURRENT_DATE")} } - case 346: + case 352: { parser.yyVAL.expr = yyS[yypt-1].expr.(*ast.FuncCallExpr) } - case 348: + case 354: { objNameExpr := &ast.TableNameExpr{ Name: yyS[yypt-0].item.(*ast.TableName), @@ -15229,7 +15320,7 @@ yynewstate: Args: []ast.ExprNode{objNameExpr}, } } - case 349: + case 355: { objNameExpr := &ast.TableNameExpr{ Name: yyS[yypt-1].item.(*ast.TableName), @@ -15239,39 +15330,39 @@ yynewstate: Args: []ast.ExprNode{objNameExpr}, } } - case 359: + case 365: { parser.yyVAL.expr = ast.NewValueExpr(yyS[yypt-0].expr, parser.charset, parser.collation) } - case 360: + case 366: { parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.Plus, V: ast.NewValueExpr(yyS[yypt-0].item, parser.charset, parser.collation)} } - case 361: + case 367: { parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.Minus, V: ast.NewValueExpr(yyS[yypt-0].item, parser.charset, parser.collation)} } - case 365: + case 371: { parser.yyVAL.item = ast.StatsTypeCardinality } - case 366: + case 372: { parser.yyVAL.item = ast.StatsTypeDependency } - case 367: + case 373: { parser.yyVAL.item = ast.StatsTypeCorrelation } - case 368: + case 374: { parser.yyVAL.item = ast.BindingStatusTypeEnabled } - case 369: + case 375: { parser.yyVAL.item = ast.BindingStatusTypeDisabled } - case 370: + case 376: { parser.yyVAL.statement = &ast.CreateStatisticsStmt{ IfNotExists: yyS[yypt-9].item.(bool), @@ -15281,11 +15372,11 @@ yynewstate: Columns: yyS[yypt-1].item.([]*ast.ColumnName), } } - case 371: + case 377: { parser.yyVAL.statement = &ast.DropStatisticsStmt{StatsName: yyS[yypt-0].ident} } - case 372: + case 378: { var indexOption *ast.IndexOption if yyS[yypt-1].item != nil { @@ -15318,79 +15409,79 @@ yynewstate: LockAlg: indexLockAndAlgorithm, } } - case 373: + case 379: { parser.yyVAL.item = ([]*ast.IndexPartSpecification)(nil) } - case 374: + case 380: { parser.yyVAL.item = yyS[yypt-1].item } - case 375: + case 381: { parser.yyVAL.item = []*ast.IndexPartSpecification{yyS[yypt-0].item.(*ast.IndexPartSpecification)} } - case 376: + case 382: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.IndexPartSpecification), yyS[yypt-0].item.(*ast.IndexPartSpecification)) } - case 377: + case 383: { parser.yyVAL.item = &ast.IndexPartSpecification{Column: yyS[yypt-2].item.(*ast.ColumnName), Length: yyS[yypt-1].item.(int), Desc: yyS[yypt-0].item.(bool)} } - case 378: + case 384: { parser.yyVAL.item = &ast.IndexPartSpecification{Expr: yyS[yypt-2].expr, Desc: yyS[yypt-0].item.(bool)} } - case 379: + case 385: { parser.yyVAL.item = nil } - case 380: + case 386: { parser.yyVAL.item = &ast.IndexLockAndAlgorithm{ LockTp: yyS[yypt-0].item.(ast.LockType), AlgorithmTp: ast.AlgorithmTypeDefault, } } - case 381: + case 387: { parser.yyVAL.item = &ast.IndexLockAndAlgorithm{ LockTp: ast.LockTypeDefault, AlgorithmTp: yyS[yypt-0].item.(ast.AlgorithmType), } } - case 382: + case 388: { parser.yyVAL.item = &ast.IndexLockAndAlgorithm{ LockTp: yyS[yypt-1].item.(ast.LockType), AlgorithmTp: yyS[yypt-0].item.(ast.AlgorithmType), } } - case 383: + case 389: { parser.yyVAL.item = &ast.IndexLockAndAlgorithm{ LockTp: yyS[yypt-0].item.(ast.LockType), AlgorithmTp: yyS[yypt-1].item.(ast.AlgorithmType), } } - case 384: + case 390: { parser.yyVAL.item = ast.IndexKeyTypeNone } - case 385: + case 391: { parser.yyVAL.item = ast.IndexKeyTypeUnique } - case 386: + case 392: { parser.yyVAL.item = ast.IndexKeyTypeSpatial } - case 387: + case 393: { parser.yyVAL.item = ast.IndexKeyTypeFullText } - case 388: + case 394: { parser.yyVAL.statement = &ast.AlterDatabaseStmt{ Name: model.NewCIStr(yyS[yypt-1].ident), @@ -15398,7 +15489,7 @@ yynewstate: Options: yyS[yypt-0].item.([]*ast.DatabaseOption), } } - case 389: + case 395: { parser.yyVAL.statement = &ast.AlterDatabaseStmt{ Name: model.NewCIStr(""), @@ -15406,7 +15497,7 @@ yynewstate: Options: yyS[yypt-0].item.([]*ast.DatabaseOption), } } - case 390: + case 396: { parser.yyVAL.statement = &ast.CreateDatabaseStmt{ IfNotExists: yyS[yypt-2].item.(bool), @@ -15414,19 +15505,19 @@ yynewstate: Options: yyS[yypt-0].item.([]*ast.DatabaseOption), } } - case 395: + case 401: { parser.yyVAL.item = &ast.DatabaseOption{Tp: ast.DatabaseOptionCharset, Value: yyS[yypt-0].ident} } - case 396: + case 402: { parser.yyVAL.item = &ast.DatabaseOption{Tp: ast.DatabaseOptionCollate, Value: yyS[yypt-0].ident} } - case 397: + case 403: { parser.yyVAL.item = &ast.DatabaseOption{Tp: ast.DatabaseOptionEncryption, Value: yyS[yypt-0].ident} } - case 398: + case 404: { placementOptions := yyS[yypt-0].item.(*ast.PlacementOption) parser.yyVAL.item = &ast.DatabaseOption{ @@ -15436,7 +15527,7 @@ yynewstate: UintValue: placementOptions.UintValue, } } - case 399: + case 405: { placementOptions := yyS[yypt-0].item.(*ast.PlacementOption) parser.yyVAL.item = &ast.DatabaseOption{ @@ -15446,7 +15537,7 @@ yynewstate: UintValue: placementOptions.UintValue, } } - case 400: + case 406: { tiflashReplicaSpec := &ast.TiFlashReplicaSpec{ Count: yyS[yypt-1].item.(uint64), @@ -15457,19 +15548,19 @@ yynewstate: TiFlashReplica: tiflashReplicaSpec, } } - case 401: + case 407: { parser.yyVAL.item = []*ast.DatabaseOption{} } - case 403: + case 409: { parser.yyVAL.item = []*ast.DatabaseOption{yyS[yypt-0].item.(*ast.DatabaseOption)} } - case 404: + case 410: { parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.DatabaseOption), yyS[yypt-0].item.(*ast.DatabaseOption)) } - case 405: + case 411: { stmt := yyS[yypt-6].item.(*ast.CreateTableStmt) stmt.Table = yyS[yypt-7].item.(*ast.TableName) @@ -15490,7 +15581,7 @@ yynewstate: } parser.yyVAL.statement = stmt } - case 406: + case 412: { tmp := &ast.CreateTableStmt{ Table: yyS[yypt-2].item.(*ast.TableName), @@ -15507,32 +15598,34 @@ yynewstate: } parser.yyVAL.statement = tmp } - case 407: + case 413: { parser.yyVAL.item = nil } - case 408: + case 414: { parser.yyVAL.item = true } - case 409: + case 415: { parser.yyVAL.item = false } - case 412: + case 418: { parser.yyVAL.item = nil } - case 413: + case 419: { - method := yyS[yypt-3].item.(*ast.PartitionMethod) - method.Num = yyS[yypt-2].item.(uint64) - sub, _ := yyS[yypt-1].item.(*ast.PartitionMethod) - defs, _ := yyS[yypt-0].item.([]*ast.PartitionDefinition) + method := yyS[yypt-4].item.(*ast.PartitionMethod) + method.Num = yyS[yypt-3].item.(uint64) + sub, _ := yyS[yypt-2].item.(*ast.PartitionMethod) + defs, _ := yyS[yypt-1].item.([]*ast.PartitionDefinition) + UpdateIndexes, _ := yyS[yypt-0].item.([]*ast.Constraint) opt := &ast.PartitionOptions{ PartitionMethod: *method, Sub: sub, Definitions: defs, + UpdateIndexes: UpdateIndexes, } if err := opt.Validate(); err != nil { yylex.AppendError(err) @@ -15540,7 +15633,39 @@ yynewstate: } parser.yyVAL.item = opt } - case 414: + case 420: + { + parser.yyVAL.item = false + } + case 421: + { + parser.yyVAL.item = true + } + case 422: + { + opt := &ast.IndexOption{Global: yyS[yypt-0].item.(bool)} + parser.yyVAL.item = &ast.Constraint{ + Name: yyS[yypt-1].ident, + Option: opt, + } + } + case 423: + { + parser.yyVAL.item = []*ast.Constraint{yyS[yypt-0].item.(*ast.Constraint)} + } + case 424: + { + parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.Constraint), yyS[yypt-0].item.(*ast.Constraint)) + } + case 425: + { + parser.yyVAL.item = nil + } + case 426: + { + parser.yyVAL.item = yyS[yypt-1].item + } + case 427: { keyAlgorithm, _ := yyS[yypt-3].item.(*ast.PartitionKeyAlgorithm) parser.yyVAL.item = &ast.PartitionMethod{ @@ -15550,7 +15675,7 @@ yynewstate: KeyAlgorithm: keyAlgorithm, } } - case 415: + case 428: { parser.yyVAL.item = &ast.PartitionMethod{ Tp: model.PartitionTypeHash, @@ -15558,11 +15683,11 @@ yynewstate: Expr: yyS[yypt-1].expr.(ast.ExprNode), } } - case 416: + case 429: { parser.yyVAL.item = nil } - case 417: + case 430: { tp := getUint64FromNUM(yyS[yypt-0].item) if tp != 1 && tp != 2 { @@ -15573,7 +15698,7 @@ yynewstate: Type: tp, } } - case 419: + case 432: { partitionInterval, _ := yyS[yypt-0].item.(*ast.PartitionInterval) parser.yyVAL.item = &ast.PartitionMethod{ @@ -15582,7 +15707,7 @@ yynewstate: Interval: partitionInterval, } } - case 420: + case 433: { partitionInterval, _ := yyS[yypt-0].item.(*ast.PartitionInterval) parser.yyVAL.item = &ast.PartitionMethod{ @@ -15591,21 +15716,21 @@ yynewstate: Interval: partitionInterval, } } - case 421: + case 434: { parser.yyVAL.item = &ast.PartitionMethod{ Tp: model.PartitionTypeList, Expr: yyS[yypt-1].expr.(ast.ExprNode), } } - case 422: + case 435: { parser.yyVAL.item = &ast.PartitionMethod{ Tp: model.PartitionTypeList, ColumnNames: yyS[yypt-1].item.([]*ast.ColumnName), } } - case 423: + case 436: { parser.yyVAL.item = &ast.PartitionMethod{ Tp: model.PartitionTypeSystemTime, @@ -15613,24 +15738,24 @@ yynewstate: Unit: yyS[yypt-0].item.(ast.TimeUnitType), } } - case 424: + case 437: { parser.yyVAL.item = &ast.PartitionMethod{ Tp: model.PartitionTypeSystemTime, Limit: yyS[yypt-0].item.(uint64), } } - case 425: + case 438: { parser.yyVAL.item = &ast.PartitionMethod{ Tp: model.PartitionTypeSystemTime, } } - case 426: + case 439: { parser.yyVAL.item = nil } - case 427: + case 440: { partitionInterval := &ast.PartitionInterval{ IntervalExpr: yyS[yypt-4].item.(ast.PartitionIntervalExpr), @@ -15646,35 +15771,35 @@ yynewstate: partitionInterval.SetOriginTextPosition(startOffset) parser.yyVAL.item = partitionInterval } - case 428: + case 441: { parser.yyVAL.item = ast.PartitionIntervalExpr{Expr: yyS[yypt-0].expr, TimeUnit: ast.TimeUnitInvalid} } - case 429: + case 442: { parser.yyVAL.item = ast.PartitionIntervalExpr{Expr: yyS[yypt-1].expr, TimeUnit: yyS[yypt-0].item.(ast.TimeUnitType)} } - case 430: + case 443: { parser.yyVAL.item = false } - case 431: + case 444: { parser.yyVAL.item = true } - case 432: + case 445: { parser.yyVAL.item = false } - case 433: + case 446: { parser.yyVAL.item = true } - case 434: + case 447: { parser.yyVAL.item = ast.PartitionInterval{} // First/LastRangeEnd defaults to nil } - case 435: + case 448: { first := yyS[yypt-8].expr.(ast.ExprNode) last := yyS[yypt-1].expr.(ast.ExprNode) @@ -15683,25 +15808,25 @@ yynewstate: LastRangeEnd: &last, } } - case 436: + case 449: { parser.yyVAL.ident = "" } - case 438: + case 451: { parser.yyVAL.item = nil } - case 439: + case 452: { method := yyS[yypt-1].item.(*ast.PartitionMethod) method.Num = yyS[yypt-0].item.(uint64) parser.yyVAL.item = method } - case 440: + case 453: { parser.yyVAL.item = uint64(0) } - case 441: + case 454: { res := yyS[yypt-0].item.(uint64) if res == 0 { @@ -15710,11 +15835,11 @@ yynewstate: } parser.yyVAL.item = res } - case 442: + case 455: { parser.yyVAL.item = uint64(0) } - case 443: + case 456: { res := yyS[yypt-0].item.(uint64) if res == 0 { @@ -15723,23 +15848,23 @@ yynewstate: } parser.yyVAL.item = res } - case 444: + case 457: { parser.yyVAL.item = nil } - case 445: + case 458: { parser.yyVAL.item = yyS[yypt-1].item.([]*ast.PartitionDefinition) } - case 446: + case 459: { parser.yyVAL.item = []*ast.PartitionDefinition{yyS[yypt-0].item.(*ast.PartitionDefinition)} } - case 447: + case 460: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.PartitionDefinition), yyS[yypt-0].item.(*ast.PartitionDefinition)) } - case 448: + case 461: { parser.yyVAL.item = &ast.PartitionDefinition{ Name: model.NewCIStr(yyS[yypt-3].ident), @@ -15748,80 +15873,80 @@ yynewstate: Sub: yyS[yypt-0].item.([]*ast.SubPartitionDefinition), } } - case 449: + case 462: { parser.yyVAL.item = make([]*ast.SubPartitionDefinition, 0) } - case 450: + case 463: { parser.yyVAL.item = yyS[yypt-1].item } - case 451: + case 464: { parser.yyVAL.item = []*ast.SubPartitionDefinition{yyS[yypt-0].item.(*ast.SubPartitionDefinition)} } - case 452: + case 465: { list := yyS[yypt-2].item.([]*ast.SubPartitionDefinition) parser.yyVAL.item = append(list, yyS[yypt-0].item.(*ast.SubPartitionDefinition)) } - case 453: + case 466: { parser.yyVAL.item = &ast.SubPartitionDefinition{ Name: model.NewCIStr(yyS[yypt-1].ident), Options: yyS[yypt-0].item.([]*ast.TableOption), } } - case 454: + case 467: { parser.yyVAL.item = make([]*ast.TableOption, 0) } - case 455: + case 468: { list := yyS[yypt-1].item.([]*ast.TableOption) parser.yyVAL.item = append(list, yyS[yypt-0].item.(*ast.TableOption)) } - case 456: + case 469: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionComment, StrValue: yyS[yypt-0].ident} } - case 457: + case 470: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionEngine, StrValue: yyS[yypt-0].ident} } - case 458: + case 471: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionEngine, StrValue: yyS[yypt-0].ident} } - case 459: + case 472: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionInsertMethod, StrValue: yyS[yypt-0].ident} } - case 460: + case 473: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionDataDirectory, StrValue: yyS[yypt-0].ident} } - case 461: + case 474: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionIndexDirectory, StrValue: yyS[yypt-0].ident} } - case 462: + case 475: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionMaxRows, UintValue: yyS[yypt-0].item.(uint64)} } - case 463: + case 476: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionMinRows, UintValue: yyS[yypt-0].item.(uint64)} } - case 464: + case 477: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionTablespace, StrValue: yyS[yypt-0].ident} } - case 465: + case 478: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionNodegroup, UintValue: yyS[yypt-0].item.(uint64)} } - case 466: + case 479: { placementOptions := yyS[yypt-0].item.(*ast.PlacementOption) parser.yyVAL.item = &ast.TableOption{ @@ -15831,29 +15956,29 @@ yynewstate: UintValue: placementOptions.UintValue, } } - case 467: + case 480: { parser.yyVAL.item = &ast.PartitionDefinitionClauseNone{} } - case 468: + case 481: { parser.yyVAL.item = &ast.PartitionDefinitionClauseLessThan{ Exprs: []ast.ExprNode{&ast.MaxValueExpr{}}, } } - case 469: + case 482: { parser.yyVAL.item = &ast.PartitionDefinitionClauseLessThan{ Exprs: yyS[yypt-1].item.([]ast.ExprNode), } } - case 470: + case 483: { parser.yyVAL.item = &ast.PartitionDefinitionClauseIn{ Values: [][]ast.ExprNode{{&ast.DefaultExpr{}}}, } } - case 471: + case 484: { exprs := yyS[yypt-1].item.([]ast.ExprNode) values := make([][]ast.ExprNode, 0, len(exprs)) @@ -15866,43 +15991,43 @@ yynewstate: } parser.yyVAL.item = &ast.PartitionDefinitionClauseIn{Values: values} } - case 472: + case 485: { parser.yyVAL.item = &ast.PartitionDefinitionClauseHistory{Current: false} } - case 473: + case 486: { parser.yyVAL.item = &ast.PartitionDefinitionClauseHistory{Current: true} } - case 474: + case 487: { parser.yyVAL.item = ast.OnDuplicateKeyHandlingError } - case 475: + case 488: { parser.yyVAL.item = ast.OnDuplicateKeyHandlingIgnore } - case 476: + case 489: { parser.yyVAL.item = ast.OnDuplicateKeyHandlingReplace } - case 479: + case 492: { parser.yyVAL.item = &ast.CreateTableStmt{} } - case 480: + case 493: { parser.yyVAL.item = &ast.CreateTableStmt{Select: yyS[yypt-0].statement.(ast.ResultSetNode)} } - case 481: + case 494: { parser.yyVAL.item = &ast.CreateTableStmt{Select: yyS[yypt-0].statement.(ast.ResultSetNode)} } - case 482: + case 495: { parser.yyVAL.item = &ast.CreateTableStmt{Select: yyS[yypt-0].statement.(ast.ResultSetNode)} } - case 483: + case 496: { var sel ast.ResultSetNode switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) { @@ -15915,7 +16040,7 @@ yynewstate: } parser.yyVAL.item = &ast.CreateTableStmt{Select: sel} } - case 487: + case 500: { var sel ast.StmtNode switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) { @@ -15928,19 +16053,19 @@ yynewstate: } parser.yyVAL.statement = sel } - case 488: + case 501: { parser.yyVAL.item = yyS[yypt-0].item } - case 489: + case 502: { parser.yyVAL.item = yyS[yypt-1].item } - case 490: + case 503: { startOffset := parser.startOffset(&yyS[yypt-1]) + endOffset := parser.yylval.offset selStmt := yyS[yypt-1].statement.(ast.StmtNode) - selStmt.SetText(parser.lexer.client, strings.TrimSpace(parser.src[startOffset:])) x := &ast.CreateViewStmt{ OrReplace: yyS[yypt-9].item.(bool), ViewName: yyS[yypt-4].item.(*ast.TableName), @@ -15954,92 +16079,92 @@ yynewstate: } if yyS[yypt-0].item != nil { x.CheckOption = yyS[yypt-0].item.(model.ViewCheckOption) - endOffset := parser.startOffset(&yyS[yypt]) - selStmt.SetText(parser.lexer.client, strings.TrimSpace(parser.src[startOffset:endOffset])) + endOffset = parser.startOffset(&yyS[yypt]) } else { x.CheckOption = model.CheckOptionCascaded } + selStmt.SetText(parser.lexer.client, strings.TrimSpace(parser.src[startOffset:endOffset])) parser.yyVAL.statement = x } - case 491: + case 504: { parser.yyVAL.item = false } - case 492: + case 505: { parser.yyVAL.item = true } - case 493: + case 506: { parser.yyVAL.item = model.AlgorithmUndefined } - case 494: + case 507: { parser.yyVAL.item = model.AlgorithmUndefined } - case 495: + case 508: { parser.yyVAL.item = model.AlgorithmMerge } - case 496: + case 509: { parser.yyVAL.item = model.AlgorithmTemptable } - case 497: + case 510: { parser.yyVAL.item = &auth.UserIdentity{CurrentUser: true} } - case 498: + case 511: { parser.yyVAL.item = yyS[yypt-0].item } - case 499: + case 512: { parser.yyVAL.item = model.SecurityDefiner } - case 500: + case 513: { parser.yyVAL.item = model.SecurityDefiner } - case 501: + case 514: { parser.yyVAL.item = model.SecurityInvoker } - case 503: + case 516: { parser.yyVAL.item = nil } - case 504: + case 517: { parser.yyVAL.item = yyS[yypt-1].item.([]model.CIStr) } - case 505: + case 518: { parser.yyVAL.item = []model.CIStr{model.NewCIStr(yyS[yypt-0].ident)} } - case 506: + case 519: { parser.yyVAL.item = append(yyS[yypt-2].item.([]model.CIStr), model.NewCIStr(yyS[yypt-0].ident)) } - case 507: + case 520: { parser.yyVAL.item = nil } - case 508: + case 521: { parser.yyVAL.item = model.CheckOptionCascaded } - case 509: + case 522: { parser.yyVAL.item = model.CheckOptionLocal } - case 510: + case 523: { parser.yyVAL.statement = &ast.DoStmt{ Exprs: yyS[yypt-0].item.([]ast.ExprNode), } } - case 511: + case 524: { // Single Table tn := yyS[yypt-6].item.(*ast.TableName) @@ -16067,7 +16192,7 @@ yynewstate: parser.yyVAL.statement = x } - case 512: + case 525: { // Multiple Table x := &ast.DeleteStmt{ @@ -16087,7 +16212,7 @@ yynewstate: } parser.yyVAL.statement = x } - case 513: + case 526: { // Multiple Table x := &ast.DeleteStmt{ @@ -16106,23 +16231,23 @@ yynewstate: } parser.yyVAL.statement = x } - case 516: + case 529: { d := yyS[yypt-0].statement.(*ast.DeleteStmt) d.With = yyS[yypt-1].item.(*ast.WithClause) parser.yyVAL.statement = d } - case 517: + case 530: { d := yyS[yypt-0].statement.(*ast.DeleteStmt) d.With = yyS[yypt-1].item.(*ast.WithClause) parser.yyVAL.statement = d } - case 519: + case 532: { parser.yyVAL.statement = &ast.DropDatabaseStmt{IfExists: yyS[yypt-1].item.(bool), Name: model.NewCIStr(yyS[yypt-0].ident)} } - case 520: + case 533: { var indexLockAndAlgorithm *ast.IndexLockAndAlgorithm if yyS[yypt-0].item != nil { @@ -16133,43 +16258,43 @@ yynewstate: } parser.yyVAL.statement = &ast.DropIndexStmt{IfExists: yyS[yypt-4].item.(bool), IndexName: yyS[yypt-3].ident, Table: yyS[yypt-1].item.(*ast.TableName), LockAlg: indexLockAndAlgorithm} } - case 521: + case 534: { parser.yyVAL.statement = &ast.DropIndexStmt{IfExists: yyS[yypt-3].item.(bool), IndexName: yyS[yypt-2].ident, Table: yyS[yypt-0].item.(*ast.TableName), IsHypo: true} } - case 522: + case 535: { parser.yyVAL.statement = &ast.DropTableStmt{IfExists: yyS[yypt-2].item.(bool), Tables: yyS[yypt-1].item.([]*ast.TableName), IsView: false, TemporaryKeyword: yyS[yypt-4].item.(ast.TemporaryKeyword)} } - case 523: + case 536: { parser.yyVAL.item = ast.TemporaryNone } - case 524: + case 537: { parser.yyVAL.item = ast.TemporaryLocal } - case 525: + case 538: { parser.yyVAL.item = ast.TemporaryGlobal } - case 526: + case 539: { parser.yyVAL.statement = &ast.DropTableStmt{Tables: yyS[yypt-1].item.([]*ast.TableName), IsView: true} } - case 527: + case 540: { parser.yyVAL.statement = &ast.DropTableStmt{IfExists: true, Tables: yyS[yypt-1].item.([]*ast.TableName), IsView: true} } - case 528: + case 541: { parser.yyVAL.statement = &ast.DropUserStmt{IsDropRole: false, IfExists: false, UserList: yyS[yypt-0].item.([]*auth.UserIdentity)} } - case 529: + case 542: { parser.yyVAL.statement = &ast.DropUserStmt{IsDropRole: false, IfExists: true, UserList: yyS[yypt-0].item.([]*auth.UserIdentity)} } - case 530: + case 543: { tmp := make([]*auth.UserIdentity, 0, 10) roleList := yyS[yypt-0].item.([]*auth.RoleIdentity) @@ -16178,7 +16303,7 @@ yynewstate: } parser.yyVAL.statement = &ast.DropUserStmt{IsDropRole: true, IfExists: false, UserList: tmp} } - case 531: + case 544: { tmp := make([]*auth.UserIdentity, 0, 10) roleList := yyS[yypt-0].item.([]*auth.RoleIdentity) @@ -16187,11 +16312,11 @@ yynewstate: } parser.yyVAL.statement = &ast.DropUserStmt{IsDropRole: true, IfExists: true, UserList: tmp} } - case 532: + case 545: { parser.yyVAL.statement = &ast.DropStatsStmt{Tables: yyS[yypt-0].item.([]*ast.TableName)} } - case 533: + case 546: { yylex.AppendError(ErrWarnDeprecatedSyntaxNoReplacement.FastGenByArgs("'DROP STATS ... PARTITION ...'", "")) parser.lastErrorAsWarn() @@ -16200,7 +16325,7 @@ yynewstate: PartitionNames: yyS[yypt-0].item.([]model.CIStr), } } - case 534: + case 547: { yylex.AppendError(ErrWarnDeprecatedSyntax.FastGenByArgs("DROP STATS ... GLOBAL", "DROP STATS ...")) parser.lastErrorAsWarn() @@ -16209,11 +16334,11 @@ yynewstate: IsGlobalStats: true, } } - case 542: + case 555: { parser.yyVAL.statement = nil } - case 543: + case 556: { parser.yyVAL.statement = &ast.TraceStmt{ Stmt: yyS[yypt-0].statement, @@ -16223,7 +16348,7 @@ yynewstate: startOffset := parser.startOffset(&yyS[yypt]) yyS[yypt-0].statement.SetText(parser.lexer.client, string(parser.src[startOffset:])) } - case 544: + case 557: { parser.yyVAL.statement = &ast.TraceStmt{ Stmt: yyS[yypt-0].statement, @@ -16233,7 +16358,7 @@ yynewstate: startOffset := parser.startOffset(&yyS[yypt]) yyS[yypt-0].statement.SetText(parser.lexer.client, string(parser.src[startOffset:])) } - case 545: + case 558: { parser.yyVAL.statement = &ast.TraceStmt{ Stmt: yyS[yypt-0].statement, @@ -16242,7 +16367,7 @@ yynewstate: startOffset := parser.startOffset(&yyS[yypt]) yyS[yypt-0].statement.SetText(parser.lexer.client, string(parser.src[startOffset:])) } - case 546: + case 559: { parser.yyVAL.statement = &ast.TraceStmt{ Stmt: yyS[yypt-0].statement, @@ -16252,7 +16377,7 @@ yynewstate: startOffset := parser.startOffset(&yyS[yypt]) yyS[yypt-0].statement.SetText(parser.lexer.client, string(parser.src[startOffset:])) } - case 550: + case 563: { parser.yyVAL.statement = &ast.ExplainStmt{ Stmt: &ast.ShowStmt{ @@ -16261,7 +16386,7 @@ yynewstate: }, } } - case 551: + case 564: { parser.yyVAL.statement = &ast.ExplainStmt{ Stmt: &ast.ShowStmt{ @@ -16271,49 +16396,49 @@ yynewstate: }, } } - case 552: + case 565: { parser.yyVAL.statement = &ast.ExplainStmt{ Stmt: yyS[yypt-0].statement, Format: "row", } } - case 553: + case 566: { parser.yyVAL.statement = &ast.ExplainForStmt{ Format: "row", ConnectionID: getUint64FromNUM(yyS[yypt-0].item), } } - case 554: + case 567: { parser.yyVAL.statement = &ast.ExplainForStmt{ Format: yyS[yypt-3].ident, ConnectionID: getUint64FromNUM(yyS[yypt-0].item), } } - case 555: + case 568: { parser.yyVAL.statement = &ast.ExplainStmt{ Stmt: yyS[yypt-0].statement, Format: yyS[yypt-1].ident, } } - case 556: + case 569: { parser.yyVAL.statement = &ast.ExplainForStmt{ Format: yyS[yypt-3].ident, ConnectionID: getUint64FromNUM(yyS[yypt-0].item), } } - case 557: + case 570: { parser.yyVAL.statement = &ast.ExplainStmt{ Stmt: yyS[yypt-0].statement, Format: yyS[yypt-1].ident, } } - case 558: + case 571: { parser.yyVAL.statement = &ast.ExplainStmt{ Stmt: yyS[yypt-0].statement, @@ -16321,7 +16446,7 @@ yynewstate: Analyze: true, } } - case 559: + case 572: { parser.yyVAL.statement = &ast.ExplainStmt{ Stmt: yyS[yypt-0].statement, @@ -16329,7 +16454,7 @@ yynewstate: Analyze: true, } } - case 560: + case 573: { parser.yyVAL.statement = &ast.ExplainStmt{ Stmt: yyS[yypt-0].statement, @@ -16337,15 +16462,15 @@ yynewstate: Analyze: true, } } - case 569: + case 582: { parser.yyVAL.statement = &ast.SavepointStmt{Name: yyS[yypt-0].ident} } - case 570: + case 583: { parser.yyVAL.statement = &ast.ReleaseSavepointStmt{Name: yyS[yypt-0].ident} } - case 571: + case 584: { stmt := yyS[yypt-3].item.(*ast.BRIEStmt) stmt.Kind = ast.BRIEKindBackup @@ -16353,7 +16478,7 @@ yynewstate: stmt.Options = yyS[yypt-0].item.([]*ast.BRIEOption) parser.yyVAL.statement = stmt } - case 572: + case 585: { stmt := &ast.BRIEStmt{} stmt.Kind = ast.BRIEKindStreamStart @@ -16361,26 +16486,26 @@ yynewstate: stmt.Options = yyS[yypt-0].item.([]*ast.BRIEOption) parser.yyVAL.statement = stmt } - case 573: + case 586: { stmt := &ast.BRIEStmt{} stmt.Kind = ast.BRIEKindStreamStop parser.yyVAL.statement = stmt } - case 574: + case 587: { stmt := &ast.BRIEStmt{} stmt.Kind = ast.BRIEKindStreamPause stmt.Options = yyS[yypt-0].item.([]*ast.BRIEOption) parser.yyVAL.statement = stmt } - case 575: + case 588: { stmt := &ast.BRIEStmt{} stmt.Kind = ast.BRIEKindStreamResume parser.yyVAL.statement = stmt } - case 576: + case 589: { stmt := &ast.BRIEStmt{} stmt.Kind = ast.BRIEKindStreamPurge @@ -16388,48 +16513,48 @@ yynewstate: stmt.Options = yyS[yypt-0].item.([]*ast.BRIEOption) parser.yyVAL.statement = stmt } - case 577: + case 590: { stmt := &ast.BRIEStmt{} stmt.Kind = ast.BRIEKindStreamStatus parser.yyVAL.statement = stmt } - case 578: + case 591: { stmt := &ast.BRIEStmt{} stmt.Kind = ast.BRIEKindStreamMetaData stmt.Storage = yyS[yypt-0].ident parser.yyVAL.statement = stmt } - case 579: + case 592: { stmt := &ast.BRIEStmt{} stmt.Kind = ast.BRIEKindShowJob stmt.JobID = yyS[yypt-0].item.(int64) parser.yyVAL.statement = stmt } - case 580: + case 593: { stmt := &ast.BRIEStmt{} stmt.Kind = ast.BRIEKindShowQuery stmt.JobID = yyS[yypt-0].item.(int64) parser.yyVAL.statement = stmt } - case 581: + case 594: { stmt := &ast.BRIEStmt{} stmt.Kind = ast.BRIEKindCancelJob stmt.JobID = yyS[yypt-0].item.(int64) parser.yyVAL.statement = stmt } - case 582: + case 595: { stmt := &ast.BRIEStmt{} stmt.Kind = ast.BRIEKindShowBackupMeta stmt.Storage = yyS[yypt-0].ident parser.yyVAL.statement = stmt } - case 583: + case 596: { stmt := yyS[yypt-3].item.(*ast.BRIEStmt) stmt.Kind = ast.BRIEKindRestore @@ -16437,7 +16562,7 @@ yynewstate: stmt.Options = yyS[yypt-0].item.([]*ast.BRIEOption) parser.yyVAL.statement = stmt } - case 584: + case 597: { stmt := &ast.BRIEStmt{} stmt.Kind = ast.BRIEKindRestorePIT @@ -16445,146 +16570,146 @@ yynewstate: stmt.Options = yyS[yypt-0].item.([]*ast.BRIEOption) parser.yyVAL.statement = stmt } - case 585: + case 598: { parser.yyVAL.item = &ast.BRIEStmt{} } - case 586: + case 599: { parser.yyVAL.item = &ast.BRIEStmt{Schemas: yyS[yypt-0].item.([]string)} } - case 587: + case 600: { parser.yyVAL.item = &ast.BRIEStmt{Tables: yyS[yypt-0].item.([]*ast.TableName)} } - case 588: + case 601: { parser.yyVAL.item = []string{yyS[yypt-0].ident} } - case 589: + case 602: { parser.yyVAL.item = append(yyS[yypt-2].item.([]string), yyS[yypt-0].ident) } - case 590: + case 603: { parser.yyVAL.item = []*ast.BRIEOption{} } - case 591: + case 604: { parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.BRIEOption), yyS[yypt-0].item.(*ast.BRIEOption)) } - case 592: + case 605: { parser.yyVAL.item = ast.BRIEOptionConcurrency } - case 593: + case 606: { parser.yyVAL.item = ast.BRIEOptionResume } - case 594: + case 607: { parser.yyVAL.item = ast.BRIEOptionChecksumConcurrency } - case 595: + case 608: { parser.yyVAL.item = ast.BRIEOptionCompressionLevel } - case 596: + case 609: { parser.yyVAL.item = ast.BRIEOptionSendCreds } - case 597: + case 610: { parser.yyVAL.item = ast.BRIEOptionOnline } - case 598: + case 611: { parser.yyVAL.item = ast.BRIEOptionCheckpoint } - case 599: + case 612: { parser.yyVAL.item = ast.BRIEOptionSkipSchemaFiles } - case 600: + case 613: { parser.yyVAL.item = ast.BRIEOptionStrictFormat } - case 601: + case 614: { parser.yyVAL.item = ast.BRIEOptionCSVNotNull } - case 602: + case 615: { parser.yyVAL.item = ast.BRIEOptionCSVBackslashEscape } - case 603: + case 616: { parser.yyVAL.item = ast.BRIEOptionCSVTrimLastSeparators } - case 604: + case 617: { parser.yyVAL.item = ast.BRIEOptionWaitTiflashReady } - case 605: + case 618: { parser.yyVAL.item = ast.BRIEOptionWithSysTable } - case 606: + case 619: { parser.yyVAL.item = ast.BRIEOptionIgnoreStats } - case 607: + case 620: { parser.yyVAL.item = ast.BRIEOptionLoadStats } - case 608: + case 621: { parser.yyVAL.item = ast.BRIEOptionTiKVImporter } - case 609: + case 622: { parser.yyVAL.item = ast.BRIEOptionCSVSeparator } - case 610: + case 623: { parser.yyVAL.item = ast.BRIEOptionCSVDelimiter } - case 611: + case 624: { parser.yyVAL.item = ast.BRIEOptionCSVNull } - case 612: + case 625: { parser.yyVAL.item = ast.BRIEOptionCompression } - case 613: + case 626: { parser.yyVAL.item = ast.BRIEOptionEncryptionMethod } - case 614: + case 627: { parser.yyVAL.item = ast.BRIEOptionEncryptionKeyFile } - case 615: + case 628: { parser.yyVAL.item = ast.BRIEOptionBackend } - case 616: + case 629: { parser.yyVAL.item = ast.BRIEOptionOnDuplicate } - case 617: + case 630: { parser.yyVAL.item = ast.BRIEOptionOnDuplicate } - case 618: + case 631: { parser.yyVAL.item = &ast.BRIEOption{ Tp: yyS[yypt-2].item.(ast.BRIEOptionType), UintValue: yyS[yypt-0].item.(uint64), } } - case 619: + case 632: { value := uint64(0) if yyS[yypt-0].item.(bool) { @@ -16595,21 +16720,21 @@ yynewstate: UintValue: value, } } - case 620: + case 633: { parser.yyVAL.item = &ast.BRIEOption{ Tp: yyS[yypt-2].item.(ast.BRIEOptionType), StrValue: yyS[yypt-0].ident, } } - case 621: + case 634: { parser.yyVAL.item = &ast.BRIEOption{ Tp: yyS[yypt-2].item.(ast.BRIEOptionType), StrValue: strings.ToLower(yyS[yypt-0].ident), } } - case 622: + case 635: { unit, err := yyS[yypt-1].item.(ast.TimeUnitType).Duration() if err != nil { @@ -16622,35 +16747,35 @@ yynewstate: UintValue: yyS[yypt-2].item.(uint64) * uint64(unit), } } - case 623: + case 636: { parser.yyVAL.item = &ast.BRIEOption{ Tp: ast.BRIEOptionBackupTS, StrValue: yyS[yypt-0].ident, } } - case 624: + case 637: { parser.yyVAL.item = &ast.BRIEOption{ Tp: ast.BRIEOptionBackupTSO, UintValue: yyS[yypt-0].item.(uint64), } } - case 625: + case 638: { parser.yyVAL.item = &ast.BRIEOption{ Tp: ast.BRIEOptionLastBackupTS, StrValue: yyS[yypt-0].ident, } } - case 626: + case 639: { parser.yyVAL.item = &ast.BRIEOption{ Tp: ast.BRIEOptionLastBackupTSO, UintValue: yyS[yypt-0].item.(uint64), } } - case 627: + case 640: { // TODO: check overflow? parser.yyVAL.item = &ast.BRIEOption{ @@ -16658,21 +16783,21 @@ yynewstate: UintValue: yyS[yypt-3].item.(uint64) * 1048576, } } - case 628: + case 641: { parser.yyVAL.item = &ast.BRIEOption{ Tp: ast.BRIEOptionCSVHeader, UintValue: ast.BRIECSVHeaderIsColumns, } } - case 629: + case 642: { parser.yyVAL.item = &ast.BRIEOption{ Tp: ast.BRIEOptionCSVHeader, UintValue: yyS[yypt-0].item.(uint64), } } - case 630: + case 643: { value := uint64(0) if yyS[yypt-0].item.(bool) { @@ -16683,14 +16808,14 @@ yynewstate: UintValue: value, } } - case 631: + case 644: { parser.yyVAL.item = &ast.BRIEOption{ Tp: ast.BRIEOptionChecksum, UintValue: uint64(yyS[yypt-0].item.(ast.BRIEOptionLevel)), } } - case 632: + case 645: { value := uint64(0) if yyS[yypt-0].item.(bool) { @@ -16701,53 +16826,53 @@ yynewstate: UintValue: value, } } - case 633: + case 646: { parser.yyVAL.item = &ast.BRIEOption{ Tp: ast.BRIEOptionAnalyze, UintValue: uint64(yyS[yypt-0].item.(ast.BRIEOptionLevel)), } } - case 634: + case 647: { parser.yyVAL.item = &ast.BRIEOption{ Tp: ast.BRIEOptionFullBackupStorage, StrValue: yyS[yypt-0].ident, } } - case 635: + case 648: { parser.yyVAL.item = &ast.BRIEOption{ Tp: ast.BRIEOptionRestoredTS, StrValue: yyS[yypt-0].ident, } } - case 636: + case 649: { parser.yyVAL.item = &ast.BRIEOption{ Tp: ast.BRIEOptionStartTS, StrValue: yyS[yypt-0].ident, } } - case 637: + case 650: { parser.yyVAL.item = &ast.BRIEOption{ Tp: ast.BRIEOptionUntilTS, StrValue: yyS[yypt-0].ident, } } - case 638: + case 651: { parser.yyVAL.item = &ast.BRIEOption{ Tp: ast.BRIEOptionGCTTL, StrValue: yyS[yypt-0].ident, } } - case 639: + case 652: { parser.yyVAL.item = getUint64FromNUM(yyS[yypt-0].item) } - case 640: + case 653: { v, rangeErrMsg := getInt64FromNUM(yyS[yypt-0].item) if len(rangeErrMsg) != 0 { @@ -16756,38 +16881,38 @@ yynewstate: } parser.yyVAL.item = v } - case 642: + case 655: { parser.yyVAL.item = yyS[yypt-0].item.(int64) != 0 } - case 643: + case 656: { parser.yyVAL.item = false } - case 644: + case 657: { parser.yyVAL.item = true } - case 645: + case 658: { parser.yyVAL.item = ast.BRIEOptionLevelOff } - case 646: + case 659: { parser.yyVAL.item = ast.BRIEOptionLevelOptional } - case 647: + case 660: { parser.yyVAL.item = ast.BRIEOptionLevelRequired } - case 648: + case 661: { parser.yyVAL.statement = &ast.ImportIntoActionStmt{ Tp: ast.ImportIntoCancel, JobID: yyS[yypt-0].item.(int64), } } - case 649: + case 662: { v := yyS[yypt-2].ident v = strings.TrimPrefix(v, "@") @@ -16798,19 +16923,19 @@ yynewstate: Value: yyS[yypt-0].expr, } } - case 650: + case 663: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.LogicOr, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 651: + case 664: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.LogicXor, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 652: + case 665: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.LogicAnd, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 653: + case 666: { expr, ok := yyS[yypt-0].expr.(*ast.ExistsSubqueryExpr) if ok { @@ -16820,7 +16945,7 @@ yynewstate: parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.Not, V: yyS[yypt-0].expr} } } - case 654: + case 667: { parser.yyVAL.expr = &ast.MatchAgainst{ ColumnNames: yyS[yypt-6].item.([]*ast.ColumnName), @@ -16828,99 +16953,99 @@ yynewstate: Modifier: ast.FulltextSearchModifier(yyS[yypt-1].item.(int)), } } - case 655: + case 668: { parser.yyVAL.expr = &ast.IsTruthExpr{Expr: yyS[yypt-2].expr, Not: !yyS[yypt-1].item.(bool), True: int64(1)} } - case 656: + case 669: { parser.yyVAL.expr = &ast.IsTruthExpr{Expr: yyS[yypt-2].expr, Not: !yyS[yypt-1].item.(bool), True: int64(0)} } - case 657: + case 670: { /* https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_is */ parser.yyVAL.expr = &ast.IsNullExpr{Expr: yyS[yypt-2].expr, Not: !yyS[yypt-1].item.(bool)} } - case 659: + case 672: { parser.yyVAL.expr = &ast.DefaultExpr{} } - case 661: + case 674: { parser.yyVAL.expr = &ast.MaxValueExpr{} } - case 663: + case 676: { parser.yyVAL.item = ast.FulltextSearchModifierNaturalLanguageMode } - case 664: + case 677: { parser.yyVAL.item = ast.FulltextSearchModifierNaturalLanguageMode } - case 665: + case 678: { parser.yyVAL.item = ast.FulltextSearchModifierNaturalLanguageMode | ast.FulltextSearchModifierWithQueryExpansion } - case 666: + case 679: { parser.yyVAL.item = ast.FulltextSearchModifierBooleanMode } - case 667: + case 680: { parser.yyVAL.item = ast.FulltextSearchModifierWithQueryExpansion } - case 672: + case 685: { parser.yyVAL.item = []ast.ExprNode{yyS[yypt-0].expr} } - case 673: + case 686: { parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.ExprNode), yyS[yypt-0].expr) } - case 674: + case 687: { parser.yyVAL.item = []ast.ExprNode{yyS[yypt-0].expr} } - case 675: + case 688: { parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.ExprNode), yyS[yypt-0].expr) } - case 676: + case 689: { parser.yyVAL.item = []ast.ExprNode{yyS[yypt-0].expr} } - case 677: + case 690: { parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.ExprNode), yyS[yypt-0].expr) } - case 678: + case 691: { parser.yyVAL.item = []ast.ExprNode{} } - case 680: + case 693: { parser.yyVAL.item = []ast.ExprNode{} } - case 682: + case 695: { expr := ast.NewValueExpr(yyS[yypt-0].item, parser.charset, parser.collation) parser.yyVAL.item = []ast.ExprNode{expr} } - case 683: + case 696: { parser.yyVAL.expr = &ast.IsNullExpr{Expr: yyS[yypt-2].expr, Not: !yyS[yypt-1].item.(bool)} } - case 684: + case 697: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: yyS[yypt-1].item.(opcode.Op), L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 685: + case 698: { sq := yyS[yypt-0].expr.(*ast.SubqueryExpr) sq.MultiRows = true parser.yyVAL.expr = &ast.CompareSubqueryExpr{Op: yyS[yypt-2].item.(opcode.Op), L: yyS[yypt-3].expr, R: sq, All: yyS[yypt-1].item.(bool)} } - case 686: + case 699: { v := yyS[yypt-2].ident v = strings.TrimPrefix(v, "@") @@ -16932,109 +17057,109 @@ yynewstate: } parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: yyS[yypt-3].item.(opcode.Op), L: yyS[yypt-4].expr, R: variable} } - case 688: + case 701: { parser.yyVAL.item = opcode.GE } - case 689: + case 702: { parser.yyVAL.item = opcode.GT } - case 690: + case 703: { parser.yyVAL.item = opcode.LE } - case 691: + case 704: { parser.yyVAL.item = opcode.LT } - case 692: + case 705: { parser.yyVAL.item = opcode.NE } - case 693: + case 706: { parser.yyVAL.item = opcode.NE } - case 694: + case 707: { parser.yyVAL.item = opcode.EQ } - case 695: + case 708: { parser.yyVAL.item = opcode.NullEQ } - case 696: + case 709: { parser.yyVAL.item = true } - case 697: + case 710: { parser.yyVAL.item = false } - case 698: + case 711: { parser.yyVAL.item = true } - case 699: + case 712: { parser.yyVAL.item = false } - case 700: + case 713: { parser.yyVAL.item = true } - case 701: + case 714: { parser.yyVAL.item = false } - case 702: + case 715: { parser.yyVAL.item = true } - case 703: + case 716: { parser.yyVAL.item = false } - case 704: + case 717: { parser.yyVAL.item = true } - case 705: + case 718: { parser.yyVAL.item = false } - case 706: + case 719: { parser.yyVAL.item = true } - case 707: + case 720: { parser.yyVAL.item = false } - case 708: + case 721: { parser.yyVAL.item = false } - case 709: + case 722: { parser.yyVAL.item = false } - case 710: + case 723: { parser.yyVAL.item = true } - case 711: + case 724: { parser.yyVAL.expr = &ast.PatternInExpr{Expr: yyS[yypt-4].expr, Not: !yyS[yypt-3].item.(bool), List: yyS[yypt-1].item.([]ast.ExprNode)} } - case 712: + case 725: { sq := yyS[yypt-0].expr.(*ast.SubqueryExpr) sq.MultiRows = true parser.yyVAL.expr = &ast.PatternInExpr{Expr: yyS[yypt-2].expr, Not: !yyS[yypt-1].item.(bool), Sel: sq} } - case 713: + case 726: { parser.yyVAL.expr = &ast.BetweenExpr{ Expr: yyS[yypt-4].expr, @@ -17043,7 +17168,7 @@ yynewstate: Not: !yyS[yypt-3].item.(bool), } } - case 714: + case 727: { escape := yyS[yypt-0].ident if len(escape) > 1 { @@ -17060,7 +17185,7 @@ yynewstate: IsLike: true, } } - case 715: + case 728: { escape := yyS[yypt-0].ident if len(escape) > 1 { @@ -17077,55 +17202,55 @@ yynewstate: IsLike: false, } } - case 716: + case 729: { parser.yyVAL.expr = &ast.PatternRegexpExpr{Expr: yyS[yypt-2].expr, Pattern: yyS[yypt-0].expr, Not: !yyS[yypt-1].item.(bool)} } - case 717: + case 730: { parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.JSONMemberOf), Args: []ast.ExprNode{yyS[yypt-4].expr, yyS[yypt-1].expr}} } - case 721: + case 734: { parser.yyVAL.ident = "\\" } - case 722: + case 735: { parser.yyVAL.ident = yyS[yypt-0].ident } - case 723: + case 736: { parser.yyVAL.item = &ast.SelectField{WildCard: &ast.WildCardField{}} } - case 724: + case 737: { wildCard := &ast.WildCardField{Table: model.NewCIStr(yyS[yypt-2].ident)} parser.yyVAL.item = &ast.SelectField{WildCard: wildCard} } - case 725: + case 738: { wildCard := &ast.WildCardField{Schema: model.NewCIStr(yyS[yypt-4].ident), Table: model.NewCIStr(yyS[yypt-2].ident)} parser.yyVAL.item = &ast.SelectField{WildCard: wildCard} } - case 726: + case 739: { expr := yyS[yypt-1].expr asName := yyS[yypt-0].ident parser.yyVAL.item = &ast.SelectField{Expr: expr, AsName: model.NewCIStr(asName)} } - case 727: + case 740: { parser.yyVAL.ident = "" } - case 730: + case 743: { parser.yyVAL.ident = yyS[yypt-0].ident } - case 732: + case 745: { parser.yyVAL.ident = yyS[yypt-0].ident } - case 733: + case 746: { field := yyS[yypt-0].item.(*ast.SelectField) field.Offset = parser.startOffset(&yyS[yypt]) @@ -17135,7 +17260,7 @@ yynewstate: } parser.yyVAL.item = []*ast.SelectField{field} } - case 734: + case 747: { fl := yyS[yypt-2].item.([]*ast.SelectField) field := yyS[yypt-0].item.(*ast.SelectField) @@ -17146,79 +17271,79 @@ yynewstate: } parser.yyVAL.item = append(fl, field) } - case 735: + case 748: { parser.yyVAL.item = false } - case 736: + case 749: { parser.yyVAL.item = true } - case 737: + case 750: { parser.yyVAL.item = &ast.GroupByClause{Items: yyS[yypt-1].item.([]*ast.ByItem), Rollup: yyS[yypt-0].item.(bool)} } - case 738: + case 751: { parser.yyVAL.item = nil } - case 739: + case 752: { parser.yyVAL.item = &ast.HavingClause{Expr: yyS[yypt-0].expr} } - case 740: + case 753: { parser.yyVAL.item = nil } - case 742: + case 755: { parser.yyVAL.item = &ast.AsOfClause{ TsExpr: yyS[yypt-0].expr.(ast.ExprNode), } } - case 743: + case 756: { parser.yyVAL.item = false } - case 744: + case 757: { parser.yyVAL.item = true } - case 745: + case 758: { parser.yyVAL.item = false } - case 746: + case 759: { parser.yyVAL.item = true } - case 747: + case 760: { parser.yyVAL.item = false } - case 748: + case 761: { parser.yyVAL.item = true } - case 749: + case 762: { parser.yyVAL.item = &ast.NullString{ String: "", Empty: false, } } - case 750: + case 763: { parser.yyVAL.item = &ast.NullString{ String: yyS[yypt-0].ident, Empty: len(yyS[yypt-0].ident) == 0, } } - case 751: + case 764: { parser.yyVAL.item = nil } - case 752: + case 765: { // Merge the options if yyS[yypt-1].item == nil { @@ -17238,23 +17363,25 @@ yynewstate: opt1.Visibility = opt2.Visibility } else if opt2.PrimaryKeyTp != model.PrimaryKeyTypeDefault { opt1.PrimaryKeyTp = opt2.PrimaryKeyTp + } else if opt2.Global { + opt1.Global = true } parser.yyVAL.item = opt1 } } - case 753: + case 766: { parser.yyVAL.item = &ast.IndexOption{ KeyBlockSize: yyS[yypt-0].item.(uint64), } } - case 754: + case 767: { parser.yyVAL.item = &ast.IndexOption{ Tp: yyS[yypt-0].item.(model.IndexType), } } - case 755: + case 768: { parser.yyVAL.item = &ast.IndexOption{ ParserName: model.NewCIStr(yyS[yypt-0].ident), @@ -17262,79 +17389,91 @@ yynewstate: yylex.AppendError(yylex.Errorf("The WITH PARASER clause is parsed but ignored by all storage engines.")) parser.lastErrorAsWarn() } - case 756: + case 769: { parser.yyVAL.item = &ast.IndexOption{ Comment: yyS[yypt-0].ident, } } - case 757: + case 770: { parser.yyVAL.item = &ast.IndexOption{ Visibility: yyS[yypt-0].item.(ast.IndexVisibility), } } - case 758: + case 771: { parser.yyVAL.item = &ast.IndexOption{ PrimaryKeyTp: yyS[yypt-0].item.(model.PrimaryKeyType), } } - case 759: + case 772: + { + parser.yyVAL.item = &ast.IndexOption{ + Global: true, + } + } + case 773: + { + parser.yyVAL.item = &ast.IndexOption{ + Global: false, + } + } + case 774: { parser.yyVAL.item = []interface{}{yyS[yypt-0].item, nil} } - case 760: + case 775: { parser.yyVAL.item = []interface{}{yyS[yypt-2].item, yyS[yypt-0].item} } - case 761: + case 776: { parser.yyVAL.item = []interface{}{&ast.NullString{String: yyS[yypt-2].ident, Empty: len(yyS[yypt-2].ident) == 0}, yyS[yypt-0].item} } - case 762: + case 777: { parser.yyVAL.item = nil } - case 764: + case 779: { parser.yyVAL.item = yyS[yypt-0].item } - case 765: + case 780: { parser.yyVAL.item = yyS[yypt-0].item } - case 766: + case 781: { parser.yyVAL.item = model.IndexTypeBtree } - case 767: + case 782: { parser.yyVAL.item = model.IndexTypeHash } - case 768: + case 783: { parser.yyVAL.item = model.IndexTypeRtree } - case 769: + case 784: { parser.yyVAL.item = model.IndexTypeHypo } - case 770: + case 785: { parser.yyVAL.item = ast.IndexVisibilityVisible } - case 771: + case 786: { parser.yyVAL.item = ast.IndexVisibilityInvisible } - case 1315: + case 1330: { parser.yyVAL.statement = &ast.CallStmt{ Procedure: yyS[yypt-0].expr.(*ast.FuncCallExpr), } } - case 1316: + case 1331: { parser.yyVAL.expr = &ast.FuncCallExpr{ Tp: ast.FuncCallExprTypeGeneric, @@ -17342,7 +17481,7 @@ yynewstate: Args: []ast.ExprNode{}, } } - case 1317: + case 1332: { parser.yyVAL.expr = &ast.FuncCallExpr{ Tp: ast.FuncCallExprTypeGeneric, @@ -17351,7 +17490,7 @@ yynewstate: Args: []ast.ExprNode{}, } } - case 1318: + case 1333: { parser.yyVAL.expr = &ast.FuncCallExpr{ Tp: ast.FuncCallExprTypeGeneric, @@ -17359,7 +17498,7 @@ yynewstate: Args: yyS[yypt-1].item.([]ast.ExprNode), } } - case 1319: + case 1334: { parser.yyVAL.expr = &ast.FuncCallExpr{ Tp: ast.FuncCallExprTypeGeneric, @@ -17368,7 +17507,7 @@ yynewstate: Args: yyS[yypt-1].item.([]ast.ExprNode), } } - case 1320: + case 1335: { x := yyS[yypt-1].item.(*ast.InsertStmt) x.Priority = yyS[yypt-6].item.(mysql.PriorityEnum) @@ -17385,26 +17524,26 @@ yynewstate: x.PartitionNames = yyS[yypt-2].item.([]model.CIStr) parser.yyVAL.statement = x } - case 1323: + case 1338: { parser.yyVAL.item = &ast.InsertStmt{ Columns: yyS[yypt-3].item.([]*ast.ColumnName), Lists: yyS[yypt-0].item.([][]ast.ExprNode), } } - case 1324: + case 1339: { parser.yyVAL.item = &ast.InsertStmt{Columns: yyS[yypt-2].item.([]*ast.ColumnName), Select: yyS[yypt-0].statement.(ast.ResultSetNode)} } - case 1325: + case 1340: { parser.yyVAL.item = &ast.InsertStmt{Columns: yyS[yypt-2].item.([]*ast.ColumnName), Select: yyS[yypt-0].statement.(ast.ResultSetNode)} } - case 1326: + case 1341: { parser.yyVAL.item = &ast.InsertStmt{Columns: yyS[yypt-2].item.([]*ast.ColumnName), Select: yyS[yypt-0].statement.(ast.ResultSetNode)} } - case 1327: + case 1342: { var sel ast.ResultSetNode switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) { @@ -17417,23 +17556,23 @@ yynewstate: } parser.yyVAL.item = &ast.InsertStmt{Columns: yyS[yypt-2].item.([]*ast.ColumnName), Select: sel} } - case 1328: + case 1343: { parser.yyVAL.item = &ast.InsertStmt{Lists: yyS[yypt-0].item.([][]ast.ExprNode)} } - case 1329: + case 1344: { parser.yyVAL.item = &ast.InsertStmt{Select: yyS[yypt-0].statement.(ast.ResultSetNode)} } - case 1330: + case 1345: { parser.yyVAL.item = &ast.InsertStmt{Select: yyS[yypt-0].statement.(ast.ResultSetNode)} } - case 1331: + case 1346: { parser.yyVAL.item = &ast.InsertStmt{Select: yyS[yypt-0].statement.(ast.ResultSetNode)} } - case 1332: + case 1347: { var sel ast.ResultSetNode switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) { @@ -17446,39 +17585,39 @@ yynewstate: } parser.yyVAL.item = &ast.InsertStmt{Select: sel} } - case 1333: + case 1348: { parser.yyVAL.item = yyS[yypt-0].item.(*ast.InsertStmt) } - case 1336: + case 1351: { parser.yyVAL.item = [][]ast.ExprNode{yyS[yypt-0].item.([]ast.ExprNode)} } - case 1337: + case 1352: { parser.yyVAL.item = append(yyS[yypt-2].item.([][]ast.ExprNode), yyS[yypt-0].item.([]ast.ExprNode)) } - case 1338: + case 1353: { parser.yyVAL.item = yyS[yypt-1].item } - case 1339: + case 1354: { parser.yyVAL.item = []ast.ExprNode{} } - case 1341: + case 1356: { parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.ExprNode), yyS[yypt-0].expr) } - case 1342: + case 1357: { parser.yyVAL.item = []ast.ExprNode{yyS[yypt-0].expr} } - case 1344: + case 1359: { parser.yyVAL.expr = &ast.DefaultExpr{} } - case 1345: + case 1360: { parser.yyVAL.item = &ast.InsertStmt{ Columns: []*ast.ColumnName{yyS[yypt-2].item.(*ast.ColumnName)}, @@ -17486,22 +17625,22 @@ yynewstate: Setlist: true, } } - case 1346: + case 1361: { ins := yyS[yypt-4].item.(*ast.InsertStmt) ins.Columns = append(ins.Columns, yyS[yypt-2].item.(*ast.ColumnName)) ins.Lists[0] = append(ins.Lists[0], yyS[yypt-0].expr.(ast.ExprNode)) parser.yyVAL.item = ins } - case 1347: + case 1362: { parser.yyVAL.item = nil } - case 1348: + case 1363: { parser.yyVAL.item = yyS[yypt-0].item } - case 1349: + case 1364: { x := yyS[yypt-0].item.(*ast.InsertStmt) if yyS[yypt-5].item != nil { @@ -17514,31 +17653,31 @@ yynewstate: x.PartitionNames = yyS[yypt-1].item.([]model.CIStr) parser.yyVAL.statement = x } - case 1350: + case 1365: { parser.yyVAL.expr = ast.NewValueExpr(false, parser.charset, parser.collation) } - case 1351: + case 1366: { parser.yyVAL.expr = ast.NewValueExpr(nil, parser.charset, parser.collation) } - case 1352: + case 1367: { parser.yyVAL.expr = ast.NewValueExpr(true, parser.charset, parser.collation) } - case 1353: + case 1368: { parser.yyVAL.expr = ast.NewValueExpr(yyS[yypt-0].item, parser.charset, parser.collation) } - case 1354: + case 1369: { parser.yyVAL.expr = ast.NewValueExpr(yyS[yypt-0].item, parser.charset, parser.collation) } - case 1355: + case 1370: { parser.yyVAL.expr = ast.NewValueExpr(yyS[yypt-0].item, parser.charset, parser.collation) } - case 1357: + case 1372: { // See https://dev.mysql.com/doc/refman/5.7/en/charset-literal.html co, err := charset.GetDefaultCollationLegacy(yyS[yypt-1].ident) @@ -17556,15 +17695,15 @@ yynewstate: } parser.yyVAL.expr = expr } - case 1358: + case 1373: { parser.yyVAL.expr = ast.NewValueExpr(yyS[yypt-0].item, parser.charset, parser.collation) } - case 1359: + case 1374: { parser.yyVAL.expr = ast.NewValueExpr(yyS[yypt-0].item, parser.charset, parser.collation) } - case 1360: + case 1375: { co, err := charset.GetDefaultCollationLegacy(yyS[yypt-1].ident) if err != nil { @@ -17581,7 +17720,7 @@ yynewstate: } parser.yyVAL.expr = expr } - case 1361: + case 1376: { co, err := charset.GetDefaultCollationLegacy(yyS[yypt-1].ident) if err != nil { @@ -17598,12 +17737,12 @@ yynewstate: } parser.yyVAL.expr = expr } - case 1362: + case 1377: { expr := ast.NewValueExpr(yyS[yypt-0].ident, parser.charset, parser.collation) parser.yyVAL.expr = expr } - case 1363: + case 1378: { valExpr := yyS[yypt-1].expr.(ast.ValueExpr) strLit := valExpr.GetString() @@ -17616,31 +17755,31 @@ yynewstate: } parser.yyVAL.expr = expr } - case 1364: + case 1379: { parser.yyVAL.item = []*ast.AlterOrderItem{yyS[yypt-0].item.(*ast.AlterOrderItem)} } - case 1365: + case 1380: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.AlterOrderItem), yyS[yypt-0].item.(*ast.AlterOrderItem)) } - case 1366: + case 1381: { parser.yyVAL.item = &ast.AlterOrderItem{Column: yyS[yypt-1].item.(*ast.ColumnName), Desc: yyS[yypt-0].item.(bool)} } - case 1367: + case 1382: { parser.yyVAL.item = &ast.OrderByClause{Items: yyS[yypt-0].item.([]*ast.ByItem)} } - case 1368: + case 1383: { parser.yyVAL.item = []*ast.ByItem{yyS[yypt-0].item.(*ast.ByItem)} } - case 1369: + case 1384: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.ByItem), yyS[yypt-0].item.(*ast.ByItem)) } - case 1370: + case 1385: { expr := yyS[yypt-0].expr valueExpr, ok := expr.(ast.ValueExpr) @@ -17652,7 +17791,7 @@ yynewstate: } parser.yyVAL.item = &ast.ByItem{Expr: expr, NullOrder: true} } - case 1371: + case 1386: { expr := yyS[yypt-1].expr valueExpr, ok := expr.(ast.ValueExpr) @@ -17664,55 +17803,55 @@ yynewstate: } parser.yyVAL.item = &ast.ByItem{Expr: expr, Desc: yyS[yypt-0].item.(bool)} } - case 1372: + case 1387: { parser.yyVAL.item = false } - case 1373: + case 1388: { parser.yyVAL.item = true } - case 1374: + case 1389: { parser.yyVAL.item = false // ASC by default } - case 1375: + case 1390: { parser.yyVAL.item = false } - case 1376: + case 1391: { parser.yyVAL.item = true } - case 1377: + case 1392: { parser.yyVAL.item = nil } - case 1379: + case 1394: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Or, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 1380: + case 1395: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.And, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 1381: + case 1396: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.LeftShift, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 1382: + case 1397: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.RightShift, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 1383: + case 1398: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Plus, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 1384: + case 1399: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Minus, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 1385: + case 1400: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr("DATE_ADD"), @@ -17723,7 +17862,7 @@ yynewstate: }, } } - case 1386: + case 1401: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr("DATE_SUB"), @@ -17734,7 +17873,7 @@ yynewstate: }, } } - case 1387: + case 1402: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr("DATE_ADD"), @@ -17745,44 +17884,44 @@ yynewstate: }, } } - case 1388: + case 1403: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Mul, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 1389: + case 1404: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Div, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 1390: + case 1405: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Mod, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 1391: + case 1406: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.IntDiv, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 1392: + case 1407: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Mod, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 1393: + case 1408: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Xor, L: yyS[yypt-2].expr, R: yyS[yypt-0].expr} } - case 1395: + case 1410: { parser.yyVAL.expr = &ast.ColumnNameExpr{Name: &ast.ColumnName{ Name: model.NewCIStr(yyS[yypt-0].ident), }} } - case 1396: + case 1411: { parser.yyVAL.expr = &ast.ColumnNameExpr{Name: &ast.ColumnName{ Table: model.NewCIStr(yyS[yypt-2].ident), Name: model.NewCIStr(yyS[yypt-0].ident), }} } - case 1397: + case 1412: { parser.yyVAL.expr = &ast.ColumnNameExpr{Name: &ast.ColumnName{ Schema: model.NewCIStr(yyS[yypt-4].ident), @@ -17790,39 +17929,39 @@ yynewstate: Name: model.NewCIStr(yyS[yypt-0].ident), }} } - case 1402: + case 1417: { parser.yyVAL.expr = &ast.SetCollationExpr{Expr: yyS[yypt-2].expr, Collate: yyS[yypt-0].ident} } - case 1405: + case 1420: { parser.yyVAL.expr = ast.NewParamMarkerExpr(yyS[yypt].offset) } - case 1408: + case 1423: { parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.Not2, V: yyS[yypt-0].expr} } - case 1409: + case 1424: { parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.BitNeg, V: yyS[yypt-0].expr} } - case 1410: + case 1425: { parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.Minus, V: yyS[yypt-0].expr} } - case 1411: + case 1426: { parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.Plus, V: yyS[yypt-0].expr} } - case 1412: + case 1427: { parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.Concat), Args: []ast.ExprNode{yyS[yypt-2].expr, yyS[yypt-0].expr}} } - case 1413: + case 1428: { parser.yyVAL.expr = &ast.UnaryOperationExpr{Op: opcode.Not2, V: yyS[yypt-0].expr} } - case 1415: + case 1430: { startOffset := parser.startOffset(&yyS[yypt-1]) endOffset := parser.endOffset(&yyS[yypt]) @@ -17830,23 +17969,23 @@ yynewstate: expr.SetText(parser.lexer.client, parser.src[startOffset:endOffset]) parser.yyVAL.expr = &ast.ParenthesesExpr{Expr: expr} } - case 1416: + case 1431: { values := append(yyS[yypt-3].item.([]ast.ExprNode), yyS[yypt-1].expr) parser.yyVAL.expr = &ast.RowExpr{Values: values} } - case 1417: + case 1432: { values := append(yyS[yypt-3].item.([]ast.ExprNode), yyS[yypt-1].expr) parser.yyVAL.expr = &ast.RowExpr{Values: values} } - case 1418: + case 1433: { sq := yyS[yypt-0].expr.(*ast.SubqueryExpr) sq.Exists = true parser.yyVAL.expr = &ast.ExistsSubqueryExpr{Sel: sq} } - case 1419: + case 1434: { /* * ODBC escape syntax. @@ -17870,7 +18009,7 @@ yynewstate: parser.yyVAL.expr = yyS[yypt-1].expr } } - case 1420: + case 1435: { // See https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#operator_binary tp := types.NewFieldType(mysql.TypeString) @@ -17883,7 +18022,7 @@ yynewstate: FunctionType: ast.CastBinaryOperator, } } - case 1421: + case 1436: { /* See https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_cast */ tp := yyS[yypt-2].item.(*types.FieldType) @@ -17909,7 +18048,7 @@ yynewstate: ExplicitCharSet: explicitCharset, } } - case 1422: + case 1437: { x := &ast.CaseExpr{WhenClauses: yyS[yypt-2].item.([]*ast.WhenClause)} if yyS[yypt-3].expr != nil { @@ -17920,7 +18059,7 @@ yynewstate: } parser.yyVAL.expr = x } - case 1423: + case 1438: { // See https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_convert tp := yyS[yypt-1].item.(*types.FieldType) @@ -17940,7 +18079,7 @@ yynewstate: ExplicitCharSet: explicitCharset, } } - case 1424: + case 1439: { // See https://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_convert charset1 := ast.NewValueExpr(yyS[yypt-1].ident, "", "") @@ -17949,70 +18088,70 @@ yynewstate: Args: []ast.ExprNode{yyS[yypt-3].expr, charset1}, } } - case 1425: + case 1440: { parser.yyVAL.expr = &ast.DefaultExpr{Name: yyS[yypt-1].expr.(*ast.ColumnNameExpr).Name} } - case 1426: + case 1441: { parser.yyVAL.expr = &ast.ValuesExpr{Column: yyS[yypt-1].expr.(*ast.ColumnNameExpr)} } - case 1427: + case 1442: { expr := ast.NewValueExpr(yyS[yypt-0].ident, parser.charset, parser.collation) parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.JSONExtract), Args: []ast.ExprNode{yyS[yypt-2].expr, expr}} } - case 1428: + case 1443: { expr := ast.NewValueExpr(yyS[yypt-0].ident, parser.charset, parser.collation) extract := &ast.FuncCallExpr{FnName: model.NewCIStr(ast.JSONExtract), Args: []ast.ExprNode{yyS[yypt-2].expr, expr}} parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.JSONUnquote), Args: []ast.ExprNode{extract}} } - case 1429: + case 1444: { parser.yyVAL.item = false } - case 1430: + case 1445: { parser.yyVAL.item = true } - case 1433: + case 1448: { parser.yyVAL.item = false } - case 1434: + case 1449: { parser.yyVAL.item = true } - case 1435: + case 1450: { parser.yyVAL.item = false } - case 1437: + case 1452: { parser.yyVAL.item = true } - case 1440: + case 1455: { parser.yyVAL.item = true } - case 1485: + case 1500: { parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].ident), Args: yyS[yypt-1].item.([]ast.ExprNode)} } - case 1486: + case 1501: { parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].ident), Args: yyS[yypt-1].item.([]ast.ExprNode)} } - case 1487: + case 1502: { parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-1].ident)} } - case 1488: + case 1503: { parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-2].ident)} } - case 1489: + case 1504: { args := []ast.ExprNode{} if yyS[yypt-0].item != nil { @@ -18020,7 +18159,7 @@ yynewstate: } parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-1].ident), Args: args} } - case 1490: + case 1505: { nilVal := ast.NewValueExpr(nil, parser.charset, parser.collation) args := yyS[yypt-1].item.([]ast.ExprNode) @@ -18029,7 +18168,7 @@ yynewstate: Args: append(args, nilVal), } } - case 1491: + case 1506: { charset1 := ast.NewValueExpr(yyS[yypt-1].ident, "", "") args := yyS[yypt-3].item.([]ast.ExprNode) @@ -18038,42 +18177,42 @@ yynewstate: Args: append(args, charset1), } } - case 1492: + case 1507: { expr := ast.NewValueExpr(yyS[yypt-0].ident, "", "") parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.DateLiteral), Args: []ast.ExprNode{expr}} } - case 1493: + case 1508: { expr := ast.NewValueExpr(yyS[yypt-0].ident, "", "") parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.TimeLiteral), Args: []ast.ExprNode{expr}} } - case 1494: + case 1509: { expr := ast.NewValueExpr(yyS[yypt-0].ident, "", "") parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.TimestampLiteral), Args: []ast.ExprNode{expr}} } - case 1495: + case 1510: { parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.InsertFunc), Args: yyS[yypt-1].item.([]ast.ExprNode)} } - case 1496: + case 1511: { parser.yyVAL.expr = &ast.BinaryOperationExpr{Op: opcode.Mod, L: yyS[yypt-3].expr, R: yyS[yypt-1].expr} } - case 1497: + case 1512: { parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(ast.PasswordFunc), Args: yyS[yypt-1].item.([]ast.ExprNode)} } - case 1498: + case 1513: { parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].ident), Args: yyS[yypt-1].item.([]ast.ExprNode)} } - case 1499: + case 1514: { parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-3].ident), Args: yyS[yypt-1].item.([]ast.ExprNode)} } - case 1500: + case 1515: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-5].ident), @@ -18084,7 +18223,7 @@ yynewstate: }, } } - case 1501: + case 1516: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-7].ident), @@ -18095,7 +18234,7 @@ yynewstate: }, } } - case 1502: + case 1517: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-7].ident), @@ -18106,7 +18245,7 @@ yynewstate: }, } } - case 1503: + case 1518: { timeUnit := &ast.TimeUnitExpr{Unit: yyS[yypt-3].item.(ast.TimeUnitType)} parser.yyVAL.expr = &ast.FuncCallExpr{ @@ -18114,7 +18253,7 @@ yynewstate: Args: []ast.ExprNode{timeUnit, yyS[yypt-1].expr}, } } - case 1504: + case 1519: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-5].ident), @@ -18124,67 +18263,67 @@ yynewstate: }, } } - case 1505: + case 1520: { parser.yyVAL.expr = &ast.FuncCallExpr{FnName: model.NewCIStr(yyS[yypt-5].ident), Args: []ast.ExprNode{yyS[yypt-3].expr, yyS[yypt-1].expr}} } - case 1506: + case 1521: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-5].ident), Args: []ast.ExprNode{yyS[yypt-3].expr, yyS[yypt-1].expr}, } } - case 1507: + case 1522: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-5].ident), Args: []ast.ExprNode{yyS[yypt-3].expr, yyS[yypt-1].expr}, } } - case 1508: + case 1523: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-7].ident), Args: []ast.ExprNode{yyS[yypt-5].expr, yyS[yypt-3].expr, yyS[yypt-1].expr}, } } - case 1509: + case 1524: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-7].ident), Args: []ast.ExprNode{yyS[yypt-5].expr, yyS[yypt-3].expr, yyS[yypt-1].expr}, } } - case 1510: + case 1525: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-7].ident), Args: []ast.ExprNode{&ast.TimeUnitExpr{Unit: yyS[yypt-5].item.(ast.TimeUnitType)}, yyS[yypt-3].expr, yyS[yypt-1].expr}, } } - case 1511: + case 1526: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-7].ident), Args: []ast.ExprNode{&ast.TimeUnitExpr{Unit: yyS[yypt-5].item.(ast.TimeUnitType)}, yyS[yypt-3].expr, yyS[yypt-1].expr}, } } - case 1512: + case 1527: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-3].ident), Args: []ast.ExprNode{yyS[yypt-1].expr}, } } - case 1513: + case 1528: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-5].ident), Args: []ast.ExprNode{yyS[yypt-1].expr, yyS[yypt-3].expr}, } } - case 1514: + case 1529: { spaceVal := ast.NewValueExpr(" ", parser.charset, parser.collation) direction := &ast.TrimDirectionExpr{Direction: yyS[yypt-3].item.(ast.TrimDirectionType)} @@ -18193,7 +18332,7 @@ yynewstate: Args: []ast.ExprNode{yyS[yypt-1].expr, spaceVal, direction}, } } - case 1515: + case 1530: { direction := &ast.TrimDirectionExpr{Direction: yyS[yypt-4].item.(ast.TrimDirectionType)} parser.yyVAL.expr = &ast.FuncCallExpr{ @@ -18201,63 +18340,63 @@ yynewstate: Args: []ast.ExprNode{yyS[yypt-1].expr, yyS[yypt-3].expr, direction}, } } - case 1516: + case 1531: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-3].ident), Args: []ast.ExprNode{yyS[yypt-1].expr}, } } - case 1517: + case 1532: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-6].ident), Args: []ast.ExprNode{yyS[yypt-4].expr, ast.NewValueExpr("CHAR", parser.charset, parser.collation), ast.NewValueExpr(yyS[yypt-1].item, parser.charset, parser.collation)}, } } - case 1518: + case 1533: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-6].ident), Args: []ast.ExprNode{yyS[yypt-4].expr, ast.NewValueExpr("BINARY", parser.charset, parser.collation), ast.NewValueExpr(yyS[yypt-1].item, parser.charset, parser.collation)}, } } - case 1520: + case 1535: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-7].ident), Args: []ast.ExprNode{yyS[yypt-5].expr, yyS[yypt-3].expr, yyS[yypt-1].expr}, } } - case 1521: + case 1536: { parser.yyVAL.item = ast.GetFormatSelectorDate } - case 1522: + case 1537: { parser.yyVAL.item = ast.GetFormatSelectorDatetime } - case 1523: + case 1538: { parser.yyVAL.item = ast.GetFormatSelectorTime } - case 1524: + case 1539: { parser.yyVAL.item = ast.GetFormatSelectorDatetime } - case 1529: + case 1544: { parser.yyVAL.item = ast.TrimBoth } - case 1530: + case 1545: { parser.yyVAL.item = ast.TrimLeading } - case 1531: + case 1546: { parser.yyVAL.item = ast.TrimTrailing } - case 1532: + case 1547: { objNameExpr := &ast.TableNameExpr{ Name: yyS[yypt-1].item.(*ast.TableName), @@ -18267,7 +18406,7 @@ yynewstate: Args: []ast.ExprNode{objNameExpr}, } } - case 1533: + case 1548: { objNameExpr := &ast.TableNameExpr{ Name: yyS[yypt-3].item.(*ast.TableName), @@ -18278,7 +18417,7 @@ yynewstate: Args: []ast.ExprNode{objNameExpr, valueExpr}, } } - case 1535: + case 1550: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool), Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -18286,15 +18425,15 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool)} } } - case 1536: + case 1551: { parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-3].ident, Args: yyS[yypt-1].item.([]ast.ExprNode), Distinct: false} } - case 1537: + case 1552: { parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-3].ident, Args: yyS[yypt-1].item.([]ast.ExprNode)} } - case 1538: + case 1553: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -18302,7 +18441,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}} } } - case 1539: + case 1554: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -18310,7 +18449,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}} } } - case 1540: + case 1555: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -18318,7 +18457,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}} } } - case 1541: + case 1556: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -18326,7 +18465,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}} } } - case 1542: + case 1557: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -18334,7 +18473,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}} } } - case 1543: + case 1558: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -18342,11 +18481,11 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}} } } - case 1544: + case 1559: { parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: yyS[yypt-1].item.([]ast.ExprNode), Distinct: true} } - case 1545: + case 1560: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -18354,7 +18493,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}} } } - case 1546: + case 1561: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -18362,7 +18501,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}} } } - case 1547: + case 1562: { args := []ast.ExprNode{ast.NewValueExpr(1, parser.charset, parser.collation)} if yyS[yypt-0].item != nil { @@ -18371,7 +18510,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: args} } } - case 1548: + case 1563: { args := yyS[yypt-4].item.([]ast.ExprNode) args = append(args, yyS[yypt-2].item.(ast.ExprNode)) @@ -18385,7 +18524,7 @@ yynewstate: parser.yyVAL.expr = agg } } - case 1549: + case 1564: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool), Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -18393,7 +18532,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool)} } } - case 1550: + case 1565: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool), Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -18401,7 +18540,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool)} } } - case 1551: + case 1566: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool), Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -18409,7 +18548,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool)} } } - case 1552: + case 1567: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: ast.AggFuncStddevPop, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool), Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -18417,7 +18556,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: ast.AggFuncStddevPop, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool)} } } - case 1553: + case 1568: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool), Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -18425,7 +18564,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool)} } } - case 1554: + case 1569: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: ast.AggFuncVarPop, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool), Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -18433,7 +18572,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: ast.AggFuncVarPop, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool)} } } - case 1555: + case 1570: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool), Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -18441,7 +18580,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Distinct: yyS[yypt-3].item.(bool)} } } - case 1556: + case 1571: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -18449,7 +18588,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}} } } - case 1557: + case 1572: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -18457,7 +18596,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}} } } - case 1558: + case 1573: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-6].ident, Args: []ast.ExprNode{yyS[yypt-4].expr, yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -18465,7 +18604,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-6].ident, Args: []ast.ExprNode{yyS[yypt-4].expr, yyS[yypt-2].expr}} } } - case 1559: + case 1574: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-7].ident, Args: []ast.ExprNode{yyS[yypt-4].expr, yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -18473,7 +18612,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-7].ident, Args: []ast.ExprNode{yyS[yypt-4].expr, yyS[yypt-2].expr}} } } - case 1560: + case 1575: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-7].ident, Args: []ast.ExprNode{yyS[yypt-5].expr, yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -18481,7 +18620,7 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-7].ident, Args: []ast.ExprNode{yyS[yypt-5].expr, yyS[yypt-2].expr}} } } - case 1561: + case 1576: { if yyS[yypt-0].item != nil { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-8].ident, Args: []ast.ExprNode{yyS[yypt-5].expr, yyS[yypt-2].expr}, Spec: *(yyS[yypt-0].item.(*ast.WindowSpec))} @@ -18489,22 +18628,22 @@ yynewstate: parser.yyVAL.expr = &ast.AggregateFuncExpr{F: yyS[yypt-8].ident, Args: []ast.ExprNode{yyS[yypt-5].expr, yyS[yypt-2].expr}} } } - case 1562: + case 1577: { parser.yyVAL.item = ast.NewValueExpr(",", "", "") } - case 1563: + case 1578: { parser.yyVAL.item = ast.NewValueExpr(yyS[yypt-0].ident, "", "") } - case 1564: + case 1579: { parser.yyVAL.expr = &ast.FuncCallExpr{ FnName: model.NewCIStr(yyS[yypt-3].ident), Args: yyS[yypt-1].item.([]ast.ExprNode), } } - case 1565: + case 1580: { var tp ast.FuncCallExprType if isInTokenMap(yyS[yypt-3].ident) { @@ -18519,159 +18658,159 @@ yynewstate: Args: yyS[yypt-1].item.([]ast.ExprNode), } } - case 1566: + case 1581: { parser.yyVAL.item = nil } - case 1567: + case 1582: { parser.yyVAL.item = nil } - case 1568: + case 1583: { expr := ast.NewValueExpr(yyS[yypt-1].item, parser.charset, parser.collation) parser.yyVAL.item = expr } - case 1570: + case 1585: { parser.yyVAL.item = ast.TimeUnitSecondMicrosecond } - case 1571: + case 1586: { parser.yyVAL.item = ast.TimeUnitMinuteMicrosecond } - case 1572: + case 1587: { parser.yyVAL.item = ast.TimeUnitMinuteSecond } - case 1573: + case 1588: { parser.yyVAL.item = ast.TimeUnitHourMicrosecond } - case 1574: + case 1589: { parser.yyVAL.item = ast.TimeUnitHourSecond } - case 1575: + case 1590: { parser.yyVAL.item = ast.TimeUnitHourMinute } - case 1576: + case 1591: { parser.yyVAL.item = ast.TimeUnitDayMicrosecond } - case 1577: + case 1592: { parser.yyVAL.item = ast.TimeUnitDaySecond } - case 1578: + case 1593: { parser.yyVAL.item = ast.TimeUnitDayMinute } - case 1579: + case 1594: { parser.yyVAL.item = ast.TimeUnitDayHour } - case 1580: + case 1595: { parser.yyVAL.item = ast.TimeUnitYearMonth } - case 1581: + case 1596: { parser.yyVAL.item = ast.TimeUnitMicrosecond } - case 1582: + case 1597: { parser.yyVAL.item = ast.TimeUnitSecond } - case 1583: + case 1598: { parser.yyVAL.item = ast.TimeUnitMinute } - case 1584: + case 1599: { parser.yyVAL.item = ast.TimeUnitHour } - case 1585: + case 1600: { parser.yyVAL.item = ast.TimeUnitDay } - case 1586: + case 1601: { parser.yyVAL.item = ast.TimeUnitWeek } - case 1587: + case 1602: { parser.yyVAL.item = ast.TimeUnitMonth } - case 1588: + case 1603: { parser.yyVAL.item = ast.TimeUnitQuarter } - case 1589: + case 1604: { parser.yyVAL.item = ast.TimeUnitYear } - case 1590: + case 1605: { parser.yyVAL.item = ast.TimeUnitSecond } - case 1591: + case 1606: { parser.yyVAL.item = ast.TimeUnitMinute } - case 1592: + case 1607: { parser.yyVAL.item = ast.TimeUnitHour } - case 1593: + case 1608: { parser.yyVAL.item = ast.TimeUnitDay } - case 1594: + case 1609: { parser.yyVAL.item = ast.TimeUnitWeek } - case 1595: + case 1610: { parser.yyVAL.item = ast.TimeUnitMonth } - case 1596: + case 1611: { parser.yyVAL.item = ast.TimeUnitQuarter } - case 1597: + case 1612: { parser.yyVAL.item = ast.TimeUnitYear } - case 1598: + case 1613: { parser.yyVAL.expr = nil } - case 1600: + case 1615: { parser.yyVAL.item = []*ast.WhenClause{yyS[yypt-0].item.(*ast.WhenClause)} } - case 1601: + case 1616: { parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.WhenClause), yyS[yypt-0].item.(*ast.WhenClause)) } - case 1602: + case 1617: { parser.yyVAL.item = &ast.WhenClause{ Expr: yyS[yypt-2].expr, Result: yyS[yypt-0].expr, } } - case 1603: + case 1618: { parser.yyVAL.item = nil } - case 1604: + case 1619: { parser.yyVAL.item = yyS[yypt-0].expr } - case 1605: + case 1620: { tp := types.NewFieldType(mysql.TypeVarString) tp.SetFlen(yyS[yypt-0].item.(int)) // TODO: Flen should be the flen of expression @@ -18683,7 +18822,7 @@ yynewstate: tp.AddFlag(mysql.BinaryFlag) parser.yyVAL.item = tp } - case 1606: + case 1621: { tp := types.NewFieldType(mysql.TypeVarString) tp.SetFlen(yyS[yypt-1].item.(int)) // TODO: Flen should be the flen of expression @@ -18706,7 +18845,7 @@ yynewstate: } parser.yyVAL.item = tp } - case 1607: + case 1622: { tp := types.NewFieldType(mysql.TypeDate) tp.SetCharset(charset.CharsetBin) @@ -18714,7 +18853,7 @@ yynewstate: tp.AddFlag(mysql.BinaryFlag) parser.yyVAL.item = tp } - case 1608: + case 1623: { tp := types.NewFieldType(mysql.TypeYear) tp.SetCharset(charset.CharsetBin) @@ -18722,7 +18861,7 @@ yynewstate: tp.AddFlag(mysql.BinaryFlag) parser.yyVAL.item = tp } - case 1609: + case 1624: { tp := types.NewFieldType(mysql.TypeDatetime) flen, _ := mysql.GetDefaultFieldLengthAndDecimalForCast(mysql.TypeDatetime) @@ -18736,7 +18875,7 @@ yynewstate: tp.AddFlag(mysql.BinaryFlag) parser.yyVAL.item = tp } - case 1610: + case 1625: { fopt := yyS[yypt-0].item.(*ast.FloatOpt) tp := types.NewFieldType(mysql.TypeNewDecimal) @@ -18747,7 +18886,7 @@ yynewstate: tp.AddFlag(mysql.BinaryFlag) parser.yyVAL.item = tp } - case 1611: + case 1626: { tp := types.NewFieldType(mysql.TypeDuration) flen, _ := mysql.GetDefaultFieldLengthAndDecimalForCast(mysql.TypeDuration) @@ -18761,7 +18900,7 @@ yynewstate: tp.AddFlag(mysql.BinaryFlag) parser.yyVAL.item = tp } - case 1612: + case 1627: { tp := types.NewFieldType(mysql.TypeLonglong) tp.SetCharset(charset.CharsetBin) @@ -18769,7 +18908,7 @@ yynewstate: tp.AddFlag(mysql.BinaryFlag) parser.yyVAL.item = tp } - case 1613: + case 1628: { tp := types.NewFieldType(mysql.TypeLonglong) tp.AddFlag(mysql.UnsignedFlag | mysql.BinaryFlag) @@ -18777,7 +18916,7 @@ yynewstate: tp.SetCollate(charset.CollationBin) parser.yyVAL.item = tp } - case 1614: + case 1629: { tp := types.NewFieldType(mysql.TypeJSON) tp.AddFlag(mysql.BinaryFlag | mysql.ParseToJSONFlag) @@ -18785,7 +18924,7 @@ yynewstate: tp.SetCollate(mysql.DefaultCollationName) parser.yyVAL.item = tp } - case 1615: + case 1630: { tp := types.NewFieldType(mysql.TypeDouble) flen, decimal := mysql.GetDefaultFieldLengthAndDecimalForCast(mysql.TypeDouble) @@ -18796,7 +18935,7 @@ yynewstate: tp.SetCollate(charset.CollationBin) parser.yyVAL.item = tp } - case 1616: + case 1631: { tp := types.NewFieldType(mysql.TypeFloat) fopt := yyS[yypt-0].item.(*ast.FloatOpt) @@ -18813,7 +18952,7 @@ yynewstate: tp.SetCollate(charset.CollationBin) parser.yyVAL.item = tp } - case 1617: + case 1632: { var tp *types.FieldType if parser.lexer.GetSQLMode().HasRealAsFloatMode() { @@ -18829,7 +18968,7 @@ yynewstate: tp.SetCollate(charset.CollationBin) parser.yyVAL.item = tp } - case 1618: + case 1633: { elementType := yyS[yypt-1].item.(*ast.VectorElementType) if elementType.Tp != mysql.TypeFloat { @@ -18842,27 +18981,27 @@ yynewstate: tp.SetCollate(charset.CollationBin) parser.yyVAL.item = tp } - case 1619: + case 1634: { parser.yyVAL.item = mysql.LowPriority } - case 1620: + case 1635: { parser.yyVAL.item = mysql.HighPriority } - case 1621: + case 1636: { parser.yyVAL.item = mysql.DelayedPriority } - case 1622: + case 1637: { parser.yyVAL.item = mysql.NoPriority } - case 1624: + case 1639: { parser.yyVAL.item = &ast.TableName{Name: model.NewCIStr(yyS[yypt-0].ident)} } - case 1625: + case 1640: { schema := yyS[yypt-2].ident if isInCorrectIdentifierName(schema) { @@ -18871,45 +19010,45 @@ yynewstate: } parser.yyVAL.item = &ast.TableName{Schema: model.NewCIStr(schema), Name: model.NewCIStr(yyS[yypt-0].ident)} } - case 1626: + case 1641: { parser.yyVAL.item = &ast.TableName{Schema: model.NewCIStr("*"), Name: model.NewCIStr(yyS[yypt-0].ident)} } - case 1627: + case 1642: { tbl := []*ast.TableName{yyS[yypt-0].item.(*ast.TableName)} parser.yyVAL.item = tbl } - case 1628: + case 1643: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.TableName), yyS[yypt-0].item.(*ast.TableName)) } - case 1629: + case 1644: { parser.yyVAL.item = &ast.TableName{Name: model.NewCIStr(yyS[yypt-1].ident)} } - case 1630: + case 1645: { parser.yyVAL.item = &ast.TableName{Schema: model.NewCIStr(yyS[yypt-3].ident), Name: model.NewCIStr(yyS[yypt-1].ident)} } - case 1631: + case 1646: { tbl := []*ast.TableName{yyS[yypt-0].item.(*ast.TableName)} parser.yyVAL.item = tbl } - case 1632: + case 1647: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.TableName), yyS[yypt-0].item.(*ast.TableName)) } - case 1635: + case 1650: { parser.yyVAL.item = false } - case 1636: + case 1651: { parser.yyVAL.item = true } - case 1637: + case 1652: { var sqlText string var sqlVar *ast.VariableExpr @@ -18925,94 +19064,94 @@ yynewstate: SQLVar: sqlVar, } } - case 1638: + case 1653: { parser.yyVAL.item = yyS[yypt-0].ident } - case 1639: + case 1654: { parser.yyVAL.item = yyS[yypt-0].expr } - case 1640: + case 1655: { parser.yyVAL.statement = &ast.ExecuteStmt{Name: yyS[yypt-0].ident} } - case 1641: + case 1656: { parser.yyVAL.statement = &ast.ExecuteStmt{ Name: yyS[yypt-2].ident, UsingVars: yyS[yypt-0].item.([]ast.ExprNode), } } - case 1642: + case 1657: { parser.yyVAL.item = []ast.ExprNode{yyS[yypt-0].expr} } - case 1643: + case 1658: { parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.ExprNode), yyS[yypt-0].expr) } - case 1644: + case 1659: { parser.yyVAL.statement = &ast.DeallocateStmt{Name: yyS[yypt-0].ident} } - case 1647: + case 1662: { parser.yyVAL.statement = &ast.RollbackStmt{} } - case 1648: + case 1663: { parser.yyVAL.statement = &ast.RollbackStmt{CompletionType: yyS[yypt-0].item.(ast.CompletionType)} } - case 1649: + case 1664: { parser.yyVAL.statement = &ast.RollbackStmt{SavepointName: yyS[yypt-0].ident} } - case 1650: + case 1665: { parser.yyVAL.statement = &ast.RollbackStmt{SavepointName: yyS[yypt-0].ident} } - case 1651: + case 1666: { parser.yyVAL.item = ast.CompletionTypeChain } - case 1652: + case 1667: { parser.yyVAL.item = ast.CompletionTypeRelease } - case 1653: + case 1668: { parser.yyVAL.item = ast.CompletionTypeDefault } - case 1654: + case 1669: { parser.yyVAL.item = ast.CompletionTypeChain } - case 1655: + case 1670: { parser.yyVAL.item = ast.CompletionTypeDefault } - case 1656: + case 1671: { parser.yyVAL.item = ast.CompletionTypeRelease } - case 1657: + case 1672: { parser.yyVAL.item = ast.CompletionTypeDefault } - case 1658: + case 1673: { parser.yyVAL.statement = &ast.ShutdownStmt{} } - case 1659: + case 1674: { parser.yyVAL.statement = &ast.RestartStmt{} } - case 1660: + case 1675: { parser.yyVAL.statement = &ast.HelpStmt{Topic: yyS[yypt-0].ident} } - case 1661: + case 1676: { st := &ast.SelectStmt{ SelectStmtOpts: yyS[yypt-2].item.(*ast.SelectStmtOpts), @@ -19028,7 +19167,7 @@ yynewstate: } parser.yyVAL.item = st } - case 1662: + case 1677: { st := yyS[yypt-2].item.(*ast.SelectStmt) lastField := st.Fields.Fields[len(st.Fields.Fields)-1] @@ -19040,7 +19179,7 @@ yynewstate: st.Where = yyS[yypt-0].item.(ast.ExprNode) } } - case 1663: + case 1678: { st := yyS[yypt-6].item.(*ast.SelectStmt) st.From = yyS[yypt-4].item.(*ast.TableRefsClause) @@ -19063,11 +19202,11 @@ yynewstate: } parser.yyVAL.item = st } - case 1664: + case 1679: { parser.yyVAL.item = nil } - case 1665: + case 1680: { var repSeed ast.ExprNode if yyS[yypt-0].expr != nil { @@ -19080,7 +19219,7 @@ yynewstate: RepeatableSeed: repSeed, } } - case 1666: + case 1681: { var repSeed ast.ExprNode if yyS[yypt-0].expr != nil { @@ -19091,43 +19230,43 @@ yynewstate: RepeatableSeed: repSeed, } } - case 1667: + case 1682: { parser.yyVAL.item = ast.SampleMethodTypeNone } - case 1668: + case 1683: { parser.yyVAL.item = ast.SampleMethodTypeSystem } - case 1669: + case 1684: { parser.yyVAL.item = ast.SampleMethodTypeBernoulli } - case 1670: + case 1685: { parser.yyVAL.item = ast.SampleMethodTypeTiDBRegion } - case 1671: + case 1686: { parser.yyVAL.item = ast.SampleClauseUnitTypeDefault } - case 1672: + case 1687: { parser.yyVAL.item = ast.SampleClauseUnitTypeRow } - case 1673: + case 1688: { parser.yyVAL.item = ast.SampleClauseUnitTypePercent } - case 1674: + case 1689: { parser.yyVAL.expr = nil } - case 1675: + case 1690: { parser.yyVAL.expr = yyS[yypt-1].expr } - case 1676: + case 1691: { st := yyS[yypt-6].item.(*ast.SelectStmt) if yyS[yypt-1].item != nil { @@ -19150,7 +19289,7 @@ yynewstate: } parser.yyVAL.statement = st } - case 1677: + case 1692: { st := yyS[yypt-5].item.(*ast.SelectStmt) if yyS[yypt-4].item != nil { @@ -19170,7 +19309,7 @@ yynewstate: } parser.yyVAL.statement = st } - case 1678: + case 1693: { st := yyS[yypt-4].item.(*ast.SelectStmt) if yyS[yypt-1].item != nil { @@ -19187,7 +19326,7 @@ yynewstate: } parser.yyVAL.statement = st } - case 1679: + case 1694: { st := &ast.SelectStmt{ Kind: ast.SelectStmtKindTable, @@ -19209,7 +19348,7 @@ yynewstate: } parser.yyVAL.statement = st } - case 1680: + case 1695: { st := &ast.SelectStmt{ Kind: ast.SelectStmtKindValues, @@ -19230,13 +19369,13 @@ yynewstate: } parser.yyVAL.statement = st } - case 1681: + case 1696: { sel := yyS[yypt-0].statement.(*ast.SelectStmt) sel.With = yyS[yypt-1].item.(*ast.WithClause) parser.yyVAL.statement = sel } - case 1682: + case 1697: { var sel ast.StmtNode switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) { @@ -19252,11 +19391,11 @@ yynewstate: } parser.yyVAL.statement = sel } - case 1683: + case 1698: { parser.yyVAL.item = yyS[yypt-0].item } - case 1684: + case 1699: { ws := yyS[yypt-0].item.(*ast.WithClause) ws.IsRecursive = true @@ -19265,20 +19404,20 @@ yynewstate: } parser.yyVAL.item = ws } - case 1685: + case 1700: { ws := yyS[yypt-2].item.(*ast.WithClause) ws.CTEs = append(ws.CTEs, yyS[yypt-0].item.(*ast.CommonTableExpression)) parser.yyVAL.item = ws } - case 1686: + case 1701: { ws := &ast.WithClause{} ws.CTEs = make([]*ast.CommonTableExpression, 0, 4) ws.CTEs = append(ws.CTEs, yyS[yypt-0].item.(*ast.CommonTableExpression)) parser.yyVAL.item = ws } - case 1687: + case 1702: { cte := &ast.CommonTableExpression{} cte.Name = model.NewCIStr(yyS[yypt-3].ident) @@ -19286,37 +19425,37 @@ yynewstate: cte.Query = yyS[yypt-0].expr.(*ast.SubqueryExpr) parser.yyVAL.item = cte } - case 1689: + case 1704: { parser.yyVAL.item = nil } - case 1690: + case 1705: { parser.yyVAL.item = yyS[yypt-0].item.([]ast.WindowSpec) } - case 1691: + case 1706: { parser.yyVAL.item = []ast.WindowSpec{yyS[yypt-0].item.(ast.WindowSpec)} } - case 1692: + case 1707: { parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.WindowSpec), yyS[yypt-0].item.(ast.WindowSpec)) } - case 1693: + case 1708: { var spec = yyS[yypt-0].item.(ast.WindowSpec) spec.Name = yyS[yypt-2].item.(model.CIStr) parser.yyVAL.item = spec } - case 1694: + case 1709: { parser.yyVAL.item = model.NewCIStr(yyS[yypt-0].ident) } - case 1695: + case 1710: { parser.yyVAL.item = yyS[yypt-1].item.(ast.WindowSpec) } - case 1696: + case 1711: { spec := ast.WindowSpec{Ref: yyS[yypt-3].item.(model.CIStr)} if yyS[yypt-2].item != nil { @@ -19330,138 +19469,138 @@ yynewstate: } parser.yyVAL.item = spec } - case 1697: + case 1712: { parser.yyVAL.item = model.CIStr{} } - case 1699: + case 1714: { parser.yyVAL.item = nil } - case 1700: + case 1715: { parser.yyVAL.item = &ast.PartitionByClause{Items: yyS[yypt-0].item.([]*ast.ByItem)} } - case 1701: + case 1716: { parser.yyVAL.item = nil } - case 1702: + case 1717: { parser.yyVAL.item = &ast.OrderByClause{Items: yyS[yypt-0].item.([]*ast.ByItem)} } - case 1703: + case 1718: { parser.yyVAL.item = nil } - case 1704: + case 1719: { parser.yyVAL.item = &ast.FrameClause{ Type: yyS[yypt-1].item.(ast.FrameType), Extent: yyS[yypt-0].item.(ast.FrameExtent), } } - case 1705: + case 1720: { parser.yyVAL.item = ast.FrameType(ast.Rows) } - case 1706: + case 1721: { parser.yyVAL.item = ast.FrameType(ast.Ranges) } - case 1707: + case 1722: { parser.yyVAL.item = ast.FrameType(ast.Groups) } - case 1708: + case 1723: { parser.yyVAL.item = ast.FrameExtent{ Start: yyS[yypt-0].item.(ast.FrameBound), End: ast.FrameBound{Type: ast.CurrentRow}, } } - case 1710: + case 1725: { parser.yyVAL.item = ast.FrameBound{Type: ast.Preceding, UnBounded: true} } - case 1711: + case 1726: { parser.yyVAL.item = ast.FrameBound{Type: ast.Preceding, Expr: ast.NewValueExpr(yyS[yypt-1].item, parser.charset, parser.collation)} } - case 1712: + case 1727: { parser.yyVAL.item = ast.FrameBound{Type: ast.Preceding, Expr: ast.NewParamMarkerExpr(yyS[yypt].offset)} } - case 1713: + case 1728: { parser.yyVAL.item = ast.FrameBound{Type: ast.Preceding, Expr: yyS[yypt-2].expr, Unit: yyS[yypt-1].item.(ast.TimeUnitType)} } - case 1714: + case 1729: { parser.yyVAL.item = ast.FrameBound{Type: ast.CurrentRow} } - case 1715: + case 1730: { parser.yyVAL.item = ast.FrameExtent{Start: yyS[yypt-2].item.(ast.FrameBound), End: yyS[yypt-0].item.(ast.FrameBound)} } - case 1717: + case 1732: { parser.yyVAL.item = ast.FrameBound{Type: ast.Following, UnBounded: true} } - case 1718: + case 1733: { parser.yyVAL.item = ast.FrameBound{Type: ast.Following, Expr: ast.NewValueExpr(yyS[yypt-1].item, parser.charset, parser.collation)} } - case 1719: + case 1734: { parser.yyVAL.item = ast.FrameBound{Type: ast.Following, Expr: ast.NewParamMarkerExpr(yyS[yypt].offset)} } - case 1720: + case 1735: { parser.yyVAL.item = ast.FrameBound{Type: ast.Following, Expr: yyS[yypt-2].expr, Unit: yyS[yypt-1].item.(ast.TimeUnitType)} } - case 1721: + case 1736: { parser.yyVAL.item = nil } - case 1722: + case 1737: { spec := yyS[yypt-0].item.(ast.WindowSpec) parser.yyVAL.item = &spec } - case 1723: + case 1738: { parser.yyVAL.item = yyS[yypt-0].item.(ast.WindowSpec) } - case 1724: + case 1739: { parser.yyVAL.item = ast.WindowSpec{Name: yyS[yypt-0].item.(model.CIStr), OnlyAlias: true} } - case 1726: + case 1741: { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-3].ident, Spec: yyS[yypt-0].item.(ast.WindowSpec)} } - case 1727: + case 1742: { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-3].ident, Spec: yyS[yypt-0].item.(ast.WindowSpec)} } - case 1728: + case 1743: { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-3].ident, Spec: yyS[yypt-0].item.(ast.WindowSpec)} } - case 1729: + case 1744: { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-3].ident, Spec: yyS[yypt-0].item.(ast.WindowSpec)} } - case 1730: + case 1745: { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-3].ident, Spec: yyS[yypt-0].item.(ast.WindowSpec)} } - case 1731: + case 1746: { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-4].ident, Args: []ast.ExprNode{yyS[yypt-2].expr}, Spec: yyS[yypt-0].item.(ast.WindowSpec)} } - case 1732: + case 1747: { args := []ast.ExprNode{yyS[yypt-4].expr} if yyS[yypt-3].item != nil { @@ -19469,7 +19608,7 @@ yynewstate: } parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-6].ident, Args: args, IgnoreNull: yyS[yypt-1].item.(bool), Spec: yyS[yypt-0].item.(ast.WindowSpec)} } - case 1733: + case 1748: { args := []ast.ExprNode{yyS[yypt-4].expr} if yyS[yypt-3].item != nil { @@ -19477,23 +19616,23 @@ yynewstate: } parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-6].ident, Args: args, IgnoreNull: yyS[yypt-1].item.(bool), Spec: yyS[yypt-0].item.(ast.WindowSpec)} } - case 1734: + case 1749: { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-3].expr}, IgnoreNull: yyS[yypt-1].item.(bool), Spec: yyS[yypt-0].item.(ast.WindowSpec)} } - case 1735: + case 1750: { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-5].ident, Args: []ast.ExprNode{yyS[yypt-3].expr}, IgnoreNull: yyS[yypt-1].item.(bool), Spec: yyS[yypt-0].item.(ast.WindowSpec)} } - case 1736: + case 1751: { parser.yyVAL.expr = &ast.WindowFuncExpr{Name: yyS[yypt-8].ident, Args: []ast.ExprNode{yyS[yypt-6].expr, yyS[yypt-4].expr}, FromLast: yyS[yypt-2].item.(bool), IgnoreNull: yyS[yypt-1].item.(bool), Spec: yyS[yypt-0].item.(ast.WindowSpec)} } - case 1737: + case 1752: { parser.yyVAL.item = nil } - case 1738: + case 1753: { args := []ast.ExprNode{ast.NewValueExpr(yyS[yypt-1].item, parser.charset, parser.collation)} if yyS[yypt-0].item != nil { @@ -19501,7 +19640,7 @@ yynewstate: } parser.yyVAL.item = args } - case 1739: + case 1754: { args := []ast.ExprNode{ast.NewParamMarkerExpr(yyS[yypt-1].offset)} if yyS[yypt-0].item != nil { @@ -19509,43 +19648,43 @@ yynewstate: } parser.yyVAL.item = args } - case 1740: + case 1755: { parser.yyVAL.item = nil } - case 1741: + case 1756: { parser.yyVAL.item = yyS[yypt-0].expr } - case 1742: + case 1757: { parser.yyVAL.item = false } - case 1743: + case 1758: { parser.yyVAL.item = false } - case 1744: + case 1759: { parser.yyVAL.item = true } - case 1745: + case 1760: { parser.yyVAL.item = false } - case 1746: + case 1761: { parser.yyVAL.item = false } - case 1747: + case 1762: { parser.yyVAL.item = true } - case 1748: + case 1763: { parser.yyVAL.item = &ast.TableRefsClause{TableRefs: yyS[yypt-0].item.(*ast.Join)} } - case 1749: + case 1764: { if j, ok := yyS[yypt-0].item.(*ast.Join); ok { // if $1 is Join, use it directly @@ -19554,12 +19693,12 @@ yynewstate: parser.yyVAL.item = &ast.Join{Left: yyS[yypt-0].item.(ast.ResultSetNode), Right: nil} } } - case 1750: + case 1765: { /* from a, b is default cross join */ parser.yyVAL.item = &ast.Join{Left: yyS[yypt-2].item.(ast.ResultSetNode), Right: yyS[yypt-0].item.(ast.ResultSetNode), Tp: ast.CrossJoin} } - case 1752: + case 1767: { /* * ODBC escape syntax for outer join is { OJ join_table } @@ -19567,7 +19706,7 @@ yynewstate: */ parser.yyVAL.item = yyS[yypt-1].item } - case 1755: + case 1770: { tn := yyS[yypt-5].item.(*ast.TableName) tn.PartitionNames = yyS[yypt-4].item.([]model.CIStr) @@ -19580,66 +19719,66 @@ yynewstate: } parser.yyVAL.item = &ast.TableSource{Source: tn, AsName: yyS[yypt-3].item.(model.CIStr)} } - case 1756: + case 1771: { resultNode := yyS[yypt-1].expr.(*ast.SubqueryExpr).Query parser.yyVAL.item = &ast.TableSource{Source: resultNode, AsName: yyS[yypt-0].item.(model.CIStr)} } - case 1757: + case 1772: { j := yyS[yypt-1].item.(*ast.Join) j.ExplicitParens = true parser.yyVAL.item = yyS[yypt-1].item } - case 1758: + case 1773: { parser.yyVAL.item = []model.CIStr{} } - case 1759: + case 1774: { parser.yyVAL.item = yyS[yypt-1].item } - case 1760: + case 1775: { parser.yyVAL.item = model.CIStr{} } - case 1762: + case 1777: { parser.yyVAL.item = model.NewCIStr(yyS[yypt-0].ident) } - case 1763: + case 1778: { parser.yyVAL.item = model.NewCIStr(yyS[yypt-0].ident) } - case 1764: + case 1779: { parser.yyVAL.item = ast.HintUse } - case 1765: + case 1780: { parser.yyVAL.item = ast.HintIgnore } - case 1766: + case 1781: { parser.yyVAL.item = ast.HintForce } - case 1767: + case 1782: { parser.yyVAL.item = ast.HintForScan } - case 1768: + case 1783: { parser.yyVAL.item = ast.HintForJoin } - case 1769: + case 1784: { parser.yyVAL.item = ast.HintForOrderBy } - case 1770: + case 1785: { parser.yyVAL.item = ast.HintForGroupBy } - case 1771: + case 1786: { parser.yyVAL.item = &ast.IndexHint{ IndexNames: yyS[yypt-1].item.([]model.CIStr), @@ -19647,138 +19786,138 @@ yynewstate: HintScope: yyS[yypt-3].item.(ast.IndexHintScope), } } - case 1772: + case 1787: { var nameList []model.CIStr parser.yyVAL.item = nameList } - case 1773: + case 1788: { parser.yyVAL.item = []model.CIStr{model.NewCIStr(yyS[yypt-0].ident)} } - case 1774: + case 1789: { parser.yyVAL.item = append(yyS[yypt-2].item.([]model.CIStr), model.NewCIStr(yyS[yypt-0].ident)) } - case 1775: + case 1790: { parser.yyVAL.item = []model.CIStr{model.NewCIStr(yyS[yypt-0].ident)} } - case 1776: + case 1791: { parser.yyVAL.item = append(yyS[yypt-2].item.([]model.CIStr), model.NewCIStr(yyS[yypt-0].ident)) } - case 1777: + case 1792: { parser.yyVAL.item = []*ast.IndexHint{yyS[yypt-0].item.(*ast.IndexHint)} } - case 1778: + case 1793: { parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.IndexHint), yyS[yypt-0].item.(*ast.IndexHint)) } - case 1779: + case 1794: { parser.yyVAL.item = []*ast.IndexHint{} } - case 1781: + case 1796: { parser.yyVAL.item = ast.NewCrossJoin(yyS[yypt-2].item.(ast.ResultSetNode), yyS[yypt-0].item.(ast.ResultSetNode)) } - case 1782: + case 1797: { on := &ast.OnCondition{Expr: yyS[yypt-0].expr} parser.yyVAL.item = &ast.Join{Left: yyS[yypt-4].item.(ast.ResultSetNode), Right: yyS[yypt-2].item.(ast.ResultSetNode), Tp: ast.CrossJoin, On: on} } - case 1783: + case 1798: { parser.yyVAL.item = &ast.Join{Left: yyS[yypt-6].item.(ast.ResultSetNode), Right: yyS[yypt-4].item.(ast.ResultSetNode), Tp: ast.CrossJoin, Using: yyS[yypt-1].item.([]*ast.ColumnName)} } - case 1784: + case 1799: { on := &ast.OnCondition{Expr: yyS[yypt-0].expr} parser.yyVAL.item = &ast.Join{Left: yyS[yypt-6].item.(ast.ResultSetNode), Right: yyS[yypt-2].item.(ast.ResultSetNode), Tp: yyS[yypt-5].item.(ast.JoinType), On: on} } - case 1785: + case 1800: { parser.yyVAL.item = &ast.Join{Left: yyS[yypt-8].item.(ast.ResultSetNode), Right: yyS[yypt-4].item.(ast.ResultSetNode), Tp: yyS[yypt-7].item.(ast.JoinType), Using: yyS[yypt-1].item.([]*ast.ColumnName)} } - case 1786: + case 1801: { parser.yyVAL.item = &ast.Join{Left: yyS[yypt-3].item.(ast.ResultSetNode), Right: yyS[yypt-0].item.(ast.ResultSetNode), NaturalJoin: true} } - case 1787: + case 1802: { parser.yyVAL.item = &ast.Join{Left: yyS[yypt-5].item.(ast.ResultSetNode), Right: yyS[yypt-0].item.(ast.ResultSetNode), Tp: yyS[yypt-3].item.(ast.JoinType), NaturalJoin: true} } - case 1788: + case 1803: { parser.yyVAL.item = &ast.Join{Left: yyS[yypt-2].item.(ast.ResultSetNode), Right: yyS[yypt-0].item.(ast.ResultSetNode), StraightJoin: true} } - case 1789: + case 1804: { on := &ast.OnCondition{Expr: yyS[yypt-0].expr} parser.yyVAL.item = &ast.Join{Left: yyS[yypt-4].item.(ast.ResultSetNode), Right: yyS[yypt-2].item.(ast.ResultSetNode), StraightJoin: true, On: on} } - case 1790: + case 1805: { parser.yyVAL.item = &ast.Join{Left: yyS[yypt-6].item.(ast.ResultSetNode), Right: yyS[yypt-4].item.(ast.ResultSetNode), StraightJoin: true, Using: yyS[yypt-1].item.([]*ast.ColumnName)} } - case 1791: + case 1806: { parser.yyVAL.item = ast.LeftJoin } - case 1792: + case 1807: { parser.yyVAL.item = ast.RightJoin } - case 1798: + case 1813: { parser.yyVAL.item = nil } - case 1799: + case 1814: { parser.yyVAL.item = &ast.Limit{Count: yyS[yypt-0].item.(ast.ValueExpr)} } - case 1800: + case 1815: { parser.yyVAL.item = ast.NewValueExpr(yyS[yypt-0].item, parser.charset, parser.collation) } - case 1801: + case 1816: { parser.yyVAL.item = ast.NewParamMarkerExpr(yyS[yypt].offset) } - case 1806: + case 1821: { parser.yyVAL.item = ast.NewValueExpr(uint64(1), parser.charset, parser.collation) } - case 1808: + case 1823: { parser.yyVAL.item = &ast.Limit{Count: yyS[yypt-0].item.(ast.ExprNode)} } - case 1809: + case 1824: { parser.yyVAL.item = &ast.Limit{Offset: yyS[yypt-2].item.(ast.ExprNode), Count: yyS[yypt-0].item.(ast.ExprNode)} } - case 1810: + case 1825: { parser.yyVAL.item = &ast.Limit{Offset: yyS[yypt-0].item.(ast.ExprNode), Count: yyS[yypt-2].item.(ast.ExprNode)} } - case 1811: + case 1826: { parser.yyVAL.item = &ast.Limit{Count: yyS[yypt-2].item.(ast.ExprNode)} } - case 1812: + case 1827: { parser.yyVAL.item = nil } - case 1814: + case 1829: { opt := &ast.SelectStmtOpts{} opt.SQLCache = true opt.TableHints = yyS[yypt-0].item.([]*ast.TableOptimizerHint) parser.yyVAL.item = opt } - case 1815: + case 1830: { opt := &ast.SelectStmtOpts{} opt.SQLCache = true @@ -19790,61 +19929,61 @@ yynewstate: } parser.yyVAL.item = opt } - case 1816: + case 1831: { opt := &ast.SelectStmtOpts{} opt.SQLCache = true opt.Priority = yyS[yypt-0].item.(mysql.PriorityEnum) parser.yyVAL.item = opt } - case 1817: + case 1832: { opt := &ast.SelectStmtOpts{} opt.SQLCache = true opt.SQLSmallResult = true parser.yyVAL.item = opt } - case 1818: + case 1833: { opt := &ast.SelectStmtOpts{} opt.SQLCache = true opt.SQLBigResult = true parser.yyVAL.item = opt } - case 1819: + case 1834: { opt := &ast.SelectStmtOpts{} opt.SQLCache = true opt.SQLBufferResult = true parser.yyVAL.item = opt } - case 1820: + case 1835: { opt := &ast.SelectStmtOpts{} opt.SQLCache = yyS[yypt-0].item.(bool) parser.yyVAL.item = opt } - case 1821: + case 1836: { opt := &ast.SelectStmtOpts{} opt.SQLCache = true opt.CalcFoundRows = true parser.yyVAL.item = opt } - case 1822: + case 1837: { opt := &ast.SelectStmtOpts{} opt.SQLCache = true opt.StraightJoin = true parser.yyVAL.item = opt } - case 1823: + case 1838: { opt := &ast.SelectStmtOpts{} opt.SQLCache = true parser.yyVAL.item = opt } - case 1825: + case 1840: { opts := yyS[yypt-1].item.(*ast.SelectStmtOpts) opt := yyS[yypt-0].item.(*ast.SelectStmtOpts) @@ -19889,7 +20028,7 @@ yynewstate: parser.yyVAL.item = opts } - case 1827: + case 1842: { hints, warns := parser.parseHint(yyS[yypt-0].ident) for _, w := range warns { @@ -19898,31 +20037,31 @@ yynewstate: } parser.yyVAL.item = hints } - case 1828: + case 1843: { parser.yyVAL.item = nil } - case 1830: + case 1845: { parser.yyVAL.item = true } - case 1831: + case 1846: { parser.yyVAL.item = false } - case 1832: + case 1847: { parser.yyVAL.item = &ast.FieldList{Fields: yyS[yypt-0].item.([]*ast.SelectField)} } - case 1833: + case 1848: { parser.yyVAL.item = nil } - case 1835: + case 1850: { parser.yyVAL.item = nil } - case 1836: + case 1851: { x := &ast.SelectIntoOption{ Tp: ast.SelectIntoOutfile, @@ -19937,7 +20076,7 @@ yynewstate: parser.yyVAL.item = x } - case 1837: + case 1852: { rs := yyS[yypt-1].statement.(*ast.SelectStmt) endOffset := parser.endOffset(&yyS[yypt]) @@ -19947,14 +20086,14 @@ yynewstate: rs.SetText(parser.lexer.client, src[yyS[yypt-1].offset:yyS[yypt].offset]) parser.yyVAL.expr = &ast.SubqueryExpr{Query: rs} } - case 1838: + case 1853: { rs := yyS[yypt-1].statement.(*ast.SetOprStmt) src := parser.src rs.SetText(parser.lexer.client, src[yyS[yypt-1].offset:yyS[yypt].offset]) parser.yyVAL.expr = &ast.SubqueryExpr{Query: rs} } - case 1839: + case 1854: { switch rs := yyS[yypt-1].statement.(type) { case *ast.SelectStmt: @@ -19970,7 +20109,7 @@ yynewstate: parser.yyVAL.expr = &ast.SubqueryExpr{Query: rs} } } - case 1840: + case 1855: { subQuery := yyS[yypt-1].expr.(*ast.SubqueryExpr).Query isRecursive := true @@ -19993,32 +20132,32 @@ yynewstate: parser.yyVAL.expr = &ast.SubqueryExpr{Query: rs} } } - case 1841: + case 1856: { parser.yyVAL.item = nil } - case 1842: + case 1857: { parser.yyVAL.item = &ast.SelectLockInfo{ LockType: ast.SelectLockForUpdate, Tables: yyS[yypt-0].item.([]*ast.TableName), } } - case 1843: + case 1858: { parser.yyVAL.item = &ast.SelectLockInfo{ LockType: ast.SelectLockForShare, Tables: yyS[yypt-0].item.([]*ast.TableName), } } - case 1844: + case 1859: { parser.yyVAL.item = &ast.SelectLockInfo{ LockType: ast.SelectLockForUpdateNoWait, Tables: yyS[yypt-1].item.([]*ast.TableName), } } - case 1845: + case 1860: { parser.yyVAL.item = &ast.SelectLockInfo{ LockType: ast.SelectLockForUpdateWaitN, @@ -20026,55 +20165,55 @@ yynewstate: Tables: yyS[yypt-2].item.([]*ast.TableName), } } - case 1846: + case 1861: { parser.yyVAL.item = &ast.SelectLockInfo{ LockType: ast.SelectLockForShareNoWait, Tables: yyS[yypt-1].item.([]*ast.TableName), } } - case 1847: + case 1862: { parser.yyVAL.item = &ast.SelectLockInfo{ LockType: ast.SelectLockForUpdateSkipLocked, Tables: yyS[yypt-2].item.([]*ast.TableName), } } - case 1848: + case 1863: { parser.yyVAL.item = &ast.SelectLockInfo{ LockType: ast.SelectLockForShareSkipLocked, Tables: yyS[yypt-2].item.([]*ast.TableName), } } - case 1849: + case 1864: { parser.yyVAL.item = &ast.SelectLockInfo{ LockType: ast.SelectLockForShare, Tables: []*ast.TableName{}, } } - case 1850: + case 1865: { parser.yyVAL.item = []*ast.TableName{} } - case 1851: + case 1866: { parser.yyVAL.item = yyS[yypt-0].item.([]*ast.TableName) } - case 1854: + case 1869: { setOpr := yyS[yypt-0].statement.(*ast.SetOprStmt) setOpr.With = yyS[yypt-1].item.(*ast.WithClause) parser.yyVAL.statement = setOpr } - case 1855: + case 1870: { setOpr := yyS[yypt-0].statement.(*ast.SetOprStmt) setOpr.With = yyS[yypt-1].item.(*ast.WithClause) parser.yyVAL.statement = setOpr } - case 1856: + case 1871: { setOprList1 := yyS[yypt-2].item.([]ast.Node) if sel, isSelect := setOprList1[len(setOprList1)-1].(*ast.SelectStmt); isSelect && !sel.IsInBraces { @@ -20091,7 +20230,7 @@ yynewstate: setOpr.SelectList.Selects = append(setOpr.SelectList.Selects, st) parser.yyVAL.statement = setOpr } - case 1857: + case 1872: { setOprList1 := yyS[yypt-2].item.([]ast.Node) if sel, isSelect := setOprList1[len(setOprList1)-1].(*ast.SelectStmt); isSelect && !sel.IsInBraces { @@ -20120,7 +20259,7 @@ yynewstate: setOpr := &ast.SetOprStmt{SelectList: &ast.SetOprSelectList{Selects: setOprList}} parser.yyVAL.statement = setOpr } - case 1858: + case 1873: { setOprList1 := yyS[yypt-3].item.([]ast.Node) if sel, isSelect := setOprList1[len(setOprList1)-1].(*ast.SelectStmt); isSelect && !sel.IsInBraces { @@ -20148,7 +20287,7 @@ yynewstate: setOpr.OrderBy = yyS[yypt-0].item.(*ast.OrderByClause) parser.yyVAL.statement = setOpr } - case 1859: + case 1874: { setOprList1 := yyS[yypt-3].item.([]ast.Node) if sel, isSelect := setOprList1[len(setOprList1)-1].(*ast.SelectStmt); isSelect && !sel.IsInBraces { @@ -20176,7 +20315,7 @@ yynewstate: setOpr.Limit = yyS[yypt-0].item.(*ast.Limit) parser.yyVAL.statement = setOpr } - case 1860: + case 1875: { setOprList1 := yyS[yypt-4].item.([]ast.Node) if sel, isSelect := setOprList1[len(setOprList1)-1].(*ast.SelectStmt); isSelect && !sel.IsInBraces { @@ -20205,7 +20344,7 @@ yynewstate: setOpr.Limit = yyS[yypt-0].item.(*ast.Limit) parser.yyVAL.statement = setOpr } - case 1861: + case 1876: { var setOprList []ast.Node switch x := yyS[yypt-1].expr.(*ast.SubqueryExpr).Query.(type) { @@ -20218,7 +20357,7 @@ yynewstate: setOpr.OrderBy = yyS[yypt-0].item.(*ast.OrderByClause) parser.yyVAL.statement = setOpr } - case 1862: + case 1877: { var setOprList []ast.Node switch x := yyS[yypt-1].expr.(*ast.SubqueryExpr).Query.(type) { @@ -20231,7 +20370,7 @@ yynewstate: setOpr.Limit = yyS[yypt-0].item.(*ast.Limit) parser.yyVAL.statement = setOpr } - case 1863: + case 1878: { var setOprList []ast.Node switch x := yyS[yypt-2].expr.(*ast.SubqueryExpr).Query.(type) { @@ -20245,7 +20384,7 @@ yynewstate: setOpr.Limit = yyS[yypt-0].item.(*ast.Limit) parser.yyVAL.statement = setOpr } - case 1865: + case 1880: { setOprList1 := yyS[yypt-2].item.([]ast.Node) setOprList2 := yyS[yypt-0].item.([]ast.Node) @@ -20261,11 +20400,11 @@ yynewstate: } parser.yyVAL.item = append(setOprList1, setOprList2...) } - case 1866: + case 1881: { parser.yyVAL.item = []ast.Node{yyS[yypt-0].statement.(*ast.SelectStmt)} } - case 1867: + case 1882: { var setOprList []ast.Node switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) { @@ -20276,7 +20415,7 @@ yynewstate: } parser.yyVAL.item = setOprList } - case 1868: + case 1883: { var tp ast.SetOprType tp = ast.Union @@ -20285,7 +20424,7 @@ yynewstate: } parser.yyVAL.item = &tp } - case 1869: + case 1884: { var tp ast.SetOprType tp = ast.Except @@ -20294,7 +20433,7 @@ yynewstate: } parser.yyVAL.item = &tp } - case 1870: + case 1885: { var tp ast.SetOprType tp = ast.Intersect @@ -20303,7 +20442,7 @@ yynewstate: } parser.yyVAL.item = &tp } - case 1872: + case 1887: { parser.yyVAL.statement = &ast.ChangeStmt{ NodeType: ast.PumpType, @@ -20311,7 +20450,7 @@ yynewstate: NodeID: yyS[yypt-0].ident, } } - case 1873: + case 1888: { parser.yyVAL.statement = &ast.ChangeStmt{ NodeType: ast.DrainerType, @@ -20319,19 +20458,19 @@ yynewstate: NodeID: yyS[yypt-0].ident, } } - case 1874: + case 1889: { parser.yyVAL.statement = &ast.SetStmt{Variables: yyS[yypt-0].item.([]*ast.VariableAssignment)} } - case 1875: + case 1890: { parser.yyVAL.statement = &ast.SetPwdStmt{Password: yyS[yypt-0].ident} } - case 1876: + case 1891: { parser.yyVAL.statement = &ast.SetPwdStmt{User: yyS[yypt-2].item.(*auth.UserIdentity), Password: yyS[yypt-0].ident} } - case 1877: + case 1892: { vars := yyS[yypt-0].item.([]*ast.VariableAssignment) for _, v := range vars { @@ -20339,11 +20478,11 @@ yynewstate: } parser.yyVAL.statement = &ast.SetStmt{Variables: vars} } - case 1878: + case 1893: { parser.yyVAL.statement = &ast.SetStmt{Variables: yyS[yypt-0].item.([]*ast.VariableAssignment)} } - case 1879: + case 1894: { assigns := yyS[yypt-0].item.([]*ast.VariableAssignment) for i := 0; i < len(assigns); i++ { @@ -20354,27 +20493,27 @@ yynewstate: } parser.yyVAL.statement = &ast.SetStmt{Variables: assigns} } - case 1880: + case 1895: { parser.yyVAL.statement = &ast.SetConfigStmt{Type: strings.ToLower(yyS[yypt-3].ident), Name: yyS[yypt-2].ident, Value: yyS[yypt-0].expr} } - case 1881: + case 1896: { parser.yyVAL.statement = &ast.SetConfigStmt{Instance: yyS[yypt-3].ident, Name: yyS[yypt-2].ident, Value: yyS[yypt-0].expr} } - case 1882: + case 1897: { parser.yyVAL.statement = &ast.SetSessionStatesStmt{SessionStates: yyS[yypt-0].ident} } - case 1883: + case 1898: { parser.yyVAL.statement = &ast.SetResourceGroupStmt{Name: model.NewCIStr(yyS[yypt-0].ident)} } - case 1884: + case 1899: { parser.yyVAL.statement = yyS[yypt-0].item.(*ast.SetRoleStmt) } - case 1885: + case 1900: { tmp := yyS[yypt-2].item.(*ast.SetRoleStmt) parser.yyVAL.statement = &ast.SetDefaultRoleStmt{ @@ -20383,27 +20522,27 @@ yynewstate: UserList: yyS[yypt-0].item.([]*auth.UserIdentity), } } - case 1886: + case 1901: { parser.yyVAL.item = &ast.SetRoleStmt{SetRoleOpt: ast.SetRoleNone, RoleList: nil} } - case 1887: + case 1902: { parser.yyVAL.item = &ast.SetRoleStmt{SetRoleOpt: ast.SetRoleAll, RoleList: nil} } - case 1888: + case 1903: { parser.yyVAL.item = &ast.SetRoleStmt{SetRoleOpt: ast.SetRoleRegular, RoleList: yyS[yypt-0].item.([]*auth.RoleIdentity)} } - case 1889: + case 1904: { parser.yyVAL.item = &ast.SetRoleStmt{SetRoleOpt: ast.SetRoleAllExcept, RoleList: yyS[yypt-0].item.([]*auth.RoleIdentity)} } - case 1891: + case 1906: { parser.yyVAL.item = &ast.SetRoleStmt{SetRoleOpt: ast.SetRoleDefault, RoleList: nil} } - case 1892: + case 1907: { if yyS[yypt-0].item != nil { parser.yyVAL.item = yyS[yypt-0].item @@ -20411,7 +20550,7 @@ yynewstate: parser.yyVAL.item = []*ast.VariableAssignment{} } } - case 1893: + case 1908: { if yyS[yypt-0].item != nil { varAssigns := yyS[yypt-0].item.([]*ast.VariableAssignment) @@ -20420,28 +20559,28 @@ yynewstate: parser.yyVAL.item = yyS[yypt-2].item } } - case 1894: + case 1909: { varAssigns := []*ast.VariableAssignment{} expr := ast.NewValueExpr(yyS[yypt-0].ident, parser.charset, parser.collation) varAssigns = append(varAssigns, &ast.VariableAssignment{Name: "tx_isolation", Value: expr, IsSystem: true}) parser.yyVAL.item = varAssigns } - case 1895: + case 1910: { varAssigns := []*ast.VariableAssignment{} expr := ast.NewValueExpr("0", parser.charset, parser.collation) varAssigns = append(varAssigns, &ast.VariableAssignment{Name: "tx_read_only", Value: expr, IsSystem: true}) parser.yyVAL.item = varAssigns } - case 1896: + case 1911: { varAssigns := []*ast.VariableAssignment{} expr := ast.NewValueExpr("1", parser.charset, parser.collation) varAssigns = append(varAssigns, &ast.VariableAssignment{Name: "tx_read_only", Value: expr, IsSystem: true}) parser.yyVAL.item = varAssigns } - case 1897: + case 1912: { varAssigns := []*ast.VariableAssignment{} asof := yyS[yypt-0].item.(*ast.AsOfClause) @@ -20450,59 +20589,59 @@ yynewstate: } parser.yyVAL.item = varAssigns } - case 1898: + case 1913: { parser.yyVAL.ident = ast.RepeatableRead } - case 1899: + case 1914: { parser.yyVAL.ident = ast.ReadCommitted } - case 1900: + case 1915: { parser.yyVAL.ident = ast.ReadUncommitted } - case 1901: + case 1916: { parser.yyVAL.ident = ast.Serializable } - case 1902: + case 1917: { parser.yyVAL.expr = ast.NewValueExpr("ON", parser.charset, parser.collation) } - case 1903: + case 1918: { parser.yyVAL.expr = ast.NewValueExpr("BINARY", parser.charset, parser.collation) } - case 1908: + case 1923: { parser.yyVAL.ident = yyS[yypt-2].ident + "." + yyS[yypt-0].ident } - case 1910: + case 1925: { parser.yyVAL.ident = yyS[yypt-2].ident + "." + yyS[yypt-0].ident } - case 1911: + case 1926: { parser.yyVAL.ident = yyS[yypt-2].ident + "-" + yyS[yypt-0].ident } - case 1912: + case 1927: { parser.yyVAL.item = &ast.VariableAssignment{Name: yyS[yypt-2].ident, Value: yyS[yypt-0].expr, IsSystem: true} } - case 1913: + case 1928: { parser.yyVAL.item = &ast.VariableAssignment{Name: yyS[yypt-2].ident, Value: yyS[yypt-0].expr, IsGlobal: true, IsSystem: true} } - case 1914: + case 1929: { parser.yyVAL.item = &ast.VariableAssignment{Name: yyS[yypt-2].ident, Value: yyS[yypt-0].expr, IsSystem: true} } - case 1915: + case 1930: { parser.yyVAL.item = &ast.VariableAssignment{Name: yyS[yypt-2].ident, Value: yyS[yypt-0].expr, IsSystem: true} } - case 1916: + case 1931: { v := strings.ToLower(yyS[yypt-2].ident) var isGlobal bool @@ -20518,27 +20657,27 @@ yynewstate: } parser.yyVAL.item = &ast.VariableAssignment{Name: v, Value: yyS[yypt-0].expr, IsGlobal: isGlobal, IsSystem: true} } - case 1917: + case 1932: { v := yyS[yypt-2].ident v = strings.TrimPrefix(v, "@") parser.yyVAL.item = &ast.VariableAssignment{Name: v, Value: yyS[yypt-0].expr} } - case 1918: + case 1933: { parser.yyVAL.item = &ast.VariableAssignment{ Name: ast.SetNames, Value: ast.NewValueExpr(yyS[yypt-0].ident, "", ""), } } - case 1919: + case 1934: { parser.yyVAL.item = &ast.VariableAssignment{ Name: ast.SetNames, Value: ast.NewValueExpr(yyS[yypt-2].ident, "", ""), } } - case 1920: + case 1935: { parser.yyVAL.item = &ast.VariableAssignment{ Name: ast.SetNames, @@ -20546,24 +20685,24 @@ yynewstate: ExtendValue: ast.NewValueExpr(yyS[yypt-0].ident, "", ""), } } - case 1921: + case 1936: { v := &ast.DefaultExpr{} parser.yyVAL.item = &ast.VariableAssignment{Name: ast.SetNames, Value: v} } - case 1922: + case 1937: { parser.yyVAL.item = &ast.VariableAssignment{Name: ast.SetCharset, Value: yyS[yypt-0].expr} } - case 1923: + case 1938: { parser.yyVAL.expr = ast.NewValueExpr(yyS[yypt-0].ident, "", "") } - case 1924: + case 1939: { parser.yyVAL.expr = &ast.DefaultExpr{} } - case 1925: + case 1940: { // Validate input charset name to keep the same behavior as parser of MySQL. cs, err := charset.GetCharsetInfo(yyS[yypt-0].ident) @@ -20575,11 +20714,11 @@ yynewstate: // to keep lower case of input for generated column restore. parser.yyVAL.ident = cs.Name } - case 1926: + case 1941: { parser.yyVAL.ident = charset.CharsetBin } - case 1927: + case 1942: { info, err := charset.GetCollationByName(yyS[yypt-0].ident) if err != nil { @@ -20588,19 +20727,19 @@ yynewstate: } parser.yyVAL.ident = info.Name } - case 1928: + case 1943: { parser.yyVAL.ident = charset.CollationBin } - case 1929: + case 1944: { parser.yyVAL.item = []*ast.VariableAssignment{yyS[yypt-0].item.(*ast.VariableAssignment)} } - case 1930: + case 1945: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.VariableAssignment), yyS[yypt-0].item.(*ast.VariableAssignment)) } - case 1933: + case 1948: { v := strings.ToLower(yyS[yypt-0].ident) var isGlobal bool @@ -20617,97 +20756,97 @@ yynewstate: } parser.yyVAL.expr = &ast.VariableExpr{Name: v, IsGlobal: isGlobal, IsSystem: true, ExplicitScope: explicitScope} } - case 1934: + case 1949: { v := yyS[yypt-0].ident v = strings.TrimPrefix(v, "@") parser.yyVAL.expr = &ast.VariableExpr{Name: v, IsGlobal: false, IsSystem: false} } - case 1935: + case 1950: { parser.yyVAL.item = &auth.UserIdentity{Username: yyS[yypt-0].ident, Hostname: "%"} } - case 1936: + case 1951: { parser.yyVAL.item = &auth.UserIdentity{Username: yyS[yypt-2].ident, Hostname: strings.ToLower(yyS[yypt-0].ident)} } - case 1937: + case 1952: { parser.yyVAL.item = &auth.UserIdentity{Username: yyS[yypt-1].ident, Hostname: strings.ToLower(strings.TrimPrefix(yyS[yypt-0].ident, "@"))} } - case 1938: + case 1953: { parser.yyVAL.item = &auth.UserIdentity{CurrentUser: true} } - case 1939: + case 1954: { parser.yyVAL.item = []*auth.UserIdentity{yyS[yypt-0].item.(*auth.UserIdentity)} } - case 1940: + case 1955: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*auth.UserIdentity), yyS[yypt-0].item.(*auth.UserIdentity)) } - case 1942: + case 1957: { parser.yyVAL.ident = yyS[yypt-1].ident } - case 1946: + case 1961: { parser.yyVAL.item = &auth.RoleIdentity{Username: yyS[yypt-2].ident, Hostname: strings.ToLower(yyS[yypt-0].ident)} } - case 1947: + case 1962: { parser.yyVAL.item = &auth.RoleIdentity{Username: yyS[yypt-1].ident, Hostname: strings.ToLower(strings.TrimPrefix(yyS[yypt-0].ident, "@"))} } - case 1948: + case 1963: { parser.yyVAL.item = &auth.RoleIdentity{Username: yyS[yypt-0].ident, Hostname: "%"} } - case 1949: + case 1964: { parser.yyVAL.item = yyS[yypt-0].item } - case 1950: + case 1965: { parser.yyVAL.item = &auth.RoleIdentity{Username: yyS[yypt-0].ident, Hostname: "%"} } - case 1951: + case 1966: { parser.yyVAL.item = yyS[yypt-0].item } - case 1952: + case 1967: { parser.yyVAL.item = []*auth.RoleIdentity{yyS[yypt-0].item.(*auth.RoleIdentity)} } - case 1953: + case 1968: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*auth.RoleIdentity), yyS[yypt-0].item.(*auth.RoleIdentity)) } - case 1954: + case 1969: { parser.yyVAL.item = &ast.LimitSimple{Offset: 0, Count: yyS[yypt-0].item.(uint64)} } - case 1955: + case 1970: { parser.yyVAL.item = &ast.LimitSimple{Offset: yyS[yypt-2].item.(uint64), Count: yyS[yypt-0].item.(uint64)} } - case 1956: + case 1971: { parser.yyVAL.item = &ast.LimitSimple{Offset: yyS[yypt-0].item.(uint64), Count: yyS[yypt-2].item.(uint64)} } - case 1957: + case 1972: { parser.yyVAL.item = ast.BDRRolePrimary } - case 1958: + case 1973: { parser.yyVAL.item = ast.BDRRoleSecondary } - case 1959: + case 1974: { parser.yyVAL.statement = &ast.AdminStmt{Tp: ast.AdminShowDDL} } - case 1960: + case 1975: { stmt := &ast.AdminStmt{Tp: ast.AdminShowDDLJobs} if yyS[yypt-0].item != nil { @@ -20715,7 +20854,7 @@ yynewstate: } parser.yyVAL.statement = stmt } - case 1961: + case 1976: { stmt := &ast.AdminStmt{ Tp: ast.AdminShowDDLJobs, @@ -20726,21 +20865,21 @@ yynewstate: } parser.yyVAL.statement = stmt } - case 1962: + case 1977: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminShowNextRowID, Tables: []*ast.TableName{yyS[yypt-1].item.(*ast.TableName)}, } } - case 1963: + case 1978: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminCheckTable, Tables: yyS[yypt-0].item.([]*ast.TableName), } } - case 1964: + case 1979: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminCheckIndex, @@ -20748,7 +20887,7 @@ yynewstate: Index: string(yyS[yypt-0].ident), } } - case 1965: + case 1980: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminRecoverIndex, @@ -20756,7 +20895,7 @@ yynewstate: Index: string(yyS[yypt-0].ident), } } - case 1966: + case 1981: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminCleanupIndex, @@ -20764,7 +20903,7 @@ yynewstate: Index: string(yyS[yypt-0].ident), } } - case 1967: + case 1982: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminCheckIndexRange, @@ -20773,42 +20912,42 @@ yynewstate: HandleRanges: yyS[yypt-0].item.([]ast.HandleRange), } } - case 1968: + case 1983: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminChecksumTable, Tables: yyS[yypt-0].item.([]*ast.TableName), } } - case 1969: + case 1984: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminCancelDDLJobs, JobIDs: yyS[yypt-0].item.([]int64), } } - case 1970: + case 1985: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminPauseDDLJobs, JobIDs: yyS[yypt-0].item.([]int64), } } - case 1971: + case 1986: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminResumeDDLJobs, JobIDs: yyS[yypt-0].item.([]int64), } } - case 1972: + case 1987: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminShowDDLJobQueries, JobIDs: yyS[yypt-0].item.([]int64), } } - case 1973: + case 1988: { ret := &ast.AdminStmt{ Tp: ast.AdminShowDDLJobQueriesWithRange, @@ -20817,122 +20956,122 @@ yynewstate: ret.LimitSimple.Offset = yyS[yypt-0].item.(*ast.LimitSimple).Offset parser.yyVAL.statement = ret } - case 1974: + case 1989: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminShowSlow, ShowSlow: yyS[yypt-0].item.(*ast.ShowSlow), } } - case 1975: + case 1990: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminReloadExprPushdownBlacklist, } } - case 1976: + case 1991: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminReloadOptRuleBlacklist, } } - case 1977: + case 1992: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminPluginEnable, Plugins: yyS[yypt-0].item.([]string), } } - case 1978: + case 1993: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminPluginDisable, Plugins: yyS[yypt-0].item.([]string), } } - case 1979: + case 1994: { parser.yyVAL.statement = &ast.CleanupTableLockStmt{ Tables: yyS[yypt-0].item.([]*ast.TableName), } } - case 1980: + case 1995: { parser.yyVAL.statement = &ast.RepairTableStmt{ Table: yyS[yypt-1].item.(*ast.TableName), CreateStmt: yyS[yypt-0].statement.(*ast.CreateTableStmt), } } - case 1981: + case 1996: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminFlushBindings, } } - case 1982: + case 1997: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminCaptureBindings, } } - case 1983: + case 1998: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminEvolveBindings, } } - case 1984: + case 1999: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminReloadBindings, } } - case 1985: + case 2000: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminReloadStatistics, } } - case 1986: + case 2001: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminReloadStatistics, } } - case 1987: + case 2002: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminFlushPlanCache, StatementScope: yyS[yypt-1].item.(ast.StatementScope), } } - case 1988: + case 2003: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminSetBDRRole, BDRRole: yyS[yypt-0].item.(ast.BDRRole), } } - case 1989: + case 2004: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminShowBDRRole, } } - case 1990: + case 2005: { parser.yyVAL.statement = &ast.AdminStmt{ Tp: ast.AdminUnsetBDRRole, } } - case 1991: + case 2006: { parser.yyVAL.item = &ast.ShowSlow{ Tp: ast.ShowSlowRecent, Count: getUint64FromNUM(yyS[yypt-0].item), } } - case 1992: + case 2007: { parser.yyVAL.item = &ast.ShowSlow{ Tp: ast.ShowSlowTop, @@ -20940,7 +21079,7 @@ yynewstate: Count: getUint64FromNUM(yyS[yypt-0].item), } } - case 1993: + case 2008: { parser.yyVAL.item = &ast.ShowSlow{ Tp: ast.ShowSlowTop, @@ -20948,7 +21087,7 @@ yynewstate: Count: getUint64FromNUM(yyS[yypt-0].item), } } - case 1994: + case 2009: { parser.yyVAL.item = &ast.ShowSlow{ Tp: ast.ShowSlowTop, @@ -20956,27 +21095,27 @@ yynewstate: Count: getUint64FromNUM(yyS[yypt-0].item), } } - case 1995: + case 2010: { parser.yyVAL.item = []ast.HandleRange{yyS[yypt-0].item.(ast.HandleRange)} } - case 1996: + case 2011: { parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.HandleRange), yyS[yypt-0].item.(ast.HandleRange)) } - case 1997: + case 2012: { parser.yyVAL.item = ast.HandleRange{Begin: yyS[yypt-3].item.(int64), End: yyS[yypt-1].item.(int64)} } - case 1998: + case 2013: { parser.yyVAL.item = []int64{yyS[yypt-0].item.(int64)} } - case 1999: + case 2014: { parser.yyVAL.item = append(yyS[yypt-2].item.([]int64), yyS[yypt-0].item.(int64)) } - case 2000: + case 2015: { stmt := yyS[yypt-1].item.(*ast.ShowStmt) if yyS[yypt-0].item != nil { @@ -20988,21 +21127,21 @@ yynewstate: } parser.yyVAL.statement = stmt } - case 2001: + case 2016: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowCreateTable, Table: yyS[yypt-0].item.(*ast.TableName), } } - case 2002: + case 2017: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowCreateView, Table: yyS[yypt-0].item.(*ast.TableName), } } - case 2003: + case 2018: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowCreateDatabase, @@ -21010,28 +21149,28 @@ yynewstate: DBName: yyS[yypt-0].ident, } } - case 2004: + case 2019: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowCreateSequence, Table: yyS[yypt-0].item.(*ast.TableName), } } - case 2005: + case 2020: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowCreatePlacementPolicy, DBName: yyS[yypt-0].ident, } } - case 2006: + case 2021: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowCreateResourceGroup, ResourceGroupName: yyS[yypt-0].ident, } } - case 2007: + case 2022: { // See https://dev.mysql.com/doc/refman/5.7/en/show-create-user.html parser.yyVAL.statement = &ast.ShowStmt{ @@ -21039,7 +21178,7 @@ yynewstate: User: yyS[yypt-0].item.(*auth.UserIdentity), } } - case 2008: + case 2023: { stmt := &ast.ShowStmt{ Tp: ast.ShowRegions, @@ -21051,14 +21190,14 @@ yynewstate: } parser.yyVAL.statement = stmt } - case 2009: + case 2024: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowTableNextRowId, Table: yyS[yypt-1].item.(*ast.TableName), } } - case 2010: + case 2025: { stmt := &ast.ShowStmt{ Tp: ast.ShowRegions, @@ -21071,12 +21210,12 @@ yynewstate: } parser.yyVAL.statement = stmt } - case 2011: + case 2026: { // See https://dev.mysql.com/doc/refman/5.7/en/show-grants.html parser.yyVAL.statement = &ast.ShowStmt{Tp: ast.ShowGrants} } - case 2012: + case 2027: { // See https://dev.mysql.com/doc/refman/5.7/en/show-grants.html if yyS[yypt-0].item != nil { @@ -21093,38 +21232,38 @@ yynewstate: } } } - case 2013: + case 2028: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowMasterStatus, } } - case 2014: + case 2029: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowBinlogStatus, } } - case 2015: + case 2030: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowReplicaStatus, } } - case 2016: + case 2031: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowProcessList, Full: yyS[yypt-1].item.(bool), } } - case 2017: + case 2032: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowProfiles, } } - case 2018: + case 2033: { v := &ast.ShowStmt{ Tp: ast.ShowProfile, @@ -21140,23 +21279,23 @@ yynewstate: } parser.yyVAL.statement = v } - case 2019: + case 2034: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowPrivileges, } } - case 2020: + case 2035: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowBuiltins, } } - case 2021: + case 2036: { parser.yyVAL.statement = yyS[yypt-0].item.(*ast.ShowStmt) } - case 2022: + case 2037: { v := yyS[yypt-0].item.(int64) parser.yyVAL.statement = &ast.ShowStmt{ @@ -21164,28 +21303,28 @@ yynewstate: ImportJobID: &v, } } - case 2023: + case 2038: { parser.yyVAL.statement = &ast.ShowStmt{ Tp: ast.ShowCreateProcedure, Procedure: yyS[yypt-0].item.(*ast.TableName), } } - case 2024: + case 2039: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowPlacementForDatabase, DBName: yyS[yypt-0].ident, } } - case 2025: + case 2040: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowPlacementForTable, Table: yyS[yypt-0].item.(*ast.TableName), } } - case 2026: + case 2041: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowPlacementForPartition, @@ -21193,90 +21332,90 @@ yynewstate: Partition: model.NewCIStr(yyS[yypt-0].ident), } } - case 2027: + case 2042: { parser.yyVAL.item = nil } - case 2029: + case 2044: { parser.yyVAL.item = []int{yyS[yypt-0].item.(int)} } - case 2030: + case 2045: { l := yyS[yypt-2].item.([]int) l = append(l, yyS[yypt-0].item.(int)) parser.yyVAL.item = l } - case 2031: + case 2046: { parser.yyVAL.item = ast.ProfileTypeCPU } - case 2032: + case 2047: { parser.yyVAL.item = ast.ProfileTypeMemory } - case 2033: + case 2048: { parser.yyVAL.item = ast.ProfileTypeBlockIo } - case 2034: + case 2049: { parser.yyVAL.item = ast.ProfileTypeContextSwitch } - case 2035: + case 2050: { parser.yyVAL.item = ast.ProfileTypePageFaults } - case 2036: + case 2051: { parser.yyVAL.item = ast.ProfileTypeIpc } - case 2037: + case 2052: { parser.yyVAL.item = ast.ProfileTypeSwaps } - case 2038: + case 2053: { parser.yyVAL.item = ast.ProfileTypeSource } - case 2039: + case 2054: { parser.yyVAL.item = ast.ProfileTypeAll } - case 2040: + case 2055: { parser.yyVAL.item = nil } - case 2041: + case 2056: { v := yyS[yypt-0].item.(int64) parser.yyVAL.item = &v } - case 2042: + case 2057: { parser.yyVAL.item = nil } - case 2043: + case 2058: { parser.yyVAL.item = yyS[yypt-0].item.([]*auth.RoleIdentity) } - case 2049: + case 2064: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowEngines} } - case 2050: + case 2065: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowDatabases} } - case 2051: + case 2066: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowConfig} } - case 2052: + case 2067: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowCharset} } - case 2053: + case 2068: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowTables, @@ -21284,28 +21423,28 @@ yynewstate: Full: yyS[yypt-2].item.(bool), } } - case 2054: + case 2069: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowOpenTables, DBName: yyS[yypt-0].ident, } } - case 2055: + case 2070: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowTableStatus, DBName: yyS[yypt-0].ident, } } - case 2056: + case 2071: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowIndex, Table: yyS[yypt-0].item.(*ast.TableName), } } - case 2057: + case 2072: { show := &ast.ShowStmt{ Tp: ast.ShowIndex, @@ -21313,7 +21452,7 @@ yynewstate: } parser.yyVAL.item = show } - case 2058: + case 2073: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowColumns, @@ -21322,7 +21461,7 @@ yynewstate: Full: yyS[yypt-3].item.(bool), } } - case 2059: + case 2074: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowColumns, @@ -21332,81 +21471,81 @@ yynewstate: Extended: true, } } - case 2060: + case 2075: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowWarnings, CountWarningsOrErrors: true} } - case 2061: + case 2076: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowWarnings} } - case 2062: + case 2077: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowErrors, CountWarningsOrErrors: true} } - case 2063: + case 2078: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowErrors} } - case 2064: + case 2079: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowVariables, GlobalScope: yyS[yypt-1].item.(bool), } } - case 2065: + case 2080: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowStatus, GlobalScope: yyS[yypt-1].item.(bool), } } - case 2066: + case 2081: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowBindings, GlobalScope: yyS[yypt-1].item.(bool), } } - case 2067: + case 2082: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowCollation, } } - case 2068: + case 2083: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowTriggers, DBName: yyS[yypt-0].ident, } } - case 2069: + case 2084: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowBindingCacheStatus, } } - case 2070: + case 2085: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowProcedureStatus, } } - case 2071: + case 2086: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowPumpStatus, } } - case 2072: + case 2087: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowDrainerStatus, } } - case 2073: + case 2088: { // This statement is similar to SHOW PROCEDURE STATUS but for stored functions. // See http://dev.mysql.com/doc/refman/5.7/en/show-function-status.html @@ -21416,88 +21555,88 @@ yynewstate: Tp: ast.ShowFunctionStatus, } } - case 2074: + case 2089: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowEvents, DBName: yyS[yypt-0].ident, } } - case 2075: + case 2090: { parser.yyVAL.item = &ast.ShowStmt{ Tp: ast.ShowPlugins, } } - case 2076: + case 2091: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowSessionStates} } - case 2077: + case 2092: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowStatsExtended} } - case 2078: + case 2093: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowStatsMeta, Table: &ast.TableName{Name: model.NewCIStr("STATS_META"), Schema: model.NewCIStr(mysql.SystemDB)}} } - case 2079: + case 2094: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowStatsHistograms, Table: &ast.TableName{Name: model.NewCIStr("STATS_HISTOGRAMS"), Schema: model.NewCIStr(mysql.SystemDB)}} } - case 2080: + case 2095: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowStatsTopN} } - case 2081: + case 2096: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowStatsBuckets, Table: &ast.TableName{Name: model.NewCIStr("STATS_BUCKETS"), Schema: model.NewCIStr(mysql.SystemDB)}} } - case 2082: + case 2097: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowStatsHealthy} } - case 2083: + case 2098: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowStatsLocked, Table: &ast.TableName{Name: model.NewCIStr("STATS_TABLE_LOCKED"), Schema: model.NewCIStr(mysql.SystemDB)}} } - case 2084: + case 2099: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowHistogramsInFlight} } - case 2085: + case 2100: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowColumnStatsUsage} } - case 2086: + case 2101: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowAnalyzeStatus} } - case 2087: + case 2102: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowBackups} } - case 2088: + case 2103: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowRestores} } - case 2089: + case 2104: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowPlacement} } - case 2090: + case 2105: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowPlacementLabels} } - case 2091: + case 2106: { parser.yyVAL.item = &ast.ShowStmt{Tp: ast.ShowImportJobs} } - case 2092: + case 2107: { parser.yyVAL.item = nil } - case 2093: + case 2108: { parser.yyVAL.item = &ast.PatternLikeOrIlikeExpr{ Pattern: yyS[yypt-0].expr, @@ -21505,105 +21644,105 @@ yynewstate: IsLike: true, } } - case 2094: + case 2109: { parser.yyVAL.item = yyS[yypt-0].expr } - case 2095: + case 2110: { parser.yyVAL.item = false } - case 2096: + case 2111: { parser.yyVAL.item = true } - case 2097: + case 2112: { parser.yyVAL.item = false } - case 2098: + case 2113: { parser.yyVAL.item = ast.StatementScopeSession } - case 2099: + case 2114: { parser.yyVAL.item = ast.StatementScopeGlobal } - case 2100: + case 2115: { parser.yyVAL.item = ast.StatementScopeInstance } - case 2101: + case 2116: { parser.yyVAL.item = ast.StatementScopeSession } - case 2102: + case 2117: { parser.yyVAL.item = false } - case 2103: + case 2118: { parser.yyVAL.item = true } - case 2104: + case 2119: { parser.yyVAL.ident = "" } - case 2105: + case 2120: { parser.yyVAL.ident = yyS[yypt-0].ident } - case 2106: + case 2121: { parser.yyVAL.item = yyS[yypt-0].item.(*ast.TableName) } - case 2109: + case 2124: { tmp := yyS[yypt-0].item.(*ast.FlushStmt) tmp.NoWriteToBinLog = yyS[yypt-1].item.(bool) parser.yyVAL.statement = tmp } - case 2110: + case 2125: { parser.yyVAL.item = []string{yyS[yypt-0].ident} } - case 2111: + case 2126: { parser.yyVAL.item = append(yyS[yypt-2].item.([]string), yyS[yypt-0].ident) } - case 2112: + case 2127: { parser.yyVAL.item = &ast.FlushStmt{ Tp: ast.FlushPrivileges, } } - case 2113: + case 2128: { parser.yyVAL.item = &ast.FlushStmt{ Tp: ast.FlushStatus, } } - case 2114: + case 2129: { parser.yyVAL.item = &ast.FlushStmt{ Tp: ast.FlushTiDBPlugin, Plugins: yyS[yypt-0].item.([]string), } } - case 2115: + case 2130: { parser.yyVAL.item = &ast.FlushStmt{ Tp: ast.FlushHosts, } } - case 2116: + case 2131: { parser.yyVAL.item = &ast.FlushStmt{ Tp: ast.FlushLogs, LogType: yyS[yypt-1].item.(ast.LogType), } } - case 2117: + case 2132: { parser.yyVAL.item = &ast.FlushStmt{ Tp: ast.FlushTables, @@ -21611,61 +21750,61 @@ yynewstate: ReadLock: yyS[yypt-0].item.(bool), } } - case 2118: + case 2133: { parser.yyVAL.item = &ast.FlushStmt{ Tp: ast.FlushClientErrorsSummary, } } - case 2119: + case 2134: { parser.yyVAL.item = ast.LogTypeDefault } - case 2120: + case 2135: { parser.yyVAL.item = ast.LogTypeBinary } - case 2121: + case 2136: { parser.yyVAL.item = ast.LogTypeEngine } - case 2122: + case 2137: { parser.yyVAL.item = ast.LogTypeError } - case 2123: + case 2138: { parser.yyVAL.item = ast.LogTypeGeneral } - case 2124: + case 2139: { parser.yyVAL.item = ast.LogTypeSlow } - case 2125: + case 2140: { parser.yyVAL.item = false } - case 2126: + case 2141: { parser.yyVAL.item = true } - case 2127: + case 2142: { parser.yyVAL.item = true } - case 2128: + case 2143: { parser.yyVAL.item = []*ast.TableName{} } - case 2130: + case 2145: { parser.yyVAL.item = false } - case 2131: + case 2146: { parser.yyVAL.item = true } - case 2211: + case 2226: { var sel ast.StmtNode switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) { @@ -21678,7 +21817,7 @@ yynewstate: } parser.yyVAL.statement = sel } - case 2237: + case 2252: { var sel ast.StmtNode switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) { @@ -21691,7 +21830,7 @@ yynewstate: } parser.yyVAL.statement = sel } - case 2253: + case 2268: { var sel ast.StmtNode switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) { @@ -21704,7 +21843,7 @@ yynewstate: } parser.yyVAL.statement = sel } - case 2256: + case 2271: { if yyS[yypt-0].statement != nil { s := yyS[yypt-0].statement @@ -21714,7 +21853,7 @@ yynewstate: parser.result = append(parser.result, s) } } - case 2257: + case 2272: { if yyS[yypt-0].statement != nil { s := yyS[yypt-0].statement @@ -21724,7 +21863,7 @@ yynewstate: parser.result = append(parser.result, s) } } - case 2258: + case 2273: { cst := yyS[yypt-0].item.(*ast.Constraint) if yyS[yypt-1].item != nil { @@ -21733,7 +21872,7 @@ yynewstate: } parser.yyVAL.item = cst } - case 2263: + case 2278: { if yyS[yypt-0].item != nil { parser.yyVAL.item = []interface{}{yyS[yypt-0].item.(interface{})} @@ -21741,7 +21880,7 @@ yynewstate: parser.yyVAL.item = []interface{}{} } } - case 2264: + case 2279: { if yyS[yypt-0].item != nil { parser.yyVAL.item = append(yyS[yypt-2].item.([]interface{}), yyS[yypt-0].item) @@ -21749,7 +21888,7 @@ yynewstate: parser.yyVAL.item = yyS[yypt-2].item } } - case 2265: + case 2280: { var columnDefs []*ast.ColumnDef var constraints []*ast.Constraint @@ -21758,7 +21897,7 @@ yynewstate: Constraints: constraints, } } - case 2266: + case 2281: { tes := yyS[yypt-1].item.([]interface{}) var columnDefs []*ast.ColumnDef @@ -21776,69 +21915,69 @@ yynewstate: Constraints: constraints, } } - case 2268: + case 2283: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionCharset, StrValue: yyS[yypt-0].ident, UintValue: ast.TableOptionCharsetWithoutConvertTo} } - case 2269: + case 2284: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionCollate, StrValue: yyS[yypt-0].ident, UintValue: ast.TableOptionCharsetWithoutConvertTo} } - case 2270: + case 2285: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionAutoIncrement, UintValue: yyS[yypt-0].item.(uint64), BoolValue: yyS[yypt-3].item.(bool)} } - case 2271: + case 2286: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionAutoIdCache, UintValue: yyS[yypt-0].item.(uint64)} } - case 2272: + case 2287: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionAutoRandomBase, UintValue: yyS[yypt-0].item.(uint64), BoolValue: yyS[yypt-3].item.(bool)} } - case 2273: + case 2288: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionAvgRowLength, UintValue: yyS[yypt-0].item.(uint64)} } - case 2274: + case 2289: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionConnection, StrValue: yyS[yypt-0].ident} } - case 2275: + case 2290: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionCheckSum, UintValue: yyS[yypt-0].item.(uint64)} } - case 2276: + case 2291: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionTableCheckSum, UintValue: yyS[yypt-0].item.(uint64)} } - case 2277: + case 2292: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionPassword, StrValue: yyS[yypt-0].ident} } - case 2278: + case 2293: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionCompression, StrValue: yyS[yypt-0].ident} } - case 2279: + case 2294: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionKeyBlockSize, UintValue: yyS[yypt-0].item.(uint64)} } - case 2280: + case 2295: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionDelayKeyWrite, UintValue: yyS[yypt-0].item.(uint64)} } - case 2281: + case 2296: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionRowFormat, UintValue: yyS[yypt-0].item.(uint64)} } - case 2282: + case 2297: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionStatsPersistent} } - case 2283: + case 2298: { n := yyS[yypt-0].item.(uint64) if n != 0 && n != 1 { @@ -21849,13 +21988,13 @@ yynewstate: yylex.AppendError(yylex.Errorf("The STATS_AUTO_RECALC is parsed but ignored by all storage engines.")) parser.lastErrorAsWarn() } - case 2284: + case 2299: { parser.yyVAL.item = &ast.TableOption{Tp: ast.TableOptionStatsAutoRecalc, Default: true} yylex.AppendError(yylex.Errorf("The STATS_AUTO_RECALC is parsed but ignored by all storage engines.")) parser.lastErrorAsWarn() } - case 2285: + case 2300: { // Parse it but will ignore it. // In MySQL, STATS_SAMPLE_PAGES=N(Where 0 1 { @@ -23789,7 +23944,7 @@ yynewstate: OptEnclosed: true, } } - case 2636: + case 2655: { str := yyS[yypt-0].ident if str != "\\" && len(str) > 1 { @@ -23801,7 +23956,7 @@ yynewstate: Value: str, } } - case 2637: + case 2656: { str := yyS[yypt-0].ident if str != "\\" && len(str) > 1 { @@ -23813,14 +23968,14 @@ yynewstate: Value: str, } } - case 2638: + case 2657: { parser.yyVAL.item = &ast.FieldItem{ Type: ast.DefinedNullBy, Value: yyS[yypt-0].item.(*ast.TextString).Value, } } - case 2639: + case 2658: { parser.yyVAL.item = &ast.FieldItem{ Type: ast.DefinedNullBy, @@ -23828,89 +23983,89 @@ yynewstate: OptEnclosed: true, } } - case 2641: + case 2660: { parser.yyVAL.ident = yyS[yypt-0].item.(ast.BinaryLiteral).ToString() } - case 2642: + case 2661: { parser.yyVAL.ident = yyS[yypt-0].item.(ast.BinaryLiteral).ToString() } - case 2643: + case 2662: { parser.yyVAL.item = (*ast.LinesClause)(nil) } - case 2644: + case 2663: { parser.yyVAL.item = &ast.LinesClause{Starting: yyS[yypt-1].item.(*string), Terminated: yyS[yypt-0].item.(*string)} } - case 2645: + case 2664: { parser.yyVAL.item = (*string)(nil) } - case 2646: + case 2665: { s := yyS[yypt-0].ident parser.yyVAL.item = &s } - case 2647: + case 2666: { parser.yyVAL.item = (*string)(nil) } - case 2648: + case 2667: { s := yyS[yypt-0].ident parser.yyVAL.item = &s } - case 2649: + case 2668: { parser.yyVAL.item = ([]*ast.Assignment)(nil) } - case 2650: + case 2669: { parser.yyVAL.item = yyS[yypt-0].item } - case 2651: + case 2670: { l := yyS[yypt-2].item.([]*ast.Assignment) parser.yyVAL.item = append(l, yyS[yypt-0].item.(*ast.Assignment)) } - case 2652: + case 2671: { parser.yyVAL.item = []*ast.Assignment{yyS[yypt-0].item.(*ast.Assignment)} } - case 2653: + case 2672: { parser.yyVAL.item = &ast.Assignment{ Column: yyS[yypt-2].expr.(*ast.ColumnNameExpr).Name, Expr: yyS[yypt-0].expr, } } - case 2654: + case 2673: { parser.yyVAL.item = []*ast.LoadDataOpt{} } - case 2655: + case 2674: { parser.yyVAL.item = yyS[yypt-0].item.([]*ast.LoadDataOpt) } - case 2656: + case 2675: { parser.yyVAL.item = []*ast.LoadDataOpt{yyS[yypt-0].item.(*ast.LoadDataOpt)} } - case 2657: + case 2676: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.LoadDataOpt), yyS[yypt-0].item.(*ast.LoadDataOpt)) } - case 2658: + case 2677: { parser.yyVAL.item = &ast.LoadDataOpt{Name: strings.ToLower(yyS[yypt-0].ident)} } - case 2659: + case 2678: { parser.yyVAL.item = &ast.LoadDataOpt{Name: strings.ToLower(yyS[yypt-2].ident), Value: yyS[yypt-0].expr.(ast.ExprNode)} } - case 2660: + case 2679: { parser.yyVAL.statement = &ast.ImportIntoStmt{ Table: yyS[yypt-6].item.(*ast.TableName), @@ -23921,7 +24076,7 @@ yynewstate: Options: yyS[yypt-0].item.([]*ast.LoadDataOpt), } } - case 2661: + case 2680: { st := &ast.ImportIntoStmt{ Table: yyS[yypt-5].item.(*ast.TableName), @@ -23941,19 +24096,19 @@ yynewstate: } parser.yyVAL.statement = st } - case 2662: + case 2681: { parser.yyVAL.statement = yyS[yypt-0].statement } - case 2663: + case 2682: { parser.yyVAL.statement = yyS[yypt-0].statement } - case 2664: + case 2683: { parser.yyVAL.statement = yyS[yypt-0].statement } - case 2665: + case 2684: { var sel ast.ResultSetNode switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) { @@ -23966,48 +24121,48 @@ yynewstate: } parser.yyVAL.statement = sel.(ast.StmtNode) } - case 2666: + case 2685: { parser.yyVAL.statement = &ast.UnlockTablesStmt{} } - case 2667: + case 2686: { parser.yyVAL.statement = &ast.LockTablesStmt{ TableLocks: yyS[yypt-0].item.([]ast.TableLock), } } - case 2670: + case 2689: { parser.yyVAL.item = ast.TableLock{ Table: yyS[yypt-1].item.(*ast.TableName), Type: yyS[yypt-0].item.(model.TableLockType), } } - case 2671: + case 2690: { parser.yyVAL.item = model.TableLockRead } - case 2672: + case 2691: { parser.yyVAL.item = model.TableLockReadLocal } - case 2673: + case 2692: { parser.yyVAL.item = model.TableLockWrite } - case 2674: + case 2693: { parser.yyVAL.item = model.TableLockWriteLocal } - case 2675: + case 2694: { parser.yyVAL.item = []ast.TableLock{yyS[yypt-0].item.(ast.TableLock)} } - case 2676: + case 2695: { parser.yyVAL.item = append(yyS[yypt-2].item.([]ast.TableLock), yyS[yypt-0].item.(ast.TableLock)) } - case 2677: + case 2696: { parser.yyVAL.statement = &ast.NonTransactionalDMLStmt{ DryRun: yyS[yypt-1].item.(int), @@ -24016,48 +24171,48 @@ yynewstate: DMLStmt: yyS[yypt-0].statement.(ast.ShardableDMLStmt), } } - case 2682: + case 2701: { parser.yyVAL.item = ast.NoDryRun } - case 2683: + case 2702: { parser.yyVAL.item = ast.DryRunSplitDml } - case 2684: + case 2703: { parser.yyVAL.item = ast.DryRunQuery } - case 2685: + case 2704: { parser.yyVAL.item = (*ast.ColumnName)(nil) } - case 2686: + case 2705: { parser.yyVAL.item = yyS[yypt-0].item.(*ast.ColumnName) } - case 2687: + case 2706: { parser.yyVAL.statement = &ast.OptimizeTableStmt{ Tables: yyS[yypt-0].item.([]*ast.TableName), NoWriteToBinLog: yyS[yypt-2].item.(bool), } } - case 2688: + case 2707: { parser.yyVAL.statement = &ast.KillStmt{ ConnectionID: getUint64FromNUM(yyS[yypt-0].item), TiDBExtension: yyS[yypt-1].item.(bool), } } - case 2689: + case 2708: { parser.yyVAL.statement = &ast.KillStmt{ ConnectionID: getUint64FromNUM(yyS[yypt-0].item), TiDBExtension: yyS[yypt-2].item.(bool), } } - case 2690: + case 2709: { parser.yyVAL.statement = &ast.KillStmt{ ConnectionID: getUint64FromNUM(yyS[yypt-0].item), @@ -24065,34 +24220,34 @@ yynewstate: TiDBExtension: yyS[yypt-2].item.(bool), } } - case 2691: + case 2710: { parser.yyVAL.statement = &ast.KillStmt{ TiDBExtension: yyS[yypt-1].item.(bool), Expr: yyS[yypt-0].expr, } } - case 2692: + case 2711: { parser.yyVAL.item = false } - case 2693: + case 2712: { parser.yyVAL.item = true } - case 2694: + case 2713: { parser.yyVAL.statement = &ast.LoadStatsStmt{ Path: yyS[yypt-0].ident, } } - case 2695: + case 2714: { parser.yyVAL.statement = &ast.LockStatsStmt{ Tables: yyS[yypt-0].item.([]*ast.TableName), } } - case 2696: + case 2715: { x := yyS[yypt-2].item.(*ast.TableName) x.PartitionNames = yyS[yypt-0].item.([]model.CIStr) @@ -24100,7 +24255,7 @@ yynewstate: Tables: []*ast.TableName{x}, } } - case 2697: + case 2716: { x := yyS[yypt-4].item.(*ast.TableName) x.PartitionNames = yyS[yypt-1].item.([]model.CIStr) @@ -24108,13 +24263,13 @@ yynewstate: Tables: []*ast.TableName{x}, } } - case 2698: + case 2717: { parser.yyVAL.statement = &ast.UnlockStatsStmt{ Tables: yyS[yypt-0].item.([]*ast.TableName), } } - case 2699: + case 2718: { x := yyS[yypt-2].item.(*ast.TableName) x.PartitionNames = yyS[yypt-0].item.([]model.CIStr) @@ -24122,7 +24277,7 @@ yynewstate: Tables: []*ast.TableName{x}, } } - case 2700: + case 2719: { x := yyS[yypt-4].item.(*ast.TableName) x.PartitionNames = yyS[yypt-1].item.([]model.CIStr) @@ -24130,14 +24285,14 @@ yynewstate: Tables: []*ast.TableName{x}, } } - case 2701: + case 2720: { parser.yyVAL.statement = &ast.DropPlacementPolicyStmt{ IfExists: yyS[yypt-1].item.(bool), PolicyName: model.NewCIStr(yyS[yypt-0].ident), } } - case 2702: + case 2721: { parser.yyVAL.statement = &ast.CreateResourceGroupStmt{ IfNotExists: yyS[yypt-2].item.(bool), @@ -24145,7 +24300,7 @@ yynewstate: ResourceGroupOptionList: yyS[yypt-0].item.([]*ast.ResourceGroupOption), } } - case 2703: + case 2722: { parser.yyVAL.statement = &ast.AlterResourceGroupStmt{ IfExists: yyS[yypt-2].item.(bool), @@ -24153,14 +24308,14 @@ yynewstate: ResourceGroupOptionList: yyS[yypt-0].item.([]*ast.ResourceGroupOption), } } - case 2704: + case 2723: { parser.yyVAL.statement = &ast.DropResourceGroupStmt{ IfExists: yyS[yypt-1].item.(bool), ResourceGroupName: model.NewCIStr(yyS[yypt-0].ident), } } - case 2705: + case 2724: { parser.yyVAL.statement = &ast.CreatePlacementPolicyStmt{ OrReplace: yyS[yypt-5].item.(bool), @@ -24169,7 +24324,7 @@ yynewstate: PlacementOptions: yyS[yypt-0].item.([]*ast.PlacementOption), } } - case 2706: + case 2725: { parser.yyVAL.statement = &ast.AlterPlacementPolicyStmt{ IfExists: yyS[yypt-2].item.(bool), @@ -24177,7 +24332,7 @@ yynewstate: PlacementOptions: yyS[yypt-0].item.([]*ast.PlacementOption), } } - case 2707: + case 2726: { parser.yyVAL.statement = &ast.CreateSequenceStmt{ IfNotExists: yyS[yypt-3].item.(bool), @@ -24186,87 +24341,87 @@ yynewstate: TblOptions: yyS[yypt-0].item.([]*ast.TableOption), } } - case 2708: + case 2727: { parser.yyVAL.item = []*ast.SequenceOption{} } - case 2710: + case 2729: { parser.yyVAL.item = []*ast.SequenceOption{yyS[yypt-0].item.(*ast.SequenceOption)} } - case 2711: + case 2730: { parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.SequenceOption), yyS[yypt-0].item.(*ast.SequenceOption)) } - case 2712: + case 2731: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceOptionIncrementBy, IntValue: yyS[yypt-0].item.(int64)} } - case 2713: + case 2732: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceOptionIncrementBy, IntValue: yyS[yypt-0].item.(int64)} } - case 2714: + case 2733: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceStartWith, IntValue: yyS[yypt-0].item.(int64)} } - case 2715: + case 2734: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceStartWith, IntValue: yyS[yypt-0].item.(int64)} } - case 2716: + case 2735: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceMinValue, IntValue: yyS[yypt-0].item.(int64)} } - case 2717: + case 2736: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceNoMinValue} } - case 2718: + case 2737: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceNoMinValue} } - case 2719: + case 2738: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceMaxValue, IntValue: yyS[yypt-0].item.(int64)} } - case 2720: + case 2739: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceNoMaxValue} } - case 2721: + case 2740: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceNoMaxValue} } - case 2722: + case 2741: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceCache, IntValue: yyS[yypt-0].item.(int64)} } - case 2723: + case 2742: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceNoCache} } - case 2724: + case 2743: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceNoCache} } - case 2725: + case 2744: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceCycle} } - case 2726: + case 2745: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceNoCycle} } - case 2727: + case 2746: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceNoCycle} } - case 2729: + case 2748: { parser.yyVAL.item = yyS[yypt-0].item } - case 2730: + case 2749: { unsigned_num := getUint64FromNUM(yyS[yypt-0].item) if unsigned_num > 9223372036854775808 { @@ -24279,14 +24434,14 @@ yynewstate: parser.yyVAL.item = -int64(unsigned_num) } } - case 2731: + case 2750: { parser.yyVAL.statement = &ast.DropSequenceStmt{ IfExists: yyS[yypt-1].item.(bool), Sequences: yyS[yypt-0].item.([]*ast.TableName), } } - case 2732: + case 2751: { parser.yyVAL.statement = &ast.AlterSequenceStmt{ IfExists: yyS[yypt-2].item.(bool), @@ -24294,27 +24449,27 @@ yynewstate: SeqOptions: yyS[yypt-0].item.([]*ast.SequenceOption), } } - case 2733: + case 2752: { parser.yyVAL.item = []*ast.SequenceOption{yyS[yypt-0].item.(*ast.SequenceOption)} } - case 2734: + case 2753: { parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.SequenceOption), yyS[yypt-0].item.(*ast.SequenceOption)) } - case 2736: + case 2755: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceRestart} } - case 2737: + case 2756: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceRestartWith, IntValue: yyS[yypt-0].item.(int64)} } - case 2738: + case 2757: { parser.yyVAL.item = &ast.SequenceOption{Tp: ast.SequenceRestartWith, IntValue: yyS[yypt-0].item.(int64)} } - case 2739: + case 2758: { x := &ast.IndexAdviseStmt{ Path: yyS[yypt-3].ident, @@ -24331,42 +24486,42 @@ yynewstate: } parser.yyVAL.statement = x } - case 2740: + case 2759: { parser.yyVAL.item = uint64(ast.UnspecifiedSize) } - case 2741: + case 2760: { parser.yyVAL.item = getUint64FromNUM(yyS[yypt-0].item) } - case 2742: + case 2761: { parser.yyVAL.item = nil } - case 2743: + case 2762: { parser.yyVAL.item = &ast.MaxIndexNumClause{ PerTable: yyS[yypt-1].item.(uint64), PerDB: yyS[yypt-0].item.(uint64), } } - case 2744: + case 2763: { parser.yyVAL.item = uint64(ast.UnspecifiedSize) } - case 2745: + case 2764: { parser.yyVAL.item = getUint64FromNUM(yyS[yypt-0].item) } - case 2746: + case 2765: { parser.yyVAL.item = uint64(ast.UnspecifiedSize) } - case 2747: + case 2766: { parser.yyVAL.item = getUint64FromNUM(yyS[yypt-0].item) } - case 2748: + case 2767: { // Parse it but will ignore it switch yyS[yypt-0].ident { @@ -24381,19 +24536,19 @@ yynewstate: } parser.yyVAL.ident = yyS[yypt-0].ident } - case 2749: + case 2768: { parser.yyVAL.item = append([]*ast.RowExpr{}, yyS[yypt-0].item.(*ast.RowExpr)) } - case 2750: + case 2769: { parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.RowExpr), yyS[yypt-0].item.(*ast.RowExpr)) } - case 2751: + case 2770: { parser.yyVAL.item = &ast.RowExpr{Values: yyS[yypt-0].item.([]ast.ExprNode)} } - case 2752: + case 2771: { x := &ast.PlanReplayerStmt{ Stmt: yyS[yypt-0].statement, @@ -24412,7 +24567,7 @@ yynewstate: parser.yyVAL.statement = x } - case 2753: + case 2772: { x := &ast.PlanReplayerStmt{ Stmt: yyS[yypt-0].statement, @@ -24431,7 +24586,7 @@ yynewstate: parser.yyVAL.statement = x } - case 2754: + case 2773: { x := &ast.PlanReplayerStmt{ Stmt: nil, @@ -24454,7 +24609,7 @@ yynewstate: parser.yyVAL.statement = x } - case 2755: + case 2774: { x := &ast.PlanReplayerStmt{ Stmt: nil, @@ -24477,7 +24632,7 @@ yynewstate: parser.yyVAL.statement = x } - case 2756: + case 2775: { x := &ast.PlanReplayerStmt{ Stmt: nil, @@ -24490,7 +24645,7 @@ yynewstate: } parser.yyVAL.statement = x } - case 2757: + case 2776: { x := &ast.PlanReplayerStmt{ Stmt: nil, @@ -24503,7 +24658,7 @@ yynewstate: } parser.yyVAL.statement = x } - case 2758: + case 2777: { x := &ast.PlanReplayerStmt{ Stmt: nil, @@ -24517,7 +24672,7 @@ yynewstate: parser.yyVAL.statement = x } - case 2759: + case 2778: { x := &ast.PlanReplayerStmt{ Stmt: nil, @@ -24532,7 +24687,7 @@ yynewstate: parser.yyVAL.statement = x } - case 2760: + case 2779: { x := &ast.PlanReplayerStmt{ Stmt: nil, @@ -24547,33 +24702,33 @@ yynewstate: parser.yyVAL.statement = x } - case 2761: + case 2780: { parser.yyVAL.item = nil } - case 2762: + case 2781: { parser.yyVAL.item = yyS[yypt-0].item.(*ast.AsOfClause) } - case 2763: + case 2782: { parser.yyVAL.item = []*ast.StoreParameter{} } - case 2764: + case 2783: { parser.yyVAL.item = yyS[yypt-0].item } - case 2765: + case 2784: { l := yyS[yypt-2].item.([]*ast.StoreParameter) l = append(l, yyS[yypt-0].item.(*ast.StoreParameter)) parser.yyVAL.item = l } - case 2766: + case 2785: { parser.yyVAL.item = []*ast.StoreParameter{yyS[yypt-0].item.(*ast.StoreParameter)} } - case 2767: + case 2786: { x := &ast.StoreParameter{ Paramstatus: yyS[yypt-2].item.(int), @@ -24582,23 +24737,23 @@ yynewstate: } parser.yyVAL.item = x } - case 2768: + case 2787: { parser.yyVAL.item = ast.MODE_IN } - case 2769: + case 2788: { parser.yyVAL.item = ast.MODE_IN } - case 2770: + case 2789: { parser.yyVAL.item = ast.MODE_OUT } - case 2771: + case 2790: { parser.yyVAL.item = ast.MODE_INOUT } - case 2774: + case 2793: { var sel ast.StmtNode switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) { @@ -24611,7 +24766,7 @@ yynewstate: } parser.yyVAL.statement = sel } - case 2789: + case 2808: { var sel ast.StmtNode switch x := yyS[yypt-0].expr.(*ast.SubqueryExpr).Query.(type) { @@ -24624,29 +24779,29 @@ yynewstate: } parser.yyVAL.statement = sel } - case 2791: + case 2810: { parser.yyVAL.statement = yyS[yypt-0].statement } - case 2792: + case 2811: { parser.yyVAL.item = []string{strings.ToLower(yyS[yypt-0].ident)} } - case 2793: + case 2812: { l := yyS[yypt-2].item.([]string) l = append(l, strings.ToLower(yyS[yypt-0].ident)) parser.yyVAL.item = l } - case 2794: + case 2813: { parser.yyVAL.item = nil } - case 2795: + case 2814: { parser.yyVAL.item = yyS[yypt-0].expr } - case 2796: + case 2815: { x := &ast.ProcedureDecl{ DeclNames: yyS[yypt-2].item.([]string), @@ -24657,7 +24812,7 @@ yynewstate: } parser.yyVAL.item = x } - case 2797: + case 2816: { name := strings.ToLower(yyS[yypt-3].ident) parser.yyVAL.item = &ast.ProcedureCursor{ @@ -24665,7 +24820,7 @@ yynewstate: Selectstring: yyS[yypt-0].statement.(ast.StmtNode), } } - case 2798: + case 2817: { parser.yyVAL.item = &ast.ProcedureErrorControl{ ControlHandle: yyS[yypt-4].item.(int), @@ -24673,66 +24828,66 @@ yynewstate: Operate: yyS[yypt-0].statement.(ast.StmtNode), } } - case 2799: + case 2818: { parser.yyVAL.item = ast.PROCEDUR_CONTINUE } - case 2800: + case 2819: { parser.yyVAL.item = ast.PROCEDUR_EXIT } - case 2801: + case 2820: { parser.yyVAL.item = []ast.ErrNode{yyS[yypt-0].statement.(ast.ErrNode)} } - case 2802: + case 2821: { l := yyS[yypt-2].item.([]ast.ErrNode) l = append(l, yyS[yypt-0].statement.(ast.ErrNode)) parser.yyVAL.item = l } - case 2803: + case 2822: { parser.yyVAL.statement = yyS[yypt-0].statement.(ast.ErrNode) } - case 2804: + case 2823: { parser.yyVAL.statement = &ast.ProcedureErrorCon{ ErrorCon: ast.PROCEDUR_SQLWARNING, } } - case 2805: + case 2824: { parser.yyVAL.statement = &ast.ProcedureErrorCon{ ErrorCon: ast.PROCEDUR_NOT_FOUND, } } - case 2806: + case 2825: { parser.yyVAL.statement = &ast.ProcedureErrorCon{ ErrorCon: ast.PROCEDUR_SQLEXCEPTION, } } - case 2807: + case 2826: { parser.yyVAL.statement = &ast.ProcedureErrorVal{ ErrorNum: getUint64FromNUM(yyS[yypt-0].item), } } - case 2808: + case 2827: { parser.yyVAL.statement = &ast.ProcedureErrorState{ CodeStatus: yyS[yypt-0].ident, } } - case 2811: + case 2830: { name := strings.ToLower(yyS[yypt-0].ident) parser.yyVAL.statement = &ast.ProcedureOpenCur{ CurName: name, } } - case 2812: + case 2831: { name := strings.ToLower(yyS[yypt-2].ident) parser.yyVAL.statement = &ast.ProcedureFetchInto{ @@ -24740,62 +24895,62 @@ yynewstate: Variables: yyS[yypt-0].item.([]string), } } - case 2813: + case 2832: { name := strings.ToLower(yyS[yypt-0].ident) parser.yyVAL.statement = &ast.ProcedureCloseCur{ CurName: name, } } - case 2817: + case 2836: { parser.yyVAL.item = []string{strings.ToLower(yyS[yypt-0].ident)} } - case 2818: + case 2837: { l := yyS[yypt-2].item.([]string) l = append(l, strings.ToLower(yyS[yypt-0].ident)) parser.yyVAL.item = l } - case 2819: + case 2838: { parser.yyVAL.item = []ast.DeclNode{} } - case 2820: + case 2839: { parser.yyVAL.item = yyS[yypt-0].item } - case 2821: + case 2840: { parser.yyVAL.item = []ast.DeclNode{yyS[yypt-1].item.(ast.DeclNode)} } - case 2822: + case 2841: { l := yyS[yypt-2].item.([]ast.DeclNode) l = append(l, yyS[yypt-1].item.(ast.DeclNode)) parser.yyVAL.item = l } - case 2823: + case 2842: { parser.yyVAL.item = []ast.StmtNode{} } - case 2824: + case 2843: { l := yyS[yypt-2].item.([]ast.StmtNode) l = append(l, yyS[yypt-1].statement.(ast.StmtNode)) parser.yyVAL.item = l } - case 2825: + case 2844: { parser.yyVAL.item = []ast.StmtNode{yyS[yypt-1].statement.(ast.StmtNode)} } - case 2826: + case 2845: { l := yyS[yypt-2].item.([]ast.StmtNode) l = append(l, yyS[yypt-1].statement.(ast.StmtNode)) parser.yyVAL.item = l } - case 2827: + case 2846: { x := &ast.ProcedureBlock{ ProcedureVars: yyS[yypt-2].item.([]ast.DeclNode), @@ -24803,13 +24958,13 @@ yynewstate: } parser.yyVAL.statement = x } - case 2828: + case 2847: { parser.yyVAL.statement = &ast.ProcedureIfInfo{ IfBody: yyS[yypt-2].statement.(*ast.ProcedureIfBlock), } } - case 2829: + case 2848: { ifBlock := &ast.ProcedureIfBlock{ IfExpr: yyS[yypt-3].expr.(ast.ExprNode), @@ -24820,73 +24975,73 @@ yynewstate: } parser.yyVAL.statement = ifBlock } - case 2830: + case 2849: { parser.yyVAL.statement = nil } - case 2831: + case 2850: { parser.yyVAL.statement = &ast.ProcedureElseIfBlock{ ProcedureIfStmt: yyS[yypt-0].statement.(*ast.ProcedureIfBlock), } } - case 2832: + case 2851: { parser.yyVAL.statement = &ast.ProcedureElseBlock{ ProcedureIfStmts: yyS[yypt-0].item.([]ast.StmtNode), } } - case 2833: + case 2852: { parser.yyVAL.statement = yyS[yypt-0].statement } - case 2834: + case 2853: { parser.yyVAL.statement = yyS[yypt-0].statement } - case 2835: + case 2854: { parser.yyVAL.item = []*ast.SimpleWhenThenStmt{yyS[yypt-0].statement.(*ast.SimpleWhenThenStmt)} } - case 2836: + case 2855: { l := yyS[yypt-1].item.([]*ast.SimpleWhenThenStmt) l = append(l, yyS[yypt-0].statement.(*ast.SimpleWhenThenStmt)) parser.yyVAL.item = l } - case 2837: + case 2856: { parser.yyVAL.item = []*ast.SearchWhenThenStmt{yyS[yypt-0].statement.(*ast.SearchWhenThenStmt)} } - case 2838: + case 2857: { l := yyS[yypt-1].item.([]*ast.SearchWhenThenStmt) l = append(l, yyS[yypt-0].statement.(*ast.SearchWhenThenStmt)) parser.yyVAL.item = l } - case 2839: + case 2858: { parser.yyVAL.statement = &ast.SimpleWhenThenStmt{ Expr: yyS[yypt-2].expr.(ast.ExprNode), ProcedureStmts: yyS[yypt-0].item.([]ast.StmtNode), } } - case 2840: + case 2859: { parser.yyVAL.statement = &ast.SearchWhenThenStmt{ Expr: yyS[yypt-2].expr.(ast.ExprNode), ProcedureStmts: yyS[yypt-0].item.([]ast.StmtNode), } } - case 2841: + case 2860: { parser.yyVAL.item = nil } - case 2842: + case 2861: { parser.yyVAL.item = yyS[yypt-0].item.([]ast.StmtNode) } - case 2843: + case 2862: { caseStmt := &ast.SimpleCaseStmt{ Condition: yyS[yypt-4].expr.(ast.ExprNode), @@ -24897,7 +25052,7 @@ yynewstate: } parser.yyVAL.statement = caseStmt } - case 2844: + case 2863: { caseStmt := &ast.SearchCaseStmt{ WhenCases: yyS[yypt-3].item.([]*ast.SearchWhenThenStmt), @@ -24907,25 +25062,25 @@ yynewstate: } parser.yyVAL.statement = caseStmt } - case 2845: + case 2864: { parser.yyVAL.statement = yyS[yypt-0].statement } - case 2846: + case 2865: { parser.yyVAL.statement = &ast.ProcedureWhileStmt{ Condition: yyS[yypt-4].expr.(ast.ExprNode), Body: yyS[yypt-2].item.([]ast.StmtNode), } } - case 2847: + case 2866: { parser.yyVAL.statement = &ast.ProcedureRepeatStmt{ Body: yyS[yypt-4].item.([]ast.StmtNode), Condition: yyS[yypt-2].expr.(ast.ExprNode), } } - case 2848: + case 2867: { labelBlock := &ast.ProcedureLabelBlock{ LabelName: yyS[yypt-3].ident, @@ -24937,15 +25092,15 @@ yynewstate: } parser.yyVAL.statement = labelBlock } - case 2849: + case 2868: { parser.yyVAL.ident = "" } - case 2850: + case 2869: { parser.yyVAL.ident = yyS[yypt-0].ident } - case 2851: + case 2870: { labelLoop := &ast.ProcedureLabelLoop{ LabelName: yyS[yypt-3].ident, @@ -24957,21 +25112,21 @@ yynewstate: } parser.yyVAL.statement = labelLoop } - case 2852: + case 2871: { parser.yyVAL.statement = &ast.ProcedureJump{ Name: yyS[yypt-0].ident, IsLeave: false, } } - case 2853: + case 2872: { parser.yyVAL.statement = &ast.ProcedureJump{ Name: yyS[yypt-0].ident, IsLeave: true, } } - case 2866: + case 2885: { x := &ast.ProcedureInfo{ IfNotExists: yyS[yypt-5].item.(bool), @@ -24990,38 +25145,38 @@ yynewstate: x.ProcedureParamStr = strings.TrimSpace(parser.src[startOffset:endOffset]) parser.yyVAL.statement = x } - case 2867: + case 2886: { parser.yyVAL.statement = &ast.DropProcedureStmt{ IfExists: yyS[yypt-1].item.(bool), ProcedureName: yyS[yypt-0].item.(*ast.TableName), } } - case 2868: + case 2887: { parser.yyVAL.statement = yyS[yypt-0].item.(*ast.CalibrateResourceStmt) } - case 2869: + case 2888: { parser.yyVAL.item = &ast.CalibrateResourceStmt{} } - case 2870: + case 2889: { parser.yyVAL.item = &ast.CalibrateResourceStmt{ DynamicCalibrateResourceOptionList: yyS[yypt-0].item.([]*ast.DynamicCalibrateResourceOption), } } - case 2871: + case 2890: { parser.yyVAL.item = &ast.CalibrateResourceStmt{ Tp: yyS[yypt-0].item.(ast.CalibrateResourceType), } } - case 2872: + case 2891: { parser.yyVAL.item = []*ast.DynamicCalibrateResourceOption{yyS[yypt-0].item.(*ast.DynamicCalibrateResourceOption)} } - case 2873: + case 2892: { if yyS[yypt-1].item.([]*ast.DynamicCalibrateResourceOption)[0].Tp == yyS[yypt-0].item.(*ast.DynamicCalibrateResourceOption).Tp || (len(yyS[yypt-1].item.([]*ast.DynamicCalibrateResourceOption)) > 1 && yyS[yypt-1].item.([]*ast.DynamicCalibrateResourceOption)[1].Tp == yyS[yypt-0].item.(*ast.DynamicCalibrateResourceOption).Tp) { @@ -25030,7 +25185,7 @@ yynewstate: } parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.DynamicCalibrateResourceOption), yyS[yypt-0].item.(*ast.DynamicCalibrateResourceOption)) } - case 2874: + case 2893: { if yyS[yypt-2].item.([]*ast.DynamicCalibrateResourceOption)[0].Tp == yyS[yypt-0].item.(*ast.DynamicCalibrateResourceOption).Tp || (len(yyS[yypt-2].item.([]*ast.DynamicCalibrateResourceOption)) > 1 && yyS[yypt-2].item.([]*ast.DynamicCalibrateResourceOption)[1].Tp == yyS[yypt-0].item.(*ast.DynamicCalibrateResourceOption).Tp) { @@ -25039,15 +25194,15 @@ yynewstate: } parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.DynamicCalibrateResourceOption), yyS[yypt-0].item.(*ast.DynamicCalibrateResourceOption)) } - case 2875: + case 2894: { parser.yyVAL.item = &ast.DynamicCalibrateResourceOption{Tp: ast.CalibrateStartTime, Ts: yyS[yypt-0].expr.(ast.ExprNode)} } - case 2876: + case 2895: { parser.yyVAL.item = &ast.DynamicCalibrateResourceOption{Tp: ast.CalibrateEndTime, Ts: yyS[yypt-0].expr.(ast.ExprNode)} } - case 2877: + case 2896: { _, err := duration.ParseDuration(yyS[yypt-0].ident) if err != nil { @@ -25056,41 +25211,41 @@ yynewstate: } parser.yyVAL.item = &ast.DynamicCalibrateResourceOption{Tp: ast.CalibrateDuration, StrValue: yyS[yypt-0].ident} } - case 2878: + case 2897: { parser.yyVAL.item = &ast.DynamicCalibrateResourceOption{Tp: ast.CalibrateDuration, Ts: yyS[yypt-1].expr.(ast.ExprNode), Unit: yyS[yypt-0].item.(ast.TimeUnitType)} } - case 2879: + case 2898: { parser.yyVAL.item = ast.TPCC } - case 2880: + case 2899: { parser.yyVAL.item = ast.OLTPREADWRITE } - case 2881: + case 2900: { parser.yyVAL.item = ast.OLTPREADONLY } - case 2882: + case 2901: { parser.yyVAL.item = ast.OLTPWRITEONLY } - case 2883: + case 2902: { parser.yyVAL.item = ast.TPCH10 } - case 2884: + case 2903: { parser.yyVAL.statement = &ast.AddQueryWatchStmt{ QueryWatchOptionList: yyS[yypt-0].item.([]*ast.QueryWatchOption), } } - case 2885: + case 2904: { parser.yyVAL.item = []*ast.QueryWatchOption{yyS[yypt-0].item.(*ast.QueryWatchOption)} } - case 2886: + case 2905: { if !ast.CheckQueryWatchAppend(yyS[yypt-1].item.([]*ast.QueryWatchOption), yyS[yypt-0].item.(*ast.QueryWatchOption)) { yylex.AppendError(yylex.Errorf("Dupliated options specified")) @@ -25098,7 +25253,7 @@ yynewstate: } parser.yyVAL.item = append(yyS[yypt-1].item.([]*ast.QueryWatchOption), yyS[yypt-0].item.(*ast.QueryWatchOption)) } - case 2887: + case 2906: { if !ast.CheckQueryWatchAppend(yyS[yypt-2].item.([]*ast.QueryWatchOption), yyS[yypt-0].item.(*ast.QueryWatchOption)) { yylex.AppendError(yylex.Errorf("Dupliated options specified")) @@ -25106,7 +25261,7 @@ yynewstate: } parser.yyVAL.item = append(yyS[yypt-2].item.([]*ast.QueryWatchOption), yyS[yypt-0].item.(*ast.QueryWatchOption)) } - case 2888: + case 2907: { parser.yyVAL.item = &ast.QueryWatchOption{ Tp: ast.QueryWatchResourceGroup, @@ -25115,7 +25270,7 @@ yynewstate: }, } } - case 2889: + case 2908: { parser.yyVAL.item = &ast.QueryWatchOption{ Tp: ast.QueryWatchResourceGroup, @@ -25124,35 +25279,35 @@ yynewstate: }, } } - case 2890: + case 2909: { parser.yyVAL.item = &ast.QueryWatchOption{ Tp: ast.QueryWatchAction, ActionOption: yyS[yypt-0].item.(*ast.ResourceGroupRunawayActionOption), } } - case 2891: + case 2910: { parser.yyVAL.item = &ast.QueryWatchOption{ Tp: ast.QueryWatchType, TextOption: yyS[yypt-0].item.(*ast.QueryWatchTextOption), } } - case 2892: + case 2911: { parser.yyVAL.item = &ast.QueryWatchTextOption{ Type: model.WatchSimilar, PatternExpr: yyS[yypt-0].expr, } } - case 2893: + case 2912: { parser.yyVAL.item = &ast.QueryWatchTextOption{ Type: model.WatchPlan, PatternExpr: yyS[yypt-0].expr, } } - case 2894: + case 2913: { parser.yyVAL.item = &ast.QueryWatchTextOption{ Type: yyS[yypt-2].item.(model.RunawayWatchType), @@ -25160,7 +25315,7 @@ yynewstate: TypeSpecified: true, } } - case 2895: + case 2914: { parser.yyVAL.statement = &ast.DropQueryWatchStmt{ IntValue: yyS[yypt-0].item.(int64), diff --git a/pkg/parser/parser.y b/pkg/parser/parser.y index 967a97b25eb60..c5e68b56fd375 100644 --- a/pkg/parser/parser.y +++ b/pkg/parser/parser.y @@ -274,6 +274,7 @@ import ( tableSample "TABLESAMPLE" terminated "TERMINATED" then "THEN" + tidbCurrentTSO "TIDB_CURRENT_TSO" tinyblobType "TINYBLOB" tinyIntType "TINYINT" tinytextType "TINYTEXT" @@ -281,7 +282,6 @@ import ( trailing "TRAILING" trigger "TRIGGER" trueKwd "TRUE" - tidbCurrentTSO "TiDB_CURRENT_TSO" union "UNION" unique "UNIQUE" unlock "UNLOCK" @@ -1170,6 +1170,7 @@ import ( FirstAndLastPartOpt "First and Last partition option" FuncDatetimePrec "Function datetime precision" GetFormatSelector "{DATE|DATETIME|TIME|TIMESTAMP}" + GlobalOrLocal "{GLOBAL|LOCAL}" GlobalScope "The scope of variable" StatementScope "The scope of statement" GroupByClause "GROUP BY clause" @@ -1324,6 +1325,8 @@ import ( StatementList "statement list" StatsPersistentVal "stats_persistent value" StatsType "stats type value" + StringLitOrUserVariable "stringLit or user variable" + StringLitOrUserVariableList "stringLit or user variable list" BindingStatusType "binding status type value" StringList "string list" SubPartDefinition "SubPartition definition" @@ -1363,6 +1366,9 @@ import ( TransactionChars "Transaction characteristic list" TrimDirection "Trim string direction" SetOprOpt "Union/Except/Intersect Option(empty/ALL/DISTINCT)" + UpdateIndexElem "IndexName {GLOBAL|LOCAL}" + UpdateIndexesList "UpdateIndexElem[,...]" + UpdateIndexesOpt "UPDATE INDEXES (UpdateIndexesList) or empty" Username "Username" UsernameList "UsernameList" UserSpec "Username and auth option" @@ -1555,6 +1561,7 @@ import ( FirstOrNext "FIRST or NEXT" RowOrRows "ROW or ROWS" Replica "{REPLICA | SLAVE}" + GlobalOrLocalOpt "GLOBAL, LOCAL or empty" %type Identifier "identifier or unreserved keyword" @@ -1880,6 +1887,10 @@ DirectResourceGroupOption: { $$ = &ast.ResourceGroupOption{Tp: ast.ResourceRURate, UintValue: $3.(uint64)} } +| "RU_PER_SEC" EqOpt "UNLIMITED" + { + $$ = &ast.ResourceGroupOption{Tp: ast.ResourceRURate, BoolValue: true} + } | "PRIORITY" EqOpt ResourceGroupPriorityOption { $$ = &ast.ResourceGroupOption{Tp: ast.ResourcePriority, UintValue: $3.(uint64)} @@ -2768,6 +2779,19 @@ WithClustered: $$ = model.PrimaryKeyTypeNonClustered } +GlobalOrLocalOpt: + { + $$ = "" + } +| "LOCAL" + { + $$ = "" + } +| "GLOBAL" + { + $$ = "Global" + } + AlgorithmClause: "ALGORITHM" EqOpt "DEFAULT" { @@ -3563,28 +3587,36 @@ ColumnOption: { $$ = &ast.ColumnOption{Tp: ast.ColumnOptionAutoIncrement} } -| PrimaryOpt "KEY" +| PrimaryOpt "KEY" GlobalOrLocalOpt { // KEY is normally a synonym for INDEX. The key attribute PRIMARY KEY // can also be specified as just KEY when given in a column definition. // See http://dev.mysql.com/doc/refman/5.7/en/create-table.html - $$ = &ast.ColumnOption{Tp: ast.ColumnOptionPrimaryKey} + $$ = &ast.ColumnOption{Tp: ast.ColumnOptionPrimaryKey, StrValue: $3} } -| PrimaryOpt "KEY" WithClustered +| PrimaryOpt "KEY" WithClustered GlobalOrLocalOpt { // KEY is normally a synonym for INDEX. The key attribute PRIMARY KEY // can also be specified as just KEY when given in a column definition. // See http://dev.mysql.com/doc/refman/5.7/en/create-table.html - $$ = &ast.ColumnOption{Tp: ast.ColumnOptionPrimaryKey, PrimaryKeyTp: $3.(model.PrimaryKeyType)} + $$ = &ast.ColumnOption{Tp: ast.ColumnOptionPrimaryKey, PrimaryKeyTp: $3.(model.PrimaryKeyType), StrValue: $4} } -| "UNIQUE" %prec lowerThanKey +| "UNIQUE" "GLOBAL" + { + $$ = &ast.ColumnOption{Tp: ast.ColumnOptionUniqKey, StrValue: "Global"} + } +| "UNIQUE" "LOCAL" { $$ = &ast.ColumnOption{Tp: ast.ColumnOptionUniqKey} } -| "UNIQUE" "KEY" +| "UNIQUE" %prec lowerThanKey { $$ = &ast.ColumnOption{Tp: ast.ColumnOptionUniqKey} } +| "UNIQUE" "KEY" GlobalOrLocalOpt + { + $$ = &ast.ColumnOption{Tp: ast.ColumnOptionUniqKey, StrValue: $3} + } | "DEFAULT" DefaultValueExpr { $$ = &ast.ColumnOption{Tp: ast.ColumnOptionDefaultValue, Expr: $2} @@ -4129,6 +4161,7 @@ DropStatisticsStmt: * | WITH PARSER parser_name * | COMMENT 'string' * | {VISIBLE | INVISIBLE} + * | GLOBAL * * index_type: * USING {BTREE | HASH} @@ -4452,16 +4485,18 @@ PartitionOpt: { $$ = nil } -| "PARTITION" "BY" PartitionMethod PartitionNumOpt SubPartitionOpt PartitionDefinitionListOpt +| "PARTITION" "BY" PartitionMethod PartitionNumOpt SubPartitionOpt PartitionDefinitionListOpt UpdateIndexesOpt { method := $3.(*ast.PartitionMethod) method.Num = $4.(uint64) sub, _ := $5.(*ast.PartitionMethod) defs, _ := $6.([]*ast.PartitionDefinition) + UpdateIndexes, _ := $7.([]*ast.Constraint) opt := &ast.PartitionOptions{ PartitionMethod: *method, Sub: sub, Definitions: defs, + UpdateIndexes: UpdateIndexes, } if err := opt.Validate(); err != nil { yylex.AppendError(err) @@ -4470,6 +4505,45 @@ PartitionOpt: $$ = opt } +GlobalOrLocal: + "LOCAL" + { + $$ = false + } +| "GLOBAL" + { + $$ = true + } + +UpdateIndexElem: + Identifier GlobalOrLocal + { + opt := &ast.IndexOption{Global: $2.(bool)} + $$ = &ast.Constraint{ + Name: $1, + Option: opt, + } + } + +UpdateIndexesList: + UpdateIndexElem + { + $$ = []*ast.Constraint{$1.(*ast.Constraint)} + } +| UpdateIndexesList ',' UpdateIndexElem + { + $$ = append($1.([]*ast.Constraint), $3.(*ast.Constraint)) + } + +UpdateIndexesOpt: + { + $$ = nil + } +| "UPDATE" "INDEXES" '(' UpdateIndexesList ')' + { + $$ = $4 + } + SubPartitionMethod: LinearOpt "KEY" PartitionKeyAlgorithmOpt '(' ColumnNameListOpt ')' { @@ -4928,8 +5002,8 @@ CreateViewStmt: "CREATE" OrReplace ViewAlgorithm ViewDefiner ViewSQLSecurity "VIEW" ViewName ViewFieldList "AS" CreateViewSelectOpt ViewCheckOption { startOffset := parser.startOffset(&yyS[yypt-1]) + endOffset := parser.yylval.offset selStmt := $10.(ast.StmtNode) - selStmt.SetText(parser.lexer.client, strings.TrimSpace(parser.src[startOffset:])) x := &ast.CreateViewStmt{ OrReplace: $2.(bool), ViewName: $7.(*ast.TableName), @@ -4943,11 +5017,11 @@ CreateViewStmt: } if $11 != nil { x.CheckOption = $11.(model.ViewCheckOption) - endOffset := parser.startOffset(&yyS[yypt]) - selStmt.SetText(parser.lexer.client, strings.TrimSpace(parser.src[startOffset:endOffset])) + endOffset = parser.startOffset(&yyS[yypt]) } else { x.CheckOption = model.CheckOptionCascaded } + selStmt.SetText(parser.lexer.client, strings.TrimSpace(parser.src[startOffset:endOffset])) $$ = x } @@ -6459,6 +6533,8 @@ IndexOptionList: opt1.Visibility = opt2.Visibility } else if opt2.PrimaryKeyTp != model.PrimaryKeyTypeDefault { opt1.PrimaryKeyTp = opt2.PrimaryKeyTp + } else if opt2.Global { + opt1.Global = true } $$ = opt1 } @@ -6503,6 +6579,18 @@ IndexOption: PrimaryKeyTp: $1.(model.PrimaryKeyType), } } +| "GLOBAL" + { + $$ = &ast.IndexOption{ + Global: true, + } + } +| "LOCAL" + { + $$ = &ast.IndexOption{ + Global: false, + } + } /* See: https://github.com/mysql/mysql-server/blob/8.0/sql/sql_yacc.yy#L7179 @@ -7946,7 +8034,7 @@ FunctionNameOptionalBraces: | "CURRENT_DATE" | "CURRENT_ROLE" | "UTC_DATE" -| "TiDB_CURRENT_TSO" +| "TIDB_CURRENT_TSO" FunctionNameDatetimePrecision: "CURRENT_TIME" @@ -13941,16 +14029,36 @@ CreateBindingStmt: $$ = x } -| "CREATE" GlobalScope "BINDING" "FROM" "HISTORY" "USING" "PLAN" "DIGEST" stringLit +| "CREATE" GlobalScope "BINDING" "FROM" "HISTORY" "USING" "PLAN" "DIGEST" StringLitOrUserVariableList { x := &ast.CreateBindingStmt{ GlobalScope: $2.(bool), - PlanDigest: $9, + PlanDigests: $9.([]*ast.StringOrUserVar), } $$ = x } +StringLitOrUserVariableList: + StringLitOrUserVariable + { + $$ = []*ast.StringOrUserVar{$1.(*ast.StringOrUserVar)} + } +| StringLitOrUserVariableList ',' StringLitOrUserVariable + { + $$ = append($1.([]*ast.StringOrUserVar), $3.(*ast.StringOrUserVar)) + } + +StringLitOrUserVariable: + stringLit + { + $$ = &ast.StringOrUserVar{StringLit: $1} + } +| UserVariable + { + $$ = &ast.StringOrUserVar{UserVar: $1.(*ast.VariableExpr)} + } + /******************************************************************* * * Drop Binding Statement @@ -13991,11 +14099,11 @@ DropBindingStmt: $$ = x } -| "DROP" GlobalScope "BINDING" "FOR" "SQL" "DIGEST" stringLit +| "DROP" GlobalScope "BINDING" "FOR" "SQL" "DIGEST" StringLitOrUserVariableList { x := &ast.DropBindingStmt{ GlobalScope: $2.(bool), - SQLDigest: $7, + SQLDigests: $7.([]*ast.StringOrUserVar), } $$ = x diff --git a/pkg/parser/parser_test.go b/pkg/parser/parser_test.go index 3ae1780af6ac5..b9c10fc7cd5fe 100644 --- a/pkg/parser/parser_test.go +++ b/pkg/parser/parser_test.go @@ -2811,7 +2811,7 @@ func TestDDL(t *testing.T) { PRIMARY KEY (id), CONSTRAINT FK_7rod8a71yep5vxasb0ms3osbg FOREIGN KEY (user_id) REFERENCES waimaiqa.user (id), INDEX FK_7rod8a71yep5vxasb0ms3osbg (user_id) comment '' - ) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI ROW_FORMAT=COMPACT COMMENT='' CHECKSUM=0 DELAY_KEY_WRITE=0;`, true, "CREATE TABLE `address` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT,`create_at` DATETIME NOT NULL,`deleted` TINYINT(1) NOT NULL,`update_at` DATETIME NOT NULL,`version` BIGINT(20) DEFAULT NULL,`address` VARCHAR(128) NOT NULL,`address_detail` VARCHAR(128) NOT NULL,`cellphone` VARCHAR(16) NOT NULL,`latitude` DOUBLE NOT NULL,`longitude` DOUBLE NOT NULL,`name` VARCHAR(16) NOT NULL,`sex` TINYINT(1) NOT NULL,`user_id` BIGINT(20) NOT NULL,PRIMARY KEY(`id`),CONSTRAINT `FK_7rod8a71yep5vxasb0ms3osbg` FOREIGN KEY (`user_id`) REFERENCES `waimaiqa`.`user`(`id`),INDEX `FK_7rod8a71yep5vxasb0ms3osbg`(`user_id`) ) ENGINE = InnoDB AUTO_INCREMENT = 30 DEFAULT CHARACTER SET = UTF8 DEFAULT COLLATE = UTF8_GENERAL_CI ROW_FORMAT = COMPACT COMMENT = '' CHECKSUM = 0 DELAY_KEY_WRITE = 0"}, + ) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI ROW_FORMAT=COMPACT COMMENT='' CHECKSUM=0 DELAY_KEY_WRITE=0;`, true, "CREATE TABLE `address` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT,`create_at` DATETIME NOT NULL,`deleted` TINYINT(1) NOT NULL,`update_at` DATETIME NOT NULL,`version` BIGINT(20) DEFAULT NULL,`address` VARCHAR(128) NOT NULL,`address_detail` VARCHAR(128) NOT NULL,`cellphone` VARCHAR(16) NOT NULL,`latitude` DOUBLE NOT NULL,`longitude` DOUBLE NOT NULL,`name` VARCHAR(16) NOT NULL,`sex` TINYINT(1) NOT NULL,`user_id` BIGINT(20) NOT NULL,PRIMARY KEY(`id`),CONSTRAINT `FK_7rod8a71yep5vxasb0ms3osbg` FOREIGN KEY (`user_id`) REFERENCES `waimaiqa`.`user`(`id`),INDEX `FK_7rod8a71yep5vxasb0ms3osbg`(`user_id`)) ENGINE = InnoDB AUTO_INCREMENT = 30 DEFAULT CHARACTER SET = UTF8 DEFAULT COLLATE = UTF8_GENERAL_CI ROW_FORMAT = COMPACT COMMENT = '' CHECKSUM = 0 DELAY_KEY_WRITE = 0"}, // for issue 975 {`CREATE TABLE test_data ( id bigint(20) NOT NULL AUTO_INCREMENT, @@ -2872,8 +2872,8 @@ func TestDDL(t *testing.T) { PRIMARY KEY (id), CONSTRAINT FK_7rod8a71yep5vxasb0ms3osbg FOREIGN KEY (user_id) REFERENCES waimaiqa.user (id) ON DELETE CASCADE ON UPDATE NO ACTION, INDEX FK_7rod8a71yep5vxasb0ms3osbg (user_id) comment '' - ) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARACTER SET utf8 COLLATE UTF8_GENERAL_CI ROW_FORMAT=COMPACT COMMENT='' CHECKSUM=0 DELAY_KEY_WRITE=0;`, true, "CREATE TABLE `address` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT,`create_at` DATETIME NOT NULL,`deleted` TINYINT(1) NOT NULL,`update_at` DATETIME NOT NULL,`version` BIGINT(20) DEFAULT NULL,`address` VARCHAR(128) NOT NULL,`address_detail` VARCHAR(128) NOT NULL,`cellphone` VARCHAR(16) NOT NULL,`latitude` DOUBLE NOT NULL,`longitude` DOUBLE NOT NULL,`name` VARCHAR(16) NOT NULL,`sex` TINYINT(1) NOT NULL,`user_id` BIGINT(20) NOT NULL,PRIMARY KEY(`id`),CONSTRAINT `FK_7rod8a71yep5vxasb0ms3osbg` FOREIGN KEY (`user_id`) REFERENCES `waimaiqa`.`user`(`id`) ON DELETE CASCADE ON UPDATE NO ACTION,INDEX `FK_7rod8a71yep5vxasb0ms3osbg`(`user_id`) ) ENGINE = InnoDB AUTO_INCREMENT = 30 DEFAULT CHARACTER SET = UTF8 DEFAULT COLLATE = UTF8_GENERAL_CI ROW_FORMAT = COMPACT COMMENT = '' CHECKSUM = 0 DELAY_KEY_WRITE = 0"}, - {"CREATE TABLE address (\r\nid bigint(20) NOT NULL AUTO_INCREMENT,\r\ncreate_at datetime NOT NULL,\r\ndeleted tinyint(1) NOT NULL,\r\nupdate_at datetime NOT NULL,\r\nversion bigint(20) DEFAULT NULL,\r\naddress varchar(128) NOT NULL,\r\naddress_detail varchar(128) NOT NULL,\r\ncellphone varchar(16) NOT NULL,\r\nlatitude double NOT NULL,\r\nlongitude double NOT NULL,\r\nname varchar(16) NOT NULL,\r\nsex tinyint(1) NOT NULL,\r\nuser_id bigint(20) NOT NULL,\r\nPRIMARY KEY (id),\r\nCONSTRAINT FK_7rod8a71yep5vxasb0ms3osbg FOREIGN KEY (user_id) REFERENCES waimaiqa.user (id) ON DELETE CASCADE ON UPDATE NO ACTION,\r\nINDEX FK_7rod8a71yep5vxasb0ms3osbg (user_id) comment ''\r\n) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ROW_FORMAT=COMPACT COMMENT='' CHECKSUM=0 DELAY_KEY_WRITE=0;", true, "CREATE TABLE `address` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT,`create_at` DATETIME NOT NULL,`deleted` TINYINT(1) NOT NULL,`update_at` DATETIME NOT NULL,`version` BIGINT(20) DEFAULT NULL,`address` VARCHAR(128) NOT NULL,`address_detail` VARCHAR(128) NOT NULL,`cellphone` VARCHAR(16) NOT NULL,`latitude` DOUBLE NOT NULL,`longitude` DOUBLE NOT NULL,`name` VARCHAR(16) NOT NULL,`sex` TINYINT(1) NOT NULL,`user_id` BIGINT(20) NOT NULL,PRIMARY KEY(`id`),CONSTRAINT `FK_7rod8a71yep5vxasb0ms3osbg` FOREIGN KEY (`user_id`) REFERENCES `waimaiqa`.`user`(`id`) ON DELETE CASCADE ON UPDATE NO ACTION,INDEX `FK_7rod8a71yep5vxasb0ms3osbg`(`user_id`) ) ENGINE = InnoDB AUTO_INCREMENT = 30 DEFAULT CHARACTER SET = UTF8 DEFAULT COLLATE = UTF8_GENERAL_CI ROW_FORMAT = COMPACT COMMENT = '' CHECKSUM = 0 DELAY_KEY_WRITE = 0"}, + ) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARACTER SET utf8 COLLATE UTF8_GENERAL_CI ROW_FORMAT=COMPACT COMMENT='' CHECKSUM=0 DELAY_KEY_WRITE=0;`, true, "CREATE TABLE `address` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT,`create_at` DATETIME NOT NULL,`deleted` TINYINT(1) NOT NULL,`update_at` DATETIME NOT NULL,`version` BIGINT(20) DEFAULT NULL,`address` VARCHAR(128) NOT NULL,`address_detail` VARCHAR(128) NOT NULL,`cellphone` VARCHAR(16) NOT NULL,`latitude` DOUBLE NOT NULL,`longitude` DOUBLE NOT NULL,`name` VARCHAR(16) NOT NULL,`sex` TINYINT(1) NOT NULL,`user_id` BIGINT(20) NOT NULL,PRIMARY KEY(`id`),CONSTRAINT `FK_7rod8a71yep5vxasb0ms3osbg` FOREIGN KEY (`user_id`) REFERENCES `waimaiqa`.`user`(`id`) ON DELETE CASCADE ON UPDATE NO ACTION,INDEX `FK_7rod8a71yep5vxasb0ms3osbg`(`user_id`)) ENGINE = InnoDB AUTO_INCREMENT = 30 DEFAULT CHARACTER SET = UTF8 DEFAULT COLLATE = UTF8_GENERAL_CI ROW_FORMAT = COMPACT COMMENT = '' CHECKSUM = 0 DELAY_KEY_WRITE = 0"}, + {"CREATE TABLE address (\r\nid bigint(20) NOT NULL AUTO_INCREMENT,\r\ncreate_at datetime NOT NULL,\r\ndeleted tinyint(1) NOT NULL,\r\nupdate_at datetime NOT NULL,\r\nversion bigint(20) DEFAULT NULL,\r\naddress varchar(128) NOT NULL,\r\naddress_detail varchar(128) NOT NULL,\r\ncellphone varchar(16) NOT NULL,\r\nlatitude double NOT NULL,\r\nlongitude double NOT NULL,\r\nname varchar(16) NOT NULL,\r\nsex tinyint(1) NOT NULL,\r\nuser_id bigint(20) NOT NULL,\r\nPRIMARY KEY (id),\r\nCONSTRAINT FK_7rod8a71yep5vxasb0ms3osbg FOREIGN KEY (user_id) REFERENCES waimaiqa.user (id) ON DELETE CASCADE ON UPDATE NO ACTION,\r\nINDEX FK_7rod8a71yep5vxasb0ms3osbg (user_id) comment ''\r\n) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ROW_FORMAT=COMPACT COMMENT='' CHECKSUM=0 DELAY_KEY_WRITE=0;", true, "CREATE TABLE `address` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT,`create_at` DATETIME NOT NULL,`deleted` TINYINT(1) NOT NULL,`update_at` DATETIME NOT NULL,`version` BIGINT(20) DEFAULT NULL,`address` VARCHAR(128) NOT NULL,`address_detail` VARCHAR(128) NOT NULL,`cellphone` VARCHAR(16) NOT NULL,`latitude` DOUBLE NOT NULL,`longitude` DOUBLE NOT NULL,`name` VARCHAR(16) NOT NULL,`sex` TINYINT(1) NOT NULL,`user_id` BIGINT(20) NOT NULL,PRIMARY KEY(`id`),CONSTRAINT `FK_7rod8a71yep5vxasb0ms3osbg` FOREIGN KEY (`user_id`) REFERENCES `waimaiqa`.`user`(`id`) ON DELETE CASCADE ON UPDATE NO ACTION,INDEX `FK_7rod8a71yep5vxasb0ms3osbg`(`user_id`)) ENGINE = InnoDB AUTO_INCREMENT = 30 DEFAULT CHARACTER SET = UTF8 DEFAULT COLLATE = UTF8_GENERAL_CI ROW_FORMAT = COMPACT COMMENT = '' CHECKSUM = 0 DELAY_KEY_WRITE = 0"}, // for issue 1802 {`CREATE TABLE t1 ( accout_id int(11) DEFAULT '0', @@ -2975,6 +2975,31 @@ func TestDDL(t *testing.T) { {"alter table t encryption = 'y';", true, "ALTER TABLE `t` ENCRYPTION = 'y'"}, {"alter table t encryption 'y';", true, "ALTER TABLE `t` ENCRYPTION = 'y'"}, + // For GLOBAL/LOCAL index + {"create table t (a int key global)", true, "CREATE TABLE `t` (`a` INT PRIMARY KEY GLOBAL)"}, + {"create table t (a int key local)", true, "CREATE TABLE `t` (`a` INT PRIMARY KEY)"}, + {"create table t (a int primary key local)", true, "CREATE TABLE `t` (`a` INT PRIMARY KEY)"}, + {"create table t (a int primary key global)", true, "CREATE TABLE `t` (`a` INT PRIMARY KEY GLOBAL)"}, + {"create table t (a int UNIQUE local)", true, "CREATE TABLE `t` (`a` INT UNIQUE KEY)"}, + {"create table t (a int UNIQUE global)", true, "CREATE TABLE `t` (`a` INT UNIQUE KEY GLOBAL)"}, + {"create table t (a int UNIQUE key local)", true, "CREATE TABLE `t` (`a` INT UNIQUE KEY)"}, + {"create table t (a int UNIQUE key global)", true, "CREATE TABLE `t` (`a` INT UNIQUE KEY GLOBAL)"}, + {"alter table t add index (a)", true, "ALTER TABLE `t` ADD INDEX(`a`)"}, + {"alter table t add index (a) local", true, "ALTER TABLE `t` ADD INDEX(`a`)"}, + {"alter table t add index (a) global", true, "ALTER TABLE `t` ADD INDEX(`a`) GLOBAL"}, + {"alter table t add unique (a)", true, "ALTER TABLE `t` ADD UNIQUE(`a`)"}, + {"alter table t add unique (a) local", true, "ALTER TABLE `t` ADD UNIQUE(`a`)"}, + {"alter table t add unique (a) global", true, "ALTER TABLE `t` ADD UNIQUE(`a`) GLOBAL"}, + {"alter table t add unique key (a) global", true, "ALTER TABLE `t` ADD UNIQUE(`a`) GLOBAL"}, + {"alter table t add unique key (a)", true, "ALTER TABLE `t` ADD UNIQUE(`a`)"}, + {"alter table t add unique key (a) local", true, "ALTER TABLE `t` ADD UNIQUE(`a`)"}, + {"alter table t add primary key (a) global", true, "ALTER TABLE `t` ADD PRIMARY KEY(`a`) GLOBAL"}, + {"alter table t add primary key (a)", true, "ALTER TABLE `t` ADD PRIMARY KEY(`a`)"}, + {"alter table t add primary key (a) local", true, "ALTER TABLE `t` ADD PRIMARY KEY(`a`)"}, + {"create index i on t (a)", true, "CREATE INDEX `i` ON `t` (`a`)"}, + {"create index i on t (a) local", true, "CREATE INDEX `i` ON `t` (`a`)"}, + {"create index i on t (a) global", true, "CREATE INDEX `i` ON `t` (`a`) GLOBAL"}, + // for alter database/schema/table {"ALTER DATABASE t CHARACTER SET = 'utf8'", true, "ALTER DATABASE `t` CHARACTER SET = utf8"}, {"ALTER DATABASE CHARACTER SET = 'utf8'", true, "ALTER DATABASE CHARACTER SET = utf8"}, @@ -3132,6 +3157,9 @@ func TestDDL(t *testing.T) { {"ALTER TABLE t ADD INDEX IF NOT EXISTS (a) USING BTREE COMMENT 'a'", true, "ALTER TABLE `t` ADD INDEX IF NOT EXISTS(`a`) USING BTREE COMMENT 'a'"}, {"ALTER TABLE t ADD INDEX (a) USING RTREE COMMENT 'a'", true, "ALTER TABLE `t` ADD INDEX(`a`) USING RTREE COMMENT 'a'"}, {"ALTER TABLE t ADD KEY (a) USING HASH COMMENT 'a'", true, "ALTER TABLE `t` ADD INDEX(`a`) USING HASH COMMENT 'a'"}, + {"ALTER TABLE t ADD INDEX (a) USING BTREE /*T![global_index] GLOBAL */ COMMENT 'a'", true, "ALTER TABLE `t` ADD INDEX(`a`) USING BTREE COMMENT 'a' GLOBAL"}, + {"ALTER TABLE t ADD UNIQUE INDEX (a) /*T![global_index] GLOBAL */", true, "ALTER TABLE `t` ADD UNIQUE(`a`) GLOBAL"}, + {"ALTER TABLE t ADD UNIQUE INDEX (a) LOCAL", true, "ALTER TABLE `t` ADD UNIQUE(`a`)"}, {"ALTER TABLE t ADD KEY IF NOT EXISTS (a) USING HASH COMMENT 'a'", true, "ALTER TABLE `t` ADD INDEX IF NOT EXISTS(`a`) USING HASH COMMENT 'a'"}, {"ALTER TABLE t ADD PRIMARY KEY ident USING RTREE ( a DESC , b )", true, "ALTER TABLE `t` ADD PRIMARY KEY `ident`(`a` DESC, `b`) USING RTREE"}, {"ALTER TABLE t ADD KEY USING RTREE ( a ) ", true, "ALTER TABLE `t` ADD INDEX(`a`) USING RTREE"}, @@ -3217,7 +3245,12 @@ func TestDDL(t *testing.T) { {"alter table t partition by hash(a)", true, "ALTER TABLE `t` PARTITION BY HASH (`a`) PARTITIONS 1"}, {"alter table t add column a int partition by hash(a)", true, "ALTER TABLE `t` ADD COLUMN `a` INT PARTITION BY HASH (`a`) PARTITIONS 1"}, + {"alter table t add column a int partition by hash(a) update indexes (idx_a global)", true, "ALTER TABLE `t` ADD COLUMN `a` INT PARTITION BY HASH (`a`) PARTITIONS 1 UPDATE INDEXES (`idx_a` GLOBAL)"}, + {"alter table t add column a int partition by hash(a) update indexes (idx_a global, idx_b local)", true, "ALTER TABLE `t` ADD COLUMN `a` INT PARTITION BY HASH (`a`) PARTITIONS 1 UPDATE INDEXES (`idx_a` GLOBAL,`idx_b` LOCAL)"}, + {"alter table t add column a int partition by hash(a) update indexes (idx_a normal)", false, ""}, + {"alter table t add column a int partition by hash(a) update indexes (global)", false, ""}, {"alter table t partition by range(a)", false, ""}, + {"alter table t partition by range(a) update indexes (a local)", false, ""}, {"alter table t partition by range(a) (partition x values less than (75))", true, "ALTER TABLE `t` PARTITION BY RANGE (`a`) (PARTITION `x` VALUES LESS THAN (75))"}, {"alter table t add column a int, partition by range(a) (partition x values less than (75))", false, ""}, {"alter table t comment 'cmt' partition by hash(a)", true, "ALTER TABLE `t` COMMENT = 'cmt' PARTITION BY HASH (`a`) PARTITIONS 1"}, @@ -3813,6 +3846,9 @@ func TestDDL(t *testing.T) { {"create resource group x cpu='8c', io_read_bandwidth='2GB/s', io_write_bandwidth='200MB/s'", false, ""}, {"create resource group x ru_per_sec=2000", true, "CREATE RESOURCE GROUP `x` RU_PER_SEC = 2000"}, {"create resource group x ru_per_sec=200000", true, "CREATE RESOURCE GROUP `x` RU_PER_SEC = 200000"}, + {"create resource group x ru_per_sec=UNLIMITED", true, "CREATE RESOURCE GROUP `x` RU_PER_SEC = UNLIMITED"}, + {"create resource group x ru_per_sec=unlimited", true, "CREATE RESOURCE GROUP `x` RU_PER_SEC = UNLIMITED"}, + {"create resource group x ru_per_sec='check'", false, ""}, {"create resource group x followers=0", false, ""}, {"create resource group x ru_per_sec=1000, burstable", true, "CREATE RESOURCE GROUP `x` RU_PER_SEC = 1000, BURSTABLE = TRUE"}, {"create resource group x burstable, ru_per_sec=2000", true, "CREATE RESOURCE GROUP `x` BURSTABLE = TRUE, RU_PER_SEC = 2000"}, @@ -3822,6 +3858,7 @@ func TestDDL(t *testing.T) { {"create resource group x burstable = true ru_per_sec=4000", true, "CREATE RESOURCE GROUP `x` BURSTABLE = TRUE, RU_PER_SEC = 4000"}, {"create resource group x ru_per_sec=20, priority=LOW, burstable", true, "CREATE RESOURCE GROUP `x` RU_PER_SEC = 20, PRIORITY = LOW, BURSTABLE = TRUE"}, {"create resource group default ru_per_sec=20, priority=LOW, burstable", true, "CREATE RESOURCE GROUP `default` RU_PER_SEC = 20, PRIORITY = LOW, BURSTABLE = TRUE"}, + {"create resource group default ru_per_sec=UNLIMITED, priority=LOW, burstable", true, "CREATE RESOURCE GROUP `default` RU_PER_SEC = UNLIMITED, PRIORITY = LOW, BURSTABLE = TRUE"}, {"create resource group x ru_per_sec=1000 QUERY_LIMIT=(EXEC_ELAPSED '10s' ACTION DRYRUN)", true, "CREATE RESOURCE GROUP `x` RU_PER_SEC = 1000, QUERY_LIMIT = (EXEC_ELAPSED = '10s' ACTION = DRYRUN)"}, {"create resource group x ru_per_sec=1000 QUERY_LIMIT=(EXEC_ELAPSED '10m' ACTION COOLDOWN)", true, "CREATE RESOURCE GROUP `x` RU_PER_SEC = 1000, QUERY_LIMIT = (EXEC_ELAPSED = '10m' ACTION = COOLDOWN)"}, {"create resource group x ru_per_sec=1000 QUERY_LIMIT=(ACTION KILL EXEC_ELAPSED='10m')", true, "CREATE RESOURCE GROUP `x` RU_PER_SEC = 1000, QUERY_LIMIT = (ACTION = KILL EXEC_ELAPSED = '10m')"}, @@ -3835,6 +3872,7 @@ func TestDDL(t *testing.T) { {"create resource group x ru_per_sec=1000 background (task_types='br,lightning')", true, "CREATE RESOURCE GROUP `x` RU_PER_SEC = 1000, BACKGROUND = (TASK_TYPES = 'br,lightning')"}, {`create resource group x ru_per_sec=1000 QUERY_LIMIT (EXEC_ELAPSED "10s" ACTION COOLDOWN WATCH EXACT DURATION='10m') background (task_types 'br,lightning')`, true, "CREATE RESOURCE GROUP `x` RU_PER_SEC = 1000, QUERY_LIMIT = (EXEC_ELAPSED = '10s' ACTION = COOLDOWN WATCH = EXACT DURATION = '10m'), BACKGROUND = (TASK_TYPES = 'br,lightning')"}, {`create resource group x ru_per_sec=1000 QUERY_LIMIT (EXEC_ELAPSED "10s" ACTION COOLDOWN WATCH PLAN DURATION='10m') background (task_types 'br,lightning')`, true, "CREATE RESOURCE GROUP `x` RU_PER_SEC = 1000, QUERY_LIMIT = (EXEC_ELAPSED = '10s' ACTION = COOLDOWN WATCH = PLAN DURATION = '10m'), BACKGROUND = (TASK_TYPES = 'br,lightning')"}, + {`create resource group x ru_per_sec=UNLIMITED QUERY_LIMIT (EXEC_ELAPSED "10s" ACTION COOLDOWN WATCH PLAN DURATION='10m') background (task_types 'br,lightning')`, true, "CREATE RESOURCE GROUP `x` RU_PER_SEC = UNLIMITED, QUERY_LIMIT = (EXEC_ELAPSED = '10s' ACTION = COOLDOWN WATCH = PLAN DURATION = '10m'), BACKGROUND = (TASK_TYPES = 'br,lightning')"}, // This case is expected in parser test but not in actual ddl job. {"create resource group x ru_per_sec=1000 QUERY_LIMIT = (EXEC_ELAPSED '10s')", true, "CREATE RESOURCE GROUP `x` RU_PER_SEC = 1000, QUERY_LIMIT = (EXEC_ELAPSED = '10s')"}, {"create resource group x ru_per_sec=1000 QUERY=(EXEC_ELAPSED '10s')", false, ""}, @@ -3849,6 +3887,10 @@ func TestDDL(t *testing.T) { {"alter resource group x cpu='8c', io_read_bandwidth='2GB/s', io_write_bandwidth='200MB/s'", false, ""}, {"alter resource group x ru_per_sec=1000", true, "ALTER RESOURCE GROUP `x` RU_PER_SEC = 1000"}, {"alter resource group x ru_per_sec=2000, BURSTABLE", true, "ALTER RESOURCE GROUP `x` RU_PER_SEC = 2000, BURSTABLE = TRUE"}, + {"alter resource group x ru_per_sec=UNLIMITED", true, "ALTER RESOURCE GROUP `x` RU_PER_SEC = UNLIMITED"}, + {"alter resource group x ru_per_sec=UNLIMITED, BURSTABLE", true, "ALTER RESOURCE GROUP `x` RU_PER_SEC = UNLIMITED, BURSTABLE = TRUE"}, + {"alter resource group x ru_per_sec=unlimited, BURSTABLE", true, "ALTER RESOURCE GROUP `x` RU_PER_SEC = UNLIMITED, BURSTABLE = TRUE"}, + {"alter resource group x ru_per_sec='check', BURSTABLE", false, ""}, {"alter resource group x BURSTABLE, ru_per_sec=3000", true, "ALTER RESOURCE GROUP `x` BURSTABLE = TRUE, RU_PER_SEC = 3000"}, {"alter resource group x BURSTABLE ru_per_sec=4000", true, "ALTER RESOURCE GROUP `x` BURSTABLE = TRUE, RU_PER_SEC = 4000"}, // This case is expected in parser test but not in actual ddl job. @@ -3867,6 +3909,7 @@ func TestDDL(t *testing.T) { {"alter resource group x ru_per_sec=1000 QUERY_LIMIT=( ACTION KILL EXEC_ELAPSED '10m')", true, "ALTER RESOURCE GROUP `x` RU_PER_SEC = 1000, QUERY_LIMIT = (ACTION = KILL EXEC_ELAPSED = '10m')"}, {"alter resource group x ru_per_sec=1000 QUERY_LIMIT=(EXEC_ELAPSED '10s' WATCH SIMILAR DURATION '10m' ACTION COOLDOWN)", true, "ALTER RESOURCE GROUP `x` RU_PER_SEC = 1000, QUERY_LIMIT = (EXEC_ELAPSED = '10s' WATCH = SIMILAR DURATION = '10m' ACTION = COOLDOWN)"}, {"alter resource group x ru_per_sec=1000 QUERY_LIMIT=(EXEC_ELAPSED '10s' ACTION COOLDOWN WATCH EXACT DURATION '10m')", true, "ALTER RESOURCE GROUP `x` RU_PER_SEC = 1000, QUERY_LIMIT = (EXEC_ELAPSED = '10s' ACTION = COOLDOWN WATCH = EXACT DURATION = '10m')"}, + {"alter resource group x ru_per_sec=UNLIMITED QUERY_LIMIT=(EXEC_ELAPSED '10s' ACTION COOLDOWN WATCH EXACT DURATION '10m')", true, "ALTER RESOURCE GROUP `x` RU_PER_SEC = UNLIMITED, QUERY_LIMIT = (EXEC_ELAPSED = '10s' ACTION = COOLDOWN WATCH = EXACT DURATION = '10m')"}, // This case is expected in parser test but not in actual ddl job. {"alter resource group x ru_per_sec=1000 QUERY_LIMIT = (EXEC_ELAPSED '10s')", true, "ALTER RESOURCE GROUP `x` RU_PER_SEC = 1000, QUERY_LIMIT = (EXEC_ELAPSED = '10s')"}, {"alter resource group x ru_per_sec=1000 QUERY_LIMIT EXEC_ELAPSED '10s'", false, ""}, @@ -5575,9 +5618,12 @@ func TestBinding(t *testing.T) { {"drop session binding for replace into t1 select * from t2 where t1.a=1", true, "DROP SESSION BINDING FOR REPLACE INTO `t1` SELECT * FROM `t2` WHERE `t1`.`a`=1"}, {"DROP GLOBAL BINDING FOR REPLACE INTO `t1` SELECT * FROM `t2` WHERE `t2`.`a`=1 USING REPLACE INTO `t1` SELECT /*+ USE_INDEX(`t2` `a`)*/ * FROM `t2` WHERE `t2`.`a`=1", true, "DROP GLOBAL BINDING FOR REPLACE INTO `t1` SELECT * FROM `t2` WHERE `t2`.`a`=1 USING REPLACE INTO `t1` SELECT /*+ USE_INDEX(`t2` `a`)*/ * FROM `t2` WHERE `t2`.`a`=1"}, {"DROP SESSION BINDING FOR REPLACE INTO `t1` SELECT * FROM `t2` WHERE `t2`.`a`=1 USING REPLACE INTO `t1` SELECT /*+ USE_INDEX(`t2` `a`)*/ * FROM `t2` WHERE `t2`.`a`=1", true, "DROP SESSION BINDING FOR REPLACE INTO `t1` SELECT * FROM `t2` WHERE `t2`.`a`=1 USING REPLACE INTO `t1` SELECT /*+ USE_INDEX(`t2` `a`)*/ * FROM `t2` WHERE `t2`.`a`=1"}, + // Specify digest cases. {"DROP SESSION BINDING FOR SQL DIGEST 'a'", true, "DROP SESSION BINDING FOR SQL DIGEST 'a'"}, {"drop global binding for sql digest 's'", true, "DROP GLOBAL BINDING FOR SQL DIGEST 's'"}, + {"drop global binding for sql digest @a, @b, 'test1,test2', @c, 'test333'", true, "DROP GLOBAL BINDING FOR SQL DIGEST @`a`, @`b`, 'test1,test2', @`c`, 'test333'"}, {"create session binding from history using plan digest 'sss'", true, "CREATE SESSION BINDING FROM HISTORY USING PLAN DIGEST 'sss'"}, + {"create session binding from history using plan digest @a, @b, 'test1,test2', @c, 'test333'", true, "CREATE SESSION BINDING FROM HISTORY USING PLAN DIGEST @`a`, @`b`, 'test1,test2', @`c`, 'test333'"}, {"CREATE GLOBAL BINDING FROM HISTORY USING PLAN DIGEST 'sss'", true, "CREATE GLOBAL BINDING FROM HISTORY USING PLAN DIGEST 'sss'"}, {"set binding enabled for sql digest '1'", true, "SET BINDING ENABLED FOR SQL DIGEST '1'"}, {"set binding disabled for sql digest '1'", true, "SET BINDING DISABLED FOR SQL DIGEST '1'"}, @@ -5698,6 +5744,16 @@ func TestView(t *testing.T) { require.Equal(t, "select c,d,e from t", v.Select.Text()) require.Equal(t, model.SecurityDefiner, v.Security) require.Equal(t, model.CheckOptionCascaded, v.CheckOption) + + src = ` +CREATE VIEW v1 AS SELECT * FROM t; +CREATE VIEW v2 AS SELECT 123123123123123; +` + nodes, _, err := p.Parse(src, "", "") + require.NoError(t, err) + require.Len(t, nodes, 2) + require.Equal(t, nodes[0].(*ast.CreateViewStmt).Select.Text(), "SELECT * FROM t") + require.Equal(t, nodes[1].(*ast.CreateViewStmt).Select.Text(), "SELECT 123123123123123") } func TestTimestampDiffUnit(t *testing.T) { diff --git a/pkg/parser/reserved_words_test.go b/pkg/parser/reserved_words_test.go index 35eed1f0aee30..f8a82c9315979 100644 --- a/pkg/parser/reserved_words_test.go +++ b/pkg/parser/reserved_words_test.go @@ -70,7 +70,7 @@ func TestCompareReservedWordsWithMySQL(t *testing.T) { "TABLESAMPLE", // Only in TiDB "ARRAY", // added in 8.0.17 (reserved); became nonreserved in 8.0.19 "ILIKE", // Only in TiDB - "TiDB_CURRENT_TSO", // Only in TiDB + "TIDB_CURRENT_TSO", // Only in TiDB "UNTIL": // Present in both, reserved only in TiDB // special cases: we do reserve these words but MySQL didn't, // and unreservering it causes legit parser conflict. diff --git a/pkg/parser/tidb/features.go b/pkg/parser/tidb/features.go index 1bdb511d20f35..4390898a87361 100644 --- a/pkg/parser/tidb/features.go +++ b/pkg/parser/tidb/features.go @@ -32,6 +32,8 @@ const ( FeatureIDTTL = "ttl" // FeatureIDResourceGroup is the `resource group` feature. FeatureIDResourceGroup = "resource_group" + // FeatureIDGlobalIndex is the `Global Index` feature. + FeatureIDGlobalIndex = "global_index" ) var featureIDs = map[string]struct{}{ @@ -42,6 +44,7 @@ var featureIDs = map[string]struct{}{ FeatureIDForceAutoInc: {}, FeatureIDPlacement: {}, FeatureIDTTL: {}, + FeatureIDGlobalIndex: {}, } // CanParseFeature is used to check if a feature can be parsed. diff --git a/pkg/planner/cardinality/BUILD.bazel b/pkg/planner/cardinality/BUILD.bazel index 4d480ba2e5674..4446861b0e7a9 100644 --- a/pkg/planner/cardinality/BUILD.bazel +++ b/pkg/planner/cardinality/BUILD.bazel @@ -26,6 +26,7 @@ go_library( "//pkg/planner/property", "//pkg/planner/util", "//pkg/planner/util/debugtrace", + "//pkg/planner/util/fixcontrol", "//pkg/sessionctx/stmtctx", "//pkg/statistics", "//pkg/tablecodec", @@ -71,6 +72,7 @@ go_test( "//pkg/parser/mysql", "//pkg/planner/core", "//pkg/planner/core/base", + "//pkg/planner/core/operator/logicalop", "//pkg/session", "//pkg/sessionctx", "//pkg/sessionctx/stmtctx", diff --git a/pkg/planner/cardinality/row_count_column.go b/pkg/planner/cardinality/row_count_column.go index 9d45220e85211..1f077e513cc54 100644 --- a/pkg/planner/cardinality/row_count_column.go +++ b/pkg/planner/cardinality/row_count_column.go @@ -18,6 +18,7 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/tidb/pkg/planner/context" "github.com/pingcap/tidb/pkg/planner/util/debugtrace" + "github.com/pingcap/tidb/pkg/planner/util/fixcontrol" "github.com/pingcap/tidb/pkg/statistics" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/codec" @@ -124,7 +125,7 @@ func GetRowCountByIntColumnRanges(sctx context.PlanContext, coll *statistics.His } // equalRowCountOnColumn estimates the row count by a slice of Range and a Datum. -func equalRowCountOnColumn(sctx context.PlanContext, c *statistics.Column, val types.Datum, encodedVal []byte, realtimeRowCount int64) (result float64, err error) { +func equalRowCountOnColumn(sctx context.PlanContext, c *statistics.Column, val types.Datum, encodedVal []byte, realtimeRowCount, modifyCount int64) (result float64, err error) { if sctx.GetSessionVars().StmtCtx.EnableOptimizerDebugTrace { debugtrace.EnterContextCommon(sctx) debugtrace.RecordAnyValuesWithNames(sctx, "Value", val.String(), "Encoded", encodedVal) @@ -172,7 +173,11 @@ func equalRowCountOnColumn(sctx context.PlanContext, c *statistics.Column, val t // 3. use uniform distribution assumption for the rest (even when this value is not covered by the range of stats) histNDV := float64(c.Histogram.NDV - int64(c.TopN.Num())) if histNDV <= 0 { - return 0, nil + // If the table hasn't been modified, it's safe to return 0. Otherwise, the TopN could be stale - return 1. + if modifyCount == 0 { + return 0, nil + } + return 1, nil } return c.Histogram.NotNullCount() / histNDV, nil } @@ -224,7 +229,7 @@ func GetColumnRowCount(sctx context.PlanContext, c *statistics.Column, ranges [] continue } var cnt float64 - cnt, err = equalRowCountOnColumn(sctx, c, lowVal, lowEncoded, realtimeRowCount) + cnt, err = equalRowCountOnColumn(sctx, c, lowVal, lowEncoded, realtimeRowCount, modifyCount) if err != nil { return 0, errors.Trace(err) } @@ -245,7 +250,7 @@ func GetColumnRowCount(sctx context.PlanContext, c *statistics.Column, ranges [] // case 2: it's a small range && using ver1 stats if rangeVals != nil { for _, val := range rangeVals { - cnt, err := equalRowCountOnColumn(sctx, c, val, lowEncoded, realtimeRowCount) + cnt, err := equalRowCountOnColumn(sctx, c, val, lowEncoded, realtimeRowCount, modifyCount) if err != nil { return 0, err } @@ -269,7 +274,7 @@ func GetColumnRowCount(sctx context.PlanContext, c *statistics.Column, ranges [] // And because we use (2, MaxValue] to represent expressions like a > 2 and use [MinNotNull, 3) to represent // expressions like b < 3, we need to exclude the special values. if rg.LowExclude && !lowVal.IsNull() && lowVal.Kind() != types.KindMaxValue && lowVal.Kind() != types.KindMinNotNull { - lowCnt, err := equalRowCountOnColumn(sctx, c, lowVal, lowEncoded, realtimeRowCount) + lowCnt, err := equalRowCountOnColumn(sctx, c, lowVal, lowEncoded, realtimeRowCount, modifyCount) if err != nil { return 0, errors.Trace(err) } @@ -280,7 +285,7 @@ func GetColumnRowCount(sctx context.PlanContext, c *statistics.Column, ranges [] cnt += float64(c.NullCount) } if !rg.HighExclude && highVal.Kind() != types.KindMaxValue && highVal.Kind() != types.KindMinNotNull { - highCnt, err := equalRowCountOnColumn(sctx, c, highVal, highEncoded, realtimeRowCount) + highCnt, err := equalRowCountOnColumn(sctx, c, highVal, highEncoded, realtimeRowCount, modifyCount) if err != nil { return 0, errors.Trace(err) } @@ -308,7 +313,17 @@ func GetColumnRowCount(sctx context.PlanContext, c *statistics.Column, ranges [] } rowCount += cnt } - rowCount = mathutil.Clamp(rowCount, 0, float64(realtimeRowCount)) + allowZeroEst := fixcontrol.GetBoolWithDefault( + sctx.GetSessionVars().GetOptimizerFixControlMap(), + fixcontrol.Fix47400, + false, + ) + if allowZeroEst { + rowCount = mathutil.Clamp(rowCount, 0, float64(realtimeRowCount)) + } else { + // Don't allow the final result to go below 1 row + rowCount = mathutil.Clamp(rowCount, 1, float64(realtimeRowCount)) + } return rowCount, nil } @@ -376,7 +391,7 @@ func ColumnEqualRowCount(sctx context.PlanContext, t *statistics.Table, value ty if err != nil { return 0, err } - result, err := equalRowCountOnColumn(sctx, c, value, encodedVal, t.ModifyCount) + result, err := equalRowCountOnColumn(sctx, c, value, encodedVal, t.RealtimeCount, t.ModifyCount) result *= c.GetIncreaseFactor(t.RealtimeCount) return result, errors.Trace(err) } diff --git a/pkg/planner/cardinality/row_count_index.go b/pkg/planner/cardinality/row_count_index.go index 3841a5edff7bd..1b7065662d047 100644 --- a/pkg/planner/cardinality/row_count_index.go +++ b/pkg/planner/cardinality/row_count_index.go @@ -26,6 +26,7 @@ import ( "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/planner/context" "github.com/pingcap/tidb/pkg/planner/util/debugtrace" + "github.com/pingcap/tidb/pkg/planner/util/fixcontrol" "github.com/pingcap/tidb/pkg/sessionctx/stmtctx" "github.com/pingcap/tidb/pkg/statistics" "github.com/pingcap/tidb/pkg/types" @@ -256,7 +257,7 @@ func getIndexRowCountForStatsV2(sctx context.PlanContext, idx *statistics.Index, } continue } - count = equalRowCountOnIndex(sctx, idx, lb, realtimeRowCount) + count = equalRowCountOnIndex(sctx, idx, lb, realtimeRowCount, modifyCount) // If the current table row count has changed, we should scale the row count accordingly. count *= idx.GetIncreaseFactor(realtimeRowCount) if debugTrace { @@ -350,13 +351,23 @@ func getIndexRowCountForStatsV2(sctx context.PlanContext, idx *statistics.Index, } totalCount += count } - totalCount = mathutil.Clamp(totalCount, 0, float64(realtimeRowCount)) + allowZeroEst := fixcontrol.GetBoolWithDefault( + sctx.GetSessionVars().GetOptimizerFixControlMap(), + fixcontrol.Fix47400, + false, + ) + if allowZeroEst { + totalCount = mathutil.Clamp(totalCount, 0, float64(realtimeRowCount)) + } else { + // Don't allow the final result to go below 1 row + totalCount = mathutil.Clamp(totalCount, 1, float64(realtimeRowCount)) + } return totalCount, nil } var nullKeyBytes, _ = codec.EncodeKey(time.UTC, nil, types.NewDatum(nil)) -func equalRowCountOnIndex(sctx context.PlanContext, idx *statistics.Index, b []byte, realtimeRowCount int64) (result float64) { +func equalRowCountOnIndex(sctx context.PlanContext, idx *statistics.Index, b []byte, realtimeRowCount, modifyCount int64) (result float64) { if sctx.GetSessionVars().StmtCtx.EnableOptimizerDebugTrace { debugtrace.EnterContextCommon(sctx) debugtrace.RecordAnyValuesWithNames(sctx, "Encoded Value", b) @@ -397,7 +408,11 @@ func equalRowCountOnIndex(sctx context.PlanContext, idx *statistics.Index, b []b // 3. use uniform distribution assumption for the rest (even when this value is not covered by the range of stats) histNDV := float64(idx.Histogram.NDV - int64(idx.TopN.Num())) if histNDV <= 0 { - return 0 + // If the table hasn't been modified, it's safe to return 0. Otherwise, the TopN could be stale - return 1. + if modifyCount == 0 { + return 0 + } + return 1 } return idx.Histogram.NotNullCount() / histNDV } diff --git a/pkg/planner/cardinality/selectivity_test.go b/pkg/planner/cardinality/selectivity_test.go index 591b9da71813d..459cfd8cd7f7b 100644 --- a/pkg/planner/cardinality/selectivity_test.go +++ b/pkg/planner/cardinality/selectivity_test.go @@ -33,6 +33,7 @@ import ( "github.com/pingcap/tidb/pkg/planner/cardinality" plannercore "github.com/pingcap/tidb/pkg/planner/core" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/session" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/sessionctx/stmtctx" @@ -104,7 +105,7 @@ func BenchmarkSelectivity(b *testing.B) { b.Run("Selectivity", func(b *testing.B) { b.ResetTimer() for i := 0; i < b.N; i++ { - _, _, err := cardinality.Selectivity(sctx.GetPlanCtx(), &statsTbl.HistColl, p.(base.LogicalPlan).Children()[0].(*plannercore.LogicalSelection).Conditions, nil) + _, _, err := cardinality.Selectivity(sctx.GetPlanCtx(), &statsTbl.HistColl, p.(base.LogicalPlan).Children()[0].(*logicalop.LogicalSelection).Conditions, nil) require.NoError(b, err) } b.ReportAllocs() @@ -235,7 +236,7 @@ func TestEstimationForUnknownValues(t *testing.T) { colID := table.Meta().Columns[0].ID count, err := cardinality.GetRowCountByColumnRanges(sctx, &statsTbl.HistColl, colID, getRange(30, 30)) require.NoError(t, err) - require.Equal(t, 0.2, count) + require.Equal(t, 1.0, count) count, err = cardinality.GetRowCountByColumnRanges(sctx, &statsTbl.HistColl, colID, getRange(9, 30)) require.NoError(t, err) @@ -264,7 +265,7 @@ func TestEstimationForUnknownValues(t *testing.T) { colID = table.Meta().Columns[0].ID count, err = cardinality.GetRowCountByColumnRanges(sctx, &statsTbl.HistColl, colID, getRange(1, 30)) require.NoError(t, err) - require.Equal(t, 0.0, count) + require.Equal(t, 1.0, count) testKit.MustExec("drop table t") testKit.MustExec("create table t(a int, b int, index idx(b))") @@ -277,7 +278,7 @@ func TestEstimationForUnknownValues(t *testing.T) { colID = table.Meta().Columns[0].ID count, err = cardinality.GetRowCountByColumnRanges(sctx, &statsTbl.HistColl, colID, getRange(2, 2)) require.NoError(t, err) - require.Equal(t, 0.0, count) + require.Equal(t, 1.0, count) idxID = table.Meta().Indices[0].ID count, err = cardinality.GetRowCountByIndexRanges(sctx, &statsTbl.HistColl, idxID, getRange(2, 2)) @@ -401,8 +402,8 @@ func TestSelectivity(t *testing.T) { }, { exprs: "a >= 1 and b > 1 and a < 2", - selectivity: 0.01783264746, - selectivityAfterIncrease: 0.01851851852, + selectivity: 0.017832647462277088, + selectivityAfterIncrease: 0.018518518518518517, }, { exprs: "a >= 1 and c > 1 and a < 2", @@ -421,13 +422,13 @@ func TestSelectivity(t *testing.T) { }, { exprs: "b > 1", - selectivity: 0.96296296296, + selectivity: 0.9629629629629629, selectivityAfterIncrease: 1, }, { exprs: "a > 1 and b < 2 and c > 3 and d < 4 and e > 5", - selectivity: 0, - selectivityAfterIncrease: 0, + selectivity: 5.870830440255832e-05, + selectivityAfterIncrease: 1.51329827770157e-05, }, { exprs: longExpr, @@ -450,7 +451,7 @@ func TestSelectivity(t *testing.T) { p, err := plannercore.BuildLogicalPlanForTest(ctx, sctx, stmts[0], ret.InfoSchema) require.NoErrorf(t, err, "for building plan, expr %s", err, tt.exprs) - sel := p.(base.LogicalPlan).Children()[0].(*plannercore.LogicalSelection) + sel := p.(base.LogicalPlan).Children()[0].(*logicalop.LogicalSelection) ds := sel.Children()[0].(*plannercore.DataSource) histColl := statsTbl.GenerateHistCollFromColumnInfo(ds.TableInfo, ds.Schema().Columns) @@ -508,7 +509,7 @@ func TestDNFCondSelectivity(t *testing.T) { p, err := plannercore.BuildLogicalPlanForTest(ctx, sctx, stmts[0], ret.InfoSchema) require.NoErrorf(t, err, "error %v, for building plan, sql %s", err, tt) - sel := p.(base.LogicalPlan).Children()[0].(*plannercore.LogicalSelection) + sel := p.(base.LogicalPlan).Children()[0].(*logicalop.LogicalSelection) ds := sel.Children()[0].(*plannercore.DataSource) histColl := statsTbl.GenerateHistCollFromColumnInfo(ds.TableInfo, ds.Schema().Columns) @@ -1189,8 +1190,8 @@ func TestCrossValidationSelectivity(t *testing.T) { require.NoError(t, h.DumpStatsDeltaToKV(true)) tk.MustExec("analyze table t") tk.MustQuery("explain format = 'brief' select * from t where a = 1 and b > 0 and b < 1000 and c > 1000").Check(testkit.Rows( - "TableReader 0.00 root data:Selection", - "└─Selection 0.00 cop[tikv] gt(test.t.c, 1000)", + "TableReader 1.00 root data:Selection", + "└─Selection 1.00 cop[tikv] gt(test.t.c, 1000)", " └─TableRangeScan 2.00 cop[tikv] table:t range:(1 0,1 1000), keep order:false")) } diff --git a/pkg/planner/cardinality/testdata/cardinality_suite_out.json b/pkg/planner/cardinality/testdata/cardinality_suite_out.json index 4ea3d621a19e2..cfae3231c3f52 100644 --- a/pkg/planner/cardinality/testdata/cardinality_suite_out.json +++ b/pkg/planner/cardinality/testdata/cardinality_suite_out.json @@ -24,7 +24,7 @@ { "Start": 800, "End": 900, - "Count": 755.754166655054 + "Count": 791.004166655054 }, { "Start": 900, @@ -79,7 +79,7 @@ { "Start": 800, "End": 1000, - "Count": 1213.946869573942 + "Count": 1249.196869573942 }, { "Start": 900, @@ -104,7 +104,7 @@ { "Start": 200, "End": 400, - "Count": 1215.0288209899081 + "Count": 1188.7788209899081 }, { "Start": 200, @@ -2589,7 +2589,7 @@ }, { "Name": "a", - "Result": 0 + "Result": 1 } ] }, @@ -2887,7 +2887,7 @@ }, { "End estimate range": { - "RowCount": 0, + "RowCount": 1, "Type": "Range" } } @@ -2895,7 +2895,7 @@ }, { "Name": "iab", - "Result": 0 + "Result": 1 } ] }, @@ -3447,11 +3447,11 @@ "Expressions": [ "lt(test.t.a, -1500)" ], - "Selectivity": 0, + "Selectivity": 0.0003246753246753247, "partial cover": false }, { - "Result": 0 + "Result": 2.1082813290605499e-7 } ] } @@ -3940,7 +3940,7 @@ }, { "Name": "iab", - "Result": 0 + "Result": 1 } ] }, @@ -4093,11 +4093,11 @@ "Expressions": [ "lt(test.t.a, -1500)" ], - "Selectivity": 0, + "Selectivity": 0.0003246753246753247, "partial cover": false }, { - "Result": 0 + "Result": 1.9066503965832828e-7 } ] } diff --git a/pkg/planner/cardinality/trace_test.go b/pkg/planner/cardinality/trace_test.go index c44fb88abfe3c..cc194f9cffe56 100644 --- a/pkg/planner/cardinality/trace_test.go +++ b/pkg/planner/cardinality/trace_test.go @@ -31,6 +31,7 @@ import ( "github.com/pingcap/tidb/pkg/planner/cardinality" plannercore "github.com/pingcap/tidb/pkg/planner/core" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/testkit/testdata" @@ -209,7 +210,7 @@ func TestTraceDebugSelectivity(t *testing.T) { p, err := plannercore.BuildLogicalPlanForTest(context.Background(), sctx, stmt, ret.InfoSchema) require.NoError(t, err) - sel := p.(base.LogicalPlan).Children()[0].(*plannercore.LogicalSelection) + sel := p.(base.LogicalPlan).Children()[0].(*logicalop.LogicalSelection) ds := sel.Children()[0].(*plannercore.DataSource) dsSchemaCols = append(dsSchemaCols, ds.Schema().Columns) diff --git a/pkg/planner/cascades/BUILD.bazel b/pkg/planner/cascades/BUILD.bazel index 93b29d28f1c61..1c5dc15b9abac 100644 --- a/pkg/planner/cascades/BUILD.bazel +++ b/pkg/planner/cascades/BUILD.bazel @@ -21,6 +21,7 @@ go_library( "//pkg/planner/core", "//pkg/planner/core/base", "//pkg/planner/core/operator/logicalop", + "//pkg/planner/core/rule/util", "//pkg/planner/implementation", "//pkg/planner/memo", "//pkg/planner/pattern", @@ -57,6 +58,7 @@ go_test( "//pkg/parser/model", "//pkg/planner/core", "//pkg/planner/core/base", + "//pkg/planner/core/operator/logicalop", "//pkg/planner/memo", "//pkg/planner/pattern", "//pkg/planner/property", diff --git a/pkg/planner/cascades/implementation_rules.go b/pkg/planner/cascades/implementation_rules.go index ea5ba91bd1b1e..53f300301c4e6 100644 --- a/pkg/planner/cascades/implementation_rules.go +++ b/pkg/planner/cascades/implementation_rules.go @@ -105,7 +105,7 @@ func (*ImplTableDual) Match(_ *memo.GroupExpr, prop *property.PhysicalProperty) // OnImplement implements ImplementationRule OnImplement interface. func (*ImplTableDual) OnImplement(expr *memo.GroupExpr, _ *property.PhysicalProperty) ([]memo.Implementation, error) { logicProp := expr.Group.Prop - logicDual := expr.ExprNode.(*plannercore.LogicalTableDual) + logicDual := expr.ExprNode.(*logicalop.LogicalTableDual) dual := plannercore.PhysicalTableDual{RowCount: logicDual.RowCount}.Init(logicDual.SCtx(), logicProp.Stats, logicDual.QueryBlockOffset()) dual.SetSchema(logicProp.Schema) return []memo.Implementation{impl.NewTableDualImpl(dual)}, nil @@ -125,7 +125,7 @@ func (*ImplMemTableScan) OnImplement( expr *memo.GroupExpr, reqProp *property.PhysicalProperty, ) ([]memo.Implementation, error) { - logic := expr.ExprNode.(*plannercore.LogicalMemTable) + logic := expr.ExprNode.(*logicalop.LogicalMemTable) logicProp := expr.Group.Prop physical := plannercore.PhysicalMemTable{ DBName: logic.DBName, @@ -149,15 +149,14 @@ func (*ImplProjection) Match(_ *memo.GroupExpr, _ *property.PhysicalProperty) (m // OnImplement implements ImplementationRule OnImplement interface. func (*ImplProjection) OnImplement(expr *memo.GroupExpr, reqProp *property.PhysicalProperty) ([]memo.Implementation, error) { logicProp := expr.Group.Prop - logicProj := expr.ExprNode.(*plannercore.LogicalProjection) + logicProj := expr.ExprNode.(*logicalop.LogicalProjection) childProp, ok := logicProj.TryToGetChildProp(reqProp) if !ok { return nil, nil } proj := plannercore.PhysicalProjection{ - Exprs: logicProj.Exprs, - CalculateNoDelay: logicProj.CalculateNoDelay, - AvoidColumnEvaluator: logicProj.AvoidColumnEvaluator, + Exprs: logicProj.Exprs, + CalculateNoDelay: logicProj.CalculateNoDelay, }.Init(logicProj.SCtx(), logicProp.Stats.ScaleByExpectCnt(reqProp.ExpectedCnt), logicProj.QueryBlockOffset(), childProp) proj.SetSchema(logicProp.Schema) return []memo.Implementation{impl.NewProjectionImpl(proj)}, nil @@ -178,10 +177,10 @@ func (*ImplTiKVSingleReadGather) OnImplement(expr *memo.GroupExpr, reqProp *prop logicProp := expr.Group.Prop sg := expr.ExprNode.(*plannercore.TiKVSingleGather) if sg.IsIndexGather { - reader := sg.GetPhysicalIndexReader(logicProp.Schema, logicProp.Stats.ScaleByExpectCnt(reqProp.ExpectedCnt), reqProp) + reader := plannercore.GetPhysicalIndexReader(sg, logicProp.Schema, logicProp.Stats.ScaleByExpectCnt(reqProp.ExpectedCnt), reqProp) return []memo.Implementation{impl.NewIndexReaderImpl(reader, sg.Source)}, nil } - reader := sg.GetPhysicalTableReader(logicProp.Schema, logicProp.Stats.ScaleByExpectCnt(reqProp.ExpectedCnt), reqProp) + reader := plannercore.GetPhysicalTableReader(sg, logicProp.Schema, logicProp.Stats.ScaleByExpectCnt(reqProp.ExpectedCnt), reqProp) return []memo.Implementation{impl.NewTableReaderImpl(reader, sg.Source)}, nil } @@ -244,7 +243,7 @@ func (*ImplShow) Match(_ *memo.GroupExpr, prop *property.PhysicalProperty) (matc // OnImplement implements ImplementationRule OnImplement interface. func (*ImplShow) OnImplement(expr *memo.GroupExpr, _ *property.PhysicalProperty) ([]memo.Implementation, error) { logicProp := expr.Group.Prop - show := expr.ExprNode.(*plannercore.LogicalShow) + show := expr.ExprNode.(*logicalop.LogicalShow) // TODO(zz-jason): unifying LogicalShow and PhysicalShow to a single // struct. So that we don't need to create a new PhysicalShow object, which // can help us to reduce the gc pressure of golang runtime and improve the @@ -269,7 +268,7 @@ func (*ImplSelection) Match(_ *memo.GroupExpr, _ *property.PhysicalProperty) (ma // OnImplement implements ImplementationRule OnImplement interface. func (*ImplSelection) OnImplement(expr *memo.GroupExpr, reqProp *property.PhysicalProperty) ([]memo.Implementation, error) { - logicalSel := expr.ExprNode.(*plannercore.LogicalSelection) + logicalSel := expr.ExprNode.(*logicalop.LogicalSelection) physicalSel := plannercore.PhysicalSelection{ Conditions: logicalSel.Conditions, }.Init(logicalSel.SCtx(), expr.Group.Prop.Stats.ScaleByExpectCnt(reqProp.ExpectedCnt), logicalSel.QueryBlockOffset(), reqProp.CloneEssentialFields()) @@ -290,7 +289,7 @@ type ImplSort struct { // Match implements ImplementationRule match interface. func (*ImplSort) Match(expr *memo.GroupExpr, prop *property.PhysicalProperty) (matched bool) { - ls := expr.ExprNode.(*plannercore.LogicalSort) + ls := expr.ExprNode.(*logicalop.LogicalSort) return plannercore.MatchItems(prop, ls.ByItems) } @@ -298,7 +297,7 @@ func (*ImplSort) Match(expr *memo.GroupExpr, prop *property.PhysicalProperty) (m // If all of the sort items are columns, generate a NominalSort, otherwise // generate a PhysicalSort. func (*ImplSort) OnImplement(expr *memo.GroupExpr, reqProp *property.PhysicalProperty) ([]memo.Implementation, error) { - ls := expr.ExprNode.(*plannercore.LogicalSort) + ls := expr.ExprNode.(*logicalop.LogicalSort) if newProp, canUseNominal := plannercore.GetPropByOrderByItems(ls.ByItems); canUseNominal { newProp.ExpectedCnt = reqProp.ExpectedCnt ns := plannercore.NominalSort{}.Init( @@ -327,7 +326,7 @@ func (*ImplHashAgg) Match(_ *memo.GroupExpr, prop *property.PhysicalProperty) (m // OnImplement implements ImplementationRule OnImplement interface. func (*ImplHashAgg) OnImplement(expr *memo.GroupExpr, reqProp *property.PhysicalProperty) ([]memo.Implementation, error) { - la := expr.ExprNode.(*plannercore.LogicalAggregation) + la := expr.ExprNode.(*logicalop.LogicalAggregation) hashAgg := plannercore.NewPhysicalHashAgg( la, expr.Group.Prop.Stats.ScaleByExpectCnt(reqProp.ExpectedCnt), @@ -356,7 +355,7 @@ func (*ImplLimit) Match(_ *memo.GroupExpr, prop *property.PhysicalProperty) (mat // OnImplement implements ImplementationRule OnImplement interface. func (*ImplLimit) OnImplement(expr *memo.GroupExpr, _ *property.PhysicalProperty) ([]memo.Implementation, error) { - logicalLimit := expr.ExprNode.(*plannercore.LogicalLimit) + logicalLimit := expr.ExprNode.(*logicalop.LogicalLimit) newProp := &property.PhysicalProperty{ExpectedCnt: float64(logicalLimit.Count + logicalLimit.Offset)} physicalLimit := plannercore.PhysicalLimit{ Offset: logicalLimit.Offset, @@ -373,7 +372,7 @@ type ImplTopN struct { // Match implements ImplementationRule Match interface. func (*ImplTopN) Match(expr *memo.GroupExpr, prop *property.PhysicalProperty) (matched bool) { - topN := expr.ExprNode.(*plannercore.LogicalTopN) + topN := expr.ExprNode.(*logicalop.LogicalTopN) if expr.Group.EngineType != pattern.EngineTiDB { return prop.IsSortItemEmpty() } @@ -382,7 +381,7 @@ func (*ImplTopN) Match(expr *memo.GroupExpr, prop *property.PhysicalProperty) (m // OnImplement implements ImplementationRule OnImplement interface. func (*ImplTopN) OnImplement(expr *memo.GroupExpr, _ *property.PhysicalProperty) ([]memo.Implementation, error) { - lt := expr.ExprNode.(*plannercore.LogicalTopN) + lt := expr.ExprNode.(*logicalop.LogicalTopN) resultProp := &property.PhysicalProperty{ExpectedCnt: math.MaxFloat64} topN := plannercore.PhysicalTopN{ ByItems: lt.ByItems, @@ -406,14 +405,14 @@ type ImplTopNAsLimit struct { // Match implements ImplementationRule Match interface. func (*ImplTopNAsLimit) Match(expr *memo.GroupExpr, prop *property.PhysicalProperty) (matched bool) { - topN := expr.ExprNode.(*plannercore.LogicalTopN) + topN := expr.ExprNode.(*logicalop.LogicalTopN) _, canUseLimit := plannercore.GetPropByOrderByItems(topN.ByItems) return canUseLimit && plannercore.MatchItems(prop, topN.ByItems) } // OnImplement implements ImplementationRule OnImplement interface. func (*ImplTopNAsLimit) OnImplement(expr *memo.GroupExpr, _ *property.PhysicalProperty) ([]memo.Implementation, error) { - lt := expr.ExprNode.(*plannercore.LogicalTopN) + lt := expr.ExprNode.(*logicalop.LogicalTopN) newProp := &property.PhysicalProperty{ExpectedCnt: float64(lt.Count + lt.Offset)} newProp.SortItems = make([]property.SortItem, len(lt.ByItems)) for i, item := range lt.ByItems { @@ -429,7 +428,7 @@ func (*ImplTopNAsLimit) OnImplement(expr *memo.GroupExpr, _ *property.PhysicalPr } func getImplForHashJoin(expr *memo.GroupExpr, prop *property.PhysicalProperty, innerIdx int, useOuterToBuild bool) memo.Implementation { - join := expr.ExprNode.(*plannercore.LogicalJoin) + join := expr.ExprNode.(*logicalop.LogicalJoin) chReqProps := make([]*property.PhysicalProperty, 2) chReqProps[0] = &property.PhysicalProperty{ExpectedCnt: math.MaxFloat64} chReqProps[1] = &property.PhysicalProperty{ExpectedCnt: math.MaxFloat64} @@ -449,8 +448,8 @@ type ImplHashJoinBuildLeft struct { // Match implements ImplementationRule Match interface. func (*ImplHashJoinBuildLeft) Match(expr *memo.GroupExpr, prop *property.PhysicalProperty) (matched bool) { - switch expr.ExprNode.(*plannercore.LogicalJoin).JoinType { - case plannercore.InnerJoin, plannercore.LeftOuterJoin, plannercore.RightOuterJoin: + switch expr.ExprNode.(*logicalop.LogicalJoin).JoinType { + case logicalop.InnerJoin, logicalop.LeftOuterJoin, logicalop.RightOuterJoin: return prop.IsSortItemEmpty() default: return false @@ -459,13 +458,13 @@ func (*ImplHashJoinBuildLeft) Match(expr *memo.GroupExpr, prop *property.Physica // OnImplement implements ImplementationRule OnImplement interface. func (*ImplHashJoinBuildLeft) OnImplement(expr *memo.GroupExpr, reqProp *property.PhysicalProperty) ([]memo.Implementation, error) { - join := expr.ExprNode.(*plannercore.LogicalJoin) + join := expr.ExprNode.(*logicalop.LogicalJoin) switch join.JoinType { - case plannercore.InnerJoin: + case logicalop.InnerJoin: return []memo.Implementation{getImplForHashJoin(expr, reqProp, 0, false)}, nil - case plannercore.LeftOuterJoin: + case logicalop.LeftOuterJoin: return []memo.Implementation{getImplForHashJoin(expr, reqProp, 1, true)}, nil - case plannercore.RightOuterJoin: + case logicalop.RightOuterJoin: return []memo.Implementation{getImplForHashJoin(expr, reqProp, 0, false)}, nil default: return nil, nil @@ -483,16 +482,16 @@ func (*ImplHashJoinBuildRight) Match(_ *memo.GroupExpr, prop *property.PhysicalP // OnImplement implements ImplementationRule OnImplement interface. func (*ImplHashJoinBuildRight) OnImplement(expr *memo.GroupExpr, reqProp *property.PhysicalProperty) ([]memo.Implementation, error) { - join := expr.ExprNode.(*plannercore.LogicalJoin) + join := expr.ExprNode.(*logicalop.LogicalJoin) switch join.JoinType { - case plannercore.SemiJoin, plannercore.AntiSemiJoin, - plannercore.LeftOuterSemiJoin, plannercore.AntiLeftOuterSemiJoin: + case logicalop.SemiJoin, logicalop.AntiSemiJoin, + logicalop.LeftOuterSemiJoin, logicalop.AntiLeftOuterSemiJoin: return []memo.Implementation{getImplForHashJoin(expr, reqProp, 1, false)}, nil - case plannercore.InnerJoin: + case logicalop.InnerJoin: return []memo.Implementation{getImplForHashJoin(expr, reqProp, 1, false)}, nil - case plannercore.LeftOuterJoin: + case logicalop.LeftOuterJoin: return []memo.Implementation{getImplForHashJoin(expr, reqProp, 1, false)}, nil - case plannercore.RightOuterJoin: + case logicalop.RightOuterJoin: return []memo.Implementation{getImplForHashJoin(expr, reqProp, 0, true)}, nil } return nil, nil @@ -509,7 +508,7 @@ func (*ImplMergeJoin) Match(_ *memo.GroupExpr, _ *property.PhysicalProperty) (ma // OnImplement implements ImplementationRule OnImplement interface. func (*ImplMergeJoin) OnImplement(expr *memo.GroupExpr, reqProp *property.PhysicalProperty) ([]memo.Implementation, error) { - join := expr.ExprNode.(*plannercore.LogicalJoin) + join := expr.ExprNode.(*logicalop.LogicalJoin) physicalMergeJoins := plannercore.GetMergeJoin(join, reqProp, expr.Schema(), expr.Group.Prop.Stats, expr.Children[0].Prop.Stats, expr.Children[1].Prop.Stats) mergeJoinImpls := make([]memo.Implementation, 0, len(physicalMergeJoins)) for _, physicalPlan := range physicalMergeJoins { @@ -530,7 +529,7 @@ func (*ImplUnionAll) Match(_ *memo.GroupExpr, prop *property.PhysicalProperty) ( // OnImplement implements ImplementationRule OnImplement interface. func (*ImplUnionAll) OnImplement(expr *memo.GroupExpr, reqProp *property.PhysicalProperty) ([]memo.Implementation, error) { - logicalUnion := expr.ExprNode.(*plannercore.LogicalUnionAll) + logicalUnion := expr.ExprNode.(*logicalop.LogicalUnionAll) chReqProps := make([]*property.PhysicalProperty, len(expr.Children)) for i := range expr.Children { chReqProps[i] = &property.PhysicalProperty{ExpectedCnt: reqProp.ExpectedCnt} @@ -556,7 +555,7 @@ func (*ImplApply) Match(expr *memo.GroupExpr, prop *property.PhysicalProperty) ( // OnImplement implements ImplementationRule OnImplement interface func (*ImplApply) OnImplement(expr *memo.GroupExpr, reqProp *property.PhysicalProperty) ([]memo.Implementation, error) { - la := expr.ExprNode.(*plannercore.LogicalApply) + la := expr.ExprNode.(*logicalop.LogicalApply) join := plannercore.GetHashJoin(la, reqProp) physicalApply := plannercore.PhysicalApply{ PhysicalHashJoin: *join, @@ -597,7 +596,7 @@ type ImplWindow struct { // Match implements ImplementationRule Match interface. func (*ImplWindow) Match(expr *memo.GroupExpr, prop *property.PhysicalProperty) (matched bool) { - lw := expr.ExprNode.(*plannercore.LogicalWindow) + lw := expr.ExprNode.(*logicalop.LogicalWindow) var byItems []property.SortItem byItems = append(byItems, lw.PartitionBy...) byItems = append(byItems, lw.OrderBy...) @@ -607,7 +606,7 @@ func (*ImplWindow) Match(expr *memo.GroupExpr, prop *property.PhysicalProperty) // OnImplement implements ImplementationRule OnImplement interface. func (*ImplWindow) OnImplement(expr *memo.GroupExpr, reqProp *property.PhysicalProperty) ([]memo.Implementation, error) { - lw := expr.ExprNode.(*plannercore.LogicalWindow) + lw := expr.ExprNode.(*logicalop.LogicalWindow) var byItems []property.SortItem byItems = append(byItems, lw.PartitionBy...) byItems = append(byItems, lw.OrderBy...) diff --git a/pkg/planner/cascades/optimize_test.go b/pkg/planner/cascades/optimize_test.go index 18b32dd16a7ed..0ae8cc0e6db64 100644 --- a/pkg/planner/cascades/optimize_test.go +++ b/pkg/planner/cascades/optimize_test.go @@ -26,6 +26,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/model" plannercore "github.com/pingcap/tidb/pkg/planner/core" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/memo" "github.com/pingcap/tidb/pkg/planner/pattern" "github.com/pingcap/tidb/pkg/planner/property" @@ -154,7 +155,7 @@ func TestPreparePossibleProperties(t *testing.T) { require.NotNil(t, columnF) require.NotNil(t, columnA) - agg, ok := logic.Children()[0].(*plannercore.LogicalAggregation) + agg, ok := logic.Children()[0].(*logicalop.LogicalAggregation) require.True(t, ok) group := memo.Convert2Group(agg) diff --git a/pkg/planner/cascades/transformation_rules.go b/pkg/planner/cascades/transformation_rules.go index 2e3d84d95f154..a18cbc55ef449 100644 --- a/pkg/planner/cascades/transformation_rules.go +++ b/pkg/planner/cascades/transformation_rules.go @@ -25,6 +25,8 @@ import ( "github.com/pingcap/tidb/pkg/planner/context" plannercore "github.com/pingcap/tidb/pkg/planner/core" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" + ruleutil "github.com/pingcap/tidb/pkg/planner/core/rule/util" "github.com/pingcap/tidb/pkg/planner/memo" "github.com/pingcap/tidb/pkg/planner/pattern" "github.com/pingcap/tidb/pkg/planner/util" @@ -195,7 +197,7 @@ func NewRulePushSelDownTableScan() Transformation { // Filters of the old `sel` operator are removed if they are used to calculate // the key ranges of the `ts` operator. func (*PushSelDownTableScan) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - sel := old.GetExpr().ExprNode.(*plannercore.LogicalSelection) + sel := old.GetExpr().ExprNode.(*logicalop.LogicalSelection) ts := old.Children[0].GetExpr().ExprNode.(*plannercore.LogicalTableScan) if ts.HandleCols == nil { return nil, false, false, nil @@ -217,7 +219,7 @@ func (*PushSelDownTableScan) OnTransform(old *memo.ExprIter) (newExprs []*memo.G } schema := old.GetExpr().Group.Prop.Schema tblScanGroup := memo.NewGroupWithSchema(tblScanExpr, schema) - newSel := plannercore.LogicalSelection{Conditions: remained}.Init(sel.SCtx(), sel.QueryBlockOffset()) + newSel := logicalop.LogicalSelection{Conditions: remained}.Init(sel.SCtx(), sel.QueryBlockOffset()) selExpr := memo.NewGroupExpr(newSel) selExpr.Children = append(selExpr.Children, tblScanGroup) // `sel -> ts` is transformed to `newSel ->newTS`. @@ -248,7 +250,7 @@ func NewRulePushSelDownIndexScan() Transformation { // `Selection -> IndexScan(with a new access range)` // or just keep the two GroupExprs unchanged. func (*PushSelDownIndexScan) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - sel := old.GetExpr().ExprNode.(*plannercore.LogicalSelection) + sel := old.GetExpr().ExprNode.(*logicalop.LogicalSelection) is := old.Children[0].GetExpr().ExprNode.(*plannercore.LogicalIndexScan) if len(is.IdxCols) == 0 { return nil, false, false, nil @@ -300,7 +302,7 @@ func (*PushSelDownIndexScan) OnTransform(old *memo.ExprIter) (newExprs []*memo.G return []*memo.GroupExpr{isExpr}, true, false, nil } isGroup := memo.NewGroupWithSchema(isExpr, old.Children[0].GetExpr().Group.Prop.Schema) - newSel := plannercore.LogicalSelection{Conditions: res.RemainedConds}.Init(sel.SCtx(), sel.QueryBlockOffset()) + newSel := logicalop.LogicalSelection{Conditions: res.RemainedConds}.Init(sel.SCtx(), sel.QueryBlockOffset()) selExpr := memo.NewGroupExpr(newSel) selExpr.SetChildren(isGroup) return []*memo.GroupExpr{selExpr}, true, false, nil @@ -329,16 +331,16 @@ func NewRulePushSelDownTiKVSingleGather() Transformation { // 1. `newTg -> pushedSel -> any` // 2. `remainedSel -> newTg -> pushedSel -> any` func (*PushSelDownTiKVSingleGather) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - sel := old.GetExpr().ExprNode.(*plannercore.LogicalSelection) + sel := old.GetExpr().ExprNode.(*logicalop.LogicalSelection) sg := old.Children[0].GetExpr().ExprNode.(*plannercore.TiKVSingleGather) childGroup := old.Children[0].Children[0].Group var pushed, remained []expression.Expression sctx := sg.SCtx() - pushed, remained = expression.PushDownExprs(plannercore.GetPushDownCtx(sctx), sel.Conditions, kv.TiKV) + pushed, remained = expression.PushDownExprs(util.GetPushDownCtx(sctx), sel.Conditions, kv.TiKV) if len(pushed) == 0 { return nil, false, false, nil } - pushedSel := plannercore.LogicalSelection{Conditions: pushed}.Init(sctx, sel.QueryBlockOffset()) + pushedSel := logicalop.LogicalSelection{Conditions: pushed}.Init(sctx, sel.QueryBlockOffset()) pushedSelExpr := memo.NewGroupExpr(pushedSel) pushedSelExpr.Children = append(pushedSelExpr.Children, childGroup) pushedSelGroup := memo.NewGroupWithSchema(pushedSelExpr, childGroup.Prop.Schema).SetEngineType(childGroup.EngineType) @@ -354,7 +356,7 @@ func (*PushSelDownTiKVSingleGather) OnTransform(old *memo.ExprIter) (newExprs [] return []*memo.GroupExpr{tblGatherExpr}, true, false, nil } tblGatherGroup := memo.NewGroupWithSchema(tblGatherExpr, pushedSelGroup.Prop.Schema) - remainedSel := plannercore.LogicalSelection{Conditions: remained}.Init(sel.SCtx(), sel.QueryBlockOffset()) + remainedSel := logicalop.LogicalSelection{Conditions: remained}.Init(sel.SCtx(), sel.QueryBlockOffset()) remainedSelExpr := memo.NewGroupExpr(remainedSel) remainedSelExpr.Children = append(remainedSelExpr.Children, tblGatherGroup) // `oldSel -> oldTg -> any` is transformed to `remainedSel -> newTg -> pushedSel -> any`. @@ -409,7 +411,7 @@ func (r *PushAggDownGather) Match(expr *memo.ExprIter) bool { if expr.GetExpr().HasAppliedRule(r) { return false } - agg := expr.GetExpr().ExprNode.(*plannercore.LogicalAggregation) + agg := expr.GetExpr().ExprNode.(*logicalop.LogicalAggregation) for _, aggFunc := range agg.AggFuncs { if aggFunc.Mode != aggregation.CompleteMode { return false @@ -433,7 +435,7 @@ func (r *PushAggDownGather) Match(expr *memo.ExprIter) bool { // OnTransform implements Transformation interface. // It will transform `Agg->Gather` to `Agg(Final) -> Gather -> Agg(Partial1)`. func (r *PushAggDownGather) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - agg := old.GetExpr().ExprNode.(*plannercore.LogicalAggregation) + agg := old.GetExpr().ExprNode.(*logicalop.LogicalAggregation) aggSchema := old.GetExpr().Group.Prop.Schema gather := old.Children[0].GetExpr().ExprNode.(*plannercore.TiKVSingleGather) childGroup := old.Children[0].GetExpr().Children[0] @@ -459,13 +461,13 @@ func (r *PushAggDownGather) OnTransform(old *memo.ExprIter) (newExprs []*memo.Gr partialPref.AggFuncs = plannercore.RemoveUnnecessaryFirstRow(agg.SCtx(), finalPref.GroupByItems, partialPref.AggFuncs, partialPref.GroupByItems, partialPref.Schema, firstRowFuncMap) - partialAgg := plannercore.LogicalAggregation{ + partialAgg := logicalop.LogicalAggregation{ AggFuncs: partialPref.AggFuncs, GroupByItems: partialPref.GroupByItems, }.Init(agg.SCtx(), agg.QueryBlockOffset()) partialAgg.CopyAggHints(agg) - finalAgg := plannercore.LogicalAggregation{ + finalAgg := logicalop.LogicalAggregation{ AggFuncs: finalPref.AggFuncs, GroupByItems: finalPref.GroupByItems, }.Init(agg.SCtx(), agg.QueryBlockOffset()) @@ -505,8 +507,8 @@ func NewRulePushSelDownSort() Transformation { // OnTransform implements Transformation interface. // It will transform `sel->sort->x` to `sort->sel->x`. func (*PushSelDownSort) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - sel := old.GetExpr().ExprNode.(*plannercore.LogicalSelection) - sort := old.Children[0].GetExpr().ExprNode.(*plannercore.LogicalSort) + sel := old.GetExpr().ExprNode.(*logicalop.LogicalSelection) + sort := old.Children[0].GetExpr().ExprNode.(*logicalop.LogicalSort) childGroup := old.Children[0].GetExpr().Children[0] newSelExpr := memo.NewGroupExpr(sel) @@ -541,8 +543,8 @@ func NewRulePushSelDownProjection() Transformation { // 2. `selection -> projection -> selection -> x` or // 3. just keep unchanged. func (*PushSelDownProjection) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - sel := old.GetExpr().ExprNode.(*plannercore.LogicalSelection) - proj := old.Children[0].GetExpr().ExprNode.(*plannercore.LogicalProjection) + sel := old.GetExpr().ExprNode.(*logicalop.LogicalSelection) + proj := old.Children[0].GetExpr().ExprNode.(*logicalop.LogicalProjection) projSchema := old.Children[0].Prop.Schema childGroup := old.Children[0].GetExpr().Children[0] for _, expr := range proj.Exprs { @@ -564,7 +566,7 @@ func (*PushSelDownProjection) OnTransform(old *memo.ExprIter) (newExprs []*memo. if len(canBePushed) == 0 { return nil, false, false, nil } - newBottomSel := plannercore.LogicalSelection{Conditions: canBePushed}.Init(sel.SCtx(), sel.QueryBlockOffset()) + newBottomSel := logicalop.LogicalSelection{Conditions: canBePushed}.Init(sel.SCtx(), sel.QueryBlockOffset()) newBottomSelExpr := memo.NewGroupExpr(newBottomSel) newBottomSelExpr.SetChildren(childGroup) newBottomSelGroup := memo.NewGroupWithSchema(newBottomSelExpr, childGroup.Prop.Schema) @@ -574,7 +576,7 @@ func (*PushSelDownProjection) OnTransform(old *memo.ExprIter) (newExprs []*memo. return []*memo.GroupExpr{newProjExpr}, true, false, nil } newProjGroup := memo.NewGroupWithSchema(newProjExpr, projSchema) - newTopSel := plannercore.LogicalSelection{Conditions: canNotBePushed}.Init(sel.SCtx(), sel.QueryBlockOffset()) + newTopSel := logicalop.LogicalSelection{Conditions: canNotBePushed}.Init(sel.SCtx(), sel.QueryBlockOffset()) newTopSelExpr := memo.NewGroupExpr(newTopSel) newTopSelExpr.SetChildren(newProjGroup) return []*memo.GroupExpr{newTopSelExpr}, true, false, nil @@ -601,8 +603,8 @@ func NewRulePushSelDownAggregation() Transformation { // It will transform `sel->agg->x` to `agg->sel->x` or `sel->agg->sel->x` // or just keep the selection unchanged. func (*PushSelDownAggregation) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - sel := old.GetExpr().ExprNode.(*plannercore.LogicalSelection) - agg := old.Children[0].GetExpr().ExprNode.(*plannercore.LogicalAggregation) + sel := old.GetExpr().ExprNode.(*logicalop.LogicalSelection) + agg := old.Children[0].GetExpr().ExprNode.(*logicalop.LogicalAggregation) aggSchema := old.Children[0].Prop.Schema var pushedExprs []expression.Expression var remainedExprs []expression.Expression @@ -639,7 +641,7 @@ func (*PushSelDownAggregation) OnTransform(old *memo.ExprIter) (newExprs []*memo } sctx := sel.SCtx() childGroup := old.Children[0].GetExpr().Children[0] - pushedSel := plannercore.LogicalSelection{Conditions: pushedExprs}.Init(sctx, sel.QueryBlockOffset()) + pushedSel := logicalop.LogicalSelection{Conditions: pushedExprs}.Init(sctx, sel.QueryBlockOffset()) pushedGroupExpr := memo.NewGroupExpr(pushedSel) pushedGroupExpr.SetChildren(childGroup) pushedGroup := memo.NewGroupWithSchema(pushedGroupExpr, childGroup.Prop.Schema) @@ -652,7 +654,7 @@ func (*PushSelDownAggregation) OnTransform(old *memo.ExprIter) (newExprs []*memo } aggGroup := memo.NewGroupWithSchema(aggGroupExpr, aggSchema) - remainedSel := plannercore.LogicalSelection{Conditions: remainedExprs}.Init(sctx, sel.QueryBlockOffset()) + remainedSel := logicalop.LogicalSelection{Conditions: remainedExprs}.Init(sctx, sel.QueryBlockOffset()) remainedGroupExpr := memo.NewGroupExpr(remainedSel) remainedGroupExpr.SetChildren(aggGroup) return []*memo.GroupExpr{remainedGroupExpr}, true, false, nil @@ -681,8 +683,8 @@ func NewRulePushSelDownWindow() Transformation { // 2. `sel -> window -> sel -> x` or // 3. just keep unchanged. func (*PushSelDownWindow) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - sel := old.GetExpr().ExprNode.(*plannercore.LogicalSelection) - window := old.Children[0].GetExpr().ExprNode.(*plannercore.LogicalWindow) + sel := old.GetExpr().ExprNode.(*logicalop.LogicalSelection) + window := old.Children[0].GetExpr().ExprNode.(*logicalop.LogicalWindow) windowSchema := old.Children[0].Prop.Schema childGroup := old.Children[0].GetExpr().Children[0] canBePushed := make([]expression.Expression, 0, len(sel.Conditions)) @@ -704,7 +706,7 @@ func (*PushSelDownWindow) OnTransform(old *memo.ExprIter) (newExprs []*memo.Grou } // construct return GroupExpr - newBottomSel := plannercore.LogicalSelection{Conditions: canBePushed}.Init(sel.SCtx(), sel.QueryBlockOffset()) + newBottomSel := logicalop.LogicalSelection{Conditions: canBePushed}.Init(sel.SCtx(), sel.QueryBlockOffset()) newBottomSelExpr := memo.NewGroupExpr(newBottomSel) newBottomSelExpr.SetChildren(childGroup) newBottomSelGroup := memo.NewGroupWithSchema(newBottomSelExpr, childGroup.Prop.Schema) @@ -715,7 +717,7 @@ func (*PushSelDownWindow) OnTransform(old *memo.ExprIter) (newExprs []*memo.Grou } newWindowGroup := memo.NewGroupWithSchema(newWindowExpr, windowSchema) - newTopSel := plannercore.LogicalSelection{Conditions: canNotBePushed}.Init(sel.SCtx(), sel.QueryBlockOffset()) + newTopSel := logicalop.LogicalSelection{Conditions: canNotBePushed}.Init(sel.SCtx(), sel.QueryBlockOffset()) newTopSelExpr := memo.NewGroupExpr(newTopSel) newTopSelExpr.SetChildren(newWindowGroup) return []*memo.GroupExpr{newTopSelExpr}, true, false, nil @@ -741,10 +743,10 @@ func NewRuleTransformLimitToTopN() Transformation { // OnTransform implements Transformation interface. // This rule will transform `Limit -> Sort -> x` to `TopN -> x`. func (*TransformLimitToTopN) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - limit := old.GetExpr().ExprNode.(*plannercore.LogicalLimit) - sort := old.Children[0].GetExpr().ExprNode.(*plannercore.LogicalSort) + limit := old.GetExpr().ExprNode.(*logicalop.LogicalLimit) + sort := old.Children[0].GetExpr().ExprNode.(*logicalop.LogicalSort) childGroup := old.Children[0].GetExpr().Children[0] - topN := plannercore.LogicalTopN{ + topN := logicalop.LogicalTopN{ ByItems: sort.ByItems, Offset: limit.Offset, Count: limit.Count, @@ -773,7 +775,7 @@ func NewRulePushLimitDownProjection() Transformation { // Match implements Transformation interface. func (*PushLimitDownProjection) Match(expr *memo.ExprIter) bool { - proj := expr.Children[0].GetExpr().ExprNode.(*plannercore.LogicalProjection) + proj := expr.Children[0].GetExpr().ExprNode.(*logicalop.LogicalProjection) for _, expr := range proj.Exprs { if expression.HasAssignSetVarFunc(expr) { return false @@ -785,8 +787,8 @@ func (*PushLimitDownProjection) Match(expr *memo.ExprIter) bool { // OnTransform implements Transformation interface. // This rule tries to pushes the Limit through Projection. func (*PushLimitDownProjection) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - limit := old.GetExpr().ExprNode.(*plannercore.LogicalLimit) - proj := old.Children[0].GetExpr().ExprNode.(*plannercore.LogicalProjection) + limit := old.GetExpr().ExprNode.(*logicalop.LogicalLimit) + proj := old.Children[0].GetExpr().ExprNode.(*logicalop.LogicalProjection) childGroup := old.Children[0].GetExpr().Children[0] projExpr := memo.NewGroupExpr(proj) @@ -823,11 +825,11 @@ func (r *PushLimitDownUnionAll) Match(expr *memo.ExprIter) bool { // OnTransform implements Transformation interface. // It will transform `Limit->UnionAll->X` to `Limit->UnionAll->Limit->X`. func (r *PushLimitDownUnionAll) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - limit := old.GetExpr().ExprNode.(*plannercore.LogicalLimit) - unionAll := old.Children[0].GetExpr().ExprNode.(*plannercore.LogicalUnionAll) + limit := old.GetExpr().ExprNode.(*logicalop.LogicalLimit) + unionAll := old.Children[0].GetExpr().ExprNode.(*logicalop.LogicalUnionAll) unionAllSchema := old.Children[0].Group.Prop.Schema - newLimit := plannercore.LogicalLimit{ + newLimit := logicalop.LogicalLimit{ Count: limit.Count + limit.Offset, }.Init(limit.SCtx(), limit.QueryBlockOffset()) @@ -853,7 +855,7 @@ type pushDownJoin struct { func (*pushDownJoin) predicatePushDown( sctx context.PlanContext, predicates []expression.Expression, - join *plannercore.LogicalJoin, + join *logicalop.LogicalJoin, leftSchema *expression.Schema, rightSchema *expression.Schema, ) ( @@ -865,7 +867,7 @@ func (*pushDownJoin) predicatePushDown( var equalCond []*expression.ScalarFunction var leftPushCond, rightPushCond, otherCond []expression.Expression switch join.JoinType { - case plannercore.SemiJoin, plannercore.InnerJoin: + case logicalop.SemiJoin, logicalop.InnerJoin: tempCond := make([]expression.Expression, 0, len(join.LeftConditions)+len(join.RightConditions)+len(join.EqualConditions)+len(join.OtherConditions)+len(predicates)) tempCond = append(tempCond, join.LeftConditions...) @@ -876,7 +878,7 @@ func (*pushDownJoin) predicatePushDown( tempCond = expression.ExtractFiltersFromDNFs(sctx.GetExprCtx(), tempCond) tempCond = expression.PropagateConstant(sctx.GetExprCtx(), tempCond) // Return table dual when filter is constant false or null. - dual := plannercore.Conds2TableDual(join, tempCond) + dual := logicalop.Conds2TableDual(join, tempCond) if dual != nil { return leftCond, rightCond, remainCond, dual } @@ -887,8 +889,8 @@ func (*pushDownJoin) predicatePushDown( join.OtherConditions = otherCond leftCond = leftPushCond rightCond = rightPushCond - case plannercore.LeftOuterJoin, plannercore.LeftOuterSemiJoin, plannercore.AntiLeftOuterSemiJoin, - plannercore.RightOuterJoin: + case logicalop.LeftOuterJoin, logicalop.LeftOuterSemiJoin, logicalop.AntiLeftOuterSemiJoin, + logicalop.RightOuterJoin: lenJoinConds := len(join.EqualConditions) + len(join.LeftConditions) + len(join.RightConditions) + len(join.OtherConditions) joinConds := make([]expression.Expression, 0, lenJoinConds) for _, equalCond := range join.EqualConditions { @@ -903,8 +905,8 @@ func (*pushDownJoin) predicatePushDown( join.OtherConditions = nil remainCond = make([]expression.Expression, len(predicates)) copy(remainCond, predicates) - nullSensitive := join.JoinType == plannercore.AntiLeftOuterSemiJoin || join.JoinType == plannercore.LeftOuterSemiJoin - if join.JoinType == plannercore.RightOuterJoin { + nullSensitive := join.JoinType == logicalop.AntiLeftOuterSemiJoin || join.JoinType == logicalop.LeftOuterSemiJoin + if join.JoinType == logicalop.RightOuterJoin { joinConds, remainCond = expression.PropConstOverOuterJoin(join.SCtx().GetExprCtx(), joinConds, remainCond, rightSchema, leftSchema, nullSensitive) } else { joinConds, remainCond = expression.PropConstOverOuterJoin(join.SCtx().GetExprCtx(), joinConds, remainCond, leftSchema, rightSchema, nullSensitive) @@ -912,17 +914,17 @@ func (*pushDownJoin) predicatePushDown( eq, left, right, other := join.ExtractOnCondition(joinConds, leftSchema, rightSchema, false, false) join.AppendJoinConds(eq, left, right, other) // Return table dual when filter is constant false or null. - dual := plannercore.Conds2TableDual(join, remainCond) + dual := logicalop.Conds2TableDual(join, remainCond) if dual != nil { return leftCond, rightCond, remainCond, dual } - if join.JoinType == plannercore.RightOuterJoin { + if join.JoinType == logicalop.RightOuterJoin { remainCond = expression.ExtractFiltersFromDNFs(join.SCtx().GetExprCtx(), remainCond) // Only derive right where condition, because left where condition cannot be pushed down equalCond, leftPushCond, rightPushCond, otherCond = join.ExtractOnCondition(remainCond, leftSchema, rightSchema, false, true) rightCond = rightPushCond // Handle join conditions, only derive left join condition, because right join condition cannot be pushed down - derivedLeftJoinCond, _ := plannercore.DeriveOtherConditions(join, leftSchema, rightSchema, true, false) + derivedLeftJoinCond, _ := logicalop.DeriveOtherConditions(join, leftSchema, rightSchema, true, false) leftCond = append(join.LeftConditions, derivedLeftJoinCond...) join.LeftConditions = nil remainCond = append(expression.ScalarFuncs2Exprs(equalCond), otherCond...) @@ -933,7 +935,7 @@ func (*pushDownJoin) predicatePushDown( equalCond, leftPushCond, rightPushCond, otherCond = join.ExtractOnCondition(remainCond, leftSchema, rightSchema, true, false) leftCond = leftPushCond // Handle join conditions, only derive right join condition, because left join condition cannot be pushed down - _, derivedRightJoinCond := plannercore.DeriveOtherConditions(join, leftSchema, rightSchema, false, true) + _, derivedRightJoinCond := logicalop.DeriveOtherConditions(join, leftSchema, rightSchema, false, true) rightCond = append(join.RightConditions, derivedRightJoinCond...) join.RightConditions = nil remainCond = append(expression.ScalarFuncs2Exprs(equalCond), otherCond...) @@ -980,7 +982,7 @@ func buildChildSelectionGroup( if len(conditions) == 0 { return childGroup } - newSel := plannercore.LogicalSelection{Conditions: conditions}.Init(sctx, qbOffset) + newSel := logicalop.LogicalSelection{Conditions: conditions}.Init(sctx, qbOffset) groupExpr := memo.NewGroupExpr(newSel) groupExpr.SetChildren(childGroup) newChild := memo.NewGroupWithSchema(groupExpr, childGroup.Prop.Schema) @@ -990,9 +992,9 @@ func buildChildSelectionGroup( // OnTransform implements Transformation interface. // This rule tries to pushes the Selection through Join. Besides, this rule fulfills the `XXXConditions` field of Join. func (r *PushSelDownJoin) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - sel := old.GetExpr().ExprNode.(*plannercore.LogicalSelection) + sel := old.GetExpr().ExprNode.(*logicalop.LogicalSelection) joinExpr := old.Children[0].GetExpr() - join := joinExpr.ExprNode.(*plannercore.LogicalJoin) + join := joinExpr.ExprNode.(*logicalop.LogicalJoin) newJoin := join.Shallow() sctx := sel.SCtx() leftGroup := old.Children[0].GetExpr().Children[0] @@ -1008,7 +1010,7 @@ func (r *PushSelDownJoin) OnTransform(old *memo.ExprIter) (newExprs []*memo.Grou newJoinExpr := memo.NewGroupExpr(newJoin) newJoinExpr.SetChildren(leftGroup, rightGroup) if len(remainCond) > 0 { - newSel := plannercore.LogicalSelection{Conditions: remainCond}.Init(sctx, sel.QueryBlockOffset()) + newSel := logicalop.LogicalSelection{Conditions: remainCond}.Init(sctx, sel.QueryBlockOffset()) newSel.Conditions = remainCond newSelExpr := memo.NewGroupExpr(newSel) newSelExpr.SetChildren(memo.NewGroupWithSchema(newJoinExpr, old.Children[0].Prop.Schema)) @@ -1037,7 +1039,7 @@ func (r *TransformJoinCondToSel) Match(expr *memo.ExprIter) bool { if expr.GetExpr().HasAppliedRule(r) { return false } - join := expr.GetExpr().ExprNode.(*plannercore.LogicalJoin) + join := expr.GetExpr().ExprNode.(*logicalop.LogicalJoin) return len(join.EqualConditions) > 0 || len(join.LeftConditions) > 0 || len(join.RightConditions) > 0 || len(join.OtherConditions) > 0 } @@ -1045,7 +1047,7 @@ func (r *TransformJoinCondToSel) Match(expr *memo.ExprIter) bool { // OnTransform implements Transformation interface. // This rule tries to transform Join conditions to Selection. Besides, this rule fulfills the `XXXConditions` field of Join. func (r *TransformJoinCondToSel) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - join := old.GetExpr().ExprNode.(*plannercore.LogicalJoin) + join := old.GetExpr().ExprNode.(*logicalop.LogicalJoin) newJoin := join.Shallow() sctx := join.SCtx() leftGroup := old.GetExpr().Children[0] @@ -1083,8 +1085,8 @@ func NewRulePushSelDownUnionAll() Transformation { // OnTransform implements Transformation interface. // It will transform `Selection->UnionAll->x` to `UnionAll->Selection->x`. func (*PushSelDownUnionAll) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - sel := old.GetExpr().ExprNode.(*plannercore.LogicalSelection) - unionAll := old.Children[0].GetExpr().ExprNode.(*plannercore.LogicalUnionAll) + sel := old.GetExpr().ExprNode.(*logicalop.LogicalSelection) + unionAll := old.Children[0].GetExpr().ExprNode.(*logicalop.LogicalUnionAll) childGroups := old.Children[0].GetExpr().Children newUnionAllExpr := memo.NewGroupExpr(unionAll) @@ -1162,9 +1164,9 @@ func NewRuleMergeAdjacentProjection() Transformation { // It will transform `proj->proj->x` to `proj->x` // or just keep the adjacent projections unchanged. func (*MergeAdjacentProjection) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - proj := old.GetExpr().ExprNode.(*plannercore.LogicalProjection) + proj := old.GetExpr().ExprNode.(*logicalop.LogicalProjection) childGroup := old.Children[0].Group - child := old.Children[0].GetExpr().ExprNode.(*plannercore.LogicalProjection) + child := old.Children[0].GetExpr().ExprNode.(*logicalop.LogicalProjection) if expression.ExprsHasSideEffects(child.Exprs) { return nil, false, false, nil } @@ -1176,11 +1178,11 @@ func (*MergeAdjacentProjection) OnTransform(old *memo.ExprIter) (newExprs []*mem } } - newProj := plannercore.LogicalProjection{Exprs: make([]expression.Expression, len(proj.Exprs))}.Init(proj.SCtx(), proj.QueryBlockOffset()) + newProj := logicalop.LogicalProjection{Exprs: make([]expression.Expression, len(proj.Exprs))}.Init(proj.SCtx(), proj.QueryBlockOffset()) newProj.SetSchema(old.GetExpr().Group.Prop.Schema) for i, expr := range proj.Exprs { newExpr := expr.Clone() - plannercore.ResolveExprAndReplace(newExpr, replace) + ruleutil.ResolveExprAndReplace(newExpr, replace) newProj.Exprs[i] = plannercore.ReplaceColumnOfExpr(newExpr, child, childGroup.Prop.Schema) } @@ -1212,16 +1214,16 @@ func (r *PushTopNDownOuterJoin) Match(expr *memo.ExprIter) bool { if expr.GetExpr().HasAppliedRule(r) { return false } - join := expr.Children[0].GetExpr().ExprNode.(*plannercore.LogicalJoin) + join := expr.Children[0].GetExpr().ExprNode.(*logicalop.LogicalJoin) switch join.JoinType { - case plannercore.LeftOuterJoin, plannercore.LeftOuterSemiJoin, plannercore.AntiLeftOuterSemiJoin, plannercore.RightOuterJoin: + case logicalop.LeftOuterJoin, logicalop.LeftOuterSemiJoin, logicalop.AntiLeftOuterSemiJoin, logicalop.RightOuterJoin: return true default: return false } } -func pushTopNDownOuterJoinToChild(topN *plannercore.LogicalTopN, outerGroup *memo.Group) *memo.Group { +func pushTopNDownOuterJoinToChild(topN *logicalop.LogicalTopN, outerGroup *memo.Group) *memo.Group { for _, by := range topN.ByItems { cols := expression.ExtractColumns(by.Expr) for _, col := range cols { @@ -1231,7 +1233,7 @@ func pushTopNDownOuterJoinToChild(topN *plannercore.LogicalTopN, outerGroup *mem } } - newTopN := plannercore.LogicalTopN{ + newTopN := logicalop.LogicalTopN{ Count: topN.Count + topN.Offset, ByItems: make([]*util.ByItems, len(topN.ByItems)), }.Init(topN.SCtx(), topN.QueryBlockOffset()) @@ -1248,17 +1250,17 @@ func pushTopNDownOuterJoinToChild(topN *plannercore.LogicalTopN, outerGroup *mem // OnTransform implements Transformation interface. // This rule will transform `TopN->OuterJoin->(OuterChild, InnerChild)` to `TopN->OuterJoin->(TopN->OuterChild, InnerChild)` func (r *PushTopNDownOuterJoin) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - topN := old.GetExpr().ExprNode.(*plannercore.LogicalTopN) + topN := old.GetExpr().ExprNode.(*logicalop.LogicalTopN) joinExpr := old.Children[0].GetExpr() - join := joinExpr.ExprNode.(*plannercore.LogicalJoin) + join := joinExpr.ExprNode.(*logicalop.LogicalJoin) joinSchema := old.Children[0].Group.Prop.Schema leftGroup := joinExpr.Children[0] rightGroup := joinExpr.Children[1] switch join.JoinType { - case plannercore.LeftOuterJoin, plannercore.LeftOuterSemiJoin, plannercore.AntiLeftOuterSemiJoin: + case logicalop.LeftOuterJoin, logicalop.LeftOuterSemiJoin, logicalop.AntiLeftOuterSemiJoin: leftGroup = pushTopNDownOuterJoinToChild(topN, leftGroup) - case plannercore.RightOuterJoin: + case logicalop.RightOuterJoin: rightGroup = pushTopNDownOuterJoinToChild(topN, rightGroup) default: return nil, false, false, nil @@ -1291,7 +1293,7 @@ func NewRulePushTopNDownProjection() Transformation { // Match implements Transformation interface. func (*PushTopNDownProjection) Match(expr *memo.ExprIter) bool { - proj := expr.Children[0].GetExpr().ExprNode.(*plannercore.LogicalProjection) + proj := expr.Children[0].GetExpr().ExprNode.(*logicalop.LogicalProjection) for _, expr := range proj.Exprs { if expression.HasAssignSetVarFunc(expr) { return false @@ -1303,12 +1305,12 @@ func (*PushTopNDownProjection) Match(expr *memo.ExprIter) bool { // OnTransform implements Transformation interface. // This rule tries to pushes the TopN through Projection. func (*PushTopNDownProjection) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - topN := old.GetExpr().ExprNode.(*plannercore.LogicalTopN) - proj := old.Children[0].GetExpr().ExprNode.(*plannercore.LogicalProjection) + topN := old.GetExpr().ExprNode.(*logicalop.LogicalTopN) + proj := old.Children[0].GetExpr().ExprNode.(*logicalop.LogicalProjection) childGroup := old.Children[0].GetExpr().Children[0] ctx := topN.SCtx() - newTopN := plannercore.LogicalTopN{ + newTopN := logicalop.LogicalTopN{ Offset: topN.Offset, Count: topN.Count, }.Init(ctx, topN.QueryBlockOffset()) @@ -1362,10 +1364,10 @@ func (r *PushTopNDownUnionAll) Match(expr *memo.ExprIter) bool { // OnTransform implements Transformation interface. // It will transform `TopN->UnionAll->X` to `TopN->UnionAll->TopN->X`. func (r *PushTopNDownUnionAll) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - topN := old.GetExpr().ExprNode.(*plannercore.LogicalTopN) - unionAll := old.Children[0].GetExpr().ExprNode.(*plannercore.LogicalUnionAll) + topN := old.GetExpr().ExprNode.(*logicalop.LogicalTopN) + unionAll := old.Children[0].GetExpr().ExprNode.(*logicalop.LogicalUnionAll) - newTopN := plannercore.LogicalTopN{ + newTopN := logicalop.LogicalTopN{ Count: topN.Count + topN.Offset, ByItems: topN.ByItems, }.Init(topN.SCtx(), topN.QueryBlockOffset()) @@ -1412,12 +1414,12 @@ func (r *PushTopNDownTiKVSingleGather) Match(expr *memo.ExprIter) bool { // OnTransform implements Transformation interface. // It transforms `TopN -> TiKVSingleGather` to `TopN(Final) -> TiKVSingleGather -> TopN(Partial)`. func (r *PushTopNDownTiKVSingleGather) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - topN := old.GetExpr().ExprNode.(*plannercore.LogicalTopN) + topN := old.GetExpr().ExprNode.(*logicalop.LogicalTopN) topNSchema := old.Children[0].Group.Prop.Schema gather := old.Children[0].GetExpr().ExprNode.(*plannercore.TiKVSingleGather) childGroup := old.Children[0].GetExpr().Children[0] - particalTopN := plannercore.LogicalTopN{ + particalTopN := logicalop.LogicalTopN{ ByItems: topN.ByItems, Count: topN.Count + topN.Offset, }.Init(topN.SCtx(), topN.QueryBlockOffset()) @@ -1454,8 +1456,8 @@ func NewRuleMergeAdjacentTopN() Transformation { // Match implements Transformation interface. func (*MergeAdjacentTopN) Match(expr *memo.ExprIter) bool { - topN := expr.GetExpr().ExprNode.(*plannercore.LogicalTopN) - child := expr.Children[0].GetExpr().ExprNode.(*plannercore.LogicalTopN) + topN := expr.GetExpr().ExprNode.(*logicalop.LogicalTopN) + child := expr.Children[0].GetExpr().ExprNode.(*logicalop.LogicalTopN) // We can use this rule when the sort columns of parent TopN is a prefix of child TopN. if len(child.ByItems) < len(topN.ByItems) { @@ -1472,12 +1474,12 @@ func (*MergeAdjacentTopN) Match(expr *memo.ExprIter) bool { // OnTransform implements Transformation interface. // This rule tries to merge adjacent TopN. func (*MergeAdjacentTopN) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - topN := old.GetExpr().ExprNode.(*plannercore.LogicalTopN) - child := old.Children[0].GetExpr().ExprNode.(*plannercore.LogicalTopN) + topN := old.GetExpr().ExprNode.(*logicalop.LogicalTopN) + child := old.Children[0].GetExpr().ExprNode.(*logicalop.LogicalTopN) childGroups := old.Children[0].GetExpr().Children if child.Count <= topN.Offset { - tableDual := plannercore.LogicalTableDual{RowCount: 0}.Init(child.SCtx(), child.QueryBlockOffset()) + tableDual := logicalop.LogicalTableDual{RowCount: 0}.Init(child.SCtx(), child.QueryBlockOffset()) tableDual.SetSchema(old.GetExpr().Schema()) tableDualExpr := memo.NewGroupExpr(tableDual) return []*memo.GroupExpr{tableDualExpr}, true, true, nil @@ -1485,7 +1487,7 @@ func (*MergeAdjacentTopN) OnTransform(old *memo.ExprIter) (newExprs []*memo.Grou offset := child.Offset + topN.Offset count := uint64(math.Min(float64(child.Count-topN.Offset), float64(topN.Count))) - newTopN := plannercore.LogicalTopN{ + newTopN := logicalop.LogicalTopN{ Count: count, Offset: offset, ByItems: child.ByItems, @@ -1516,15 +1518,15 @@ func NewRuleMergeAggregationProjection() Transformation { // Match implements Transformation interface. func (*MergeAggregationProjection) Match(old *memo.ExprIter) bool { - proj := old.Children[0].GetExpr().ExprNode.(*plannercore.LogicalProjection) + proj := old.Children[0].GetExpr().ExprNode.(*logicalop.LogicalProjection) return !expression.ExprsHasSideEffects(proj.Exprs) } // OnTransform implements Transformation interface. // It will transform `Aggregation->Projection->X` to `Aggregation->X`. func (*MergeAggregationProjection) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - oldAgg := old.GetExpr().ExprNode.(*plannercore.LogicalAggregation) - proj := old.Children[0].GetExpr().ExprNode.(*plannercore.LogicalProjection) + oldAgg := old.GetExpr().ExprNode.(*logicalop.LogicalAggregation) + proj := old.Children[0].GetExpr().ExprNode.(*logicalop.LogicalProjection) projSchema := old.Children[0].GetExpr().Schema() ctx := oldAgg.SCtx() @@ -1543,7 +1545,7 @@ func (*MergeAggregationProjection) OnTransform(old *memo.ExprIter) (newExprs []* aggFuncs[i].Args = newArgs } - newAgg := plannercore.LogicalAggregation{ + newAgg := logicalop.LogicalAggregation{ GroupByItems: groupByItems, AggFuncs: aggFuncs, }.Init(ctx, oldAgg.QueryBlockOffset()) @@ -1577,7 +1579,7 @@ func (r *EliminateSingleMaxMin) Match(expr *memo.ExprIter) bool { return false } - agg := expr.GetExpr().ExprNode.(*plannercore.LogicalAggregation) + agg := expr.GetExpr().ExprNode.(*logicalop.LogicalAggregation) // EliminateSingleMaxMin only works on the complete mode. if !agg.IsCompleteModeAgg() { return false @@ -1602,7 +1604,7 @@ func (r *EliminateSingleMaxMin) Match(expr *memo.ExprIter) bool { // OnTransform implements Transformation interface. // It will transform `max/min->X` to `max/min->top1->sel->X`. func (r *EliminateSingleMaxMin) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - agg := old.GetExpr().ExprNode.(*plannercore.LogicalAggregation) + agg := old.GetExpr().ExprNode.(*logicalop.LogicalAggregation) ectx := agg.SCtx().GetExprCtx().GetEvalCtx() childGroup := old.GetExpr().Children[0] ctx := agg.SCtx() @@ -1612,7 +1614,7 @@ func (r *EliminateSingleMaxMin) OnTransform(old *memo.ExprIter) (newExprs []*mem if len(expression.ExtractColumns(f.Args[0])) > 0 { // If it can be NULL, we need to filter NULL out first. if !mysql.HasNotNullFlag(f.Args[0].GetType(ectx).GetFlag()) { - sel := plannercore.LogicalSelection{}.Init(ctx, agg.QueryBlockOffset()) + sel := logicalop.LogicalSelection{}.Init(ctx, agg.QueryBlockOffset()) isNullFunc := expression.NewFunctionInternal(ctx.GetExprCtx(), ast.IsNull, types.NewFieldType(mysql.TypeTiny), f.Args[0]) notNullFunc := expression.NewFunctionInternal(ctx.GetExprCtx(), ast.UnaryNot, types.NewFieldType(mysql.TypeTiny), isNullFunc) sel.Conditions = []expression.Expression{notNullFunc} @@ -1630,7 +1632,7 @@ func (r *EliminateSingleMaxMin) OnTransform(old *memo.ExprIter) (newExprs []*mem Expr: f.Args[0], Desc: desc, }) - top1 := plannercore.LogicalTopN{ + top1 := logicalop.LogicalTopN{ ByItems: byItems, Count: 1, }.Init(ctx, agg.QueryBlockOffset()) @@ -1639,7 +1641,7 @@ func (r *EliminateSingleMaxMin) OnTransform(old *memo.ExprIter) (newExprs []*mem top1Group := memo.NewGroupWithSchema(top1Expr, childGroup.Prop.Schema) childGroup = top1Group } else { - li := plannercore.LogicalLimit{Count: 1}.Init(ctx, agg.QueryBlockOffset()) + li := logicalop.LogicalLimit{Count: 1}.Init(ctx, agg.QueryBlockOffset()) liExpr := memo.NewGroupExpr(li) liExpr.SetChildren(childGroup) liGroup := memo.NewGroupWithSchema(liExpr, childGroup.Prop.Schema) @@ -1675,14 +1677,14 @@ func NewRuleMergeAdjacentSelection() Transformation { // OnTransform implements Transformation interface. // This rule tries to merge adjacent selection, with no simplification. func (*MergeAdjacentSelection) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - sel := old.GetExpr().ExprNode.(*plannercore.LogicalSelection) - child := old.Children[0].GetExpr().ExprNode.(*plannercore.LogicalSelection) + sel := old.GetExpr().ExprNode.(*logicalop.LogicalSelection) + child := old.Children[0].GetExpr().ExprNode.(*logicalop.LogicalSelection) childGroups := old.Children[0].GetExpr().Children conditions := make([]expression.Expression, 0, len(sel.Conditions)+len(child.Conditions)) conditions = append(conditions, sel.Conditions...) conditions = append(conditions, child.Conditions...) - newSel := plannercore.LogicalSelection{Conditions: conditions}.Init(sel.SCtx(), sel.QueryBlockOffset()) + newSel := logicalop.LogicalSelection{Conditions: conditions}.Init(sel.SCtx(), sel.QueryBlockOffset()) newSelExpr := memo.NewGroupExpr(newSel) newSelExpr.SetChildren(childGroups...) return []*memo.GroupExpr{newSelExpr}, true, false, nil @@ -1708,12 +1710,12 @@ func NewRuleMergeAdjacentLimit() Transformation { // OnTransform implements Transformation interface. // This rule tries to merge adjacent limit. func (*MergeAdjacentLimit) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - limit := old.GetExpr().ExprNode.(*plannercore.LogicalLimit) - child := old.Children[0].GetExpr().ExprNode.(*plannercore.LogicalLimit) + limit := old.GetExpr().ExprNode.(*logicalop.LogicalLimit) + child := old.Children[0].GetExpr().ExprNode.(*logicalop.LogicalLimit) childGroups := old.Children[0].GetExpr().Children if child.Count <= limit.Offset { - tableDual := plannercore.LogicalTableDual{RowCount: 0}.Init(child.SCtx(), child.QueryBlockOffset()) + tableDual := logicalop.LogicalTableDual{RowCount: 0}.Init(child.SCtx(), child.QueryBlockOffset()) tableDual.SetSchema(old.GetExpr().Schema()) tableDualExpr := memo.NewGroupExpr(tableDual) return []*memo.GroupExpr{tableDualExpr}, true, true, nil @@ -1721,7 +1723,7 @@ func (*MergeAdjacentLimit) OnTransform(old *memo.ExprIter) (newExprs []*memo.Gro offset := child.Offset + limit.Offset count := uint64(math.Min(float64(child.Count-limit.Offset), float64(limit.Count))) - newLimit := plannercore.LogicalLimit{ + newLimit := logicalop.LogicalLimit{ Offset: offset, Count: count, }.Init(limit.SCtx(), limit.QueryBlockOffset()) @@ -1748,15 +1750,15 @@ func NewRuleTransformLimitToTableDual() Transformation { // Match implements Transformation interface. func (*TransformLimitToTableDual) Match(expr *memo.ExprIter) bool { - limit := expr.GetExpr().ExprNode.(*plannercore.LogicalLimit) + limit := expr.GetExpr().ExprNode.(*logicalop.LogicalLimit) return 0 == limit.Count } // OnTransform implements Transformation interface. // This rule tries to convert limit to tableDual. func (*TransformLimitToTableDual) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - limit := old.GetExpr().ExprNode.(*plannercore.LogicalLimit) - tableDual := plannercore.LogicalTableDual{RowCount: 0}.Init(limit.SCtx(), limit.QueryBlockOffset()) + limit := old.GetExpr().ExprNode.(*logicalop.LogicalLimit) + tableDual := logicalop.LogicalTableDual{RowCount: 0}.Init(limit.SCtx(), limit.QueryBlockOffset()) tableDual.SetSchema(old.GetExpr().Schema()) tableDualExpr := memo.NewGroupExpr(tableDual) return []*memo.GroupExpr{tableDualExpr}, true, true, nil @@ -1784,23 +1786,23 @@ func (r *PushLimitDownOuterJoin) Match(expr *memo.ExprIter) bool { if expr.GetExpr().HasAppliedRule(r) { return false } - join := expr.Children[0].GetExpr().ExprNode.(*plannercore.LogicalJoin) + join := expr.Children[0].GetExpr().ExprNode.(*logicalop.LogicalJoin) return join.JoinType.IsOuterJoin() } // OnTransform implements Transformation interface. // This rule tries to pushes the Limit through outer Join. func (r *PushLimitDownOuterJoin) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - limit := old.GetExpr().ExprNode.(*plannercore.LogicalLimit) - join := old.Children[0].GetExpr().ExprNode.(*plannercore.LogicalJoin) + limit := old.GetExpr().ExprNode.(*logicalop.LogicalLimit) + join := old.Children[0].GetExpr().ExprNode.(*logicalop.LogicalJoin) joinSchema := old.Children[0].Group.Prop.Schema leftGroup := old.Children[0].GetExpr().Children[0] rightGroup := old.Children[0].GetExpr().Children[1] switch join.JoinType { - case plannercore.LeftOuterJoin, plannercore.LeftOuterSemiJoin, plannercore.AntiLeftOuterSemiJoin: + case logicalop.LeftOuterJoin, logicalop.LeftOuterSemiJoin, logicalop.AntiLeftOuterSemiJoin: leftGroup = r.pushLimitDownOuterJoinToChild(limit, leftGroup) - case plannercore.RightOuterJoin: + case logicalop.RightOuterJoin: rightGroup = r.pushLimitDownOuterJoinToChild(limit, rightGroup) default: return nil, false, false, nil @@ -1814,8 +1816,8 @@ func (r *PushLimitDownOuterJoin) OnTransform(old *memo.ExprIter) (newExprs []*me return []*memo.GroupExpr{newLimitExpr}, true, false, nil } -func (*PushLimitDownOuterJoin) pushLimitDownOuterJoinToChild(limit *plannercore.LogicalLimit, outerGroup *memo.Group) *memo.Group { - newLimit := plannercore.LogicalLimit{ +func (*PushLimitDownOuterJoin) pushLimitDownOuterJoinToChild(limit *logicalop.LogicalLimit, outerGroup *memo.Group) *memo.Group { + newLimit := logicalop.LogicalLimit{ Count: limit.Count + limit.Offset, }.Init(limit.SCtx(), limit.QueryBlockOffset()) newLimitGroup := memo.NewGroupExpr(newLimit) @@ -1849,12 +1851,12 @@ func (r *PushLimitDownTiKVSingleGather) Match(expr *memo.ExprIter) bool { // OnTransform implements Transformation interface. // It transforms `Limit -> TiKVSingleGather` to `Limit(Final) -> TiKVSingleGather -> Limit(Partial)`. func (r *PushLimitDownTiKVSingleGather) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - limit := old.GetExpr().ExprNode.(*plannercore.LogicalLimit) + limit := old.GetExpr().ExprNode.(*logicalop.LogicalLimit) limitSchema := old.Children[0].Group.Prop.Schema gather := old.Children[0].GetExpr().ExprNode.(*plannercore.TiKVSingleGather) childGroup := old.Children[0].GetExpr().Children[0] - particalLimit := plannercore.LogicalLimit{ + particalLimit := logicalop.LogicalLimit{ Count: limit.Count + limit.Offset, }.Init(limit.SCtx(), limit.QueryBlockOffset()) partialLimitExpr := memo.NewGroupExpr(particalLimit) @@ -1875,12 +1877,12 @@ type outerJoinEliminator struct { } func (*outerJoinEliminator) prepareForEliminateOuterJoin(joinExpr *memo.GroupExpr) (ok bool, innerChildIdx int, outerGroup *memo.Group, innerGroup *memo.Group, outerUniqueIDs set.Int64Set) { - join := joinExpr.ExprNode.(*plannercore.LogicalJoin) + join := joinExpr.ExprNode.(*logicalop.LogicalJoin) switch join.JoinType { - case plannercore.LeftOuterJoin: + case logicalop.LeftOuterJoin: innerChildIdx = 1 - case plannercore.RightOuterJoin: + case logicalop.RightOuterJoin: innerChildIdx = 0 default: ok = false @@ -1937,16 +1939,16 @@ func NewRuleEliminateOuterJoinBelowAggregation() Transformation { // Match implements Transformation interface. func (*EliminateOuterJoinBelowAggregation) Match(expr *memo.ExprIter) bool { - joinType := expr.Children[0].GetExpr().ExprNode.(*plannercore.LogicalJoin).JoinType - return joinType == plannercore.LeftOuterJoin || joinType == plannercore.RightOuterJoin + joinType := expr.Children[0].GetExpr().ExprNode.(*logicalop.LogicalJoin).JoinType + return joinType == logicalop.LeftOuterJoin || joinType == logicalop.RightOuterJoin } // OnTransform implements Transformation interface. // This rule tries to eliminate outer join which below aggregation. func (r *EliminateOuterJoinBelowAggregation) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - agg := old.GetExpr().ExprNode.(*plannercore.LogicalAggregation) + agg := old.GetExpr().ExprNode.(*logicalop.LogicalAggregation) joinExpr := old.Children[0].GetExpr() - join := joinExpr.ExprNode.(*plannercore.LogicalJoin) + join := joinExpr.ExprNode.(*logicalop.LogicalJoin) ok, innerChildIdx, outerGroup, innerGroup, outerUniqueIDs := r.prepareForEliminateOuterJoin(joinExpr) if !ok { @@ -1999,16 +2001,16 @@ func NewRuleEliminateOuterJoinBelowProjection() Transformation { // Match implements Transformation interface. func (*EliminateOuterJoinBelowProjection) Match(expr *memo.ExprIter) bool { - joinType := expr.Children[0].GetExpr().ExprNode.(*plannercore.LogicalJoin).JoinType - return joinType == plannercore.LeftOuterJoin || joinType == plannercore.RightOuterJoin + joinType := expr.Children[0].GetExpr().ExprNode.(*logicalop.LogicalJoin).JoinType + return joinType == logicalop.LeftOuterJoin || joinType == logicalop.RightOuterJoin } // OnTransform implements Transformation interface. // This rule tries to eliminate outer join which below projection. func (r *EliminateOuterJoinBelowProjection) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - proj := old.GetExpr().ExprNode.(*plannercore.LogicalProjection) + proj := old.GetExpr().ExprNode.(*logicalop.LogicalProjection) joinExpr := old.Children[0].GetExpr() - join := joinExpr.ExprNode.(*plannercore.LogicalJoin) + join := joinExpr.ExprNode.(*logicalop.LogicalJoin) ok, innerChildIdx, outerGroup, innerGroup, outerUniqueIDs := r.prepareForEliminateOuterJoin(joinExpr) if !ok { @@ -2052,26 +2054,26 @@ func NewRuleTransformAggregateCaseToSelection() Transformation { // Match implements Transformation interface. func (r *TransformAggregateCaseToSelection) Match(expr *memo.ExprIter) bool { - agg := expr.GetExpr().ExprNode.(*plannercore.LogicalAggregation) + agg := expr.GetExpr().ExprNode.(*logicalop.LogicalAggregation) return agg.IsCompleteModeAgg() && len(agg.GroupByItems) == 0 && len(agg.AggFuncs) == 1 && len(agg.AggFuncs[0].Args) == 1 && r.isTwoOrThreeArgCase(agg.AggFuncs[0].Args[0]) } // OnTransform implements Transformation interface. // This rule tries to convert Agg(case when) to Agg->Selection. func (r *TransformAggregateCaseToSelection) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - agg := old.GetExpr().ExprNode.(*plannercore.LogicalAggregation) + agg := old.GetExpr().ExprNode.(*logicalop.LogicalAggregation) ok, newConditions, newAggFuncs := r.transform(agg) if !ok { return nil, false, false, nil } - newSel := plannercore.LogicalSelection{Conditions: newConditions}.Init(agg.SCtx(), agg.QueryBlockOffset()) + newSel := logicalop.LogicalSelection{Conditions: newConditions}.Init(agg.SCtx(), agg.QueryBlockOffset()) newSelExpr := memo.NewGroupExpr(newSel) newSelExpr.SetChildren(old.GetExpr().Children...) newSelGroup := memo.NewGroupWithSchema(newSelExpr, old.GetExpr().Children[0].Prop.Schema) - newAgg := plannercore.LogicalAggregation{ + newAgg := logicalop.LogicalAggregation{ AggFuncs: newAggFuncs, GroupByItems: agg.GroupByItems, }.Init(agg.SCtx(), agg.QueryBlockOffset()) @@ -2081,7 +2083,7 @@ func (r *TransformAggregateCaseToSelection) OnTransform(old *memo.ExprIter) (new return []*memo.GroupExpr{newAggExpr}, true, false, nil } -func (r *TransformAggregateCaseToSelection) transform(agg *plannercore.LogicalAggregation) (ok bool, newConditions []expression.Expression, newAggFuncs []*aggregation.AggFuncDesc) { +func (r *TransformAggregateCaseToSelection) transform(agg *logicalop.LogicalAggregation) (ok bool, newConditions []expression.Expression, newAggFuncs []*aggregation.AggFuncDesc) { aggFuncDesc := agg.AggFuncs[0] aggFuncName := aggFuncDesc.Name ctx := agg.SCtx() @@ -2172,7 +2174,7 @@ func NewRuleTransformAggToProj() Transformation { // Match implements Transformation interface. func (*TransformAggToProj) Match(expr *memo.ExprIter) bool { - agg := expr.GetExpr().ExprNode.(*plannercore.LogicalAggregation) + agg := expr.GetExpr().ExprNode.(*logicalop.LogicalAggregation) if !agg.IsCompleteModeAgg() { return false @@ -2201,7 +2203,7 @@ func (*TransformAggToProj) Match(expr *memo.ExprIter) bool { // OnTransform implements Transformation interface. // This rule tries to convert agg to proj. func (*TransformAggToProj) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - agg := old.GetExpr().ExprNode.(*plannercore.LogicalAggregation) + agg := old.GetExpr().ExprNode.(*logicalop.LogicalAggregation) if ok, proj := plannercore.ConvertAggToProj(agg, old.GetExpr().Schema()); ok { newProjExpr := memo.NewGroupExpr(proj) newProjExpr.SetChildren(old.GetExpr().Children...) @@ -2235,7 +2237,7 @@ func NewRuleInjectProjectionBelowTopN() Transformation { // Match implements Transformation interface. func (*InjectProjectionBelowTopN) Match(expr *memo.ExprIter) bool { - topN := expr.GetExpr().ExprNode.(*plannercore.LogicalTopN) + topN := expr.GetExpr().ExprNode.(*logicalop.LogicalTopN) for _, item := range topN.ByItems { if _, ok := item.Expr.(*expression.ScalarFunction); ok { return true @@ -2247,7 +2249,7 @@ func (*InjectProjectionBelowTopN) Match(expr *memo.ExprIter) bool { // OnTransform implements Transformation interface. // It will convert `TopN -> X` to `Projection -> TopN -> Projection -> X`. func (*InjectProjectionBelowTopN) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - topN := old.GetExpr().ExprNode.(*plannercore.LogicalTopN) + topN := old.GetExpr().ExprNode.(*logicalop.LogicalTopN) ectx := topN.SCtx().GetExprCtx().GetEvalCtx() oldTopNSchema := old.GetExpr().Schema() @@ -2256,7 +2258,7 @@ func (*InjectProjectionBelowTopN) OnTransform(old *memo.ExprIter) (newExprs []*m for i := range oldTopNSchema.Columns { topProjExprs[i] = oldTopNSchema.Columns[i] } - topProj := plannercore.LogicalProjection{ + topProj := logicalop.LogicalProjection{ Exprs: topProjExprs, }.Init(topN.SCtx(), topN.QueryBlockOffset()) topProj.SetSchema(oldTopNSchema) @@ -2283,13 +2285,13 @@ func (*InjectProjectionBelowTopN) OnTransform(old *memo.ExprIter) (newExprs []*m bottomProjSchema = append(bottomProjSchema, newCol) newByItems = append(newByItems, &util.ByItems{Expr: newCol, Desc: item.Desc}) } - bottomProj := plannercore.LogicalProjection{ + bottomProj := logicalop.LogicalProjection{ Exprs: bottomProjExprs, }.Init(topN.SCtx(), topN.QueryBlockOffset()) newSchema := expression.NewSchema(bottomProjSchema...) bottomProj.SetSchema(newSchema) - newTopN := plannercore.LogicalTopN{ + newTopN := logicalop.LogicalTopN{ ByItems: newByItems, Offset: topN.Offset, Count: topN.Count, @@ -2331,14 +2333,14 @@ func NewRuleInjectProjectionBelowAgg() Transformation { // Match implements Transformation interface. func (*InjectProjectionBelowAgg) Match(expr *memo.ExprIter) bool { - agg := expr.GetExpr().ExprNode.(*plannercore.LogicalAggregation) + agg := expr.GetExpr().ExprNode.(*logicalop.LogicalAggregation) return agg.IsCompleteModeAgg() } // OnTransform implements Transformation interface. // It will convert `Agg -> X` to `Agg -> Proj -> X`. func (*InjectProjectionBelowAgg) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - agg := old.GetExpr().ExprNode.(*plannercore.LogicalAggregation) + agg := old.GetExpr().ExprNode.(*logicalop.LogicalAggregation) ectx := agg.SCtx().GetExprCtx().GetEvalCtx() hasScalarFunc := false @@ -2406,7 +2408,7 @@ func (*InjectProjectionBelowAgg) OnTransform(old *memo.ExprIter) (newExprs []*me } // Construct GroupExpr, Group (Agg -> Proj -> Child). - proj := plannercore.LogicalProjection{ + proj := logicalop.LogicalProjection{ Exprs: projExprs, }.Init(agg.SCtx(), agg.QueryBlockOffset()) projSchema := expression.NewSchema(projSchemaCols...) @@ -2415,7 +2417,7 @@ func (*InjectProjectionBelowAgg) OnTransform(old *memo.ExprIter) (newExprs []*me projExpr.SetChildren(old.GetExpr().Children[0]) projGroup := memo.NewGroupWithSchema(projExpr, projSchema) - newAgg := plannercore.LogicalAggregation{ + newAgg := logicalop.LogicalAggregation{ AggFuncs: copyFuncs, GroupByItems: newGroupByItems, }.Init(agg.SCtx(), agg.QueryBlockOffset()) @@ -2442,7 +2444,7 @@ func NewRuleTransformApplyToJoin() Transformation { // OnTransform implements Transformation interface. func (r *TransformApplyToJoin) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - apply := old.GetExpr().ExprNode.(*plannercore.LogicalApply) + apply := old.GetExpr().ExprNode.(*logicalop.LogicalApply) groupExpr := old.GetExpr() // It's safe to use the old apply instead of creating a new LogicalApply here, // Because apply.CorCols will only be used and updated by this rule during Transformation. @@ -2500,15 +2502,15 @@ func NewRulePullSelectionUpApply() Transformation { // This rule tries to pull up the inner side Selection, and add these conditions // to Join condition inside the Apply. func (*PullSelectionUpApply) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - apply := old.GetExpr().ExprNode.(*plannercore.LogicalApply) + apply := old.GetExpr().ExprNode.(*logicalop.LogicalApply) outerChildGroup := old.Children[0].Group innerChildGroup := old.Children[1].Group - sel := old.Children[1].GetExpr().ExprNode.(*plannercore.LogicalSelection) + sel := old.Children[1].GetExpr().ExprNode.(*logicalop.LogicalSelection) newConds := make([]expression.Expression, 0, len(sel.Conditions)) for _, cond := range sel.Conditions { newConds = append(newConds, cond.Clone().Decorrelate(outerChildGroup.Prop.Schema)) } - newApply := plannercore.LogicalApply{ + newApply := logicalop.LogicalApply{ LogicalJoin: *(apply.LogicalJoin.Shallow()), CorCols: apply.CorCols, }.Init(apply.SCtx(), apply.QueryBlockOffset()) @@ -2540,9 +2542,9 @@ func NewRuleMergeAdjacentWindow() Transformation { // Match implements Transformation interface. func (*MergeAdjacentWindow) Match(expr *memo.ExprIter) bool { - curWinPlan := expr.GetExpr().ExprNode.(*plannercore.LogicalWindow) + curWinPlan := expr.GetExpr().ExprNode.(*logicalop.LogicalWindow) nextGroupExpr := expr.Children[0].GetExpr() - nextWinPlan := nextGroupExpr.ExprNode.(*plannercore.LogicalWindow) + nextWinPlan := nextGroupExpr.ExprNode.(*logicalop.LogicalWindow) nextGroupChildren := nextGroupExpr.Children ctx := expr.GetExpr().ExprNode.SCtx() @@ -2580,14 +2582,14 @@ func (*MergeAdjacentWindow) Match(expr *memo.ExprIter) bool { // OnTransform implements Transformation interface. // This rule will transform `window -> window -> x` to `window -> x` func (*MergeAdjacentWindow) OnTransform(old *memo.ExprIter) (newExprs []*memo.GroupExpr, eraseOld bool, eraseAll bool, err error) { - curWinPlan := old.GetExpr().ExprNode.(*plannercore.LogicalWindow) - nextWinPlan := old.Children[0].GetExpr().ExprNode.(*plannercore.LogicalWindow) + curWinPlan := old.GetExpr().ExprNode.(*logicalop.LogicalWindow) + nextWinPlan := old.Children[0].GetExpr().ExprNode.(*logicalop.LogicalWindow) ctx := old.GetExpr().ExprNode.SCtx() newWindowFuncs := make([]*aggregation.WindowFuncDesc, 0, len(curWinPlan.WindowFuncDescs)+len(nextWinPlan.WindowFuncDescs)) newWindowFuncs = append(newWindowFuncs, curWinPlan.WindowFuncDescs...) newWindowFuncs = append(newWindowFuncs, nextWinPlan.WindowFuncDescs...) - newWindowPlan := plannercore.LogicalWindow{ + newWindowPlan := logicalop.LogicalWindow{ WindowFuncDescs: newWindowFuncs, PartitionBy: curWinPlan.PartitionBy, OrderBy: curWinPlan.OrderBy, diff --git a/pkg/planner/core/BUILD.bazel b/pkg/planner/core/BUILD.bazel index 3447fe09bf362..c429b032d5002 100644 --- a/pkg/planner/core/BUILD.bazel +++ b/pkg/planner/core/BUILD.bazel @@ -18,37 +18,19 @@ go_library( "fragment.go", "hashcode.go", "hint_utils.go", + "index_join_path.go", "indexmerge_path.go", "indexmerge_unfinished_path.go", "initialize.go", - "logical_aggregation.go", - "logical_apply.go", "logical_cte.go", - "logical_cte_table.go", "logical_datasource.go", - "logical_expand.go", "logical_index_scan.go", "logical_initialize.go", - "logical_join.go", - "logical_limit.go", - "logical_lock.go", - "logical_mem_table.go", - "logical_partition_union_all.go", "logical_plan_builder.go", "logical_plans.go", - "logical_projection.go", - "logical_selection.go", - "logical_sequence.go", - "logical_show.go", - "logical_show_ddl_jobs.go", - "logical_sort.go", - "logical_table_dual.go", "logical_table_scan.go", "logical_tikv_single_gather.go", - "logical_top_n.go", - "logical_union_all.go", - "logical_union_scan.go", - "logical_window.go", + "memtable_infoschema_extractor.go", "memtable_predicate_extractor.go", "mock.go", "optimizer.go", @@ -78,10 +60,8 @@ go_library( "rule_aggregation_elimination.go", "rule_aggregation_push_down.go", "rule_aggregation_skew_rewrite.go", - "rule_build_key_info.go", "rule_collect_plan_stats.go", "rule_column_pruning.go", - "rule_constant_propagation.go", "rule_decorrelate.go", "rule_derive_topn_from_window.go", "rule_eliminate_projection.go", @@ -146,10 +126,14 @@ go_library( "//pkg/planner/cardinality", "//pkg/planner/context", "//pkg/planner/core/base", + "//pkg/planner/core/constraint", "//pkg/planner/core/cost", "//pkg/planner/core/metrics", "//pkg/planner/core/operator/baseimpl", "//pkg/planner/core/operator/logicalop", + "//pkg/planner/core/operator/physicalop", + "//pkg/planner/core/rule", + "//pkg/planner/core/rule/util", "//pkg/planner/funcdep", "//pkg/planner/property", "//pkg/planner/util", @@ -169,6 +153,7 @@ go_library( "//pkg/sessiontxn/staleread", "//pkg/statistics", "//pkg/statistics/asyncload", + "//pkg/statistics/handle/util", "//pkg/table", "//pkg/table/tables", "//pkg/table/temptable", @@ -247,7 +232,6 @@ go_test( "logical_plan_trace_test.go", "logical_plans_test.go", "main_test.go", - "memtable_predicate_extractor_test.go", "optimizer_test.go", "partition_pruning_test.go", "physical_plan_test.go", @@ -286,6 +270,8 @@ go_test( "//pkg/domain", "//pkg/expression", "//pkg/expression/aggregation", + "//pkg/expression/context", + "//pkg/expression/contextstatic", "//pkg/infoschema", "//pkg/kv", "//pkg/metrics", @@ -300,13 +286,13 @@ go_test( "//pkg/planner", "//pkg/planner/core/base", "//pkg/planner/core/operator/logicalop", + "//pkg/planner/core/operator/physicalop", "//pkg/planner/property", "//pkg/planner/util", "//pkg/planner/util/coretestsdk", "//pkg/planner/util/costusage", "//pkg/planner/util/optimizetrace", "//pkg/session", - "//pkg/session/types", "//pkg/sessionctx", "//pkg/sessionctx/variable", "//pkg/sessiontxn", @@ -333,7 +319,6 @@ go_test( "//pkg/util/mock", "//pkg/util/plancodec", "//pkg/util/ranger", - "//pkg/util/set", "//pkg/util/stmtsummary", "//pkg/util/tracing", "@com_github_golang_snappy//:snappy", diff --git a/pkg/planner/core/access_object.go b/pkg/planner/core/access_object.go index 9afb5e0c05596..2be6b44fb1663 100644 --- a/pkg/planner/core/access_object.go +++ b/pkg/planner/core/access_object.go @@ -15,6 +15,7 @@ package core import ( + "context" "fmt" "sort" "strconv" @@ -380,7 +381,7 @@ func getDynamicAccessPartition(sctx base.PlanContext, tblInfo *model.TableInfo, if ok { res.Database = db.Name.O } - tmp, ok := is.TableByID(tblInfo.ID) + tmp, ok := is.TableByID(context.Background(), tblInfo.ID) if !ok { res.err = "partition table not found:" + strconv.FormatInt(tblInfo.ID, 10) return res diff --git a/pkg/planner/core/base/BUILD.bazel b/pkg/planner/core/base/BUILD.bazel index 27fbeb99b650b..0e62b3f62f896 100644 --- a/pkg/planner/core/base/BUILD.bazel +++ b/pkg/planner/core/base/BUILD.bazel @@ -6,6 +6,7 @@ go_library( "doc.go", "misc_base.go", "plan_base.go", + "rule_base.go", "task_base.go", ], importpath = "github.com/pingcap/tidb/pkg/planner/core/base", diff --git a/pkg/planner/core/base/rule_base.go b/pkg/planner/core/base/rule_base.go new file mode 100644 index 0000000000000..ccaf143df64a0 --- /dev/null +++ b/pkg/planner/core/base/rule_base.go @@ -0,0 +1,33 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package base + +import ( + "context" + + "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" +) + +// LogicalOptRule means a logical optimizing rule, which contains de-correlate, ppd, column pruning, etc. +type LogicalOptRule interface { + // Optimize return parameters: + // 1. base.LogicalPlan: The optimized base.LogicalPlan after rule is applied + // 2. bool: Used to judge whether the plan is changed or not by logical rule. + // If the plan is changed, it will return true. + // The default value is false. It means that no interaction rule will be triggered. + // 3. error: If there is error during the rule optimizer, it will be thrown + Optimize(context.Context, LogicalPlan, *optimizetrace.LogicalOptimizeOp) (LogicalPlan, bool, error) + Name() string +} diff --git a/pkg/planner/core/casetest/BUILD.bazel b/pkg/planner/core/casetest/BUILD.bazel index e005981526031..839db4514a465 100644 --- a/pkg/planner/core/casetest/BUILD.bazel +++ b/pkg/planner/core/casetest/BUILD.bazel @@ -20,6 +20,7 @@ go_test( "//pkg/parser/model", "//pkg/planner/core", "//pkg/planner/core/base", + "//pkg/planner/core/operator/logicalop", "//pkg/planner/property", "//pkg/planner/util/coretestsdk", "//pkg/testkit", diff --git a/pkg/planner/core/casetest/cbotest/testdata/analyze_suite_out.json b/pkg/planner/core/casetest/cbotest/testdata/analyze_suite_out.json index 2d4ce04bd6001..41838a6310fd7 100644 --- a/pkg/planner/core/casetest/cbotest/testdata/analyze_suite_out.json +++ b/pkg/planner/core/casetest/cbotest/testdata/analyze_suite_out.json @@ -17,7 +17,7 @@ { "SQL": "explain format = 'hint' select * from t1, t2 where t1.a = t2.a", "Plan": [ - "hash_join(@`sel_1` `test`.`t1`), use_index(@`sel_1` `test`.`t1` ), use_index(@`sel_1` `test`.`t2` )" + "hash_join_build(`test`.`t2`), use_index(@`sel_1` `test`.`t1` ), use_index(@`sel_1` `test`.`t2` )" ] } ] @@ -364,13 +364,13 @@ "└─TableRowIDScan(Probe) 2.00 cop[tikv] table:t keep order:false" ], [ - "TableReader 0.00 root data:Selection", - "└─Selection 0.00 cop[tikv] eq(test.t.b, 1)", + "TableReader 1.00 root data:Selection", + "└─Selection 1.00 cop[tikv] eq(test.t.b, 1)", " └─TableFullScan 2.00 cop[tikv] table:t keep order:false" ], [ - "TableReader 0.00 root data:Selection", - "└─Selection 0.00 cop[tikv] lt(test.t.b, 1)", + "TableReader 1.00 root data:Selection", + "└─Selection 1.00 cop[tikv] lt(test.t.b, 1)", " └─TableFullScan 2.00 cop[tikv] table:t keep order:false" ] ] diff --git a/pkg/planner/core/casetest/dag/testdata/plan_suite_out.json b/pkg/planner/core/casetest/dag/testdata/plan_suite_out.json index 278421ac53b1a..3367856dff755 100644 --- a/pkg/planner/core/casetest/dag/testdata/plan_suite_out.json +++ b/pkg/planner/core/casetest/dag/testdata/plan_suite_out.json @@ -432,22 +432,22 @@ { "SQL": "delete /*+ TIDB_INLJ(t1, t2) */ t1 from t t1, t t2 where t1.c=t2.c", "Best": "IndexJoin{TableReader(Table(t))->IndexLookUp(Index(t.c_d_e)[[NULL,NULL]], Table(t))}(test.t.c,test.t.c)->Delete", - "Hints": "inl_join(@`del_1` `test`.`t2`), use_index(@`del_1` `test`.`t1` ), no_order_index(@`del_1` `test`.`t1` `primary`), use_index(@`del_1` `test`.`t2` `c_d_e`), no_order_index(@`del_1` `test`.`t2` `c_d_e`)" + "Hints": "inl_join(`test`.`t2`), use_index(@`del_1` `test`.`t1` ), no_order_index(@`del_1` `test`.`t1` `primary`), use_index(@`del_1` `test`.`t2` `c_d_e`), no_order_index(@`del_1` `test`.`t2` `c_d_e`)" }, { "SQL": "delete /*+ TIDB_SMJ(t1, t2) */ from t1 using t t1, t t2 where t1.c=t2.c", "Best": "MergeInnerJoin{IndexLookUp(Index(t.c_d_e)[[NULL,+inf]], Table(t))->IndexLookUp(Index(t.c_d_e)[[NULL,+inf]], Table(t))}(test.t.c,test.t.c)->Delete", - "Hints": "merge_join(@`del_1` `test`.`t1`), use_index(@`del_1` `test`.`t1` `c_d_e`), order_index(@`del_1` `test`.`t1` `c_d_e`), use_index(@`del_1` `test`.`t2` `c_d_e`), order_index(@`del_1` `test`.`t2` `c_d_e`)" + "Hints": "merge_join(`test`.`t1`), use_index(@`del_1` `test`.`t1` `c_d_e`), order_index(@`del_1` `test`.`t1` `c_d_e`), use_index(@`del_1` `test`.`t2` `c_d_e`), order_index(@`del_1` `test`.`t2` `c_d_e`)" }, { "SQL": "update /*+ TIDB_SMJ(t1, t2) */ t t1, t t2 set t1.c=1, t2.c=1 where t1.a=t2.a", "Best": "MergeInnerJoin{TableReader(Table(t))->TableReader(Table(t))}(test.t.a,test.t.a)->Update", - "Hints": "merge_join(@`upd_1` `test`.`t1`), use_index(@`upd_1` `test`.`t1` ), order_index(@`upd_1` `test`.`t1` `primary`), use_index(@`upd_1` `test`.`t2` ), order_index(@`upd_1` `test`.`t2` `primary`)" + "Hints": "merge_join(`test`.`t1`), use_index(@`upd_1` `test`.`t1` ), order_index(@`upd_1` `test`.`t1` `primary`), use_index(@`upd_1` `test`.`t2` ), order_index(@`upd_1` `test`.`t2` `primary`)" }, { "SQL": "update /*+ TIDB_HJ(t1, t2) */ t t1, t t2 set t1.c=1, t2.c=1 where t1.a=t2.a", "Best": "LeftHashJoin{TableReader(Table(t))->TableReader(Table(t))}(test.t.a,test.t.a)->Update", - "Hints": "hash_join(@`upd_1` `test`.`t1`), use_index(@`upd_1` `test`.`t1` ), no_order_index(@`upd_1` `test`.`t1` `primary`), use_index(@`upd_1` `test`.`t2` ), no_order_index(@`upd_1` `test`.`t2` `primary`)" + "Hints": "hash_join_build(`test`.`t2`), use_index(@`upd_1` `test`.`t1` ), no_order_index(@`upd_1` `test`.`t1` `primary`), use_index(@`upd_1` `test`.`t2` ), no_order_index(@`upd_1` `test`.`t2` `primary`)" }, { "SQL": "delete from t where b < 1 order by d limit 1", diff --git a/pkg/planner/core/casetest/enforcempp/testdata/enforce_mpp_suite_out.json b/pkg/planner/core/casetest/enforcempp/testdata/enforce_mpp_suite_out.json index 147b1ecff5c69..8a81daccb8186 100644 --- a/pkg/planner/core/casetest/enforcempp/testdata/enforce_mpp_suite_out.json +++ b/pkg/planner/core/casetest/enforcempp/testdata/enforce_mpp_suite_out.json @@ -144,20 +144,20 @@ { "SQL": "explain format='verbose' select count(*) from t where a=1", "Plan": [ - "StreamAgg_32 1.00 193.81 root funcs:count(Column#7)->Column#4", - "└─IndexReader_33 1.00 143.91 root index:StreamAgg_12", - " └─StreamAgg_12 1.00 2127.00 cop[tikv] funcs:count(1)->Column#7", - " └─IndexRangeScan_31 10.00 1628.00 cop[tikv] table:t, index:idx(a) range:[1,1], keep order:false, stats:pseudo" + "StreamAgg_31 1.00 193.81 root funcs:count(Column#7)->Column#4", + "└─IndexReader_32 1.00 143.91 root index:StreamAgg_11", + " └─StreamAgg_11 1.00 2127.00 cop[tikv] funcs:count(1)->Column#7", + " └─IndexRangeScan_30 10.00 1628.00 cop[tikv] table:t, index:idx(a) range:[1,1], keep order:false, stats:pseudo" ], "Warn": null }, { "SQL": "explain format='verbose' select /*+ read_from_storage(tikv[t]) */ count(*) from t where a=1", "Plan": [ - "StreamAgg_20 1.00 193.81 root funcs:count(Column#6)->Column#4", - "└─IndexReader_21 1.00 143.91 root index:StreamAgg_12", - " └─StreamAgg_12 1.00 2127.00 cop[tikv] funcs:count(1)->Column#6", - " └─IndexRangeScan_19 10.00 1628.00 cop[tikv] table:t, index:idx(a) range:[1,1], keep order:false, stats:pseudo" + "StreamAgg_19 1.00 193.81 root funcs:count(Column#6)->Column#4", + "└─IndexReader_20 1.00 143.91 root index:StreamAgg_11", + " └─StreamAgg_11 1.00 2127.00 cop[tikv] funcs:count(1)->Column#6", + " └─IndexRangeScan_18 10.00 1628.00 cop[tikv] table:t, index:idx(a) range:[1,1], keep order:false, stats:pseudo" ], "Warn": [ "MPP mode may be blocked because you have set a hint to read table `t` from TiKV." @@ -166,11 +166,11 @@ { "SQL": "explain format='verbose' select /*+ read_from_storage(tiflash[t]) */ count(*) from t where a=1", "Plan": [ - "StreamAgg_28 1.00 49.90 root funcs:count(Column#7)->Column#4", - "└─TableReader_29 1.00 0.00 root data:StreamAgg_12", - " └─StreamAgg_12 1.00 952024.00 batchCop[tiflash] funcs:count(1)->Column#7", - " └─Selection_27 10.00 952000.00 batchCop[tiflash] eq(test.t.a, 1)", - " └─TableFullScan_26 10000.00 928000.00 batchCop[tiflash] table:t pushed down filter:empty, keep order:false, stats:pseudo" + "StreamAgg_27 1.00 49.90 root funcs:count(Column#7)->Column#4", + "└─TableReader_28 1.00 0.00 root data:StreamAgg_11", + " └─StreamAgg_11 1.00 952024.00 batchCop[tiflash] funcs:count(1)->Column#7", + " └─Selection_26 10.00 952000.00 batchCop[tiflash] eq(test.t.a, 1)", + " └─TableFullScan_25 10000.00 928000.00 batchCop[tiflash] table:t pushed down filter:empty, keep order:false, stats:pseudo" ], "Warn": null }, @@ -229,10 +229,10 @@ { "SQL": "explain select count(*) from t where a=1 -- 2. replica not ready", "Plan": [ - "StreamAgg_18 1.00 root funcs:count(Column#8)->Column#6", - "└─IndexReader_19 1.00 root index:StreamAgg_10", - " └─StreamAgg_10 1.00 cop[tikv] funcs:count(1)->Column#8", - " └─IndexRangeScan_17 10.00 cop[tikv] table:t, index:idx(a) range:[1,1], keep order:false, stats:pseudo" + "StreamAgg_17 1.00 root funcs:count(Column#8)->Column#6", + "└─IndexReader_18 1.00 root index:StreamAgg_9", + " └─StreamAgg_9 1.00 cop[tikv] funcs:count(1)->Column#8", + " └─IndexRangeScan_16 10.00 cop[tikv] table:t, index:idx(a) range:[1,1], keep order:false, stats:pseudo" ], "Warn": [ "MPP mode may be blocked because tiflash replicas of table `t` not ready." @@ -251,10 +251,10 @@ { "SQL": "explain select count(*) from t where a=1 -- 3. isolation_engine not match", "Plan": [ - "StreamAgg_18 1.00 root funcs:count(Column#8)->Column#6", - "└─IndexReader_19 1.00 root index:StreamAgg_10", - " └─StreamAgg_10 1.00 cop[tikv] funcs:count(1)->Column#8", - " └─IndexRangeScan_17 10.00 cop[tikv] table:t, index:idx(a) range:[1,1], keep order:false, stats:pseudo" + "StreamAgg_17 1.00 root funcs:count(Column#8)->Column#6", + "└─IndexReader_18 1.00 root index:StreamAgg_9", + " └─StreamAgg_9 1.00 cop[tikv] funcs:count(1)->Column#8", + " └─IndexRangeScan_16 10.00 cop[tikv] table:t, index:idx(a) range:[1,1], keep order:false, stats:pseudo" ], "Warn": [ "MPP mode may be blocked because 'tidb_isolation_read_engines'(value: 'tikv') not match, need 'tiflash'." @@ -407,11 +407,11 @@ { "SQL": "EXPLAIN SELECT count(*) from t where a=1; -- 1. static partition prune", "Plan": [ - "StreamAgg_15 1.00 root funcs:count(1)->Column#4", - "└─TableReader_44 10.00 root MppVersion: 2, data:ExchangeSender_43", - " └─ExchangeSender_43 10.00 mpp[tiflash] ExchangeType: PassThrough", - " └─Selection_42 10.00 mpp[tiflash] eq(test.t.a, 1)", - " └─TableFullScan_41 10000.00 mpp[tiflash] table:t, partition:p0 pushed down filter:empty, keep order:false, stats:pseudo" + "StreamAgg_14 1.00 root funcs:count(1)->Column#4", + "└─TableReader_43 10.00 root MppVersion: 2, data:ExchangeSender_42", + " └─ExchangeSender_42 10.00 mpp[tiflash] ExchangeType: PassThrough", + " └─Selection_41 10.00 mpp[tiflash] eq(test.t.a, 1)", + " └─TableFullScan_40 10000.00 mpp[tiflash] table:t, partition:p0 pushed down filter:empty, keep order:false, stats:pseudo" ], "Warn": null }, diff --git a/pkg/planner/core/casetest/instanceplancache/BUILD.bazel b/pkg/planner/core/casetest/instanceplancache/BUILD.bazel new file mode 100644 index 0000000000000..8cfeec612b3e3 --- /dev/null +++ b/pkg/planner/core/casetest/instanceplancache/BUILD.bazel @@ -0,0 +1,9 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_test") + +go_test( + name = "instanceplancache_test", + timeout = "short", + srcs = ["main_test.go"], + flaky = True, + deps = ["//pkg/testkit"], +) diff --git a/pkg/planner/core/casetest/instanceplancache/main_test.go b/pkg/planner/core/casetest/instanceplancache/main_test.go new file mode 100644 index 0000000000000..3409757683473 --- /dev/null +++ b/pkg/planner/core/casetest/instanceplancache/main_test.go @@ -0,0 +1,389 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package instanceplancache + +import ( + "fmt" + "math/rand" + "strings" + "sync" + "testing" + "time" + + "github.com/pingcap/tidb/pkg/testkit" +) + +var ( + typeInt = "int" + typeVarchar = "varchar(255)" + typeFloat = "float" + typeDouble = "double" + typeDecimal = "decimal(10,2)" + typeDatetime = "datetime" +) + +func randomItem(items ...string) string { + return items[rand.Intn(len(items))] +} + +func randomItems(items ...string) []string { + n := rand.Intn(len(items)-1) + 1 + res := make([]string, 0, n) + used := make(map[string]bool) + for i := 0; i < n; i++ { + item := randomItem(items...) + if used[item] { + continue + } + res = append(res, item) + used[item] = true + } + return res +} + +func randomIntVal() string { + switch rand.Intn(5) { + case 0: // null + return "null" + case 1: // 0/positive/negative + return randomItem("0", "-1", "1", "100000000", "-1000000000") + case 2: // maxint32 + return randomItem("2147483648", "2147483647", "2147483646", "-2147483648", "-2147483647", "-2147483646") + case 3: // maxint64 + return randomItem("9223372036854775807", "9223372036854775808", "9223372036854775806", "-9223372036854775807", "-9223372036854775808", "-9223372036854775806") + default: + return randomItem(fmt.Sprintf("%v", rand.Intn(3)+1000), fmt.Sprintf("-%v", rand.Intn(3)+1000), + fmt.Sprintf("%v", rand.Intn(3)+1000000), fmt.Sprintf("-%v", rand.Intn(3)+1000000), + fmt.Sprintf("%v", rand.Intn(3)+100000000000), fmt.Sprintf("-%v", rand.Intn(3)+100000000000), + fmt.Sprintf("%v", rand.Intn(3)+1000000000000000), fmt.Sprintf("-%v", rand.Intn(3)+1000000000000000)) + } +} + +func randomVarcharVal() string { + switch rand.Intn(4) { + case 0: + return "null" + case 1: + return "''" + case 2: + return randomItem(fmt.Sprintf("'%v'", rand.Intn(1000)), fmt.Sprintf("'-%v'", rand.Intn(1000))) + default: + str := "weoiruklmdsSDFjfDSFpqru23h#@$@#r90ds8a90dhfksdjfl#@!@#~$@#^BFDSAFDS=========+_+-21KLEJSDKLX;FJP;ipo][1" + start := rand.Intn(len(str)) + end := start + rand.Intn(len(str)-start) + return fmt.Sprintf("'%v'", str[start:end]) + } +} + +func randomFloat() string { + switch rand.Intn(4) { + case 0: + return "null" + case 1: + return randomItem("0", "0.000000000", "0000.000", "-0", "-0.000000000", "-0000.000", + "1", "1.000000000", "0001.000", "-1", "-1.000000000", "-0001.000", + "0.00001", "0.000000001", "0000.0000000001", "-0.00001", "-0.000000001", "-0000.0000000001") + case 2: + return randomItem("1.234", "1.23456789", "1.234567890123456789", "-1.234", "-1.23456789", "-1.234567890123456789", + "1234.567", "1234.567890123456789", "1234.567890123456789123456789", "-1234.567", "-1234.567890123456789", "-1234.567890123456789123456789", + "0.00001", "0.000000001", "0000.0000000001", "-0.00001", "-0.000000001", "-0000.0000000001") + default: + return randomItem(fmt.Sprintf("%v", rand.Float32()), fmt.Sprintf("-%v", rand.Float32()), + fmt.Sprintf("%v", rand.Float64()), fmt.Sprintf("-%v", rand.Float64())) + } +} + +func randomDatetime() string { + switch rand.Intn(3) { + case 0: + return "null" + case 1: + return randomItem("'2024-01-01 00:00:00'", "'2024-01-01 00:00:00.000000'", "'2024-01-01 00:00:00.000000000'", + "'2024-01-01 00:00:00.000000000+08:00'", "'2024-01-01 00:00:00.000000000+08:00'") + default: + t := time.Now().Add(time.Duration(rand.Intn(100000)) * time.Second) + return fmt.Sprintf("'%v'", t.Format("2006-01-02 15:04:05.000000000")) + } +} + +func prepareTableData(t string, rows int, colTypes []string) []string { + colValues := make([][]string, len(colTypes)) + for i, colType := range colTypes { + colValues[i] = make([]string, 0, rows) + for j := 0; j < rows; j++ { + switch colType { + case typeInt: + colValues[i] = append(colValues[i], randomIntVal()) + case typeVarchar: + colValues[i] = append(colValues[i], randomVarcharVal()) + case typeFloat, typeDouble, typeDecimal: + colValues[i] = append(colValues[i], randomFloat()) + case typeDatetime: + colValues[i] = append(colValues[i], randomDatetime()) + default: + panic("not implemented") + } + } + } + var inserts []string + for i := 0; i < rows; i++ { + vals := make([]string, 0, len(colTypes)) + for j := range colTypes { + vals = append(vals, colValues[j][i]) + } + inserts = append(inserts, fmt.Sprintf("insert ignore into %s values (%s);", t, strings.Join(vals, ", "))) + } + return inserts +} + +func prepareTables(n int) []string { + nCols := 6 + sqls := make([]string, 0, n) + for i := 0; i < n; i++ { + cols := make([]string, 0, nCols) + colNames := []string{"c0", "c1", "c2", "c3", "c4", "c5"} + var colTypes []string + for j := 0; j < nCols; j++ { + colType := randomItem(typeInt, typeVarchar, typeFloat, typeDouble, typeDatetime) + colTypes = append(colTypes, colType) + cols = append(cols, fmt.Sprintf("c%d %v", j, colType)) + } + pkCols := randomItems(colNames...) + idx1 := randomItems(colNames...) + idx2 := randomItems(colNames...) + sqls = append(sqls, fmt.Sprintf("create table t%d (%s, primary key (%s), index idx1 (%s), index idx2 (%s));", + i, strings.Join(cols, ", "), strings.Join(pkCols, ", "), strings.Join(idx1, ", "), strings.Join(idx2, ", "))) + + sqls = append(sqls, prepareTableData(fmt.Sprintf("t%d", i), 100, colTypes)...) + } + return sqls +} + +func TestInstancePlanCache(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec(`set global tidb_enable_instance_plan_cache=1`) + for _, s := range prepareTables(10) { + tk.MustExec(s) + } + + nWorkers := 5 + caseSync := new(sync.WaitGroup) + exitSync := new(sync.WaitGroup) + caseChs := make([]chan *testCase, nWorkers) + for i := 0; i < nWorkers; i++ { + caseChs[i] = make(chan *testCase, 1) + } + exitCh := make(chan bool) + for i := 0; i < nWorkers; i++ { + exitSync.Add(1) + go executeWorker(testkit.NewTestKit(t, store), caseChs[i], exitCh, caseSync, exitSync) + } + + for _, q := range queryPattern { + c := prepareStmts(q, 10, 5) + for i := 0; i < nWorkers; i++ { + caseSync.Add(1) + caseChs[i] <- c + } + caseSync.Wait() + } + + close(exitCh) + exitSync.Wait() +} + +func executeWorker(tk *testkit.TestKit, + caseCh chan *testCase, exit chan bool, + caseSync, exitSync *sync.WaitGroup) { + tk.MustExec("use test") + defer exitSync.Done() + + for { + select { + case c := <-caseCh: + tk.MustExec(c.prepStmt) + for i := 0; i < len(c.selStmts); i++ { + result := tk.MustQuery(c.selStmts[i]).Sort() + tk.MustExec(c.setStmts[i]) + tk.MustQuery(c.execStmts[i]).Sort().Equal(result.Rows()) + tk.MustQuery(c.execStmts[i]).Sort().Equal(result.Rows()) + tk.MustQuery(c.execStmts[i]).Sort().Equal(result.Rows()) + } + caseSync.Done() + case <-exit: + return + } + } +} + +type testCase struct { + prepStmt string + selStmts []string + setStmts []string + execStmts []string +} + +func prepareStmts(q string, nTables, n int) *testCase { + // random tables + for strings.Contains(q, "{T}") { + table := fmt.Sprintf("t%d", rand.Intn(nTables)) + q = strings.Replace(q, "{T}", table, 1) + } + + // random parameters + c := new(testCase) + c.prepStmt = fmt.Sprintf("prepare stmt from '%s'", q) + var numQuestionMarkers int + for _, c := range q { + if c == '?' { + numQuestionMarkers++ + } + } + for i := 0; i < n; i++ { + vals := genRandomValues(numQuestionMarkers) + if len(vals) == 0 { + continue + } + var setStmt, execStmt string + for i, val := range vals { + if i == 0 { + setStmt = fmt.Sprintf("set @p%d=%s", i, val) + execStmt = fmt.Sprintf("execute stmt using @p%d", i) + } else { + setStmt = fmt.Sprintf("%s, @p%d=%s", setStmt, i, val) + execStmt = fmt.Sprintf("%s, @p%d", execStmt, i) + } + } + + selStmt := q + for _, val := range vals { + selStmt = strings.Replace(selStmt, "?", val, 1) + } + + c.setStmts = append(c.setStmts, setStmt) + c.execStmts = append(c.execStmts, execStmt) + c.selStmts = append(c.selStmts, selStmt) + } + return c +} + +func genRandomValues(numVals int) (vals []string) { + for i := 0; i < numVals; i++ { + switch rand.Intn(4) { + case 0: + vals = append(vals, randomIntVal()) + case 1: + vals = append(vals, randomVarcharVal()) + case 2: + vals = append(vals, randomFloat()) + case 3: + vals = append(vals, randomDatetime()) + } + } + return +} + +var queryPattern []string + +func init() { + // single table selection: select * from {T} where ... + for i := 0; i < 100; i++ { + queryPattern = append(queryPattern, + fmt.Sprintf("select * from {T} where %s", randomFilters("", 5))) + } + + // order & limit: select * from {T} where ... order by ... limit ... + for i := 0; i < 30; i++ { + queryPattern = append(queryPattern, + fmt.Sprintf("select * from {T} where %s order by %s", + randomFilters("", 5), randomItem("c0", "c1", "c2", "c3"))) + queryPattern = append(queryPattern, + fmt.Sprintf("select * from {T} where %s limit 10", + randomFilters("", 5))) + queryPattern = append(queryPattern, + fmt.Sprintf("select * from {T} where %s order by %s limit 10", + randomFilters("", 5), randomItem("c0", "c1", "c2", "c3"))) + } + + // agg + for i := 0; i < 30; i++ { + queryPattern = append(queryPattern, + fmt.Sprintf("select sum(c0) from {T} where %s group by %v", + randomFilters("", 5), randomItem("c0", "c1", "c2", "c3"))) + queryPattern = append(queryPattern, + fmt.Sprintf("select c0, c1, sum(c2) from {T} where %s group by c0, c1", + randomFilters("", 5))) + } + + // join + for i := 0; i < 30; i++ { + queryPattern = append(queryPattern, + fmt.Sprintf("select * from {T} t1 join {T} t2 on t1.c0=t2.c0 where %s", + randomFilters("t1", 5))) + queryPattern = append(queryPattern, + fmt.Sprintf("select * from {T} t1 join {T} t2 on t1.c0=t2.c0 where %s", + randomFilters("t2", 5))) + queryPattern = append(queryPattern, + fmt.Sprintf("select * from {T} t1 join {T} t2 on t1.c0=t2.c0 where %s and %s", + randomFilters("t2", 5), randomFilter("t1", 5))) + } +} + +func randomFilters(table string, nCols int) string { + n := rand.Intn(3) + 1 + filters := make([]string, 0, n) + for i := 0; i < n; i++ { + filters = append(filters, randomFilter(table, nCols)) + } + switch rand.Intn(2) { + case 0: + return strings.Join(filters, " and ") + case 1: + return strings.Join(filters, " or ") + } + return "" +} + +func randomFilter(table string, nCols int) string { + c := fmt.Sprintf("c%d", rand.Intn(nCols)) + if table != "" { + c = table + "." + c + } + switch rand.Intn(10) { + case 0: + return fmt.Sprintf("%s=?", c) + case 1: + return fmt.Sprintf("%s>?", c) + case 2: + return fmt.Sprintf("%s", "<=", ">="} + for _, tc := range extractTestCases { + found := false + hasFsp := strings.HasSuffix(colType, ")") + for _, cType := range tc.ColumnTypes { + end := strings.TrimPrefix(colType, cType) + + if end == "" || end[:1] == "(" { + found = true + } + } + pRangesStrings := make([]string, 0, len(pRanges)) + partDefs := "" + for i, pString := range pRanges { + r := tk.MustQuery(`SELECT EXTRACT(` + tc.TimeUnit + ` FROM '` + pString + `')`) + pRangesStrings = append(pRangesStrings, r.Rows()[0][0].(string)) + if i > 0 { + partDefs += ", " + } + partDefs += "PARTITION p" + + strconv.Itoa(i) + + " VALUES LESS THAN (" + + pRangesStrings[i] + ")" + } + tk.MustExec(`drop table if exists t`) + createSQL := `create table t (d ` + colType + `, f varchar(255)) partition by range (EXTRACT(` + tc.TimeUnit + ` FROM d)) (` + partDefs + `, partition pMax values less than (maxvalue))` + if !found { + tk.MustContainErrMsg(createSQL, `[ddl:1486]Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed`) + continue + } + tk.MustExec(createSQL) + for i, op := range cmpOps { + res := tk.MustQuery(`explain select * from t where d ` + op + ` '` + pRanges[1] + `'`) + parts := strings.TrimPrefix(res.Rows()[0][3].(string), "partition:") + require.Greater(t, len(tc.PruneResult), i, "PruneResults does not include enough values, colType %s, EXTRACT %s, op %s", colType, tc.TimeUnit, op) + expects := tc.PruneResult[i] + if i == 0 && !hasFsp && tc.NoFspResult != "" { + expects = tc.NoFspResult + } + require.Equal(t, expects, parts, "colType %s, EXTRACT %s, op %s", colType, tc.TimeUnit, op) + } + res := tk.MustQuery(`explain select * from t where d between '` + pRanges[1] + `' and '` + pRanges[2] + `'`) + parts := strings.TrimPrefix(res.Rows()[0][3].(string), "partition:") + require.Equal(t, tc.PruneResult[len(cmpOps)], parts, "colType %s, EXTRACT %s, BETWEEN", colType, tc.TimeUnit) + } +} + +func TestRangeTimePruningExtract(t *testing.T) { + for _, colType := range []string{"TIME", "TIME(1)", "TIME(6)", "TIMESTAMP", "TIMESTAMP(1)", "TIMESTAMP(6)"} { + extractTestCases := []ExtractTestCase{ + { + "YEAR", + []string{"DATE", "DATETIME"}, + []string{}, + "", + }, { + "QUARTER", + []string{"DATE", "DATETIME"}, + []string{}, + "", + }, { + "YEAR_MONTH", + []string{"DATE", "DATETIME"}, + []string{}, + "", + }, { + "MONTH", + []string{"DATE", "DATETIME"}, + []string{}, + "", + }, { + "WEEK", + []string{"DATE", "DATETIME"}, + []string{}, + "", + }, { + "DAY", + []string{"DATE", "DATETIME"}, + []string{}, + "", + }, { + "DAY_HOUR", + []string{"DATETIME"}, + []string{}, + "", + }, { + "DAY_MINUTE", + []string{"DATETIME"}, + []string{}, + "", + }, { + "DAY_SECOND", + []string{"DATETIME"}, + []string{}, + "", + }, { + "DAY_MICROSECOND", + []string{"DATETIME"}, + []string{}, + "", + }, { + "HOUR", + []string{"TIME"}, + []string{"p2", "p0,p1,p2", "p2,p3,pMax", "p0,p1,p2", "p2,p3,pMax", "p2,p3"}, + "", + }, { + "HOUR_MINUTE", + []string{"TIME"}, + []string{"p2", "p0,p1,p2", "p2,p3,pMax", "p0,p1,p2", "p2,p3,pMax", "p2,p3"}, + "", + }, { + "HOUR_SECOND", + []string{"TIME"}, + []string{"p2", "p0,p1,p2", "p2,p3,pMax", "p0,p1,p2", "p2,p3,pMax", "p2,p3"}, + "", + }, { + "HOUR_MICROSECOND", + []string{"TIME"}, + []string{"p2", "p0,p1,p2", "p2,p3,pMax", "p0,p1,p2", "p2,p3,pMax", "p2,p3"}, + "", + }, { + "MINUTE", + []string{"TIME"}, + []string{"p2", "all", "all", "all", "all", "all"}, + "", + }, { + "MINUTE_SECOND", + []string{"TIME"}, + []string{"p2", "all", "all", "all", "all", "all"}, + "", + }, { + "MINUTE_MICROSECOND", + []string{"TIME"}, + []string{"p2", "all", "all", "all", "all", "all"}, + "", + }, { + "SECOND", + []string{"TIME"}, + []string{"p2", "all", "all", "all", "all", "all"}, + "", + }, { + "SECOND_MICROSECOND", + []string{"TIME"}, + []string{"p2", "all", "all", "all", "all", "all"}, + "", + }, { + "MICROSECOND", + []string{"TIME"}, + []string{"p2", "all", "all", "all", "all", "all"}, + "", + }, + } + runExtractTestCases(t, colType, extractTestCases) + } +} diff --git a/pkg/planner/core/casetest/partition/testdata/integration_partition_suite_out.json b/pkg/planner/core/casetest/partition/testdata/integration_partition_suite_out.json index 71456e2d40833..e70e65ab26ccd 100644 --- a/pkg/planner/core/casetest/partition/testdata/integration_partition_suite_out.json +++ b/pkg/planner/core/casetest/partition/testdata/integration_partition_suite_out.json @@ -709,7 +709,7 @@ "└─IndexRangeScan 1.00 cop[tikv] table:t, index:b(b) range:[1,1], keep order:false" ], "StaticPlan": [ - "PartitionUnion 1.00 root ", + "PartitionUnion 3.00 root ", "├─IndexReader 1.00 root index:IndexRangeScan", "│ └─IndexRangeScan 1.00 cop[tikv] table:t, partition:P0, index:b(b) range:[1,1], keep order:false", "├─IndexReader 1.00 root index:IndexRangeScan", @@ -725,7 +725,7 @@ "└─IndexRangeScan 1.00 cop[tikv] table:t, index:b(b) range:[2,2], keep order:false" ], "StaticPlan": [ - "PartitionUnion 1.00 root ", + "PartitionUnion 3.00 root ", "├─IndexReader 1.00 root index:IndexRangeScan", "│ └─IndexRangeScan 1.00 cop[tikv] table:t, partition:P0, index:b(b) range:[2,2], keep order:false", "├─IndexReader 1.00 root index:IndexRangeScan", @@ -741,7 +741,7 @@ "└─IndexRangeScan 2.00 cop[tikv] table:t, index:b(b) range:[1,2], keep order:false" ], "StaticPlan": [ - "PartitionUnion 2.00 root ", + "PartitionUnion 3.00 root ", "├─IndexReader 1.00 root index:IndexRangeScan", "│ └─IndexRangeScan 1.00 cop[tikv] table:t, partition:P0, index:b(b) range:[1,2], keep order:false", "├─IndexReader 1.00 root index:IndexRangeScan", @@ -757,7 +757,7 @@ "└─IndexRangeScan 2.00 cop[tikv] table:t, index:b(b) range:[2,2], [3,3], [4,4], keep order:false" ], "StaticPlan": [ - "PartitionUnion 2.00 root ", + "PartitionUnion 3.00 root ", "├─IndexReader 1.00 root index:IndexRangeScan", "│ └─IndexRangeScan 1.00 cop[tikv] table:t, partition:P0, index:b(b) range:[2,2], [3,3], [4,4], keep order:false", "├─IndexReader 1.00 root index:IndexRangeScan", @@ -773,7 +773,7 @@ "└─IndexRangeScan 2.00 cop[tikv] table:t, index:b(b) range:[2,2], [3,3], keep order:false" ], "StaticPlan": [ - "PartitionUnion 2.00 root ", + "PartitionUnion 3.00 root ", "├─IndexReader 1.00 root index:IndexRangeScan", "│ └─IndexRangeScan 1.00 cop[tikv] table:t, partition:P0, index:b(b) range:[2,2], [3,3], keep order:false", "├─IndexReader 1.00 root index:IndexRangeScan", @@ -854,7 +854,7 @@ "└─IndexRangeScan 1.00 cop[tikv] table:t, index:b(b) range:[1,1], keep order:false" ], "StaticPlan": [ - "PartitionUnion 1.00 root ", + "PartitionUnion 2.00 root ", "├─IndexReader 1.00 root index:IndexRangeScan", "│ └─IndexRangeScan 1.00 cop[tikv] table:t, partition:P0, index:b(b) range:[1,1], keep order:false", "└─IndexReader 1.00 root index:IndexRangeScan", diff --git a/pkg/planner/core/casetest/physicalplantest/BUILD.bazel b/pkg/planner/core/casetest/physicalplantest/BUILD.bazel index 7acf9643a4826..43f0543c42f23 100644 --- a/pkg/planner/core/casetest/physicalplantest/BUILD.bazel +++ b/pkg/planner/core/casetest/physicalplantest/BUILD.bazel @@ -10,7 +10,7 @@ go_test( data = glob(["testdata/**"]), flaky = True, race = "on", - shard_count = 34, + shard_count = 35, deps = [ "//pkg/config", "//pkg/domain", diff --git a/pkg/planner/core/casetest/physicalplantest/physical_plan_test.go b/pkg/planner/core/casetest/physicalplantest/physical_plan_test.go index 88a84cee1e964..65e9bd414870f 100644 --- a/pkg/planner/core/casetest/physicalplantest/physical_plan_test.go +++ b/pkg/planner/core/casetest/physicalplantest/physical_plan_test.go @@ -1114,8 +1114,9 @@ func TestIndexJoinHint(t *testing.T) { var input []string var output []struct { - SQL string - Plan string + SQL string + Plan string + Warns []string } is := domain.GetDomain(tk.Session()).InfoSchema() @@ -1124,6 +1125,16 @@ func TestIndexJoinHint(t *testing.T) { planSuiteData := GetPlanSuiteData() planSuiteData.LoadTestCases(t, &input, &output) + filterWarnings := func(originalWarnings []contextutil.SQLWarn) []contextutil.SQLWarn { + warnings := make([]contextutil.SQLWarn, 0, 4) + for _, warning := range originalWarnings { + // filter out warning about skyline pruning + if !strings.Contains(warning.Err.Error(), "remain after pruning paths for") { + warnings = append(warnings, warning) + } + } + return warnings + } for i, tt := range input { comment := fmt.Sprintf("case:%v sql: %s", i, tt) stmt, err := p.ParseOneStmt(tt, "", "") @@ -1133,7 +1144,9 @@ func TestIndexJoinHint(t *testing.T) { testdata.OnRecord(func() { output[i].SQL = tt output[i].Plan = core.ToString(p) + output[i].Warns = testdata.ConvertSQLWarnToStrings(filterWarnings(tk.Session().GetSessionVars().StmtCtx.GetWarnings())) }) + tk.Session().GetSessionVars().StmtCtx.TruncateWarnings(0) require.Equal(t, output[i].Plan, core.ToString(p), comment) } } @@ -1499,3 +1512,8 @@ func TestExplainExpand(t *testing.T) { tk.MustQuery(ts).Check(testkit.Rows(output[i].Plan...)) } } + +func TestPhysicalApplyIsNotPhysicalJoin(t *testing.T) { + // PhysicalApply is expected not to implement PhysicalJoin. + require.NotImplements(t, (*core.PhysicalJoin)(nil), new(core.PhysicalApply)) +} diff --git a/pkg/planner/core/casetest/physicalplantest/testdata/plan_suite_out.json b/pkg/planner/core/casetest/physicalplantest/testdata/plan_suite_out.json index 5e1cbddb961f0..b440550618083 100644 --- a/pkg/planner/core/casetest/physicalplantest/testdata/plan_suite_out.json +++ b/pkg/planner/core/casetest/physicalplantest/testdata/plan_suite_out.json @@ -1883,19 +1883,19 @@ "SQL": "select /*+ USE_INDEX(t1, c_d_e), USE_INDEX(t2, f) */ * from t t1, t t2 where t1.a = t2.b", "Best": "LeftHashJoin{IndexLookUp(Index(t.c_d_e)[[NULL,+inf]], Table(t))->IndexLookUp(Index(t.f)[[NULL,+inf]], Table(t))}(test.t.a,test.t.b)", "HasWarn": false, - "Hints": "hash_join(@`sel_1` `test`.`t1`), use_index(@`sel_1` `test`.`t1` `c_d_e`), no_order_index(@`sel_1` `test`.`t1` `c_d_e`), use_index(@`sel_1` `test`.`t2` `f`), no_order_index(@`sel_1` `test`.`t2` `f`)" + "Hints": "hash_join_build(`test`.`t2`), use_index(@`sel_1` `test`.`t1` `c_d_e`), no_order_index(@`sel_1` `test`.`t1` `c_d_e`), use_index(@`sel_1` `test`.`t2` `f`), no_order_index(@`sel_1` `test`.`t2` `f`)" }, { "SQL": "select /*+ IGNORE_INDEX(t1, c_d_e), IGNORE_INDEX(t2, f), HASH_JOIN(t1) */ * from t t1, t t2 where t1.a = t2.b", "Best": "LeftHashJoin{TableReader(Table(t))->TableReader(Table(t))}(test.t.a,test.t.b)", "HasWarn": false, - "Hints": "hash_join(@`sel_1` `test`.`t1`), use_index(@`sel_1` `test`.`t1` ), no_order_index(@`sel_1` `test`.`t1` `primary`), use_index(@`sel_1` `test`.`t2` ), no_order_index(@`sel_1` `test`.`t2` `primary`)" + "Hints": "hash_join_build(`test`.`t2`), use_index(@`sel_1` `test`.`t1` ), no_order_index(@`sel_1` `test`.`t1` `primary`), use_index(@`sel_1` `test`.`t2` ), no_order_index(@`sel_1` `test`.`t2` `primary`)" }, { "SQL": "select /*+ FORCE_INDEX(t1, c_d_e), FORCE_INDEX(t2, f) */ * from t t1, t t2 where t1.a = t2.b", "Best": "LeftHashJoin{IndexLookUp(Index(t.c_d_e)[[NULL,+inf]], Table(t))->IndexLookUp(Index(t.f)[[NULL,+inf]], Table(t))}(test.t.a,test.t.b)", "HasWarn": false, - "Hints": "hash_join(@`sel_1` `test`.`t1`), use_index(@`sel_1` `test`.`t1` `c_d_e`), no_order_index(@`sel_1` `test`.`t1` `c_d_e`), use_index(@`sel_1` `test`.`t2` `f`), no_order_index(@`sel_1` `test`.`t2` `f`)" + "Hints": "hash_join_build(`test`.`t2`), use_index(@`sel_1` `test`.`t1` `c_d_e`), no_order_index(@`sel_1` `test`.`t1` `c_d_e`), use_index(@`sel_1` `test`.`t2` `f`), no_order_index(@`sel_1` `test`.`t2` `f`)" }, { "SQL": "select /*+ USE_INDEX(t, c_d_e, f, g) */ * from t order by f", @@ -2387,25 +2387,25 @@ "SQL": "select /*+ TIDB_INLJ(t1) */ t1.a, t2.a, t3.a from t t1, t t2, t t3 where t1.a = t2.a and t2.a = t3.a;", "Best": "MergeInnerJoin{IndexJoin{TableReader(Table(t))->TableReader(Table(t))}(test.t.a,test.t.a)->TableReader(Table(t))}(test.t.a,test.t.a)", "Warning": "", - "Hints": "merge_join(@`sel_1` `test`.`t3`), inl_join(@`sel_1` `test`.`t1`), use_index(@`sel_1` `test`.`t1` ), no_order_index(@`sel_1` `test`.`t1` `primary`), use_index(@`sel_1` `test`.`t2` ), order_index(@`sel_1` `test`.`t2` `primary`), use_index(@`sel_1` `test`.`t3` ), order_index(@`sel_1` `test`.`t3` `primary`)" + "Hints": "merge_join(`test`.`t3`), leading(`test`.`t1`, `test`.`t2`, `test`.`t3`), inl_join(`test`.`t1`), use_index(@`sel_1` `test`.`t1` ), no_order_index(@`sel_1` `test`.`t1` `primary`), use_index(@`sel_1` `test`.`t2` ), order_index(@`sel_1` `test`.`t2` `primary`), use_index(@`sel_1` `test`.`t3` ), order_index(@`sel_1` `test`.`t3` `primary`)" }, { "SQL": "select /*+ TIDB_INLJ(test.t1) */ t1.a, t2.a, t3.a from t t1, t t2, t t3 where t1.a = t2.a and t2.a = t3.a;", "Best": "MergeInnerJoin{IndexJoin{TableReader(Table(t))->TableReader(Table(t))}(test.t.a,test.t.a)->TableReader(Table(t))}(test.t.a,test.t.a)", "Warning": "", - "Hints": "merge_join(@`sel_1` `test`.`t3`), inl_join(@`sel_1` `test`.`t1`), use_index(@`sel_1` `test`.`t1` ), no_order_index(@`sel_1` `test`.`t1` `primary`), use_index(@`sel_1` `test`.`t2` ), order_index(@`sel_1` `test`.`t2` `primary`), use_index(@`sel_1` `test`.`t3` ), order_index(@`sel_1` `test`.`t3` `primary`)" + "Hints": "merge_join(`test`.`t3`), leading(`test`.`t1`, `test`.`t2`, `test`.`t3`), inl_join(`test`.`t1`), use_index(@`sel_1` `test`.`t1` ), no_order_index(@`sel_1` `test`.`t1` `primary`), use_index(@`sel_1` `test`.`t2` ), order_index(@`sel_1` `test`.`t2` `primary`), use_index(@`sel_1` `test`.`t3` ), order_index(@`sel_1` `test`.`t3` `primary`)" }, { "SQL": "select /*+ TIDB_INLJ(t1) */ t1.b, t2.a from t t1, t t2 where t1.b = t2.a;", "Best": "LeftHashJoin{TableReader(Table(t))->IndexReader(Index(t.f)[[NULL,+inf]])}(test.t.b,test.t.a)", "Warning": "[planner:1815]Optimizer Hint /*+ INL_JOIN(t1) */ or /*+ TIDB_INLJ(t1) */ is inapplicable", - "Hints": "hash_join(@`sel_1` `test`.`t1`), use_index(@`sel_1` `test`.`t1` ), no_order_index(@`sel_1` `test`.`t1` `primary`), use_index(@`sel_1` `test`.`t2` `f`), no_order_index(@`sel_1` `test`.`t2` `f`)" + "Hints": "hash_join_build(`test`.`t2`), use_index(@`sel_1` `test`.`t1` ), no_order_index(@`sel_1` `test`.`t1` `primary`), use_index(@`sel_1` `test`.`t2` `f`), no_order_index(@`sel_1` `test`.`t2` `f`)" }, { "SQL": "select /*+ TIDB_INLJ(t2) */ t1.b, t2.a from t2 t1, t2 t2 where t1.b=t2.b and t2.c=-1;", "Best": "IndexJoin{TableReader(Table(t2)->Sel([eq(test.t2.c, -1)]))->IndexReader(Index(t2.b)[[NULL,NULL]])}(test.t2.b,test.t2.b)->Projection", "Warning": "[planner:1815]Optimizer Hint /*+ INL_JOIN(t2) */ or /*+ TIDB_INLJ(t2) */ is inapplicable", - "Hints": "inl_join(@`sel_1` `test`.`t1`), use_index(@`sel_1` `test`.`t2` ), no_order_index(@`sel_1` `test`.`t2` `primary`), use_index(@`sel_1` `test`.`t1` `b`), no_order_index(@`sel_1` `test`.`t1` `b`)" + "Hints": "inl_join(`test`.`t1`), use_index(@`sel_1` `test`.`t2` ), no_order_index(@`sel_1` `test`.`t2` `primary`), use_index(@`sel_1` `test`.`t1` `b`), no_order_index(@`sel_1` `test`.`t1` `b`)" } ] }, @@ -2525,7 +2525,7 @@ { "SQL": "select /*+ HASH_JOIN(@sel_2 t1@sel_2, t2@sel_2), MERGE_JOIN(@sel_1 t1@sel_1, t2@sel_1) */ * from (select t1.a, t1.b from t t1, t t2 where t1.a = t2.a) t1, t t2 where t1.b = t2.b", "Plan": "MergeInnerJoin{TableReader(Table(t))->Sort->LeftHashJoin{TableReader(Table(t))->IndexReader(Index(t.f)[[NULL,+inf]])}(test.t.a,test.t.a)->Sort}(test.t.b,test.t.b)->Projection", - "Hints": "use_index(@`sel_1` `test`.`t2` ), no_order_index(@`sel_1` `test`.`t2` `primary`), hash_join(@`sel_2` `test`.`t1`), use_index(@`sel_2` `test`.`t1` ), no_order_index(@`sel_2` `test`.`t1` `primary`), use_index(@`sel_2` `test`.`t2` `f`), no_order_index(@`sel_2` `test`.`t2` `f`)" + "Hints": "use_index(@`sel_1` `test`.`t2` ), no_order_index(@`sel_1` `test`.`t2` `primary`), hash_join_build(@`sel_2` `test`.`t2`@`sel_2`), use_index(@`sel_2` `test`.`t1` ), no_order_index(@`sel_2` `test`.`t1` `primary`), use_index(@`sel_2` `test`.`t2` `f`), no_order_index(@`sel_2` `test`.`t2` `f`)" } ] }, @@ -2543,23 +2543,34 @@ "Cases": [ { "SQL": "select /*+ INL_JOIN(t1) */ * from t1 join t2 on t1.a = t2.a;", - "Plan": "IndexJoin{IndexLookUp(Index(t1.idx_a)[[NULL,NULL]]->Sel([not(isnull(test.t1.a))]), Table(t1))->TableReader(Table(t2)->Sel([not(isnull(test.t2.a))]))}(test.t2.a,test.t1.a)" + "Plan": "IndexJoin{IndexLookUp(Index(t1.idx_a)[[NULL,NULL]]->Sel([not(isnull(test.t1.a))]), Table(t1))->TableReader(Table(t2)->Sel([not(isnull(test.t2.a))]))}(test.t2.a,test.t1.a)", + "Warns": null }, { "SQL": "select /*+ INL_HASH_JOIN(t1) */ * from t1 join t2 on t1.a = t2.a;", - "Plan": "IndexHashJoin{IndexLookUp(Index(t1.idx_a)[[NULL,NULL]]->Sel([not(isnull(test.t1.a))]), Table(t1))->TableReader(Table(t2)->Sel([not(isnull(test.t2.a))]))}(test.t2.a,test.t1.a)" + "Plan": "IndexHashJoin{IndexLookUp(Index(t1.idx_a)[[NULL,NULL]]->Sel([not(isnull(test.t1.a))]), Table(t1))->TableReader(Table(t2)->Sel([not(isnull(test.t2.a))]))}(test.t2.a,test.t1.a)", + "Warns": null }, { "SQL": "select /*+ INL_MERGE_JOIN(t1) */ * from t1 join t2 on t1.a = t2.a;", - "Plan": "IndexMergeJoin{IndexLookUp(Index(t1.idx_a)[[NULL,NULL]]->Sel([not(isnull(test.t1.a))]), Table(t1))->Projection->TableReader(Table(t2)->Sel([not(isnull(test.t2.a))]))}(test.t2.a,test.t1.a)" + "Plan": "LeftHashJoin{TableReader(Table(t1)->Sel([not(isnull(test.t1.a))]))->TableReader(Table(t2)->Sel([not(isnull(test.t2.a))]))}(test.t1.a,test.t2.a)", + "Warns": [ + "[planner:1815]The INDEX MERGE JOIN hint is deprecated for usage, try other hints." + ] }, { "SQL": "select /*+ inl_merge_join(t2) */ t1.a, t2.a from t t1 left join t t2 use index(g_2) on t1.g=t2.g", - "Plan": "IndexMergeJoin{IndexReader(Index(t.g_2)[[NULL,+inf]])->IndexReader(Index(t.g_2)[[NULL,NULL]]->Sel([not(isnull(test.t.g))]))}(test.t.g,test.t.g)" + "Plan": "MergeLeftOuterJoin{IndexReader(Index(t.g_2)[[NULL,+inf]])->IndexReader(Index(t.g_2)[[-inf,+inf]])}(test.t.g,test.t.g)", + "Warns": [ + "[planner:1815]The INDEX MERGE JOIN hint is deprecated for usage, try other hints." + ] }, { "SQL": "select /*+inl_merge_join(t2)*/ t1.a, t2.a from t t1 left join t t2 use index(g_2) on t1.g=t2.g order by t1.a", - "Plan": "IndexMergeJoin{IndexReader(Index(t.g_2)[[NULL,+inf]])->IndexReader(Index(t.g_2)[[NULL,NULL]]->Sel([not(isnull(test.t.g))]))}(test.t.g,test.t.g)->Sort" + "Plan": "IndexHashJoin{TableReader(Table(t))->IndexReader(Index(t.g_2)[[NULL,NULL]]->Sel([not(isnull(test.t.g))]))}(test.t.g,test.t.g)", + "Warns": [ + "[planner:1815]The INDEX MERGE JOIN hint is deprecated for usage, try other hints." + ] } ] }, @@ -2647,52 +2658,52 @@ { "SQL": "select /*+ HASH_JOIN(t1) */ t1.b, t2.b from t1, t2 where t1.a = t2.a;", "Plan": "LeftHashJoin{TableReader(Table(t1)->Sel([not(isnull(test.t1.a))]))->TableReader(Table(t2)->Sel([not(isnull(test.t2.a))]))}(test.t1.a,test.t2.a)", - "Hints": "hash_join(@`sel_1` `test`.`t1`), use_index(@`sel_1` `test`.`t1` ), use_index(@`sel_1` `test`.`t2` )" + "Hints": "hash_join_build(`test`.`t2`), use_index(@`sel_1` `test`.`t1` ), use_index(@`sel_1` `test`.`t2` )" }, { "SQL": "select /*+ HASH_JOIN(t1) */ t1.b, t2.b from t1 inner join t2 on t1.a = t2.a;", "Plan": "LeftHashJoin{TableReader(Table(t1)->Sel([not(isnull(test.t1.a))]))->TableReader(Table(t2)->Sel([not(isnull(test.t2.a))]))}(test.t1.a,test.t2.a)", - "Hints": "hash_join(@`sel_1` `test`.`t1`), use_index(@`sel_1` `test`.`t1` ), use_index(@`sel_1` `test`.`t2` )" + "Hints": "hash_join_build(`test`.`t2`), use_index(@`sel_1` `test`.`t1` ), use_index(@`sel_1` `test`.`t2` )" }, { "SQL": "select /*+ HASH_JOIN(t1) */ t1.b, t2.b from t1 left outer join t2 on t1.a = t2.a;", "Plan": "LeftHashJoin{TableReader(Table(t1))->TableReader(Table(t2)->Sel([not(isnull(test.t2.a))]))}(test.t1.a,test.t2.a)", - "Hints": "hash_join(@`sel_1` `test`.`t1`), use_index(@`sel_1` `test`.`t1` ), use_index(@`sel_1` `test`.`t2` )" + "Hints": "hash_join_build(`test`.`t2`), use_index(@`sel_1` `test`.`t1` ), use_index(@`sel_1` `test`.`t2` )" }, { "SQL": "select /*+ HASH_JOIN(t1) */ t1.b, t2.b from t1 right outer join t2 on t1.a = t2.a;", "Plan": "RightHashJoin{TableReader(Table(t1)->Sel([not(isnull(test.t1.a))]))->TableReader(Table(t2))}(test.t1.a,test.t2.a)", - "Hints": "hash_join(@`sel_1` `test`.`t1`), use_index(@`sel_1` `test`.`t1` ), use_index(@`sel_1` `test`.`t2` )" + "Hints": "hash_join_build(`test`.`t1`), use_index(@`sel_1` `test`.`t1` ), use_index(@`sel_1` `test`.`t2` )" }, { "SQL": "select 1 from (select /*+ HASH_JOIN(t1) */ t1.a in (select t2.a from t2) from t1) x;", "Plan": "LeftHashJoin{IndexReader(Index(t1.idx_a)[[NULL,+inf]])->IndexReader(Index(t2.idx_a)[[NULL,+inf]])}->Projection", - "Hints": "hash_join(@`sel_2` `test`.`t1`), use_index(@`sel_2` `test`.`t1` `idx_a`), no_order_index(@`sel_2` `test`.`t1` `idx_a`), use_index(@`sel_3` `test`.`t2` `idx_a`), no_order_index(@`sel_3` `test`.`t2` `idx_a`)" + "Hints": "hash_join(@`sel_2` `test`.`t1`@`sel_2`), use_index(@`sel_2` `test`.`t1` `idx_a`), no_order_index(@`sel_2` `test`.`t1` `idx_a`), use_index(@`sel_3` `test`.`t2` `idx_a`), no_order_index(@`sel_3` `test`.`t2` `idx_a`)" }, { "SQL": "select 1 from (select /*+ HASH_JOIN(t1) */ t1.a not in (select t2.a from t2) from t1) x;", "Plan": "LeftHashJoin{IndexReader(Index(t1.idx_a)[[NULL,+inf]])->IndexReader(Index(t2.idx_a)[[NULL,+inf]])}->Projection", - "Hints": "hash_join(@`sel_2` `test`.`t1`), use_index(@`sel_2` `test`.`t1` `idx_a`), no_order_index(@`sel_2` `test`.`t1` `idx_a`), use_index(@`sel_3` `test`.`t2` `idx_a`), no_order_index(@`sel_3` `test`.`t2` `idx_a`)" + "Hints": "hash_join(@`sel_2` `test`.`t1`@`sel_2`), use_index(@`sel_2` `test`.`t1` `idx_a`), no_order_index(@`sel_2` `test`.`t1` `idx_a`), use_index(@`sel_3` `test`.`t2` `idx_a`), no_order_index(@`sel_3` `test`.`t2` `idx_a`)" }, { "SQL": "select /*+ INL_JOIN(t1) */ t1.b, t2.b from t1 inner join t2 on t1.a = t2.a;", "Plan": "IndexJoin{IndexLookUp(Index(t1.idx_a)[[NULL,NULL]]->Sel([not(isnull(test.t1.a))]), Table(t1))->TableReader(Table(t2)->Sel([not(isnull(test.t2.a))]))}(test.t2.a,test.t1.a)", - "Hints": "inl_join(@`sel_1` `test`.`t1`), use_index(@`sel_1` `test`.`t1` `idx_a`), no_order_index(@`sel_1` `test`.`t1` `idx_a`), use_index(@`sel_1` `test`.`t2` )" + "Hints": "inl_join(`test`.`t1`), use_index(@`sel_1` `test`.`t1` `idx_a`), no_order_index(@`sel_1` `test`.`t1` `idx_a`), use_index(@`sel_1` `test`.`t2` )" }, { "SQL": "select /*+ INL_HASH_JOIN(t1) */ t1.b, t2.b from t1 inner join t2 on t1.a = t2.a;", "Plan": "IndexHashJoin{IndexLookUp(Index(t1.idx_a)[[NULL,NULL]]->Sel([not(isnull(test.t1.a))]), Table(t1))->TableReader(Table(t2)->Sel([not(isnull(test.t2.a))]))}(test.t2.a,test.t1.a)", - "Hints": "inl_hash_join(@`sel_1` `test`.`t1`), use_index(@`sel_1` `test`.`t1` `idx_a`), no_order_index(@`sel_1` `test`.`t1` `idx_a`), use_index(@`sel_1` `test`.`t2` )" + "Hints": "inl_hash_join(`test`.`t1`), use_index(@`sel_1` `test`.`t1` `idx_a`), no_order_index(@`sel_1` `test`.`t1` `idx_a`), use_index(@`sel_1` `test`.`t2` )" }, { "SQL": "select /*+ INL_MERGE_JOIN(t1) */ t1.b, t2.b from t1 inner join t2 on t1.a = t2.a;", - "Plan": "IndexMergeJoin{IndexLookUp(Index(t1.idx_a)[[NULL,NULL]]->Sel([not(isnull(test.t1.a))]), Table(t1))->Projection->TableReader(Table(t2)->Sel([not(isnull(test.t2.a))]))}(test.t2.a,test.t1.a)", - "Hints": "inl_merge_join(@`sel_1` `test`.`t1`), use_index(@`sel_1` `test`.`t1` `idx_a`), order_index(@`sel_1` `test`.`t1` `idx_a`), use_index(@`sel_1` `test`.`t2` )" + "Plan": "LeftHashJoin{TableReader(Table(t1)->Sel([not(isnull(test.t1.a))]))->TableReader(Table(t2)->Sel([not(isnull(test.t2.a))]))}(test.t1.a,test.t2.a)", + "Hints": "hash_join_build(`test`.`t2`), use_index(@`sel_1` `test`.`t1` ), use_index(@`sel_1` `test`.`t2` )" }, { "SQL": "select /*+ MERGE_JOIN(t1) */ t1.b, t2.b from t1 inner join t2 on t1.a = t2.a;", "Plan": "MergeInnerJoin{IndexLookUp(Index(t1.idx_a)[[-inf,+inf]], Table(t1))->Projection->IndexLookUp(Index(t2.idx_a)[[-inf,+inf]], Table(t2))->Projection}(test.t1.a,test.t2.a)", - "Hints": "merge_join(@`sel_1` `test`.`t1`), use_index(@`sel_1` `test`.`t1` `idx_a`), order_index(@`sel_1` `test`.`t1` `idx_a`), use_index(@`sel_1` `test`.`t2` `idx_a`), order_index(@`sel_1` `test`.`t2` `idx_a`)" + "Hints": "merge_join(`test`.`t1`), use_index(@`sel_1` `test`.`t1` `idx_a`), order_index(@`sel_1` `test`.`t1` `idx_a`), use_index(@`sel_1` `test`.`t2` `idx_a`), order_index(@`sel_1` `test`.`t2` `idx_a`)" } ] }, diff --git a/pkg/planner/core/casetest/planstats/testdata/plan_stats_suite_out.json b/pkg/planner/core/casetest/planstats/testdata/plan_stats_suite_out.json index 92f1647bb88d7..e61f53ded7ca2 100644 --- a/pkg/planner/core/casetest/planstats/testdata/plan_stats_suite_out.json +++ b/pkg/planner/core/casetest/planstats/testdata/plan_stats_suite_out.json @@ -116,10 +116,10 @@ { "Query": "explain format = brief select * from t join tp where tp.a = 10 and t.b = tp.c", "Result": [ - "Projection 0.00 root test.t.a, test.t.b, test.t.c, test.tp.a, test.tp.b, test.tp.c", - "└─HashJoin 0.00 root inner join, equal:[eq(test.tp.c, test.t.b)]", - " ├─TableReader(Build) 0.00 root partition:p1 data:Selection", - " │ └─Selection 0.00 cop[tikv] eq(test.tp.a, 10), not(isnull(test.tp.c))", + "Projection 1.00 root test.t.a, test.t.b, test.t.c, test.tp.a, test.tp.b, test.tp.c", + "└─HashJoin 1.00 root inner join, equal:[eq(test.tp.c, test.t.b)]", + " ├─TableReader(Build) 1.00 root partition:p1 data:Selection", + " │ └─Selection 1.00 cop[tikv] eq(test.tp.a, 10), not(isnull(test.tp.c))", " │ └─TableFullScan 6.00 cop[tikv] table:tp keep order:false, stats:partial[c:allEvicted]", " └─TableReader(Probe) 3.00 root data:Selection", " └─Selection 3.00 cop[tikv] not(isnull(test.t.b))", diff --git a/pkg/planner/core/casetest/stats_test.go b/pkg/planner/core/casetest/stats_test.go index ea57b23854697..10a81f642d31c 100644 --- a/pkg/planner/core/casetest/stats_test.go +++ b/pkg/planner/core/casetest/stats_test.go @@ -22,6 +22,7 @@ import ( "github.com/pingcap/tidb/pkg/parser" "github.com/pingcap/tidb/pkg/planner/core" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/testkit/testdata" @@ -67,23 +68,23 @@ func TestGroupNDVs(t *testing.T) { lp := p.(base.LogicalPlan) _, err = core.RecursiveDeriveStats4Test(lp) require.NoError(t, err, comment) - var agg *core.LogicalAggregation - var join *core.LogicalJoin + var agg *logicalop.LogicalAggregation + var join *logicalop.LogicalJoin stack := make([]base.LogicalPlan, 0, 2) traversed := false for !traversed { switch v := lp.(type) { - case *core.LogicalAggregation: + case *logicalop.LogicalAggregation: agg = v lp = lp.Children()[0] - case *core.LogicalJoin: + case *logicalop.LogicalJoin: join = v lp = v.Children()[0] stack = append(stack, v.Children()[1]) - case *core.LogicalApply: + case *logicalop.LogicalApply: lp = lp.Children()[0] stack = append(stack, v.Children()[1]) - case *core.LogicalUnionAll: + case *logicalop.LogicalUnionAll: lp = lp.Children()[0] for i := 1; i < len(v.Children()); i++ { stack = append(stack, v.Children()[i]) diff --git a/pkg/planner/core/casetest/testdata/integration_suite_out.json b/pkg/planner/core/casetest/testdata/integration_suite_out.json index 5b1cd79397748..ffe733cb7fec8 100644 --- a/pkg/planner/core/casetest/testdata/integration_suite_out.json +++ b/pkg/planner/core/casetest/testdata/integration_suite_out.json @@ -93,25 +93,25 @@ "SQL": "explain format = 'verbose' select count(*) from t3 where b = 0", "Plan": [ "StreamAgg_10 1.00 64.98 root funcs:count(1)->Column#4", - "└─IndexReader_15 0.00 15.08 root index:IndexRangeScan_14", - " └─IndexRangeScan_14 0.00 162.80 cop[tikv] table:t3, index:c(b) range:[0,0], keep order:false" + "└─IndexReader_15 1.00 15.08 root index:IndexRangeScan_14", + " └─IndexRangeScan_14 1.00 162.80 cop[tikv] table:t3, index:c(b) range:[0,0], keep order:false" ] }, { "SQL": "explain format = 'verbose' select /*+ use_index(t3, c) */ count(a) from t3 where b = 0", "Plan": [ "StreamAgg_10 1.00 2001.63 root funcs:count(test.t3.a)->Column#4", - "└─IndexLookUp_17 0.00 1951.73 root ", - " ├─IndexRangeScan_15(Build) 0.00 203.50 cop[tikv] table:t3, index:c(b) range:[0,0], keep order:false", - " └─TableRowIDScan_16(Probe) 0.00 227.31 cop[tikv] table:t3 keep order:false" + "└─IndexLookUp_17 1.00 1951.73 root ", + " ├─IndexRangeScan_15(Build) 1.00 203.50 cop[tikv] table:t3, index:c(b) range:[0,0], keep order:false", + " └─TableRowIDScan_16(Probe) 1.00 227.31 cop[tikv] table:t3 keep order:false" ] }, { "SQL": "explain format = 'verbose' select count(*) from t2 where a = 0", "Plan": [ "StreamAgg_12 1.00 109.57 root funcs:count(1)->Column#4", - "└─TableReader_20 0.00 59.67 root data:Selection_19", - " └─Selection_19 0.00 831.62 cop[tikv] eq(test.t2.a, 0)", + "└─TableReader_20 1.00 59.67 root data:Selection_19", + " └─Selection_19 1.00 831.62 cop[tikv] eq(test.t2.a, 0)", " └─TableFullScan_18 3.00 681.92 cop[tikv] table:t2 keep order:false" ] }, @@ -1370,17 +1370,16 @@ { "SQL": "explain format = 'brief' select count(*) from t1 ta, t1 tb where ta.c1 * ta.c1 > ta.c2 + 10;", "Plan": [ - "HashAgg 1.00 root funcs:count(Column#9)->Column#7", + "HashAgg 1.00 root funcs:count(Column#8)->Column#7", "└─TableReader 1.00 root MppVersion: 2, data:ExchangeSender", " └─ExchangeSender 1.00 mpp[tiflash] ExchangeType: PassThrough", - " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#9", - " └─Projection 80000000.00 mpp[tiflash] Column#8", + " └─HashAgg 1.00 mpp[tiflash] funcs:count(1)->Column#8", + " └─Projection 80000000.00 mpp[tiflash] test.t1.c1", " └─HashJoin 80000000.00 mpp[tiflash] CARTESIAN inner join", " ├─ExchangeReceiver(Build) 8000.00 mpp[tiflash] ", " │ └─ExchangeSender 8000.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", - " │ └─Projection 8000.00 mpp[tiflash] 1->Column#8", - " │ └─Selection 8000.00 mpp[tiflash] gt(mul(test.t1.c1, test.t1.c1), plus(test.t1.c2, 10))", - " │ └─TableFullScan 10000.00 mpp[tiflash] table:ta pushed down filter:empty, keep order:false, stats:pseudo", + " │ └─Selection 8000.00 mpp[tiflash] gt(mul(test.t1.c1, test.t1.c1), plus(test.t1.c2, 10))", + " │ └─TableFullScan 10000.00 mpp[tiflash] table:ta pushed down filter:empty, keep order:false, stats:pseudo", " └─TableFullScan(Probe) 10000.00 mpp[tiflash] table:tb keep order:false, stats:pseudo" ] } diff --git a/pkg/planner/core/casetest/testdata/plan_normalized_suite_out.json b/pkg/planner/core/casetest/testdata/plan_normalized_suite_out.json index 5d6a70fdd8373..d9ad1168af8c3 100644 --- a/pkg/planner/core/casetest/testdata/plan_normalized_suite_out.json +++ b/pkg/planner/core/casetest/testdata/plan_normalized_suite_out.json @@ -426,8 +426,8 @@ "Plan": [ " TableReader root ", " └─ExchangeSender cop[tiflash] ", - " └─Selection cop[tiflash] gt(test.t1.b, ?)", - " └─TableFullScan cop[tiflash] table:t1, range:[?,?], pushed down filter:gt(test.t1.a, ?), gt(test.t1.c, ?), keep order:false" + " └─Selection cop[tiflash] gt(test.t1.c, ?)", + " └─TableFullScan cop[tiflash] table:t1, range:[?,?], pushed down filter:gt(test.t1.a, ?), gt(test.t1.b, ?), keep order:false" ] }, { @@ -461,8 +461,8 @@ "Plan": [ " TableReader root ", " └─ExchangeSender cop[tiflash] ", - " └─Selection cop[tiflash] gt(test.t1.b, ?), gt(test.t1.c, ?), or(gt(test.t1.a, ?), lt(test.t1.b, ?))", - " └─TableFullScan cop[tiflash] table:t1, range:[?,?], pushed down filter:gt(test.t1.a, ?), keep order:false" + " └─Selection cop[tiflash] gt(test.t1.a, ?), gt(test.t1.c, ?), or(gt(test.t1.a, ?), lt(test.t1.b, ?))", + " └─TableFullScan cop[tiflash] table:t1, range:[?,?], pushed down filter:gt(test.t1.b, ?), keep order:false" ] }, { diff --git a/pkg/planner/core/collect_column_stats_usage.go b/pkg/planner/core/collect_column_stats_usage.go index a3f951c526826..3045e6b6a88e2 100644 --- a/pkg/planner/core/collect_column_stats_usage.go +++ b/pkg/planner/core/collect_column_stats_usage.go @@ -21,6 +21,7 @@ import ( "github.com/pingcap/tidb/pkg/infoschema" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/statistics/asyncload" "github.com/pingcap/tidb/pkg/util/filter" @@ -142,7 +143,7 @@ func (c *columnStatsUsageCollector) collectPredicateColumnsForDataSource(ds *Dat c.addPredicateColumnsFromExpressions(ds.PushedDownConds) } -func (c *columnStatsUsageCollector) collectPredicateColumnsForJoin(p *LogicalJoin) { +func (c *columnStatsUsageCollector) collectPredicateColumnsForJoin(p *logicalop.LogicalJoin) { // The only schema change is merging two schemas so there is no new column. // Assume statistics of all the columns in EqualConditions/LeftConditions/RightConditions/OtherConditions are needed. exprs := make([]expression.Expression, 0, len(p.EqualConditions)+len(p.LeftConditions)+len(p.RightConditions)+len(p.OtherConditions)) @@ -161,7 +162,7 @@ func (c *columnStatsUsageCollector) collectPredicateColumnsForJoin(p *LogicalJoi c.addPredicateColumnsFromExpressions(exprs) } -func (c *columnStatsUsageCollector) collectPredicateColumnsForUnionAll(p *LogicalUnionAll) { +func (c *columnStatsUsageCollector) collectPredicateColumnsForUnionAll(p *logicalop.LogicalUnionAll) { // statistics of the ith column of UnionAll come from statistics of the ith column of each child. schemas := make([]*expression.Schema, 0, len(p.Children())) relatedCols := make([]*expression.Column, 0, len(p.Children())) @@ -239,17 +240,17 @@ func (c *columnStatsUsageCollector) collectFromPlan(lp base.LogicalPlan) { case *LogicalTableScan: c.collectPredicateColumnsForDataSource(x.Source) c.addPredicateColumnsFromExpressions(x.AccessConds) - case *LogicalProjection: + case *logicalop.LogicalProjection: // Schema change from children to self. schema := x.Schema() for i, expr := range x.Exprs { c.updateColMapFromExpressions(schema.Columns[i], []expression.Expression{expr}) } - case *LogicalSelection: + case *logicalop.LogicalSelection: // Though the conditions in LogicalSelection are complex conditions which cannot be pushed down to DataSource, we still // regard statistics of the columns in the conditions as needed. c.addPredicateColumnsFromExpressions(x.Conditions) - case *LogicalAggregation: + case *logicalop.LogicalAggregation: // Just assume statistics of all the columns in GroupByItems are needed. c.addPredicateColumnsFromExpressions(x.GroupByItems) // Schema change from children to self. @@ -257,7 +258,7 @@ func (c *columnStatsUsageCollector) collectFromPlan(lp base.LogicalPlan) { for i, aggFunc := range x.AggFuncs { c.updateColMapFromExpressions(schema.Columns[i], aggFunc.Args) } - case *LogicalWindow: + case *logicalop.LogicalWindow: // Statistics of the columns in LogicalWindow.PartitionBy are used in optimizeByShuffle4Window. // We don't use statistics of the columns in LogicalWindow.OrderBy currently. for _, item := range x.PartitionBy { @@ -268,9 +269,9 @@ func (c *columnStatsUsageCollector) collectFromPlan(lp base.LogicalPlan) { for i, col := range windowColumns { c.updateColMapFromExpressions(col, x.WindowFuncDescs[i].Args) } - case *LogicalJoin: + case *logicalop.LogicalJoin: c.collectPredicateColumnsForJoin(x) - case *LogicalApply: + case *logicalop.LogicalApply: c.collectPredicateColumnsForJoin(&x.LogicalJoin) // Assume statistics of correlated columns are needed. // Correlated columns can be found in LogicalApply.Children()[0].Schema(). Since we already visit LogicalApply.Children()[0], @@ -278,32 +279,32 @@ func (c *columnStatsUsageCollector) collectFromPlan(lp base.LogicalPlan) { for _, corCols := range x.CorCols { c.addPredicateColumn(&corCols.Column) } - case *LogicalSort: + case *logicalop.LogicalSort: // Assume statistics of all the columns in ByItems are needed. for _, item := range x.ByItems { c.addPredicateColumnsFromExpressions([]expression.Expression{item.Expr}) } - case *LogicalTopN: + case *logicalop.LogicalTopN: // Assume statistics of all the columns in ByItems are needed. for _, item := range x.ByItems { c.addPredicateColumnsFromExpressions([]expression.Expression{item.Expr}) } - case *LogicalUnionAll: + case *logicalop.LogicalUnionAll: c.collectPredicateColumnsForUnionAll(x) - case *LogicalPartitionUnionAll: + case *logicalop.LogicalPartitionUnionAll: c.collectPredicateColumnsForUnionAll(&x.LogicalUnionAll) case *LogicalCTE: - // Visit seedPartLogicalPlan and recursivePartLogicalPlan first. - c.collectFromPlan(x.Cte.seedPartLogicalPlan) - if x.Cte.recursivePartLogicalPlan != nil { - c.collectFromPlan(x.Cte.recursivePartLogicalPlan) + // Visit SeedPartLogicalPlan and RecursivePartLogicalPlan first. + c.collectFromPlan(x.Cte.SeedPartLogicalPlan) + if x.Cte.RecursivePartLogicalPlan != nil { + c.collectFromPlan(x.Cte.RecursivePartLogicalPlan) } // Schema change from seedPlan/recursivePlan to self. columns := x.Schema().Columns - seedColumns := x.Cte.seedPartLogicalPlan.Schema().Columns + seedColumns := x.Cte.SeedPartLogicalPlan.Schema().Columns var recursiveColumns []*expression.Column - if x.Cte.recursivePartLogicalPlan != nil { - recursiveColumns = x.Cte.recursivePartLogicalPlan.Schema().Columns + if x.Cte.RecursivePartLogicalPlan != nil { + recursiveColumns = x.Cte.RecursivePartLogicalPlan.Schema().Columns } relatedCols := make([]*expression.Column, 0, 2) for i, col := range columns { @@ -320,7 +321,7 @@ func (c *columnStatsUsageCollector) collectFromPlan(lp base.LogicalPlan) { c.addPredicateColumn(col) } } - case *LogicalCTETable: + case *logicalop.LogicalCTETable: // Schema change from seedPlan to self. for i, col := range x.Schema().Columns { c.updateColMap(col, []*expression.Column{x.SeedSchema.Columns[i]}) @@ -346,7 +347,7 @@ func (c *columnStatsUsageCollector) collectFromPlan(lp base.LogicalPlan) { // CollectColumnStatsUsage collects column stats usage from logical plan. // predicate indicates whether to collect predicate columns and histNeeded indicates whether to collect histogram-needed columns. -// First return value: predicate columns (nil if predicate is false) +// First return value: predicate columns // Second return value: histogram-needed columns (nil if histNeeded is false) // Third return value: ds.PhysicalTableID from all DataSource (always collected) func CollectColumnStatsUsage(lp base.LogicalPlan, histNeeded bool) ( diff --git a/pkg/planner/core/collect_column_stats_usage_test.go b/pkg/planner/core/collect_column_stats_usage_test.go index 72e976828fc14..fd26b49e11878 100644 --- a/pkg/planner/core/collect_column_stats_usage_test.go +++ b/pkg/planner/core/collect_column_stats_usage_test.go @@ -31,13 +31,15 @@ import ( func getColumnName(t *testing.T, is infoschema.InfoSchema, tblColID model.TableItemID, comment string) string { var tblInfo *model.TableInfo var prefix string - if tbl, ok := is.TableByID(tblColID.TableID); ok { + if tbl, ok := is.TableByID(context.Background(), tblColID.TableID); ok { tblInfo = tbl.Meta() prefix = tblInfo.Name.L + "." } else { db, exists := is.SchemaByName(model.NewCIStr("test")) require.True(t, exists, comment) - for _, tbl := range db.Tables { + tblInfos, err := is.SchemaTableInfos(context.Background(), db.Name) + require.NoError(t, err) + for _, tbl := range tblInfos { pi := tbl.GetPartitionInfo() if pi == nil { continue diff --git a/pkg/planner/core/common_plans.go b/pkg/planner/core/common_plans.go index 2d67625ffc7ee..dacc7fe83bcac 100644 --- a/pkg/planner/core/common_plans.go +++ b/pkg/planner/core/common_plans.go @@ -28,6 +28,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/physicalop" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/planner/util/costusage" @@ -261,13 +262,21 @@ const ( ) // SQLBindPlan represents a plan for SQL bind. +// One SQLBindPlan can be either global or session, and can only contain one type of operation, but can contain multiple +// operations of that type. type SQLBindPlan struct { baseSchemaProducer - SQLBindOp SQLBindOpType + IsGlobal bool + SQLBindOp SQLBindOpType + Details []*SQLBindOpDetail +} + +// SQLBindOpDetail represents the detail of an operation on a single binding. +// Different SQLBindOpType use different fields in this struct. +type SQLBindOpDetail struct { NormdOrigSQL string BindSQL string - IsGlobal bool BindStmt ast.StmtNode Db string Charset string @@ -307,7 +316,7 @@ func (s *Simple) MemoryUsage() (sum int64) { // // Used for simple statements executing in coprocessor. type PhysicalSimpleWrapper struct { - basePhysicalPlan + physicalop.BasePhysicalPlan Inner Simple } @@ -317,24 +326,31 @@ func (p *PhysicalSimpleWrapper) MemoryUsage() (sum int64) { return } - sum = p.basePhysicalPlan.MemoryUsage() + p.Inner.MemoryUsage() + sum = p.BasePhysicalPlan.MemoryUsage() + p.Inner.MemoryUsage() return } // InsertGeneratedColumns is for completing generated columns in Insert. // We resolve generation expressions in plan, and eval those in executor. type InsertGeneratedColumns struct { - Columns []*ast.ColumnName Exprs []expression.Expression OnDuplicates []*expression.Assignment } +// Copy clones InsertGeneratedColumns. +func (i InsertGeneratedColumns) Copy() InsertGeneratedColumns { + return InsertGeneratedColumns{ + Exprs: util.CloneExpressions(i.Exprs), + OnDuplicates: util.CloneAssignments(i.OnDuplicates), + } +} + // MemoryUsage return the memory usage of InsertGeneratedColumns func (i *InsertGeneratedColumns) MemoryUsage() (sum int64) { if i == nil { return } - sum = size.SizeOfSlice*3 + int64(cap(i.Columns)+cap(i.OnDuplicates))*size.SizeOfPointer + int64(cap(i.Exprs))*size.SizeOfInterface + sum = size.SizeOfSlice*3 + int64(cap(i.OnDuplicates))*size.SizeOfPointer + int64(cap(i.Exprs))*size.SizeOfInterface for _, expr := range i.Exprs { sum += expr.MemoryUsage() @@ -349,21 +365,22 @@ func (i *InsertGeneratedColumns) MemoryUsage() (sum int64) { type Insert struct { baseSchemaProducer - Table table.Table - tableSchema *expression.Schema - tableColNames types.NameSlice - Columns []*ast.ColumnName + Table table.Table `plan-cache-clone:"shallow"` + tableSchema *expression.Schema `plan-cache-clone:"shallow"` + tableColNames types.NameSlice `plan-cache-clone:"shallow"` + Columns []*ast.ColumnName `plan-cache-clone:"shallow"` Lists [][]expression.Expression OnDuplicate []*expression.Assignment - Schema4OnDuplicate *expression.Schema - names4OnDuplicate types.NameSlice + Schema4OnDuplicate *expression.Schema `plan-cache-clone:"shallow"` + names4OnDuplicate types.NameSlice `plan-cache-clone:"shallow"` GenCols InsertGeneratedColumns SelectPlan base.PhysicalPlan IsReplace bool + IgnoreErr bool // NeedFillDefaultValue is true when expr in value list reference other column. NeedFillDefaultValue bool @@ -372,8 +389,8 @@ type Insert struct { RowLen int - FKChecks []*FKCheck - FKCascades []*FKCascade + FKChecks []*FKCheck `plan-cache-clone:"must-nil"` + FKCascades []*FKCascade `plan-cache-clone:"must-nil"` } // MemoryUsage return the memory usage of Insert @@ -425,20 +442,25 @@ type Update struct { AllAssignmentsAreConstant bool + IgnoreError bool + VirtualAssignmentsOffset int SelectPlan base.PhysicalPlan - TblColPosInfos TblColPosInfoSlice + // TblColPosInfos is for multi-table update statement. + // It records the column position of each related table. + TblColPosInfos TblColPosInfoSlice `plan-cache-clone:"shallow"` // Used when partition sets are given. // e.g. update t partition(p0) set a = 1; - PartitionedTable []table.PartitionedTable + PartitionedTable []table.PartitionedTable `plan-cache-clone:"must-nil"` - tblID2Table map[int64]table.Table + // tblID2Table stores related tables' info of this Update statement. + tblID2Table map[int64]table.Table `plan-cache-clone:"shallow"` - FKChecks map[int64][]*FKCheck - FKCascades map[int64][]*FKCascade + FKChecks map[int64][]*FKCheck `plan-cache-clone:"must-nil"` + FKCascades map[int64][]*FKCascade `plan-cache-clone:"must-nil"` } // MemoryUsage return the memory usage of Update @@ -477,10 +499,10 @@ type Delete struct { SelectPlan base.PhysicalPlan - TblColPosInfos TblColPosInfoSlice + TblColPosInfos TblColPosInfoSlice `plan-cache-clone:"shallow"` - FKChecks map[int64][]*FKCheck - FKCascades map[int64][]*FKCascade + FKChecks map[int64][]*FKCheck `plan-cache-clone:"must-nil"` + FKCascades map[int64][]*FKCascade `plan-cache-clone:"must-nil"` } // MemoryUsage return the memory usage of Delete diff --git a/pkg/planner/core/constraint/BUILD.bazel b/pkg/planner/core/constraint/BUILD.bazel new file mode 100644 index 0000000000000..6fd507bd5f9bc --- /dev/null +++ b/pkg/planner/core/constraint/BUILD.bazel @@ -0,0 +1,12 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "constraint", + srcs = ["exprs.go"], + importpath = "github.com/pingcap/tidb/pkg/planner/core/constraint", + visibility = ["//visibility:public"], + deps = [ + "//pkg/expression", + "//pkg/planner/core/base", + ], +) diff --git a/pkg/planner/core/constraint/exprs.go b/pkg/planner/core/constraint/exprs.go new file mode 100644 index 0000000000000..07d5ea9c6aeec --- /dev/null +++ b/pkg/planner/core/constraint/exprs.go @@ -0,0 +1,42 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package constraint + +import ( + "github.com/pingcap/tidb/pkg/expression" + "github.com/pingcap/tidb/pkg/planner/core/base" +) + +// DeleteTrueExprs deletes the surely true expressions +func DeleteTrueExprs(p base.LogicalPlan, conds []expression.Expression) []expression.Expression { + newConds := make([]expression.Expression, 0, len(conds)) + for _, cond := range conds { + con, ok := cond.(*expression.Constant) + if !ok { + newConds = append(newConds, cond) + continue + } + if expression.MaybeOverOptimized4PlanCache(p.SCtx().GetExprCtx(), []expression.Expression{con}) { + newConds = append(newConds, cond) + continue + } + sc := p.SCtx().GetSessionVars().StmtCtx + if isTrue, err := con.Value.ToBool(sc.TypeCtx()); err == nil && isTrue == 1 { + continue + } + newConds = append(newConds, cond) + } + return newConds +} diff --git a/pkg/planner/core/core_init.go b/pkg/planner/core/core_init.go index e0d5c4c2b02f1..aa64607250bef 100644 --- a/pkg/planner/core/core_init.go +++ b/pkg/planner/core/core_init.go @@ -29,16 +29,40 @@ func init() { // For code refactor init. utilfuncp.AddSelection = addSelection utilfuncp.FindBestTask = findBestTask + utilfuncp.PruneByItems = pruneByItems utilfuncp.HasMaxOneRowUtil = HasMaxOneRow utilfuncp.GetTaskPlanCost = getTaskPlanCost utilfuncp.CanPushToCopImpl = canPushToCopImpl - utilfuncp.GetStreamAggs = getStreamAggs - utilfuncp.GetHashAggs = getHashAggs - utilfuncp.PruneByItems = pruneByItems + utilfuncp.PushDownTopNForBaseLogicalPlan = pushDownTopNForBaseLogicalPlan + utilfuncp.FindBestTask4LogicalShow = findBestTask4LogicalShow + utilfuncp.FindBestTask4LogicalCTETable = findBestTask4LogicalCTETable + utilfuncp.FindBestTask4LogicalMemTable = findBestTask4LogicalMemTable + utilfuncp.FindBestTask4LogicalTableDual = findBestTask4LogicalTableDual + utilfuncp.FindBestTask4LogicalShowDDLJobs = findBestTask4LogicalShowDDLJobs + utilfuncp.ExhaustPhysicalPlans4LogicalSort = exhaustPhysicalPlans4LogicalSort + utilfuncp.ExhaustPhysicalPlans4LogicalTopN = exhaustPhysicalPlans4LogicalTopN + utilfuncp.ExhaustPhysicalPlans4LogicalLock = exhaustPhysicalPlans4LogicalLock + utilfuncp.ExhaustPhysicalPlans4LogicalJoin = exhaustPhysicalPlans4LogicalJoin + utilfuncp.ExhaustPhysicalPlans4LogicalApply = exhaustPhysicalPlans4LogicalApply + utilfuncp.ExhaustPhysicalPlans4LogicalLimit = exhaustPhysicalPlans4LogicalLimit + utilfuncp.ExhaustPhysicalPlans4LogicalWindow = exhaustPhysicalPlans4LogicalWindow + utilfuncp.ExhaustPhysicalPlans4LogicalExpand = exhaustPhysicalPlans4LogicalExpand + utilfuncp.ExhaustPhysicalPlans4LogicalUnionAll = exhaustPhysicalPlans4LogicalUnionAll + utilfuncp.ExhaustPhysicalPlans4LogicalSequence = exhaustPhysicalPlans4LogicalSequence + utilfuncp.ExhaustPhysicalPlans4LogicalSelection = exhaustPhysicalPlans4LogicalSelection utilfuncp.ExhaustPhysicalPlans4LogicalMaxOneRow = exhaustPhysicalPlans4LogicalMaxOneRow + utilfuncp.ExhaustPhysicalPlans4LogicalUnionScan = exhaustPhysicalPlans4LogicalUnionScan + utilfuncp.ExhaustPhysicalPlans4LogicalProjection = exhaustPhysicalPlans4LogicalProjection + utilfuncp.ExhaustPhysicalPlans4LogicalAggregation = exhaustPhysicalPlans4LogicalAggregation + utilfuncp.ExhaustPhysicalPlans4LogicalPartitionUnionAll = exhaustPhysicalPlans4LogicalPartitionUnionAll + utilfuncp.GetActualProbeCntFromProbeParents = getActualProbeCntFromProbeParents + utilfuncp.GetEstimatedProbeCntFromProbeParents = getEstimatedProbeCntFromProbeParents utilfuncp.AppendCandidate4PhysicalOptimizeOp = appendCandidate4PhysicalOptimizeOp + utilfuncp.PushDownTopNForBaseLogicalPlan = pushDownTopNForBaseLogicalPlan + utilfuncp.AttachPlan2Task = attachPlan2Task + utilfuncp.WindowIsTopN = windowIsTopN // For mv index init. cardinality.GetTblInfoForUsedStatsByPhysicalID = getTblInfoForUsedStatsByPhysicalID diff --git a/pkg/planner/core/enforce_mpp_test.go b/pkg/planner/core/enforce_mpp_test.go index f161f7b7bd7b0..896958fa59705 100644 --- a/pkg/planner/core/enforce_mpp_test.go +++ b/pkg/planner/core/enforce_mpp_test.go @@ -15,6 +15,7 @@ package core_test import ( + "context" "fmt" "strconv" "testing" @@ -40,7 +41,9 @@ func TestRowSizeInMPP(t *testing.T) { is := dom.InfoSchema() db, exists := is.SchemaByName(model.NewCIStr("test")) require.True(t, exists) - for _, tblInfo := range db.Tables { + tblInfos, err := is.SchemaTableInfos(context.Background(), db.Name) + require.NoError(t, err) + for _, tblInfo := range tblInfos { if tblInfo.Name.L == "t" { tblInfo.TiFlashReplica = &model.TiFlashReplicaInfo{ Count: 1, diff --git a/pkg/planner/core/exhaust_physical_plans.go b/pkg/planner/core/exhaust_physical_plans.go index dc691f3cda54b..9c7b9d9233bb3 100644 --- a/pkg/planner/core/exhaust_physical_plans.go +++ b/pkg/planner/core/exhaust_physical_plans.go @@ -15,12 +15,10 @@ package core import ( - "bytes" "fmt" "math" "slices" "strings" - "unsafe" "github.com/pingcap/errors" "github.com/pingcap/failpoint" @@ -39,20 +37,17 @@ import ( "github.com/pingcap/tidb/pkg/planner/util/fixcontrol" "github.com/pingcap/tidb/pkg/statistics" "github.com/pingcap/tidb/pkg/types" - "github.com/pingcap/tidb/pkg/util/chunk" - "github.com/pingcap/tidb/pkg/util/collate" h "github.com/pingcap/tidb/pkg/util/hint" "github.com/pingcap/tidb/pkg/util/logutil" "github.com/pingcap/tidb/pkg/util/plancodec" "github.com/pingcap/tidb/pkg/util/ranger" - rangerctx "github.com/pingcap/tidb/pkg/util/ranger/context" "github.com/pingcap/tidb/pkg/util/set" - "github.com/pingcap/tidb/pkg/util/size" "github.com/pingcap/tipb/go-tipb" "go.uber.org/zap" ) -func exhaustPhysicalPlans4LogicalUnionScan(p *LogicalUnionScan, prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { +func exhaustPhysicalPlans4LogicalUnionScan(lp base.LogicalPlan, prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { + p := lp.(*logicalop.LogicalUnionScan) if prop.IsFlashProp() { p.SCtx().GetSessionVars().RaiseWarningWhenMPPEnforced( "MPP mode may be blocked because operator `UnionScan` is not supported now.") @@ -83,7 +78,7 @@ func findMaxPrefixLen(candidates [][]*expression.Column, keys []*expression.Colu return maxLen } -func moveEqualToOtherConditions(p *LogicalJoin, offsets []int) []expression.Expression { +func moveEqualToOtherConditions(p *logicalop.LogicalJoin, offsets []int) []expression.Expression { // Construct used equal condition set based on the equal condition offsets. usedEqConds := set.NewIntSet() for _, eqCondIdx := range offsets { @@ -119,10 +114,10 @@ func (p *PhysicalMergeJoin) tryToGetChildReqProp(prop *property.PhysicalProperty if !prop.IsPrefix(lProp) && !prop.IsPrefix(rProp) { return nil, false } - if prop.IsPrefix(rProp) && p.JoinType == LeftOuterJoin { + if prop.IsPrefix(rProp) && p.JoinType == logicalop.LeftOuterJoin { return nil, false } - if prop.IsPrefix(lProp) && p.JoinType == RightOuterJoin { + if prop.IsPrefix(lProp) && p.JoinType == logicalop.RightOuterJoin { return nil, false } } @@ -146,7 +141,7 @@ func checkJoinKeyCollation(leftKeys, rightKeys []*expression.Column) bool { } // GetMergeJoin convert the logical join to physical merge join based on the physical property. -func GetMergeJoin(p *LogicalJoin, prop *property.PhysicalProperty, schema *expression.Schema, statsInfo *property.StatsInfo, leftStatsInfo *property.StatsInfo, rightStatsInfo *property.StatsInfo) []base.PhysicalPlan { +func GetMergeJoin(p *logicalop.LogicalJoin, prop *property.PhysicalProperty, schema *expression.Schema, statsInfo *property.StatsInfo, leftStatsInfo *property.StatsInfo, rightStatsInfo *property.StatsInfo) []base.PhysicalPlan { joins := make([]base.PhysicalPlan, 0, len(p.LeftProperties)+1) // The LeftProperties caches all the possible properties that are provided by its children. leftJoinKeys, rightJoinKeys, isNullEQ, hasNullEQ := p.GetJoinKeys() @@ -215,7 +210,7 @@ func GetMergeJoin(p *LogicalJoin, prop *property.PhysicalProperty, schema *expre reqProps[0].ExpectedCnt = leftStatsInfo.RowCount * expCntScale reqProps[1].ExpectedCnt = rightStatsInfo.RowCount * expCntScale } - mergeJoin.childrenReqProps = reqProps + mergeJoin.SetChildrenReqProps(reqProps) _, desc := prop.AllSameOrder() mergeJoin.Desc = desc joins = append(joins, mergeJoin) @@ -282,7 +277,7 @@ func getNewNullEQByOffsets(oldNullEQ []bool, offsets []int) []bool { return newNullEQ } -func getEnforcedMergeJoin(p *LogicalJoin, prop *property.PhysicalProperty, schema *expression.Schema, statsInfo *property.StatsInfo) []base.PhysicalPlan { +func getEnforcedMergeJoin(p *logicalop.LogicalJoin, prop *property.PhysicalProperty, schema *expression.Schema, statsInfo *property.StatsInfo) []base.PhysicalPlan { // Check whether SMJ can satisfy the required property leftJoinKeys, rightJoinKeys, isNullEQ, hasNullEQ := p.GetJoinKeys() // TODO: support null equal join keys for merge join @@ -326,10 +321,10 @@ func getEnforcedMergeJoin(p *LogicalJoin, prop *property.PhysicalProperty, schem return nil } // If the output wants the order of the inner side. We should reject it since we might add null-extend rows of that side. - if p.JoinType == LeftOuterJoin && hasRightColInProp { + if p.JoinType == logicalop.LeftOuterJoin && hasRightColInProp { return nil } - if p.JoinType == RightOuterJoin && hasLeftColInProp { + if p.JoinType == logicalop.RightOuterJoin && hasLeftColInProp { return nil } } @@ -361,7 +356,7 @@ func getEnforcedMergeJoin(p *LogicalJoin, prop *property.PhysicalProperty, schem } enforcedPhysicalMergeJoin := PhysicalMergeJoin{basePhysicalJoin: baseJoin, Desc: desc}.Init(p.SCtx(), statsInfo.ScaleByExpectCnt(prop.ExpectedCnt), p.QueryBlockOffset()) enforcedPhysicalMergeJoin.SetSchema(schema) - enforcedPhysicalMergeJoin.childrenReqProps = []*property.PhysicalProperty{lProp, rProp} + enforcedPhysicalMergeJoin.SetChildrenReqProps([]*property.PhysicalProperty{lProp, rProp}) enforcedPhysicalMergeJoin.initCompareFuncs() return []base.PhysicalPlan{enforcedPhysicalMergeJoin} } @@ -373,11 +368,11 @@ func (p *PhysicalMergeJoin) initCompareFuncs() { } } -func shouldSkipHashJoin(p *LogicalJoin) bool { +func shouldSkipHashJoin(p *logicalop.LogicalJoin) bool { return (p.PreferJoinType&h.PreferNoHashJoin) > 0 || (p.SCtx().GetSessionVars().DisableHashJoin) } -func getHashJoins(p *LogicalJoin, prop *property.PhysicalProperty) (joins []base.PhysicalPlan, forced bool) { +func getHashJoins(p *logicalop.LogicalJoin, prop *property.PhysicalProperty) (joins []base.PhysicalPlan, forced bool) { if !prop.IsSortItemEmpty() { // hash join doesn't promise any orders return } @@ -392,7 +387,7 @@ func getHashJoins(p *LogicalJoin, prop *property.PhysicalProperty) (joins []base joins = make([]base.PhysicalPlan, 0, 2) switch p.JoinType { - case SemiJoin, AntiSemiJoin, LeftOuterSemiJoin, AntiLeftOuterSemiJoin: + case logicalop.SemiJoin, logicalop.AntiSemiJoin, logicalop.LeftOuterSemiJoin, logicalop.AntiLeftOuterSemiJoin: joins = append(joins, getHashJoin(p, prop, 1, false)) if forceLeftToBuild || forceRightToBuild { // Do not support specifying the build and probe side for semi join. @@ -400,21 +395,21 @@ func getHashJoins(p *LogicalJoin, prop *property.PhysicalProperty) (joins []base forceLeftToBuild = false forceRightToBuild = false } - case LeftOuterJoin: + case logicalop.LeftOuterJoin: if !forceLeftToBuild { joins = append(joins, getHashJoin(p, prop, 1, false)) } if !forceRightToBuild { joins = append(joins, getHashJoin(p, prop, 1, true)) } - case RightOuterJoin: + case logicalop.RightOuterJoin: if !forceLeftToBuild { joins = append(joins, getHashJoin(p, prop, 0, true)) } if !forceRightToBuild { joins = append(joins, getHashJoin(p, prop, 0, false)) } - case InnerJoin: + case logicalop.InnerJoin: if forceLeftToBuild { joins = append(joins, getHashJoin(p, prop, 0, false)) } else if forceRightToBuild { @@ -437,7 +432,7 @@ func getHashJoins(p *LogicalJoin, prop *property.PhysicalProperty) (joins []base return } -func getHashJoin(p *LogicalJoin, prop *property.PhysicalProperty, innerIdx int, useOuterToBuild bool) *PhysicalHashJoin { +func getHashJoin(p *logicalop.LogicalJoin, prop *property.PhysicalProperty, innerIdx int, useOuterToBuild bool) *PhysicalHashJoin { chReqProps := make([]*property.PhysicalProperty, 2) chReqProps[innerIdx] = &property.PhysicalProperty{ExpectedCnt: math.MaxFloat64, CTEProducerStatus: prop.CTEProducerStatus} chReqProps[1-innerIdx] = &property.PhysicalProperty{ExpectedCnt: math.MaxFloat64, CTEProducerStatus: prop.CTEProducerStatus} @@ -453,7 +448,7 @@ func getHashJoin(p *LogicalJoin, prop *property.PhysicalProperty, innerIdx int, // When inner plan is TableReader, the parameter `ranges` will be nil. Because pk only have one column. So all of its range // is generated during execution time. func constructIndexJoin( - p *LogicalJoin, + p *logicalop.LogicalJoin, prop *property.PhysicalProperty, outerIdx int, innerTask base.Task, @@ -553,7 +548,7 @@ func constructIndexJoin( join := PhysicalIndexJoin{ basePhysicalJoin: baseJoin, - innerTask: innerTask, + innerPlan: innerTask.Plan(), KeyOff2IdxOff: newKeyOff, Ranges: ranges, CompareFilters: compareFilters, @@ -568,7 +563,7 @@ func constructIndexJoin( } func constructIndexMergeJoin( - p *LogicalJoin, + p *logicalop.LogicalJoin, prop *property.PhysicalProperty, outerIdx int, innerTask base.Task, @@ -676,7 +671,7 @@ func constructIndexMergeJoin( } func constructIndexHashJoin( - p *LogicalJoin, + p *logicalop.LogicalJoin, prop *property.PhysicalProperty, outerIdx int, innerTask base.Task, @@ -704,7 +699,7 @@ func constructIndexHashJoin( // First of all, we'll check whether the inner child is DataSource. // Then, we will extract the join keys of p's equal conditions. Then check whether all of them are just the primary key // or match some part of on index. If so we will choose the best one and construct a index join. -func getIndexJoinByOuterIdx(p *LogicalJoin, prop *property.PhysicalProperty, outerIdx int) (joins []base.PhysicalPlan) { +func getIndexJoinByOuterIdx(p *logicalop.LogicalJoin, prop *property.PhysicalProperty, outerIdx int) (joins []base.PhysicalPlan) { outerChild, innerChild := p.Children()[outerIdx], p.Children()[1-outerIdx] all, _ := prop.AllSameOrder() // If the order by columns are not all from outer child, index join cannot promise the order. @@ -756,7 +751,7 @@ type indexJoinInnerChildWrapper struct { zippedChildren []base.LogicalPlan } -func extractIndexJoinInnerChildPattern(p *LogicalJoin, innerChild base.LogicalPlan) *indexJoinInnerChildWrapper { +func extractIndexJoinInnerChildPattern(p *logicalop.LogicalJoin, innerChild base.LogicalPlan) *indexJoinInnerChildWrapper { wrapper := &indexJoinInnerChildWrapper{} nextChild := func(pp base.LogicalPlan) base.LogicalPlan { if len(pp.Children()) != 1 { @@ -770,12 +765,12 @@ childLoop: case *DataSource: wrapper.ds = child break childLoop - case *LogicalProjection, *LogicalSelection, *LogicalAggregation: + case *logicalop.LogicalProjection, *logicalop.LogicalSelection, *logicalop.LogicalAggregation: if !p.SCtx().GetSessionVars().EnableINLJoinInnerMultiPattern { return nil } wrapper.zippedChildren = append(wrapper.zippedChildren, child) - case *LogicalUnionScan: + case *logicalop.LogicalUnionScan: wrapper.hasDitryWrite = true wrapper.zippedChildren = append(wrapper.zippedChildren, child) default: @@ -788,45 +783,15 @@ childLoop: return wrapper } -func getIndexJoinBuildHelper(p *LogicalJoin, ds *DataSource, innerJoinKeys []*expression.Column, checkPathValid func(path *util.AccessPath) bool, outerJoinKeys []*expression.Column) (*indexJoinBuildHelper, []int) { - helper := &indexJoinBuildHelper{ - join: p, - innerPlan: ds, - } - for _, path := range ds.PossibleAccessPaths { - if checkPathValid(path) { - emptyRange, err := helper.analyzeLookUpFilters(path, ds, innerJoinKeys, outerJoinKeys, false) - if emptyRange { - return nil, nil - } - if err != nil { - logutil.BgLogger().Warn("build index join failed", zap.Error(err)) - } - } - } - if helper.chosenPath == nil { - return nil, nil - } - keyOff2IdxOff := make([]int, len(innerJoinKeys)) - for i := range keyOff2IdxOff { - keyOff2IdxOff[i] = -1 - } - for idxOff, keyOff := range helper.idxOff2KeyOff { - if keyOff != -1 { - keyOff2IdxOff[keyOff] = idxOff - } - } - return helper, keyOff2IdxOff -} - // buildIndexJoinInner2TableScan builds a TableScan as the inner child for an // IndexJoin if possible. // If the inner side of a index join is a TableScan, only one tuple will be // fetched from the inner side for every tuple from the outer side. This will be // promised to be no worse than building IndexScan as the inner child. func buildIndexJoinInner2TableScan( - p *LogicalJoin, - prop *property.PhysicalProperty, wrapper *indexJoinInnerChildWrapper, innerJoinKeys, outerJoinKeys []*expression.Column, + p *logicalop.LogicalJoin, + prop *property.PhysicalProperty, wrapper *indexJoinInnerChildWrapper, + innerJoinKeys, outerJoinKeys []*expression.Column, outerIdx int, avgInnerRowCnt float64) (joins []base.PhysicalPlan) { ds := wrapper.ds var tblPath *util.AccessPath @@ -843,22 +808,22 @@ func buildIndexJoinInner2TableScan( newOuterJoinKeys := make([]*expression.Column, 0) var ranges ranger.MutableRanges = ranger.Ranges{} var innerTask, innerTask2 base.Task - var helper *indexJoinBuildHelper + var indexJoinResult *indexJoinPathResult if ds.TableInfo.IsCommonHandle { - helper, keyOff2IdxOff = getIndexJoinBuildHelper(p, ds, innerJoinKeys, func(path *util.AccessPath) bool { return path.IsCommonHandlePath }, outerJoinKeys) - if helper == nil { + indexJoinResult, keyOff2IdxOff = getBestIndexJoinPathResult(p, ds, innerJoinKeys, outerJoinKeys, func(path *util.AccessPath) bool { return path.IsCommonHandlePath }) + if indexJoinResult == nil { return nil } - rangeInfo := helper.buildRangeDecidedByInformation(helper.chosenPath.IdxCols, outerJoinKeys) - innerTask = constructInnerTableScanTask(p, wrapper, helper.chosenRanges.Range(), outerJoinKeys, rangeInfo, false, false, avgInnerRowCnt) + rangeInfo := indexJoinPathRangeInfo(p.SCtx(), outerJoinKeys, indexJoinResult) + innerTask = constructInnerTableScanTask(p, prop, wrapper, indexJoinResult.chosenRanges.Range(), outerJoinKeys, rangeInfo, false, false, avgInnerRowCnt) // The index merge join's inner plan is different from index join, so we // should construct another inner plan for it. // Because we can't keep order for union scan, if there is a union scan in inner task, // we can't construct index merge join. if !wrapper.hasDitryWrite { - innerTask2 = constructInnerTableScanTask(p, wrapper, helper.chosenRanges.Range(), outerJoinKeys, rangeInfo, true, !prop.IsSortItemEmpty() && prop.SortItems[0].Desc, avgInnerRowCnt) + innerTask2 = constructInnerTableScanTask(p, prop, wrapper, indexJoinResult.chosenRanges.Range(), outerJoinKeys, rangeInfo, true, !prop.IsSortItemEmpty() && prop.SortItems[0].Desc, avgInnerRowCnt) } - ranges = helper.chosenRanges + ranges = indexJoinResult.chosenRanges } else { pkMatched := false pkCol := ds.getPKIsHandleCol() @@ -890,22 +855,22 @@ func buildIndexJoinInner2TableScan( } buffer.WriteString("]") rangeInfo := buffer.String() - innerTask = constructInnerTableScanTask(p, wrapper, ranges, outerJoinKeys, rangeInfo, false, false, avgInnerRowCnt) + innerTask = constructInnerTableScanTask(p, prop, wrapper, ranges, outerJoinKeys, rangeInfo, false, false, avgInnerRowCnt) // The index merge join's inner plan is different from index join, so we // should construct another inner plan for it. // Because we can't keep order for union scan, if there is a union scan in inner task, // we can't construct index merge join. if !wrapper.hasDitryWrite { - innerTask2 = constructInnerTableScanTask(p, wrapper, ranges, outerJoinKeys, rangeInfo, true, !prop.IsSortItemEmpty() && prop.SortItems[0].Desc, avgInnerRowCnt) + innerTask2 = constructInnerTableScanTask(p, prop, wrapper, ranges, outerJoinKeys, rangeInfo, true, !prop.IsSortItemEmpty() && prop.SortItems[0].Desc, avgInnerRowCnt) } } var ( path *util.AccessPath lastColMng *ColWithCmpFuncManager ) - if helper != nil { - path = helper.chosenPath - lastColMng = helper.lastColManager + if indexJoinResult != nil { + path = indexJoinResult.chosenPath + lastColMng = indexJoinResult.lastColManager } joins = make([]base.PhysicalPlan, 0, 3) failpoint.Inject("MockOnlyEnableIndexHashJoin", func(val failpoint.Value) { @@ -924,7 +889,7 @@ func buildIndexJoinInner2TableScan( } func buildIndexJoinInner2IndexScan( - p *LogicalJoin, + p *logicalop.LogicalJoin, prop *property.PhysicalProperty, wrapper *indexJoinInnerChildWrapper, innerJoinKeys, outerJoinKeys []*expression.Column, outerIdx int, avgInnerRowCnt float64) (joins []base.PhysicalPlan) { ds := wrapper.ds @@ -942,99 +907,51 @@ func buildIndexJoinInner2IndexScan( } return false } - helper, keyOff2IdxOff := getIndexJoinBuildHelper(p, ds, innerJoinKeys, indexValid, outerJoinKeys) - if helper == nil { + indexJoinResult, keyOff2IdxOff := getBestIndexJoinPathResult(p, ds, innerJoinKeys, outerJoinKeys, indexValid) + if indexJoinResult == nil { return nil } joins = make([]base.PhysicalPlan, 0, 3) - rangeInfo := helper.buildRangeDecidedByInformation(helper.chosenPath.IdxCols, outerJoinKeys) + rangeInfo := indexJoinPathRangeInfo(p.SCtx(), outerJoinKeys, indexJoinResult) maxOneRow := false - if helper.chosenPath.Index.Unique && helper.usedColsLen == len(helper.chosenPath.FullIdxCols) { - l := len(helper.chosenAccess) + if indexJoinResult.chosenPath.Index.Unique && indexJoinResult.usedColsLen == len(indexJoinResult.chosenPath.FullIdxCols) { + l := len(indexJoinResult.chosenAccess) if l == 0 { maxOneRow = true } else { - sf, ok := helper.chosenAccess[l-1].(*expression.ScalarFunction) + sf, ok := indexJoinResult.chosenAccess[l-1].(*expression.ScalarFunction) maxOneRow = ok && (sf.FuncName.L == ast.EQ) } } - innerTask := constructInnerIndexScanTask(p, wrapper, helper.chosenPath, helper.chosenRanges.Range(), helper.chosenRemained, innerJoinKeys, helper.idxOff2KeyOff, rangeInfo, false, false, avgInnerRowCnt, maxOneRow) + innerTask := constructInnerIndexScanTask(p, prop, wrapper, indexJoinResult.chosenPath, indexJoinResult.chosenRanges.Range(), indexJoinResult.chosenRemained, innerJoinKeys, indexJoinResult.idxOff2KeyOff, rangeInfo, false, false, avgInnerRowCnt, maxOneRow) failpoint.Inject("MockOnlyEnableIndexHashJoin", func(val failpoint.Value) { if val.(bool) && !p.SCtx().GetSessionVars().InRestrictedSQL && innerTask != nil { - failpoint.Return(constructIndexHashJoin(p, prop, outerIdx, innerTask, helper.chosenRanges, keyOff2IdxOff, helper.chosenPath, helper.lastColManager)) + failpoint.Return(constructIndexHashJoin(p, prop, outerIdx, innerTask, indexJoinResult.chosenRanges, keyOff2IdxOff, indexJoinResult.chosenPath, indexJoinResult.lastColManager)) } }) if innerTask != nil { - joins = append(joins, constructIndexJoin(p, prop, outerIdx, innerTask, helper.chosenRanges, keyOff2IdxOff, helper.chosenPath, helper.lastColManager, true)...) + joins = append(joins, constructIndexJoin(p, prop, outerIdx, innerTask, indexJoinResult.chosenRanges, keyOff2IdxOff, indexJoinResult.chosenPath, indexJoinResult.lastColManager, true)...) // We can reuse the `innerTask` here since index nested loop hash join // do not need the inner child to promise the order. - joins = append(joins, constructIndexHashJoin(p, prop, outerIdx, innerTask, helper.chosenRanges, keyOff2IdxOff, helper.chosenPath, helper.lastColManager)...) + joins = append(joins, constructIndexHashJoin(p, prop, outerIdx, innerTask, indexJoinResult.chosenRanges, keyOff2IdxOff, indexJoinResult.chosenPath, indexJoinResult.lastColManager)...) } // The index merge join's inner plan is different from index join, so we // should construct another inner plan for it. // Because we can't keep order for union scan, if there is a union scan in inner task, // we can't construct index merge join. if !wrapper.hasDitryWrite { - innerTask2 := constructInnerIndexScanTask(p, wrapper, helper.chosenPath, helper.chosenRanges.Range(), helper.chosenRemained, innerJoinKeys, helper.idxOff2KeyOff, rangeInfo, true, !prop.IsSortItemEmpty() && prop.SortItems[0].Desc, avgInnerRowCnt, maxOneRow) + innerTask2 := constructInnerIndexScanTask(p, prop, wrapper, indexJoinResult.chosenPath, indexJoinResult.chosenRanges.Range(), indexJoinResult.chosenRemained, innerJoinKeys, indexJoinResult.idxOff2KeyOff, rangeInfo, true, !prop.IsSortItemEmpty() && prop.SortItems[0].Desc, avgInnerRowCnt, maxOneRow) if innerTask2 != nil { - joins = append(joins, constructIndexMergeJoin(p, prop, outerIdx, innerTask2, helper.chosenRanges, keyOff2IdxOff, helper.chosenPath, helper.lastColManager)...) + joins = append(joins, constructIndexMergeJoin(p, prop, outerIdx, innerTask2, indexJoinResult.chosenRanges, keyOff2IdxOff, indexJoinResult.chosenPath, indexJoinResult.lastColManager)...) } } return joins } -type indexJoinBuildHelper struct { - join *LogicalJoin - innerPlan *DataSource - - usedColsLen int - usedColsNDV float64 - chosenAccess []expression.Expression - chosenRemained []expression.Expression - idxOff2KeyOff []int - lastColManager *ColWithCmpFuncManager - chosenRanges ranger.MutableRanges - chosenPath *util.AccessPath - - curPossibleUsedKeys []*expression.Column - curNotUsedIndexCols []*expression.Column - curNotUsedColLens []int - // Store the corresponding innerKeys offset of each column in the current path, reset by "resetContextForIndex()" - curIdxOff2KeyOff []int -} - -func (ijHelper *indexJoinBuildHelper) buildRangeDecidedByInformation(idxCols []*expression.Column, outerJoinKeys []*expression.Column) string { - buffer := bytes.NewBufferString("[") - isFirst := true - for idxOff, keyOff := range ijHelper.idxOff2KeyOff { - if keyOff == -1 { - continue - } - if !isFirst { - buffer.WriteString(" ") - } else { - isFirst = false - } - fmt.Fprintf(buffer, "eq(%v, %v)", idxCols[idxOff], outerJoinKeys[keyOff]) - } - ectx := ijHelper.join.SCtx().GetExprCtx().GetEvalCtx() - // It is to build the range info which is used in explain. It is necessary to redact the range info. - redact := ectx.GetTiDBRedactLog() - for _, access := range ijHelper.chosenAccess { - if !isFirst { - buffer.WriteString(" ") - } else { - isFirst = false - } - fmt.Fprintf(buffer, "%v", access.StringWithCtx(ectx, redact)) - } - buffer.WriteString("]") - return buffer.String() -} - // constructInnerTableScanTask is specially used to construct the inner plan for PhysicalIndexJoin. func constructInnerTableScanTask( - p *LogicalJoin, + p *logicalop.LogicalJoin, + prop *property.PhysicalProperty, wrapper *indexJoinInnerChildWrapper, ranges ranger.Ranges, _ []*expression.Column, @@ -1107,61 +1024,60 @@ func constructInnerTableScanTask( ts.PlanPartInfo = copTask.physPlanPartInfo selStats := ts.StatsInfo().Scale(selectivity) ts.addPushedDownSelection(copTask, selStats) - return constructIndexJoinInnerSideTask(p, copTask, ds, nil, wrapper) + return constructIndexJoinInnerSideTask(p, prop, copTask, ds, nil, wrapper) } -func constructInnerByZippedChildren(zippedChildren []base.LogicalPlan, child base.PhysicalPlan) base.PhysicalPlan { +func constructInnerByZippedChildren(prop *property.PhysicalProperty, zippedChildren []base.LogicalPlan, child base.PhysicalPlan) base.PhysicalPlan { for i := len(zippedChildren) - 1; i >= 0; i-- { switch x := zippedChildren[i].(type) { - case *LogicalUnionScan: - child = constructInnerUnionScan(x, child) - case *LogicalProjection: - child = constructInnerProj(x, child) - case *LogicalSelection: - child = constructInnerSel(x, child) - case *LogicalAggregation: - child = constructInnerAgg(x, child) + case *logicalop.LogicalUnionScan: + child = constructInnerUnionScan(prop, x, child) + case *logicalop.LogicalProjection: + child = constructInnerProj(prop, x, child) + case *logicalop.LogicalSelection: + child = constructInnerSel(prop, x, child) + case *logicalop.LogicalAggregation: + child = constructInnerAgg(prop, x, child) } } return child } -func constructInnerAgg(logicalAgg *LogicalAggregation, child base.PhysicalPlan) base.PhysicalPlan { +func constructInnerAgg(prop *property.PhysicalProperty, logicalAgg *logicalop.LogicalAggregation, child base.PhysicalPlan) base.PhysicalPlan { if logicalAgg == nil { return child } - physicalHashAgg := NewPhysicalHashAgg(logicalAgg, logicalAgg.StatsInfo(), nil) + physicalHashAgg := NewPhysicalHashAgg(logicalAgg, logicalAgg.StatsInfo(), prop) physicalHashAgg.SetSchema(logicalAgg.Schema().Clone()) physicalHashAgg.SetChildren(child) return physicalHashAgg } -func constructInnerSel(sel *LogicalSelection, child base.PhysicalPlan) base.PhysicalPlan { +func constructInnerSel(prop *property.PhysicalProperty, sel *logicalop.LogicalSelection, child base.PhysicalPlan) base.PhysicalPlan { if sel == nil { return child } physicalSel := PhysicalSelection{ Conditions: sel.Conditions, - }.Init(sel.SCtx(), sel.StatsInfo(), sel.QueryBlockOffset(), nil) + }.Init(sel.SCtx(), sel.StatsInfo(), sel.QueryBlockOffset(), prop) physicalSel.SetChildren(child) return physicalSel } -func constructInnerProj(proj *LogicalProjection, child base.PhysicalPlan) base.PhysicalPlan { +func constructInnerProj(prop *property.PhysicalProperty, proj *logicalop.LogicalProjection, child base.PhysicalPlan) base.PhysicalPlan { if proj == nil { return child } physicalProj := PhysicalProjection{ - Exprs: proj.Exprs, - CalculateNoDelay: proj.CalculateNoDelay, - AvoidColumnEvaluator: proj.AvoidColumnEvaluator, - }.Init(proj.SCtx(), proj.StatsInfo(), proj.QueryBlockOffset(), nil) + Exprs: proj.Exprs, + CalculateNoDelay: proj.CalculateNoDelay, + }.Init(proj.SCtx(), proj.StatsInfo(), proj.QueryBlockOffset(), prop) physicalProj.SetChildren(child) physicalProj.SetSchema(proj.Schema()) return physicalProj } -func constructInnerUnionScan(us *LogicalUnionScan, reader base.PhysicalPlan) base.PhysicalPlan { +func constructInnerUnionScan(prop *property.PhysicalProperty, us *logicalop.LogicalUnionScan, reader base.PhysicalPlan) base.PhysicalPlan { if us == nil { return reader } @@ -1170,7 +1086,7 @@ func constructInnerUnionScan(us *LogicalUnionScan, reader base.PhysicalPlan) bas physicalUnionScan := PhysicalUnionScan{ Conditions: us.Conditions, HandleCols: us.HandleCols, - }.Init(us.SCtx(), reader.StatsInfo(), us.QueryBlockOffset(), nil) + }.Init(us.SCtx(), reader.StatsInfo(), us.QueryBlockOffset(), prop) physicalUnionScan.SetChildren(reader) return physicalUnionScan } @@ -1226,7 +1142,8 @@ func getColsNDVLowerBoundFromHistColl(colUIDs []int64, histColl *statistics.Hist // constructInnerIndexScanTask is specially used to construct the inner plan for PhysicalIndexJoin. func constructInnerIndexScanTask( - p *LogicalJoin, + p *logicalop.LogicalJoin, + prop *property.PhysicalProperty, wrapper *indexJoinInnerChildWrapper, path *util.AccessPath, ranges ranger.Ranges, @@ -1322,7 +1239,7 @@ func constructInnerIndexScanTask( cop.commonHandleCols = ds.CommonHandleCols } is.initSchema(append(path.FullIdxCols, ds.CommonHandleCols...), cop.tablePlan != nil) - indexConds, tblConds := ds.splitIndexFilterConditions(filterConds, path.FullIdxCols, path.FullIdxColLens) + indexConds, tblConds := splitIndexFilterConditions(ds, filterConds, path.FullIdxCols, path.FullIdxColLens) // Note: due to a regression in JOB workload, we use the optimizer fix control to enable this for now. // @@ -1408,7 +1325,7 @@ func constructInnerIndexScanTask( logutil.BgLogger().Warn("unexpected error happened during addPushedDownSelection function", zap.Error(err)) return nil } - return constructIndexJoinInnerSideTask(p, cop, ds, path, wrapper) + return constructIndexJoinInnerSideTask(p, prop, cop, ds, path, wrapper) } // construct the inner join task by inner child plan tree @@ -1419,11 +1336,11 @@ func constructInnerIndexScanTask( // There are two kinds of agg: stream agg and hash agg. Stream agg depends on some conditions, such as the group by cols // // Step2: build other inner plan node to task -func constructIndexJoinInnerSideTask(p *LogicalJoin, dsCopTask *CopTask, ds *DataSource, path *util.AccessPath, wrapper *indexJoinInnerChildWrapper) base.Task { - var la *LogicalAggregation +func constructIndexJoinInnerSideTask(p *logicalop.LogicalJoin, prop *property.PhysicalProperty, dsCopTask *CopTask, ds *DataSource, path *util.AccessPath, wrapper *indexJoinInnerChildWrapper) base.Task { + var la *logicalop.LogicalAggregation var canPushAggToCop bool if len(wrapper.zippedChildren) > 0 { - la, canPushAggToCop = wrapper.zippedChildren[len(wrapper.zippedChildren)-1].(*LogicalAggregation) + la, canPushAggToCop = wrapper.zippedChildren[len(wrapper.zippedChildren)-1].(*logicalop.LogicalAggregation) if la != nil && la.HasDistinct() { // TODO: remove AllowDistinctAggPushDown after the cost estimation of distinct pushdown is implemented. // If AllowDistinctAggPushDown is set to true, we should not consider RootTask. @@ -1436,7 +1353,7 @@ func constructIndexJoinInnerSideTask(p *LogicalJoin, dsCopTask *CopTask, ds *Dat // If the bottom plan is not aggregation or the aggregation can't be pushed to coprocessor, we will construct a root task directly. if !canPushAggToCop { result := dsCopTask.ConvertToRootTask(ds.SCtx()).(*RootTask) - result.SetPlan(constructInnerByZippedChildren(wrapper.zippedChildren, result.GetPlan())) + result.SetPlan(constructInnerByZippedChildren(prop, wrapper.zippedChildren, result.GetPlan())) return result } @@ -1464,12 +1381,13 @@ func constructIndexJoinInnerSideTask(p *LogicalJoin, dsCopTask *CopTask, ds *Dat ds.TableInfo.GetPartitionInfo() == nil { if len(path.IdxCols) < len(groupByCols) { preferStream = false - } - sctx := p.SCtx() - for i, groupbyCol := range groupByCols { - if path.IdxColLens[i] != types.UnspecifiedLength || - !groupbyCol.EqualByExprAndID(sctx.GetExprCtx().GetEvalCtx(), path.IdxCols[i]) { - preferStream = false + } else { + sctx := p.SCtx() + for i, groupbyCol := range groupByCols { + if path.IdxColLens[i] != types.UnspecifiedLength || + !groupbyCol.EqualByExprAndID(sctx.GetExprCtx().GetEvalCtx(), path.IdxCols[i]) { + preferStream = false + } } } } else { @@ -1487,7 +1405,7 @@ func constructIndexJoinInnerSideTask(p *LogicalJoin, dsCopTask *CopTask, ds *Dat streamAgg := basePhysicalAgg{ GroupByItems: newGbyItems, AggFuncs: newAggFuncs, - }.initForStream(la.SCtx(), la.StatsInfo(), la.QueryBlockOffset(), nil) + }.initForStream(la.SCtx(), la.StatsInfo(), la.QueryBlockOffset(), prop) streamAgg.SetSchema(la.Schema().Clone()) // change to keep order for index scan and dsCopTask if dsCopTask.indexPlan != nil { @@ -1506,7 +1424,7 @@ func constructIndexJoinInnerSideTask(p *LogicalJoin, dsCopTask *CopTask, ds *Dat // build hash agg, when the stream agg is illegal such as the order by prop is not matched if aggTask == nil { - physicalHashAgg := NewPhysicalHashAgg(la, la.StatsInfo(), nil) + physicalHashAgg := NewPhysicalHashAgg(la, la.StatsInfo(), prop) physicalHashAgg.SetSchema(la.Schema().Clone()) aggTask = physicalHashAgg.Attach2Task(dsCopTask) } @@ -1516,571 +1434,10 @@ func constructIndexJoinInnerSideTask(p *LogicalJoin, dsCopTask *CopTask, ds *Dat if !ok { return nil } - result.SetPlan(constructInnerByZippedChildren(wrapper.zippedChildren[0:len(wrapper.zippedChildren)-1], result.p)) + result.SetPlan(constructInnerByZippedChildren(prop, wrapper.zippedChildren[0:len(wrapper.zippedChildren)-1], result.p)) return result } -var symmetricOp = map[string]string{ - ast.LT: ast.GT, - ast.GE: ast.LE, - ast.GT: ast.LT, - ast.LE: ast.GE, -} - -// ColWithCmpFuncManager is used in index join to handle the column with compare functions(>=, >, <, <=). -// It stores the compare functions and build ranges in execution phase. -type ColWithCmpFuncManager struct { - TargetCol *expression.Column - colLength int - OpType []string - opArg []expression.Expression - TmpConstant []*expression.Constant - affectedColSchema *expression.Schema - compareFuncs []chunk.CompareFunc -} - -func (cwc *ColWithCmpFuncManager) appendNewExpr(opName string, arg expression.Expression, affectedCols []*expression.Column) { - cwc.OpType = append(cwc.OpType, opName) - cwc.opArg = append(cwc.opArg, arg) - cwc.TmpConstant = append(cwc.TmpConstant, &expression.Constant{RetType: cwc.TargetCol.RetType}) - for _, col := range affectedCols { - if cwc.affectedColSchema.Contains(col) { - continue - } - cwc.compareFuncs = append(cwc.compareFuncs, chunk.GetCompareFunc(col.RetType)) - cwc.affectedColSchema.Append(col) - } -} - -// CompareRow compares the rows for deduplicate. -func (cwc *ColWithCmpFuncManager) CompareRow(lhs, rhs chunk.Row) int { - for i, col := range cwc.affectedColSchema.Columns { - ret := cwc.compareFuncs[i](lhs, col.Index, rhs, col.Index) - if ret != 0 { - return ret - } - } - return 0 -} - -// BuildRangesByRow will build range of the given row. It will eval each function's arg then call BuildRange. -func (cwc *ColWithCmpFuncManager) BuildRangesByRow(ctx *rangerctx.RangerContext, row chunk.Row) ([]*ranger.Range, error) { - exprs := make([]expression.Expression, len(cwc.OpType)) - exprCtx := ctx.ExprCtx - for i, opType := range cwc.OpType { - constantArg, err := cwc.opArg[i].Eval(exprCtx.GetEvalCtx(), row) - if err != nil { - return nil, err - } - cwc.TmpConstant[i].Value = constantArg - newExpr, err := expression.NewFunction(exprCtx, opType, types.NewFieldType(mysql.TypeTiny), cwc.TargetCol, cwc.TmpConstant[i]) - if err != nil { - return nil, err - } - exprs = append(exprs, newExpr) // nozero - } - // We already limit range mem usage when buildTemplateRange for inner table of IndexJoin in optimizer phase, so we - // don't need and shouldn't limit range mem usage when we refill inner ranges during the execution phase. - ranges, _, _, err := ranger.BuildColumnRange(exprs, ctx, cwc.TargetCol.RetType, cwc.colLength, 0) - if err != nil { - return nil, err - } - return ranges, nil -} - -func (cwc *ColWithCmpFuncManager) resolveIndices(schema *expression.Schema) (err error) { - for i := range cwc.opArg { - cwc.opArg[i], err = cwc.opArg[i].ResolveIndices(schema) - if err != nil { - return err - } - } - return nil -} - -// String implements Stringer interface. -func (cwc *ColWithCmpFuncManager) String() string { - buffer := bytes.NewBufferString("") - for i := range cwc.OpType { - fmt.Fprintf(buffer, "%v(%v, %v)", cwc.OpType[i], cwc.TargetCol, cwc.opArg[i]) - if i < len(cwc.OpType)-1 { - buffer.WriteString(" ") - } - } - return buffer.String() -} - -const emptyColWithCmpFuncManagerSize = int64(unsafe.Sizeof(ColWithCmpFuncManager{})) - -// MemoryUsage return the memory usage of ColWithCmpFuncManager -func (cwc *ColWithCmpFuncManager) MemoryUsage() (sum int64) { - if cwc == nil { - return - } - - sum = emptyColWithCmpFuncManagerSize + int64(cap(cwc.compareFuncs))*size.SizeOfFunc - if cwc.TargetCol != nil { - sum += cwc.TargetCol.MemoryUsage() - } - if cwc.affectedColSchema != nil { - sum += cwc.affectedColSchema.MemoryUsage() - } - - for _, str := range cwc.OpType { - sum += int64(len(str)) - } - for _, expr := range cwc.opArg { - sum += expr.MemoryUsage() - } - for _, cst := range cwc.TmpConstant { - sum += cst.MemoryUsage() - } - return -} - -// Reset the 'curIdxOff2KeyOff', 'curNotUsedIndexCols' and 'curNotUsedColLens' by innerKeys and idxCols -/* -For each idxCols, - If column can be found in innerKeys - save offset of innerKeys in 'curIdxOff2KeyOff' - Else, - save -1 in 'curIdxOff2KeyOff' -*/ -// For example, innerKeys[t1.a, t1.sum_b, t1.c], idxCols [a, b, c] -// 'curIdxOff2KeyOff' = [0, -1, 2] -func (ijHelper *indexJoinBuildHelper) resetContextForIndex(innerKeys []*expression.Column, idxCols []*expression.Column, colLens []int, outerKeys []*expression.Column) { - tmpSchema := expression.NewSchema(innerKeys...) - ijHelper.curIdxOff2KeyOff = make([]int, len(idxCols)) - ijHelper.curNotUsedIndexCols = make([]*expression.Column, 0, len(idxCols)) - ijHelper.curNotUsedColLens = make([]int, 0, len(idxCols)) - for i, idxCol := range idxCols { - ijHelper.curIdxOff2KeyOff[i] = tmpSchema.ColumnIndex(idxCol) - if ijHelper.curIdxOff2KeyOff[i] >= 0 { - // Don't use the join columns if their collations are unmatched and the new collation is enabled. - if collate.NewCollationEnabled() && types.IsString(idxCol.RetType.GetType()) && types.IsString(outerKeys[ijHelper.curIdxOff2KeyOff[i]].RetType.GetType()) { - et, err := expression.CheckAndDeriveCollationFromExprs(ijHelper.innerPlan.SCtx().GetExprCtx(), "equal", types.ETInt, idxCol, outerKeys[ijHelper.curIdxOff2KeyOff[i]]) - if err != nil { - logutil.BgLogger().Error("Unexpected error happened during constructing index join", zap.Stack("stack")) - } - if !collate.CompatibleCollate(idxCol.GetStaticType().GetCollate(), et.Collation) { - ijHelper.curIdxOff2KeyOff[i] = -1 - } - } - continue - } - ijHelper.curNotUsedIndexCols = append(ijHelper.curNotUsedIndexCols, idxCol) - ijHelper.curNotUsedColLens = append(ijHelper.curNotUsedColLens, colLens[i]) - } -} - -// findUsefulEqAndInFilters analyzes the PushedDownConds held by inner child and split them to three parts. -// usefulEqOrInFilters is the continuous eq/in conditions on current unused index columns. -// remainedEqOrIn is part of usefulEqOrInFilters, which needs to be evaluated again in selection. -// remainingRangeCandidates is the other conditions for future use. -func (ijHelper *indexJoinBuildHelper) findUsefulEqAndInFilters(innerPlan *DataSource) (usefulEqOrInFilters, remainedEqOrIn, remainingRangeCandidates []expression.Expression, emptyRange bool) { - // Extract the eq/in functions of possible join key. - // you can see the comment of ExtractEqAndInCondition to get the meaning of the second return value. - usefulEqOrInFilters, remainedEqOrIn, remainingRangeCandidates, _, emptyRange = ranger.ExtractEqAndInCondition( - innerPlan.SCtx().GetRangerCtx(), innerPlan.PushedDownConds, - ijHelper.curNotUsedIndexCols, - ijHelper.curNotUsedColLens, - ) - return usefulEqOrInFilters, remainedEqOrIn, remainingRangeCandidates, emptyRange -} - -// buildLastColManager analyze the `OtherConditions` of join to see whether there're some filters can be used in manager. -// The returned value is just for outputting explain information -func (ijHelper *indexJoinBuildHelper) buildLastColManager(nextCol *expression.Column, - innerPlan *DataSource, cwc *ColWithCmpFuncManager) []expression.Expression { - var lastColAccesses []expression.Expression -loopOtherConds: - for _, filter := range ijHelper.join.OtherConditions { - sf, ok := filter.(*expression.ScalarFunction) - if !ok || !(sf.FuncName.L == ast.LE || sf.FuncName.L == ast.LT || sf.FuncName.L == ast.GE || sf.FuncName.L == ast.GT) { - continue - } - var funcName string - var anotherArg expression.Expression - if lCol, ok := sf.GetArgs()[0].(*expression.Column); ok && lCol.EqualColumn(nextCol) { - anotherArg = sf.GetArgs()[1] - funcName = sf.FuncName.L - } else if rCol, ok := sf.GetArgs()[1].(*expression.Column); ok && rCol.EqualColumn(nextCol) { - anotherArg = sf.GetArgs()[0] - // The column manager always build expression in the form of col op arg1. - // So we need use the symmetric one of the current function. - funcName = symmetricOp[sf.FuncName.L] - } else { - continue - } - affectedCols := expression.ExtractColumns(anotherArg) - if len(affectedCols) == 0 { - continue - } - for _, col := range affectedCols { - if innerPlan.Schema().Contains(col) { - continue loopOtherConds - } - } - lastColAccesses = append(lastColAccesses, sf) - cwc.appendNewExpr(funcName, anotherArg, affectedCols) - } - return lastColAccesses -} - -// removeUselessEqAndInFunc removes the useless eq/in conditions. It's designed for the following case: -// -// t1 join t2 on t1.a=t2.a and t1.c=t2.c where t1.b > t2.b-10 and t1.b < t2.b+10 there's index(a, b, c) on t1. -// In this case the curIdxOff2KeyOff is [0 -1 1] and the notKeyEqAndIn is []. -// It's clearly that the column c cannot be used to access data. So we need to remove it and reset the IdxOff2KeyOff to -// [0 -1 -1]. -// So that we can use t1.a=t2.a and t1.b > t2.b-10 and t1.b < t2.b+10 to build ranges then access data. -func (ijHelper *indexJoinBuildHelper) removeUselessEqAndInFunc(idxCols []*expression.Column, notKeyEqAndIn []expression.Expression) (usefulEqAndIn, uselessOnes []expression.Expression) { - ijHelper.curPossibleUsedKeys = make([]*expression.Column, 0, len(idxCols)) - for idxColPos, notKeyColPos := 0, 0; idxColPos < len(idxCols); idxColPos++ { - if ijHelper.curIdxOff2KeyOff[idxColPos] != -1 { - ijHelper.curPossibleUsedKeys = append(ijHelper.curPossibleUsedKeys, idxCols[idxColPos]) - continue - } - if notKeyColPos < len(notKeyEqAndIn) && ijHelper.curNotUsedIndexCols[notKeyColPos].EqualColumn(idxCols[idxColPos]) { - notKeyColPos++ - continue - } - for i := idxColPos + 1; i < len(idxCols); i++ { - ijHelper.curIdxOff2KeyOff[i] = -1 - } - remained := make([]expression.Expression, 0, len(notKeyEqAndIn)-notKeyColPos) - remained = append(remained, notKeyEqAndIn[notKeyColPos:]...) - notKeyEqAndIn = notKeyEqAndIn[:notKeyColPos] - return notKeyEqAndIn, remained - } - return notKeyEqAndIn, nil -} - -type mutableIndexJoinRange struct { - ranges ranger.Ranges - - buildHelper *indexJoinBuildHelper - path *util.AccessPath - innerJoinKeys []*expression.Column - outerJoinKeys []*expression.Column -} - -func (mr *mutableIndexJoinRange) Range() ranger.Ranges { - return mr.ranges -} - -func (mr *mutableIndexJoinRange) Rebuild() error { - empty, err := mr.buildHelper.analyzeLookUpFilters(mr.path, mr.buildHelper.innerPlan, mr.innerJoinKeys, mr.outerJoinKeys, true) - if err != nil { - return err - } - if empty { // empty ranges are dangerous for plan-cache, it's better to optimize the whole plan again in this case - return errors.New("failed to rebuild range: empty range") - } - newRanges := mr.buildHelper.chosenRanges.Range() - if len(mr.ranges) != len(newRanges) || (len(mr.ranges) > 0 && mr.ranges[0].Width() != newRanges[0].Width()) { - // some access conditions cannot be used to calculate the range after parameters change, return an error in this case for safety. - return errors.New("failed to rebuild range: range width changed") - } - mr.ranges = mr.buildHelper.chosenRanges.Range() - return nil -} - -func (ijHelper *indexJoinBuildHelper) createMutableIndexJoinRange(relatedExprs []expression.Expression, ranges []*ranger.Range, path *util.AccessPath, innerKeys, outerKeys []*expression.Column) ranger.MutableRanges { - // if the plan-cache is enabled and these ranges depend on some parameters, we have to rebuild these ranges after changing parameters - if expression.MaybeOverOptimized4PlanCache(ijHelper.join.SCtx().GetExprCtx(), relatedExprs) { - // assume that path, innerKeys and outerKeys will not be modified in the follow-up process - return &mutableIndexJoinRange{ - ranges: ranges, - buildHelper: &indexJoinBuildHelper{innerPlan: ijHelper.innerPlan, join: ijHelper.join}, - path: path, - innerJoinKeys: innerKeys, - outerJoinKeys: outerKeys, - } - } - return ranger.Ranges(ranges) -} - -func (ijHelper *indexJoinBuildHelper) updateByTemplateRangeResult(tempRangeRes *templateRangeResult, - accesses, remained []expression.Expression) (lastColPos int, newAccesses, newRemained []expression.Expression) { - lastColPos = tempRangeRes.keyCntInRange + tempRangeRes.eqAndInCntInRange - ijHelper.curPossibleUsedKeys = ijHelper.curPossibleUsedKeys[:tempRangeRes.keyCntInRange] - for i := lastColPos; i < len(ijHelper.curIdxOff2KeyOff); i++ { - ijHelper.curIdxOff2KeyOff[i] = -1 - } - newAccesses = accesses[:tempRangeRes.eqAndInCntInRange] - newRemained = ranger.AppendConditionsIfNotExist(ijHelper.innerPlan.SCtx().GetExprCtx().GetEvalCtx(), - remained, accesses[tempRangeRes.eqAndInCntInRange:]) - return -} - -func (ijHelper *indexJoinBuildHelper) analyzeLookUpFilters(path *util.AccessPath, innerPlan *DataSource, innerJoinKeys []*expression.Column, outerJoinKeys []*expression.Column, rebuildMode bool) (emptyRange bool, err error) { - if len(path.IdxCols) == 0 { - return false, nil - } - accesses := make([]expression.Expression, 0, len(path.IdxCols)) - ijHelper.resetContextForIndex(innerJoinKeys, path.IdxCols, path.IdxColLens, outerJoinKeys) - notKeyEqAndIn, remained, rangeFilterCandidates, emptyRange := ijHelper.findUsefulEqAndInFilters(innerPlan) - if emptyRange { - return true, nil - } - var remainedEqAndIn []expression.Expression - notKeyEqAndIn, remainedEqAndIn = ijHelper.removeUselessEqAndInFunc(path.IdxCols, notKeyEqAndIn) - matchedKeyCnt := len(ijHelper.curPossibleUsedKeys) - // If no join key is matched while join keys actually are not empty. We don't choose index join for now. - if matchedKeyCnt <= 0 && len(innerJoinKeys) > 0 { - return false, nil - } - accesses = append(accesses, notKeyEqAndIn...) - remained = ranger.AppendConditionsIfNotExist(innerPlan.SCtx().GetExprCtx().GetEvalCtx(), remained, remainedEqAndIn) - lastColPos := matchedKeyCnt + len(notKeyEqAndIn) - // There should be some equal conditions. But we don't need that there must be some join key in accesses here. - // A more strict check is applied later. - if lastColPos <= 0 { - return false, nil - } - rangeMaxSize := ijHelper.join.SCtx().GetSessionVars().RangeMaxSize - if rebuildMode { - // When rebuilding ranges for plan cache, we don't restrict range mem limit. - rangeMaxSize = 0 - } - // If all the index columns are covered by eq/in conditions, we don't need to consider other conditions anymore. - if lastColPos == len(path.IdxCols) { - // If there's no join key matching index column, then choosing hash join is always a better idea. - // e.g. select * from t1, t2 where t2.a=1 and t2.b=1. And t2 has index(a, b). - // If we don't have the following check, TiDB will build index join for this case. - if matchedKeyCnt <= 0 { - return false, nil - } - remained = append(remained, rangeFilterCandidates...) - tempRangeRes := ijHelper.buildTemplateRange(matchedKeyCnt, notKeyEqAndIn, nil, false, rangeMaxSize) - if tempRangeRes.err != nil || tempRangeRes.emptyRange || tempRangeRes.keyCntInRange <= 0 { - return tempRangeRes.emptyRange, tempRangeRes.err - } - lastColPos, accesses, remained = ijHelper.updateByTemplateRangeResult(tempRangeRes, accesses, remained) - mutableRange := ijHelper.createMutableIndexJoinRange(accesses, tempRangeRes.ranges, path, innerJoinKeys, outerJoinKeys) - ijHelper.updateBestChoice(mutableRange, path, accesses, remained, nil, lastColPos, rebuildMode) - return false, nil - } - lastPossibleCol := path.IdxCols[lastColPos] - lastColManager := &ColWithCmpFuncManager{ - TargetCol: lastPossibleCol, - colLength: path.IdxColLens[lastColPos], - affectedColSchema: expression.NewSchema(), - } - lastColAccess := ijHelper.buildLastColManager(lastPossibleCol, innerPlan, lastColManager) - // If the column manager holds no expression, then we fallback to find whether there're useful normal filters - if len(lastColAccess) == 0 { - // If there's no join key matching index column, then choosing hash join is always a better idea. - // e.g. select * from t1, t2 where t2.a=1 and t2.b=1 and t2.c > 10 and t2.c < 20. And t2 has index(a, b, c). - // If we don't have the following check, TiDB will build index join for this case. - if matchedKeyCnt <= 0 { - return false, nil - } - colAccesses, colRemained := ranger.DetachCondsForColumn(ijHelper.join.SCtx().GetRangerCtx(), rangeFilterCandidates, lastPossibleCol) - var nextColRange []*ranger.Range - var err error - if len(colAccesses) > 0 { - var colRemained2 []expression.Expression - nextColRange, colAccesses, colRemained2, err = ranger.BuildColumnRange(colAccesses, ijHelper.join.SCtx().GetRangerCtx(), lastPossibleCol.RetType, path.IdxColLens[lastColPos], rangeMaxSize) - if err != nil { - return false, err - } - if len(colRemained2) > 0 { - colRemained = append(colRemained, colRemained2...) - nextColRange = nil - } - } - tempRangeRes := ijHelper.buildTemplateRange(matchedKeyCnt, notKeyEqAndIn, nextColRange, false, rangeMaxSize) - if tempRangeRes.err != nil || tempRangeRes.emptyRange || tempRangeRes.keyCntInRange <= 0 { - return tempRangeRes.emptyRange, tempRangeRes.err - } - lastColPos, accesses, remained = ijHelper.updateByTemplateRangeResult(tempRangeRes, accesses, remained) - // update accesses and remained by colAccesses and colRemained. - remained = append(remained, colRemained...) - if tempRangeRes.nextColInRange { - if path.IdxColLens[lastColPos] != types.UnspecifiedLength { - remained = append(remained, colAccesses...) - } - accesses = append(accesses, colAccesses...) - lastColPos = lastColPos + 1 - } else { - remained = append(remained, colAccesses...) - } - mutableRange := ijHelper.createMutableIndexJoinRange(accesses, tempRangeRes.ranges, path, innerJoinKeys, outerJoinKeys) - ijHelper.updateBestChoice(mutableRange, path, accesses, remained, nil, lastColPos, rebuildMode) - return false, nil - } - tempRangeRes := ijHelper.buildTemplateRange(matchedKeyCnt, notKeyEqAndIn, nil, true, rangeMaxSize) - if tempRangeRes.err != nil || tempRangeRes.emptyRange { - return tempRangeRes.emptyRange, tempRangeRes.err - } - lastColPos, accesses, remained = ijHelper.updateByTemplateRangeResult(tempRangeRes, accesses, remained) - - remained = append(remained, rangeFilterCandidates...) - if tempRangeRes.extraColInRange { - accesses = append(accesses, lastColAccess...) - lastColPos = lastColPos + 1 - } else { - if tempRangeRes.keyCntInRange <= 0 { - return false, nil - } - lastColManager = nil - } - mutableRange := ijHelper.createMutableIndexJoinRange(accesses, tempRangeRes.ranges, path, innerJoinKeys, outerJoinKeys) - ijHelper.updateBestChoice(mutableRange, path, accesses, remained, lastColManager, lastColPos, rebuildMode) - return false, nil -} - -func (ijHelper *indexJoinBuildHelper) updateBestChoice(ranges ranger.MutableRanges, path *util.AccessPath, accesses, - remained []expression.Expression, lastColManager *ColWithCmpFuncManager, usedColsLen int, rebuildMode bool) { - if rebuildMode { // rebuild the range for plan-cache, update the chosenRanges anyway - ijHelper.chosenPath = path - ijHelper.chosenRanges = ranges - ijHelper.chosenAccess = accesses - ijHelper.idxOff2KeyOff = ijHelper.curIdxOff2KeyOff - return - } - - // Notice that there may be the cases like `t1.a = t2.a and b > 2 and b < 1`, so ranges can be nil though the conditions are valid. - // Obviously when the range is nil, we don't need index join. - if len(ranges.Range()) == 0 { - return - } - var innerNDV float64 - if stats := ijHelper.innerPlan.StatsInfo(); stats != nil && stats.StatsVersion != statistics.PseudoVersion { - innerNDV, _ = cardinality.EstimateColsNDVWithMatchedLen(path.IdxCols[:usedColsLen], ijHelper.innerPlan.Schema(), stats) - } - // We choose the index by the NDV of the used columns, the larger the better. - // If NDVs are same, we choose index which uses more columns. - // Note that these 2 heuristic rules are too simple to cover all cases, - // since the NDV of outer join keys are not considered, and the detached access conditions - // may contain expressions like `t1.a > t2.a`. It's pretty hard to evaluate the join selectivity - // of these non-column-equal conditions, so I prefer to keep these heuristic rules simple at least for now. - if innerNDV < ijHelper.usedColsNDV || (innerNDV == ijHelper.usedColsNDV && usedColsLen <= ijHelper.usedColsLen) { - return - } - ijHelper.chosenPath = path - ijHelper.usedColsLen = len(ranges.Range()[0].LowVal) - ijHelper.usedColsNDV = innerNDV - ijHelper.chosenRanges = ranges - ijHelper.chosenAccess = accesses - ijHelper.chosenRemained = remained - ijHelper.idxOff2KeyOff = ijHelper.curIdxOff2KeyOff - ijHelper.lastColManager = lastColManager -} - -type templateRangeResult struct { - ranges ranger.Ranges - emptyRange bool - keyCntInRange int - eqAndInCntInRange int - nextColInRange bool - extraColInRange bool - err error -} - -// appendTailTemplateRange appends empty datum for each range in originRanges. -// rangeMaxSize is the max memory limit for ranges. O indicates no memory limit. -// If the second return value is true, it means that the estimated memory after appending datums to originRanges exceeds -// rangeMaxSize and the function rejects appending datums to originRanges. -func appendTailTemplateRange(originRanges ranger.Ranges, rangeMaxSize int64) (ranger.Ranges, bool) { - if rangeMaxSize > 0 && originRanges.MemUsage()+(types.EmptyDatumSize*2+16)*int64(len(originRanges)) > rangeMaxSize { - return originRanges, true - } - for _, ran := range originRanges { - ran.LowVal = append(ran.LowVal, types.Datum{}) - ran.HighVal = append(ran.HighVal, types.Datum{}) - ran.Collators = append(ran.Collators, nil) - } - return originRanges, false -} - -func (ijHelper *indexJoinBuildHelper) buildTemplateRange(matchedKeyCnt int, eqAndInFuncs []expression.Expression, nextColRange []*ranger.Range, - haveExtraCol bool, rangeMaxSize int64) (res *templateRangeResult) { - res = &templateRangeResult{} - ctx := ijHelper.join.SCtx() - sc := ctx.GetSessionVars().StmtCtx - defer func() { - if sc.MemTracker != nil && res != nil && len(res.ranges) > 0 { - sc.MemTracker.Consume(2 * types.EstimatedMemUsage(res.ranges[0].LowVal, len(res.ranges))) - } - }() - pointLength := matchedKeyCnt + len(eqAndInFuncs) - ranges := ranger.Ranges{&ranger.Range{}} - for i, j := 0, 0; i+j < pointLength; { - if ijHelper.curIdxOff2KeyOff[i+j] != -1 { - // This position is occupied by join key. - var fallback bool - ranges, fallback = appendTailTemplateRange(ranges, rangeMaxSize) - if fallback { - ctx.GetSessionVars().StmtCtx.RecordRangeFallback(rangeMaxSize) - res.ranges = ranges - res.keyCntInRange = i - res.eqAndInCntInRange = j - return - } - i++ - } else { - exprs := []expression.Expression{eqAndInFuncs[j]} - oneColumnRan, _, remained, err := ranger.BuildColumnRange(exprs, ijHelper.join.SCtx().GetRangerCtx(), ijHelper.curNotUsedIndexCols[j].RetType, ijHelper.curNotUsedColLens[j], rangeMaxSize) - if err != nil { - return &templateRangeResult{err: err} - } - if len(oneColumnRan) == 0 { - return &templateRangeResult{emptyRange: true} - } - if sc.MemTracker != nil { - sc.MemTracker.Consume(2 * types.EstimatedMemUsage(oneColumnRan[0].LowVal, len(oneColumnRan))) - } - if len(remained) > 0 { - res.ranges = ranges - res.keyCntInRange = i - res.eqAndInCntInRange = j - return - } - var fallback bool - ranges, fallback = ranger.AppendRanges2PointRanges(ranges, oneColumnRan, rangeMaxSize) - if fallback { - ctx.GetSessionVars().StmtCtx.RecordRangeFallback(rangeMaxSize) - res.ranges = ranges - res.keyCntInRange = i - res.eqAndInCntInRange = j - return - } - j++ - } - } - if len(nextColRange) > 0 { - var fallback bool - ranges, fallback = ranger.AppendRanges2PointRanges(ranges, nextColRange, rangeMaxSize) - if fallback { - ctx.GetSessionVars().StmtCtx.RecordRangeFallback(rangeMaxSize) - } - res.ranges = ranges - res.keyCntInRange = matchedKeyCnt - res.eqAndInCntInRange = len(eqAndInFuncs) - res.nextColInRange = !fallback - return - } - if haveExtraCol { - var fallback bool - ranges, fallback = appendTailTemplateRange(ranges, rangeMaxSize) - if fallback { - ctx.GetSessionVars().StmtCtx.RecordRangeFallback(rangeMaxSize) - } - res.ranges = ranges - res.keyCntInRange = matchedKeyCnt - res.eqAndInCntInRange = len(eqAndInFuncs) - res.extraColInRange = !fallback - return - } - res.ranges = ranges - res.keyCntInRange = matchedKeyCnt - res.eqAndInCntInRange = len(eqAndInFuncs) - return -} - func filterIndexJoinBySessionVars(sc base.PlanContext, indexJoins []base.PhysicalPlan) []base.PhysicalPlan { if sc.GetSessionVars().EnableIndexMergeJoin { return indexJoins @@ -2125,16 +1482,16 @@ func getIndexJoinSideAndMethod(join base.PhysicalPlan) (innerSide, joinMethod in } // tryToGetIndexJoin returns all available index join plans, and the second returned value indicates whether this plan is enforced by hints. -func tryToGetIndexJoin(p *LogicalJoin, prop *property.PhysicalProperty) (indexJoins []base.PhysicalPlan, canForced bool) { +func tryToGetIndexJoin(p *logicalop.LogicalJoin, prop *property.PhysicalProperty) (indexJoins []base.PhysicalPlan, canForced bool) { // supportLeftOuter and supportRightOuter indicates whether this type of join // supports the left side or right side to be the outer side. var supportLeftOuter, supportRightOuter bool switch p.JoinType { - case SemiJoin, AntiSemiJoin, LeftOuterSemiJoin, AntiLeftOuterSemiJoin, LeftOuterJoin: + case logicalop.SemiJoin, logicalop.AntiSemiJoin, logicalop.LeftOuterSemiJoin, logicalop.AntiLeftOuterSemiJoin, logicalop.LeftOuterJoin: supportLeftOuter = true - case RightOuterJoin: + case logicalop.RightOuterJoin: supportRightOuter = true - case InnerJoin: + case logicalop.InnerJoin: supportLeftOuter, supportRightOuter = true, true } candidates := make([]base.PhysicalPlan, 0, 2) @@ -2167,7 +1524,7 @@ func tryToGetIndexJoin(p *LogicalJoin, prop *property.PhysicalProperty) (indexJo return filterIndexJoinBySessionVars(p.SCtx(), candidates), false } -func handleFilterIndexJoinHints(p *LogicalJoin, candidates []base.PhysicalPlan) []base.PhysicalPlan { +func handleFilterIndexJoinHints(p *logicalop.LogicalJoin, candidates []base.PhysicalPlan) []base.PhysicalPlan { if !p.PreferAny(h.PreferNoIndexJoin, h.PreferNoIndexHashJoin, h.PreferNoIndexMergeJoin) { return candidates // no filter index join hints } @@ -2188,7 +1545,7 @@ func handleFilterIndexJoinHints(p *LogicalJoin, candidates []base.PhysicalPlan) } // handleForceIndexJoinHints handles the force index join hints and returns all plans that can satisfy the hints. -func handleForceIndexJoinHints(p *LogicalJoin, prop *property.PhysicalProperty, candidates []base.PhysicalPlan) (indexJoins []base.PhysicalPlan, canForced bool) { +func handleForceIndexJoinHints(p *logicalop.LogicalJoin, prop *property.PhysicalProperty, candidates []base.PhysicalPlan) (indexJoins []base.PhysicalPlan, canForced bool) { if !p.PreferAny(h.PreferRightAsINLJInner, h.PreferRightAsINLHJInner, h.PreferRightAsINLMJInner, h.PreferLeftAsINLJInner, h.PreferLeftAsINLHJInner, h.PreferLeftAsINLMJInner) { return candidates, false // no force index join hints @@ -2307,7 +1664,7 @@ func calcHashExchangeSizeByChild(p1 base.Plan, p2 base.Plan, mppStoreCnt int) (r // It will cost more time to construct `Build` hash table and search `Probe` while using broadcast join. // Set a scale factor (`mppStoreCnt^*`) when estimating broadcast join in `isJoinFitMPPBCJ` and `isJoinChildFitMPPBCJ` (based on TPCH benchmark, it has been verified in Q9). -func isJoinFitMPPBCJ(p *LogicalJoin, mppStoreCnt int) bool { +func isJoinFitMPPBCJ(p *logicalop.LogicalJoin, mppStoreCnt int) bool { rowBC, szBC, hasSizeBC := calcBroadcastExchangeSizeByChild(p.Children()[0], p.Children()[1], mppStoreCnt) rowHash, szHash, hasSizeHash := calcHashExchangeSizeByChild(p.Children()[0], p.Children()[1], mppStoreCnt) if hasSizeBC && hasSizeHash { @@ -2316,7 +1673,7 @@ func isJoinFitMPPBCJ(p *LogicalJoin, mppStoreCnt int) bool { return rowBC*float64(mppStoreCnt) <= rowHash } -func isJoinChildFitMPPBCJ(p *LogicalJoin, childIndexToBC int, mppStoreCnt int) bool { +func isJoinChildFitMPPBCJ(p *logicalop.LogicalJoin, childIndexToBC int, mppStoreCnt int) bool { rowBC, szBC, hasSizeBC := calcBroadcastExchangeSize(p.Children()[childIndexToBC], mppStoreCnt) rowHash, szHash, hasSizeHash := calcHashExchangeSizeByChild(p.Children()[0], p.Children()[1], mppStoreCnt) @@ -2327,13 +1684,13 @@ func isJoinChildFitMPPBCJ(p *LogicalJoin, childIndexToBC int, mppStoreCnt int) b } // If we can use mpp broadcast join, that's our first choice. -func preferMppBCJ(p *LogicalJoin) bool { +func preferMppBCJ(p *logicalop.LogicalJoin) bool { if len(p.EqualConditions) == 0 && p.SCtx().GetSessionVars().AllowCartesianBCJ == 2 { return true } - onlyCheckChild1 := p.JoinType == LeftOuterJoin || p.JoinType == SemiJoin || p.JoinType == AntiSemiJoin - onlyCheckChild0 := p.JoinType == RightOuterJoin + onlyCheckChild1 := p.JoinType == logicalop.LeftOuterJoin || p.JoinType == logicalop.SemiJoin || p.JoinType == logicalop.AntiSemiJoin + onlyCheckChild0 := p.JoinType == logicalop.RightOuterJoin if p.SCtx().GetSessionVars().PreferBCJByExchangeDataSize { mppStoreCnt, err := p.SCtx().GetMPPClient().GetMPPStoreCount() @@ -2365,7 +1722,7 @@ func preferMppBCJ(p *LogicalJoin) bool { return checkChildFitBC(p.Children()[0]) || checkChildFitBC(p.Children()[1]) } -func canExprsInJoinPushdown(p *LogicalJoin, storeType kv.StoreType) bool { +func canExprsInJoinPushdown(p *logicalop.LogicalJoin, storeType kv.StoreType) bool { equalExprs := make([]expression.Expression, 0, len(p.EqualConditions)) for _, eqCondition := range p.EqualConditions { if eqCondition.FuncName.L == ast.NullEQ { @@ -2373,7 +1730,7 @@ func canExprsInJoinPushdown(p *LogicalJoin, storeType kv.StoreType) bool { } equalExprs = append(equalExprs, eqCondition) } - pushDownCtx := GetPushDownCtx(p.SCtx()) + pushDownCtx := util.GetPushDownCtx(p.SCtx()) if !expression.CanExprsPushDown(pushDownCtx, equalExprs, storeType) { return false } @@ -2389,7 +1746,7 @@ func canExprsInJoinPushdown(p *LogicalJoin, storeType kv.StoreType) bool { return true } -func tryToGetMppHashJoin(p *LogicalJoin, prop *property.PhysicalProperty, useBCJ bool) []base.PhysicalPlan { +func tryToGetMppHashJoin(p *logicalop.LogicalJoin, prop *property.PhysicalProperty, useBCJ bool) []base.PhysicalPlan { if !prop.IsSortItemEmpty() { return nil } @@ -2402,7 +1759,7 @@ func tryToGetMppHashJoin(p *LogicalJoin, prop *property.PhysicalProperty, useBCJ return nil } - if p.JoinType != InnerJoin && p.JoinType != LeftOuterJoin && p.JoinType != RightOuterJoin && p.JoinType != SemiJoin && p.JoinType != AntiSemiJoin && p.JoinType != LeftOuterSemiJoin && p.JoinType != AntiLeftOuterSemiJoin { + if p.JoinType != logicalop.InnerJoin && p.JoinType != logicalop.LeftOuterJoin && p.JoinType != logicalop.RightOuterJoin && p.JoinType != logicalop.SemiJoin && p.JoinType != logicalop.AntiSemiJoin && p.JoinType != logicalop.LeftOuterSemiJoin && p.JoinType != logicalop.AntiLeftOuterSemiJoin { p.SCtx().GetSessionVars().RaiseWarningWhenMPPEnforced("MPP mode may be blocked because join type `" + p.JoinType.String() + "` is not supported now.") return nil } @@ -2417,11 +1774,11 @@ func tryToGetMppHashJoin(p *LogicalJoin, prop *property.PhysicalProperty, useBCJ return nil } } - if len(p.LeftConditions) != 0 && p.JoinType != LeftOuterJoin { + if len(p.LeftConditions) != 0 && p.JoinType != logicalop.LeftOuterJoin { p.SCtx().GetSessionVars().RaiseWarningWhenMPPEnforced("MPP mode may be blocked because there is a join that is not `left join` but has left conditions, which is not supported by mpp now, see github.com/pingcap/tidb/issues/26090 for more information.") return nil } - if len(p.RightConditions) != 0 && p.JoinType != RightOuterJoin { + if len(p.RightConditions) != 0 && p.JoinType != logicalop.RightOuterJoin { p.SCtx().GetSessionVars().RaiseWarningWhenMPPEnforced("MPP mode may be blocked because there is a join that is not `right join` but has right conditions, which is not supported by mpp now.") return nil } @@ -2457,12 +1814,12 @@ func tryToGetMppHashJoin(p *LogicalJoin, prop *property.PhysicalProperty, useBCJ } preferredBuildIndex := 0 fixedBuildSide := false // Used to indicate whether the build side for the MPP join is fixed or not. - if p.JoinType == InnerJoin { + if p.JoinType == logicalop.InnerJoin { if p.Children()[0].StatsInfo().Count() > p.Children()[1].StatsInfo().Count() { preferredBuildIndex = 1 } } else if p.JoinType.IsSemiJoin() { - if !useBCJ && !p.IsNAAJ() && len(p.EqualConditions) > 0 && (p.JoinType == SemiJoin || p.JoinType == AntiSemiJoin) { + if !useBCJ && !p.IsNAAJ() && len(p.EqualConditions) > 0 && (p.JoinType == logicalop.SemiJoin || p.JoinType == logicalop.AntiSemiJoin) { // TiFlash only supports Non-null_aware non-cross semi/anti_semi join to use both sides as build side preferredBuildIndex = 1 // MPPOuterJoinFixedBuildSide default value is false @@ -2475,7 +1832,7 @@ func tryToGetMppHashJoin(p *LogicalJoin, prop *property.PhysicalProperty, useBCJ fixedBuildSide = true } } - if p.JoinType == LeftOuterJoin || p.JoinType == RightOuterJoin { + if p.JoinType == logicalop.LeftOuterJoin || p.JoinType == logicalop.RightOuterJoin { // TiFlash does not require that the build side must be the inner table for outer join. // so we can choose the build side based on the row count, except that: // 1. it is a broadcast join(for broadcast join, it makes sense to use the broadcast side as the build side) @@ -2486,7 +1843,7 @@ func tryToGetMppHashJoin(p *LogicalJoin, prop *property.PhysicalProperty, useBCJ // The hint has higher priority than variable. fixedBuildSide = true } - if p.JoinType == LeftOuterJoin { + if p.JoinType == logicalop.LeftOuterJoin { preferredBuildIndex = 1 } } else if p.Children()[0].StatsInfo().Count() > p.Children()[1].StatsInfo().Count() { @@ -2542,11 +1899,11 @@ func tryToGetMppHashJoin(p *LogicalJoin, prop *property.PhysicalProperty, useBCJ lPartitionKeys, rPartitionKeys := p.GetPotentialPartitionKeys() if prop.MPPPartitionTp == property.HashType { var matches []int - if p.JoinType == InnerJoin { + if p.JoinType == logicalop.InnerJoin { if matches = prop.IsSubsetOf(lPartitionKeys); len(matches) == 0 { matches = prop.IsSubsetOf(rPartitionKeys) } - } else if p.JoinType == RightOuterJoin { + } else if p.JoinType == logicalop.RightOuterJoin { // for right out join, only the right partition keys can possibly matches the prop, because // the left partition keys will generate NULL values randomly // todo maybe we can add a null-sensitive flag in the MPPPartitionColumn to indicate whether the partition column is @@ -2589,10 +1946,106 @@ func choosePartitionKeys(keys []*property.MPPPartitionColumn, matches []int) []* return newKeys } -// ExhaustPhysicalPlans enumerate all the possible physical plan for expand operator. -// The second boolean means whether we should resort to enforcer to satisfy prop requirement. -// false means we should, while true means we should not. -func (p *LogicalExpand) ExhaustPhysicalPlans(prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { +// it can generates hash join, index join and sort merge join. +// Firstly we check the hint, if hint is figured by user, we force to choose the corresponding physical plan. +// If the hint is not matched, it will get other candidates. +// If the hint is not figured, we will pick all candidates. +func exhaustPhysicalPlans4LogicalJoin(lp base.LogicalPlan, prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { + p := lp.(*logicalop.LogicalJoin) + failpoint.Inject("MockOnlyEnableIndexHashJoin", func(val failpoint.Value) { + if val.(bool) && !p.SCtx().GetSessionVars().InRestrictedSQL { + indexJoins, _ := tryToGetIndexJoin(p, prop) + failpoint.Return(indexJoins, true, nil) + } + }) + + if !isJoinHintSupportedInMPPMode(p.PreferJoinType) { + if hasMPPJoinHints(p.PreferJoinType) { + // If there are MPP hints but has some conflicts join method hints, all the join hints are invalid. + p.SCtx().GetSessionVars().StmtCtx.SetHintWarning("The MPP join hints are in conflict, and you can only specify join method hints that are currently supported by MPP mode now") + p.PreferJoinType = 0 + } else { + // If there are no MPP hints but has some conflicts join method hints, the MPP mode will be blocked. + p.SCtx().GetSessionVars().RaiseWarningWhenMPPEnforced("MPP mode may be blocked because you have used hint to specify a join algorithm which is not supported by mpp now.") + if prop.IsFlashProp() { + return nil, false, nil + } + } + } + if prop.MPPPartitionTp == property.BroadcastType { + return nil, false, nil + } + joins := make([]base.PhysicalPlan, 0, 8) + canPushToTiFlash := p.CanPushToCop(kv.TiFlash) + if p.SCtx().GetSessionVars().IsMPPAllowed() && canPushToTiFlash { + if (p.PreferJoinType & h.PreferShuffleJoin) > 0 { + if shuffleJoins := tryToGetMppHashJoin(p, prop, false); len(shuffleJoins) > 0 { + return shuffleJoins, true, nil + } + } + if (p.PreferJoinType & h.PreferBCJoin) > 0 { + if bcastJoins := tryToGetMppHashJoin(p, prop, true); len(bcastJoins) > 0 { + return bcastJoins, true, nil + } + } + if preferMppBCJ(p) { + mppJoins := tryToGetMppHashJoin(p, prop, true) + joins = append(joins, mppJoins...) + } else { + mppJoins := tryToGetMppHashJoin(p, prop, false) + joins = append(joins, mppJoins...) + } + } else { + hasMppHints := false + var errMsg string + if (p.PreferJoinType & h.PreferShuffleJoin) > 0 { + errMsg = "The join can not push down to the MPP side, the shuffle_join() hint is invalid" + hasMppHints = true + } + if (p.PreferJoinType & h.PreferBCJoin) > 0 { + errMsg = "The join can not push down to the MPP side, the broadcast_join() hint is invalid" + hasMppHints = true + } + if hasMppHints { + p.SCtx().GetSessionVars().StmtCtx.SetHintWarning(errMsg) + } + } + if prop.IsFlashProp() { + return joins, true, nil + } + + if !p.IsNAAJ() { + // naaj refuse merge join and index join. + mergeJoins := GetMergeJoin(p, prop, p.Schema(), p.StatsInfo(), p.Children()[0].StatsInfo(), p.Children()[1].StatsInfo()) + if (p.PreferJoinType&h.PreferMergeJoin) > 0 && len(mergeJoins) > 0 { + return mergeJoins, true, nil + } + joins = append(joins, mergeJoins...) + + indexJoins, forced := tryToGetIndexJoin(p, prop) + if forced { + return indexJoins, true, nil + } + joins = append(joins, indexJoins...) + } + + hashJoins, forced := getHashJoins(p, prop) + if forced && len(hashJoins) > 0 { + return hashJoins, true, nil + } + joins = append(joins, hashJoins...) + + if p.PreferJoinType > 0 { + // If we reach here, it means we have a hint that doesn't work. + // It might be affected by the required property, so we enforce + // this property and try the hint again. + return joins, false, nil + } + return joins, true, nil +} + +func exhaustPhysicalPlans4LogicalExpand(lp base.LogicalPlan, prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { + p := lp.(*logicalop.LogicalExpand) // under the mpp task type, if the sort item is not empty, refuse it, cause expanded data doesn't support any sort items. if !prop.IsSortItemEmpty() { // false, meaning we can add a sort enforcer. @@ -2648,7 +2101,8 @@ func (p *LogicalExpand) ExhaustPhysicalPlans(prop *property.PhysicalProperty) ([ return physicalExpands, true, nil } -func exhaustPhysicalPlans4Projection(p *LogicalProjection, prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { +func exhaustPhysicalPlans4LogicalProjection(lp base.LogicalPlan, prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { + p := lp.(*logicalop.LogicalProjection) newProp, ok := p.TryToGetChildProp(prop) if !ok { return nil, true, nil @@ -2656,7 +2110,7 @@ func exhaustPhysicalPlans4Projection(p *LogicalProjection, prop *property.Physic newProps := []*property.PhysicalProperty{newProp} // generate a mpp task candidate if mpp mode is allowed ctx := p.SCtx() - pushDownCtx := GetPushDownCtx(ctx) + pushDownCtx := util.GetPushDownCtx(ctx) if newProp.TaskTp != property.MppTaskType && ctx.GetSessionVars().IsMPPAllowed() && p.CanPushToCop(kv.TiFlash) && expression.CanExprsPushDown(pushDownCtx, p.Exprs, kv.TiFlash) { mppProp := newProp.CloneEssentialFields() @@ -2674,9 +2128,8 @@ func exhaustPhysicalPlans4Projection(p *LogicalProjection, prop *property.Physic ret := make([]base.PhysicalPlan, 0, len(newProps)) for _, newProp := range newProps { proj := PhysicalProjection{ - Exprs: p.Exprs, - CalculateNoDelay: p.CalculateNoDelay, - AvoidColumnEvaluator: p.AvoidColumnEvaluator, + Exprs: p.Exprs, + CalculateNoDelay: p.CalculateNoDelay, }.Init(ctx, p.StatsInfo().ScaleByExpectCnt(prop.ExpectedCnt), p.QueryBlockOffset(), newProp) proj.SetSchema(p.Schema()) ret = append(ret, proj) @@ -2688,10 +2141,10 @@ func pushLimitOrTopNForcibly(p base.LogicalPlan) bool { var meetThreshold bool var preferPushDown *bool switch lp := p.(type) { - case *LogicalTopN: + case *logicalop.LogicalTopN: preferPushDown = &lp.PreferLimitToCop meetThreshold = lp.Count+lp.Offset <= uint64(lp.SCtx().GetSessionVars().LimitPushDownThreshold) - case *LogicalLimit: + case *logicalop.LogicalLimit: preferPushDown = &lp.PreferLimitToCop meetThreshold = true // always push Limit down in this case since it has no side effect default: @@ -2711,7 +2164,7 @@ func pushLimitOrTopNForcibly(p base.LogicalPlan) bool { return false } -func getPhysTopN(lt *LogicalTopN, prop *property.PhysicalProperty) []base.PhysicalPlan { +func getPhysTopN(lt *logicalop.LogicalTopN, prop *property.PhysicalProperty) []base.PhysicalPlan { allTaskTypes := []property.TaskType{property.CopSingleReadTaskType, property.CopMultiReadTaskType} if !pushLimitOrTopNForcibly(lt) { allTaskTypes = append(allTaskTypes, property.RootTaskType) @@ -2733,7 +2186,7 @@ func getPhysTopN(lt *LogicalTopN, prop *property.PhysicalProperty) []base.Physic return ret } -func getPhysLimits(lt *LogicalTopN, prop *property.PhysicalProperty) []base.PhysicalPlan { +func getPhysLimits(lt *logicalop.LogicalTopN, prop *property.PhysicalProperty) []base.PhysicalPlan { p, canPass := GetPropByOrderByItems(lt.ByItems) if !canPass { return nil @@ -2772,26 +2225,29 @@ func MatchItems(p *property.PhysicalProperty, items []*util.ByItems) bool { } // GetHashJoin is public for cascades planner. -func GetHashJoin(la *LogicalApply, prop *property.PhysicalProperty) *PhysicalHashJoin { +func GetHashJoin(la *logicalop.LogicalApply, prop *property.PhysicalProperty) *PhysicalHashJoin { return getHashJoin(&la.LogicalJoin, prop, 1, false) } -// ExhaustPhysicalPlans4LogicalApply generates the physical plan for a logical apply. -func ExhaustPhysicalPlans4LogicalApply(la *LogicalApply, prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { +// exhaustPhysicalPlans4LogicalApply generates the physical plan for a logical apply. +func exhaustPhysicalPlans4LogicalApply(lp base.LogicalPlan, prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { + la := lp.(*logicalop.LogicalApply) if !prop.AllColsFromSchema(la.Children()[0].Schema()) || prop.IsFlashProp() { // for convenient, we don't pass through any prop la.SCtx().GetSessionVars().RaiseWarningWhenMPPEnforced( "MPP mode may be blocked because operator `Apply` is not supported now.") return nil, true, nil } if !prop.IsSortItemEmpty() && la.SCtx().GetSessionVars().EnableParallelApply { - la.SCtx().GetSessionVars().StmtCtx.AppendWarning(errors.NewNoStackErrorf("Parallel Apply rejects the possible order properties of its outer child currently")) + la.SCtx().GetSessionVars().StmtCtx.AppendWarning(errors.NewNoStackError("Parallel Apply rejects the possible order properties of its outer child currently")) return nil, true, nil } disableAggPushDownToCop(la.Children()[0]) join := GetHashJoin(la, prop) var columns = make([]*expression.Column, 0, len(la.CorCols)) for _, colColumn := range la.CorCols { - columns = append(columns, &colColumn.Column) + // fix the liner warning. + tmp := colColumn + columns = append(columns, &tmp.Column) } cacheHitRatio := 0.0 if la.StatsInfo().RowCount != 0 { @@ -2825,12 +2281,12 @@ func disableAggPushDownToCop(p base.LogicalPlan) { for _, child := range p.Children() { disableAggPushDownToCop(child) } - if agg, ok := p.(*LogicalAggregation); ok { + if agg, ok := p.(*logicalop.LogicalAggregation); ok { agg.NoCopPushDown = true } } -func tryToGetMppWindows(lw *LogicalWindow, prop *property.PhysicalProperty) []base.PhysicalPlan { +func tryToGetMppWindows(lw *logicalop.LogicalWindow, prop *property.PhysicalProperty) []base.PhysicalPlan { if !prop.IsSortItemAllForPartition() { return nil } @@ -2845,7 +2301,7 @@ func tryToGetMppWindows(lw *LogicalWindow, prop *property.PhysicalProperty) []ba allSupported := true sctx := lw.SCtx() for _, windowFunc := range lw.WindowFuncDescs { - if !windowFunc.CanPushDownToTiFlash(GetPushDownCtx(sctx)) { + if !windowFunc.CanPushDownToTiFlash(util.GetPushDownCtx(sctx)) { lw.SCtx().GetSessionVars().RaiseWarningWhenMPPEnforced( "MPP mode may be blocked because window function `" + windowFunc.Name + "` or its arguments are not supported now.") allSupported = false @@ -2927,7 +2383,8 @@ func tryToGetMppWindows(lw *LogicalWindow, prop *property.PhysicalProperty) []ba return []base.PhysicalPlan{window} } -func exhaustLogicalWindowPhysicalPlans(lw *LogicalWindow, prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { +func exhaustPhysicalPlans4LogicalWindow(lp base.LogicalPlan, prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { + lw := lp.(*logicalop.LogicalWindow) windows := make([]base.PhysicalPlan, 0, 2) canPushToTiFlash := lw.CanPushToCop(kv.TiFlash) @@ -2977,8 +2434,8 @@ func canPushToCopImpl(lp base.LogicalPlan, storeTp kv.StoreType, considerDual bo } ret = ret && validDs - _, isTopN := p.Self().(*LogicalTopN) - _, isLimit := p.Self().(*LogicalLimit) + _, isTopN := p.Self().(*logicalop.LogicalTopN) + _, isLimit := p.Self().(*logicalop.LogicalLimit) if (isTopN || isLimit) && indexMergeIsIntersection { return false // TopN and Limit cannot be pushed down to the intersection type IndexMerge } @@ -2990,44 +2447,44 @@ func canPushToCopImpl(lp base.LogicalPlan, storeTp kv.StoreType, considerDual bo // Once aggregation is pushed to cop, the cache data can't be use any more. return false } - case *LogicalUnionAll: + case *logicalop.LogicalUnionAll: if storeTp != kv.TiFlash { return false } ret = ret && canPushToCopImpl(&c.BaseLogicalPlan, storeTp, true) - case *LogicalSort: + case *logicalop.LogicalSort: if storeTp != kv.TiFlash { return false } ret = ret && canPushToCopImpl(&c.BaseLogicalPlan, storeTp, true) - case *LogicalProjection: + case *logicalop.LogicalProjection: if storeTp != kv.TiFlash { return false } ret = ret && canPushToCopImpl(&c.BaseLogicalPlan, storeTp, considerDual) - case *LogicalExpand: + case *logicalop.LogicalExpand: // Expand itself only contains simple col ref and literal projection. (always ok, check its child) if storeTp != kv.TiFlash { return false } ret = ret && canPushToCopImpl(&c.BaseLogicalPlan, storeTp, considerDual) - case *LogicalTableDual: + case *logicalop.LogicalTableDual: return storeTp == kv.TiFlash && considerDual - case *LogicalAggregation, *LogicalSelection, *LogicalJoin, *LogicalWindow: + case *logicalop.LogicalAggregation, *logicalop.LogicalSelection, *logicalop.LogicalJoin, *logicalop.LogicalWindow: if storeTp != kv.TiFlash { return false } ret = ret && c.CanPushToCop(storeTp) // These operators can be partially push down to TiFlash, so we don't raise warning for them. - case *LogicalLimit, *LogicalTopN: + case *logicalop.LogicalLimit, *logicalop.LogicalTopN: return false - case *LogicalSequence: + case *logicalop.LogicalSequence: return storeTp == kv.TiFlash case *LogicalCTE: if storeTp != kv.TiFlash { return false } - if c.Cte.recursivePartLogicalPlan != nil || !c.Cte.seedPartLogicalPlan.CanPushToCop(storeTp) { + if c.Cte.RecursivePartLogicalPlan != nil || !c.Cte.SeedPartLogicalPlan.CanPushToCop(storeTp) { return false } return true @@ -3040,7 +2497,7 @@ func canPushToCopImpl(lp base.LogicalPlan, storeTp kv.StoreType, considerDual bo return ret } -func getEnforcedStreamAggs(la *LogicalAggregation, prop *property.PhysicalProperty) []base.PhysicalPlan { +func getEnforcedStreamAggs(la *logicalop.LogicalAggregation, prop *property.PhysicalProperty) []base.PhysicalPlan { if prop.IsFlashProp() { return nil } @@ -3085,21 +2542,8 @@ func getEnforcedStreamAggs(la *LogicalAggregation, prop *property.PhysicalProper return enforcedAggs } -func (la *LogicalAggregation) distinctArgsMeetsProperty() bool { - for _, aggFunc := range la.AggFuncs { - if aggFunc.HasDistinct { - for _, distinctArg := range aggFunc.Args { - if !expression.Contains(la.SCtx().GetExprCtx().GetEvalCtx(), la.GroupByItems, distinctArg) { - return false - } - } - } - } - return true -} - func getStreamAggs(lp base.LogicalPlan, prop *property.PhysicalProperty) []base.PhysicalPlan { - la := lp.(*LogicalAggregation) + la := lp.(*logicalop.LogicalAggregation) // TODO: support CopTiFlash task type in stream agg if prop.IsFlashProp() { return nil @@ -3177,7 +2621,7 @@ func getStreamAggs(lp base.LogicalPlan, prop *property.PhysicalProperty) []base. } // TODO: support more operators and distinct later -func checkCanPushDownToMPP(la *LogicalAggregation) bool { +func checkCanPushDownToMPP(la *logicalop.LogicalAggregation) bool { hasUnsupportedDistinct := false for _, agg := range la.AggFuncs { // MPP does not support distinct except count distinct now @@ -3203,7 +2647,7 @@ func checkCanPushDownToMPP(la *LogicalAggregation) bool { return CheckAggCanPushCop(la.SCtx(), la.AggFuncs, la.GroupByItems, kv.TiFlash) } -func tryToGetMppHashAggs(la *LogicalAggregation, prop *property.PhysicalProperty) (hashAggs []base.PhysicalPlan) { +func tryToGetMppHashAggs(la *logicalop.LogicalAggregation, prop *property.PhysicalProperty) (hashAggs []base.PhysicalPlan) { if !prop.IsSortItemEmpty() { return nil } @@ -3351,7 +2795,7 @@ func tryToGetMppHashAggs(la *LogicalAggregation, prop *property.PhysicalProperty // // That is to say, the non-complete positive judgement of canPushDownToMPP/canPushDownToTiFlash/canPushDownToTiKV is not that for sure here. func getHashAggs(lp base.LogicalPlan, prop *property.PhysicalProperty) []base.PhysicalPlan { - la := lp.(*LogicalAggregation) + la := lp.(*logicalop.LogicalAggregation) if !prop.IsSortItemEmpty() { return nil } @@ -3411,14 +2855,41 @@ func getHashAggs(lp base.LogicalPlan, prop *property.PhysicalProperty) []base.Ph return hashAggs } -func exhaustPhysicalPlans4LogicalSelection(p *LogicalSelection, prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { +func exhaustPhysicalPlans4LogicalAggregation(lp base.LogicalPlan, prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { + la := lp.(*logicalop.LogicalAggregation) + if la.PreferAggToCop { + if !la.CanPushToCop(kv.TiKV) { + la.SCtx().GetSessionVars().StmtCtx.SetHintWarning( + "Optimizer Hint AGG_TO_COP is inapplicable") + la.PreferAggToCop = false + } + } + preferHash, preferStream := la.ResetHintIfConflicted() + hashAggs := getHashAggs(la, prop) + if hashAggs != nil && preferHash { + return hashAggs, true, nil + } + streamAggs := getStreamAggs(la, prop) + if streamAggs != nil && preferStream { + return streamAggs, true, nil + } + aggs := append(hashAggs, streamAggs...) + + if streamAggs == nil && preferStream && !prop.IsSortItemEmpty() { + la.SCtx().GetSessionVars().StmtCtx.SetHintWarning("Optimizer Hint STREAM_AGG is inapplicable") + } + return aggs, !(preferStream || preferHash), nil +} + +func exhaustPhysicalPlans4LogicalSelection(lp base.LogicalPlan, prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { + p := lp.(*logicalop.LogicalSelection) newProps := make([]*property.PhysicalProperty, 0, 2) childProp := prop.CloneEssentialFields() newProps = append(newProps, childProp) if prop.TaskTp != property.MppTaskType && p.SCtx().GetSessionVars().IsMPPAllowed() && - p.canPushDown(kv.TiFlash) { + p.CanPushDown(kv.TiFlash) { childPropMpp := prop.CloneEssentialFields() childPropMpp.TaskTp = property.MppTaskType newProps = append(newProps, childPropMpp) @@ -3434,7 +2905,12 @@ func exhaustPhysicalPlans4LogicalSelection(p *LogicalSelection, prop *property.P return ret, true, nil } -func getLimitPhysicalPlans(p *LogicalLimit, prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { +func exhaustPhysicalPlans4LogicalLimit(lp base.LogicalPlan, prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { + p := lp.(*logicalop.LogicalLimit) + return getLimitPhysicalPlans(p, prop) +} + +func getLimitPhysicalPlans(p *logicalop.LogicalLimit, prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { if !prop.IsSortItemEmpty() { return nil, true, nil } @@ -3460,7 +2936,8 @@ func getLimitPhysicalPlans(p *LogicalLimit, prop *property.PhysicalProperty) ([] return ret, true, nil } -func getLockPhysicalPlans(p *LogicalLock, prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { +func exhaustPhysicalPlans4LogicalLock(lp base.LogicalPlan, prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { + p := lp.(*logicalop.LogicalLock) if prop.IsFlashProp() { p.SCtx().GetSessionVars().RaiseWarningWhenMPPEnforced( "MPP mode may be blocked because operator `Lock` is not supported now.") @@ -3475,7 +2952,8 @@ func getLockPhysicalPlans(p *LogicalLock, prop *property.PhysicalProperty) ([]ba return []base.PhysicalPlan{lock}, true, nil } -func exhaustUnionAllPhysicalPlans(p *LogicalUnionAll, prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { +func exhaustPhysicalPlans4LogicalUnionAll(lp base.LogicalPlan, prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { + p := lp.(*logicalop.LogicalUnionAll) // TODO: UnionAll can not pass any order, but we can change it to sort merge to keep order. if !prop.IsSortItemEmpty() || (prop.IsFlashProp() && prop.TaskTp != property.MppTaskType) { return nil, true, nil @@ -3519,7 +2997,8 @@ func exhaustUnionAllPhysicalPlans(p *LogicalUnionAll, prop *property.PhysicalPro return []base.PhysicalPlan{ua}, true, nil } -func exhaustPartitionUnionAllPhysicalPlans(p *LogicalPartitionUnionAll, prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { +func exhaustPhysicalPlans4LogicalPartitionUnionAll(lp base.LogicalPlan, prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { + p := lp.(*logicalop.LogicalPartitionUnionAll) uas, flagHint, err := p.LogicalUnionAll.ExhaustPhysicalPlans(prop) if err != nil { return nil, false, err @@ -3530,12 +3009,41 @@ func exhaustPartitionUnionAllPhysicalPlans(p *LogicalPartitionUnionAll, prop *pr return uas, flagHint, nil } -func getPhysicalSort(ls *LogicalSort, prop *property.PhysicalProperty) *PhysicalSort { +func exhaustPhysicalPlans4LogicalTopN(lp base.LogicalPlan, prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { + lt := lp.(*logicalop.LogicalTopN) + if MatchItems(prop, lt.ByItems) { + return append(getPhysTopN(lt, prop), getPhysLimits(lt, prop)...), true, nil + } + return nil, true, nil +} + +func exhaustPhysicalPlans4LogicalSort(lp base.LogicalPlan, prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { + ls := lp.(*logicalop.LogicalSort) + if prop.TaskTp == property.RootTaskType { + if MatchItems(prop, ls.ByItems) { + ret := make([]base.PhysicalPlan, 0, 2) + ret = append(ret, getPhysicalSort(ls, prop)) + ns := getNominalSort(ls, prop) + if ns != nil { + ret = append(ret, ns) + } + return ret, true, nil + } + } else if prop.TaskTp == property.MppTaskType && prop.RejectSort { + if canPushToCopImpl(&ls.BaseLogicalPlan, kv.TiFlash, true) { + ps := getNominalSortSimple(ls, prop) + return []base.PhysicalPlan{ps}, true, nil + } + } + return nil, true, nil +} + +func getPhysicalSort(ls *logicalop.LogicalSort, prop *property.PhysicalProperty) base.PhysicalPlan { ps := PhysicalSort{ByItems: ls.ByItems}.Init(ls.SCtx(), ls.StatsInfo().ScaleByExpectCnt(prop.ExpectedCnt), ls.QueryBlockOffset(), &property.PhysicalProperty{TaskTp: prop.TaskTp, ExpectedCnt: math.MaxFloat64, RejectSort: true, CTEProducerStatus: prop.CTEProducerStatus}) return ps } -func getNominalSort(ls *LogicalSort, reqProp *property.PhysicalProperty) *NominalSort { +func getNominalSort(ls *logicalop.LogicalSort, reqProp *property.PhysicalProperty) *NominalSort { prop, canPass, onlyColumn := GetPropByOrderByItemsContainScalarFunc(ls.ByItems) if !canPass { return nil @@ -3547,7 +3055,7 @@ func getNominalSort(ls *LogicalSort, reqProp *property.PhysicalProperty) *Nomina return ps } -func getNominalSortSimple(ls *LogicalSort, reqProp *property.PhysicalProperty) *NominalSort { +func getNominalSortSimple(ls *logicalop.LogicalSort, reqProp *property.PhysicalProperty) *NominalSort { newProp := reqProp.CloneEssentialFields() newProp.RejectSort = true ps := NominalSort{OnlyColumn: true, ByItems: ls.ByItems}.Init( @@ -3573,11 +3081,12 @@ func exhaustPhysicalPlans4LogicalCTE(p *LogicalCTE, prop *property.PhysicalPrope }.Init(p.SCtx(), p.StatsInfo()) } pcte.SetSchema(p.Schema()) - pcte.childrenReqProps = []*property.PhysicalProperty{prop.CloneEssentialFields()} + pcte.SetChildrenReqProps([]*property.PhysicalProperty{prop.CloneEssentialFields()}) return []base.PhysicalPlan{(*PhysicalCTEStorage)(pcte)}, true, nil } -func exhaustPhysicalPlans4LogicalSequence(p *LogicalSequence, prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { +func exhaustPhysicalPlans4LogicalSequence(lp base.LogicalPlan, prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { + p := lp.(*logicalop.LogicalSequence) possibleChildrenProps := make([][]*property.PhysicalProperty, 0, 2) anyType := &property.PhysicalProperty{TaskTp: property.MppTaskType, ExpectedCnt: math.MaxFloat64, MPPPartitionTp: property.AnyType, CanAddEnforcer: true, RejectSort: true, CTEProducerStatus: prop.CTEProducerStatus} if prop.TaskTp == property.MppTaskType { diff --git a/pkg/planner/core/exhaust_physical_plans_test.go b/pkg/planner/core/exhaust_physical_plans_test.go index 0c77ef4055052..982806a3b3740 100644 --- a/pkg/planner/core/exhaust_physical_plans_test.go +++ b/pkg/planner/core/exhaust_physical_plans_test.go @@ -26,6 +26,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/statistics" @@ -53,7 +54,7 @@ type indexJoinContext struct { dataSourceNode *DataSource dsNames types.NameSlice path *util.AccessPath - joinNode *LogicalJoin + joinNode *logicalop.LogicalJoin joinColNames types.NameSlice } @@ -64,7 +65,7 @@ func prepareForAnalyzeLookUpFilters() *indexJoinContext { do.StatsHandle().Close() }() ctx.GetSessionVars().PlanID.Store(-1) - joinNode := LogicalJoin{}.Init(ctx.GetPlanCtx(), 0) + joinNode := logicalop.LogicalJoin{}.Init(ctx.GetPlanCtx(), 0) dataSourceNode := DataSource{}.Init(ctx.GetPlanCtx(), 0) dsSchema := expression.NewSchema() var dsNames types.NameSlice @@ -184,7 +185,7 @@ type indexJoinTestCase struct { compareFilters string } -func testAnalyzeLookUpFilters(t *testing.T, testCtx *indexJoinContext, testCase *indexJoinTestCase, msgAndArgs ...any) *indexJoinBuildHelper { +func testAnalyzeLookUpFilters(t *testing.T, testCtx *indexJoinContext, testCase *indexJoinTestCase, msgAndArgs ...any) *indexJoinPathResult { ctx := testCtx.dataSourceNode.SCtx() ctx.GetSessionVars().RangeMaxSize = testCase.rangeMaxSize dataSourceNode := testCtx.dataSourceNode @@ -195,23 +196,32 @@ func testAnalyzeLookUpFilters(t *testing.T, testCtx *indexJoinContext, testCase others, err := rewriteSimpleExpr(ctx.GetExprCtx(), testCase.otherConds, joinNode.Schema(), testCtx.joinColNames) require.NoError(t, err) joinNode.OtherConditions = others - helper := &indexJoinBuildHelper{join: joinNode, lastColManager: nil, innerPlan: dataSourceNode} - _, err = helper.analyzeLookUpFilters(testCtx.path, dataSourceNode, testCase.innerKeys, testCase.innerKeys, testCase.rebuildMode) - if helper.chosenRanges == nil { - helper.chosenRanges = ranger.Ranges{} + indexJoinInfo := &indexJoinPathInfo{ + joinOtherConditions: others, + outerJoinKeys: testCase.innerKeys, + innerJoinKeys: testCase.innerKeys, + innerStats: dataSourceNode.StatsInfo(), + innerSchema: dataSourceNode.Schema(), + innerPushedConditions: dataSourceNode.PushedDownConds} + result, _, err := indexJoinPathBuild(ctx, testCtx.path, indexJoinInfo, testCase.rebuildMode) + if result == nil { + result = &indexJoinPathResult{} + } + if result.chosenRanges == nil { + result.chosenRanges = ranger.Ranges{} } require.NoError(t, err) if testCase.rebuildMode { - require.Equal(t, testCase.ranges, fmt.Sprintf("%v", helper.chosenRanges.Range()), msgAndArgs) + require.Equal(t, testCase.ranges, fmt.Sprintf("%v", result.chosenRanges.Range()), msgAndArgs) } else { ectx := ctx.GetExprCtx().GetEvalCtx() - require.Equal(t, testCase.accesses, expression.StringifyExpressionsWithCtx(ectx, helper.chosenAccess), msgAndArgs) - require.Equal(t, testCase.ranges, fmt.Sprintf("%v", helper.chosenRanges.Range()), msgAndArgs) - require.Equal(t, testCase.idxOff2KeyOff, fmt.Sprintf("%v", helper.idxOff2KeyOff), msgAndArgs) - require.Equal(t, testCase.remained, expression.StringifyExpressionsWithCtx(ectx, helper.chosenRemained), msgAndArgs) - require.Equal(t, testCase.compareFilters, fmt.Sprintf("%v", helper.lastColManager), msgAndArgs) + require.Equal(t, testCase.accesses, expression.StringifyExpressionsWithCtx(ectx, result.chosenAccess), msgAndArgs) + require.Equal(t, testCase.ranges, fmt.Sprintf("%v", result.chosenRanges.Range()), msgAndArgs) + require.Equal(t, testCase.idxOff2KeyOff, fmt.Sprintf("%v", result.idxOff2KeyOff), msgAndArgs) + require.Equal(t, testCase.remained, expression.StringifyExpressionsWithCtx(ectx, result.chosenRemained), msgAndArgs) + require.Equal(t, testCase.compareFilters, fmt.Sprintf("%v", result.lastColManager), msgAndArgs) } - return helper + return result } func TestIndexJoinAnalyzeLookUpFilters(t *testing.T) { diff --git a/pkg/planner/core/explain.go b/pkg/planner/core/explain.go index 8bbacfd796615..81c6057aed2be 100644 --- a/pkg/planner/core/explain.go +++ b/pkg/planner/core/explain.go @@ -23,9 +23,11 @@ import ( perrors "github.com/pingcap/errors" "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/expression/aggregation" + "github.com/pingcap/tidb/pkg/infoschema" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/mysql" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/sessionctx/variable" @@ -165,7 +167,9 @@ func (p *PhysicalTableScan) ExplainID() fmt.Stringer { // TP overrides the TP in order to match different range. func (p *PhysicalTableScan) TP() string { - if p.isChildOfIndexLookUp { + if infoschema.IsClusterTableByName(p.DBName.O, p.Table.Name.O) { + return plancodec.TypeMemTableScan + } else if p.isChildOfIndexLookUp { return plancodec.TypeTableRowIDScan } else if p.isFullScan() { return plancodec.TypeTableFullScan @@ -185,6 +189,10 @@ func (p *PhysicalTableScan) ExplainNormalizedInfo() string { // OperatorInfo implements dataAccesser interface. func (p *PhysicalTableScan) OperatorInfo(normalized bool) string { + if infoschema.IsClusterTableByName(p.DBName.O, p.Table.Name.O) { + return "" + } + ectx := p.SCtx().GetExprCtx().GetEvalCtx() redact := p.SCtx().GetSessionVars().EnableRedactLog var buffer strings.Builder @@ -433,7 +441,7 @@ func (p *PhysicalTableDual) ExplainInfo() string { // ExplainInfo implements Plan interface. func (p *PhysicalSort) ExplainInfo() string { buffer := bytes.NewBufferString("") - buffer = explainByItems(p.SCtx().GetExprCtx().GetEvalCtx(), buffer, p.ByItems) + buffer = util.ExplainByItems(p.SCtx().GetExprCtx().GetEvalCtx(), buffer, p.ByItems) if p.TiFlashFineGrainedShuffleStreamCount > 0 { fmt.Fprintf(buffer, ", stream_count: %d", p.TiFlashFineGrainedShuffleStreamCount) } @@ -446,7 +454,7 @@ func (p *PhysicalLimit) ExplainInfo() string { redact := p.SCtx().GetSessionVars().EnableRedactLog buffer := bytes.NewBufferString("") if len(p.GetPartitionBy()) > 0 { - buffer = explainPartitionBy(ectx, buffer, p.GetPartitionBy(), false) + buffer = util.ExplainPartitionBy(ectx, buffer, p.GetPartitionBy(), false) fmt.Fprintf(buffer, ", ") } if redact == perrors.RedactLogDisable { @@ -737,26 +745,12 @@ func (p *PhysicalMergeJoin) ExplainNormalizedInfo() string { return p.explainInfo(true) } -// explainPartitionBy: produce text for p.PartitionBy. Common for window functions and TopN. -func explainPartitionBy(ctx expression.EvalContext, buffer *bytes.Buffer, partitionBy []property.SortItem, normalized bool) *bytes.Buffer { - if len(partitionBy) > 0 { - buffer.WriteString("partition by ") - for i, item := range partitionBy { - fmt.Fprintf(buffer, "%s", item.Col.ColumnExplainInfo(ctx, normalized)) - if i+1 < len(partitionBy) { - buffer.WriteString(", ") - } - } - } - return buffer -} - // ExplainInfo implements Plan interface. func (p *PhysicalTopN) ExplainInfo() string { ectx := p.SCtx().GetExprCtx().GetEvalCtx() buffer := bytes.NewBufferString("") if len(p.GetPartitionBy()) > 0 { - buffer = explainPartitionBy(ectx, buffer, p.GetPartitionBy(), false) + buffer = util.ExplainPartitionBy(ectx, buffer, p.GetPartitionBy(), false) buffer.WriteString(" ") } if len(p.ByItems) > 0 { @@ -765,7 +759,7 @@ func (p *PhysicalTopN) ExplainInfo() string { if len(p.GetPartitionBy()) > 0 { buffer.WriteString("order by ") } - buffer = explainByItems(p.SCtx().GetExprCtx().GetEvalCtx(), buffer, p.ByItems) + buffer = util.ExplainByItems(p.SCtx().GetExprCtx().GetEvalCtx(), buffer, p.ByItems) } switch p.SCtx().GetSessionVars().EnableRedactLog { case perrors.RedactLogDisable: @@ -783,7 +777,7 @@ func (p *PhysicalTopN) ExplainNormalizedInfo() string { ectx := p.SCtx().GetExprCtx().GetEvalCtx() buffer := bytes.NewBufferString("") if len(p.GetPartitionBy()) > 0 { - buffer = explainPartitionBy(ectx, buffer, p.GetPartitionBy(), true) + buffer = util.ExplainPartitionBy(ectx, buffer, p.GetPartitionBy(), true) buffer.WriteString(" ") } if len(p.ByItems) > 0 { @@ -797,7 +791,7 @@ func (p *PhysicalTopN) ExplainNormalizedInfo() string { return buffer.String() } -func (p *PhysicalWindow) formatFrameBound(buffer *bytes.Buffer, bound *FrameBound) { +func (p *PhysicalWindow) formatFrameBound(buffer *bytes.Buffer, bound *logicalop.FrameBound) { if bound.Type == ast.CurrentRow { buffer.WriteString("current row") return @@ -839,7 +833,7 @@ func (p *PhysicalWindow) ExplainInfo() string { formatWindowFuncDescs(ectx, buffer, p.WindowFuncDescs, p.schema) buffer.WriteString(" over(") isFirst := true - buffer = explainPartitionBy(ectx, buffer, p.PartitionBy, false) + buffer = util.ExplainPartitionBy(ectx, buffer, p.PartitionBy, false) if len(p.PartitionBy) > 0 { isFirst = false } @@ -947,21 +941,6 @@ func (p *PhysicalExchangeReceiver) ExplainInfo() (res string) { return res } -func explainByItems(ctx expression.EvalContext, buffer *bytes.Buffer, byItems []*util.ByItems) *bytes.Buffer { - for i, item := range byItems { - if item.Desc { - fmt.Fprintf(buffer, "%s:desc", item.Expr.ExplainInfo(ctx)) - } else { - fmt.Fprintf(buffer, "%s", item.Expr.ExplainInfo(ctx)) - } - - if i+1 < len(byItems) { - buffer.WriteString(", ") - } - } - return buffer -} - func explainNormalizedByItems(buffer *bytes.Buffer, byItems []*util.ByItems) *bytes.Buffer { for i, item := range byItems { if item.Desc { diff --git a/pkg/planner/core/expression_rewriter.go b/pkg/planner/core/expression_rewriter.go index a150683fd70c0..4e5aa75339799 100644 --- a/pkg/planner/core/expression_rewriter.go +++ b/pkg/planner/core/expression_rewriter.go @@ -92,7 +92,7 @@ func rewriteAstExprWithPlanCtx(sctx base.PlanContext, expr ast.ExprNode, schema } b, savedBlockNames := NewPlanBuilder().Init(sctx, is, hint.NewQBHintHandler(nil)) b.allowBuildCastArray = allowCastArray - fakePlan := LogicalTableDual{}.Init(sctx, 0) + fakePlan := logicalop.LogicalTableDual{}.Init(sctx, 0) if schema != nil { fakePlan.SetSchema(schema) fakePlan.SetOutputNames(names) @@ -334,7 +334,7 @@ type exprRewriterPlanCtx struct { // of the "INSERT" statement. insertPlan *Insert - rollExpand *LogicalExpand + rollExpand *logicalop.LogicalExpand } type expressionRewriter struct { @@ -814,7 +814,7 @@ func (er *expressionRewriter) handleCompareSubquery(ctx context.Context, planCtx // it will be rewrote to t.id < (select max(s.id) from s). func (er *expressionRewriter) handleOtherComparableSubq(planCtx *exprRewriterPlanCtx, lexpr, rexpr expression.Expression, np base.LogicalPlan, useMin bool, cmpFunc string, all, markNoDecorrelate bool) { intest.AssertNotNil(planCtx) - plan4Agg := LogicalAggregation{}.Init(planCtx.builder.ctx, planCtx.builder.getSelectOffset()) + plan4Agg := logicalop.LogicalAggregation{}.Init(planCtx.builder.ctx, planCtx.builder.getSelectOffset()) if hintinfo := planCtx.builder.TableHints(); hintinfo != nil { plan4Agg.PreferAggType = hintinfo.PreferAggType plan4Agg.PreferAggToCop = hintinfo.PreferAggToCop @@ -849,7 +849,7 @@ func (er *expressionRewriter) handleOtherComparableSubq(planCtx *exprRewriterPla } // buildQuantifierPlan adds extra condition for any / all subquery. -func (er *expressionRewriter) buildQuantifierPlan(planCtx *exprRewriterPlanCtx, plan4Agg *LogicalAggregation, cond, lexpr, rexpr expression.Expression, all, markNoDecorrelate bool) { +func (er *expressionRewriter) buildQuantifierPlan(planCtx *exprRewriterPlanCtx, plan4Agg *logicalop.LogicalAggregation, cond, lexpr, rexpr expression.Expression, all, markNoDecorrelate bool) { intest.AssertNotNil(planCtx) innerIsNull := expression.NewFunctionInternal(er.sctx, ast.IsNull, types.NewFieldType(mysql.TypeTiny), rexpr) outerIsNull := expression.NewFunctionInternal(er.sctx, ast.IsNull, types.NewFieldType(mysql.TypeTiny), lexpr) @@ -912,9 +912,9 @@ func (er *expressionRewriter) buildQuantifierPlan(planCtx *exprRewriterPlanCtx, } // If we treat the result as a scalar value, we will add a projection with a extra column to output true, false or null. outerSchemaLen := planCtx.plan.Schema().Len() - planCtx.plan = planCtx.builder.buildApplyWithJoinType(planCtx.plan, plan4Agg, InnerJoin, markNoDecorrelate) + planCtx.plan = planCtx.builder.buildApplyWithJoinType(planCtx.plan, plan4Agg, logicalop.InnerJoin, markNoDecorrelate) joinSchema := planCtx.plan.Schema() - proj := LogicalProjection{ + proj := logicalop.LogicalProjection{ Exprs: expression.Column2Exprs(joinSchema.Clone().Columns[:outerSchemaLen]), }.Init(planCtx.builder.ctx, planCtx.builder.getSelectOffset()) proj.SetOutputNames(make([]*types.FieldName, outerSchemaLen, outerSchemaLen+1)) @@ -951,7 +951,7 @@ func (er *expressionRewriter) handleNEAny(planCtx *exprRewriterPlanCtx, lexpr, r er.err = err return } - plan4Agg := LogicalAggregation{ + plan4Agg := logicalop.LogicalAggregation{ AggFuncs: []*aggregation.AggFuncDesc{maxFunc, countFunc}, }.Init(sctx, planCtx.builder.getSelectOffset()) if hintinfo := planCtx.builder.TableHints(); hintinfo != nil { @@ -994,7 +994,7 @@ func (er *expressionRewriter) handleEQAll(planCtx *exprRewriterPlanCtx, lexpr, r er.err = err return } - plan4Agg := LogicalAggregation{ + plan4Agg := logicalop.LogicalAggregation{ AggFuncs: []*aggregation.AggFuncDesc{maxFunc, countFunc}, }.Init(sctx, planCtx.builder.getSelectOffset()) if hintinfo := planCtx.builder.TableHints(); hintinfo != nil { @@ -1118,11 +1118,11 @@ out: switch plan := p.(type) { // This can be removed when in exists clause, // e.g. exists(select count(*) from t order by a) is equal to exists t. - case *LogicalProjection, *LogicalSort: + case *logicalop.LogicalProjection, *logicalop.LogicalSort: p = p.Children()[0] - case *LogicalAggregation: + case *logicalop.LogicalAggregation: if len(plan.GroupByItems) == 0 { - p = LogicalTableDual{RowCount: 1}.Init(planCtx.builder.ctx, planCtx.builder.getSelectOffset()) + p = logicalop.LogicalTableDual{RowCount: 1}.Init(planCtx.builder.ctx, planCtx.builder.getSelectOffset()) break out } p = p.Children()[0] @@ -1237,7 +1237,7 @@ func (er *expressionRewriter) handleInSubquery(ctx context.Context, planCtx *exp return v, true } // Build inner join above the aggregation. - join := LogicalJoin{JoinType: InnerJoin}.Init(planCtx.builder.ctx, planCtx.builder.getSelectOffset()) + join := logicalop.LogicalJoin{JoinType: logicalop.InnerJoin}.Init(planCtx.builder.ctx, planCtx.builder.getSelectOffset()) join.SetChildren(planCtx.plan, agg) join.SetSchema(expression.MergeSchema(planCtx.plan.Schema(), agg.Schema())) join.SetOutputNames(make([]*types.FieldName, planCtx.plan.Schema().Len()+agg.Schema().Len())) @@ -1283,7 +1283,7 @@ func (er *expressionRewriter) handleScalarSubquery(ctx context.Context, planCtx } if planCtx.builder.disableSubQueryPreprocessing || len(coreusage.ExtractCorrelatedCols4LogicalPlan(np)) > 0 || hasCTEConsumerInSubPlan(np) { - planCtx.plan = planCtx.builder.buildApplyWithJoinType(planCtx.plan, np, LeftOuterJoin, noDecorrelate) + planCtx.plan = planCtx.builder.buildApplyWithJoinType(planCtx.plan, np, logicalop.LeftOuterJoin, noDecorrelate) if np.Schema().Len() > 1 { newCols := make([]expression.Expression, 0, np.Schema().Len()) for _, col := range np.Schema().Columns { @@ -1445,19 +1445,7 @@ func (er *expressionRewriter) Leave(originInNode ast.Node) (retNode ast.Node, ok } er.ctxStackAppend(value, types.EmptyName) case *driver.ParamMarkerExpr: - withPlanCtx(func(planCtx *exprRewriterPlanCtx) { - var value *expression.Constant - value, er.err = expression.ParamMarkerExpression(planCtx.builder.ctx, v, false) - if er.err != nil { - return - } - initConstantRepertoire(er.sctx.GetEvalCtx(), value) - er.adjustUTF8MB4Collation(value.RetType) - if er.err != nil { - return - } - er.ctxStackAppend(value, types.EmptyName) - }) + er.toParamMarker(v) case *ast.VariableExpr: withPlanCtx(func(planCtx *exprRewriterPlanCtx) { er.rewriteVariable(planCtx, v) @@ -2342,7 +2330,7 @@ func (er *expressionRewriter) funcCallToExpressionWithPlanCtx(planCtx *exprRewri return } // resolve grouping args in group by items or not. - resolvedCols, err := planCtx.rollExpand.resolveGroupingFuncArgsInGroupBy(args) + resolvedCols, err := planCtx.rollExpand.ResolveGroupingFuncArgsInGroupBy(args) if err != nil { er.err = err er.ctxStackAppend(nil, types.EmptyName) @@ -2407,6 +2395,20 @@ func (er *expressionRewriter) toTable(v *ast.TableName) { er.ctxStackAppend(val, types.EmptyName) } +func (er *expressionRewriter) toParamMarker(v *driver.ParamMarkerExpr) { + var value *expression.Constant + value, er.err = expression.ParamMarkerExpression(er.sctx, v, false) + if er.err != nil { + return + } + initConstantRepertoire(er.sctx.GetEvalCtx(), value) + er.adjustUTF8MB4Collation(value.RetType) + if er.err != nil { + return + } + er.ctxStackAppend(value, types.EmptyName) +} + func (er *expressionRewriter) clause() clauseCode { if er.planCtx != nil { return er.planCtx.builder.curClause @@ -2428,6 +2430,16 @@ func (er *expressionRewriter) toColumn(v *ast.ColumnName) { } er.ctxStackAppend(column, er.names[idx]) return + } else if er.planCtx == nil && er.sourceTable != nil && + (v.Table.L == "" || er.sourceTable.Name.L == v.Table.L) { + colInfo := er.sourceTable.FindPublicColumnByName(v.Name.L) + if colInfo == nil || colInfo.Hidden { + er.err = plannererrors.ErrUnknownColumn.GenWithStackByArgs(v.Name, clauseMsg[er.clause()]) + return + } + er.ctxStackAppend(&expression.Column{RetType: &colInfo.FieldType, ID: colInfo.ID, UniqueID: colInfo.ID}, + &types.FieldName{ColName: v.Name}) + return } planCtx := er.planCtx @@ -2457,7 +2469,7 @@ func (er *expressionRewriter) toColumn(v *ast.ColumnName) { return } } - if _, ok := planCtx.plan.(*LogicalUnionAll); ok && v.Table.O != "" { + if _, ok := planCtx.plan.(*logicalop.LogicalUnionAll); ok && v.Table.O != "" { er.err = plannererrors.ErrTablenameNotAllowedHere.GenWithStackByArgs(v.Table.O, "SELECT", clauseMsg[planCtx.builder.curClause]) return } @@ -2469,9 +2481,9 @@ func (er *expressionRewriter) toColumn(v *ast.ColumnName) { func findFieldNameFromNaturalUsingJoin(p base.LogicalPlan, v *ast.ColumnName) (col *expression.Column, name *types.FieldName, err error) { switch x := p.(type) { - case *LogicalLimit, *LogicalSelection, *LogicalTopN, *LogicalSort, *logicalop.LogicalMaxOneRow: + case *logicalop.LogicalLimit, *logicalop.LogicalSelection, *logicalop.LogicalTopN, *logicalop.LogicalSort, *logicalop.LogicalMaxOneRow: return findFieldNameFromNaturalUsingJoin(p.Children()[0], v) - case *LogicalJoin: + case *logicalop.LogicalJoin: if x.FullSchema != nil { idx, err := expression.FindFieldName(x.FullNames, v) if err != nil { diff --git a/pkg/planner/core/expression_test.go b/pkg/planner/core/expression_test.go index cedfccdf538c8..f4e81a81c2be5 100644 --- a/pkg/planner/core/expression_test.go +++ b/pkg/planner/core/expression_test.go @@ -20,11 +20,14 @@ import ( "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/expression" + "github.com/pingcap/tidb/pkg/expression/context" + "github.com/pingcap/tidb/pkg/expression/contextstatic" "github.com/pingcap/tidb/pkg/parser" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/charset" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/mysql" + "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/testkit/testutil" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/chunk" @@ -404,39 +407,36 @@ func TestBuildExpression(t *testing.T) { }, } - ctx := MockContext() - defer func() { - domain.GetDomain(ctx).StatsHandle().Close() - }() - + ctx := contextstatic.NewStaticExprContext() + evalCtx := ctx.GetStaticEvalCtx() cols, names, err := expression.ColumnInfos2ColumnsAndNames(ctx, model.NewCIStr(""), tbl.Name, tbl.Cols(), tbl) require.NoError(t, err) schema := expression.NewSchema(cols...) // normal build - ctx.GetSessionVars().PlanColumnID.Store(0) + ctx = ctx.Apply(contextstatic.WithColumnIDAllocator(context.NewSimplePlanColumnIDAllocator(0))) expr, err := buildExpr(t, ctx, "(1+a)*(3+b)", expression.WithTableInfo("", tbl)) require.NoError(t, err) - ctx.GetSessionVars().PlanColumnID.Store(0) + ctx = ctx.Apply(contextstatic.WithColumnIDAllocator(context.NewSimplePlanColumnIDAllocator(0))) expr2, err := expression.ParseSimpleExpr(ctx, "(1+a)*(3+b)", expression.WithTableInfo("", tbl)) require.NoError(t, err) - require.True(t, expr.Equal(ctx, expr2)) - val, _, err := expr.EvalInt(ctx, chunk.MutRowFromValues("", 1, 2).ToRow()) + require.True(t, expr.Equal(evalCtx, expr2)) + val, _, err := expr.EvalInt(evalCtx, chunk.MutRowFromValues("", 1, 2).ToRow()) require.NoError(t, err) require.Equal(t, int64(10), val) - val, _, err = expr.EvalInt(ctx, chunk.MutRowFromValues("", 3, 4).ToRow()) + val, _, err = expr.EvalInt(evalCtx, chunk.MutRowFromValues("", 3, 4).ToRow()) require.NoError(t, err) require.Equal(t, int64(28), val) - val, _, err = expr2.EvalInt(ctx, chunk.MutRowFromValues("", 1, 2).ToRow()) + val, _, err = expr2.EvalInt(evalCtx, chunk.MutRowFromValues("", 1, 2).ToRow()) require.NoError(t, err) require.Equal(t, int64(10), val) - val, _, err = expr2.EvalInt(ctx, chunk.MutRowFromValues("", 3, 4).ToRow()) + val, _, err = expr2.EvalInt(evalCtx, chunk.MutRowFromValues("", 3, 4).ToRow()) require.NoError(t, err) require.Equal(t, int64(28), val) expr, err = buildExpr(t, ctx, "(1+a)*(3+b)", expression.WithInputSchemaAndNames(schema, names, nil)) require.NoError(t, err) - val, _, err = expr.EvalInt(ctx, chunk.MutRowFromValues("", 1, 2).ToRow()) + val, _, err = expr.EvalInt(evalCtx, chunk.MutRowFromValues("", 1, 2).ToRow()) require.NoError(t, err) require.Equal(t, int64(10), val) @@ -452,7 +452,7 @@ func TestBuildExpression(t *testing.T) { // use WithAllowCastArray to allow casting to array expr, err = buildExpr(t, ctx, `cast(json_extract('{"a": [1, 2, 3]}', '$.a') as signed array)`, expression.WithAllowCastArray(true)) require.NoError(t, err) - j, _, err := expr.EvalJSON(ctx, chunk.Row{}) + j, _, err := expr.EvalJSON(evalCtx, chunk.Row{}) require.NoError(t, err) require.Equal(t, types.JSONTypeCodeArray, j.TypeCode) require.Equal(t, "[1, 2, 3]", j.String()) @@ -460,35 +460,48 @@ func TestBuildExpression(t *testing.T) { // default expr expr, err = buildExpr(t, ctx, "default(id)", expression.WithTableInfo("", tbl)) require.NoError(t, err) - s, _, err := expr.EvalString(ctx, chunk.MutRowFromValues("", 1, 2).ToRow()) + s, _, err := expr.EvalString(evalCtx, chunk.MutRowFromValues("", 1, 2).ToRow()) require.NoError(t, err) require.Equal(t, 36, len(s), s) expr, err = buildExpr(t, ctx, "default(id)", expression.WithInputSchemaAndNames(schema, names, tbl)) require.NoError(t, err) - s, _, err = expr.EvalString(ctx, chunk.MutRowFromValues("", 1, 2).ToRow()) + s, _, err = expr.EvalString(evalCtx, chunk.MutRowFromValues("", 1, 2).ToRow()) require.NoError(t, err) require.Equal(t, 36, len(s), s) expr, err = buildExpr(t, ctx, "default(b)", expression.WithTableInfo("", tbl)) require.NoError(t, err) - d, err := expr.Eval(ctx, chunk.MutRowFromValues("", 1, 2).ToRow()) + d, err := expr.Eval(evalCtx, chunk.MutRowFromValues("", 1, 2).ToRow()) require.NoError(t, err) require.Equal(t, types.NewDatum(int64(123)), d) // WithCastExprTo expr, err = buildExpr(t, ctx, "1+2+3") require.NoError(t, err) - require.Equal(t, mysql.TypeLonglong, expr.GetType(ctx).GetType()) + require.Equal(t, mysql.TypeLonglong, expr.GetType(evalCtx).GetType()) castTo := types.NewFieldType(mysql.TypeVarchar) expr, err = buildExpr(t, ctx, "1+2+3", expression.WithCastExprTo(castTo)) require.NoError(t, err) - require.Equal(t, mysql.TypeVarchar, expr.GetType(ctx).GetType()) - v, err := expr.Eval(ctx, chunk.Row{}) + require.Equal(t, mysql.TypeVarchar, expr.GetType(evalCtx).GetType()) + v, err := expr.Eval(evalCtx, chunk.Row{}) require.NoError(t, err) require.Equal(t, types.KindString, v.Kind()) require.Equal(t, "6", v.GetString()) + // param marker + params := variable.NewPlanCacheParamList() + params.Append(types.NewIntDatum(5)) + evalCtx = evalCtx.Apply(contextstatic.WithParamList(params)) + ctx = ctx.Apply(contextstatic.WithEvalCtx(evalCtx)) + expr, err = buildExpr(t, ctx, "a + ?", expression.WithTableInfo("", tbl)) + require.NoError(t, err) + require.Equal(t, mysql.TypeLonglong, expr.GetType(evalCtx).GetType()) + v, err = expr.Eval(evalCtx, chunk.MutRowFromValues(1, 2, 3).ToRow()) + require.NoError(t, err) + require.Equal(t, types.KindInt64, v.Kind()) + require.Equal(t, int64(7), v.GetInt64()) + // should report error for default expr when source table not provided _, err = buildExpr(t, ctx, "default(b)", expression.WithInputSchemaAndNames(schema, names, nil)) require.EqualError(t, err, "Unsupported expr *ast.DefaultExpr when source table not provided") @@ -496,8 +509,4 @@ func TestBuildExpression(t *testing.T) { // subquery not supported _, err = buildExpr(t, ctx, "a + (select b from t)", expression.WithTableInfo("", tbl)) require.EqualError(t, err, "node '*ast.SubqueryExpr' is not allowed when building an expression without planner") - - // param marker not supported - _, err = buildExpr(t, ctx, "a + ?", expression.WithTableInfo("", tbl)) - require.EqualError(t, err, "node '*driver.ParamMarkerExpr' is not allowed when building an expression without planner") } diff --git a/pkg/planner/core/find_best_task.go b/pkg/planner/core/find_best_task.go index 95ebf8610527c..77f63158d879b 100644 --- a/pkg/planner/core/find_best_task.go +++ b/pkg/planner/core/find_best_task.go @@ -90,7 +90,8 @@ func GetPropByOrderByItemsContainScalarFunc(items []*util.ByItems) (*property.Ph return &property.PhysicalProperty{SortItems: propItems}, true, onlyColumn } -func findBestTask4LogicalTableDual(p *LogicalTableDual, prop *property.PhysicalProperty, planCounter *base.PlanCounterTp, opt *optimizetrace.PhysicalOptimizeOp) (base.Task, int64, error) { +func findBestTask4LogicalTableDual(lp base.LogicalPlan, prop *property.PhysicalProperty, planCounter *base.PlanCounterTp, opt *optimizetrace.PhysicalOptimizeOp) (base.Task, int64, error) { + p := lp.(*logicalop.LogicalTableDual) // If the required property is not empty and the row count > 1, // we cannot ensure this required property. // But if the row count is 0 or 1, we don't need to care about the property. @@ -109,7 +110,8 @@ func findBestTask4LogicalTableDual(p *LogicalTableDual, prop *property.PhysicalP return rt, 1, nil } -func findBestTask4LogicalShow(p *LogicalShow, prop *property.PhysicalProperty, planCounter *base.PlanCounterTp, _ *optimizetrace.PhysicalOptimizeOp) (base.Task, int64, error) { +func findBestTask4LogicalShow(lp base.LogicalPlan, prop *property.PhysicalProperty, planCounter *base.PlanCounterTp, _ *optimizetrace.PhysicalOptimizeOp) (base.Task, int64, error) { + p := lp.(*logicalop.LogicalShow) if !prop.IsSortItemEmpty() || planCounter.Empty() { return base.InvalidTask, 0, nil } @@ -121,7 +123,8 @@ func findBestTask4LogicalShow(p *LogicalShow, prop *property.PhysicalProperty, p return rt, 1, nil } -func findBestTask4LogicalShowDDLJobs(p *LogicalShowDDLJobs, prop *property.PhysicalProperty, planCounter *base.PlanCounterTp, _ *optimizetrace.PhysicalOptimizeOp) (base.Task, int64, error) { +func findBestTask4LogicalShowDDLJobs(lp base.LogicalPlan, prop *property.PhysicalProperty, planCounter *base.PlanCounterTp, _ *optimizetrace.PhysicalOptimizeOp) (base.Task, int64, error) { + p := lp.(*logicalop.LogicalShowDDLJobs) if !prop.IsSortItemEmpty() || planCounter.Empty() { return base.InvalidTask, 0, nil } @@ -180,7 +183,7 @@ func enumeratePhysicalPlans4Task( childCnts := make([]int64, p.ChildLen()) cntPlan = 0 iteration := iteratePhysicalPlan4BaseLogical - if _, ok := p.Self().(*LogicalSequence); ok { + if _, ok := p.Self().(*logicalop.LogicalSequence); ok { iteration = iterateChildPlan4LogicalSequence } @@ -465,13 +468,13 @@ func appendCandidate4PhysicalOptimizeOp(pop *optimizetrace.PhysicalOptimizeOp, l switch join := pp.(type) { case *PhysicalIndexMergeJoin: index = join.InnerChildIdx - plan = join.innerTask.Plan() + plan = join.innerPlan case *PhysicalIndexHashJoin: index = join.InnerChildIdx - plan = join.innerTask.Plan() + plan = join.innerPlan case *PhysicalIndexJoin: index = join.InnerChildIdx - plan = join.innerTask.Plan() + plan = join.innerPlan } if index != -1 { child := lp.(*logicalop.BaseLogicalPlan).Children()[index] @@ -595,7 +598,8 @@ END: return bestTask, cntPlan, nil } -func findBestTask4LogicalMemTable(p *LogicalMemTable, prop *property.PhysicalProperty, planCounter *base.PlanCounterTp, opt *optimizetrace.PhysicalOptimizeOp) (t base.Task, cntPlan int64, err error) { +func findBestTask4LogicalMemTable(lp base.LogicalPlan, prop *property.PhysicalProperty, planCounter *base.PlanCounterTp, opt *optimizetrace.PhysicalOptimizeOp) (t base.Task, cntPlan int64, err error) { + p := lp.(*logicalop.LogicalMemTable) if prop.MPPPartitionTp != property.AnyType { return base.InvalidTask, 0, nil } @@ -649,7 +653,7 @@ func findBestTask4LogicalMemTable(p *LogicalMemTable, prop *property.PhysicalPro } // tryToGetDualTask will check if the push down predicate has false constant. If so, it will return table dual. -func (ds *DataSource) tryToGetDualTask() (base.Task, error) { +func tryToGetDualTask(ds *DataSource) (base.Task, error) { for _, cond := range ds.PushedDownConds { if con, ok := cond.(*expression.Constant); ok && con.DeferredExpr == nil && con.ParamMarker == nil { result, _, err := expression.EvalBool(ds.SCtx().GetExprCtx().GetEvalCtx(), []expression.Expression{cond}, chunk.Row{}) @@ -746,7 +750,7 @@ func compareCandidates(sctx base.PlanContext, prop *property.PhysicalProperty, l return 0 } -func (ds *DataSource) isMatchProp(path *util.AccessPath, prop *property.PhysicalProperty) bool { +func isMatchProp(ds *DataSource, path *util.AccessPath, prop *property.PhysicalProperty) bool { var isMatchProp bool if path.IsIntHandlePath { pkCol := ds.getPKIsHandleCol() @@ -852,7 +856,7 @@ func (ds *DataSource) isMatchProp(path *util.AccessPath, prop *property.Physical // // at last, according to determinedIndexPartialPaths to rewrite their real countAfterAccess, this part is move from deriveStats to // here. -func (ds *DataSource) matchPropForIndexMergeAlternatives(path *util.AccessPath, prop *property.PhysicalProperty) (*util.AccessPath, bool) { +func matchPropForIndexMergeAlternatives(ds *DataSource, path *util.AccessPath, prop *property.PhysicalProperty) (*util.AccessPath, bool) { // target: // 1: index merge case, try to match the every alternative partial path to the order property as long as // possible, and generate that property-matched index merge path out if any. @@ -895,7 +899,7 @@ func (ds *DataSource) matchPropForIndexMergeAlternatives(path *util.AccessPath, matchIdxes := make([]int, 0, 1) for i, oneIndexAlternativePath := range oneItemAlternatives { // if there is some sort items and this path doesn't match this prop, continue. - if !noSortItem && !ds.isMatchProp(oneIndexAlternativePath, prop) { + if !noSortItem && !isMatchProp(ds, oneIndexAlternativePath, prop) { continue } // two possibility here: @@ -977,7 +981,7 @@ func (ds *DataSource) matchPropForIndexMergeAlternatives(path *util.AccessPath, } // path.ShouldBeKeptCurrentFilter record that whether there are some part of the cnf item couldn't be pushed down to tikv already. shouldKeepCurrentFilter := path.KeepIndexMergeORSourceFilter - pushDownCtx := GetPushDownCtx(ds.SCtx()) + pushDownCtx := util.GetPushDownCtx(ds.SCtx()) for _, path := range determinedIndexPartialPaths { // If any partial path contains table filters, we need to keep the whole DNF filter in the Selection. if len(path.TableFilters) > 0 { @@ -1027,7 +1031,7 @@ func (ds *DataSource) matchPropForIndexMergeAlternatives(path *util.AccessPath, return indexMergePath, true } -func (ds *DataSource) isMatchPropForIndexMerge(path *util.AccessPath, prop *property.PhysicalProperty) bool { +func isMatchPropForIndexMerge(ds *DataSource, path *util.AccessPath, prop *property.PhysicalProperty) bool { // Execution part doesn't support the merge operation for intersection case yet. if path.IndexMergeIsIntersection { return false @@ -1037,31 +1041,31 @@ func (ds *DataSource) isMatchPropForIndexMerge(path *util.AccessPath, prop *prop return false } for _, partialPath := range path.PartialIndexPaths { - if !ds.isMatchProp(partialPath, prop) { + if !isMatchProp(ds, partialPath, prop) { return false } } return true } -func (ds *DataSource) getTableCandidate(path *util.AccessPath, prop *property.PhysicalProperty) *candidatePath { +func getTableCandidate(ds *DataSource, path *util.AccessPath, prop *property.PhysicalProperty) *candidatePath { candidate := &candidatePath{path: path} - candidate.isMatchProp = ds.isMatchProp(path, prop) + candidate.isMatchProp = isMatchProp(ds, path, prop) candidate.accessCondsColMap = util.ExtractCol2Len(ds.SCtx().GetExprCtx().GetEvalCtx(), path.AccessConds, nil, nil) return candidate } -func (ds *DataSource) getIndexCandidate(path *util.AccessPath, prop *property.PhysicalProperty) *candidatePath { +func getIndexCandidate(ds *DataSource, path *util.AccessPath, prop *property.PhysicalProperty) *candidatePath { candidate := &candidatePath{path: path} - candidate.isMatchProp = ds.isMatchProp(path, prop) + candidate.isMatchProp = isMatchProp(ds, path, prop) candidate.accessCondsColMap = util.ExtractCol2Len(ds.SCtx().GetExprCtx().GetEvalCtx(), path.AccessConds, path.IdxCols, path.IdxColLens) candidate.indexCondsColMap = util.ExtractCol2Len(ds.SCtx().GetExprCtx().GetEvalCtx(), append(path.AccessConds, path.IndexFilters...), path.FullIdxCols, path.FullIdxColLens) return candidate } -func (ds *DataSource) convergeIndexMergeCandidate(path *util.AccessPath, prop *property.PhysicalProperty) *candidatePath { +func convergeIndexMergeCandidate(ds *DataSource, path *util.AccessPath, prop *property.PhysicalProperty) *candidatePath { // since the all index path alternative paths is collected and undetermined, and we should determine a possible and concrete path for this prop. - possiblePath, match := ds.matchPropForIndexMergeAlternatives(path, prop) + possiblePath, match := matchPropForIndexMergeAlternatives(ds, path, prop) if possiblePath == nil { return nil } @@ -1069,15 +1073,15 @@ func (ds *DataSource) convergeIndexMergeCandidate(path *util.AccessPath, prop *p return candidate } -func (ds *DataSource) getIndexMergeCandidate(path *util.AccessPath, prop *property.PhysicalProperty) *candidatePath { +func getIndexMergeCandidate(ds *DataSource, path *util.AccessPath, prop *property.PhysicalProperty) *candidatePath { candidate := &candidatePath{path: path} - candidate.isMatchProp = ds.isMatchPropForIndexMerge(path, prop) + candidate.isMatchProp = isMatchPropForIndexMerge(ds, path, prop) return candidate } // skylinePruning prunes access paths according to different factors. An access path can be pruned only if // there exists a path that is not worse than it at all factors and there is at least one better factor. -func (ds *DataSource) skylinePruning(prop *property.PhysicalProperty) []*candidatePath { +func skylinePruning(ds *DataSource, prop *property.PhysicalProperty) []*candidatePath { candidates := make([]*candidatePath, 0, 4) for _, path := range ds.PossibleAccessPaths { // We should check whether the possible access path is valid first. @@ -1086,14 +1090,14 @@ func (ds *DataSource) skylinePruning(prop *property.PhysicalProperty) []*candida } if len(path.PartialAlternativeIndexPaths) > 0 { // OR normal index merge path, try to determine every index partial path for this property. - candidate := ds.convergeIndexMergeCandidate(path, prop) + candidate := convergeIndexMergeCandidate(ds, path, prop) if candidate != nil { candidates = append(candidates, candidate) } continue } if path.PartialIndexPaths != nil { - candidates = append(candidates, ds.getIndexMergeCandidate(path, prop)) + candidates = append(candidates, getIndexMergeCandidate(ds, path, prop)) continue } // if we already know the range of the scan is empty, just return a TableDual @@ -1102,7 +1106,7 @@ func (ds *DataSource) skylinePruning(prop *property.PhysicalProperty) []*candida } var currentCandidate *candidatePath if path.IsTablePath() { - currentCandidate = ds.getTableCandidate(path, prop) + currentCandidate = getTableCandidate(ds, path, prop) } else { if !(len(path.AccessConds) > 0 || !prop.IsSortItemEmpty() || path.Forced || path.IsSingleScan) { continue @@ -1112,7 +1116,7 @@ func (ds *DataSource) skylinePruning(prop *property.PhysicalProperty) []*candida // 2. We have a non-empty prop to match. // 3. This index is forced to choose. // 4. The needed columns are all covered by index columns(and handleCol). - currentCandidate = ds.getIndexCandidate(path, prop) + currentCandidate = getIndexCandidate(ds, path, prop) } pruned := false for i := len(candidates) - 1; i >= 0; i-- { @@ -1162,7 +1166,7 @@ func (ds *DataSource) skylinePruning(prop *property.PhysicalProperty) []*candida return candidates } -func (ds *DataSource) getPruningInfo(candidates []*candidatePath, prop *property.PhysicalProperty) string { +func getPruningInfo(ds *DataSource, candidates []*candidatePath, prop *property.PhysicalProperty) string { if len(candidates) == len(ds.PossibleAccessPaths) { return "" } @@ -1205,7 +1209,7 @@ func (ds *DataSource) getPruningInfo(candidates []*candidatePath, prop *property strings.Join(names, ","), tableName, strings.Join(items, " "), prop.TaskTp) } -func (ds *DataSource) isPointGetConvertableSchema() bool { +func isPointGetConvertableSchema(ds *DataSource) bool { for _, col := range ds.Columns { if col.Name.L == model.ExtraHandleName.L { continue @@ -1221,7 +1225,7 @@ func (ds *DataSource) isPointGetConvertableSchema() bool { // exploreEnforcedPlan determines whether to explore enforced plans for this DataSource if it has already found an unenforced plan. // See #46177 for more information. -func (ds *DataSource) exploreEnforcedPlan() bool { +func exploreEnforcedPlan(ds *DataSource) bool { // default value is false to keep it compatible with previous versions. return fixcontrol.GetBoolWithDefault(ds.SCtx().GetSessionVars().GetOptimizerFixControlMap(), fixcontrol.Fix46177, false) } @@ -1236,7 +1240,7 @@ func findBestTask4DS(ds *DataSource, prop *property.PhysicalProperty, planCounte if ds.IsForUpdateRead && ds.SCtx().GetSessionVars().TxnCtx.IsExplicit { hasPointGetPath := false for _, path := range ds.PossibleAccessPaths { - if ds.isPointGetPath(path) { + if isPointGetPath(ds, path) { hasPointGetPath = true break } @@ -1275,7 +1279,7 @@ func findBestTask4DS(ds *DataSource, prop *property.PhysicalProperty, planCounte if err != nil { return nil, 0, err } - if !unenforcedTask.Invalid() && !ds.exploreEnforcedPlan() { + if !unenforcedTask.Invalid() && !exploreEnforcedPlan(ds) { ds.StoreTask(prop, unenforcedTask) return unenforcedTask, cnt, nil } @@ -1313,7 +1317,7 @@ func findBestTask4DS(ds *DataSource, prop *property.PhysicalProperty, planCounte err = validateTableSamplePlan(ds, t, err) }() - t, err = ds.tryToGetDualTask() + t, err = tryToGetDualTask(ds) if err != nil || t != nil { planCounter.Dec(1) if t != nil { @@ -1323,8 +1327,8 @@ func findBestTask4DS(ds *DataSource, prop *property.PhysicalProperty, planCounte } t = base.InvalidTask - candidates := ds.skylinePruning(prop) - pruningInfo := ds.getPruningInfo(candidates, prop) + candidates := skylinePruning(ds, prop) + pruningInfo := getPruningInfo(ds, candidates, prop) defer func() { if err == nil && t != nil && !t.Invalid() && pruningInfo != "" { warnErr := errors.NewNoStackError(pruningInfo) @@ -1340,7 +1344,7 @@ func findBestTask4DS(ds *DataSource, prop *property.PhysicalProperty, planCounte for _, candidate := range candidates { path := candidate.path if path.PartialIndexPaths != nil { - idxMergeTask, err := ds.convertToIndexMergeScan(prop, candidate, opt) + idxMergeTask, err := convertToIndexMergeScan(ds, prop, candidate, opt) if err != nil { return nil, 0, err } @@ -1378,7 +1382,7 @@ func findBestTask4DS(ds *DataSource, prop *property.PhysicalProperty, planCounte return t, cntPlan, nil } - canConvertPointGet := len(path.Ranges) > 0 && path.StoreType == kv.TiKV && ds.isPointGetConvertableSchema() + canConvertPointGet := len(path.Ranges) > 0 && path.StoreType == kv.TiKV && isPointGetConvertableSchema(ds) if canConvertPointGet && path.Index != nil && path.Index.MVIndex { canConvertPointGet = false // cannot use PointGet upon MVIndex @@ -1445,9 +1449,9 @@ func findBestTask4DS(ds *DataSource, prop *property.PhysicalProperty, planCounte if allRangeIsPoint { var pointGetTask base.Task if len(path.Ranges) == 1 { - pointGetTask = ds.convertToPointGet(prop, candidate) + pointGetTask = convertToPointGet(ds, prop, candidate) } else { - pointGetTask = ds.convertToBatchPointGet(prop, candidate) + pointGetTask = convertToBatchPointGet(ds, prop, candidate) } // Batch/PointGet plans may be over-optimized, like `a>=1(?) and a<=1(?)` --> `a=1` --> PointGet(a=1). @@ -1483,9 +1487,9 @@ func findBestTask4DS(ds *DataSource, prop *property.PhysicalProperty, planCounte } var tblTask base.Task if ds.SampleInfo != nil { - tblTask, err = ds.convertToSampleTable(prop, candidate, opt) + tblTask, err = convertToSampleTable(ds, prop, candidate, opt) } else { - tblTask, err = ds.convertToTableScan(prop, candidate, opt) + tblTask, err = convertToTableScan(ds, prop, candidate, opt) } if err != nil { return nil, 0, err @@ -1515,7 +1519,7 @@ func findBestTask4DS(ds *DataSource, prop *property.PhysicalProperty, planCounte if ds.SampleInfo != nil { continue } - idxTask, err := ds.convertToIndexScan(prop, candidate, opt) + idxTask, err := convertToIndexScan(ds, prop, candidate, opt) if err != nil { return nil, 0, err } @@ -1540,7 +1544,7 @@ func findBestTask4DS(ds *DataSource, prop *property.PhysicalProperty, planCounte } // convertToIndexMergeScan builds the index merge scan for intersection or union cases. -func (ds *DataSource) convertToIndexMergeScan(prop *property.PhysicalProperty, candidate *candidatePath, _ *optimizetrace.PhysicalOptimizeOp) (task base.Task, err error) { +func convertToIndexMergeScan(ds *DataSource, prop *property.PhysicalProperty, candidate *candidatePath, _ *optimizetrace.PhysicalOptimizeOp) (task base.Task, err error) { if prop.IsFlashProp() || prop.TaskTp == property.CopSingleReadTaskType { return base.InvalidTask, nil } @@ -1581,15 +1585,21 @@ func (ds *DataSource) convertToIndexMergeScan(prop *property.PhysicalProperty, c Desc: si.Desc, }) } + globalRemainingFilters := make([]expression.Expression, 0, 3) for _, partPath := range path.PartialIndexPaths { var scan base.PhysicalPlan if partPath.IsTablePath() { - scan = ds.convertToPartialTableScan(prop, partPath, candidate.isMatchProp, byItems) + scan = convertToPartialTableScan(ds, prop, partPath, candidate.isMatchProp, byItems) } else { - scan, err = ds.convertToPartialIndexScan(cop.physPlanPartInfo, prop, partPath, candidate.isMatchProp, byItems) + var remainingFilters []expression.Expression + scan, remainingFilters, err = convertToPartialIndexScan(ds, cop.physPlanPartInfo, prop, partPath, candidate.isMatchProp, byItems) if err != nil { return base.InvalidTask, err } + if prop.TaskTp != property.RootTaskType && len(remainingFilters) > 0 { + return base.InvalidTask, nil + } + globalRemainingFilters = append(globalRemainingFilters, remainingFilters...) } scans = append(scans, scan) } @@ -1597,13 +1607,14 @@ func (ds *DataSource) convertToIndexMergeScan(prop *property.PhysicalProperty, c if prop.ExpectedCnt < ds.StatsInfo().RowCount { totalRowCount *= prop.ExpectedCnt / ds.StatsInfo().RowCount } - ts, remainingFilters, moreColumn, err := ds.buildIndexMergeTableScan(path.TableFilters, totalRowCount, candidate.isMatchProp) + ts, remainingFilters2, moreColumn, err := buildIndexMergeTableScan(ds, path.TableFilters, totalRowCount, candidate.isMatchProp) if err != nil { return base.InvalidTask, err } - if prop.TaskTp != property.RootTaskType && len(remainingFilters) > 0 { + if prop.TaskTp != property.RootTaskType && len(remainingFilters2) > 0 { return base.InvalidTask, nil } + globalRemainingFilters = append(globalRemainingFilters, remainingFilters2...) cop.keepOrder = candidate.isMatchProp cop.tablePlan = ts cop.idxMergePartPlans = scans @@ -1613,8 +1624,8 @@ func (ds *DataSource) convertToIndexMergeScan(prop *property.PhysicalProperty, c cop.needExtraProj = true cop.originSchema = ds.Schema() } - if remainingFilters != nil { - cop.rootTaskConds = remainingFilters + if len(globalRemainingFilters) != 0 { + cop.rootTaskConds = globalRemainingFilters } // after we lift the limitation of intersection and cop-type task in the code in this // function above, we could set its index plan finished as true once we found its table @@ -1634,8 +1645,8 @@ func (ds *DataSource) convertToIndexMergeScan(prop *property.PhysicalProperty, c return task, nil } -func (ds *DataSource) convertToPartialIndexScan(physPlanPartInfo *PhysPlanPartInfo, prop *property.PhysicalProperty, path *util.AccessPath, matchProp bool, byItems []*util.ByItems) (base.PhysicalPlan, error) { - is := ds.getOriginalPhysicalIndexScan(prop, path, matchProp, false) +func convertToPartialIndexScan(ds *DataSource, physPlanPartInfo *PhysPlanPartInfo, prop *property.PhysicalProperty, path *util.AccessPath, matchProp bool, byItems []*util.ByItems) (base.PhysicalPlan, []expression.Expression, error) { + is := getOriginalPhysicalIndexScan(ds, prop, path, matchProp, false) // TODO: Consider using isIndexCoveringColumns() to avoid another TableRead indexConds := path.IndexFilters if matchProp { @@ -1650,10 +1661,11 @@ func (ds *DataSource) convertToPartialIndexScan(physPlanPartInfo *PhysPlanPartIn // It should pushdown to TiKV, DataSource schema doesn't contain partition id column. indexConds, err := is.addSelectionConditionForGlobalIndex(ds, physPlanPartInfo, indexConds) if err != nil { - return nil, err + return nil, nil, err } if len(indexConds) > 0 { + pushedFilters, remainingFilter := extractFiltersForIndexMerge(util.GetPushDownCtx(ds.SCtx()), indexConds) var selectivity float64 if path.CountAfterAccess > 0 { selectivity = path.CountAfterIndex / path.CountAfterAccess @@ -1664,11 +1676,11 @@ func (ds *DataSource) convertToPartialIndexScan(physPlanPartInfo *PhysPlanPartIn if ds.StatisticTable.Pseudo { stats.StatsVersion = statistics.PseudoVersion } - indexPlan := PhysicalSelection{Conditions: indexConds}.Init(is.SCtx(), stats, ds.QueryBlockOffset()) + indexPlan := PhysicalSelection{Conditions: pushedFilters}.Init(is.SCtx(), stats, ds.QueryBlockOffset()) indexPlan.SetChildren(is) - return indexPlan, nil + return indexPlan, remainingFilter, nil } - return is, nil + return is, nil, nil } func checkColinSchema(cols []*expression.Column, schema *expression.Schema) bool { @@ -1680,8 +1692,8 @@ func checkColinSchema(cols []*expression.Column, schema *expression.Schema) bool return true } -func (ds *DataSource) convertToPartialTableScan(prop *property.PhysicalProperty, path *util.AccessPath, matchProp bool, byItems []*util.ByItems) (tablePlan base.PhysicalPlan) { - ts, rowCount := ds.getOriginalPhysicalTableScan(prop, path, matchProp) +func convertToPartialTableScan(ds *DataSource, prop *property.PhysicalProperty, path *util.AccessPath, matchProp bool, byItems []*util.ByItems) (tablePlan base.PhysicalPlan) { + ts, rowCount := getOriginalPhysicalTableScan(ds, prop, path, matchProp) overwritePartialTableScanSchema(ds, ts) // remove ineffetive filter condition after overwriting physicalscan schema newFilterConds := make([]expression.Expression, 0, len(path.TableFilters)) @@ -1752,7 +1764,7 @@ func setIndexMergeTableScanHandleCols(ds *DataSource, ts *PhysicalTableScan) (er // buildIndexMergeTableScan() returns Selection that will be pushed to TiKV. // Filters that cannot be pushed to TiKV are also returned, and an extra Selection above IndexMergeReader will be constructed later. -func (ds *DataSource) buildIndexMergeTableScan(tableFilters []expression.Expression, +func buildIndexMergeTableScan(ds *DataSource, tableFilters []expression.Expression, totalRowCount float64, matchProp bool) (base.PhysicalPlan, []expression.Expression, bool, error) { ts := PhysicalTableScan{ Table: ds.TableInfo, @@ -1780,7 +1792,7 @@ func (ds *DataSource) buildIndexMergeTableScan(tableFilters []expression.Express } var currentTopPlan base.PhysicalPlan = ts if len(tableFilters) > 0 { - pushedFilters, remainingFilters := extractFiltersForIndexMerge(GetPushDownCtx(ds.SCtx()), tableFilters) + pushedFilters, remainingFilters := extractFiltersForIndexMerge(util.GetPushDownCtx(ds.SCtx()), tableFilters) pushedFilters1, remainingFilters1 := SplitSelCondsWithVirtualColumn(pushedFilters) pushedFilters = pushedFilters1 remainingFilters = append(remainingFilters, remainingFilters1...) @@ -1871,7 +1883,7 @@ func isIndexColsCoveringCol(sctx expression.EvalContext, col *expression.Column, return false } -func (ds *DataSource) indexCoveringColumn(column *expression.Column, indexColumns []*expression.Column, idxColLens []int, ignoreLen bool) bool { +func indexCoveringColumn(ds *DataSource, column *expression.Column, indexColumns []*expression.Column, idxColLens []int, ignoreLen bool) bool { if ds.TableInfo.PKIsHandle && mysql.HasPriKeyFlag(column.RetType.GetFlag()) { return true } @@ -1893,28 +1905,28 @@ func (ds *DataSource) indexCoveringColumn(column *expression.Column, indexColumn return true } -func (ds *DataSource) isIndexCoveringColumns(columns, indexColumns []*expression.Column, idxColLens []int) bool { +func isIndexCoveringColumns(ds *DataSource, columns, indexColumns []*expression.Column, idxColLens []int) bool { for _, col := range columns { - if !ds.indexCoveringColumn(col, indexColumns, idxColLens, false) { + if !indexCoveringColumn(ds, col, indexColumns, idxColLens, false) { return false } } return true } -func (ds *DataSource) isIndexCoveringCondition(condition expression.Expression, indexColumns []*expression.Column, idxColLens []int) bool { +func isIndexCoveringCondition(ds *DataSource, condition expression.Expression, indexColumns []*expression.Column, idxColLens []int) bool { switch v := condition.(type) { case *expression.Column: - return ds.indexCoveringColumn(v, indexColumns, idxColLens, false) + return indexCoveringColumn(ds, v, indexColumns, idxColLens, false) case *expression.ScalarFunction: // Even if the index only contains prefix `col`, the index can cover `col is null`. if v.FuncName.L == ast.IsNull { if col, ok := v.GetArgs()[0].(*expression.Column); ok { - return ds.indexCoveringColumn(col, indexColumns, idxColLens, true) + return indexCoveringColumn(ds, col, indexColumns, idxColLens, true) } } for _, arg := range v.GetArgs() { - if !ds.isIndexCoveringCondition(arg, indexColumns, idxColLens) { + if !isIndexCoveringCondition(ds, arg, indexColumns, idxColLens) { return false } } @@ -1923,17 +1935,17 @@ func (ds *DataSource) isIndexCoveringCondition(condition expression.Expression, return true } -func (ds *DataSource) isSingleScan(indexColumns []*expression.Column, idxColLens []int) bool { +func isSingleScan(ds *DataSource, indexColumns []*expression.Column, idxColLens []int) bool { if !ds.SCtx().GetSessionVars().OptPrefixIndexSingleScan || ds.ColsRequiringFullLen == nil { // ds.ColsRequiringFullLen is set at (*DataSource).PruneColumns. In some cases we don't reach (*DataSource).PruneColumns // and ds.ColsRequiringFullLen is nil, so we fall back to ds.isIndexCoveringColumns(ds.schema.Columns, indexColumns, idxColLens). - return ds.isIndexCoveringColumns(ds.Schema().Columns, indexColumns, idxColLens) + return isIndexCoveringColumns(ds, ds.Schema().Columns, indexColumns, idxColLens) } - if !ds.isIndexCoveringColumns(ds.ColsRequiringFullLen, indexColumns, idxColLens) { + if !isIndexCoveringColumns(ds, ds.ColsRequiringFullLen, indexColumns, idxColLens) { return false } for _, cond := range ds.AllConds { - if !ds.isIndexCoveringCondition(cond, indexColumns, idxColLens) { + if !isIndexCoveringCondition(ds, cond, indexColumns, idxColLens) { return false } } @@ -1953,7 +1965,7 @@ func (ts *PhysicalTableScan) appendExtraHandleCol(ds *DataSource) (*expression.C } // convertToIndexScan converts the DataSource to index scan with idx. -func (ds *DataSource) convertToIndexScan(prop *property.PhysicalProperty, +func convertToIndexScan(ds *DataSource, prop *property.PhysicalProperty, candidate *candidatePath, _ *optimizetrace.PhysicalOptimizeOp) (task base.Task, err error) { if candidate.path.Index.MVIndex { // MVIndex is special since different index rows may return the same _row_id and this can break some assumptions of IndexReader. @@ -1982,7 +1994,7 @@ func (ds *DataSource) convertToIndexScan(prop *property.PhysicalProperty, return base.InvalidTask, nil } path := candidate.path - is := ds.getOriginalPhysicalIndexScan(prop, path, candidate.isMatchProp, candidate.path.IsSingleScan) + is := getOriginalPhysicalIndexScan(ds, prop, path, candidate.isMatchProp, candidate.path.IsSingleScan) cop := &CopTask{ indexPlan: is, tblColHists: ds.TblColHists, @@ -2247,7 +2259,7 @@ func (is *PhysicalIndexScan) addPushedDownSelection(copTask *CopTask, p *DataSou tableConds, copTask.rootTaskConds = SplitSelCondsWithVirtualColumn(tableConds) var newRootConds []expression.Expression - pctx := GetPushDownCtx(is.SCtx()) + pctx := util.GetPushDownCtx(is.SCtx()) indexConds, newRootConds = expression.PushDownExprs(pctx, indexConds, kv.TiKV) copTask.rootTaskConds = append(copTask.rootTaskConds, newRootConds...) @@ -2330,15 +2342,15 @@ func matchIndicesProp(sctx base.PlanContext, idxCols []*expression.Column, colLe return true } -func (ds *DataSource) splitIndexFilterConditions(conditions []expression.Expression, indexColumns []*expression.Column, +func splitIndexFilterConditions(ds *DataSource, conditions []expression.Expression, indexColumns []*expression.Column, idxColLens []int) (indexConds, tableConds []expression.Expression) { var indexConditions, tableConditions []expression.Expression for _, cond := range conditions { var covered bool if ds.SCtx().GetSessionVars().OptPrefixIndexSingleScan { - covered = ds.isIndexCoveringCondition(cond, indexColumns, idxColLens) + covered = isIndexCoveringCondition(ds, cond, indexColumns, idxColLens) } else { - covered = ds.isIndexCoveringColumns(expression.ExtractColumns(cond), indexColumns, idxColLens) + covered = isIndexCoveringColumns(ds, expression.ExtractColumns(cond), indexColumns, idxColLens) } if covered { indexConditions = append(indexConditions, cond) @@ -2397,7 +2409,7 @@ func GetPhysicalIndexScan4LogicalIndexScan(s *LogicalIndexScan, _ *expression.Sc // eg: create table t(a int, b int,c int unique, primary (a,b)) // select * from t where a = 1 and b = 1 and c =1; // the datasource can access by primary key(a,b) or unique key c which are both point-get-able -func (ds *DataSource) isPointGetPath(path *util.AccessPath) bool { +func isPointGetPath(ds *DataSource, path *util.AccessPath) bool { if len(path.Ranges) < 1 { return false } @@ -2425,7 +2437,7 @@ func (ds *DataSource) isPointGetPath(path *util.AccessPath) bool { } // convertToTableScan converts the DataSource to table scan. -func (ds *DataSource) convertToTableScan(prop *property.PhysicalProperty, candidate *candidatePath, _ *optimizetrace.PhysicalOptimizeOp) (base.Task, error) { +func convertToTableScan(ds *DataSource, prop *property.PhysicalProperty, candidate *candidatePath, _ *optimizetrace.PhysicalOptimizeOp) (base.Task, error) { // It will be handled in convertToIndexScan. if prop.TaskTp == property.CopMultiReadTaskType { return base.InvalidTask, nil @@ -2441,18 +2453,12 @@ func (ds *DataSource) convertToTableScan(prop *property.PhysicalProperty, candid if !prop.IsSortItemEmpty() && candidate.path.ForceNoKeepOrder { return base.InvalidTask, nil } - ts, _ := ds.getOriginalPhysicalTableScan(prop, candidate.path, candidate.isMatchProp) + ts, _ := getOriginalPhysicalTableScan(ds, prop, candidate.path, candidate.isMatchProp) if ts.KeepOrder && ts.StoreType == kv.TiFlash && (ts.Desc || ds.SCtx().GetSessionVars().TiFlashFastScan) { // TiFlash fast mode(https://github.com/pingcap/tidb/pull/35851) does not keep order in TableScan return base.InvalidTask, nil } - if ts.StoreType == kv.TiFlash { - for _, col := range ts.Columns { - if col.IsVirtualGenerated() { - col.AddFlag(mysql.GeneratedColumnFlag) - } - } - } + // In disaggregated tiflash mode, only MPP is allowed, cop and batchCop is deprecated. // So if prop.TaskTp is RootTaskType, have to use mppTask then convert to rootTask. isTiFlashPath := ts.StoreType == kv.TiFlash @@ -2565,7 +2571,7 @@ func (ds *DataSource) convertToTableScan(prop *property.PhysicalProperty, candid return task, nil } -func (ds *DataSource) convertToSampleTable(prop *property.PhysicalProperty, +func convertToSampleTable(ds *DataSource, prop *property.PhysicalProperty, candidate *candidatePath, _ *optimizetrace.PhysicalOptimizeOp) (base.Task, error) { if prop.TaskTp == property.CopMultiReadTaskType { return base.InvalidTask, nil @@ -2589,7 +2595,7 @@ func (ds *DataSource) convertToSampleTable(prop *property.PhysicalProperty, return rt, nil } -func (ds *DataSource) convertToPointGet(prop *property.PhysicalProperty, candidate *candidatePath) base.Task { +func convertToPointGet(ds *DataSource, prop *property.PhysicalProperty, candidate *candidatePath) base.Task { if !prop.IsSortItemEmpty() && !candidate.isMatchProp { return base.InvalidTask } @@ -2665,7 +2671,7 @@ func (ds *DataSource) convertToPointGet(prop *property.PhysicalProperty, candida return rTsk } -func (ds *DataSource) convertToBatchPointGet(prop *property.PhysicalProperty, candidate *candidatePath) base.Task { +func convertToBatchPointGet(ds *DataSource, prop *property.PhysicalProperty, candidate *candidatePath) base.Task { if !prop.IsSortItemEmpty() && !candidate.isMatchProp { return base.InvalidTask } @@ -2755,7 +2761,7 @@ func (ds *DataSource) convertToBatchPointGet(prop *property.PhysicalProperty, ca func (ts *PhysicalTableScan) addPushedDownSelectionToMppTask(mpp *MppTask, stats *property.StatsInfo) *MppTask { filterCondition, rootTaskConds := SplitSelCondsWithVirtualColumn(ts.filterCondition) var newRootConds []expression.Expression - filterCondition, newRootConds = expression.PushDownExprs(GetPushDownCtx(ts.SCtx()), filterCondition, ts.StoreType) + filterCondition, newRootConds = expression.PushDownExprs(util.GetPushDownCtx(ts.SCtx()), filterCondition, ts.StoreType) mpp.rootTaskConds = append(rootTaskConds, newRootConds...) ts.filterCondition = filterCondition @@ -2771,7 +2777,7 @@ func (ts *PhysicalTableScan) addPushedDownSelectionToMppTask(mpp *MppTask, stats func (ts *PhysicalTableScan) addPushedDownSelection(copTask *CopTask, stats *property.StatsInfo) { ts.filterCondition, copTask.rootTaskConds = SplitSelCondsWithVirtualColumn(ts.filterCondition) var newRootConds []expression.Expression - ts.filterCondition, newRootConds = expression.PushDownExprs(GetPushDownCtx(ts.SCtx()), ts.filterCondition, ts.StoreType) + ts.filterCondition, newRootConds = expression.PushDownExprs(util.GetPushDownCtx(ts.SCtx()), ts.filterCondition, ts.StoreType) copTask.rootTaskConds = append(copTask.rootTaskConds, newRootConds...) // Add filter condition to table plan now. @@ -2799,7 +2805,7 @@ func (ts *PhysicalTableScan) getScanRowSize() float64 { return cardinality.GetTableAvgRowSize(ts.SCtx(), ts.tblColHists, ts.Schema().Columns, ts.StoreType, ts.HandleCols != nil) } -func (ds *DataSource) getOriginalPhysicalTableScan(prop *property.PhysicalProperty, path *util.AccessPath, isMatchProp bool) (*PhysicalTableScan, float64) { +func getOriginalPhysicalTableScan(ds *DataSource, prop *property.PhysicalProperty, path *util.AccessPath, isMatchProp bool) (*PhysicalTableScan, float64) { ts := PhysicalTableScan{ Table: ds.TableInfo, Columns: slices.Clone(ds.Columns), @@ -2841,7 +2847,7 @@ func (ds *DataSource) getOriginalPhysicalTableScan(prop *property.PhysicalProper return ts, rowCount } -func (ds *DataSource) getOriginalPhysicalIndexScan(prop *property.PhysicalProperty, path *util.AccessPath, isMatchProp bool, isSingleScan bool) *PhysicalIndexScan { +func getOriginalPhysicalIndexScan(ds *DataSource, prop *property.PhysicalProperty, path *util.AccessPath, isMatchProp bool, isSingleScan bool) *PhysicalIndexScan { idx := path.Index is := PhysicalIndexScan{ Table: ds.TableInfo, @@ -2902,7 +2908,7 @@ func findBestTask4LogicalCTE(p *LogicalCTE, prop *property.PhysicalProperty, cou return base.InvalidTask, 1, nil } // The physical plan has been build when derive stats. - pcte := PhysicalCTE{SeedPlan: p.Cte.seedPartPhysicalPlan, RecurPlan: p.Cte.recursivePartPhysicalPlan, CTE: p.Cte, cteAsName: p.CteAsName, cteName: p.CteName}.Init(p.SCtx(), p.StatsInfo()) + pcte := PhysicalCTE{SeedPlan: p.Cte.SeedPartPhysicalPlan, RecurPlan: p.Cte.RecursivePartPhysicalPlan, CTE: p.Cte, cteAsName: p.CteAsName, cteName: p.CteName}.Init(p.SCtx(), p.StatsInfo()) pcte.SetSchema(p.Schema()) if prop.IsFlashProp() && prop.CTEProducerStatus == property.AllCTECanMpp { pcte.readerReceiver = PhysicalExchangeReceiver{IsCTEReader: true}.Init(p.SCtx(), p.StatsInfo()) @@ -2927,7 +2933,8 @@ func findBestTask4LogicalCTE(p *LogicalCTE, prop *property.PhysicalProperty, cou return t, 1, nil } -func findBestTask4LogicalCTETable(p *LogicalCTETable, prop *property.PhysicalProperty, _ *base.PlanCounterTp, _ *optimizetrace.PhysicalOptimizeOp) (t base.Task, cntPlan int64, err error) { +func findBestTask4LogicalCTETable(lp base.LogicalPlan, prop *property.PhysicalProperty, _ *base.PlanCounterTp, _ *optimizetrace.PhysicalOptimizeOp) (t base.Task, cntPlan int64, err error) { + p := lp.(*logicalop.LogicalCTETable) if !prop.IsSortItemEmpty() { return base.InvalidTask, 0, nil } diff --git a/pkg/planner/core/find_best_task_test.go b/pkg/planner/core/find_best_task_test.go index cf0df13a50528..3e774da5aedce 100644 --- a/pkg/planner/core/find_best_task_test.go +++ b/pkg/planner/core/find_best_task_test.go @@ -22,6 +22,7 @@ import ( "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/planner/core/base" "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" + "github.com/pingcap/tidb/pkg/planner/core/operator/physicalop" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" "github.com/stretchr/testify/require" @@ -76,16 +77,16 @@ func (p mockLogicalPlan4Test) Init(ctx base.PlanContext) *mockLogicalPlan4Test { func (p *mockLogicalPlan4Test) getPhysicalPlan1(prop *property.PhysicalProperty) base.PhysicalPlan { physicalPlan1 := mockPhysicalPlan4Test{planType: 1}.Init(p.SCtx()) physicalPlan1.SetStats(&property.StatsInfo{RowCount: 1}) - physicalPlan1.childrenReqProps = make([]*property.PhysicalProperty, 1) - physicalPlan1.childrenReqProps[0] = prop.CloneEssentialFields() + physicalPlan1.SetChildrenReqProps(make([]*property.PhysicalProperty, 1)) + physicalPlan1.SetXthChildReqProps(0, prop.CloneEssentialFields()) return physicalPlan1 } func (p *mockLogicalPlan4Test) getPhysicalPlan2(prop *property.PhysicalProperty) base.PhysicalPlan { physicalPlan2 := mockPhysicalPlan4Test{planType: 2}.Init(p.SCtx()) physicalPlan2.SetStats(&property.StatsInfo{RowCount: 1}) - physicalPlan2.childrenReqProps = make([]*property.PhysicalProperty, 1) - physicalPlan2.childrenReqProps[0] = property.NewPhysicalProperty(prop.TaskTp, nil, false, prop.ExpectedCnt, false) + physicalPlan2.SetChildrenReqProps(make([]*property.PhysicalProperty, 1)) + physicalPlan2.SetXthChildReqProps(0, property.NewPhysicalProperty(prop.TaskTp, nil, false, prop.ExpectedCnt, false)) return physicalPlan2 } @@ -115,14 +116,14 @@ func (p *mockLogicalPlan4Test) ExhaustPhysicalPlans(prop *property.PhysicalPrope } type mockPhysicalPlan4Test struct { - basePhysicalPlan + physicalop.BasePhysicalPlan // 1 or 2 for physicalPlan1 or physicalPlan2. // See the comment of mockLogicalPlan4Test. planType int } func (p mockPhysicalPlan4Test) Init(ctx base.PlanContext) *mockPhysicalPlan4Test { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, "mockPlan", &p, 0) + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, "mockPlan", &p, 0) return &p } diff --git a/pkg/planner/core/flat_plan.go b/pkg/planner/core/flat_plan.go index e84ac2942b66d..62ad6b59fb654 100644 --- a/pkg/planner/core/flat_plan.go +++ b/pkg/planner/core/flat_plan.go @@ -20,6 +20,7 @@ import ( "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/util/logutil" "github.com/pingcap/tidb/pkg/util/texttree" "go.uber.org/zap" @@ -276,7 +277,7 @@ func (f *FlatPhysicalPlan) flattenRecursively(p base.Plan, info *operatorCtx, ta label[1-plan.InnerChildIdx] = ProbeSide } case *PhysicalMergeJoin: - if plan.JoinType == RightOuterJoin { + if plan.JoinType == logicalop.RightOuterJoin { label[0] = BuildSide label[1] = ProbeSide } else { @@ -372,7 +373,7 @@ func (f *FlatPhysicalPlan) flattenRecursively(p base.Plan, info *operatorCtx, ta // We shallow copy the PhysicalCTE here because we don't want the probeParents (see comments in PhysicalPlan // for details) to affect the row count display of the independent CTE plan tree. copiedCTE := *plan - copiedCTE.probeParents = nil + copiedCTE.SetProbeParents(nil) if info.isRoot { // If it's executed in TiDB, we need to record it since we don't have producer and consumer f.ctesToFlatten = append(f.ctesToFlatten, &copiedCTE) diff --git a/pkg/planner/core/foreign_key.go b/pkg/planner/core/foreign_key.go index 241204dbaf4b0..34b96e16b5882 100644 --- a/pkg/planner/core/foreign_key.go +++ b/pkg/planner/core/foreign_key.go @@ -24,13 +24,14 @@ import ( "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/physicalop" "github.com/pingcap/tidb/pkg/table" "github.com/pingcap/tidb/pkg/util/dbterror/plannererrors" ) // FKCheck indicates the foreign key constraint checker. type FKCheck struct { - basePhysicalPlan + physicalop.BasePhysicalPlan FK *model.FKInfo ReferredFK *model.ReferredFKInfo Tbl table.Table @@ -46,7 +47,7 @@ type FKCheck struct { // FKCascade indicates the foreign key constraint cascade behaviour. type FKCascade struct { - basePhysicalPlan + physicalop.BasePhysicalPlan Tp FKCascadeType ReferredFK *model.ReferredFKInfo ChildTable table.Table @@ -186,8 +187,10 @@ func (p *Insert) buildOnInsertFKTriggers(ctx base.PlanContext, is infoschema.Inf fkChecks = append(fkChecks, fkCheck) } } - p.FKChecks = fkChecks - p.FKCascades = fkCascades + if len(fkChecks) > 0 || len(fkCascades) > 0 { + p.FKChecks = fkChecks + p.FKCascades = fkCascades + } return nil } @@ -254,8 +257,10 @@ func (updt *Update) buildOnUpdateFKTriggers(ctx base.PlanContext, is infoschema. fkChecks[tid] = append(fkChecks[tid], childFKChecks...) } } - updt.FKChecks = fkChecks - updt.FKCascades = fkCascades + if len(fkChecks) > 0 || len(fkCascades) > 0 { + updt.FKChecks = fkChecks + updt.FKCascades = fkCascades + } return nil } @@ -285,8 +290,10 @@ func (del *Delete) buildOnDeleteFKTriggers(ctx base.PlanContext, is infoschema.I } } } - del.FKChecks = fkChecks - del.FKCascades = fkCascades + if len(fkChecks) > 0 || len(fkCascades) > 0 { + del.FKChecks = fkChecks + del.FKCascades = fkCascades + } return nil } diff --git a/pkg/planner/core/fragment.go b/pkg/planner/core/fragment.go index 80fc431fcc5ba..014dd3187c95c 100644 --- a/pkg/planner/core/fragment.go +++ b/pkg/planner/core/fragment.go @@ -229,7 +229,7 @@ func (f *Fragment) init(p base.PhysicalPlan) error { f.TableScan = x case *PhysicalExchangeReceiver: // TODO: after we support partial merge, we should check whether all the target exchangeReceiver is same. - f.singleton = f.singleton || x.children[0].(*PhysicalExchangeSender).ExchangeType == tipb.ExchangeType_PassThrough + f.singleton = f.singleton || x.Children()[0].(*PhysicalExchangeSender).ExchangeType == tipb.ExchangeType_PassThrough f.ExchangeReceivers = append(f.ExchangeReceivers, x) case *PhysicalUnionAll: return errors.New("unexpected union all detected") @@ -284,12 +284,12 @@ func (e *mppTaskGenerator) untwistPlanAndRemoveUnionAll(stack []base.PhysicalPla e.CTEGroups[cte.CTE.IDForStorage].CTEReader = append(e.CTEGroups[cte.CTE.IDForStorage].CTEReader, cte) } case *PhysicalHashJoin: - stack = append(stack, x.children[1-x.InnerChildIdx]) + stack = append(stack, x.Children()[1-x.InnerChildIdx]) err := e.untwistPlanAndRemoveUnionAll(stack, forest) stack = stack[:len(stack)-1] return errors.Trace(err) case *PhysicalUnionAll: - for _, ch := range x.children { + for _, ch := range x.Children() { stack = append(stack, ch) err := e.untwistPlanAndRemoveUnionAll(stack, forest) stack = stack[:len(stack)-1] @@ -298,19 +298,19 @@ func (e *mppTaskGenerator) untwistPlanAndRemoveUnionAll(stack []base.PhysicalPla } } case *PhysicalSequence: - lastChildIdx := len(x.children) - 1 + lastChildIdx := len(x.Children()) - 1 // except the last child, those previous ones are all cte producer. for i := 0; i < lastChildIdx; i++ { if e.CTEGroups == nil { e.CTEGroups = make(map[int]*cteGroupInFragment) } - cteStorage := x.children[i].(*PhysicalCTEStorage) + cteStorage := x.Children()[i].(*PhysicalCTEStorage) e.CTEGroups[cteStorage.CTE.IDForStorage] = &cteGroupInFragment{ CTEStorage: cteStorage, CTEReader: make([]*PhysicalCTE, 0, 3), } } - stack = append(stack, x.children[lastChildIdx]) + stack = append(stack, x.Children()[lastChildIdx]) err := e.untwistPlanAndRemoveUnionAll(stack, forest) stack = stack[:len(stack)-1] if err != nil { @@ -397,7 +397,7 @@ func (e *mppTaskGenerator) generateMPPTasksForFragment(f *Fragment) (tasks []*kv } cteProducerTasks := make([]*kv.MPPTask, 0) for _, cteR := range f.CTEReaders { - child := cteR.children[0] + child := cteR.Children()[0] if _, ok := child.(*PhysicalProjection); ok { child = child.Children()[0] } @@ -450,7 +450,7 @@ func (f *Fragment) flipCTEReader(currentPlan base.PhysicalPlan) { func (e *mppTaskGenerator) generateTasksForCTEReader(cteReader *PhysicalCTE) (err error) { group := e.CTEGroups[cteReader.CTE.IDForStorage] if group.StorageFragments == nil { - group.CTEStorage.storageSender.SetChildren(group.CTEStorage.children...) + group.CTEStorage.storageSender.SetChildren(group.CTEStorage.Children()...) group.StorageTasks, group.StorageFragments, err = e.generateMPPTasksForExchangeSender(group.CTEStorage.storageSender) if err != nil { return err @@ -460,16 +460,16 @@ func (e *mppTaskGenerator) generateTasksForCTEReader(cteReader *PhysicalCTE) (er receiver.Tasks = group.StorageTasks receiver.frags = group.StorageFragments cteReader.SetChildren(receiver) - receiver.SetChildren(group.CTEStorage.children[0]) + receiver.SetChildren(group.CTEStorage.Children()[0]) inconsistenceNullable := false for i, col := range cteReader.schema.Columns { - if mysql.HasNotNullFlag(col.RetType.GetFlag()) != mysql.HasNotNullFlag(group.CTEStorage.children[0].Schema().Columns[i].RetType.GetFlag()) { + if mysql.HasNotNullFlag(col.RetType.GetFlag()) != mysql.HasNotNullFlag(group.CTEStorage.Children()[0].Schema().Columns[i].RetType.GetFlag()) { inconsistenceNullable = true break } } if inconsistenceNullable { - cols := group.CTEStorage.children[0].Schema().Clone().Columns + cols := group.CTEStorage.Children()[0].Schema().Clone().Columns for i, col := range cols { col.Index = i } @@ -551,7 +551,7 @@ func (e *mppTaskGenerator) constructMPPTasksImpl(ctx context.Context, ts *Physic if ts.Table.GetPartitionInfo() != nil { tiFlashStaticPrune = !e.ctx.GetSessionVars().StmtCtx.UseDynamicPartitionPrune() - tmp, _ := e.is.TableByID(ts.Table.ID) + tmp, _ := e.is.TableByID(ctx, ts.Table.ID) tbl := tmp.(table.PartitionedTable) if !tiFlashStaticPrune { var partitions []table.PhysicalTable diff --git a/pkg/planner/core/hint_utils.go b/pkg/planner/core/hint_utils.go index 76faa02452f24..62e63f6fe5813 100644 --- a/pkg/planner/core/hint_utils.go +++ b/pkg/planner/core/hint_utils.go @@ -15,10 +15,13 @@ package core import ( + "slices" + "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" h "github.com/pingcap/tidb/pkg/util/hint" ) @@ -39,9 +42,18 @@ func GenHintsFromFlatPlan(flat *FlatPhysicalPlan) []*ast.TableOptimizerHint { if len(selectPlan) == 0 || !selectPlan[0].IsPhysicalPlan { return nil } + // To generate leading hint, we need to extract join group from the plan tree by traversing children of PhysicalJoin + // operators. We use this map to avoid revisiting the same operator during this process. + visitedPhysicalJoinIDs := make(map[int]struct{}) for _, fop := range selectPlan { p := fop.Origin.(base.PhysicalPlan) hints = genHintsFromSingle(p, nodeTp, fop.StoreType, hints) + if join, ok := p.(PhysicalJoin); ok { + joinOrderHint := genJoinOrderHintFromRootPhysicalJoin(join, visitedPhysicalJoinIDs, nodeTp) + if joinOrderHint != nil { + hints = append(hints, joinOrderHint) + } + } } for _, cte := range flat.CTEs { for i, fop := range cte { @@ -50,6 +62,12 @@ func GenHintsFromFlatPlan(flat *FlatPhysicalPlan) []*ast.TableOptimizerHint { } p := fop.Origin.(base.PhysicalPlan) hints = genHintsFromSingle(p, nodeTp, fop.StoreType, hints) + if join, ok := p.(PhysicalJoin); ok { + joinOrderHint := genJoinOrderHintFromRootPhysicalJoin(join, visitedPhysicalJoinIDs, nodeTp) + if joinOrderHint != nil { + hints = append(hints, joinOrderHint) + } + } } } return h.RemoveDuplicatedHints(hints) @@ -61,83 +79,6 @@ func GenHintsFromPhysicalPlan(p base.Plan) []*ast.TableOptimizerHint { return GenHintsFromFlatPlan(flat) } -func getTableName(tblName model.CIStr, asName *model.CIStr) model.CIStr { - if asName != nil && asName.L != "" { - return *asName - } - return tblName -} - -func extractTableAsName(p base.PhysicalPlan) (*model.CIStr, *model.CIStr) { - if len(p.Children()) > 1 { - return nil, nil - } - switch x := p.(type) { - case *PhysicalTableReader: - ts := x.TablePlans[0].(*PhysicalTableScan) - if ts.TableAsName.L != "" { - return &ts.DBName, ts.TableAsName - } - return &ts.DBName, &ts.Table.Name - case *PhysicalIndexReader: - is := x.IndexPlans[0].(*PhysicalIndexScan) - if is.TableAsName.L != "" { - return &is.DBName, is.TableAsName - } - return &is.DBName, &is.Table.Name - case *PhysicalIndexLookUpReader: - is := x.IndexPlans[0].(*PhysicalIndexScan) - if is.TableAsName.L != "" { - return &is.DBName, is.TableAsName - } - return &is.DBName, &is.Table.Name - case *PhysicalSort, *PhysicalSelection, *PhysicalUnionScan, *PhysicalProjection: - return extractTableAsName(p.Children()[0]) - } - return nil, nil -} - -func getJoinHints(sctx base.PlanContext, joinType string, parentOffset int, nodeType h.NodeType, children ...base.PhysicalPlan) (res []*ast.TableOptimizerHint) { - if parentOffset == -1 { - return res - } - for _, child := range children { - qbOffset := child.QueryBlockOffset() - if qbOffset == -1 { - continue - } - var dbName, tableName *model.CIStr - if qbOffset != parentOffset { - var blockAsNames []ast.HintTable - if p := sctx.GetSessionVars().PlannerSelectBlockAsName.Load(); p != nil { - blockAsNames = *p - } - if qbOffset >= len(blockAsNames) { - continue - } - hintTable := blockAsNames[qbOffset] - // For sub-queries like `(select * from t) t1`, t1 should belong to its surrounding select block. - dbName, tableName, qbOffset = &hintTable.DBName, &hintTable.TableName, parentOffset - } else { - dbName, tableName = extractTableAsName(child) - } - if tableName == nil || tableName.L == "" { - continue - } - qbName, err := h.GenerateQBName(nodeType, qbOffset) - if err != nil { - continue - } - res = append(res, &ast.TableOptimizerHint{ - QBName: qbName, - HintName: model.NewCIStr(joinType), - Tables: []ast.HintTable{{DBName: *dbName, TableName: *tableName}}, - }) - break - } - return res -} - func genHintsFromSingle(p base.PhysicalPlan, nodeType h.NodeType, storeType kv.StoreType, res []*ast.TableOptimizerHint) []*ast.TableOptimizerHint { qbName, err := h.GenerateQBName(nodeType, p.QueryBlockOffset()) if err != nil { @@ -261,16 +202,421 @@ func genHintsFromSingle(p base.PhysicalPlan, nodeType h.NodeType, storeType kv.S }) } case *PhysicalMergeJoin: - res = append(res, getJoinHints(p.SCtx(), h.HintSMJ, p.QueryBlockOffset(), nodeType, pp.children...)...) + hint := genJoinMethodHintForSinglePhysicalJoin( + p.SCtx(), + h.HintSMJ, + p.QueryBlockOffset(), + nodeType, + false, + pp.Children()..., + ) + if hint != nil { + res = append(res, hint) + } case *PhysicalHashJoin: - // TODO: support the hash_join_build and hash_join_probe hint for auto capture - res = append(res, getJoinHints(p.SCtx(), h.HintHJ, p.QueryBlockOffset(), nodeType, pp.children...)...) + // For semi join, hash_join_[build|probe] is not supported. See getHashJoins() for details. + if pp.JoinType.IsSemiJoin() { + hint := genJoinMethodHintForSinglePhysicalJoin( + p.SCtx(), + h.HintHJ, + p.QueryBlockOffset(), + nodeType, + false, + pp.Children()..., + ) + if hint != nil { + res = append(res, hint) + } + break + } + var buildSideChild, probeSideChild base.PhysicalPlan + if pp.RightIsBuildSide() { + buildSideChild = pp.Children()[1] + probeSideChild = pp.Children()[0] + } else { + buildSideChild = pp.Children()[0] + probeSideChild = pp.Children()[1] + } + hint := genJoinMethodHintForSinglePhysicalJoin( + p.SCtx(), + h.HintHashJoinBuild, + p.QueryBlockOffset(), + nodeType, + true, + buildSideChild, + probeSideChild, + ) + if hint != nil { + res = append(res, hint) + } else { + // In case we failed to generate the hint for build side, we try to generate the hint for probe side. + hint := genJoinMethodHintForSinglePhysicalJoin( + p.SCtx(), + h.HintHashJoinProbe, + p.QueryBlockOffset(), + nodeType, + true, + probeSideChild, + buildSideChild, + ) + if hint != nil { + res = append(res, hint) + } + } case *PhysicalIndexJoin: - res = append(res, getJoinHints(p.SCtx(), h.HintINLJ, p.QueryBlockOffset(), nodeType, pp.children[pp.InnerChildIdx])...) + hint := genJoinMethodHintForSinglePhysicalJoin( + p.SCtx(), + h.HintINLJ, + p.QueryBlockOffset(), + nodeType, + true, + pp.Children()[pp.InnerChildIdx], + pp.Children()[1-pp.InnerChildIdx], + ) + if hint != nil { + res = append(res, hint) + } case *PhysicalIndexMergeJoin: - res = append(res, getJoinHints(p.SCtx(), h.HintINLMJ, p.QueryBlockOffset(), nodeType, pp.children[pp.InnerChildIdx])...) + hint := genJoinMethodHintForSinglePhysicalJoin( + p.SCtx(), + h.HintINLMJ, + p.QueryBlockOffset(), + nodeType, + true, + pp.Children()[pp.InnerChildIdx], + pp.Children()[1-pp.InnerChildIdx], + ) + if hint != nil { + res = append(res, hint) + } case *PhysicalIndexHashJoin: - res = append(res, getJoinHints(p.SCtx(), h.HintINLHJ, p.QueryBlockOffset(), nodeType, pp.children[pp.InnerChildIdx])...) + hint := genJoinMethodHintForSinglePhysicalJoin( + p.SCtx(), + h.HintINLHJ, + p.QueryBlockOffset(), + nodeType, + true, + pp.Children()[pp.InnerChildIdx], + pp.Children()[1-pp.InnerChildIdx], + ) + if hint != nil { + res = append(res, hint) + } + } + return res +} + +func getTableName(tblName model.CIStr, asName *model.CIStr) model.CIStr { + if asName != nil && asName.L != "" { + return *asName + } + return tblName +} + +// genJoinMethodHintForSinglePhysicalJoin is the entry point of generating join method hint. +// It generates a join method hint for a single physical join operator according to the input joinType. +// Both children of the Join should be passed in as the children arguments, this is for correctly deriving the QB offset +// for the hint. +// For hints like merge_join(), we can generate hint using table name of any one of the two tables. But for hints like +// hash_join_build() and inl_join(), we want to generate hint using table name of a specific side. For this difference, +// we introduce the onlyFirstTbl argument. If onlyFirstTbl is true, we only try to generate hint using the table name of +// the children[0]. +func genJoinMethodHintForSinglePhysicalJoin( + sctx base.PlanContext, + joinType string, + parentQBOffset int, + nodeType h.NodeType, + onlyFirstTbl bool, + children ...base.PhysicalPlan, +) *ast.TableOptimizerHint { + if parentQBOffset == -1 { + return nil + } + hintTbls, hintQBName := genHintTblForJoinNodes(sctx, children, parentQBOffset, nodeType) + effectiveHintTbls := slices.DeleteFunc(slices.Clone(hintTbls), func(ht *ast.HintTable) bool { + return ht == nil + }) + if len(effectiveHintTbls) == 0 { + return nil + } + + if onlyFirstTbl && hintTbls[0] == nil { + return nil + } + + newHint := &ast.TableOptimizerHint{ + HintName: model.NewCIStr(joinType), + Tables: []ast.HintTable{*effectiveHintTbls[0]}, + } + + if hintQBName != nil { + newHint.QBName = *hintQBName + } + + return newHint +} + +// genHintTblForJoinNodes tries to generate ast.HintTable for each join node, and the QB name for the hint itself. +// (Join node here means the operators that are joined, not Join operator itself) +// If the return values is not (nil,nil), len(hintTbls) should be equal to len(joinedNodes). The invalid ones in the +// returned hintTbls slice will be nil. +// The hintQBNamePtr will be nil if it's not needed, or we failed to generate one. +func genHintTblForJoinNodes( + sctx base.PlanContext, + joinedNodes []base.PhysicalPlan, + parentQBOffset int, + nodeType h.NodeType, +) (hintTbls []*ast.HintTable, hintQBNamePtr *model.CIStr) { + // 1. Use genHintTblForSingleJoinNode() to generate QB offset and table name for each join node. + + // Note that if we failed to generate valid information for one element in joinedNodes, we append -1 and nil instead + // of skipping. + // So qbOffsets[x] is -1 if and only if hintTbls[x] is nil; + // and qbOffsets[x] >=0 if and only if hintTbls[x] is not nil. + hintTbls = make([]*ast.HintTable, 0, len(joinedNodes)) + qbOffsets := make([]int, 0, len(joinedNodes)) + guessQBOffsets := make(map[int]struct{}) + for _, plan := range joinedNodes { + qbOffset, guessOffset, ht := genHintTblForSingleJoinNode(sctx, plan, parentQBOffset) + if qbOffset < 0 || ht == nil { + qbOffsets = append(qbOffsets, -1) + hintTbls = append(hintTbls, nil) + continue + } + // If we guessed the same QB offset for two different nodes, that's likely incorrect, and we stop use that. + // This may happen for queries like ... FROM t1 join (select * from t2 join t3) derived ... . We will guess + // derived@sel_1 for both t2 and t3, and that's incorrect. Besides, current leading hint also can't handle this + // kind of hints. + if guessOffset { + if _, ok := guessQBOffsets[qbOffset]; ok { + qbOffsets = append(qbOffsets, -1) + hintTbls = append(hintTbls, nil) + continue + } + guessQBOffsets[qbOffset] = struct{}{} + } + qbOffsets = append(qbOffsets, qbOffset) + hintTbls = append(hintTbls, ht) + } + + // 2. Add QB name for each table name in the hint. + + for i, hintTbl := range hintTbls { + if hintTbl == nil { + continue + } + // In quick binding, we always put the generated hints in the first valid place in the SQL. + // That implies hintname(@del_1) and hintname(@upd_1) is unnecessary in UPDATE/DELETE statements, and + // hintname(@sel_1) is unnecessary in SELECT statements. + // We don't generate QB name for the table names in the hint in this case to make the result cleaner. + if (qbOffsets[i] <= 1 && nodeType == h.TypeSelect) || + (qbOffsets[i] == 0 && (nodeType == h.TypeUpdate || nodeType == h.TypeDelete)) { + continue + } + tblQBName, err := h.GenerateQBName(nodeType, qbOffsets[i]) + if err != nil { + continue + } + hintTbls[i].QBName = tblQBName + } + + // 3. Generate QB name for the hint itself based on the QB name of each join node from step 1. + + // Current join reorder will break QB offset of the join operator, e.g. setting them to -1. + // So we are unable to get the correct QB offset for the hint from the join operator, now we use the minimum QB + // offset among the tables. + // Besides, genHintTblForSingleJoinNode() is not powerful enough to handle all cases, it may fail in some cases. + // If we failed to get QB offset information from one join node, we don't generate QB name for the hint. Because + // that may cause a wrong QB offset, leaving it blank is probably better. + if slices.Contains(qbOffsets, -1) { + return hintTbls, nil + } + minQBOffset := slices.Min(qbOffsets) + + // ditto. We don't generate unnecessary QB name for the hint itself. + if (minQBOffset > 1 && nodeType == h.TypeSelect) || + (minQBOffset > 0 && (nodeType == h.TypeUpdate || nodeType == h.TypeDelete)) { + hintQBName, err := h.GenerateQBName(nodeType, minQBOffset) + if err != nil { + return nil, nil + } + hintQBNamePtr = &hintQBName + } + return hintTbls, hintQBNamePtr +} + +// genHintTblForSingleJoinNode tries to generate ast.HintTable and QB offset for a single join node. +// See the comments inside about the meaning of guessQBOffset. +func genHintTblForSingleJoinNode( + sctx base.PlanContext, + joinNode base.PhysicalPlan, + parentOffset int, +) ( + qbOffset int, + guessQBOffset bool, + ht *ast.HintTable, +) { + selfOffset := joinNode.QueryBlockOffset() + qbOffset = selfOffset + if qbOffset == -1 { + return -1, false, nil + } + guessQBOffset = false + var dbName, tableName *model.CIStr + // For sub-queries like `(select * from t) t1`, t1 should belong to its surrounding select block. + if qbOffset != parentOffset { + var blockAsNames []ast.HintTable + if p := sctx.GetSessionVars().PlannerSelectBlockAsName.Load(); p != nil { + blockAsNames = *p + } + if qbOffset >= len(blockAsNames) { + return -1, false, nil + } + hintTable := blockAsNames[qbOffset] + dbName, tableName, qbOffset = &hintTable.DBName, &hintTable.TableName, parentOffset + // Current join reorder will break QB offset of the join operator by setting them to -1. In this case, we will + // get qbOffset == parentOffset == -1 when it comes here. + // For this case, we add a temporary fix to guess the QB offset based on the parent offset. The idea is simple, + // for the example above, we can easily notice that the QBOffset(t1) = QBOffset(t) - 1. This is not always true, + // but it works in simple cases. + if selfOffset > 1 && qbOffset == -1 { + guessQBOffset = true + qbOffset = selfOffset - 1 + } + } + if tableName == nil || tableName.L == "" { + guessQBOffset = false + qbOffset = joinNode.QueryBlockOffset() + dbName, tableName = extractTableAsName(joinNode) + } + if tableName == nil || tableName.L == "" { + return -1, false, nil + } + return qbOffset, guessQBOffset, &ast.HintTable{DBName: *dbName, TableName: *tableName} +} + +func extractTableAsName(p base.PhysicalPlan) (*model.CIStr, *model.CIStr) { + if len(p.Children()) > 1 { + return nil, nil + } + switch x := p.(type) { + case *PhysicalTableReader: + ts := x.TablePlans[0].(*PhysicalTableScan) + if ts.TableAsName != nil && ts.TableAsName.L != "" { + return &ts.DBName, ts.TableAsName + } + return &ts.DBName, &ts.Table.Name + case *PhysicalIndexReader: + is := x.IndexPlans[0].(*PhysicalIndexScan) + if is.TableAsName != nil && is.TableAsName.L != "" { + return &is.DBName, is.TableAsName + } + return &is.DBName, &is.Table.Name + case *PhysicalIndexLookUpReader: + is := x.IndexPlans[0].(*PhysicalIndexScan) + if is.TableAsName != nil && is.TableAsName.L != "" { + return &is.DBName, is.TableAsName + } + return &is.DBName, &is.Table.Name + case *PhysicalSort, *PhysicalSelection, *PhysicalUnionScan, *PhysicalProjection, + *PhysicalHashAgg, *PhysicalStreamAgg: + return extractTableAsName(p.Children()[0]) + } + return nil, nil +} + +// genJoinOrderHintFromRootPhysicalJoin is the entry point of generating join order hint. +func genJoinOrderHintFromRootPhysicalJoin( + p PhysicalJoin, + visitedIDs map[int]struct{}, + nodeType h.NodeType, +) *ast.TableOptimizerHint { + if _, visited := visitedIDs[p.ID()]; visited { + return nil + } + + // 1. Get the joined operators in this join group with correct order in the slice. + orderedJoinGroup := extractOrderedPhysicalJoinGroup(p, visitedIDs, 1) + // If it only involves two tables, we don't need to generate the join order hint. + if len(orderedJoinGroup) <= 2 { + return nil + } + + // 2. Generate the leading hint based on the ordered join nodes. + hintTbls, hintQBName := genHintTblForJoinNodes(p.SCtx(), orderedJoinGroup, p.QueryBlockOffset(), nodeType) + + // For now, we generate the leading hint only if we successfully generate the names for all nodes. + if slices.Contains(hintTbls, nil) { + return nil + } + + hintTblVals := make([]ast.HintTable, 0, len(hintTbls)) + for _, ht := range hintTbls { + hintTblVals = append(hintTblVals, *ht) + } + res := &ast.TableOptimizerHint{ + HintName: model.NewCIStr(h.HintLeading), + Tables: hintTblVals, + } + if hintQBName != nil { + res.QBName = *hintQBName } return res } + +func extractOrderedPhysicalJoinGroup(p PhysicalJoin, visitedIDs map[int]struct{}, depth uint) []base.PhysicalPlan { + visitedIDs[p.ID()] = struct{}{} + + // 1. sanity checks + + // In our join reorder implementation, cartesian join will break the join relationship and make its two children + // two independent join groups. So we don't need to handle it here. + // Currently, index joins must match the index or PK of the inner table, so cartesian join must be a hash join. + if hashJoin, ok := p.(*PhysicalHashJoin); ok { + if len(hashJoin.EqualConditions) == 0 && len(hashJoin.NAEqualConditions) == 0 { + return nil + } + } + + jt := p.GetJoinType() + // They are the only join types supported by current join reorder. + if jt != logicalop.InnerJoin && jt != logicalop.LeftOuterJoin && jt != logicalop.RightOuterJoin { + return nil + } + + // 2. Extract information from children according to whether the child is another Join, then construct the ordered + // join group and return. + + var child0IsJoin, child1IsJoin bool + var childJoin PhysicalJoin + var childJoinGroup []base.PhysicalPlan + if childJoin, child0IsJoin = p.Children()[0].(PhysicalJoin); child0IsJoin { + childJoinGroup = extractOrderedPhysicalJoinGroup(childJoin, visitedIDs, depth+1) + } + if childJoin, child1IsJoin = p.Children()[1].(PhysicalJoin); child1IsJoin { + childJoinGroup = extractOrderedPhysicalJoinGroup(childJoin, visitedIDs, depth+1) + } + + // case 1 - bushy join: not supported now, also should not appear now + if child0IsJoin && child1IsJoin { + return nil + } + // case 2 - leaf join operator: initialize the join group with the two children + if !child0IsJoin && !child1IsJoin { + // preallocate the slice based on the number of join operators to avoid reallocations + orderedJoinGroup := make([]base.PhysicalPlan, 0, depth+1) + orderedJoinGroup = append(orderedJoinGroup, p.Children()[0], p.Children()[1]) + return orderedJoinGroup + } + // case 3 - non-leaf join operator: append the non-join child to the join group from the Join child + if len(childJoinGroup) < 2 { + return nil + } + var orderedJoinGroup []base.PhysicalPlan + if child0IsJoin { + orderedJoinGroup = append(childJoinGroup, p.Children()[1]) + } else { + orderedJoinGroup = append(childJoinGroup, p.Children()[0]) + } + return orderedJoinGroup +} diff --git a/pkg/planner/core/index_join_path.go b/pkg/planner/core/index_join_path.go new file mode 100644 index 0000000000000..d34821de013c6 --- /dev/null +++ b/pkg/planner/core/index_join_path.go @@ -0,0 +1,783 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package core + +import ( + "bytes" + "fmt" + "unsafe" + + "github.com/pingcap/errors" + "github.com/pingcap/tidb/pkg/expression" + "github.com/pingcap/tidb/pkg/parser/ast" + "github.com/pingcap/tidb/pkg/parser/mysql" + "github.com/pingcap/tidb/pkg/planner/cardinality" + "github.com/pingcap/tidb/pkg/planner/context" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" + "github.com/pingcap/tidb/pkg/planner/property" + "github.com/pingcap/tidb/pkg/planner/util" + "github.com/pingcap/tidb/pkg/statistics" + "github.com/pingcap/tidb/pkg/types" + "github.com/pingcap/tidb/pkg/util/chunk" + "github.com/pingcap/tidb/pkg/util/collate" + "github.com/pingcap/tidb/pkg/util/logutil" + "github.com/pingcap/tidb/pkg/util/ranger" + rangerctx "github.com/pingcap/tidb/pkg/util/ranger/context" + "github.com/pingcap/tidb/pkg/util/size" + "go.uber.org/zap" +) + +// mutableIndexJoinRange is designed for IndexJoin plan in the Plan Cache. +// Before reusing a cached IndexJoin plan from the Plan Cache, we have to +// first update the ranges of the IndexJoin plan according to the current parameters. +// mutableIndexJoinRanges stores all necessary information to rebuild the ranges of an IndexJoin plan. +type mutableIndexJoinRange struct { + ranges ranger.Ranges + rangeInfo string + + indexJoinInfo *indexJoinPathInfo // read-only + path *util.AccessPath // read-only +} + +func (mr *mutableIndexJoinRange) CloneForPlanCache() ranger.MutableRanges { + cloned := new(mutableIndexJoinRange) + if mr.ranges != nil { + cloned.ranges = mr.ranges.CloneForPlanCache().(ranger.Ranges) + } + cloned.rangeInfo = mr.rangeInfo + cloned.indexJoinInfo = mr.indexJoinInfo + cloned.path = mr.path + return cloned +} + +func (mr *mutableIndexJoinRange) Range() ranger.Ranges { + return mr.ranges +} + +func (mr *mutableIndexJoinRange) Rebuild(sctx context.PlanContext) error { + result, empty, err := indexJoinPathBuild(sctx, mr.path, mr.indexJoinInfo, true) + if err != nil { + return err + } + if empty { // empty ranges are dangerous for plan-cache, it's better to optimize the whole plan again in this case + return errors.New("failed to rebuild range: empty range") + } + newRanges := result.chosenRanges.Range() + if len(mr.ranges) != len(newRanges) || (len(mr.ranges) > 0 && mr.ranges[0].Width() != newRanges[0].Width()) { + // some access conditions cannot be used to calculate the range after parameters change, return an error in this case for safety. + return errors.New("failed to rebuild range: range width changed") + } + mr.rangeInfo = indexJoinPathRangeInfo(sctx, mr.indexJoinInfo.outerJoinKeys, result) + mr.ranges = result.chosenRanges.Range() + return nil +} + +// indexJoinPathResult records necessary information if we build IndexJoin on this chosen access path (or index). +type indexJoinPathResult struct { + chosenPath *util.AccessPath // the chosen access path (or index) + chosenAccess []expression.Expression // expressions used to access this index + chosenRemained []expression.Expression // remaining expressions after accessing this index + chosenRanges ranger.MutableRanges // the ranges used to access this index + usedColsLen int // the number of columns used on this index, `t1.a=t2.a and t1.b=t2.b` can use 2 columns of index t1(a, b, c) + usedColsNDV float64 // the estimated NDV of the used columns on this index, the NDV of `t1(a, b)` + idxOff2KeyOff []int + lastColManager *ColWithCmpFuncManager +} + +// indexJoinPathInfo records necessary information to build IndexJoin. +type indexJoinPathInfo struct { + joinOtherConditions []expression.Expression + outerJoinKeys []*expression.Column + innerJoinKeys []*expression.Column + innerSchema *expression.Schema + innerPushedConditions []expression.Expression + innerStats *property.StatsInfo +} + +// indexJoinPathTmp records temporary information when building IndexJoin. +type indexJoinPathTmp struct { + curPossibleUsedKeys []*expression.Column + curNotUsedIndexCols []*expression.Column + curNotUsedColLens []int + // Store the corresponding innerKeys offset of each column in the current path, reset by "resetContextForIndex()" + curIdxOff2KeyOff []int +} + +type indexJoinTmpRange struct { + ranges ranger.Ranges + emptyRange bool + keyCntInRange int + eqAndInCntInRange int + nextColInRange bool + extraColInRange bool + err error +} + +// indexJoinPathNewMutableRange creates a mutableIndexJoinRange. +// See more info in the comments of mutableIndexJoinRange. +func indexJoinPathNewMutableRange( + sctx context.PlanContext, + indexJoinInfo *indexJoinPathInfo, + relatedExprs []expression.Expression, + ranges []*ranger.Range, + path *util.AccessPath) ranger.MutableRanges { + // if the plan-cache is enabled and these ranges depend on some parameters, we have to rebuild these ranges after changing parameters + if expression.MaybeOverOptimized4PlanCache(sctx.GetExprCtx(), relatedExprs) { + // assume that path, innerKeys and outerKeys will not be modified in the follow-up process + return &mutableIndexJoinRange{ + ranges: ranges, + indexJoinInfo: indexJoinInfo, + path: path, + } + } + return ranger.Ranges(ranges) +} + +func indexJoinPathUpdateTmpRange( + sctx context.PlanContext, + buildTmp *indexJoinPathTmp, + tempRangeRes *indexJoinTmpRange, + accesses, remained []expression.Expression) (lastColPos int, newAccesses, newRemained []expression.Expression) { + lastColPos = tempRangeRes.keyCntInRange + tempRangeRes.eqAndInCntInRange + buildTmp.curPossibleUsedKeys = buildTmp.curPossibleUsedKeys[:tempRangeRes.keyCntInRange] + for i := lastColPos; i < len(buildTmp.curIdxOff2KeyOff); i++ { + buildTmp.curIdxOff2KeyOff[i] = -1 + } + newAccesses = accesses[:tempRangeRes.eqAndInCntInRange] + newRemained = ranger.AppendConditionsIfNotExist(sctx.GetExprCtx().GetEvalCtx(), + remained, accesses[tempRangeRes.eqAndInCntInRange:]) + return +} + +// indexJoinPathBuild tries to build an index join on this specified access path. +// The result is recorded in the *indexJoinPathResult, see more info in that structure. +func indexJoinPathBuild(sctx context.PlanContext, + path *util.AccessPath, + indexJoinInfo *indexJoinPathInfo, + rebuildMode bool) (result *indexJoinPathResult, emptyRange bool, err error) { + if len(path.IdxCols) == 0 { + return nil, false, nil + } + accesses := make([]expression.Expression, 0, len(path.IdxCols)) + buildTmp := indexJoinPathTmpInit(sctx, indexJoinInfo, path.IdxCols, path.IdxColLens) + notKeyEqAndIn, remained, rangeFilterCandidates, emptyRange := indexJoinPathFindUsefulEQIn(sctx, indexJoinInfo, buildTmp) + if emptyRange { + return nil, true, nil + } + var remainedEqAndIn []expression.Expression + notKeyEqAndIn, remainedEqAndIn = indexJoinPathRemoveUselessEQIn(buildTmp, path.IdxCols, notKeyEqAndIn) + matchedKeyCnt := len(buildTmp.curPossibleUsedKeys) + // If no join key is matched while join keys actually are not empty. We don't choose index join for now. + if matchedKeyCnt <= 0 && len(indexJoinInfo.innerJoinKeys) > 0 { + return nil, false, nil + } + accesses = append(accesses, notKeyEqAndIn...) + remained = ranger.AppendConditionsIfNotExist(sctx.GetExprCtx().GetEvalCtx(), remained, remainedEqAndIn) + lastColPos := matchedKeyCnt + len(notKeyEqAndIn) + // There should be some equal conditions. But we don't need that there must be some join key in accesses here. + // A more strict check is applied later. + if lastColPos <= 0 { + return nil, false, nil + } + rangeMaxSize := sctx.GetSessionVars().RangeMaxSize + if rebuildMode { + // When rebuilding ranges for plan cache, we don't restrict range mem limit. + rangeMaxSize = 0 + } + // If all the index columns are covered by eq/in conditions, we don't need to consider other conditions anymore. + if lastColPos == len(path.IdxCols) { + // If there's no join key matching index column, then choosing hash join is always a better idea. + // e.g. select * from t1, t2 where t2.a=1 and t2.b=1. And t2 has index(a, b). + // If we don't have the following check, TiDB will build index join for this case. + if matchedKeyCnt <= 0 { + return nil, false, nil + } + remained = append(remained, rangeFilterCandidates...) + tempRangeRes := indexJoinPathBuildTmpRange(sctx, buildTmp, matchedKeyCnt, notKeyEqAndIn, nil, false, rangeMaxSize) + if tempRangeRes.err != nil || tempRangeRes.emptyRange || tempRangeRes.keyCntInRange <= 0 { + return nil, tempRangeRes.emptyRange, tempRangeRes.err + } + lastColPos, accesses, remained = indexJoinPathUpdateTmpRange(sctx, buildTmp, tempRangeRes, accesses, remained) + mutableRange := indexJoinPathNewMutableRange(sctx, indexJoinInfo, accesses, tempRangeRes.ranges, path) + ret := indexJoinPathConstructResult(indexJoinInfo, buildTmp, mutableRange, path, accesses, remained, nil, lastColPos) + return ret, false, nil + } + lastPossibleCol := path.IdxCols[lastColPos] + lastColManager := &ColWithCmpFuncManager{ + TargetCol: lastPossibleCol, + colLength: path.IdxColLens[lastColPos], + affectedColSchema: expression.NewSchema(), + } + lastColAccess := indexJoinPathBuildColManager(indexJoinInfo, lastPossibleCol, lastColManager) + // If the column manager holds no expression, then we fallback to find whether there're useful normal filters + if len(lastColAccess) == 0 { + // If there's no join key matching index column, then choosing hash join is always a better idea. + // e.g. select * from t1, t2 where t2.a=1 and t2.b=1 and t2.c > 10 and t2.c < 20. And t2 has index(a, b, c). + // If we don't have the following check, TiDB will build index join for this case. + if matchedKeyCnt <= 0 { + return nil, false, nil + } + colAccesses, colRemained := ranger.DetachCondsForColumn(sctx.GetRangerCtx(), rangeFilterCandidates, lastPossibleCol) + var nextColRange []*ranger.Range + var err error + if len(colAccesses) > 0 { + var colRemained2 []expression.Expression + nextColRange, colAccesses, colRemained2, err = ranger.BuildColumnRange(colAccesses, sctx.GetRangerCtx(), lastPossibleCol.RetType, path.IdxColLens[lastColPos], rangeMaxSize) + if err != nil { + return nil, false, err + } + if len(colRemained2) > 0 { + colRemained = append(colRemained, colRemained2...) + nextColRange = nil + } + } + tempRangeRes := indexJoinPathBuildTmpRange(sctx, buildTmp, matchedKeyCnt, notKeyEqAndIn, nextColRange, false, rangeMaxSize) + if tempRangeRes.err != nil || tempRangeRes.emptyRange || tempRangeRes.keyCntInRange <= 0 { + return nil, tempRangeRes.emptyRange, tempRangeRes.err + } + lastColPos, accesses, remained = indexJoinPathUpdateTmpRange(sctx, buildTmp, tempRangeRes, accesses, remained) + // update accesses and remained by colAccesses and colRemained. + remained = append(remained, colRemained...) + if tempRangeRes.nextColInRange { + if path.IdxColLens[lastColPos] != types.UnspecifiedLength { + remained = append(remained, colAccesses...) + } + accesses = append(accesses, colAccesses...) + lastColPos = lastColPos + 1 + } else { + remained = append(remained, colAccesses...) + } + mutableRange := indexJoinPathNewMutableRange(sctx, indexJoinInfo, accesses, tempRangeRes.ranges, path) + ret := indexJoinPathConstructResult(indexJoinInfo, buildTmp, mutableRange, path, accesses, remained, nil, lastColPos) + return ret, false, nil + } + tempRangeRes := indexJoinPathBuildTmpRange(sctx, buildTmp, matchedKeyCnt, notKeyEqAndIn, nil, true, rangeMaxSize) + if tempRangeRes.err != nil || tempRangeRes.emptyRange { + return nil, tempRangeRes.emptyRange, tempRangeRes.err + } + lastColPos, accesses, remained = indexJoinPathUpdateTmpRange(sctx, buildTmp, tempRangeRes, accesses, remained) + + remained = append(remained, rangeFilterCandidates...) + if tempRangeRes.extraColInRange { + accesses = append(accesses, lastColAccess...) + lastColPos = lastColPos + 1 + } else { + if tempRangeRes.keyCntInRange <= 0 { + return nil, false, nil + } + lastColManager = nil + } + mutableRange := indexJoinPathNewMutableRange(sctx, indexJoinInfo, accesses, tempRangeRes.ranges, path) + ret := indexJoinPathConstructResult(indexJoinInfo, buildTmp, mutableRange, path, accesses, remained, lastColManager, lastColPos) + return ret, false, nil +} + +// indexJoinPathCompare compares these 2 index join paths and returns whether the current is better than the base. +func indexJoinPathCompare(best, current *indexJoinPathResult) (curIsBetter bool) { + // Notice that there may be the cases like `t1.a = t2.a and b > 2 and b < 1`, so ranges can be nil though the conditions are valid. + // Obviously when the range is nil, we don't need index join. + if current == nil || len(current.chosenRanges.Range()) == 0 { + return false + } + if best == nil { + return true + } + // We choose the index by the NDV of the used columns, the larger the better. + // If NDVs are same, we choose index which uses more columns. + // Note that these 2 heuristic rules are too simple to cover all cases, + // since the NDV of outer join keys are not considered, and the detached access conditions + // may contain expressions like `t1.a > t2.a`. It's pretty hard to evaluate the join selectivity + // of these non-column-equal conditions, so I prefer to keep these heuristic rules simple at least for now. + if current.usedColsNDV < best.usedColsNDV || (current.usedColsNDV == best.usedColsNDV && current.usedColsLen <= best.usedColsLen) { + return false + } + return true +} + +// indexJoinPathConstructResult constructs the index join path result. +func indexJoinPathConstructResult( + indexJoinInfo *indexJoinPathInfo, + buildTmp *indexJoinPathTmp, + ranges ranger.MutableRanges, + path *util.AccessPath, accesses, + remained []expression.Expression, + lastColManager *ColWithCmpFuncManager, + usedColsLen int) *indexJoinPathResult { + var innerNDV float64 + if stats := indexJoinInfo.innerStats; stats != nil && stats.StatsVersion != statistics.PseudoVersion { + innerNDV, _ = cardinality.EstimateColsNDVWithMatchedLen(path.IdxCols[:usedColsLen], indexJoinInfo.innerSchema, stats) + } + idxOff2KeyOff := make([]int, len(buildTmp.curIdxOff2KeyOff)) + copy(idxOff2KeyOff, buildTmp.curIdxOff2KeyOff) + return &indexJoinPathResult{ + chosenPath: path, + usedColsLen: len(ranges.Range()[0].LowVal), + usedColsNDV: innerNDV, + chosenRanges: ranges, + chosenAccess: accesses, + chosenRemained: remained, + idxOff2KeyOff: idxOff2KeyOff, + lastColManager: lastColManager, + } +} + +func indexJoinPathBuildTmpRange( + sctx context.PlanContext, + buildTmp *indexJoinPathTmp, + matchedKeyCnt int, + eqAndInFuncs []expression.Expression, + nextColRange []*ranger.Range, + haveExtraCol bool, + rangeMaxSize int64) (res *indexJoinTmpRange) { + res = &indexJoinTmpRange{} + sc := sctx.GetSessionVars().StmtCtx + defer func() { + if sc.MemTracker != nil && res != nil && len(res.ranges) > 0 { + sc.MemTracker.Consume(2 * types.EstimatedMemUsage(res.ranges[0].LowVal, len(res.ranges))) + } + }() + pointLength := matchedKeyCnt + len(eqAndInFuncs) + ranges := ranger.Ranges{&ranger.Range{}} + for i, j := 0, 0; i+j < pointLength; { + if buildTmp.curIdxOff2KeyOff[i+j] != -1 { + // This position is occupied by join key. + var fallback bool + ranges, fallback = appendTailTemplateRange(ranges, rangeMaxSize) + if fallback { + sctx.GetSessionVars().StmtCtx.RecordRangeFallback(rangeMaxSize) + res.ranges = ranges + res.keyCntInRange = i + res.eqAndInCntInRange = j + return + } + i++ + } else { + exprs := []expression.Expression{eqAndInFuncs[j]} + oneColumnRan, _, remained, err := ranger.BuildColumnRange(exprs, sctx.GetRangerCtx(), buildTmp.curNotUsedIndexCols[j].RetType, buildTmp.curNotUsedColLens[j], rangeMaxSize) + if err != nil { + return &indexJoinTmpRange{err: err} + } + if len(oneColumnRan) == 0 { + return &indexJoinTmpRange{emptyRange: true} + } + if sc.MemTracker != nil { + sc.MemTracker.Consume(2 * types.EstimatedMemUsage(oneColumnRan[0].LowVal, len(oneColumnRan))) + } + if len(remained) > 0 { + res.ranges = ranges + res.keyCntInRange = i + res.eqAndInCntInRange = j + return + } + var fallback bool + ranges, fallback = ranger.AppendRanges2PointRanges(ranges, oneColumnRan, rangeMaxSize) + if fallback { + sctx.GetSessionVars().StmtCtx.RecordRangeFallback(rangeMaxSize) + res.ranges = ranges + res.keyCntInRange = i + res.eqAndInCntInRange = j + return + } + j++ + } + } + if len(nextColRange) > 0 { + var fallback bool + ranges, fallback = ranger.AppendRanges2PointRanges(ranges, nextColRange, rangeMaxSize) + if fallback { + sctx.GetSessionVars().StmtCtx.RecordRangeFallback(rangeMaxSize) + } + res.ranges = ranges + res.keyCntInRange = matchedKeyCnt + res.eqAndInCntInRange = len(eqAndInFuncs) + res.nextColInRange = !fallback + return + } + if haveExtraCol { + var fallback bool + ranges, fallback = appendTailTemplateRange(ranges, rangeMaxSize) + if fallback { + sctx.GetSessionVars().StmtCtx.RecordRangeFallback(rangeMaxSize) + } + res.ranges = ranges + res.keyCntInRange = matchedKeyCnt + res.eqAndInCntInRange = len(eqAndInFuncs) + res.extraColInRange = !fallback + return + } + res.ranges = ranges + res.keyCntInRange = matchedKeyCnt + res.eqAndInCntInRange = len(eqAndInFuncs) + return +} + +// indexJoinPathRangeInfo generates the range information for the index join path. +func indexJoinPathRangeInfo(sctx context.PlanContext, + outerJoinKeys []*expression.Column, + indexJoinResult *indexJoinPathResult) string { + buffer := bytes.NewBufferString("[") + isFirst := true + for idxOff, keyOff := range indexJoinResult.idxOff2KeyOff { + if keyOff == -1 { + continue + } + if !isFirst { + buffer.WriteString(" ") + } else { + isFirst = false + } + fmt.Fprintf(buffer, "eq(%v, %v)", indexJoinResult.chosenPath.IdxCols[idxOff], outerJoinKeys[keyOff]) + } + ectx := sctx.GetExprCtx().GetEvalCtx() + // It is to build the range info which is used in explain. It is necessary to redact the range info. + redact := ectx.GetTiDBRedactLog() + for _, access := range indexJoinResult.chosenAccess { + if !isFirst { + buffer.WriteString(" ") + } else { + isFirst = false + } + fmt.Fprintf(buffer, "%v", access.StringWithCtx(ectx, redact)) + } + buffer.WriteString("]") + return buffer.String() +} + +// Reset the 'curIdxOff2KeyOff', 'curNotUsedIndexCols' and 'curNotUsedColLens' by innerKeys and idxCols +/* +For each idxCols, + If column can be found in innerKeys + save offset of innerKeys in 'curIdxOff2KeyOff' + Else, + save -1 in 'curIdxOff2KeyOff' +*/ +// For example, innerKeys[t1.a, t1.sum_b, t1.c], idxCols [a, b, c] +// 'curIdxOff2KeyOff' = [0, -1, 2] +func indexJoinPathTmpInit( + sctx context.PlanContext, + indexJoinInfo *indexJoinPathInfo, + idxCols []*expression.Column, + colLens []int) *indexJoinPathTmp { + tmpSchema := expression.NewSchema(indexJoinInfo.innerJoinKeys...) + buildTmp := new(indexJoinPathTmp) + buildTmp.curIdxOff2KeyOff = make([]int, len(idxCols)) + buildTmp.curNotUsedIndexCols = make([]*expression.Column, 0, len(idxCols)) + buildTmp.curNotUsedColLens = make([]int, 0, len(idxCols)) + for i, idxCol := range idxCols { + buildTmp.curIdxOff2KeyOff[i] = tmpSchema.ColumnIndex(idxCol) + if buildTmp.curIdxOff2KeyOff[i] >= 0 { + // Don't use the join columns if their collations are unmatched and the new collation is enabled. + if collate.NewCollationEnabled() && types.IsString(idxCol.RetType.GetType()) && types.IsString(indexJoinInfo.outerJoinKeys[buildTmp.curIdxOff2KeyOff[i]].RetType.GetType()) { + et, err := expression.CheckAndDeriveCollationFromExprs(sctx.GetExprCtx(), "equal", types.ETInt, idxCol, indexJoinInfo.outerJoinKeys[buildTmp.curIdxOff2KeyOff[i]]) + if err != nil { + logutil.BgLogger().Error("Unexpected error happened during constructing index join", zap.Stack("stack")) + } + if !collate.CompatibleCollate(idxCol.GetStaticType().GetCollate(), et.Collation) { + buildTmp.curIdxOff2KeyOff[i] = -1 + } + } + continue + } + buildTmp.curNotUsedIndexCols = append(buildTmp.curNotUsedIndexCols, idxCol) + buildTmp.curNotUsedColLens = append(buildTmp.curNotUsedColLens, colLens[i]) + } + return buildTmp +} + +// indexJoinPathFindUsefulEQIn analyzes the PushedDownConds held by inner child and split them to three parts. +// usefulEqOrInFilters is the continuous eq/in conditions on current unused index columns. +// remainedEqOrIn is part of usefulEqOrInFilters, which needs to be evaluated again in selection. +// remainingRangeCandidates is the other conditions for future use. +func indexJoinPathFindUsefulEQIn(sctx context.PlanContext, indexJoinInfo *indexJoinPathInfo, + buildTmp *indexJoinPathTmp) (usefulEqOrInFilters, remainedEqOrIn, remainingRangeCandidates []expression.Expression, emptyRange bool) { + // Extract the eq/in functions of possible join key. + // you can see the comment of ExtractEqAndInCondition to get the meaning of the second return value. + usefulEqOrInFilters, remainedEqOrIn, remainingRangeCandidates, _, emptyRange = ranger.ExtractEqAndInCondition( + sctx.GetRangerCtx(), + indexJoinInfo.innerPushedConditions, + buildTmp.curNotUsedIndexCols, + buildTmp.curNotUsedColLens, + ) + return usefulEqOrInFilters, remainedEqOrIn, remainingRangeCandidates, emptyRange +} + +// indexJoinPathBuildColManager analyze the `OtherConditions` of join to see whether there're some filters can be used in manager. +// The returned value is just for outputting explain information +func indexJoinPathBuildColManager(indexJoinInfo *indexJoinPathInfo, + nextCol *expression.Column, cwc *ColWithCmpFuncManager) []expression.Expression { + var lastColAccesses []expression.Expression +loopOtherConds: + for _, filter := range indexJoinInfo.joinOtherConditions { + sf, ok := filter.(*expression.ScalarFunction) + if !ok || !(sf.FuncName.L == ast.LE || sf.FuncName.L == ast.LT || sf.FuncName.L == ast.GE || sf.FuncName.L == ast.GT) { + continue + } + var funcName string + var anotherArg expression.Expression + if lCol, ok := sf.GetArgs()[0].(*expression.Column); ok && lCol.EqualColumn(nextCol) { + anotherArg = sf.GetArgs()[1] + funcName = sf.FuncName.L + } else if rCol, ok := sf.GetArgs()[1].(*expression.Column); ok && rCol.EqualColumn(nextCol) { + anotherArg = sf.GetArgs()[0] + // The column manager always build expression in the form of col op arg1. + // So we need use the symmetric one of the current function. + funcName = symmetricOp[sf.FuncName.L] + } else { + continue + } + affectedCols := expression.ExtractColumns(anotherArg) + if len(affectedCols) == 0 { + continue + } + for _, col := range affectedCols { + if indexJoinInfo.innerSchema.Contains(col) { + continue loopOtherConds + } + } + lastColAccesses = append(lastColAccesses, sf) + cwc.appendNewExpr(funcName, anotherArg, affectedCols) + } + return lastColAccesses +} + +// indexJoinPathRemoveUselessEQIn removes the useless eq/in conditions. It's designed for the following case: +// +// t1 join t2 on t1.a=t2.a and t1.c=t2.c where t1.b > t2.b-10 and t1.b < t2.b+10 there's index(a, b, c) on t1. +// In this case the curIdxOff2KeyOff is [0 -1 1] and the notKeyEqAndIn is []. +// It's clearly that the column c cannot be used to access data. So we need to remove it and reset the IdxOff2KeyOff to +// [0 -1 -1]. +// So that we can use t1.a=t2.a and t1.b > t2.b-10 and t1.b < t2.b+10 to build ranges then access data. +func indexJoinPathRemoveUselessEQIn(buildTmp *indexJoinPathTmp, idxCols []*expression.Column, + notKeyEqAndIn []expression.Expression) (usefulEqAndIn, uselessOnes []expression.Expression) { + buildTmp.curPossibleUsedKeys = make([]*expression.Column, 0, len(idxCols)) + for idxColPos, notKeyColPos := 0, 0; idxColPos < len(idxCols); idxColPos++ { + if buildTmp.curIdxOff2KeyOff[idxColPos] != -1 { + buildTmp.curPossibleUsedKeys = append(buildTmp.curPossibleUsedKeys, idxCols[idxColPos]) + continue + } + if notKeyColPos < len(notKeyEqAndIn) && buildTmp.curNotUsedIndexCols[notKeyColPos].EqualColumn(idxCols[idxColPos]) { + notKeyColPos++ + continue + } + for i := idxColPos + 1; i < len(idxCols); i++ { + buildTmp.curIdxOff2KeyOff[i] = -1 + } + remained := make([]expression.Expression, 0, len(notKeyEqAndIn)-notKeyColPos) + remained = append(remained, notKeyEqAndIn[notKeyColPos:]...) + notKeyEqAndIn = notKeyEqAndIn[:notKeyColPos] + return notKeyEqAndIn, remained + } + return notKeyEqAndIn, nil +} + +// getBestIndexJoinPathResult tries to iterate all possible access paths of the inner child and builds +// index join path for each access path. It returns the best index join path result and the mapping. +func getBestIndexJoinPathResult( + join *logicalop.LogicalJoin, + innerChild *DataSource, + innerJoinKeys, outerJoinKeys []*expression.Column, + checkPathValid func(path *util.AccessPath) bool) (*indexJoinPathResult, []int) { + indexJoinInfo := &indexJoinPathInfo{ + joinOtherConditions: join.OtherConditions, + outerJoinKeys: outerJoinKeys, + innerJoinKeys: innerJoinKeys, + innerPushedConditions: innerChild.PushedDownConds, + innerSchema: innerChild.Schema(), + innerStats: innerChild.StatsInfo(), + } + var bestResult *indexJoinPathResult + for _, path := range innerChild.PossibleAccessPaths { + if checkPathValid(path) { + result, emptyRange, err := indexJoinPathBuild(join.SCtx(), path, indexJoinInfo, false) + if emptyRange { + return nil, nil + } + if err != nil { + logutil.BgLogger().Warn("build index join failed", zap.Error(err)) + continue + } + if indexJoinPathCompare(bestResult, result) { + bestResult = result + } + } + } + if bestResult == nil || bestResult.chosenPath == nil { + return nil, nil + } + keyOff2IdxOff := make([]int, len(innerJoinKeys)) + for i := range keyOff2IdxOff { + keyOff2IdxOff[i] = -1 + } + for idxOff, keyOff := range bestResult.idxOff2KeyOff { + if keyOff != -1 { + keyOff2IdxOff[keyOff] = idxOff + } + } + return bestResult, keyOff2IdxOff +} + +// ColWithCmpFuncManager is used in index join to handle the column with compare functions(>=, >, <, <=). +// It stores the compare functions and build ranges in execution phase. +type ColWithCmpFuncManager struct { + TargetCol *expression.Column + colLength int + OpType []string + opArg []expression.Expression + TmpConstant []*expression.Constant + affectedColSchema *expression.Schema + compareFuncs []chunk.CompareFunc +} + +// Copy clones the ColWithCmpFuncManager. +func (cwc *ColWithCmpFuncManager) Copy() *ColWithCmpFuncManager { + if cwc == nil { + return nil + } + cloned := new(ColWithCmpFuncManager) + if cwc.TargetCol != nil { + cloned.TargetCol = cwc.TargetCol.Clone().(*expression.Column) + } + cloned.colLength = cwc.colLength + cloned.OpType = make([]string, len(cwc.OpType)) + copy(cloned.OpType, cwc.OpType) + cloned.opArg = util.CloneExpressions(cwc.opArg) + cloned.TmpConstant = util.CloneConstants(cwc.TmpConstant) + cloned.affectedColSchema = cwc.affectedColSchema.Clone() + cloned.compareFuncs = make([]chunk.CompareFunc, len(cwc.compareFuncs)) + copy(cloned.compareFuncs, cwc.compareFuncs) + return cloned +} + +func (cwc *ColWithCmpFuncManager) appendNewExpr(opName string, arg expression.Expression, affectedCols []*expression.Column) { + cwc.OpType = append(cwc.OpType, opName) + cwc.opArg = append(cwc.opArg, arg) + cwc.TmpConstant = append(cwc.TmpConstant, &expression.Constant{RetType: cwc.TargetCol.RetType}) + for _, col := range affectedCols { + if cwc.affectedColSchema.Contains(col) { + continue + } + cwc.compareFuncs = append(cwc.compareFuncs, chunk.GetCompareFunc(col.RetType)) + cwc.affectedColSchema.Append(col) + } +} + +// CompareRow compares the rows for deduplicate. +func (cwc *ColWithCmpFuncManager) CompareRow(lhs, rhs chunk.Row) int { + for i, col := range cwc.affectedColSchema.Columns { + ret := cwc.compareFuncs[i](lhs, col.Index, rhs, col.Index) + if ret != 0 { + return ret + } + } + return 0 +} + +// BuildRangesByRow will build range of the given row. It will eval each function's arg then call BuildRange. +func (cwc *ColWithCmpFuncManager) BuildRangesByRow(ctx *rangerctx.RangerContext, row chunk.Row) ([]*ranger.Range, error) { + exprs := make([]expression.Expression, len(cwc.OpType)) + exprCtx := ctx.ExprCtx + for i, opType := range cwc.OpType { + constantArg, err := cwc.opArg[i].Eval(exprCtx.GetEvalCtx(), row) + if err != nil { + return nil, err + } + cwc.TmpConstant[i].Value = constantArg + newExpr, err := expression.NewFunction(exprCtx, opType, types.NewFieldType(mysql.TypeTiny), cwc.TargetCol, cwc.TmpConstant[i]) + if err != nil { + return nil, err + } + exprs = append(exprs, newExpr) // nozero + } + // We already limit range mem usage when buildTemplateRange for inner table of IndexJoin in optimizer phase, so we + // don't need and shouldn't limit range mem usage when we refill inner ranges during the execution phase. + ranges, _, _, err := ranger.BuildColumnRange(exprs, ctx, cwc.TargetCol.RetType, cwc.colLength, 0) + if err != nil { + return nil, err + } + return ranges, nil +} + +func (cwc *ColWithCmpFuncManager) resolveIndices(schema *expression.Schema) (err error) { + for i := range cwc.opArg { + cwc.opArg[i], err = cwc.opArg[i].ResolveIndices(schema) + if err != nil { + return err + } + } + return nil +} + +// String implements Stringer interface. +func (cwc *ColWithCmpFuncManager) String() string { + buffer := bytes.NewBufferString("") + for i := range cwc.OpType { + fmt.Fprintf(buffer, "%v(%v, %v)", cwc.OpType[i], cwc.TargetCol, cwc.opArg[i]) + if i < len(cwc.OpType)-1 { + buffer.WriteString(" ") + } + } + return buffer.String() +} + +const emptyColWithCmpFuncManagerSize = int64(unsafe.Sizeof(ColWithCmpFuncManager{})) + +// MemoryUsage return the memory usage of ColWithCmpFuncManager +func (cwc *ColWithCmpFuncManager) MemoryUsage() (sum int64) { + if cwc == nil { + return + } + + sum = emptyColWithCmpFuncManagerSize + int64(cap(cwc.compareFuncs))*size.SizeOfFunc + if cwc.TargetCol != nil { + sum += cwc.TargetCol.MemoryUsage() + } + if cwc.affectedColSchema != nil { + sum += cwc.affectedColSchema.MemoryUsage() + } + + for _, str := range cwc.OpType { + sum += int64(len(str)) + } + for _, expr := range cwc.opArg { + sum += expr.MemoryUsage() + } + for _, cst := range cwc.TmpConstant { + sum += cst.MemoryUsage() + } + return +} + +// appendTailTemplateRange appends empty datum for each range in originRanges. +// rangeMaxSize is the max memory limit for ranges. O indicates no memory limit. +// If the second return value is true, it means that the estimated memory after appending datums to originRanges exceeds +// rangeMaxSize and the function rejects appending datums to originRanges. +func appendTailTemplateRange(originRanges ranger.Ranges, rangeMaxSize int64) (ranger.Ranges, bool) { + if rangeMaxSize > 0 && originRanges.MemUsage()+(types.EmptyDatumSize*2+16)*int64(len(originRanges)) > rangeMaxSize { + return originRanges, true + } + for _, ran := range originRanges { + ran.LowVal = append(ran.LowVal, types.Datum{}) + ran.HighVal = append(ran.HighVal, types.Datum{}) + ran.Collators = append(ran.Collators, nil) + } + return originRanges, false +} + +var symmetricOp = map[string]string{ + ast.LT: ast.GT, + ast.GE: ast.LE, + ast.GT: ast.LT, + ast.LE: ast.GE, +} diff --git a/pkg/planner/core/indexmerge_path.go b/pkg/planner/core/indexmerge_path.go index 875b6b0027c2c..f0ce254dae567 100644 --- a/pkg/planner/core/indexmerge_path.go +++ b/pkg/planner/core/indexmerge_path.go @@ -138,7 +138,7 @@ func (ds *DataSource) generateNormalIndexPartialPaths4DNF( ) (paths []*util.AccessPath, needSelection bool, usedMap []bool) { paths = make([]*util.AccessPath, 0, len(dnfItems)) usedMap = make([]bool, len(dnfItems)) - pushDownCtx := GetPushDownCtx(ds.SCtx()) + pushDownCtx := util.GetPushDownCtx(ds.SCtx()) for offset, item := range dnfItems { cnfItems := expression.SplitCNFItems(item) pushedDownCNFItems := make([]expression.Expression, 0, len(cnfItems)) @@ -207,7 +207,7 @@ func (ds *DataSource) generateNormalIndexPartialPaths4DNF( // } func (ds *DataSource) generateIndexMergeOrPaths(filters []expression.Expression) error { usedIndexCount := len(ds.PossibleAccessPaths) - pushDownCtx := GetPushDownCtx(ds.SCtx()) + pushDownCtx := util.GetPushDownCtx(ds.SCtx()) for k, cond := range filters { sf, ok := cond.(*expression.ScalarFunction) if !ok || sf.FuncName.L != ast.LogicOr { @@ -524,7 +524,7 @@ func (ds *DataSource) generateIndexMergeAndPaths(normalPathCnt int, usedAccessMa finalFilters := make([]expression.Expression, 0) partialFilters := make([]expression.Expression, 0, len(partialPaths)) hashCodeSet := make(map[string]struct{}) - pushDownCtx := GetPushDownCtx(ds.SCtx()) + pushDownCtx := util.GetPushDownCtx(ds.SCtx()) for _, path := range partialPaths { // Classify filters into coveredConds and notCoveredConds. coveredConds := make([]expression.Expression, 0, len(path.AccessConds)+len(path.IndexFilters)) @@ -730,7 +730,7 @@ func (ds *DataSource) generateIndexMerge4NormalIndex(regularPathCount int, index // PushDownExprs() will append extra warnings, which is annoying. So we reset warnings here. warnings := stmtCtx.GetWarnings() extraWarnings := stmtCtx.GetExtraWarnings() - _, remaining := expression.PushDownExprs(GetPushDownCtx(ds.SCtx()), indexMergeConds, kv.UnSpecified) + _, remaining := expression.PushDownExprs(util.GetPushDownCtx(ds.SCtx()), indexMergeConds, kv.UnSpecified) stmtCtx.SetWarnings(warnings) stmtCtx.SetExtraWarnings(extraWarnings) if len(remaining) > 0 { @@ -981,7 +981,29 @@ func (ds *DataSource) generateIndexMerge4ComposedIndex(normalPathCnt int, indexM remainedCNFs = append(remainedCNFs, CNFItem) } } - mvp := ds.buildPartialPathUp4MVIndex(combinedPartialPaths, true, remainedCNFs, ds.TableStats.HistColl) + + condInIdxFilter := make(map[string]struct{}, len(remainedCNFs)) + // try to derive index filters for each path + for _, path := range combinedPartialPaths { + idxFilters, _ := splitIndexFilterConditions(ds, remainedCNFs, path.FullIdxCols, path.FullIdxColLens) + idxFilters = util.CloneExprs(idxFilters) + path.IndexFilters = append(path.IndexFilters, idxFilters...) + for _, idxFilter := range idxFilters { + condInIdxFilter[string(idxFilter.HashCode())] = struct{}{} + } + } + + // Collect the table filters. + // Since it's the intersection type index merge here, as long as a filter appears in one path, we don't need it in + // the table filters. + var tableFilters []expression.Expression + for _, CNFItem := range remainedCNFs { + if _, ok := condInIdxFilter[string(CNFItem.HashCode())]; !ok { + tableFilters = append(tableFilters, CNFItem) + } + } + + mvp := buildPartialPathUp4MVIndex(combinedPartialPaths, true, tableFilters, ds.TableStats.HistColl) ds.PossibleAccessPaths = append(ds.PossibleAccessPaths, mvp) return nil @@ -1046,10 +1068,28 @@ func (ds *DataSource) generateIndexMerge4MVIndex(normalPathCnt int, filters []ex continue } - ds.PossibleAccessPaths = append(ds.PossibleAccessPaths, ds.buildPartialPathUp4MVIndex( + // Here, all partial paths are built from the same MV index, so we can directly use the first one to get the + // metadata. + // And according to buildPartialPaths4MVIndex, there must be at least one partial path if it returns ok. + firstPath := partialPaths[0] + idxFilters, tableFilters := splitIndexFilterConditions( + ds, + remainingFilters, + firstPath.FullIdxCols, + firstPath.FullIdxColLens, + ) + + // Add the index filters to every partial path. + // For union type index merge, this is necessary for correctness. + for _, path := range partialPaths { + clonedIdxFilters := util.CloneExprs(idxFilters) + path.IndexFilters = append(path.IndexFilters, clonedIdxFilters...) + } + + ds.PossibleAccessPaths = append(ds.PossibleAccessPaths, buildPartialPathUp4MVIndex( partialPaths, isIntersection, - remainingFilters, + tableFilters, ds.TableStats.HistColl, ), ) @@ -1058,7 +1098,7 @@ func (ds *DataSource) generateIndexMerge4MVIndex(normalPathCnt int, filters []ex } // buildPartialPathUp4MVIndex builds these partial paths up to a complete index merge path. -func (*DataSource) buildPartialPathUp4MVIndex( +func buildPartialPathUp4MVIndex( partialPaths []*util.AccessPath, isIntersection bool, remainingFilters []expression.Expression, @@ -1214,10 +1254,16 @@ func buildPartialPath4MVIndex( partialPath := &util.AccessPath{Index: mvIndex} partialPath.Ranges = ranger.FullRange() for i := 0; i < len(idxCols); i++ { + length := mvIndex.Columns[i].Length + // For full length prefix index, we consider it as non prefix index. + // This behavior is the same as in IndexInfo2Cols(), which is used for non mv index. + if length == idxCols[i].RetType.GetFlen() { + length = types.UnspecifiedLength + } partialPath.IdxCols = append(partialPath.IdxCols, idxCols[i]) - partialPath.IdxColLens = append(partialPath.IdxColLens, mvIndex.Columns[i].Length) + partialPath.IdxColLens = append(partialPath.IdxColLens, length) partialPath.FullIdxCols = append(partialPath.FullIdxCols, idxCols[i]) - partialPath.FullIdxColLens = append(partialPath.FullIdxColLens, mvIndex.Columns[i].Length) + partialPath.FullIdxColLens = append(partialPath.FullIdxColLens, length) } if err := detachCondAndBuildRangeForPath(sctx, partialPath, accessFilters, histColl); err != nil { return nil, false, err diff --git a/pkg/planner/core/indexmerge_test.go b/pkg/planner/core/indexmerge_test.go index 0381e0c61cafa..5760f084d5999 100644 --- a/pkg/planner/core/indexmerge_test.go +++ b/pkg/planner/core/indexmerge_test.go @@ -35,38 +35,38 @@ func getIndexMergePathDigest(ctx expression.EvalContext, paths []*util.AccessPat if len(paths) == startIndex { return "[]" } - idxMergeDisgest := "[" + idxMergeDigest := "[" for i := startIndex; i < len(paths); i++ { if i != startIndex { - idxMergeDisgest += "," + idxMergeDigest += "," } path := paths[i] - idxMergeDisgest += "{Idxs:[" + idxMergeDigest += "{Idxs:[" for j := 0; j < len(path.PartialAlternativeIndexPaths); j++ { if j > 0 { - idxMergeDisgest += "," + idxMergeDigest += "," } - idxMergeDisgest += "{" + idxMergeDigest += "{" // for every ONE index partial alternatives, output a set. for k, one := range path.PartialAlternativeIndexPaths[j] { if k != 0 { - idxMergeDisgest += "," + idxMergeDigest += "," } - idxMergeDisgest += one.Index.Name.L + idxMergeDigest += one.Index.Name.L } - idxMergeDisgest += "}" + idxMergeDigest += "}" } - idxMergeDisgest += "],TbFilters:[" + idxMergeDigest += "],TbFilters:[" for j := 0; j < len(path.TableFilters); j++ { if j > 0 { - idxMergeDisgest += "," + idxMergeDigest += "," } - idxMergeDisgest += path.TableFilters[j].StringWithCtx(ctx, errors.RedactLogDisable) + idxMergeDigest += path.TableFilters[j].StringWithCtx(ctx, errors.RedactLogDisable) } - idxMergeDisgest += "]}" + idxMergeDigest += "]}" } - idxMergeDisgest += "]" - return idxMergeDisgest + idxMergeDigest += "]" + return idxMergeDigest } func TestIndexMergePathGeneration(t *testing.T) { diff --git a/pkg/planner/core/indexmerge_unfinished_path.go b/pkg/planner/core/indexmerge_unfinished_path.go index cf2d7ed4193b3..5fa3e967038f8 100644 --- a/pkg/planner/core/indexmerge_unfinished_path.go +++ b/pkg/planner/core/indexmerge_unfinished_path.go @@ -417,6 +417,6 @@ func buildIntoAccessPath( } // 3. Build the final access path - ret := ds.buildPartialPathUp4MVIndex(partialPaths, false, tableFilter, ds.TableStats.HistColl) + ret := buildPartialPathUp4MVIndex(partialPaths, false, tableFilter, ds.TableStats.HistColl) return ret } diff --git a/pkg/planner/core/initialize.go b/pkg/planner/core/initialize.go index 8b53038f95960..46c59f38ca5f4 100644 --- a/pkg/planner/core/initialize.go +++ b/pkg/planner/core/initialize.go @@ -19,6 +19,7 @@ import ( "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/planner/core/base" "github.com/pingcap/tidb/pkg/planner/core/operator/baseimpl" + "github.com/pingcap/tidb/pkg/planner/core/operator/physicalop" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/plancodec" @@ -27,95 +28,95 @@ import ( // Init initializes PhysicalSelection. func (p PhysicalSelection) Init(ctx base.PlanContext, stats *property.StatsInfo, qbOffset int, props ...*property.PhysicalProperty) *PhysicalSelection { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeSel, &p, qbOffset) - p.childrenReqProps = props + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeSel, &p, qbOffset) + p.SetChildrenReqProps(props) p.SetStats(stats) return &p } // Init initializes PhysicalProjection. func (p PhysicalProjection) Init(ctx base.PlanContext, stats *property.StatsInfo, offset int, props ...*property.PhysicalProperty) *PhysicalProjection { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeProj, &p, offset) - p.childrenReqProps = props + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeProj, &p, offset) + p.SetChildrenReqProps(props) p.SetStats(stats) return &p } // Init initializes PhysicalUnionAll. func (p PhysicalUnionAll) Init(ctx base.PlanContext, stats *property.StatsInfo, offset int, props ...*property.PhysicalProperty) *PhysicalUnionAll { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeUnion, &p, offset) - p.childrenReqProps = props + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeUnion, &p, offset) + p.SetChildrenReqProps(props) p.SetStats(stats) return &p } // Init initializes PhysicalSort. func (p PhysicalSort) Init(ctx base.PlanContext, stats *property.StatsInfo, offset int, props ...*property.PhysicalProperty) *PhysicalSort { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeSort, &p, offset) - p.childrenReqProps = props + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeSort, &p, offset) + p.SetChildrenReqProps(props) p.SetStats(stats) return &p } // Init initializes NominalSort. func (p NominalSort) Init(ctx base.PlanContext, stats *property.StatsInfo, offset int, props ...*property.PhysicalProperty) *NominalSort { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeSort, &p, offset) - p.childrenReqProps = props + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeSort, &p, offset) + p.SetChildrenReqProps(props) p.SetStats(stats) return &p } // Init initializes PhysicalTopN. func (p PhysicalTopN) Init(ctx base.PlanContext, stats *property.StatsInfo, offset int, props ...*property.PhysicalProperty) *PhysicalTopN { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeTopN, &p, offset) - p.childrenReqProps = props + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeTopN, &p, offset) + p.SetChildrenReqProps(props) p.SetStats(stats) return &p } // Init initializes PhysicalLimit. func (p PhysicalLimit) Init(ctx base.PlanContext, stats *property.StatsInfo, offset int, props ...*property.PhysicalProperty) *PhysicalLimit { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeLimit, &p, offset) - p.childrenReqProps = props + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeLimit, &p, offset) + p.SetChildrenReqProps(props) p.SetStats(stats) return &p } // Init initializes PhysicalTableDual. func (p PhysicalTableDual) Init(ctx base.PlanContext, stats *property.StatsInfo, offset int) *PhysicalTableDual { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeDual, &p, offset) + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeDual, &p, offset) p.SetStats(stats) return &p } // Init initializes PhysicalMaxOneRow. func (p PhysicalMaxOneRow) Init(ctx base.PlanContext, stats *property.StatsInfo, offset int, props ...*property.PhysicalProperty) *PhysicalMaxOneRow { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeMaxOneRow, &p, offset) - p.childrenReqProps = props + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeMaxOneRow, &p, offset) + p.SetChildrenReqProps(props) p.SetStats(stats) return &p } // Init initializes PhysicalWindow. func (p PhysicalWindow) Init(ctx base.PlanContext, stats *property.StatsInfo, offset int, props ...*property.PhysicalProperty) *PhysicalWindow { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeWindow, &p, offset) - p.childrenReqProps = props + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeWindow, &p, offset) + p.SetChildrenReqProps(props) p.SetStats(stats) return &p } // Init initializes PhysicalShuffle. func (p PhysicalShuffle) Init(ctx base.PlanContext, stats *property.StatsInfo, offset int, props ...*property.PhysicalProperty) *PhysicalShuffle { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeShuffle, &p, offset) - p.childrenReqProps = props + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeShuffle, &p, offset) + p.SetChildrenReqProps(props) p.SetStats(stats) return &p } // Init initializes PhysicalShuffleReceiverStub. func (p PhysicalShuffleReceiverStub) Init(ctx base.PlanContext, stats *property.StatsInfo, offset int, props ...*property.PhysicalProperty) *PhysicalShuffleReceiverStub { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeShuffleReceiver, &p, offset) - p.childrenReqProps = props + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeShuffleReceiver, &p, offset) + p.SetChildrenReqProps(props) p.SetStats(stats) return &p } @@ -152,7 +153,7 @@ func (p ImportInto) Init(ctx base.PlanContext) *ImportInto { // Init initializes PhysicalShow. func (p PhysicalShow) Init(ctx base.PlanContext) *PhysicalShow { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeShow, &p, 0) + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeShow, &p, 0) // Just use pseudo stats to avoid panic. p.SetStats(&property.StatsInfo{RowCount: 1}) return &p @@ -160,7 +161,7 @@ func (p PhysicalShow) Init(ctx base.PlanContext) *PhysicalShow { // Init initializes PhysicalShowDDLJobs. func (p PhysicalShowDDLJobs) Init(ctx base.PlanContext) *PhysicalShowDDLJobs { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeShowDDLJobs, &p, 0) + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeShowDDLJobs, &p, 0) // Just use pseudo stats to avoid panic. p.SetStats(&property.StatsInfo{RowCount: 1}) return &p @@ -168,27 +169,27 @@ func (p PhysicalShowDDLJobs) Init(ctx base.PlanContext) *PhysicalShowDDLJobs { // Init initializes PhysicalLock. func (p PhysicalLock) Init(ctx base.PlanContext, stats *property.StatsInfo, props ...*property.PhysicalProperty) *PhysicalLock { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeLock, &p, 0) - p.childrenReqProps = props + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeLock, &p, 0) + p.SetChildrenReqProps(props) p.SetStats(stats) return &p } // Init initializes PhysicalTableScan. func (p PhysicalTableScan) Init(ctx base.PlanContext, offset int) *PhysicalTableScan { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeTableScan, &p, offset) + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeTableScan, &p, offset) return &p } // Init initializes PhysicalIndexScan. func (p PhysicalIndexScan) Init(ctx base.PlanContext, offset int) *PhysicalIndexScan { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeIdxScan, &p, offset) + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeIdxScan, &p, offset) return &p } // Init initializes PhysicalMemTable. func (p PhysicalMemTable) Init(ctx base.PlanContext, stats *property.StatsInfo, offset int) *PhysicalMemTable { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeMemTableScan, &p, offset) + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeMemTableScan, &p, offset) p.SetStats(stats) return &p } @@ -196,61 +197,61 @@ func (p PhysicalMemTable) Init(ctx base.PlanContext, stats *property.StatsInfo, // Init initializes PhysicalHashJoin. func (p PhysicalHashJoin) Init(ctx base.PlanContext, stats *property.StatsInfo, offset int, props ...*property.PhysicalProperty) *PhysicalHashJoin { tp := plancodec.TypeHashJoin - p.basePhysicalPlan = newBasePhysicalPlan(ctx, tp, &p, offset) - p.childrenReqProps = props + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, tp, &p, offset) + p.SetChildrenReqProps(props) p.SetStats(stats) return &p } // Init initializes PhysicalMergeJoin. func (p PhysicalMergeJoin) Init(ctx base.PlanContext, stats *property.StatsInfo, offset int) *PhysicalMergeJoin { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeMergeJoin, &p, offset) + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeMergeJoin, &p, offset) p.SetStats(stats) return &p } // Init initializes basePhysicalAgg. func (base basePhysicalAgg) Init(ctx base.PlanContext, stats *property.StatsInfo, offset int) *basePhysicalAgg { - base.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeHashAgg, &base, offset) + base.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeHashAgg, &base, offset) base.SetStats(stats) return &base } func (base basePhysicalAgg) initForHash(ctx base.PlanContext, stats *property.StatsInfo, offset int, props ...*property.PhysicalProperty) *PhysicalHashAgg { - p := &PhysicalHashAgg{base} - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeHashAgg, p, offset) - p.childrenReqProps = props + p := &PhysicalHashAgg{base, ""} + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeHashAgg, p, offset) + p.SetChildrenReqProps(props) p.SetStats(stats) return p } func (base basePhysicalAgg) initForStream(ctx base.PlanContext, stats *property.StatsInfo, offset int, props ...*property.PhysicalProperty) *PhysicalStreamAgg { p := &PhysicalStreamAgg{base} - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeStreamAgg, p, offset) - p.childrenReqProps = props + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeStreamAgg, p, offset) + p.SetChildrenReqProps(props) p.SetStats(stats) return p } // Init initializes PhysicalApply. func (p PhysicalApply) Init(ctx base.PlanContext, stats *property.StatsInfo, offset int, props ...*property.PhysicalProperty) *PhysicalApply { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeApply, &p, offset) - p.childrenReqProps = props + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeApply, &p, offset) + p.SetChildrenReqProps(props) p.SetStats(stats) return &p } // Init initializes PhysicalUnionScan. func (p PhysicalUnionScan) Init(ctx base.PlanContext, stats *property.StatsInfo, offset int, props ...*property.PhysicalProperty) *PhysicalUnionScan { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeUnionScan, &p, offset) - p.childrenReqProps = props + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeUnionScan, &p, offset) + p.SetChildrenReqProps(props) p.SetStats(stats) return &p } // Init initializes PhysicalIndexLookUpReader. func (p PhysicalIndexLookUpReader) Init(ctx base.PlanContext, offset int) *PhysicalIndexLookUpReader { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeIndexLookUp, &p, offset) + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeIndexLookUp, &p, offset) p.TablePlans = flattenPushDownPlan(p.tablePlan) p.IndexPlans = flattenPushDownPlan(p.indexPlan) p.schema = p.tablePlan.Schema() @@ -259,7 +260,7 @@ func (p PhysicalIndexLookUpReader) Init(ctx base.PlanContext, offset int) *Physi // Init initializes PhysicalIndexMergeReader. func (p PhysicalIndexMergeReader) Init(ctx base.PlanContext, offset int) *PhysicalIndexMergeReader { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeIndexMerge, &p, offset) + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeIndexMerge, &p, offset) if p.tablePlan != nil { p.SetStats(p.tablePlan.StatsInfo()) } else { @@ -336,7 +337,7 @@ func (p *PhysicalTableReader) adjustReadReqType(ctx base.PlanContext) { // Init initializes PhysicalTableReader. func (p PhysicalTableReader) Init(ctx base.PlanContext, offset int) *PhysicalTableReader { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeTableReader, &p, offset) + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeTableReader, &p, offset) p.ReadReqType = Cop if p.tablePlan == nil { return &p @@ -352,7 +353,7 @@ func (p PhysicalTableReader) Init(ctx base.PlanContext, offset int) *PhysicalTab // Init initializes PhysicalTableSample. func (p PhysicalTableSample) Init(ctx base.PlanContext, offset int) *PhysicalTableSample { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeTableSample, &p, offset) + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeTableSample, &p, offset) p.SetStats(&property.StatsInfo{RowCount: 1}) return &p } @@ -372,15 +373,15 @@ func (p *PhysicalTableSample) MemoryUsage() (sum int64) { // Init initializes PhysicalIndexReader. func (p PhysicalIndexReader) Init(ctx base.PlanContext, offset int) *PhysicalIndexReader { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeIndexReader, &p, offset) + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeIndexReader, &p, offset) p.SetSchema(nil) return &p } // Init initializes PhysicalIndexJoin. func (p PhysicalIndexJoin) Init(ctx base.PlanContext, stats *property.StatsInfo, offset int, props ...*property.PhysicalProperty) *PhysicalIndexJoin { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeIndexJoin, &p, offset) - p.childrenReqProps = props + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeIndexJoin, &p, offset) + p.SetChildrenReqProps(props) p.SetStats(stats) return &p } @@ -390,7 +391,7 @@ func (p PhysicalIndexMergeJoin) Init(ctx base.PlanContext) *PhysicalIndexMergeJo p.SetTP(plancodec.TypeIndexMergeJoin) p.SetID(int(ctx.GetSessionVars().PlanID.Add(1))) p.SetSCtx(ctx) - p.self = &p + p.Self = &p return &p } @@ -399,7 +400,7 @@ func (p PhysicalIndexHashJoin) Init(ctx base.PlanContext) *PhysicalIndexHashJoin p.SetTP(plancodec.TypeIndexHashJoin) p.SetID(int(ctx.GetSessionVars().PlanID.Add(1))) p.SetSCtx(ctx) - p.self = &p + p.Self = &p return &p } @@ -457,7 +458,7 @@ func flattenPushDownPlan(p base.PhysicalPlan) []base.PhysicalPlan { // Init only assigns type and context. func (p PhysicalCTE) Init(ctx base.PlanContext, stats *property.StatsInfo) *PhysicalCTE { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeCTE, &p, 0) + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeCTE, &p, 0) p.SetStats(stats) return &p } @@ -471,23 +472,23 @@ func (p PhysicalCTETable) Init(ctx base.PlanContext, stats *property.StatsInfo) // Init initializes FKCheck. func (p FKCheck) Init(ctx base.PlanContext) *FKCheck { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeForeignKeyCheck, &p, 0) + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeForeignKeyCheck, &p, 0) p.SetStats(&property.StatsInfo{}) return &p } // Init initializes FKCascade func (p FKCascade) Init(ctx base.PlanContext) *FKCascade { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeForeignKeyCascade, &p, 0) + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeForeignKeyCascade, &p, 0) p.SetStats(&property.StatsInfo{}) return &p } // Init initializes PhysicalSequence func (p PhysicalSequence) Init(ctx base.PlanContext, stats *property.StatsInfo, blockOffset int, props ...*property.PhysicalProperty) *PhysicalSequence { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeSequence, &p, blockOffset) + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeSequence, &p, blockOffset) p.SetStats(stats) - p.childrenReqProps = props + p.SetChildrenReqProps(props) return &p } diff --git a/pkg/planner/core/integration_test.go b/pkg/planner/core/integration_test.go index c613561971c00..9151a28fc11df 100644 --- a/pkg/planner/core/integration_test.go +++ b/pkg/planner/core/integration_test.go @@ -2237,6 +2237,20 @@ func TestIssue54213(t *testing.T) { " └─IndexRangeScan_14 0.10 cop[tikv] table:tb, index:ab(a, b) range:[1 1,1 1], keep order:false, stats:pseudo")) } +func TestIssue54870(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + + tk.MustExec("use test") + tk.MustExec(`create table t (id int, +deleted_at datetime(3) NOT NULL DEFAULT '1970-01-01 01:00:01.000', +is_deleted tinyint(1) GENERATED ALWAYS AS ((deleted_at > _utf8mb4'1970-01-01 01:00:01.000')) VIRTUAL NOT NULL, +key k(id, is_deleted))`) + tk.MustExec(`begin`) + tk.MustExec(`insert into t (id, deleted_at) values (1, now())`) + tk.MustHavePlan(`select 1 from t where id=1 and is_deleted=true`, "IndexRangeScan") +} + func TestIssue52472(t *testing.T) { store := testkit.CreateMockStore(t) tk := testkit.NewTestKit(t, store) @@ -2262,3 +2276,28 @@ func TestIssue52472(t *testing.T) { require.Equal(t, mysql.TypeNewDecimal, rs.Fields()[0].Column.FieldType.GetType()) require.NoError(t, rs.Close()) } + +func TestTiFlashHashAggPreAggMode(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + + tk.MustExec("set @@tiflash_hashagg_preaggregation_mode = default;") + tk.MustQuery("select @@tiflash_hashagg_preaggregation_mode;").Check(testkit.Rows("force_preagg")) + + tk.MustExec("set @@tiflash_hashagg_preaggregation_mode = 'auto';") + tk.MustQuery("select @@tiflash_hashagg_preaggregation_mode;").Check(testkit.Rows("auto")) + tk.MustExec("set @@tiflash_hashagg_preaggregation_mode = 'force_streaming';") + tk.MustQuery("select @@tiflash_hashagg_preaggregation_mode;").Check(testkit.Rows("force_streaming")) + tk.MustExec("set @@tiflash_hashagg_preaggregation_mode = 'force_preagg';") + tk.MustQuery("select @@tiflash_hashagg_preaggregation_mode;").Check(testkit.Rows("force_preagg")) + + tk.MustExec("set global tiflash_hashagg_preaggregation_mode = 'auto';") + tk.MustQuery("select @@global.tiflash_hashagg_preaggregation_mode;").Check(testkit.Rows("auto")) + tk.MustExec("set global tiflash_hashagg_preaggregation_mode = 'force_streaming';") + tk.MustQuery("select @@global.tiflash_hashagg_preaggregation_mode;").Check(testkit.Rows("force_streaming")) + tk.MustExec("set global tiflash_hashagg_preaggregation_mode = 'force_preagg';") + tk.MustQuery("select @@global.tiflash_hashagg_preaggregation_mode;").Check(testkit.Rows("force_preagg")) + + err := tk.ExecToErr("set @@tiflash_hashagg_preaggregation_mode = 'test';") + require.ErrorContains(t, err, "incorrect value: `test`. tiflash_hashagg_preaggregation_mode options: force_preagg, auto, force_streaming") +} diff --git a/pkg/planner/core/issuetest/BUILD.bazel b/pkg/planner/core/issuetest/BUILD.bazel index 41e03b9c6d4e3..46b2ea56a72c1 100644 --- a/pkg/planner/core/issuetest/BUILD.bazel +++ b/pkg/planner/core/issuetest/BUILD.bazel @@ -10,6 +10,7 @@ go_test( data = glob(["testdata/**"]), flaky = True, race = "on", + shard_count = 4, deps = [ "//pkg/parser", "//pkg/planner", diff --git a/pkg/planner/core/issuetest/planner_issue_test.go b/pkg/planner/core/issuetest/planner_issue_test.go index 9c1839b888792..724a00361aa29 100644 --- a/pkg/planner/core/issuetest/planner_issue_test.go +++ b/pkg/planner/core/issuetest/planner_issue_test.go @@ -86,3 +86,159 @@ func Test53726(t *testing.T) { " └─TableReader_11 2.00 root data:TableFullScan_10", " └─TableFullScan_10 2.00 cop[tikv] table:t7 keep order:false")) } + +func TestIssue54535(t *testing.T) { + // test for tidb_enable_inl_join_inner_multi_pattern system variable + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("set session tidb_enable_inl_join_inner_multi_pattern='ON'") + tk.MustExec("create table ta(a1 int, a2 int, a3 int, index idx_a(a1))") + tk.MustExec("create table tb(b1 int, b2 int, b3 int, index idx_b(b1))") + tk.MustExec("analyze table ta") + tk.MustExec("analyze table tb") + + tk.MustQuery("explain SELECT /*+ inl_join(tmp) */ * FROM ta, (SELECT b1, COUNT(b3) AS cnt FROM tb GROUP BY b1, b2) as tmp where ta.a1 = tmp.b1"). + Check(testkit.Rows( + "Projection_9 9990.00 root test.ta.a1, test.ta.a2, test.ta.a3, test.tb.b1, Column#9", + "└─IndexJoin_16 9990.00 root inner join, inner:HashAgg_14, outer key:test.ta.a1, inner key:test.tb.b1, equal cond:eq(test.ta.a1, test.tb.b1)", + " ├─TableReader_43(Build) 9990.00 root data:Selection_42", + " │ └─Selection_42 9990.00 cop[tikv] not(isnull(test.ta.a1))", + " │ └─TableFullScan_41 10000.00 cop[tikv] table:ta keep order:false, stats:pseudo", + " └─HashAgg_14(Probe) 79840080.00 root group by:test.tb.b1, test.tb.b2, funcs:count(Column#11)->Column#9, funcs:firstrow(test.tb.b1)->test.tb.b1", + " └─IndexLookUp_15 79840080.00 root ", + " ├─Selection_12(Build) 9990.00 cop[tikv] not(isnull(test.tb.b1))", + " │ └─IndexRangeScan_10 10000.00 cop[tikv] table:tb, index:idx_b(b1) range: decided by [eq(test.tb.b1, test.ta.a1)], keep order:false, stats:pseudo", + " └─HashAgg_13(Probe) 79840080.00 cop[tikv] group by:test.tb.b1, test.tb.b2, funcs:count(test.tb.b3)->Column#11", + " └─TableRowIDScan_11 9990.00 cop[tikv] table:tb keep order:false, stats:pseudo")) + // test for issues/55169 + tk.MustExec("create table t1(col_1 int, index idx_1(col_1));") + tk.MustExec("create table t2(col_1 int, col_2 int, index idx_2(col_1));") + tk.MustQuery("select /*+ inl_join(tmp) */ * from t1 inner join (select col_1, group_concat(col_2) from t2 group by col_1) tmp on t1.col_1 = tmp.col_1;").Check(testkit.Rows()) + tk.MustQuery("select /*+ inl_join(tmp) */ * from t1 inner join (select col_1, group_concat(distinct col_2 order by col_2) from t2 group by col_1) tmp on t1.col_1 = tmp.col_1;").Check(testkit.Rows()) +} + +func TestIssue54803(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec(` + CREATE TABLE t1db47fc1 ( + col_67 time NOT NULL DEFAULT '16:58:45', + col_68 tinyint(3) unsigned DEFAULT NULL, + col_69 bit(6) NOT NULL DEFAULT b'11110', + col_72 double NOT NULL + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci + PARTITION BY HASH (col_68) PARTITIONS 5; + `) + tk.MustQuery(`EXPLAIN SELECT TRIM(t1db47fc1.col_68) AS r0 + FROM t1db47fc1 + WHERE ISNULL(t1db47fc1.col_68) + GROUP BY t1db47fc1.col_68 + HAVING ISNULL(t1db47fc1.col_68) OR t1db47fc1.col_68 IN (62, 200, 196, 99) + LIMIT 106149535; + `).Check(testkit.Rows("Projection_11 8.00 root trim(cast(test.t1db47fc1.col_68, var_string(20)))->Column#7", + "└─Limit_14 8.00 root offset:0, count:106149535", + " └─HashAgg_17 8.00 root group by:test.t1db47fc1.col_68, funcs:firstrow(test.t1db47fc1.col_68)->test.t1db47fc1.col_68", + " └─TableReader_24 10.00 root partition:p0 data:Selection_23", + " └─Selection_23 10.00 cop[tikv] isnull(test.t1db47fc1.col_68), or(isnull(test.t1db47fc1.col_68), in(test.t1db47fc1.col_68, 62, 200, 196, 99))", + " └─TableFullScan_22 10000.00 cop[tikv] table:t1db47fc1 keep order:false, stats:pseudo")) + // Issue55299 + tk.MustExec(` +CREATE TABLE tcd8c2aac ( + col_21 char(87) COLLATE utf8mb4_general_ci DEFAULT NULL, + KEY idx_12 (col_21(1)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + `) + tk.MustExec(` +CREATE TABLE tle50fd846 ( + col_42 date DEFAULT '1989-10-30', + col_43 varbinary(122) NOT NULL DEFAULT 'Vz!3_P0LOdG', + col_44 json DEFAULT NULL, + col_45 binary(129) DEFAULT NULL, + col_46 double NOT NULL DEFAULT '4264.32300782421', + col_47 char(251) NOT NULL DEFAULT 'g7uo-dlBEY22!fx3@&', + col_48 char(229) NOT NULL, + col_49 blob NOT NULL, + col_50 blob DEFAULT NULL, + col_51 json DEFAULT NULL, + PRIMARY KEY (col_48) /*T![clustered_index] NONCLUSTERED */ +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + `) + tk.MustExec("INSERT INTO `tcd8c2aac` VALUES(NULL),(NULL),('u!Vk+9B-3bn@'),('&PpQ*z!kQwj4g*ag#');") + tk.MustExec(`INSERT INTO tle50fd846 +VALUES +('2029-05-09', x'757640736a42316c384162793124246b', '["YXt8UJAnVMWeMEZj1CzhNUzTMDJfzsmTWQkyOvVCsciA3eobvH8heH8gtr6ogxXa"]', x'577340000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', 526.0218366710487, '%gMk', '58reJ%D&54', x'39254c48242556737474', x'6c66762b303567236f4068', '[2984188985038968170, 2580328438245089106, 4624130652422829118]');`) + tk.MustQuery(` +EXPLAIN SELECT GROUP_CONCAT(tcd8c2aac.col_21 ORDER BY tcd8c2aac.col_21 SEPARATOR ',') AS r0 +FROM tcd8c2aac +JOIN tle50fd846 +WHERE ISNULL(tcd8c2aac.col_21) OR tcd8c2aac.col_21='yJTkLeL5^yJ' +GROUP BY tcd8c2aac.col_21 +HAVING ISNULL(tcd8c2aac.col_21) +LIMIT 48579914;`).Check(testkit.Rows( + "Limit_16 6.40 root offset:0, count:48579914", + "└─HashAgg_17 6.40 root group by:test.tcd8c2aac.col_21, funcs:group_concat(test.tcd8c2aac.col_21 order by test.tcd8c2aac.col_21 separator \",\")->Column#14", + " └─HashJoin_20 80000.00 root CARTESIAN inner join", + " ├─IndexLookUp_27(Build) 8.00 root ", + " │ ├─Selection_26(Build) 8.00 cop[tikv] isnull(test.tcd8c2aac.col_21)", + " │ │ └─IndexRangeScan_24 10.00 cop[tikv] table:tcd8c2aac, index:idx_12(col_21) range:[NULL,NULL], keep order:false, stats:pseudo", + " │ └─TableRowIDScan_25(Probe) 8.00 cop[tikv] table:tcd8c2aac keep order:false, stats:pseudo", + " └─IndexReader_31(Probe) 10000.00 root index:IndexFullScan_30", + " └─IndexFullScan_30 10000.00 cop[tikv] table:tle50fd846, index:PRIMARY(col_48) keep order:false, stats:pseudo")) + tk.MustQuery(`SELECT GROUP_CONCAT(tcd8c2aac.col_21 ORDER BY tcd8c2aac.col_21 SEPARATOR ',') AS r0 +FROM tcd8c2aac +JOIN tle50fd846 +WHERE ISNULL(tcd8c2aac.col_21) OR tcd8c2aac.col_21='yJTkLeL5^yJ' +GROUP BY tcd8c2aac.col_21 +HAVING ISNULL(tcd8c2aac.col_21) +LIMIT 48579914;`).Check(testkit.Rows("")) + + tk.MustExec(`CREATE TABLE ta31c32a7 ( + col_63 double DEFAULT '9963.92512636973', + KEY idx_24 (col_63), + KEY idx_25 (col_63), + KEY idx_26 (col_63) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`) + tk.MustExec(`INSERT INTO ta31c32a7 VALUES +(5496.073863178138), (4027.8475888445246), (2995.154396178381), (3045.228783606007), (3618.0432407275603), (1156.6077897338241), +(348.56448524702813), (2138.361831358777), (5904.959667345741), (2815.6976889801267), (6455.25717613724), +(9721.34540217101), (6793.035010125108), (6080.120357332818), (NULL), (1780.7418079754723), +(1222.1954607008702), (3576.2079432921923), (2187.4672702135276), (9129.689249510902), +(1065.3222700463314), (7509.347382423184), (7413.331945779306), (986.9882817569359), +(747.4145098692578), (4850.840161745998), (2607.5009231086797), (6499.136742855925), +(2501.691252762187), (6138.096783185339);`) + tk.MustQuery(`explain SELECT BIT_XOR(ta31c32a7.col_63) AS r0 +FROM ta31c32a7 +WHERE ISNULL(ta31c32a7.col_63) + OR ta31c32a7.col_63 IN (1780.7418079754723, 5904.959667345741, 1531.4023068774668) +GROUP BY ta31c32a7.col_63 +HAVING ISNULL(ta31c32a7.col_63) +LIMIT 65122436;`).Check(testkit.Rows( + "Limit_13 6.40 root offset:0, count:65122436", + "└─StreamAgg_37 6.40 root group by:test.ta31c32a7.col_63, funcs:bit_xor(Column#6)->Column#3", + " └─IndexReader_38 6.40 root index:StreamAgg_17", + " └─StreamAgg_17 6.40 cop[tikv] group by:test.ta31c32a7.col_63, funcs:bit_xor(cast(test.ta31c32a7.col_63, bigint(22) BINARY))->Column#6", + " └─IndexRangeScan_34 10.00 cop[tikv] table:ta31c32a7, index:idx_24(col_63) range:[NULL,NULL], keep order:true, stats:pseudo")) + tk.MustQuery(`explain SELECT BIT_XOR(ta31c32a7.col_63) AS r0 +FROM ta31c32a7 +WHERE ISNULL(ta31c32a7.col_63) + OR ta31c32a7.col_63 IN (1780.7418079754723, 5904.959667345741, 1531.4023068774668) +GROUP BY ta31c32a7.col_63 +LIMIT 65122436;`).Check(testkit.Rows( + "Limit_11 32.00 root offset:0, count:65122436", + "└─StreamAgg_35 32.00 root group by:test.ta31c32a7.col_63, funcs:bit_xor(Column#5)->Column#3", + " └─IndexReader_36 32.00 root index:StreamAgg_15", + " └─StreamAgg_15 32.00 cop[tikv] group by:test.ta31c32a7.col_63, funcs:bit_xor(cast(test.ta31c32a7.col_63, bigint(22) BINARY))->Column#5", + " └─IndexRangeScan_32 40.00 cop[tikv] table:ta31c32a7, index:idx_24(col_63) range:[NULL,NULL], [1531.4023068774668,1531.4023068774668], [1780.7418079754723,1780.7418079754723], [5904.959667345741,5904.959667345741], keep order:true, stats:pseudo")) + tk.MustExec(`CREATE TABLE tl75eff7ba ( +col_1 tinyint(1) DEFAULT '0', +KEY idx_1 (col_1), +UNIQUE KEY idx_2 (col_1), +UNIQUE KEY idx_3 (col_1), +KEY idx_4 (col_1) /*!80000 INVISIBLE */, +UNIQUE KEY idx_5 (col_1) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;`) + tk.MustExec(`INSERT INTO tl75eff7ba VALUES(1),(0);`) + tk.MustQuery(`SELECT tl75eff7ba.col_1 AS r0 FROM tl75eff7ba WHERE ISNULL(tl75eff7ba.col_1) OR tl75eff7ba.col_1 IN (0, 0, 1, 1) GROUP BY tl75eff7ba.col_1 HAVING ISNULL(tl75eff7ba.col_1) OR tl75eff7ba.col_1 IN (0, 1, 1, 0) LIMIT 58651509;`).Check(testkit.Rows("0", "1")) +} diff --git a/pkg/planner/core/logical_cte.go b/pkg/planner/core/logical_cte.go index ad964a4988273..8bb9aceaa54d6 100644 --- a/pkg/planner/core/logical_cte.go +++ b/pkg/planner/core/logical_cte.go @@ -23,6 +23,7 @@ import ( "github.com/pingcap/tidb/pkg/planner/cardinality" "github.com/pingcap/tidb/pkg/planner/core/base" "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" + ruleutil "github.com/pingcap/tidb/pkg/planner/core/rule/util" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util/coreusage" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" @@ -53,24 +54,25 @@ func (p LogicalCTE) Init(ctx base.PlanContext, offset int) *LogicalCTE { type CTEClass struct { // The union between seed part and recursive part is DISTINCT or DISTINCT ALL. IsDistinct bool - // seedPartLogicalPlan and recursivePartLogicalPlan are the logical plans for the seed part and recursive part of this CTE. - seedPartLogicalPlan base.LogicalPlan - recursivePartLogicalPlan base.LogicalPlan - // seedPartPhysicalPlan and recursivePartPhysicalPlan are the physical plans for the seed part and recursive part of this CTE. - seedPartPhysicalPlan base.PhysicalPlan - recursivePartPhysicalPlan base.PhysicalPlan + // SeedPartLogicalPlan and RecursivePartLogicalPlan are the logical plans for the seed part and recursive part of this CTE. + SeedPartLogicalPlan base.LogicalPlan + // RecursivePartLogicalPlan is nil if this CTE is not a recursive CTE. + RecursivePartLogicalPlan base.LogicalPlan + // SeedPartPhysicalPlan and RecursivePartPhysicalPlan are the physical plans for the seed part and recursive part of this CTE. + SeedPartPhysicalPlan base.PhysicalPlan + RecursivePartPhysicalPlan base.PhysicalPlan // storageID for this CTE. IDForStorage int - // optFlag is the optFlag for the whole CTE. - optFlag uint64 + // OptFlag is the OptFlag for the whole CTE. + OptFlag uint64 HasLimit bool LimitBeg uint64 LimitEnd uint64 IsInApply bool - // pushDownPredicates may be push-downed by different references. - pushDownPredicates []expression.Expression + // PushDownPredicates may be push-downed by different references. + PushDownPredicates []expression.Expression ColumnMap map[string]*expression.Column - isOuterMostCTE bool + IsOuterMostCTE bool } const emptyCTEClassSize = int64(unsafe.Sizeof(CTEClass{})) @@ -82,14 +84,14 @@ func (cc *CTEClass) MemoryUsage() (sum int64) { } sum = emptyCTEClassSize - if cc.seedPartPhysicalPlan != nil { - sum += cc.seedPartPhysicalPlan.MemoryUsage() + if cc.SeedPartPhysicalPlan != nil { + sum += cc.SeedPartPhysicalPlan.MemoryUsage() } - if cc.recursivePartPhysicalPlan != nil { - sum += cc.recursivePartPhysicalPlan.MemoryUsage() + if cc.RecursivePartPhysicalPlan != nil { + sum += cc.RecursivePartPhysicalPlan.MemoryUsage() } - for _, expr := range cc.pushDownPredicates { + for _, expr := range cc.PushDownPredicates { sum += expr.MemoryUsage() } for key, val := range cc.ColumnMap { @@ -104,11 +106,11 @@ func (cc *CTEClass) MemoryUsage() (sum int64) { // PredicatePushDown implements base.LogicalPlan.<1st> interface. func (p *LogicalCTE) PredicatePushDown(predicates []expression.Expression, _ *optimizetrace.LogicalOptimizeOp) ([]expression.Expression, base.LogicalPlan) { - if p.Cte.recursivePartLogicalPlan != nil { + if p.Cte.RecursivePartLogicalPlan != nil { // Doesn't support recursive CTE yet. return predicates, p.Self() } - if !p.Cte.isOuterMostCTE { + if !p.Cte.IsOuterMostCTE { return predicates, p.Self() } pushedPredicates := make([]expression.Expression, len(predicates)) @@ -125,15 +127,15 @@ func (p *LogicalCTE) PredicatePushDown(predicates []expression.Expression, _ *op } } if len(pushedPredicates) == 0 { - p.Cte.pushDownPredicates = append(p.Cte.pushDownPredicates, expression.NewOne()) + p.Cte.PushDownPredicates = append(p.Cte.PushDownPredicates, expression.NewOne()) return predicates, p.Self() } newPred := make([]expression.Expression, 0, len(predicates)) for i := range pushedPredicates { newPred = append(newPred, pushedPredicates[i].Clone()) - ResolveExprAndReplace(newPred[i], p.Cte.ColumnMap) + ruleutil.ResolveExprAndReplace(newPred[i], p.Cte.ColumnMap) } - p.Cte.pushDownPredicates = append(p.Cte.pushDownPredicates, expression.ComposeCNFCondition(p.SCtx().GetExprCtx(), newPred...)) + p.Cte.PushDownPredicates = append(p.Cte.PushDownPredicates, expression.ComposeCNFCondition(p.SCtx().GetExprCtx(), newPred...)) return predicates, p.Self() } @@ -152,9 +154,9 @@ func (p *LogicalCTE) FindBestTask(prop *property.PhysicalProperty, counter *base // PushDownTopN implements the base.LogicalPlan.<5th> interface. func (p *LogicalCTE) PushDownTopN(topNLogicalPlan base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) base.LogicalPlan { - var topN *LogicalTopN + var topN *logicalop.LogicalTopN if topNLogicalPlan != nil { - topN = topNLogicalPlan.(*LogicalTopN) + topN = topNLogicalPlan.(*logicalop.LogicalTopN) } if topN != nil { return topN.AttachChild(p, opt) @@ -179,24 +181,24 @@ func (p *LogicalCTE) DeriveStats(_ []*property.StatsInfo, selfSchema *expression } var err error - if p.Cte.seedPartPhysicalPlan == nil { + if p.Cte.SeedPartPhysicalPlan == nil { // Build push-downed predicates. - if len(p.Cte.pushDownPredicates) > 0 { - newCond := expression.ComposeDNFCondition(p.SCtx().GetExprCtx(), p.Cte.pushDownPredicates...) - newSel := LogicalSelection{Conditions: []expression.Expression{newCond}}.Init(p.SCtx(), p.Cte.seedPartLogicalPlan.QueryBlockOffset()) - newSel.SetChildren(p.Cte.seedPartLogicalPlan) - p.Cte.seedPartLogicalPlan = newSel - p.Cte.optFlag |= flagPredicatePushDown + if len(p.Cte.PushDownPredicates) > 0 { + newCond := expression.ComposeDNFCondition(p.SCtx().GetExprCtx(), p.Cte.PushDownPredicates...) + newSel := logicalop.LogicalSelection{Conditions: []expression.Expression{newCond}}.Init(p.SCtx(), p.Cte.SeedPartLogicalPlan.QueryBlockOffset()) + newSel.SetChildren(p.Cte.SeedPartLogicalPlan) + p.Cte.SeedPartLogicalPlan = newSel + p.Cte.OptFlag |= flagPredicatePushDown } - p.Cte.seedPartLogicalPlan, p.Cte.seedPartPhysicalPlan, _, err = doOptimize(context.TODO(), p.SCtx(), p.Cte.optFlag, p.Cte.seedPartLogicalPlan) + p.Cte.SeedPartLogicalPlan, p.Cte.SeedPartPhysicalPlan, _, err = doOptimize(context.TODO(), p.SCtx(), p.Cte.OptFlag, p.Cte.SeedPartLogicalPlan) if err != nil { return nil, err } } if p.OnlyUsedAsStorage { - p.SetChildren(p.Cte.seedPartLogicalPlan) + p.SetChildren(p.Cte.SeedPartLogicalPlan) } - resStat := p.Cte.seedPartPhysicalPlan.StatsInfo() + resStat := p.Cte.SeedPartPhysicalPlan.StatsInfo() // Changing the pointer so that SeedStat in LogicalCTETable can get the new stat. *p.SeedStat = *resStat p.SetStats(&property.StatsInfo{ @@ -204,18 +206,18 @@ func (p *LogicalCTE) DeriveStats(_ []*property.StatsInfo, selfSchema *expression ColNDVs: make(map[int64]float64, selfSchema.Len()), }) for i, col := range selfSchema.Columns { - p.StatsInfo().ColNDVs[col.UniqueID] += resStat.ColNDVs[p.Cte.seedPartLogicalPlan.Schema().Columns[i].UniqueID] + p.StatsInfo().ColNDVs[col.UniqueID] += resStat.ColNDVs[p.Cte.SeedPartLogicalPlan.Schema().Columns[i].UniqueID] } - if p.Cte.recursivePartLogicalPlan != nil { - if p.Cte.recursivePartPhysicalPlan == nil { - p.Cte.recursivePartPhysicalPlan, _, err = DoOptimize(context.TODO(), p.SCtx(), p.Cte.optFlag, p.Cte.recursivePartLogicalPlan) + if p.Cte.RecursivePartLogicalPlan != nil { + if p.Cte.RecursivePartPhysicalPlan == nil { + p.Cte.RecursivePartPhysicalPlan, _, err = DoOptimize(context.TODO(), p.SCtx(), p.Cte.OptFlag, p.Cte.RecursivePartLogicalPlan) if err != nil { return nil, err } } - recurStat := p.Cte.recursivePartLogicalPlan.StatsInfo() + recurStat := p.Cte.RecursivePartLogicalPlan.StatsInfo() for i, col := range selfSchema.Columns { - p.StatsInfo().ColNDVs[col.UniqueID] += recurStat.ColNDVs[p.Cte.recursivePartLogicalPlan.Schema().Columns[i].UniqueID] + p.StatsInfo().ColNDVs[col.UniqueID] += recurStat.ColNDVs[p.Cte.RecursivePartLogicalPlan.Schema().Columns[i].UniqueID] } if p.Cte.IsDistinct { p.StatsInfo().RowCount, _ = cardinality.EstimateColsNDVWithMatchedLen(p.Schema().Columns, p.Schema(), p.StatsInfo()) @@ -237,9 +239,9 @@ func (p *LogicalCTE) ExhaustPhysicalPlans(prop *property.PhysicalProperty) ([]ba // ExtractCorrelatedCols implements the base.LogicalPlan.<15th> interface. func (p *LogicalCTE) ExtractCorrelatedCols() []*expression.CorrelatedColumn { - corCols := coreusage.ExtractCorrelatedCols4LogicalPlan(p.Cte.seedPartLogicalPlan) - if p.Cte.recursivePartLogicalPlan != nil { - corCols = append(corCols, coreusage.ExtractCorrelatedCols4LogicalPlan(p.Cte.recursivePartLogicalPlan)...) + corCols := coreusage.ExtractCorrelatedCols4LogicalPlan(p.Cte.SeedPartLogicalPlan) + if p.Cte.RecursivePartLogicalPlan != nil { + corCols = append(corCols, coreusage.ExtractCorrelatedCols4LogicalPlan(p.Cte.RecursivePartLogicalPlan)...) } return corCols } diff --git a/pkg/planner/core/logical_datasource.go b/pkg/planner/core/logical_datasource.go index cd428a4e81e4f..e831210d5a2f2 100644 --- a/pkg/planner/core/logical_datasource.go +++ b/pkg/planner/core/logical_datasource.go @@ -27,8 +27,10 @@ import ( "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/planner/cardinality" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/constraint" "github.com/pingcap/tidb/pkg/planner/core/cost" "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" + ruleutil "github.com/pingcap/tidb/pkg/planner/core/rule/util" fd "github.com/pingcap/tidb/pkg/planner/funcdep" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util" @@ -150,12 +152,12 @@ func (ds *DataSource) ExplainInfo() string { // PredicatePushDown implements base.LogicalPlan.<1st> interface. func (ds *DataSource) PredicatePushDown(predicates []expression.Expression, opt *optimizetrace.LogicalOptimizeOp) ([]expression.Expression, base.LogicalPlan) { predicates = expression.PropagateConstant(ds.SCtx().GetExprCtx(), predicates) - predicates = DeleteTrueExprs(ds, predicates) + predicates = constraint.DeleteTrueExprs(ds, predicates) // Add tidb_shard() prefix to the condtion for shard index in some scenarios // TODO: remove it to the place building logical plan predicates = ds.AddPrefix4ShardIndexes(ds.SCtx(), predicates) ds.AllConds = predicates - ds.PushedDownConds, predicates = expression.PushDownExprs(GetPushDownCtx(ds.SCtx()), predicates, kv.UnSpecified) + ds.PushedDownConds, predicates = expression.PushDownExprs(util.GetPushDownCtx(ds.SCtx()), predicates, kv.UnSpecified) appendDataSourcePredicatePushDownTraceStep(ds, opt) return predicates, ds } @@ -214,8 +216,9 @@ func (ds *DataSource) PruneColumns(parentUsedCols []*expression.Column, opt *opt // Current DataSource operator contains all the filters on this table, and the columns used by these filters are always included // in the output schema. Even if they are not needed by DataSource's parent operator. Thus add a projection here to prune useless columns // Limit to MPP tasks, because TiKV can't benefit from this now(projection can't be pushed down to TiKV now). - if !addOneHandle && ds.Schema().Len() > len(parentUsedCols) && ds.SCtx().GetSessionVars().IsMPPEnforced() && ds.TableInfo.TiFlashReplica != nil { - proj := LogicalProjection{ + // If the parent operator need no columns from the DataSource, we return the smallest column. Don't add the empty proj. + if !addOneHandle && ds.Schema().Len() > len(parentUsedCols) && len(parentUsedCols) > 0 && ds.SCtx().GetSessionVars().IsMPPEnforced() && ds.TableInfo.TiFlashReplica != nil { + proj := logicalop.LogicalProjection{ Exprs: expression.Column2Exprs(parentUsedCols), }.Init(ds.SCtx(), ds.QueryBlockOffset()) proj.SetStats(ds.StatsInfo()) @@ -256,7 +259,7 @@ func (ds *DataSource) BuildKeyInfo(selfSchema *expression.Schema, _ []*expressio } else if index.State != model.StatePublic { continue } - if uniqueKey, newKey := checkIndexCanBeKey(index, ds.Columns, selfSchema); newKey != nil { + if uniqueKey, newKey := ruleutil.CheckIndexCanBeKey(index, ds.Columns, selfSchema); newKey != nil { selfSchema.Keys = append(selfSchema.Keys, newKey) } else if uniqueKey != nil { selfSchema.UniqueKeys = append(selfSchema.UniqueKeys, uniqueKey) @@ -474,13 +477,13 @@ func (ds *DataSource) ExtractFD() *fd.FDSet { // handle the datasource conditions (maybe pushed down from upper layer OP) if len(ds.AllConds) != 0 { // extract the not null attributes from selection conditions. - notnullColsUniqueIDs := ExtractNotNullFromConds(ds.AllConds, ds) + notnullColsUniqueIDs := util.ExtractNotNullFromConds(ds.AllConds, ds) // extract the constant cols from selection conditions. - constUniqueIDs := ExtractConstantCols(ds.AllConds, ds.SCtx(), fds) + constUniqueIDs := util.ExtractConstantCols(ds.AllConds, ds.SCtx(), fds) // extract equivalence cols. - equivUniqueIDs := ExtractEquivalenceCols(ds.AllConds, ds.SCtx(), fds) + equivUniqueIDs := util.ExtractEquivalenceCols(ds.AllConds, ds.SCtx(), fds) // apply conditions to FD. fds.MakeNotNull(notnullColsUniqueIDs) @@ -575,8 +578,8 @@ func (ds *DataSource) Convert2Gathers() (gathers []base.LogicalPlan) { if !path.IsIntHandlePath { path.FullIdxCols, path.FullIdxColLens = expression.IndexInfo2Cols(ds.Columns, ds.Schema().Columns, path.Index) path.IdxCols, path.IdxColLens = expression.IndexInfo2PrefixCols(ds.Columns, ds.Schema().Columns, path.Index) - // If index columns can cover all of the needed columns, we can use a IndexGather + IndexScan. - if ds.isSingleScan(path.FullIdxCols, path.FullIdxColLens) { + // If index columns can cover all the needed columns, we can use a IndexGather + IndexScan. + if isSingleScan(ds, path.FullIdxCols, path.FullIdxColLens) { gathers = append(gathers, ds.buildIndexGather(path)) } // TODO: If index columns can not cover the schema, use IndexLookUpGather. @@ -800,7 +803,7 @@ func (ds *DataSource) deriveIndexPathStats(path *util.AccessPath, _ []expression } } var indexFilters []expression.Expression - indexFilters, path.TableFilters = ds.splitIndexFilterConditions(path.TableFilters, path.FullIdxCols, path.FullIdxColLens) + indexFilters, path.TableFilters = splitIndexFilterConditions(ds, path.TableFilters, path.FullIdxCols, path.FullIdxColLens) path.IndexFilters = append(path.IndexFilters, indexFilters...) // If the `CountAfterAccess` is less than `stats.RowCount`, there must be some inconsistent stats info. // We prefer the `stats.RowCount` because it could use more stats info to calculate the selectivity. diff --git a/pkg/planner/core/logical_index_scan.go b/pkg/planner/core/logical_index_scan.go index 508c2d1c905eb..e400c6733221b 100644 --- a/pkg/planner/core/logical_index_scan.go +++ b/pkg/planner/core/logical_index_scan.go @@ -23,6 +23,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/planner/core/base" "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" + ruleutil "github.com/pingcap/tidb/pkg/planner/core/rule/util" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/plancodec" @@ -98,7 +99,7 @@ func (is *LogicalIndexScan) BuildKeyInfo(selfSchema *expression.Schema, _ []*exp if path.IsTablePath() { continue } - if uniqueKey, newKey := checkIndexCanBeKey(path.Index, is.Columns, selfSchema); newKey != nil { + if uniqueKey, newKey := ruleutil.CheckIndexCanBeKey(path.Index, is.Columns, selfSchema); newKey != nil { selfSchema.Keys = append(selfSchema.Keys, newKey) } else if uniqueKey != nil { selfSchema.UniqueKeys = append(selfSchema.UniqueKeys, uniqueKey) diff --git a/pkg/planner/core/logical_initialize.go b/pkg/planner/core/logical_initialize.go index 0b8f710236bac..9fcd414757582 100644 --- a/pkg/planner/core/logical_initialize.go +++ b/pkg/planner/core/logical_initialize.go @@ -13,15 +13,3 @@ // limitations under the License. package core - -import ( - "github.com/pingcap/tidb/pkg/planner/core/base" - "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" - "github.com/pingcap/tidb/pkg/util/plancodec" -) - -// Init initializes LogicalProjection. -func (p LogicalExpand) Init(ctx base.PlanContext, offset int) *LogicalExpand { - p.BaseLogicalPlan = logicalop.NewBaseLogicalPlan(ctx, plancodec.TypeExpand, &p, offset) - return &p -} diff --git a/pkg/planner/core/logical_plan_builder.go b/pkg/planner/core/logical_plan_builder.go index 0b528a82acce9..7304c3c1a0006 100644 --- a/pkg/planner/core/logical_plan_builder.go +++ b/pkg/planner/core/logical_plan_builder.go @@ -97,7 +97,7 @@ func (a *aggOrderByResolver) Enter(inNode ast.Node) (ast.Node, bool) { a.exprDepth++ if n, ok := inNode.(*driver.ParamMarkerExpr); ok { if a.exprDepth == 1 { - _, isNull, isExpectedType := getUintFromNode(a.ctx, n, false) + _, isNull, isExpectedType := getUintFromNode(a.ctx.GetExprCtx(), n, false) // For constant uint expression in top level, it should be treated as position expression. if !isNull && isExpectedType { return expression.ConstructPositionExpr(n), true @@ -109,7 +109,7 @@ func (a *aggOrderByResolver) Enter(inNode ast.Node) (ast.Node, bool) { func (a *aggOrderByResolver) Leave(inNode ast.Node) (ast.Node, bool) { if v, ok := inNode.(*ast.PositionExpr); ok { - pos, isNull, err := expression.PosFromPositionExpr(a.ctx.GetExprCtx(), a.ctx, v) + pos, isNull, err := expression.PosFromPositionExpr(a.ctx.GetExprCtx(), v) if err != nil { a.err = err } @@ -137,7 +137,7 @@ func (b *PlanBuilder) buildExpand(p base.LogicalPlan, gbyItems []expression.Expr // Rollup syntax require expand OP to do the data expansion, different data replica supply the different grouping layout. distinctGbyExprs, gbyExprsRefPos := expression.DeduplicateGbyExpression(gbyItems) // build another projection below. - proj := LogicalProjection{Exprs: make([]expression.Expression, 0, p.Schema().Len()+len(distinctGbyExprs))}.Init(b.ctx, b.getSelectOffset()) + proj := logicalop.LogicalProjection{Exprs: make([]expression.Expression, 0, p.Schema().Len()+len(distinctGbyExprs))}.Init(b.ctx, b.getSelectOffset()) // project: child's output and distinct GbyExprs in advance. (make every group-by item to be a column) projSchema := p.Schema().Clone() names := p.OutputNames() @@ -172,8 +172,6 @@ func (b *PlanBuilder) buildExpand(p base.LogicalPlan, gbyItems []expression.Expr } proj.SetSchema(projSchema) proj.SetChildren(p) - // since expand will ref original col and make some change, do the copy in executor rather than ref the same chunk.column. - proj.AvoidColumnEvaluator = true proj.Proj4Expand = true newGbyItems := expression.RestoreGbyExpression(distinctGbyCols, gbyExprsRefPos) @@ -188,7 +186,7 @@ func (b *PlanBuilder) buildExpand(p base.LogicalPlan, gbyItems []expression.Expr // for grouping set {}, project it as: [null, null, null, d, gid] expandSchema := proj.Schema().Clone() expression.AdjustNullabilityFromGroupingSets(rollupGroupingSets, expandSchema) - expand := LogicalExpand{ + expand := logicalop.LogicalExpand{ RollupGroupingSets: rollupGroupingSets, DistinctGroupByCol: distinctGbyCols, DistinctGbyColNames: distinctGbyColNames, @@ -263,12 +261,12 @@ func (b *PlanBuilder) buildAggregation(ctx context.Context, p base.LogicalPlan, if b.buildingCTE { b.outerCTEs[len(b.outerCTEs)-1].containAggOrWindow = true } - var rollupExpand *LogicalExpand - if expand, ok := p.(*LogicalExpand); ok { + var rollupExpand *logicalop.LogicalExpand + if expand, ok := p.(*logicalop.LogicalExpand); ok { rollupExpand = expand } - plan4Agg := LogicalAggregation{AggFuncs: make([]*aggregation.AggFuncDesc, 0, len(aggFuncList))}.Init(b.ctx, b.getSelectOffset()) + plan4Agg := logicalop.LogicalAggregation{AggFuncs: make([]*aggregation.AggFuncDesc, 0, len(aggFuncList))}.Init(b.ctx, b.getSelectOffset()) if hintinfo := b.TableHints(); hintinfo != nil { plan4Agg.PreferAggType = hintinfo.PreferAggType plan4Agg.PreferAggToCop = hintinfo.PreferAggToCop @@ -367,14 +365,14 @@ func (b *PlanBuilder) buildAggregation(ctx context.Context, p base.LogicalPlan, names = append(names, p.OutputNames()[i]) } var ( - join *LogicalJoin + join *logicalop.LogicalJoin isJoin bool isSelectionJoin bool ) - join, isJoin = p.(*LogicalJoin) - selection, isSelection := p.(*LogicalSelection) + join, isJoin = p.(*logicalop.LogicalJoin) + selection, isSelection := p.(*logicalop.LogicalSelection) if isSelection { - join, isSelectionJoin = selection.Children()[0].(*LogicalJoin) + join, isSelectionJoin = selection.Children()[0].(*logicalop.LogicalJoin) } if (isJoin && join.FullSchema != nil) || (isSelectionJoin && join.FullSchema != nil) { for i, col := range join.FullSchema.Columns { @@ -493,84 +491,6 @@ func (b *PlanBuilder) buildResultSetNode(ctx context.Context, node ast.ResultSet } } -// extractTableAlias returns table alias of the base.LogicalPlan's columns. -// It will return nil when there are multiple table alias, because the alias is only used to check if -// the base.LogicalPlan Match some optimizer hints, and hints are not expected to take effect in this case. -func extractTableAlias(p base.Plan, parentOffset int) *h.HintedTable { - if len(p.OutputNames()) > 0 && p.OutputNames()[0].TblName.L != "" { - firstName := p.OutputNames()[0] - for _, name := range p.OutputNames() { - if name.TblName.L != firstName.TblName.L || - (name.DBName.L != "" && firstName.DBName.L != "" && name.DBName.L != firstName.DBName.L) { // DBName can be nil, see #46160 - return nil - } - } - qbOffset := p.QueryBlockOffset() - var blockAsNames []ast.HintTable - if p := p.SCtx().GetSessionVars().PlannerSelectBlockAsName.Load(); p != nil { - blockAsNames = *p - } - // For sub-queries like `(select * from t) t1`, t1 should belong to its surrounding select block. - if qbOffset != parentOffset && blockAsNames != nil && blockAsNames[qbOffset].TableName.L != "" { - qbOffset = parentOffset - } - dbName := firstName.DBName - if dbName.L == "" { - dbName = model.NewCIStr(p.SCtx().GetSessionVars().CurrentDB) - } - return &h.HintedTable{DBName: dbName, TblName: firstName.TblName, SelectOffset: qbOffset} - } - return nil -} - -func setPreferredJoinTypeFromOneSide(preferJoinType uint, isLeft bool) (resJoinType uint) { - if preferJoinType == 0 { - return - } - if preferJoinType&h.PreferINLJ > 0 { - preferJoinType &= ^h.PreferINLJ - if isLeft { - resJoinType |= h.PreferLeftAsINLJInner - } else { - resJoinType |= h.PreferRightAsINLJInner - } - } - if preferJoinType&h.PreferINLHJ > 0 { - preferJoinType &= ^h.PreferINLHJ - if isLeft { - resJoinType |= h.PreferLeftAsINLHJInner - } else { - resJoinType |= h.PreferRightAsINLHJInner - } - } - if preferJoinType&h.PreferINLMJ > 0 { - preferJoinType &= ^h.PreferINLMJ - if isLeft { - resJoinType |= h.PreferLeftAsINLMJInner - } else { - resJoinType |= h.PreferRightAsINLMJInner - } - } - if preferJoinType&h.PreferHJBuild > 0 { - preferJoinType &= ^h.PreferHJBuild - if isLeft { - resJoinType |= h.PreferLeftAsHJBuild - } else { - resJoinType |= h.PreferRightAsHJBuild - } - } - if preferJoinType&h.PreferHJProbe > 0 { - preferJoinType &= ^h.PreferHJProbe - if isLeft { - resJoinType |= h.PreferLeftAsHJProbe - } else { - resJoinType |= h.PreferRightAsHJProbe - } - } - resJoinType |= preferJoinType - return -} - func (ds *DataSource) setPreferredStoreType(hintInfo *h.PlanHints) { if hintInfo == nil { return @@ -650,7 +570,7 @@ func (b *PlanBuilder) buildJoin(ctx context.Context, joinNode *ast.Join) (base.L } // The recursive part in CTE must not be on the right side of a LEFT JOIN. - if lc, ok := rightPlan.(*LogicalCTETable); ok && joinNode.Tp == ast.LeftJoin { + if lc, ok := rightPlan.(*logicalop.LogicalCTETable); ok && joinNode.Tp == ast.LeftJoin { return nil, plannererrors.ErrCTERecursiveForbiddenJoinOrder.GenWithStackByArgs(lc.Name) } @@ -658,7 +578,7 @@ func (b *PlanBuilder) buildJoin(ctx context.Context, joinNode *ast.Join) (base.L handleMap2 := b.handleHelper.popMap() b.handleHelper.mergeAndPush(handleMap1, handleMap2) - joinPlan := LogicalJoin{StraightJoin: joinNode.StraightJoin || b.inStraightJoin}.Init(b.ctx, b.getSelectOffset()) + joinPlan := logicalop.LogicalJoin{StraightJoin: joinNode.StraightJoin || b.inStraightJoin}.Init(b.ctx, b.getSelectOffset()) joinPlan.SetChildren(leftPlan, rightPlan) joinPlan.SetSchema(expression.MergeSchema(leftPlan.Schema(), rightPlan.Schema())) joinPlan.SetOutputNames(make([]*types.FieldName, leftPlan.Schema().Len()+rightPlan.Schema().Len())) @@ -670,15 +590,15 @@ func (b *PlanBuilder) buildJoin(ctx context.Context, joinNode *ast.Join) (base.L case ast.LeftJoin: // left outer join need to be checked elimination b.optFlag = b.optFlag | flagEliminateOuterJoin - joinPlan.JoinType = LeftOuterJoin + joinPlan.JoinType = logicalop.LeftOuterJoin util.ResetNotNullFlag(joinPlan.Schema(), leftPlan.Schema().Len(), joinPlan.Schema().Len()) case ast.RightJoin: // right outer join need to be checked elimination b.optFlag = b.optFlag | flagEliminateOuterJoin - joinPlan.JoinType = RightOuterJoin + joinPlan.JoinType = logicalop.RightOuterJoin util.ResetNotNullFlag(joinPlan.Schema(), 0, leftPlan.Schema().Len()) default: - joinPlan.JoinType = InnerJoin + joinPlan.JoinType = logicalop.InnerJoin } // Merge sub-plan's FullSchema into this join plan. @@ -687,14 +607,14 @@ func (b *PlanBuilder) buildJoin(ctx context.Context, joinNode *ast.Join) (base.L lFullSchema, rFullSchema *expression.Schema lFullNames, rFullNames types.NameSlice ) - if left, ok := leftPlan.(*LogicalJoin); ok && left.FullSchema != nil { + if left, ok := leftPlan.(*logicalop.LogicalJoin); ok && left.FullSchema != nil { lFullSchema = left.FullSchema lFullNames = left.FullNames } else { lFullSchema = leftPlan.Schema() lFullNames = leftPlan.OutputNames() } - if right, ok := rightPlan.(*LogicalJoin); ok && right.FullSchema != nil { + if right, ok := rightPlan.(*logicalop.LogicalJoin); ok && right.FullSchema != nil { rFullSchema = right.FullSchema rFullNames = right.FullNames } else { @@ -756,13 +676,13 @@ func (b *PlanBuilder) buildJoin(ctx context.Context, joinNode *ast.Join) (base.L onCondition := expression.SplitCNFItems(onExpr) // Keep these expressions as a LogicalSelection upon the inner join, in order to apply // possible decorrelate optimizations. The ON clause is actually treated as a WHERE clause now. - if joinPlan.JoinType == InnerJoin { - sel := LogicalSelection{Conditions: onCondition}.Init(b.ctx, b.getSelectOffset()) + if joinPlan.JoinType == logicalop.InnerJoin { + sel := logicalop.LogicalSelection{Conditions: onCondition}.Init(b.ctx, b.getSelectOffset()) sel.SetChildren(joinPlan) return sel, nil } joinPlan.AttachOnConds(onCondition) - } else if joinPlan.JoinType == InnerJoin { + } else if joinPlan.JoinType == logicalop.InnerJoin { // If a inner join without "ON" or "USING" clause, it's a cartesian // product over the join tables. joinPlan.CartesianJoin = true @@ -779,7 +699,7 @@ func (b *PlanBuilder) buildJoin(ctx context.Context, joinNode *ast.Join) (base.L // appears in "leftPlan". // 2. the rest columns in "leftPlan", in the order they appears in "leftPlan". // 3. the rest columns in "rightPlan", in the order they appears in "rightPlan". -func (b *PlanBuilder) buildUsingClause(p *LogicalJoin, leftPlan, rightPlan base.LogicalPlan, join *ast.Join) error { +func (b *PlanBuilder) buildUsingClause(p *logicalop.LogicalJoin, leftPlan, rightPlan base.LogicalPlan, join *ast.Join) error { filter := make(map[string]bool, len(join.Using)) for _, col := range join.Using { filter[col.Name.L] = true @@ -803,7 +723,7 @@ func (b *PlanBuilder) buildUsingClause(p *LogicalJoin, leftPlan, rightPlan base. // All the common columns // Every column in the first (left) table that is not a common column // Every column in the second (right) table that is not a common column -func (b *PlanBuilder) buildNaturalJoin(p *LogicalJoin, leftPlan, rightPlan base.LogicalPlan, join *ast.Join) error { +func (b *PlanBuilder) buildNaturalJoin(p *logicalop.LogicalJoin, leftPlan, rightPlan base.LogicalPlan, join *ast.Join) error { err := b.coalesceCommonColumns(p, leftPlan, rightPlan, join.Tp, nil) if err != nil { return err @@ -817,7 +737,7 @@ func (b *PlanBuilder) buildNaturalJoin(p *LogicalJoin, leftPlan, rightPlan base. } // coalesceCommonColumns is used by buildUsingClause and buildNaturalJoin. The filter is used by buildUsingClause. -func (b *PlanBuilder) coalesceCommonColumns(p *LogicalJoin, leftPlan, rightPlan base.LogicalPlan, joinTp ast.JoinType, filter map[string]bool) error { +func (b *PlanBuilder) coalesceCommonColumns(p *logicalop.LogicalJoin, leftPlan, rightPlan base.LogicalPlan, joinTp ast.JoinType, filter map[string]bool) error { lsc := leftPlan.Schema().Clone() rsc := rightPlan.Schema().Clone() if joinTp == ast.LeftJoin { @@ -996,7 +916,7 @@ func (b *PlanBuilder) buildSelection(ctx context.Context, p base.LogicalPlan, wh conditions := splitWhere(where) expressions := make([]expression.Expression, 0, len(conditions)) - selection := LogicalSelection{}.Init(b.ctx, b.getSelectOffset()) + selection := logicalop.LogicalSelection{}.Init(b.ctx, b.getSelectOffset()) for _, cond := range conditions { expr, np, err := b.rewrite(ctx, cond, p, aggMapper, false) if err != nil { @@ -1029,7 +949,7 @@ func (b *PlanBuilder) buildSelection(ctx context.Context, p base.LogicalPlan, wh continue } // If there is condition which is always false, return dual plan directly. - dual := LogicalTableDual{}.Init(b.ctx, b.getSelectOffset()) + dual := logicalop.LogicalTableDual{}.Init(b.ctx, b.getSelectOffset()) dual.SetOutputNames(p.OutputNames()) dual.SetSchema(p.Schema()) return dual, nil @@ -1278,9 +1198,9 @@ func (b *PlanBuilder) preprocessUserVarTypes(ctx context.Context, p base.Logical // underlying join. func findColFromNaturalUsingJoin(p base.LogicalPlan, col *expression.Column) (name *types.FieldName) { switch x := p.(type) { - case *LogicalLimit, *LogicalSelection, *LogicalTopN, *LogicalSort, *logicalop.LogicalMaxOneRow: + case *logicalop.LogicalLimit, *logicalop.LogicalSelection, *logicalop.LogicalTopN, *logicalop.LogicalSort, *logicalop.LogicalMaxOneRow: return findColFromNaturalUsingJoin(p.Children()[0], col) - case *LogicalJoin: + case *logicalop.LogicalJoin: if x.FullSchema != nil { idx := x.FullSchema.ColumnIndex(col) return x.FullNames[idx] @@ -1290,7 +1210,7 @@ func findColFromNaturalUsingJoin(p base.LogicalPlan, col *expression.Column) (na } type resolveGroupingTraverseAction struct { - CurrentBlockExpand *LogicalExpand + CurrentBlockExpand *logicalop.LogicalExpand } func (r resolveGroupingTraverseAction) Transform(expr expression.Expression) (res expression.Expression) { @@ -1299,18 +1219,18 @@ func (r resolveGroupingTraverseAction) Transform(expr expression.Expression) (re // when meeting a column, judge whether it's a relate grouping set col. // eg: select a, b from t group by a, c with rollup, here a is, while b is not. // in underlying Expand schema (a,b,c,a',c'), a select list should be resolved to a'. - res, _ = r.CurrentBlockExpand.trySubstituteExprWithGroupingSetCol(x) + res, _ = r.CurrentBlockExpand.TrySubstituteExprWithGroupingSetCol(x) case *expression.CorrelatedColumn: // select 1 in (select t2.a from t group by t2.a, b with rollup) from t2; // in this case: group by item has correlated column t2.a, and it's select list contains t2.a as well. - res, _ = r.CurrentBlockExpand.trySubstituteExprWithGroupingSetCol(x) + res, _ = r.CurrentBlockExpand.TrySubstituteExprWithGroupingSetCol(x) case *expression.Constant: // constant just keep it real: select 1 from t group by a, b with rollup. res = x case *expression.ScalarFunction: // scalar function just try to resolve itself first, then if not changed, trying resolve its children. var substituted bool - res, substituted = r.CurrentBlockExpand.trySubstituteExprWithGroupingSetCol(x) + res, substituted = r.CurrentBlockExpand.TrySubstituteExprWithGroupingSetCol(x) if !substituted { // if not changed, try to resolve it children. // select a+1, grouping(b) from t group by a+1 (projected as c), b with rollup: in this case, a+1 is resolved as c as a whole. @@ -1378,7 +1298,7 @@ func (b *PlanBuilder) buildProjection(ctx context.Context, p base.LogicalPlan, f } b.optFlag |= flagEliminateProjection b.curClause = fieldList - proj := LogicalProjection{Exprs: make([]expression.Expression, 0, len(fields))}.Init(b.ctx, b.getSelectOffset()) + proj := logicalop.LogicalProjection{Exprs: make([]expression.Expression, 0, len(fields))}.Init(b.ctx, b.getSelectOffset()) schema := expression.NewSchema(make([]*expression.Column, 0, len(fields))...) oldLen := 0 newNames := make([]*types.FieldName, 0, len(fields)) @@ -1569,10 +1489,10 @@ func (b *PlanBuilder) buildProjection(ctx context.Context, p base.LogicalPlan, f return proj, proj.Exprs, oldLen, nil } -func (b *PlanBuilder) buildDistinct(child base.LogicalPlan, length int) (*LogicalAggregation, error) { +func (b *PlanBuilder) buildDistinct(child base.LogicalPlan, length int) (*logicalop.LogicalAggregation, error) { b.optFlag = b.optFlag | flagBuildKeyInfo b.optFlag = b.optFlag | flagPushDownAgg - plan4Agg := LogicalAggregation{ + plan4Agg := logicalop.LogicalAggregation{ AggFuncs: make([]*aggregation.AggFuncDesc, 0, child.Schema().Len()), GroupByItems: expression.Column2Exprs(child.Schema().Clone().Columns[:length]), }.Init(b.ctx, child.QueryBlockOffset()) @@ -1651,7 +1571,7 @@ func (b *PlanBuilder) setUnionFlen(resultTp *types.FieldType, cols []expression. } } -func (b *PlanBuilder) buildProjection4Union(_ context.Context, u *LogicalUnionAll) error { +func (b *PlanBuilder) buildProjection4Union(_ context.Context, u *logicalop.LogicalUnionAll) error { unionCols := make([]*expression.Column, 0, u.Children()[0].Schema().Len()) names := make([]*types.FieldName, 0, u.Children()[0].Schema().Len()) @@ -1694,7 +1614,7 @@ func (b *PlanBuilder) buildProjection4Union(_ context.Context, u *LogicalUnionAl } } b.optFlag |= flagEliminateProjection - proj := LogicalProjection{Exprs: exprs, AvoidColumnEvaluator: true}.Init(b.ctx, b.getSelectOffset()) + proj := logicalop.LogicalProjection{Exprs: exprs}.Init(b.ctx, b.getSelectOffset()) proj.SetSchema(u.Schema().Clone()) // reset the schema type to make the "not null" flag right. for i, expr := range exprs { @@ -1784,7 +1704,7 @@ func (b *PlanBuilder) buildSetOpr(ctx context.Context, setOpr *ast.SetOprStmt) ( // Fix issue #8189 (https://github.com/pingcap/tidb/issues/8189). // If there are extra expressions generated from `ORDER BY` clause, generate a `Projection` to remove them. if oldLen != setOprPlan.Schema().Len() { - proj := LogicalProjection{Exprs: expression.Column2Exprs(setOprPlan.Schema().Columns[:oldLen])}.Init(b.ctx, b.getSelectOffset()) + proj := logicalop.LogicalProjection{Exprs: expression.Column2Exprs(setOprPlan.Schema().Columns[:oldLen])}.Init(b.ctx, b.getSelectOffset()) proj.SetChildren(setOprPlan) schema := expression.NewSchema(setOprPlan.Schema().Clone().Columns[:oldLen]...) for _, col := range schema.Columns { @@ -1800,14 +1720,14 @@ func (b *PlanBuilder) buildSetOpr(ctx context.Context, setOpr *ast.SetOprStmt) ( func (b *PlanBuilder) buildSemiJoinForSetOperator( leftOriginPlan base.LogicalPlan, rightPlan base.LogicalPlan, - joinType JoinType) (leftPlan base.LogicalPlan, err error) { + joinType logicalop.JoinType) (leftPlan base.LogicalPlan, err error) { leftPlan, err = b.buildDistinct(leftOriginPlan, leftOriginPlan.Schema().Len()) if err != nil { return nil, err } b.optFlag |= flagConvertOuterToInnerJoin - joinPlan := LogicalJoin{JoinType: joinType}.Init(b.ctx, b.getSelectOffset()) + joinPlan := logicalop.LogicalJoin{JoinType: joinType}.Init(b.ctx, b.getSelectOffset()) joinPlan.SetChildren(leftPlan, rightPlan) joinPlan.SetSchema(leftPlan.Schema()) joinPlan.SetOutputNames(make([]*types.FieldName, leftPlan.Schema().Len())) @@ -1873,7 +1793,7 @@ func (b *PlanBuilder) buildIntersect(ctx context.Context, selects []ast.Node) (b if rightPlan.Schema().Len() != columnNums { return nil, nil, plannererrors.ErrWrongNumberOfColumnsInSelect.GenWithStackByArgs() } - leftPlan, err = b.buildSemiJoinForSetOperator(leftPlan, rightPlan, SemiJoin) + leftPlan, err = b.buildSemiJoinForSetOperator(leftPlan, rightPlan, logicalop.SemiJoin) if err != nil { return nil, nil, err } @@ -1897,7 +1817,7 @@ func (b *PlanBuilder) buildExcept(ctx context.Context, selects []base.LogicalPla if err != nil { return nil, err } - leftPlan, err = b.buildSemiJoinForSetOperator(leftPlan, rightPlan, AntiSemiJoin) + leftPlan, err = b.buildSemiJoinForSetOperator(leftPlan, rightPlan, logicalop.AntiSemiJoin) if err != nil { return nil, err } @@ -1974,7 +1894,7 @@ func (b *PlanBuilder) buildUnionAll(ctx context.Context, subPlan []base.LogicalP if len(subPlan) == 0 { return nil, nil } - u := LogicalUnionAll{}.Init(b.ctx, b.getSelectOffset()) + u := logicalop.LogicalUnionAll{}.Init(b.ctx, b.getSelectOffset()) u.SetChildren(subPlan...) err := b.buildProjection4Union(ctx, u) return u, err @@ -1995,18 +1915,18 @@ func (*itemTransformer) Leave(inNode ast.Node) (ast.Node, bool) { return inNode, false } -func (b *PlanBuilder) buildSort(ctx context.Context, p base.LogicalPlan, byItems []*ast.ByItem, aggMapper map[*ast.AggregateFuncExpr]int, windowMapper map[*ast.WindowFuncExpr]int) (*LogicalSort, error) { +func (b *PlanBuilder) buildSort(ctx context.Context, p base.LogicalPlan, byItems []*ast.ByItem, aggMapper map[*ast.AggregateFuncExpr]int, windowMapper map[*ast.WindowFuncExpr]int) (*logicalop.LogicalSort, error) { return b.buildSortWithCheck(ctx, p, byItems, aggMapper, windowMapper, nil, 0, false) } func (b *PlanBuilder) buildSortWithCheck(ctx context.Context, p base.LogicalPlan, byItems []*ast.ByItem, aggMapper map[*ast.AggregateFuncExpr]int, windowMapper map[*ast.WindowFuncExpr]int, - projExprs []expression.Expression, oldLen int, hasDistinct bool) (*LogicalSort, error) { - if _, isUnion := p.(*LogicalUnionAll); isUnion { + projExprs []expression.Expression, oldLen int, hasDistinct bool) (*logicalop.LogicalSort, error) { + if _, isUnion := p.(*logicalop.LogicalUnionAll); isUnion { b.curClause = globalOrderByClause } else { b.curClause = orderByClause } - sort := LogicalSort{}.Init(b.ctx, b.getSelectOffset()) + sort := logicalop.LogicalSort{}.Init(b.ctx, b.getSelectOffset()) exprs := make([]*util.ByItems, 0, len(byItems)) transformer := &itemTransformer{} for i, item := range byItems { @@ -2086,7 +2006,7 @@ CheckReferenced: // getUintFromNode gets uint64 value from ast.Node. // For ordinary statement, node should be uint64 constant value. // For prepared statement, node is string. We should convert it to uint64. -func getUintFromNode(ctx base.PlanContext, n ast.Node, mustInt64orUint64 bool) (uVal uint64, isNull bool, isExpectedType bool) { +func getUintFromNode(ctx expression.BuildContext, n ast.Node, mustInt64orUint64 bool) (uVal uint64, isNull bool, isExpectedType bool) { var val any switch v := n.(type) { case *driver.ValueExpr: @@ -2104,7 +2024,7 @@ func getUintFromNode(ctx base.PlanContext, n ast.Node, mustInt64orUint64 bool) ( if err != nil { return 0, false, false } - str, isNull, err := expression.GetStringFromConstant(ctx.GetExprCtx().GetEvalCtx(), param) + str, isNull, err := expression.GetStringFromConstant(ctx.GetEvalCtx(), param) if err != nil { return 0, false, false } @@ -2123,8 +2043,7 @@ func getUintFromNode(ctx base.PlanContext, n ast.Node, mustInt64orUint64 bool) ( return uint64(v), false, true } case string: - ctx := ctx.GetSessionVars().StmtCtx.TypeCtx() - uVal, err := types.StrToUint(ctx, v, false) + uVal, err := types.StrToUint(ctx.GetEvalCtx().TypeCtx(), v, false) if err != nil { return 0, false, false } @@ -2148,7 +2067,7 @@ func CheckParamTypeInt64orUint64(param *driver.ParamMarkerExpr) (bool, uint64) { return false, 0 } -func extractLimitCountOffset(ctx base.PlanContext, limit *ast.Limit) (count uint64, +func extractLimitCountOffset(ctx expression.BuildContext, limit *ast.Limit) (count uint64, offset uint64, err error) { var isExpectedType bool if limit.Count != nil { @@ -2172,7 +2091,7 @@ func (b *PlanBuilder) buildLimit(src base.LogicalPlan, limit *ast.Limit) (base.L offset, count uint64 err error ) - if count, offset, err = extractLimitCountOffset(b.ctx, limit); err != nil { + if count, offset, err = extractLimitCountOffset(b.ctx.GetExprCtx(), limit); err != nil { return nil, err } @@ -2180,12 +2099,12 @@ func (b *PlanBuilder) buildLimit(src base.LogicalPlan, limit *ast.Limit) (base.L count = math.MaxUint64 - offset } if offset+count == 0 { - tableDual := LogicalTableDual{RowCount: 0}.Init(b.ctx, b.getSelectOffset()) + tableDual := logicalop.LogicalTableDual{RowCount: 0}.Init(b.ctx, b.getSelectOffset()) tableDual.SetSchema(src.Schema()) tableDual.SetOutputNames(src.OutputNames()) return tableDual, nil } - li := LogicalLimit{ + li := logicalop.LogicalLimit{ Offset: offset, Count: count, }.Init(b.ctx, b.getSelectOffset()) @@ -2287,9 +2206,9 @@ func (a *havingWindowAndOrderbyExprResolver) resolveFromPlan(v *ast.ColumnNameEx // schema of selection will be `[t1.a]`, thus we need to recursively // retrieve the `t2.a` from the underlying join. switch x := p.(type) { - case *LogicalLimit, *LogicalSelection, *LogicalTopN, *LogicalSort, *logicalop.LogicalMaxOneRow: + case *logicalop.LogicalLimit, *logicalop.LogicalSelection, *logicalop.LogicalTopN, *logicalop.LogicalSort, *logicalop.LogicalMaxOneRow: return a.resolveFromPlan(v, p.Children()[0], resolveFieldsFirst) - case *LogicalJoin: + case *logicalop.LogicalJoin: if len(x.FullNames) != 0 { idx, err = expression.FindFieldName(x.FullNames, v.Name) schemaCols, outputNames = x.FullSchema.Columns, x.FullNames @@ -2925,7 +2844,7 @@ func (g *gbyResolver) Enter(inNode ast.Node) (ast.Node, bool) { case *driver.ParamMarkerExpr: g.isParam = true if g.exprDepth == 1 && !n.UseAsValueInGbyByClause { - _, isNull, isExpectedType := getUintFromNode(g.ctx, n, false) + _, isNull, isExpectedType := getUintFromNode(g.ctx.GetExprCtx(), n, false) // For constant uint expression in top level, it should be treated as position expression. if !isNull && isExpectedType { return expression.ConstructPositionExpr(n), true @@ -2972,7 +2891,7 @@ func (g *gbyResolver) Leave(inNode ast.Node) (ast.Node, bool) { return inNode, false } case *ast.PositionExpr: - pos, isNull, err := expression.PosFromPositionExpr(g.ctx.GetExprCtx(), g.ctx, v) + pos, isNull, err := expression.PosFromPositionExpr(g.ctx.GetExprCtx(), v) if err != nil { g.err = plannererrors.ErrUnknown.GenWithStackByArgs() } @@ -3560,7 +3479,7 @@ func (b *PlanBuilder) resolveGbyExprs(ctx context.Context, p base.LogicalPlan, g } func (*PlanBuilder) unfoldWildStar(p base.LogicalPlan, selectFields []*ast.SelectField) (resultList []*ast.SelectField, err error) { - join, isJoin := p.(*LogicalJoin) + join, isJoin := p.(*logicalop.LogicalJoin) for i, field := range selectFields { if field.WildCard == nil { resultList = append(resultList, field) @@ -4016,7 +3935,7 @@ func (b *PlanBuilder) buildSelect(ctx context.Context, sel *ast.SelectStmt) (p b sel.Fields.Fields = originalFields if oldLen != p.Schema().Len() { - proj := LogicalProjection{Exprs: expression.Column2Exprs(p.Schema().Columns[:oldLen])}.Init(b.ctx, b.getSelectOffset()) + proj := logicalop.LogicalProjection{Exprs: expression.Column2Exprs(p.Schema().Columns[:oldLen])}.Init(b.ctx, b.getSelectOffset()) proj.SetChildren(p) schema := expression.NewSchema(p.Schema().Clone().Columns[:oldLen]...) for _, col := range schema.Columns { @@ -4058,15 +3977,15 @@ func (b *PlanBuilder) tryToBuildSequence(ctes []*cteInfo, p base.LogicalPlan) ba lctes = append(lctes, lcte) } b.optFlag |= flagPushDownSequence - seq := LogicalSequence{}.Init(b.ctx, b.getSelectOffset()) + seq := logicalop.LogicalSequence{}.Init(b.ctx, b.getSelectOffset()) seq.SetChildren(append(lctes, p)...) seq.SetOutputNames(p.OutputNames().Shallow()) return seq } -func (b *PlanBuilder) buildTableDual() *LogicalTableDual { +func (b *PlanBuilder) buildTableDual() *logicalop.LogicalTableDual { b.handleHelper.pushMap(nil) - return LogicalTableDual{RowCount: 1}.Init(b.ctx, b.getSelectOffset()) + return logicalop.LogicalTableDual{RowCount: 1}.Init(b.ctx, b.getSelectOffset()) } func (ds *DataSource) newExtraHandleSchemaCol() *expression.Column { @@ -4261,7 +4180,7 @@ func (b *PlanBuilder) tryBuildCTE(ctx context.Context, tn *ast.TableName, asName } cte.recursiveRef = true - p := LogicalCTETable{Name: cte.def.Name.String(), IDForStorage: cte.storageID, SeedStat: cte.seedStat, SeedSchema: cte.seedLP.Schema()}.Init(b.ctx, b.getSelectOffset()) + p := logicalop.LogicalCTETable{Name: cte.def.Name.String(), IDForStorage: cte.storageID, SeedStat: cte.seedStat, SeedSchema: cte.seedLP.Schema()}.Init(b.ctx, b.getSelectOffset()) p.SetSchema(getResultCTESchema(cte.seedLP.Schema(), b.ctx.GetSessionVars())) p.SetOutputNames(cte.seedLP.OutputNames()) return p, nil @@ -4275,10 +4194,10 @@ func (b *PlanBuilder) tryBuildCTE(ctx context.Context, tn *ast.TableName, asName if cte.limitLP != nil { hasLimit = true switch x := cte.limitLP.(type) { - case *LogicalLimit: + case *logicalop.LogicalLimit: limitBeg = x.Offset limitEnd = x.Offset + x.Count - case *LogicalTableDual: + case *logicalop.LogicalTableDual: // Beg and End will both be 0. default: return nil, errors.Errorf("invalid type for limit plan: %v", cte.limitLP) @@ -4288,14 +4207,14 @@ func (b *PlanBuilder) tryBuildCTE(ctx context.Context, tn *ast.TableName, asName if cte.cteClass == nil { cte.cteClass = &CTEClass{ IsDistinct: cte.isDistinct, - seedPartLogicalPlan: cte.seedLP, - recursivePartLogicalPlan: cte.recurLP, + SeedPartLogicalPlan: cte.seedLP, + RecursivePartLogicalPlan: cte.recurLP, IDForStorage: cte.storageID, - optFlag: cte.optFlag, + OptFlag: cte.optFlag, HasLimit: hasLimit, LimitBeg: limitBeg, LimitEnd: limitEnd, - pushDownPredicates: make([]expression.Expression, 0), + PushDownPredicates: make([]expression.Expression, 0), ColumnMap: make(map[string]*expression.Column), } } @@ -4762,7 +4681,7 @@ func (b *PlanBuilder) buildDataSource(ctx context.Context, tn *ast.TableName, as var result base.LogicalPlan = ds dirty := tableHasDirtyContent(b.ctx, tableInfo) if dirty || tableInfo.TempTableType == model.TempTableLocal || tableInfo.TableCacheStatusType == model.TableCacheStatusEnable { - us := LogicalUnionScan{HandleCols: handleCols}.Init(b.ctx, b.getSelectOffset()) + us := logicalop.LogicalUnionScan{HandleCols: handleCols}.Init(b.ctx, b.getSelectOffset()) us.SetChildren(ds) if tableInfo.Partition != nil && b.optFlag&flagPartitionProcessor == 0 { // Adding ExtraPhysTblIDCol for UnionScan (transaction buffer handling) @@ -4851,7 +4770,7 @@ func (b *PlanBuilder) buildMemTable(_ context.Context, dbName model.CIStr, table } // NOTE: Add a `LogicalUnionScan` if we support update memory table in the future - p := LogicalMemTable{ + p := logicalop.LogicalMemTable{ DBName: dbName, TableInfo: tableInfo, Columns: make([]*model.ColumnInfo, len(tableInfo.Columns)), @@ -4865,7 +4784,7 @@ func (b *PlanBuilder) buildMemTable(_ context.Context, dbName model.CIStr, table case util2.MetricSchemaName.L: p.Extractor = newMetricTableExtractor() case util2.InformationSchemaName.L: - switch strings.ToUpper(tableInfo.Name.O) { + switch upTbl := strings.ToUpper(tableInfo.Name.O); upTbl { case infoschema.TableClusterConfig, infoschema.TableClusterLoad, infoschema.TableClusterHardware, infoschema.TableClusterSystemInfo: p.Extractor = &ClusterTableExtractor{} case infoschema.TableClusterLog: @@ -4894,21 +4813,61 @@ func (b *PlanBuilder) buildMemTable(_ context.Context, dbName model.CIStr, table case infoschema.TableTiKVRegionPeers: p.Extractor = &TikvRegionPeersExtractor{} case infoschema.TableColumns: - p.Extractor = &ColumnsTableExtractor{} - case infoschema.TableTables, - infoschema.TableReferConst, - infoschema.TableKeyColumn, - infoschema.TableStatistics, - infoschema.TablePartitions, - infoschema.TableSequences, - infoschema.TableCheckConstraints, - infoschema.TableTiDBCheckConstraints, - infoschema.TableTiDBIndexUsage, - infoschema.TableTiDBIndexes, - infoschema.TableViews, - infoschema.TableConstraints, - infoschema.TableSchemata: - p.Extractor = &InfoSchemaTablesExtractor{} + ex := &InfoSchemaColumnsExtractor{} + ex.initExtractableColNames(upTbl) + p.Extractor = ex + case infoschema.TableTables: + ex := &InfoSchemaTablesExtractor{} + ex.initExtractableColNames(upTbl) + p.Extractor = ex + case infoschema.TablePartitions: + ex := &InfoSchemaPartitionsExtractor{} + ex.initExtractableColNames(upTbl) + p.Extractor = ex + case infoschema.TableStatistics: + ex := &InfoSchemaStatisticsExtractor{} + ex.initExtractableColNames(upTbl) + p.Extractor = ex + case infoschema.TableSchemata: + ex := &InfoSchemaSchemataExtractor{} + ex.initExtractableColNames(upTbl) + p.Extractor = ex + case infoschema.TableSequences: + ex := &InfoSchemaSequenceExtractor{} + ex.initExtractableColNames(upTbl) + p.Extractor = ex + case infoschema.TableTiDBIndexUsage: + ex := &InfoSchemaIndexUsageExtractor{} + ex.initExtractableColNames(upTbl) + p.Extractor = ex + case infoschema.TableCheckConstraints: + ex := &InfoSchemaCheckConstraintsExtractor{} + ex.initExtractableColNames(upTbl) + p.Extractor = ex + case infoschema.TableTiDBCheckConstraints: + ex := &InfoSchemaTiDBCheckConstraintsExtractor{} + ex.initExtractableColNames(upTbl) + p.Extractor = ex + case infoschema.TableReferConst: + ex := &InfoSchemaReferConstExtractor{} + ex.initExtractableColNames(upTbl) + p.Extractor = ex + case infoschema.TableTiDBIndexes: + ex := &InfoSchemaIndexesExtractor{} + ex.initExtractableColNames(upTbl) + p.Extractor = ex + case infoschema.TableViews: + ex := &InfoSchemaViewsExtractor{} + ex.initExtractableColNames(upTbl) + p.Extractor = ex + case infoschema.TableKeyColumn: + ex := &InfoSchemaKeyColumnUsageExtractor{} + ex.initExtractableColNames(upTbl) + p.Extractor = ex + case infoschema.TableConstraints: + ex := &InfoSchemaTableConstraintsExtractor{} + ex.initExtractableColNames(upTbl) + p.Extractor = ex case infoschema.TableTiKVRegionStatus: p.Extractor = &TiKVRegionStatusExtractor{tablesID: make([]int64, 0)} } @@ -5106,7 +5065,7 @@ func (b *PlanBuilder) buildProjUponView(_ context.Context, dbName model.CIStr, t }) projExprs = append(projExprs, cols[i]) } - projUponView := LogicalProjection{Exprs: projExprs}.Init(b.ctx, b.getSelectOffset()) + projUponView := logicalop.LogicalProjection{Exprs: projExprs}.Init(b.ctx, b.getSelectOffset()) projUponView.SetOutputNames(projNames) projUponView.SetChildren(selectLogicalPlan.(base.LogicalPlan)) projUponView.SetSchema(projSchema) @@ -5115,16 +5074,16 @@ func (b *PlanBuilder) buildProjUponView(_ context.Context, dbName model.CIStr, t // buildApplyWithJoinType builds apply plan with outerPlan and innerPlan, which apply join with particular join type for // every row from outerPlan and the whole innerPlan. -func (b *PlanBuilder) buildApplyWithJoinType(outerPlan, innerPlan base.LogicalPlan, tp JoinType, markNoDecorrelate bool) base.LogicalPlan { +func (b *PlanBuilder) buildApplyWithJoinType(outerPlan, innerPlan base.LogicalPlan, tp logicalop.JoinType, markNoDecorrelate bool) base.LogicalPlan { b.optFlag = b.optFlag | flagPredicatePushDown | flagBuildKeyInfo | flagDecorrelate | flagConvertOuterToInnerJoin - ap := LogicalApply{LogicalJoin: LogicalJoin{JoinType: tp}, NoDecorrelate: markNoDecorrelate}.Init(b.ctx, b.getSelectOffset()) + ap := logicalop.LogicalApply{LogicalJoin: logicalop.LogicalJoin{JoinType: tp}, NoDecorrelate: markNoDecorrelate}.Init(b.ctx, b.getSelectOffset()) ap.SetChildren(outerPlan, innerPlan) ap.SetOutputNames(make([]*types.FieldName, outerPlan.Schema().Len()+innerPlan.Schema().Len())) copy(ap.OutputNames(), outerPlan.OutputNames()) ap.SetSchema(expression.MergeSchema(outerPlan.Schema(), innerPlan.Schema())) setIsInApplyForCTE(innerPlan, ap.Schema()) // Note that, tp can only be LeftOuterJoin or InnerJoin, so we don't consider other outer joins. - if tp == LeftOuterJoin { + if tp == logicalop.LeftOuterJoin { b.optFlag = b.optFlag | flagEliminateOuterJoin util.ResetNotNullFlag(ap.Schema(), outerPlan.Schema().Len(), ap.Schema().Len()) } @@ -5146,7 +5105,7 @@ func (b *PlanBuilder) buildSemiApply(outerPlan, innerPlan base.LogicalPlan, cond } setIsInApplyForCTE(innerPlan, join.Schema()) - ap := &LogicalApply{LogicalJoin: *join, NoDecorrelate: markNoDecorrelate} + ap := &logicalop.LogicalApply{LogicalJoin: *join, NoDecorrelate: markNoDecorrelate} ap.SetTP(plancodec.TypeApply) ap.SetSelf(ap) return ap, nil @@ -5161,9 +5120,9 @@ func setIsInApplyForCTE(p base.LogicalPlan, apSchema *expression.Schema) { if len(coreusage.ExtractCorColumnsBySchema4LogicalPlan(p, apSchema)) > 0 { x.Cte.IsInApply = true } - setIsInApplyForCTE(x.Cte.seedPartLogicalPlan, apSchema) - if x.Cte.recursivePartLogicalPlan != nil { - setIsInApplyForCTE(x.Cte.recursivePartLogicalPlan, apSchema) + setIsInApplyForCTE(x.Cte.SeedPartLogicalPlan, apSchema) + if x.Cte.RecursivePartLogicalPlan != nil { + setIsInApplyForCTE(x.Cte.RecursivePartLogicalPlan, apSchema) } default: for _, child := range p.Children() { @@ -5179,9 +5138,9 @@ func (b *PlanBuilder) buildMaxOneRow(p base.LogicalPlan) base.LogicalPlan { return maxOneRow } -func (b *PlanBuilder) buildSemiJoin(outerPlan, innerPlan base.LogicalPlan, onCondition []expression.Expression, asScalar, not, forceRewrite bool) (*LogicalJoin, error) { +func (b *PlanBuilder) buildSemiJoin(outerPlan, innerPlan base.LogicalPlan, onCondition []expression.Expression, asScalar, not, forceRewrite bool) (*logicalop.LogicalJoin, error) { b.optFlag |= flagConvertOuterToInnerJoin - joinPlan := LogicalJoin{}.Init(b.ctx, b.getSelectOffset()) + joinPlan := logicalop.LogicalJoin{}.Init(b.ctx, b.getSelectOffset()) for i, expr := range onCondition { onCondition[i] = expr.Decorrelate(outerPlan.Schema()) } @@ -5198,16 +5157,16 @@ func (b *PlanBuilder) buildSemiJoin(outerPlan, innerPlan base.LogicalPlan, onCon joinPlan.SetOutputNames(append(joinPlan.OutputNames(), types.EmptyName)) joinPlan.SetSchema(newSchema) if not { - joinPlan.JoinType = AntiLeftOuterSemiJoin + joinPlan.JoinType = logicalop.AntiLeftOuterSemiJoin } else { - joinPlan.JoinType = LeftOuterSemiJoin + joinPlan.JoinType = logicalop.LeftOuterSemiJoin } } else { joinPlan.SetSchema(outerPlan.Schema().Clone()) if not { - joinPlan.JoinType = AntiSemiJoin + joinPlan.JoinType = logicalop.AntiSemiJoin } else { - joinPlan.JoinType = SemiJoin + joinPlan.JoinType = logicalop.SemiJoin } } // Apply forces to choose hash join currently, so don't worry the hints will take effect if the semi join is in one apply. @@ -5383,7 +5342,7 @@ func (b *PlanBuilder) buildUpdate(ctx context.Context, update *ast.UpdateStmt) ( } // Add project to freeze the order of output columns. - proj := LogicalProjection{Exprs: expression.Column2Exprs(p.Schema().Columns[:oldSchemaLen])}.Init(b.ctx, b.getSelectOffset()) + proj := logicalop.LogicalProjection{Exprs: expression.Column2Exprs(p.Schema().Columns[:oldSchemaLen])}.Init(b.ctx, b.getSelectOffset()) proj.SetSchema(expression.NewSchema(make([]*expression.Column, oldSchemaLen)...)) proj.SetOutputNames(make(types.NameSlice, len(p.OutputNames()))) copy(proj.OutputNames(), p.OutputNames()) @@ -5403,6 +5362,7 @@ func (b *PlanBuilder) buildUpdate(ctx context.Context, update *ast.UpdateStmt) ( OrderedList: orderedList, AllAssignmentsAreConstant: allAssignmentsAreConstant, VirtualAssignmentsOffset: len(update.List), + IgnoreError: update.IgnoreErr, }.Init(b.ctx) updt.names = p.OutputNames() // We cannot apply projection elimination when building the subplan, because @@ -5421,7 +5381,7 @@ func (b *PlanBuilder) buildUpdate(ctx context.Context, update *ast.UpdateStmt) ( } tblID2table := make(map[int64]table.Table, len(tblID2Handle)) for id := range tblID2Handle { - tblID2table[id], _ = b.is.TableByID(id) + tblID2table[id], _ = b.is.TableByID(ctx, id) } updt.TblColPosInfos, err = buildColumns2Handle(updt.OutputNames(), tblID2Handle, tblID2table, true) if err != nil { @@ -5566,7 +5526,7 @@ func (b *PlanBuilder) buildUpdateLists(ctx context.Context, tableList []*ast.Tab } tableInfo := tn.TableInfo - tableVal, found := b.is.TableByID(tableInfo.ID) + tableVal, found := b.is.TableByID(ctx, tableInfo.ID) if !found { return nil, nil, false, infoschema.ErrTableNotExists.FastGenByArgs(tn.DBInfo.Name.O, tableInfo.Name.O) } @@ -5786,7 +5746,7 @@ func (b *PlanBuilder) buildDelete(ctx context.Context, ds *ast.DeleteStmt) (base var authErr error sessionVars := b.ctx.GetSessionVars() - proj := LogicalProjection{Exprs: expression.Column2Exprs(p.Schema().Columns[:oldLen])}.Init(b.ctx, b.getSelectOffset()) + proj := logicalop.LogicalProjection{Exprs: expression.Column2Exprs(p.Schema().Columns[:oldLen])}.Init(b.ctx, b.getSelectOffset()) proj.SetChildren(p) proj.SetSchema(oldSchema.Clone()) proj.SetOutputNames(p.OutputNames()[:oldLen]) @@ -5881,7 +5841,7 @@ func (b *PlanBuilder) buildDelete(ctx context.Context, ds *ast.DeleteStmt) (base } tblID2table := make(map[int64]table.Table, len(tblID2Handle)) for id := range tblID2Handle { - tblID2table[id], _ = b.is.TableByID(id) + tblID2table[id], _ = b.is.TableByID(ctx, id) } del.TblColPosInfos, err = buildColumns2Handle(del.names, tblID2Handle, tblID2table, false) if err != nil { @@ -5975,7 +5935,7 @@ func (b *PlanBuilder) buildProjectionForWindow(ctx context.Context, p base.Logic } projLen := len(p.Schema().Columns) + len(partitionItems) + len(orderItems) + len(args) - proj := LogicalProjection{Exprs: make([]expression.Expression, 0, projLen)}.Init(b.ctx, b.getSelectOffset()) + proj := logicalop.LogicalProjection{Exprs: make([]expression.Expression, 0, projLen)}.Init(b.ctx, b.getSelectOffset()) proj.SetSchema(expression.NewSchema(make([]*expression.Column, 0, projLen)...)) proj.SetOutputNames(make([]*types.FieldName, p.Schema().Len(), projLen)) for _, col := range p.Schema().Columns { @@ -6053,7 +6013,7 @@ func (b *PlanBuilder) buildArgs4WindowFunc(ctx context.Context, p base.LogicalPl func (b *PlanBuilder) buildByItemsForWindow( ctx context.Context, p base.LogicalPlan, - proj *LogicalProjection, + proj *logicalop.LogicalProjection, items []*ast.ByItem, retItems []property.SortItem, aggMap map[*ast.AggregateFuncExpr]int, @@ -6097,9 +6057,9 @@ func (b *PlanBuilder) buildByItemsForWindow( // buildWindowFunctionFrameBound builds the bounds of window function frames. // For type `Rows`, the bound expr must be an unsigned integer. // For type `Range`, the bound expr must be temporal or numeric types. -func (b *PlanBuilder) buildWindowFunctionFrameBound(_ context.Context, spec *ast.WindowSpec, orderByItems []property.SortItem, boundClause *ast.FrameBound) (*FrameBound, error) { +func (b *PlanBuilder) buildWindowFunctionFrameBound(_ context.Context, spec *ast.WindowSpec, orderByItems []property.SortItem, boundClause *ast.FrameBound) (*logicalop.FrameBound, error) { frameType := spec.Frame.Type - bound := &FrameBound{Type: boundClause.Type, UnBounded: boundClause.UnBounded, IsExplicitRange: false} + bound := &logicalop.FrameBound{Type: boundClause.Type, UnBounded: boundClause.UnBounded, IsExplicitRange: false} if bound.UnBounded { return bound, nil } @@ -6108,7 +6068,7 @@ func (b *PlanBuilder) buildWindowFunctionFrameBound(_ context.Context, spec *ast if bound.Type == ast.CurrentRow { return bound, nil } - numRows, _, _ := getUintFromNode(b.ctx, boundClause.Expr, false) + numRows, _, _ := getUintFromNode(b.ctx.GetExprCtx(), boundClause.Expr, false) bound.Num = numRows return bound, nil } @@ -6184,18 +6144,18 @@ func (b *PlanBuilder) buildWindowFunctionFrameBound(_ context.Context, spec *ast } cmpDataType := expression.GetAccurateCmpType(b.ctx.GetExprCtx().GetEvalCtx(), col, bound.CalcFuncs[0]) - bound.updateCmpFuncsAndCmpDataType(cmpDataType) + bound.UpdateCmpFuncsAndCmpDataType(cmpDataType) return bound, nil } // buildWindowFunctionFrame builds the window function frames. // See https://dev.mysql.com/doc/refman/8.0/en/window-functions-frames.html -func (b *PlanBuilder) buildWindowFunctionFrame(ctx context.Context, spec *ast.WindowSpec, orderByItems []property.SortItem) (*WindowFrame, error) { +func (b *PlanBuilder) buildWindowFunctionFrame(ctx context.Context, spec *ast.WindowSpec, orderByItems []property.SortItem) (*logicalop.WindowFrame, error) { frameClause := spec.Frame if frameClause == nil { return nil, nil } - frame := &WindowFrame{Type: frameClause.Type} + frame := &logicalop.WindowFrame{Type: frameClause.Type} var err error frame.Start, err = b.buildWindowFunctionFrameBound(ctx, spec, orderByItems, &frameClause.Extent.Start) if err != nil { @@ -6322,7 +6282,7 @@ func (b *PlanBuilder) buildWindowFunctions(ctx context.Context, p base.LogicalPl return nil, nil, err } - window := LogicalWindow{ + window := logicalop.LogicalWindow{ PartitionBy: partitionBy, OrderBy: orderBy, Frame: frame, @@ -6430,7 +6390,7 @@ func (b *PlanBuilder) checkOriginWindowFrameBound(bound *ast.FrameBound, spec *a if bound.Unit != ast.TimeUnitInvalid { return plannererrors.ErrWindowRowsIntervalUse.GenWithStackByArgs(getWindowName(spec.Name.O)) } - _, isNull, isExpectedType := getUintFromNode(b.ctx, bound.Expr, false) + _, isNull, isExpectedType := getUintFromNode(b.ctx.GetExprCtx(), bound.Expr, false) if isNull || !isExpectedType { return plannererrors.ErrWindowFrameIllegal.GenWithStackByArgs(getWindowName(spec.Name.O)) } @@ -6896,47 +6856,6 @@ func getInnerFromParenthesesAndUnaryPlus(expr ast.ExprNode) ast.ExprNode { return expr } -// containDifferentJoinTypes checks whether `PreferJoinType` contains different -// join types. -func containDifferentJoinTypes(preferJoinType uint) bool { - preferJoinType &= ^h.PreferNoHashJoin - preferJoinType &= ^h.PreferNoMergeJoin - preferJoinType &= ^h.PreferNoIndexJoin - preferJoinType &= ^h.PreferNoIndexHashJoin - preferJoinType &= ^h.PreferNoIndexMergeJoin - - inlMask := h.PreferRightAsINLJInner ^ h.PreferLeftAsINLJInner - inlhjMask := h.PreferRightAsINLHJInner ^ h.PreferLeftAsINLHJInner - inlmjMask := h.PreferRightAsINLMJInner ^ h.PreferLeftAsINLMJInner - hjRightBuildMask := h.PreferRightAsHJBuild ^ h.PreferLeftAsHJProbe - hjLeftBuildMask := h.PreferLeftAsHJBuild ^ h.PreferRightAsHJProbe - - mppMask := h.PreferShuffleJoin ^ h.PreferBCJoin - mask := inlMask ^ inlhjMask ^ inlmjMask ^ hjRightBuildMask ^ hjLeftBuildMask - onesCount := bits.OnesCount(preferJoinType & ^mask & ^mppMask) - if onesCount > 1 || onesCount == 1 && preferJoinType&mask > 0 { - return true - } - - cnt := 0 - if preferJoinType&inlMask > 0 { - cnt++ - } - if preferJoinType&inlhjMask > 0 { - cnt++ - } - if preferJoinType&inlmjMask > 0 { - cnt++ - } - if preferJoinType&hjLeftBuildMask > 0 { - cnt++ - } - if preferJoinType&hjRightBuildMask > 0 { - cnt++ - } - return cnt > 1 -} - func hasMPPJoinHints(preferJoinType uint) bool { return (preferJoinType&h.PreferBCJoin > 0) || (preferJoinType&h.PreferShuffleJoin > 0) } @@ -7250,7 +7169,7 @@ func (b *PlanBuilder) buildProjection4CTEUnion(_ context.Context, seed base.Logi } } b.optFlag |= flagEliminateProjection - proj := LogicalProjection{Exprs: exprs, AvoidColumnEvaluator: true}.Init(b.ctx, b.getSelectOffset()) + proj := logicalop.LogicalProjection{Exprs: exprs}.Init(b.ctx, b.getSelectOffset()) proj.SetSchema(resSchema) proj.SetChildren(recur) return proj, nil diff --git a/pkg/planner/core/logical_plans.go b/pkg/planner/core/logical_plans.go index 9368447e44f85..1ce76663b5398 100644 --- a/pkg/planner/core/logical_plans.go +++ b/pkg/planner/core/logical_plans.go @@ -15,135 +15,34 @@ package core import ( - "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/planner/core/base" "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" - fd "github.com/pingcap/tidb/pkg/planner/funcdep" - "github.com/pingcap/tidb/pkg/planner/util" - "github.com/pingcap/tidb/pkg/util/intset" ) var ( - _ base.LogicalPlan = &LogicalJoin{} - _ base.LogicalPlan = &LogicalAggregation{} - _ base.LogicalPlan = &LogicalProjection{} - _ base.LogicalPlan = &LogicalSelection{} - _ base.LogicalPlan = &LogicalApply{} + _ base.LogicalPlan = &logicalop.LogicalJoin{} + _ base.LogicalPlan = &logicalop.LogicalAggregation{} + _ base.LogicalPlan = &logicalop.LogicalProjection{} + _ base.LogicalPlan = &logicalop.LogicalSelection{} + _ base.LogicalPlan = &logicalop.LogicalApply{} _ base.LogicalPlan = &logicalop.LogicalMaxOneRow{} - _ base.LogicalPlan = &LogicalTableDual{} + _ base.LogicalPlan = &logicalop.LogicalTableDual{} _ base.LogicalPlan = &DataSource{} _ base.LogicalPlan = &TiKVSingleGather{} _ base.LogicalPlan = &LogicalTableScan{} _ base.LogicalPlan = &LogicalIndexScan{} - _ base.LogicalPlan = &LogicalUnionAll{} - _ base.LogicalPlan = &LogicalSort{} - _ base.LogicalPlan = &LogicalLock{} - _ base.LogicalPlan = &LogicalLimit{} - _ base.LogicalPlan = &LogicalWindow{} - _ base.LogicalPlan = &LogicalExpand{} - _ base.LogicalPlan = &LogicalUnionScan{} - _ base.LogicalPlan = &LogicalMemTable{} - _ base.LogicalPlan = &LogicalShow{} - _ base.LogicalPlan = &LogicalShowDDLJobs{} + _ base.LogicalPlan = &logicalop.LogicalUnionAll{} + _ base.LogicalPlan = &logicalop.LogicalPartitionUnionAll{} + _ base.LogicalPlan = &logicalop.LogicalSort{} + _ base.LogicalPlan = &logicalop.LogicalLock{} + _ base.LogicalPlan = &logicalop.LogicalLimit{} + _ base.LogicalPlan = &logicalop.LogicalWindow{} + _ base.LogicalPlan = &logicalop.LogicalExpand{} + _ base.LogicalPlan = &logicalop.LogicalUnionScan{} + _ base.LogicalPlan = &logicalop.LogicalMemTable{} + _ base.LogicalPlan = &logicalop.LogicalShow{} + _ base.LogicalPlan = &logicalop.LogicalShowDDLJobs{} _ base.LogicalPlan = &LogicalCTE{} - _ base.LogicalPlan = &LogicalCTETable{} - _ base.LogicalPlan = &LogicalSequence{} + _ base.LogicalPlan = &logicalop.LogicalCTETable{} + _ base.LogicalPlan = &logicalop.LogicalSequence{} ) - -// ExtractNotNullFromConds extracts not-null columns from conditions. -func ExtractNotNullFromConds(conditions []expression.Expression, p base.LogicalPlan) intset.FastIntSet { - // extract the column NOT NULL rejection characteristic from selection condition. - // CNF considered only, DNF doesn't have its meanings (cause that condition's eval may don't take effect) - // - // Take this case: select * from t where (a = 1) and (b is null): - // - // If we wanna where phrase eval to true, two pre-condition: {a=1} and {b is null} both need to be true. - // Hence, we assert that: - // - // 1: `a` must not be null since `NULL = 1` is evaluated as NULL. - // 2: `b` must be null since only `NULL is NULL` is evaluated as true. - // - // As a result, `a` will be extracted as not-null column to abound the FDSet. - notnullColsUniqueIDs := intset.NewFastIntSet() - for _, condition := range conditions { - var cols []*expression.Column - cols = expression.ExtractColumnsFromExpressions(cols, []expression.Expression{condition}, nil) - if util.IsNullRejected(p.SCtx(), p.Schema(), condition) { - for _, col := range cols { - notnullColsUniqueIDs.Insert(int(col.UniqueID)) - } - } - } - return notnullColsUniqueIDs -} - -// ExtractConstantCols extracts constant columns from conditions. -func ExtractConstantCols(conditions []expression.Expression, sctx base.PlanContext, fds *fd.FDSet) intset.FastIntSet { - // extract constant cols - // eg: where a=1 and b is null and (1+c)=5. - // TODO: Some columns can only be determined to be constant from multiple constraints (e.g. x <= 1 AND x >= 1) - var ( - constObjs []expression.Expression - constUniqueIDs = intset.NewFastIntSet() - ) - constObjs = expression.ExtractConstantEqColumnsOrScalar(sctx.GetExprCtx(), constObjs, conditions) - for _, constObj := range constObjs { - switch x := constObj.(type) { - case *expression.Column: - constUniqueIDs.Insert(int(x.UniqueID)) - case *expression.ScalarFunction: - hashCode := string(x.HashCode()) - if uniqueID, ok := fds.IsHashCodeRegistered(hashCode); ok { - constUniqueIDs.Insert(uniqueID) - } else { - scalarUniqueID := int(sctx.GetSessionVars().AllocPlanColumnID()) - fds.RegisterUniqueID(string(x.HashCode()), scalarUniqueID) - constUniqueIDs.Insert(scalarUniqueID) - } - } - } - return constUniqueIDs -} - -// ExtractEquivalenceCols extracts equivalence columns from conditions. -func ExtractEquivalenceCols(conditions []expression.Expression, sctx base.PlanContext, fds *fd.FDSet) [][]intset.FastIntSet { - var equivObjsPair [][]expression.Expression - equivObjsPair = expression.ExtractEquivalenceColumns(equivObjsPair, conditions) - equivUniqueIDs := make([][]intset.FastIntSet, 0, len(equivObjsPair)) - for _, equivObjPair := range equivObjsPair { - // lhs of equivalence. - var ( - lhsUniqueID int - rhsUniqueID int - ) - switch x := equivObjPair[0].(type) { - case *expression.Column: - lhsUniqueID = int(x.UniqueID) - case *expression.ScalarFunction: - hashCode := string(x.HashCode()) - if uniqueID, ok := fds.IsHashCodeRegistered(hashCode); ok { - lhsUniqueID = uniqueID - } else { - scalarUniqueID := int(sctx.GetSessionVars().AllocPlanColumnID()) - fds.RegisterUniqueID(string(x.HashCode()), scalarUniqueID) - lhsUniqueID = scalarUniqueID - } - } - // rhs of equivalence. - switch x := equivObjPair[1].(type) { - case *expression.Column: - rhsUniqueID = int(x.UniqueID) - case *expression.ScalarFunction: - hashCode := string(x.HashCode()) - if uniqueID, ok := fds.IsHashCodeRegistered(hashCode); ok { - rhsUniqueID = uniqueID - } else { - scalarUniqueID := int(sctx.GetSessionVars().AllocPlanColumnID()) - fds.RegisterUniqueID(string(x.HashCode()), scalarUniqueID) - rhsUniqueID = scalarUniqueID - } - } - equivUniqueIDs = append(equivUniqueIDs, []intset.FastIntSet{intset.NewFastIntSet(lhsUniqueID), intset.NewFastIntSet(rhsUniqueID)}) - } - return equivUniqueIDs -} diff --git a/pkg/planner/core/logical_plans_test.go b/pkg/planner/core/logical_plans_test.go index 5112539c7bcc5..89f8e812dcb78 100644 --- a/pkg/planner/core/logical_plans_test.go +++ b/pkg/planner/core/logical_plans_test.go @@ -33,6 +33,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/parser/terror" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/sessionctx" @@ -162,7 +163,7 @@ func TestImplicitCastNotNullFlag(t *testing.T) { p, err = logicalOptimize(context.TODO(), flagPredicatePushDown|flagJoinReOrder|flagPrunColumns|flagEliminateProjection, p.(base.LogicalPlan)) require.NoError(t, err) // AggFuncs[0] is count; AggFuncs[1] is bit_and, args[0] is return type of the implicit cast - castNotNullFlag := (p.(*LogicalProjection).Children()[0].(*LogicalSelection).Children()[0].(*LogicalAggregation).AggFuncs[1].Args[0].GetType(s.ctx.GetExprCtx().GetEvalCtx()).GetFlag()) & mysql.NotNullFlag + castNotNullFlag := (p.(*logicalop.LogicalProjection).Children()[0].(*logicalop.LogicalSelection).Children()[0].(*logicalop.LogicalAggregation).AggFuncs[1].Args[0].GetType(s.ctx.GetExprCtx().GetEvalCtx()).GetFlag()) & mysql.NotNullFlag var nullableFlag uint = 0 require.Equal(t, nullableFlag, castNotNullFlag) } @@ -180,8 +181,8 @@ func TestEliminateProjectionUnderUnion(t *testing.T) { p, err = logicalOptimize(context.TODO(), flagPredicatePushDown|flagJoinReOrder|flagPrunColumns|flagEliminateProjection, p.(base.LogicalPlan)) require.NoError(t, err) // after folding constants, the null flag should keep the same with the old one's (i.e., the schema's). - schemaNullFlag := p.(*LogicalProjection).Children()[0].(*LogicalJoin).Children()[1].Children()[1].(*LogicalProjection).Schema().Columns[0].RetType.GetFlag() & mysql.NotNullFlag - exprNullFlag := p.(*LogicalProjection).Children()[0].(*LogicalJoin).Children()[1].Children()[1].(*LogicalProjection).Exprs[0].GetType(s.ctx.GetExprCtx().GetEvalCtx()).GetFlag() & mysql.NotNullFlag + schemaNullFlag := p.(*logicalop.LogicalProjection).Children()[0].(*logicalop.LogicalJoin).Children()[1].Children()[1].(*logicalop.LogicalProjection).Schema().Columns[0].RetType.GetFlag() & mysql.NotNullFlag + exprNullFlag := p.(*logicalop.LogicalProjection).Children()[0].(*logicalop.LogicalJoin).Children()[1].Children()[1].(*logicalop.LogicalProjection).Exprs[0].GetType(s.ctx.GetExprCtx().GetEvalCtx()).GetFlag() & mysql.NotNullFlag require.Equal(t, exprNullFlag, schemaNullFlag) } @@ -207,9 +208,9 @@ func TestJoinPredicatePushDown(t *testing.T) { require.NoError(t, err, comment) p, err = logicalOptimize(context.TODO(), flagPredicatePushDown|flagDecorrelate|flagPrunColumns|flagPrunColumnsAgain, p.(base.LogicalPlan)) require.NoError(t, err, comment) - proj, ok := p.(*LogicalProjection) + proj, ok := p.(*logicalop.LogicalProjection) require.True(t, ok, comment) - join, ok := proj.Children()[0].(*LogicalJoin) + join, ok := proj.Children()[0].(*logicalop.LogicalJoin) require.True(t, ok, comment) leftPlan, ok := join.Children()[0].(*DataSource) require.True(t, ok, comment) @@ -248,16 +249,16 @@ func TestOuterWherePredicatePushDown(t *testing.T) { require.NoError(t, err, comment) p, err = logicalOptimize(context.TODO(), flagPredicatePushDown|flagDecorrelate|flagPrunColumns|flagPrunColumnsAgain, p.(base.LogicalPlan)) require.NoError(t, err, comment) - proj, ok := p.(*LogicalProjection) + proj, ok := p.(*logicalop.LogicalProjection) require.True(t, ok, comment) - selection, ok := proj.Children()[0].(*LogicalSelection) + selection, ok := proj.Children()[0].(*logicalop.LogicalSelection) require.True(t, ok, comment) selCond := expression.StringifyExpressionsWithCtx(ectx, selection.Conditions) testdata.OnRecord(func() { output[i].Sel = selCond }) require.Equal(t, output[i].Sel, selCond, comment) - join, ok := selection.Children()[0].(*LogicalJoin) + join, ok := selection.Children()[0].(*logicalop.LogicalJoin) require.True(t, ok, comment) leftPlan, ok := join.Children()[0].(*DataSource) require.True(t, ok, comment) @@ -299,9 +300,9 @@ func TestSimplifyOuterJoin(t *testing.T) { output[i].Best = planString }) require.Equal(t, output[i].Best, planString, comment) - join, ok := p.(base.LogicalPlan).Children()[0].(*LogicalJoin) + join, ok := p.(base.LogicalPlan).Children()[0].(*logicalop.LogicalJoin) if !ok { - join, ok = p.(base.LogicalPlan).Children()[0].Children()[0].(*LogicalJoin) + join, ok = p.(base.LogicalPlan).Children()[0].Children()[0].(*logicalop.LogicalJoin) require.True(t, ok, comment) } testdata.OnRecord(func() { @@ -336,7 +337,7 @@ func TestAntiSemiJoinConstFalse(t *testing.T) { p, err = logicalOptimize(context.TODO(), flagDecorrelate|flagPredicatePushDown|flagPrunColumns|flagPrunColumnsAgain, p.(base.LogicalPlan)) require.NoError(t, err, comment) require.Equal(t, ca.best, ToString(p), comment) - join, _ := p.(base.LogicalPlan).Children()[0].(*LogicalJoin) + join, _ := p.(base.LogicalPlan).Children()[0].(*logicalop.LogicalJoin) require.Equal(t, ca.joinType, join.JoinType.String(), comment) } } @@ -368,7 +369,7 @@ func TestDeriveNotNullConds(t *testing.T) { output[i].Plan = ToString(p) }) require.Equal(t, output[i].Plan, ToString(p), comment) - join := p.(base.LogicalPlan).Children()[0].(*LogicalJoin) + join := p.(base.LogicalPlan).Children()[0].(*logicalop.LogicalJoin) left := join.Children()[0].(*DataSource) right := join.Children()[1].(*DataSource) leftConds := expression.StringifyExpressionsWithCtx(ectx, left.PushedDownConds) @@ -391,7 +392,7 @@ func TestExtraPKNotNullFlag(t *testing.T) { require.NoError(t, err, comment) p, err := BuildLogicalPlanForTest(ctx, s.sctx, stmt, s.is) require.NoError(t, err, comment) - ds := p.(*LogicalProjection).Children()[0].(*LogicalAggregation).Children()[0].(*DataSource) + ds := p.(*logicalop.LogicalProjection).Children()[0].(*logicalop.LogicalAggregation).Children()[0].(*DataSource) require.Equal(t, "_tidb_rowid", ds.Columns[2].Name.L) require.Equal(t, mysql.PriKeyFlag|mysql.NotNullFlag, ds.Columns[2].GetFlag()) require.Equal(t, mysql.PriKeyFlag|mysql.NotNullFlag, ds.Schema().Columns[2].RetType.GetFlag()) @@ -476,11 +477,11 @@ func TestDupRandJoinCondsPushDown(t *testing.T) { require.NoError(t, err, comment) p, err = logicalOptimize(context.TODO(), flagPredicatePushDown, p.(base.LogicalPlan)) require.NoError(t, err, comment) - proj, ok := p.(*LogicalProjection) + proj, ok := p.(*logicalop.LogicalProjection) require.True(t, ok, comment) - join, ok := proj.Children()[0].(*LogicalJoin) + join, ok := proj.Children()[0].(*logicalop.LogicalJoin) require.True(t, ok, comment) - leftPlan, ok := join.Children()[0].(*LogicalSelection) + leftPlan, ok := join.Children()[0].(*logicalop.LogicalSelection) require.True(t, ok, comment) leftCond := expression.StringifyExpressionsWithCtx(s.ctx.GetExprCtx().GetEvalCtx(), leftPlan.Conditions) // Condition with mutable function cannot be de-duplicated when push down join conds. @@ -756,14 +757,14 @@ func TestCS3389(t *testing.T) { require.NoError(t, err) // Assert that all Projection is not empty and there is no Projection between Aggregation and Join. - proj, isProj := p.(*LogicalProjection) + proj, isProj := p.(*logicalop.LogicalProjection) require.True(t, isProj) require.True(t, len(proj.Exprs) > 0) child := proj.Children()[0] - agg, isAgg := child.(*LogicalAggregation) + agg, isAgg := child.(*logicalop.LogicalAggregation) require.True(t, isAgg) child = agg.Children()[0] - _, isJoin := child.(*LogicalJoin) + _, isJoin := child.(*logicalop.LogicalJoin) require.True(t, isJoin) } @@ -780,7 +781,7 @@ func TestAllocID(t *testing.T) { func checkDataSourceCols(p base.LogicalPlan, t *testing.T, ans map[int][]string, comment string) { ectx := p.SCtx().GetExprCtx().GetEvalCtx() switch v := p.(type) { - case *DataSource, *LogicalUnionAll, *LogicalLimit: + case *DataSource, *logicalop.LogicalUnionAll, *logicalop.LogicalLimit: testdata.OnRecord(func() { ans[p.ID()] = make([]string, p.Schema().Len()) }) @@ -802,7 +803,7 @@ func checkDataSourceCols(p base.LogicalPlan, t *testing.T, ans map[int][]string, func checkOrderByItems(p base.LogicalPlan, t *testing.T, colList *[]string, comment string) { ectx := p.SCtx().GetExprCtx().GetEvalCtx() switch p := p.(type) { - case *LogicalSort: + case *logicalop.LogicalSort: testdata.OnRecord(func() { *colList = make([]string, len(p.ByItems)) }) @@ -1994,10 +1995,10 @@ func TestSkylinePruning(t *testing.T) { switch v := lp.(type) { case *DataSource: ds = v - case *LogicalSort: + case *logicalop.LogicalSort: byItems = v.ByItems lp = lp.Children()[0] - case *LogicalProjection: + case *logicalop.LogicalProjection: newItems := make([]*util.ByItems, 0, len(byItems)) for _, col := range byItems { idx := v.Schema().ColumnIndex(col.Expr.(*expression.Column)) @@ -2012,7 +2013,7 @@ func TestSkylinePruning(t *testing.T) { lp = lp.Children()[0] } } - paths := ds.skylinePruning(byItemsToProperty(byItems)) + paths := skylinePruning(ds, byItemsToProperty(byItems)) require.Equal(t, tt.result, pathsName(paths), comment) domain.GetDomain(sctx).StatsHandle().Close() } @@ -2113,9 +2114,9 @@ func TestConflictedJoinTypeHints(t *testing.T) { require.NoError(t, err) p, err = logicalOptimize(ctx, builder.optFlag, p.(base.LogicalPlan)) require.NoError(t, err) - proj, ok := p.(*LogicalProjection) + proj, ok := p.(*logicalop.LogicalProjection) require.True(t, ok) - join, ok := proj.Children()[0].(*LogicalJoin) + join, ok := proj.Children()[0].(*logicalop.LogicalJoin) require.True(t, ok) require.Nil(t, join.HintInfo) require.Equal(t, uint(0), join.PreferJoinType) @@ -2140,12 +2141,12 @@ func TestSimplyOuterJoinWithOnlyOuterExpr(t *testing.T) { require.NoError(t, err) p, err = logicalOptimize(ctx, builder.optFlag, p.(base.LogicalPlan)) require.NoError(t, err) - proj, ok := p.(*LogicalProjection) + proj, ok := p.(*logicalop.LogicalProjection) require.True(t, ok) - join, ok := proj.Children()[0].(*LogicalJoin) + join, ok := proj.Children()[0].(*logicalop.LogicalJoin) require.True(t, ok) // previous wrong JoinType is InnerJoin - require.Equal(t, RightOuterJoin, join.JoinType) + require.Equal(t, logicalop.RightOuterJoin, join.JoinType) } func TestResolvingCorrelatedAggregate(t *testing.T) { diff --git a/pkg/planner/core/logical_tikv_single_gather.go b/pkg/planner/core/logical_tikv_single_gather.go index b68433da04d97..1fb05e9db4db7 100644 --- a/pkg/planner/core/logical_tikv_single_gather.go +++ b/pkg/planner/core/logical_tikv_single_gather.go @@ -21,7 +21,6 @@ import ( "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/planner/core/base" "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" - "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/util/plancodec" ) @@ -115,27 +114,3 @@ func (*TiKVSingleGather) PreparePossibleProperties(_ *expression.Schema, childre // ConvertOuterToInnerJoin inherits BaseLogicalPlan.LogicalPlan.<24th> implementation. // *************************** end implementation of logicalPlan interface *************************** - -// GetPhysicalIndexReader returns PhysicalIndexReader for logical TiKVSingleGather. -func (sg *TiKVSingleGather) GetPhysicalIndexReader(schema *expression.Schema, stats *property.StatsInfo, props ...*property.PhysicalProperty) *PhysicalIndexReader { - reader := PhysicalIndexReader{}.Init(sg.SCtx(), sg.QueryBlockOffset()) - reader.SetStats(stats) - reader.SetSchema(schema) - reader.childrenReqProps = props - return reader -} - -// GetPhysicalTableReader returns PhysicalTableReader for logical TiKVSingleGather. -func (sg *TiKVSingleGather) GetPhysicalTableReader(schema *expression.Schema, stats *property.StatsInfo, props ...*property.PhysicalProperty) *PhysicalTableReader { - reader := PhysicalTableReader{}.Init(sg.SCtx(), sg.QueryBlockOffset()) - reader.PlanPartInfo = &PhysPlanPartInfo{ - PruningConds: sg.Source.AllConds, - PartitionNames: sg.Source.PartitionNames, - Columns: sg.Source.TblCols, - ColumnNames: sg.Source.OutputNames(), - } - reader.SetStats(stats) - reader.SetSchema(schema) - reader.childrenReqProps = props - return reader -} diff --git a/pkg/planner/core/memtable_infoschema_extractor.go b/pkg/planner/core/memtable_infoschema_extractor.go new file mode 100644 index 0000000000000..90352b1045334 --- /dev/null +++ b/pkg/planner/core/memtable_infoschema_extractor.go @@ -0,0 +1,1026 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package core + +import ( + "bytes" + "context" + "fmt" + "slices" + "sort" + "strconv" + "strings" + + "github.com/pingcap/errors" + "github.com/pingcap/tidb/pkg/expression" + "github.com/pingcap/tidb/pkg/infoschema" + "github.com/pingcap/tidb/pkg/parser/model" + "github.com/pingcap/tidb/pkg/parser/mysql" + "github.com/pingcap/tidb/pkg/parser/terror" + "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/types" + "github.com/pingcap/tidb/pkg/util/collate" + "github.com/pingcap/tidb/pkg/util/set" + "golang.org/x/exp/maps" +) + +const ( + _tableSchema = "table_schema" + _tableName = "table_name" + _tidbTableID = "tidb_table_id" + _partitionName = "partition_name" + _tidbPartitionID = "tidb_partition_id" + _indexName = "index_name" + _schemaName = "schema_name" + _constraintSchema = "constraint_schema" + _constraintName = "constraint_name" + _tableID = "table_id" + _sequenceSchema = "sequence_schema" + _sequenceName = "sequence_name" + _columnName = "column_name" +) + +var extractableColumns = map[string][]string{ + // See infoschema.tablesCols for full columns. + // Used by InfoSchemaTablesExtractor and setDataFromTables. + infoschema.TableTables: { + _tableSchema, _tableName, _tidbTableID, + }, + // See infoschema.partitionsCols for full columns. + // Used by InfoSchemaPartitionsExtractor and setDataFromPartitions. + infoschema.TablePartitions: { + _tableSchema, _tableName, _tidbPartitionID, + _partitionName, + }, + // See infoschema.statisticsCols for full columns. + // Used by InfoSchemaStatisticsExtractor and setDataForStatistics. + infoschema.TableStatistics: { + _tableSchema, _tableName, + _indexName, + }, + // See infoschema.columns for full columns. + // Used by InfoSchemaColumnsExtractor and setDataFromColumns. + infoschema.TableColumns: { + _tableSchema, _tableName, + _columnName, + }, + // See infoschema.tidb_index_usage for full columns. + // Used by InfoSchemaIndexesExtractor and setDataFromIndexUsage. + infoschema.TableTiDBIndexUsage: { + _tableSchema, _tableName, + _indexName, + }, + // See infoschema.schemataCols for full columns. + // Used by InfoSchemaSchemataExtractor and setDataFromSchemata. + infoschema.TableSchemata: { + _schemaName, + }, + // See infoschema.tableTiDBIndexesCols for full columns. + // Used by InfoSchemaIndexesExtractor and setDataFromIndexes. + infoschema.TableTiDBIndexes: { + _tableSchema, + _tableName, + }, + // See infoschema.tableViewsCols for full columns. + // Used by InfoSchemaViewsExtractor and setDataFromViews. + infoschema.TableViews: { + _tableSchema, + _tableName, + }, + // See infoschema.keyColumnUsageCols for full columns. + // Used by InfoSchemaViewsExtractor and setDataFromKeyColumn + infoschema.TableKeyColumn: { + _tableSchema, + _constraintSchema, + _tableName, + _constraintName, + }, + // See infoschema.tableConstraintsCols for full columns. + // Used by InfoSchemaTableConstraintsExtractor and setDataFromTableConstraints. + infoschema.TableConstraints: { + _tableSchema, + _constraintSchema, + _tableName, + _constraintName, + }, + // See infoschema.tableCheckConstraintsCols for full columns. + // Used by InfoSchemaCheckConstraintsExtractor and setDataFromCheckConstraints. + infoschema.TableCheckConstraints: { + _constraintSchema, + _constraintName, + }, + // See infoschema.tableTiDBCheckConstraintsCols for full columns. + // Used by InfoSchemaTiDBCheckConstraintsExtractor and setDataFromTiDBCheckConstraints. + infoschema.TableTiDBCheckConstraints: { + _constraintSchema, _tableName, _tableID, + _constraintName, + }, + // See infoschema.referConstCols for full columns. + // Used by InfoSchemaReferConstExtractor and setDataFromReferConst. + infoschema.TableReferConst: { + _constraintSchema, _tableName, + _constraintName, + }, + // See infoschema.tableSequencesCols for full columns. + // Used by InfoSchemaSequenceExtractor and setDataFromSequences. + infoschema.TableSequences: { + _sequenceSchema, _sequenceName, + }, +} + +// InfoSchemaBaseExtractor is used to extract infoSchema tables related predicates. +type InfoSchemaBaseExtractor struct { + extractHelper + // SkipRequest means the where clause always false, we don't need to request any component + SkipRequest bool + ColPredicates map[string]set.StringSet + // columns occurs in predicate will be extracted. + colNames []string +} + +func (e *InfoSchemaBaseExtractor) initExtractableColNames(systableName string) { + cols, ok := extractableColumns[systableName] + if ok { + e.colNames = cols + } else { + // TODO: remove this after all system tables are supported. + e.colNames = []string{ + "table_schema", + "constraint_schema", + "table_name", + "constraint_name", + "sequence_schema", + "sequence_name", + "partition_name", + "schema_name", + "index_name", + "tidb_table_id", + } + } +} + +// SetExtractColNames sets the columns that need to be extracted. +func (e *InfoSchemaBaseExtractor) SetExtractColNames(colNames ...string) { + e.colNames = colNames +} + +// Extract implements the MemTablePredicateExtractor Extract interface +func (e *InfoSchemaBaseExtractor) Extract( + ctx base.PlanContext, + schema *expression.Schema, + names []*types.FieldName, + predicates []expression.Expression, +) (remained []expression.Expression) { + var resultSet, resultSet1 set.StringSet + e.ColPredicates = make(map[string]set.StringSet) + remained = predicates + for _, colName := range e.colNames { + remained, e.SkipRequest, resultSet = e.extractColWithLower(ctx, schema, names, remained, colName) + if e.SkipRequest { + break + } + remained, e.SkipRequest, resultSet1 = e.extractCol(ctx, schema, names, remained, colName, true) + if e.SkipRequest { + break + } + for elt := range resultSet1 { + resultSet.Insert(elt) + } + if len(resultSet) == 0 { + continue + } + e.ColPredicates[colName] = resultSet + } + return remained +} + +// ExplainInfo implements base.MemTablePredicateExtractor interface. +func (e *InfoSchemaBaseExtractor) ExplainInfo(_ base.PhysicalPlan) string { + if e.SkipRequest { + return "skip_request:true" + } + + r := new(bytes.Buffer) + colNames := maps.Keys(e.ColPredicates) + sort.Strings(colNames) + for _, colName := range colNames { + if len(e.ColPredicates[colName]) > 0 { + fmt.Fprintf(r, "%s:[%s], ", colName, extractStringFromStringSet(e.ColPredicates[colName])) + } + } + + // remove the last ", " in the message info + s := r.String() + if len(s) > 2 { + return s[:len(s)-2] + } + return s +} + +// Filter use the col predicates to filter records. +// Return true if the underlying row does not match predicate, +// then it should be filtered and not shown in the result. +func (e *InfoSchemaBaseExtractor) Filter(colName string, val string) bool { + if e.SkipRequest { + return true + } + predVals, ok := e.ColPredicates[colName] + if ok && len(predVals) > 0 { + lower, ok := e.isLower[colName] + if ok { + var valStr string + // only have varchar string type, safe to do that. + if lower { + valStr = strings.ToLower(val) + } else { + valStr = strings.ToUpper(val) + } + return !predVals.Exist(valStr) + } + return !predVals.Exist(val) + } + // No need to filter records since no predicate for the column exists. + return false +} + +// InfoSchemaIndexesExtractor is the predicate extractor for information_schema.tidb_indexes. +type InfoSchemaIndexesExtractor struct { + InfoSchemaBaseExtractor +} + +// ListSchemasAndTables lists related tables and their corresponding schemas from predicate. +// If there is no error, returning schema slice and table slice are guaranteed to have the same length. +func (e *InfoSchemaIndexesExtractor) ListSchemasAndTables( + ctx context.Context, + is infoschema.InfoSchema, +) ([]model.CIStr, []*model.TableInfo, error) { + schemas := e.listSchemas(is, _tableSchema) + tableNames := e.getSchemaObjectNames(_tableName) + if len(tableNames) > 0 { + return findTableAndSchemaByName(ctx, is, schemas, tableNames) + } + return listTablesForEachSchema(ctx, is, schemas) +} + +// InfoSchemaTablesExtractor is the predicate extractor for information_schema.tables. +type InfoSchemaTablesExtractor struct { + InfoSchemaBaseExtractor +} + +// ListSchemasAndTables lists related tables and their corresponding schemas from predicate. +// If there is no error, returning schema slice and table slice are guaranteed to have the same length. +func (e *InfoSchemaTablesExtractor) ListSchemasAndTables( + ctx context.Context, + is infoschema.InfoSchema, +) ([]model.CIStr, []*model.TableInfo, error) { + schemas := e.listSchemas(is, _tableSchema) + + tableIDs := e.getSchemaObjectNames(_tidbTableID) + tableNames := e.getSchemaObjectNames(_tableName) + + if len(tableIDs) > 0 { + tableMap := make(map[int64]*model.TableInfo, len(tableIDs)) + findTablesByID(is, tableIDs, tableNames, tableMap) + return findSchemasForTables(ctx, is, schemas, maps.Values(tableMap)) + } + if len(tableNames) > 0 { + return findTableAndSchemaByName(ctx, is, schemas, tableNames) + } + return listTablesForEachSchema(ctx, is, schemas) +} + +// InfoSchemaViewsExtractor is the predicate extractor for information_schema.views. +type InfoSchemaViewsExtractor struct { + InfoSchemaBaseExtractor +} + +// ListSchemasAndTables lists related tables and their corresponding schemas from predicate. +// If there is no error, returning schema slice and table slice are guaranteed to have the same length. +func (e *InfoSchemaViewsExtractor) ListSchemasAndTables( + ctx context.Context, + is infoschema.InfoSchema, +) ([]model.CIStr, []*model.TableInfo, error) { + schemas := e.listSchemas(is, _tableSchema) + tableNames := e.getSchemaObjectNames(_tableName) + if len(tableNames) > 0 { + return findTableAndSchemaByName(ctx, is, schemas, tableNames) + } + return listTablesForEachSchema(ctx, is, schemas) +} + +// InfoSchemaKeyColumnUsageExtractor is the predicate extractor for information_schema.key_column_usage. +type InfoSchemaKeyColumnUsageExtractor struct { + InfoSchemaBaseExtractor +} + +// ListSchemasAndTables lists related tables and their corresponding schemas from predicate. +// If there is no error, returning schema slice and table slice are guaranteed to have the same length. +func (e *InfoSchemaKeyColumnUsageExtractor) ListSchemasAndTables( + ctx context.Context, + is infoschema.InfoSchema, +) ([]model.CIStr, []*model.TableInfo, error) { + schemas := e.listSchemas(is, _tableSchema) + tableNames := e.getSchemaObjectNames(_tableName) + if len(tableNames) > 0 { + return findTableAndSchemaByName(ctx, is, schemas, tableNames) + } + return listTablesForEachSchema(ctx, is, schemas) +} + +// InfoSchemaTableConstraintsExtractor is the predicate extractor for information_schema.constraints. +type InfoSchemaTableConstraintsExtractor struct { + InfoSchemaBaseExtractor +} + +// ListSchemasAndTables lists related tables and their corresponding schemas from predicate. +// If there is no error, returning schema slice and table slice are guaranteed to have the same length. +func (e *InfoSchemaTableConstraintsExtractor) ListSchemasAndTables( + ctx context.Context, + is infoschema.InfoSchema, +) ([]model.CIStr, []*model.TableInfo, error) { + schemas := e.listSchemas(is, _tableSchema) + tableNames := e.getSchemaObjectNames(_tableName) + if len(tableNames) > 0 { + return findTableAndSchemaByName(ctx, is, schemas, tableNames) + } + return listTablesForEachSchema(ctx, is, schemas) +} + +// InfoSchemaPartitionsExtractor is the predicate extractor for information_schema.partitions. +type InfoSchemaPartitionsExtractor struct { + InfoSchemaBaseExtractor +} + +// ListSchemasAndTables lists related tables and their corresponding schemas from predicate. +// If there is no error, returning schema slice and table slice are guaranteed to have the same length. +func (e *InfoSchemaPartitionsExtractor) ListSchemasAndTables( + ctx context.Context, + is infoschema.InfoSchema, +) ([]model.CIStr, []*model.TableInfo, error) { + schemas := e.listSchemas(is, _tableSchema) + + partIDs := e.getSchemaObjectNames(_tidbPartitionID) + tableNames := e.getSchemaObjectNames(_tableName) + + if len(partIDs) > 0 { + tableMap := make(map[int64]*model.TableInfo, len(partIDs)) + findTablesByPartID(is, partIDs, tableNames, tableMap) + return findSchemasForTables(ctx, is, schemas, maps.Values(tableMap)) + } + if len(tableNames) > 0 { + return findTableAndSchemaByName(ctx, is, schemas, tableNames) + } + return listTablesForEachSchema(ctx, is, schemas) +} + +// InfoSchemaStatisticsExtractor is the predicate extractor for information_schema.statistics. +type InfoSchemaStatisticsExtractor struct { + InfoSchemaBaseExtractor +} + +// ListSchemasAndTables lists related tables and their corresponding schemas from predicate. +// If there is no error, returning schema slice and table slice are guaranteed to have the same length. +func (e *InfoSchemaStatisticsExtractor) ListSchemasAndTables( + ctx context.Context, + is infoschema.InfoSchema, +) ([]model.CIStr, []*model.TableInfo, error) { + schemas := e.listSchemas(is, _tableSchema) + tableNames := e.getSchemaObjectNames(_tableName) + if len(tableNames) > 0 { + return findTableAndSchemaByName(ctx, is, schemas, tableNames) + } + return listTablesForEachSchema(ctx, is, schemas) +} + +// ListTables lists related tables from predicate. +// If no table is found in predicate, it return all tables. +func (e *InfoSchemaStatisticsExtractor) ListTables( + ctx context.Context, + is infoschema.InfoSchema, + schema model.CIStr, +) ([]*model.TableInfo, error) { + tableNames := e.getSchemaObjectNames(_tableName) + if len(tableNames) == 0 { + return is.SchemaTableInfos(ctx, schema) + } + + tables := make(map[int64]*model.TableInfo, 8) + err := findNameAndAppendToTableMap(ctx, is, schema, tableNames, tables) + if err != nil { + return nil, errors.Trace(err) + } + return maps.Values(tables), nil +} + +// InfoSchemaSchemataExtractor is the predicate extractor for information_schema.schemata. +type InfoSchemaSchemataExtractor struct { + InfoSchemaBaseExtractor +} + +// ListSchemas lists related schemas from predicate. +// If no schema found in predicate, it return all schemas. +func (e *InfoSchemaSchemataExtractor) ListSchemas(is infoschema.InfoSchema) []model.CIStr { + return e.listSchemas(is, _schemaName) +} + +// InfoSchemaCheckConstraintsExtractor is the predicate extractor for information_schema.check_constraints. +type InfoSchemaCheckConstraintsExtractor struct { + InfoSchemaBaseExtractor +} + +// ListSchemas lists related schemas from predicate. +func (e *InfoSchemaCheckConstraintsExtractor) ListSchemas(is infoschema.InfoSchema) []model.CIStr { + return e.listSchemas(is, _constraintSchema) +} + +// InfoSchemaTiDBCheckConstraintsExtractor is the predicate extractor for information_schema.tidb_check_constraints. +type InfoSchemaTiDBCheckConstraintsExtractor struct { + InfoSchemaBaseExtractor +} + +// ListSchemasAndTables lists related tables and their corresponding schemas from predicate. +func (e *InfoSchemaTiDBCheckConstraintsExtractor) ListSchemasAndTables( + ctx context.Context, + is infoschema.InfoSchema, +) ([]model.CIStr, []*model.TableInfo, error) { + schemas := e.listSchemas(is, _constraintSchema) + + tableIDs := e.getSchemaObjectNames(_tableID) + tableNames := e.getSchemaObjectNames(_tableName) + + if len(tableIDs) > 0 { + tableMap := make(map[int64]*model.TableInfo, len(tableIDs)) + findTablesByID(is, tableIDs, tableNames, tableMap) + return findSchemasForTables(ctx, is, schemas, maps.Values(tableMap)) + } + if len(tableNames) > 0 { + return findTableAndSchemaByName(ctx, is, schemas, tableNames) + } + return listTablesForEachSchema(ctx, is, schemas) +} + +// InfoSchemaReferConstExtractor is the predicate extractor for information_schema.referential_constraints. +type InfoSchemaReferConstExtractor struct { + InfoSchemaBaseExtractor +} + +// ListSchemasAndTables lists related tables and their corresponding schemas from predicate. +func (e *InfoSchemaReferConstExtractor) ListSchemasAndTables( + ctx context.Context, + is infoschema.InfoSchema, +) ([]model.CIStr, []*model.TableInfo, error) { + schemas := e.listSchemas(is, _constraintSchema) + tableNames := e.getSchemaObjectNames(_tableName) + if len(tableNames) > 0 { + return findTableAndSchemaByName(ctx, is, schemas, tableNames) + } + return listTablesForEachSchema(ctx, is, schemas) +} + +// InfoSchemaSequenceExtractor is the predicate extractor for information_schema.sequences. +type InfoSchemaSequenceExtractor struct { + InfoSchemaBaseExtractor +} + +// ListSchemasAndTables lists related tables and their corresponding schemas from predicate. +func (e *InfoSchemaSequenceExtractor) ListSchemasAndTables( + ctx context.Context, + is infoschema.InfoSchema, +) ([]model.CIStr, []*model.TableInfo, error) { + schemas := e.listSchemas(is, _sequenceSchema) + seqNames := e.getSchemaObjectNames(_sequenceName) + if len(seqNames) > 0 { + return findTableAndSchemaByName(ctx, is, schemas, seqNames) + } + return listTablesForEachSchema(ctx, is, schemas) +} + +func (e *InfoSchemaBaseExtractor) listSchemas(is infoschema.InfoSchema, schemaCol string) []model.CIStr { + schemas := e.getSchemaObjectNames(schemaCol) + if len(schemas) == 0 { + ret := is.AllSchemaNames() + slices.SortFunc(ret, func(a, b model.CIStr) int { + return strings.Compare(a.L, b.L) + }) + return ret + } + ret := schemas[:0] + for _, s := range schemas { + if n, ok := is.SchemaByName(s); ok { + ret = append(ret, n.Name) + } + } + return ret +} + +func findNameAndAppendToTableMap( + ctx context.Context, + is infoschema.InfoSchema, + schema model.CIStr, + tableNames []model.CIStr, + tables map[int64]*model.TableInfo, +) error { + for _, n := range tableNames { + tbl, err := is.TableByName(ctx, schema, n) + if err != nil { + if terror.ErrorEqual(err, infoschema.ErrTableNotExists) { + continue + } + return errors.Trace(err) + } + tblInfo := tbl.Meta() + if tblInfo.TempTableType == model.TempTableLocal { + continue + } + tables[tblInfo.ID] = tblInfo + } + return nil +} + +// findTablesByID finds tables by table IDs and append them to table map. +func findTablesByID( + is infoschema.InfoSchema, + tableIDs []model.CIStr, + tableNames []model.CIStr, + tables map[int64]*model.TableInfo, +) { + tblNameMap := make(map[string]struct{}, len(tableNames)) + for _, n := range tableNames { + tblNameMap[n.L] = struct{}{} + } + for _, tid := range parseIDs(tableIDs) { + tbl, ok := is.TableByID(context.Background(), tid) + if !ok { + continue + } + tblInfo := tbl.Meta() + if tblInfo.TempTableType == model.TempTableLocal { + continue + } + if len(tableNames) > 0 { + if _, found := tblNameMap[tblInfo.Name.L]; !found { + // table_id does not match table_name, skip it. + continue + } + } + tables[tblInfo.ID] = tblInfo + } +} + +// findTablesByPartID finds tables by partition IDs and append them to table map. +func findTablesByPartID( + is infoschema.InfoSchema, + partIDs []model.CIStr, + tableNames []model.CIStr, + tables map[int64]*model.TableInfo, +) { + tblNameMap := make(map[string]struct{}, len(tableNames)) + for _, n := range tableNames { + tblNameMap[n.L] = struct{}{} + } + for _, pid := range parseIDs(partIDs) { + tbl, _, _ := is.FindTableByPartitionID(pid) + if tbl == nil { + continue + } + if len(tableNames) > 0 { + if _, found := tblNameMap[tbl.Meta().Name.L]; !found { + // partition_id does not match table_name, skip it. + continue + } + } + tblInfo := tbl.Meta() + tables[tblInfo.ID] = tblInfo + } +} + +func findTableAndSchemaByName( + ctx context.Context, + is infoschema.InfoSchema, + schemas []model.CIStr, + tableNames []model.CIStr, +) ([]model.CIStr, []*model.TableInfo, error) { + type schemaAndTable struct { + schema model.CIStr + table *model.TableInfo + } + tableMap := make(map[int64]schemaAndTable, len(tableNames)) + ctx = infoschema.WithRefillOption(ctx, false) + for _, n := range tableNames { + for _, s := range schemas { + tbl, err := is.TableByName(ctx, s, n) + if err != nil { + if terror.ErrorEqual(err, infoschema.ErrTableNotExists) { + continue + } + return nil, nil, errors.Trace(err) + } + tblInfo := tbl.Meta() + if tblInfo.TempTableType == model.TempTableLocal { + continue + } + tableMap[tblInfo.ID] = schemaAndTable{s, tblInfo} + } + } + schemaSlice := make([]model.CIStr, 0, len(tableMap)) + tableSlice := make([]*model.TableInfo, 0, len(tableMap)) + for _, st := range tableMap { + schemaSlice = append(schemaSlice, st.schema) + tableSlice = append(tableSlice, st.table) + } + return schemaSlice, tableSlice, nil +} + +func listTablesForEachSchema( + ctx context.Context, + is infoschema.InfoSchema, + schemas []model.CIStr, +) ([]model.CIStr, []*model.TableInfo, error) { + schemaSlice := make([]model.CIStr, 0, 8) + tableSlice := make([]*model.TableInfo, 0, 8) + for _, s := range schemas { + tables, err := is.SchemaTableInfos(ctx, s) + if err != nil { + return nil, nil, errors.Trace(err) + } + for _, t := range tables { + schemaSlice = append(schemaSlice, s) + tableSlice = append(tableSlice, t) + } + } + return schemaSlice, tableSlice, nil +} + +func findSchemasForTables( + ctx context.Context, + is infoschema.InfoSchema, + schemas []model.CIStr, + tableSlice []*model.TableInfo, +) ([]model.CIStr, []*model.TableInfo, error) { + schemaSlice := make([]model.CIStr, 0, len(tableSlice)) + for i, tbl := range tableSlice { + found := false + for _, s := range schemas { + isTbl, err := is.TableByName(ctx, s, tbl.Name) + if err != nil { + if terror.ErrorEqual(err, infoschema.ErrTableNotExists) { + continue + } + return nil, nil, errors.Trace(err) + } + if isTbl.Meta().ID == tbl.ID { + schemaSlice = append(schemaSlice, s) + found = true + break + } + } + if !found { + tableSlice[i] = nil + } + } + // Remove nil elements in tableSlice. + remains := tableSlice[:0] + for _, tbl := range tableSlice { + if tbl != nil { + remains = append(remains, tbl) + } + } + return schemaSlice, remains, nil +} + +func parseIDs(ids []model.CIStr) []int64 { + tableIDs := make([]int64, 0, len(ids)) + for _, s := range ids { + v, err := strconv.ParseInt(s.L, 10, 64) + if err != nil { + continue + } + tableIDs = append(tableIDs, v) + } + slices.Sort(tableIDs) + return tableIDs +} + +// getSchemaObjectNames gets the schema object names specified in predicate of given column name. +func (e *InfoSchemaBaseExtractor) getSchemaObjectNames(colName string) []model.CIStr { + predVals, ok := e.ColPredicates[colName] + if ok && len(predVals) > 0 { + tableNames := make([]model.CIStr, 0, len(predVals)) + predVals.IterateWith(func(n string) { + tableNames = append(tableNames, model.NewCIStr(n)) + }) + slices.SortFunc(tableNames, func(a, b model.CIStr) int { + return strings.Compare(a.L, b.L) + }) + return tableNames + } + return nil +} + +// InfoSchemaTableNameExtractor is a base struct to list matching schemas and tables in predicates, +// so there is no need to call `Filter` for returns from `ListSchemas` and `ListTables`. +// But for other columns, Subclass **must** reimplement `Filter` method to use like operators for filtering. +// Currently, table_id is not taken into consideration. +type InfoSchemaTableNameExtractor struct { + InfoSchemaSchemataExtractor + + listTableFunc func( + ctx context.Context, + s model.CIStr, + is infoschema.InfoSchema, + ) ([]*model.TableInfo, error) + + // table names from predicate, used by `ListTables` + tableNames []model.CIStr + + // all predicates in lower case + colsPredLower map[string]set.StringSet + + // all built regexp in predicates + colsRegexp map[string][]collate.WildcardPattern + + // used for EXPLAIN only + LikePatterns map[string][]string +} + +// Extract all names and like operators in predicates +func (e *InfoSchemaTableNameExtractor) Extract( + ctx base.PlanContext, + schema *expression.Schema, + names []*types.FieldName, + predicates []expression.Expression, +) []expression.Expression { + remained := e.InfoSchemaBaseExtractor.Extract(ctx, schema, names, predicates) + if e.SkipRequest { + return remained + } + + e.LikePatterns = make(map[string][]string, len(e.colNames)) + e.colsRegexp = make(map[string][]collate.WildcardPattern, len(e.colNames)) + e.colsPredLower = make(map[string]set.StringSet, len(e.colNames)) + var likePatterns []string + for _, colName := range e.colNames { + remained, likePatterns = e.extractLikePatternCol(ctx, schema, names, remained, colName, true, false) + regexp := make([]collate.WildcardPattern, len(likePatterns)) + predColLower := set.StringSet{} + for i, pattern := range likePatterns { + regexp[i] = collate.GetCollatorByID(collate.CollationName2ID(mysql.UTF8MB4DefaultCollation)).Pattern() + regexp[i].Compile(pattern, byte('\\')) + } + if vals, ok := e.ColPredicates[colName]; ok { + vals.IterateWith(func(n string) { + predColLower.Insert(strings.ToLower(n)) + }) + } + e.colsPredLower[colName] = predColLower + e.LikePatterns[colName] = likePatterns + e.colsRegexp[colName] = regexp + } + + return remained +} + +// getPredicates gets all names and regexps related to given column names. +func (e *InfoSchemaTableNameExtractor) getPredicates(colNames ...string) ( + set.StringSet, []collate.WildcardPattern, bool) { + filters := set.StringSet{} + regexp := []collate.WildcardPattern{} + hasPredicates := false + + // Extract all filters and like patterns + for _, col := range colNames { + if rs, ok := e.colsRegexp[col]; ok && len(rs) > 0 { + regexp = append(regexp, rs...) + } + if f, ok := e.colsPredLower[col]; ok && len(f) > 0 { + if !hasPredicates { + filters = f + hasPredicates = true + } else { + filters = filters.Intersection(f) + } + } + } + + return filters, regexp, hasPredicates +} + +// Get all predicates related to schema extraction. +// Add more columns if necessary. +func (e *InfoSchemaTableNameExtractor) getSchemaNames() ( + set.StringSet, []collate.WildcardPattern, bool) { + return e.getPredicates(_tableSchema, _schemaName, _constraintSchema) +} + +// ListSchemas lists related schemas from predicates. +// Returned schemas is examined by like operators, so there is no need to call Filter again. +func (e *InfoSchemaTableNameExtractor) ListSchemas( + is infoschema.InfoSchema, +) []model.CIStr { + schemaFilters, schemaRegexp, hasPredicates := e.getSchemaNames() + + // Get all schema names + var schemas []model.CIStr + if hasPredicates { + schemas = make([]model.CIStr, 0, len(schemaFilters)) + schemaFilters.IterateWith(func(n string) { + s := model.CIStr{O: n, L: n} + if n, ok := is.SchemaByName(s); ok { + schemas = append(schemas, n.Name) + } + }) + } else { + schemas = is.AllSchemaNames() + } + slices.SortFunc(schemas, func(a, b model.CIStr) int { + return strings.Compare(a.L, b.L) + }) + + // Filter with regexp + filteredSchemas := make([]model.CIStr, 0, len(schemas)) +ForLoop: + for _, schema := range schemas { + for _, re := range schemaRegexp { + if !re.DoMatch(schema.L) { + continue ForLoop + } + } + filteredSchemas = append(filteredSchemas, schema) + } + + // TODO: add table_id here + tableNames := e.getSchemaObjectNames(_tableName) + e.tableNames = tableNames + if len(tableNames) > 0 { + e.listTableFunc = e.listSchemaTablesByName + } else { + e.listTableFunc = listSchemaTables + } + + return filteredSchemas +} + +// ListTables lists related tables for given schema from predicate. +// If no table found in predicate, it return all tables. +func (e *InfoSchemaTableNameExtractor) ListTables( + ctx context.Context, + s model.CIStr, + is infoschema.InfoSchema, +) ([]*model.TableInfo, error) { + allTbls, err := e.listTableFunc(ctx, s, is) + if err != nil { + return nil, errors.Trace(err) + } + + if regexp, ok := e.colsRegexp[_tableName]; ok { + tbls := make([]*model.TableInfo, 0, len(allTbls)) + ForLoop: + for _, tbl := range allTbls { + for _, re := range regexp { + if !re.DoMatch(tbl.Name.L) { + continue ForLoop + } + } + tbls = append(tbls, tbl) + } + allTbls = tbls + } + + return allTbls, nil +} + +func (e *InfoSchemaTableNameExtractor) listSchemaTablesByName( + ctx context.Context, + s model.CIStr, + is infoschema.InfoSchema, +) ([]*model.TableInfo, error) { + tbls := make([]*model.TableInfo, 0, len(e.tableNames)) + for _, n := range e.tableNames { + tbl, err := is.TableByName(ctx, s, n) + if err != nil { + if terror.ErrorEqual(err, infoschema.ErrTableNotExists) { + continue + } + return nil, errors.Trace(err) + } + tbls = append(tbls, tbl.Meta()) + } + + return tbls, nil +} + +func listSchemaTables( + ctx context.Context, + s model.CIStr, + is infoschema.InfoSchema, +) ([]*model.TableInfo, error) { + return is.SchemaTableInfos(ctx, s) +} + +// ExplainInfo implements base.MemTablePredicateExtractor interface. +func (e *InfoSchemaTableNameExtractor) ExplainInfo(_ base.PhysicalPlan) string { + if e.SkipRequest { + return "skip_request:true" + } + + r := new(bytes.Buffer) + + for _, colName := range e.colNames { + if pred, ok := e.ColPredicates[colName]; ok && len(pred) > 0 { + fmt.Fprintf(r, "%s:[%s], ", colName, extractStringFromStringSet(pred)) + } + } + + for _, colName := range e.colNames { + if patterns, ok := e.LikePatterns[colName]; ok && len(patterns) > 0 { + fmt.Fprintf(r, "%s_pattern:[%s], ", colName, extractStringFromStringSlice(patterns)) + } + } + + // remove the last ", " in the message info + s := r.String() + if len(s) > 2 { + return s[:len(s)-2] + } + return s +} + +// InfoSchemaColumnsExtractor is the predicate extractor for information_schema.columns. +type InfoSchemaColumnsExtractor struct { + InfoSchemaTableNameExtractor +} + +// ListColumns lists unhidden columns and corresponding ordinal positions for given table from predicates. +// If no column found in predicate, it return all visible columns. +func (e *InfoSchemaTableNameExtractor) ListColumns( + tbl *model.TableInfo, +) ([]*model.ColumnInfo, []int) { + predCol, regexp, _ := e.getPredicates(_columnName) + + columns := make([]*model.ColumnInfo, 0, len(predCol)) + ordinalPos := make([]int, 0, len(predCol)) + ord := 0 +ForLoop: + for _, column := range tbl.Columns { + if column.Hidden { + continue + } + ord++ + if len(predCol) > 0 && !predCol.Exist(column.Name.L) { + continue + } + for _, re := range regexp { + if !re.DoMatch(column.Name.L) { + continue ForLoop + } + } + columns = append(columns, column) + ordinalPos = append(ordinalPos, ord) + } + + return columns, ordinalPos +} + +// InfoSchemaIndexUsageExtractor is the predicate extractor for information_schema.tidb_index_usage. +type InfoSchemaIndexUsageExtractor struct { + InfoSchemaTableNameExtractor +} + +// ListIndexes lists related indexes for given table from predicate. +// If no index found in predicate, it return all indexes. +func (e *InfoSchemaIndexUsageExtractor) ListIndexes( + tbl *model.TableInfo, +) []*model.IndexInfo { + predCol, regexp, _ := e.getPredicates(_indexName) + if len(predCol) == 0 && len(regexp) == 0 { + return tbl.Indices + } + + indexes := make([]*model.IndexInfo, 0, len(predCol)) +ForLoop: + for _, index := range tbl.Indices { + if len(predCol) > 0 && !predCol.Exist(index.Name.L) { + continue + } + for _, re := range regexp { + if !re.DoMatch(index.Name.L) { + continue ForLoop + } + } + indexes = append(indexes, index) + } + + return indexes +} diff --git a/pkg/planner/core/memtable_predicate_extractor.go b/pkg/planner/core/memtable_predicate_extractor.go index 7187771bb67c5..28214fc6a541b 100644 --- a/pkg/planner/core/memtable_predicate_extractor.go +++ b/pkg/planner/core/memtable_predicate_extractor.go @@ -20,7 +20,6 @@ import ( "math" "regexp" "slices" - "sort" "strconv" "strings" "time" @@ -1679,84 +1678,6 @@ func (e *TikvRegionPeersExtractor) ExplainInfo(_ base.PhysicalPlan) string { return s } -// ColumnsTableExtractor is used to extract some predicates of columns table. -type ColumnsTableExtractor struct { - extractHelper - - // SkipRequest means the where clause always false, we don't need to request any component - SkipRequest bool - - TableSchema set.StringSet - - TableName set.StringSet - // ColumnName represents all column name we should filter in memtable. - ColumnName set.StringSet - - TableSchemaPatterns []string - - TableNamePatterns []string - - ColumnNamePatterns []string -} - -// Extract implements the MemTablePredicateExtractor Extract interface -func (e *ColumnsTableExtractor) Extract(ctx base.PlanContext, - schema *expression.Schema, - names []*types.FieldName, - predicates []expression.Expression, -) (remained []expression.Expression) { - remained, tableSchemaSkipRequest, tableSchema := e.extractCol(ctx, schema, names, predicates, "table_schema", true) - remained, tableNameSkipRequest, tableName := e.extractCol(ctx, schema, names, remained, "table_name", true) - remained, columnNameSkipRequest, columnName := e.extractCol(ctx, schema, names, remained, "column_name", true) - e.SkipRequest = columnNameSkipRequest || tableSchemaSkipRequest || tableNameSkipRequest - if e.SkipRequest { - return - } - remained, tableSchemaPatterns := e.extractLikePatternCol(ctx, schema, names, remained, "table_schema", true, false) - remained, tableNamePatterns := e.extractLikePatternCol(ctx, schema, names, remained, "table_name", true, false) - remained, columnNamePatterns := e.extractLikePatternCol(ctx, schema, names, remained, "column_name", true, false) - - e.ColumnName = columnName - e.TableName = tableName - e.TableSchema = tableSchema - e.TableSchemaPatterns = tableSchemaPatterns - e.TableNamePatterns = tableNamePatterns - e.ColumnNamePatterns = columnNamePatterns - return remained -} - -// ExplainInfo implements base.MemTablePredicateExtractor interface. -func (e *ColumnsTableExtractor) ExplainInfo(_ base.PhysicalPlan) string { - if e.SkipRequest { - return "skip_request:true" - } - r := new(bytes.Buffer) - if len(e.TableSchema) > 0 { - fmt.Fprintf(r, "table_schema:[%s], ", extractStringFromStringSet(e.TableSchema)) - } - if len(e.TableName) > 0 { - fmt.Fprintf(r, "table_name:[%s], ", extractStringFromStringSet(e.TableName)) - } - if len(e.ColumnName) > 0 { - fmt.Fprintf(r, "column_name:[%s], ", extractStringFromStringSet(e.ColumnName)) - } - if len(e.TableSchemaPatterns) > 0 { - fmt.Fprintf(r, "table_schema_pattern:[%s], ", extractStringFromStringSlice(e.TableSchemaPatterns)) - } - if len(e.TableNamePatterns) > 0 { - fmt.Fprintf(r, "table_name_pattern:[%s], ", extractStringFromStringSlice(e.TableNamePatterns)) - } - if len(e.ColumnNamePatterns) > 0 { - fmt.Fprintf(r, "column_name_pattern:[%s], ", extractStringFromStringSlice(e.ColumnNamePatterns)) - } - // remove the last ", " in the message info - s := r.String() - if len(s) > 2 { - return s[:len(s)-2] - } - return s -} - // TiKVRegionStatusExtractor is used to extract single table region scan region from predictions type TiKVRegionStatusExtractor struct { extractHelper @@ -1807,92 +1728,3 @@ func (e *TiKVRegionStatusExtractor) ExplainInfo(_ base.PhysicalPlan) string { func (e *TiKVRegionStatusExtractor) GetTablesID() []int64 { return e.tablesID } - -// InfoSchemaTablesExtractor is used to extract infoSchema tables related predicates. -type InfoSchemaTablesExtractor struct { - extractHelper - // SkipRequest means the where clause always false, we don't need to request any component - SkipRequest bool - - colNames []string - ColPredicates map[string]set.StringSet -} - -// Extract implements the MemTablePredicateExtractor Extract interface -func (e *InfoSchemaTablesExtractor) Extract(ctx base.PlanContext, - schema *expression.Schema, - names []*types.FieldName, - predicates []expression.Expression, -) (remained []expression.Expression) { - var resultSet, resultSet1 set.StringSet - e.colNames = []string{"table_schema", "constraint_schema", "table_name", "constraint_name", "sequence_schema", "sequence_name", "partition_name", "schema_name", "index_name"} - e.ColPredicates = make(map[string]set.StringSet) - remained = predicates - for _, colName := range e.colNames { - remained, e.SkipRequest, resultSet = e.extractColWithLower(ctx, schema, names, remained, colName) - if e.SkipRequest { - break - } - remained, e.SkipRequest, resultSet1 = e.extractCol(ctx, schema, names, remained, colName, true) - if e.SkipRequest { - break - } - for elt := range resultSet1 { - resultSet.Insert(elt) - } - if len(resultSet) == 0 { - continue - } - e.ColPredicates[colName] = resultSet - } - return remained -} - -// ExplainInfo implements base.MemTablePredicateExtractor interface. -func (e *InfoSchemaTablesExtractor) ExplainInfo(_ base.PhysicalPlan) string { - if e.SkipRequest { - return "skip_request:true" - } - r := new(bytes.Buffer) - colNames := make([]string, 0, len(e.ColPredicates)) - for colName := range e.ColPredicates { - colNames = append(colNames, colName) - } - sort.Strings(colNames) - for _, colName := range colNames { - if len(e.ColPredicates[colName]) > 0 { - fmt.Fprintf(r, "%s:[%s], ", colName, extractStringFromStringSet(e.ColPredicates[colName])) - } - } - - // remove the last ", " in the message info - s := r.String() - if len(s) > 2 { - return s[:len(s)-2] - } - return s -} - -// Filter use the col predicates to filter records. -func (e *InfoSchemaTablesExtractor) Filter(colName string, val string) bool { - if e.SkipRequest { - return true - } - predVals, ok := e.ColPredicates[colName] - if ok && len(predVals) > 0 { - lower, ok := e.isLower[colName] - if ok { - var valStr string - // only have varchar string type, safe to do that. - if lower { - valStr = strings.ToLower(val) - } else { - valStr = strings.ToUpper(val) - } - return !predVals.Exist(valStr) - } - return !predVals.Exist(val) - } - // No need to filter records since no predicate for the column exists. - return false -} diff --git a/pkg/planner/core/metrics/metrics.go b/pkg/planner/core/metrics/metrics.go index 505b297550dd3..4576ca67721a9 100644 --- a/pkg/planner/core/metrics/metrics.go +++ b/pkg/planner/core/metrics/metrics.go @@ -21,15 +21,18 @@ import ( // planner core metrics vars var ( - PseudoEstimationNotAvailable prometheus.Counter - PseudoEstimationOutdate prometheus.Counter - preparedPlanCacheHitCounter prometheus.Counter - nonPreparedPlanCacheHitCounter prometheus.Counter - preparedPlanCacheMissCounter prometheus.Counter - nonPreparedPlanCacheMissCounter prometheus.Counter - nonPreparedPlanCacheUnsupportedCounter prometheus.Counter - sessionPlanCacheInstancePlanNumCounter prometheus.Gauge - sessionPlanCacheInstanceMemoryUsage prometheus.Gauge + PseudoEstimationNotAvailable prometheus.Counter + PseudoEstimationOutdate prometheus.Counter + preparedPlanCacheHitCounter prometheus.Counter + nonPreparedPlanCacheHitCounter prometheus.Counter + preparedPlanCacheMissCounter prometheus.Counter + nonPreparedPlanCacheMissCounter prometheus.Counter + nonPreparedPlanCacheUnsupportedCounter prometheus.Counter + sessionPlanCacheInstancePlanNumCounter prometheus.Gauge + sessionPlanCacheInstanceMemoryUsage prometheus.Gauge + instancePlanCacheInstancePlanNumCounter prometheus.Gauge + instancePlanCacheInstanceMemoryUsage prometheus.Gauge + instancePlanCacheInstanceNumEvict prometheus.Gauge ) func init() { @@ -48,6 +51,9 @@ func InitMetricsVars() { nonPreparedPlanCacheUnsupportedCounter = metrics.PlanCacheMissCounter.WithLabelValues("non-prepared-unsupported") sessionPlanCacheInstancePlanNumCounter = metrics.PlanCacheInstancePlanNumCounter.WithLabelValues(" session-plan-cache") sessionPlanCacheInstanceMemoryUsage = metrics.PlanCacheInstanceMemoryUsage.WithLabelValues(" session-plan-cache") + instancePlanCacheInstancePlanNumCounter = metrics.PlanCacheInstancePlanNumCounter.WithLabelValues(" instance-plan-cache") + instancePlanCacheInstanceMemoryUsage = metrics.PlanCacheInstanceMemoryUsage.WithLabelValues(" instance-plan-cache") + instancePlanCacheInstanceNumEvict = metrics.PlanCacheInstancePlanNumCounter.WithLabelValues(" instance-plan-cache-last-evict") } // GetPlanCacheHitCounter get different plan cache hit counter @@ -72,11 +78,22 @@ func GetNonPrepPlanCacheUnsupportedCounter() prometheus.Counter { } // GetPlanCacheInstanceNumCounter get different plan counter of plan cache -func GetPlanCacheInstanceNumCounter() prometheus.Gauge { +func GetPlanCacheInstanceNumCounter(instancePlanCache bool) prometheus.Gauge { + if instancePlanCache { + return instancePlanCacheInstancePlanNumCounter + } return sessionPlanCacheInstancePlanNumCounter } // GetPlanCacheInstanceMemoryUsage get different plan memory usage counter of plan cache -func GetPlanCacheInstanceMemoryUsage() prometheus.Gauge { +func GetPlanCacheInstanceMemoryUsage(instancePlanCache bool) prometheus.Gauge { + if instancePlanCache { + return instancePlanCacheInstanceMemoryUsage + } return sessionPlanCacheInstanceMemoryUsage } + +// GetPlanCacheInstanceEvict get instance plan cache evict counter. +func GetPlanCacheInstanceEvict() prometheus.Gauge { + return instancePlanCacheInstanceNumEvict +} diff --git a/pkg/planner/core/operator/baseimpl/plan.go b/pkg/planner/core/operator/baseimpl/plan.go index 620bb2b0a3164..81eaf76d16d23 100644 --- a/pkg/planner/core/operator/baseimpl/plan.go +++ b/pkg/planner/core/operator/baseimpl/plan.go @@ -31,7 +31,7 @@ import ( // Plan Should be used as embedded struct in Plan implementations. type Plan struct { ctx context.PlanContext - stats *property.StatsInfo + stats *property.StatsInfo `plan-cache-clone:"shallow"` tp string id int qbBlock int // Query Block offset @@ -138,6 +138,14 @@ func (p *Plan) BuildPlanTrace() *tracing.PlanTrace { return planTrace } +// CloneWithNewCtx clones the plan with new context. +func (p *Plan) CloneWithNewCtx(newCtx base.PlanContext) *Plan { + cloned := new(Plan) + *cloned = *p + cloned.ctx = newCtx + return cloned +} + // CloneForPlanCache clones the plan for Plan Cache. func (*Plan) CloneForPlanCache(base.PlanContext) (cloned base.Plan, ok bool) { return nil, false diff --git a/pkg/planner/core/operator/logicalop/BUILD.bazel b/pkg/planner/core/operator/logicalop/BUILD.bazel index 23670c4961183..c58bffccc93d7 100644 --- a/pkg/planner/core/operator/logicalop/BUILD.bazel +++ b/pkg/planner/core/operator/logicalop/BUILD.bazel @@ -4,25 +4,65 @@ go_library( name = "logicalop", srcs = [ "base_logical_plan.go", + "logical_aggregation.go", + "logical_apply.go", + "logical_cte_table.go", + "logical_expand.go", + "logical_join.go", + "logical_limit.go", + "logical_lock.go", "logical_max_one_row.go", + "logical_mem_table.go", + "logical_partition_union_all.go", + "logical_projection.go", "logical_schema_producer.go", + "logical_selection.go", + "logical_sequence.go", + "logical_show.go", + "logical_show_ddl_jobs.go", + "logical_sort.go", + "logical_table_dual.go", + "logical_top_n.go", + "logical_union_all.go", + "logical_union_scan.go", + "logical_window.go", ], importpath = "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop", visibility = ["//visibility:public"], deps = [ "//pkg/expression", + "//pkg/expression/aggregation", + "//pkg/infoschema", "//pkg/kv", + "//pkg/parser/ast", + "//pkg/parser/auth", + "//pkg/parser/model", + "//pkg/parser/mysql", + "//pkg/planner/cardinality", "//pkg/planner/core/base", + "//pkg/planner/core/constraint", + "//pkg/planner/core/cost", "//pkg/planner/core/operator/baseimpl", + "//pkg/planner/core/rule/util", "//pkg/planner/funcdep", "//pkg/planner/property", "//pkg/planner/util", + "//pkg/planner/util/coreusage", + "//pkg/planner/util/fixcontrol", "//pkg/planner/util/optimizetrace", "//pkg/planner/util/optimizetrace/logicaltrace", "//pkg/planner/util/utilfuncp", + "//pkg/sessionctx", + "//pkg/statistics", "//pkg/types", "//pkg/util/dbterror/plannererrors", + "//pkg/util/hint", + "//pkg/util/intset", "//pkg/util/plancodec", + "//pkg/util/size", "//pkg/util/tracing", + "@com_github_pingcap_errors//:errors", + "@com_github_pingcap_failpoint//:failpoint", + "@com_github_pingcap_tipb//go-tipb", ], ) diff --git a/pkg/planner/core/logical_aggregation.go b/pkg/planner/core/operator/logicalop/logical_aggregation.go similarity index 94% rename from pkg/planner/core/logical_aggregation.go rename to pkg/planner/core/operator/logicalop/logical_aggregation.go index 81d9f7e7cece1..b27538c1b558d 100644 --- a/pkg/planner/core/logical_aggregation.go +++ b/pkg/planner/core/operator/logicalop/logical_aggregation.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package core +package logicalop import ( "bytes" @@ -24,7 +24,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/planner/cardinality" "github.com/pingcap/tidb/pkg/planner/core/base" - "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" + ruleutil "github.com/pingcap/tidb/pkg/planner/core/rule/util" fd "github.com/pingcap/tidb/pkg/planner/funcdep" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util" @@ -38,7 +38,7 @@ import ( // LogicalAggregation represents an aggregate plan. type LogicalAggregation struct { - logicalop.LogicalSchemaProducer + LogicalSchemaProducer AggFuncs []*aggregation.AggFuncDesc GroupByItems []expression.Expression @@ -57,7 +57,7 @@ type LogicalAggregation struct { // Init initializes LogicalAggregation. func (la LogicalAggregation) Init(ctx base.PlanContext, offset int) *LogicalAggregation { - la.BaseLogicalPlan = logicalop.NewBaseLogicalPlan(ctx, plancodec.TypeAgg, &la, offset) + la.BaseLogicalPlan = NewBaseLogicalPlan(ctx, plancodec.TypeAgg, &la, offset) return &la } @@ -86,14 +86,14 @@ func (la *LogicalAggregation) ExplainInfo() string { func (la *LogicalAggregation) ReplaceExprColumns(replace map[string]*expression.Column) { for _, agg := range la.AggFuncs { for _, aggExpr := range agg.Args { - ResolveExprAndReplace(aggExpr, replace) + ruleutil.ResolveExprAndReplace(aggExpr, replace) } for _, orderExpr := range agg.OrderByItems { - ResolveExprAndReplace(orderExpr.Expr, replace) + ruleutil.ResolveExprAndReplace(orderExpr.Expr, replace) } } for _, gbyItem := range la.GroupByItems { - ResolveExprAndReplace(gbyItem, replace) + ruleutil.ResolveExprAndReplace(gbyItem, replace) } } @@ -191,16 +191,6 @@ func (la *LogicalAggregation) PruneColumns(parentUsedCols []*expression.Column, } // update children[0] child = la.Children()[0] - // Do an extra Projection Elimination here. This is specially for empty Projection below Aggregation. - // This kind of Projection would cause some bugs for MPP plan and is safe to be removed. - // This kind of Projection should be removed in Projection Elimination, but currently PrunColumnsAgain is - // the last rule. So we specially handle this case here. - if childProjection, isProjection := child.(*LogicalProjection); isProjection { - if len(childProjection.Exprs) == 0 && childProjection.Schema().Len() == 0 { - childOfChild := childProjection.Children()[0] - la.SetChildren(childOfChild) - } - } return la, nil } @@ -216,7 +206,7 @@ func (la *LogicalAggregation) BuildKeyInfo(selfSchema *expression.Schema, childS return } la.LogicalSchemaProducer.BuildKeyInfo(selfSchema, childSchema) - la.buildSelfKeyInfo(selfSchema) + la.BuildSelfKeyInfo(selfSchema) } // PushDownTopN inherits BaseLogicalPlan.LogicalPlan.<5rd> implementation. @@ -300,33 +290,7 @@ func (la *LogicalAggregation) PreparePossibleProperties(_ *expression.Schema, ch // ExhaustPhysicalPlans implements base.LogicalPlan.<14th> interface. func (la *LogicalAggregation) ExhaustPhysicalPlans(prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { - if la.PreferAggToCop { - if !la.CanPushToCop(kv.TiKV) { - la.SCtx().GetSessionVars().StmtCtx.SetHintWarning( - "Optimizer Hint AGG_TO_COP is inapplicable") - la.PreferAggToCop = false - } - } - - preferHash, preferStream := la.ResetHintIfConflicted() - - hashAggs := utilfuncp.GetHashAggs(la, prop) - if hashAggs != nil && preferHash { - return hashAggs, true, nil - } - - streamAggs := utilfuncp.GetStreamAggs(la, prop) - if streamAggs != nil && preferStream { - return streamAggs, true, nil - } - - aggs := append(hashAggs, streamAggs...) - - if streamAggs == nil && preferStream && !prop.IsSortItemEmpty() { - la.SCtx().GetSessionVars().StmtCtx.SetHintWarning("Optimizer Hint STREAM_AGG is inapplicable") - } - - return aggs, !(preferStream || preferHash), nil + return utilfuncp.ExhaustPhysicalPlans4LogicalAggregation(la, prop) } // ExtractCorrelatedCols implements base.LogicalPlan.<15th> interface. @@ -714,7 +678,8 @@ func (la *LogicalAggregation) pushDownPredicatesForAggregation(cond expression.E return condsToPush, ret } -func (la *LogicalAggregation) buildSelfKeyInfo(selfSchema *expression.Schema) { +// BuildSelfKeyInfo builds the key information for the aggregation itself. +func (la *LogicalAggregation) BuildSelfKeyInfo(selfSchema *expression.Schema) { groupByCols := la.GetGroupByCols() if len(groupByCols) == len(la.GroupByItems) && len(la.GroupByItems) > 0 { indices := selfSchema.ColumnsIndices(groupByCols) @@ -731,8 +696,8 @@ func (la *LogicalAggregation) buildSelfKeyInfo(selfSchema *expression.Schema) { } } -// canPullUp checks if an aggregation can be pulled up. An aggregate function like count(*) cannot be pulled up. -func (la *LogicalAggregation) canPullUp() bool { +// CanPullUp checks if an aggregation can be pulled up. An aggregate function like count(*) cannot be pulled up. +func (la *LogicalAggregation) CanPullUp() bool { if len(la.GroupByItems) > 0 { return false } diff --git a/pkg/planner/core/logical_apply.go b/pkg/planner/core/operator/logicalop/logical_apply.go similarity index 95% rename from pkg/planner/core/logical_apply.go rename to pkg/planner/core/operator/logicalop/logical_apply.go index 181484d75c3b1..7ba12a78189f0 100644 --- a/pkg/planner/core/logical_apply.go +++ b/pkg/planner/core/operator/logicalop/logical_apply.go @@ -12,20 +12,20 @@ // See the License for the specific language governing permissions and // limitations under the License. -package core +package logicalop import ( "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/planner/core/base" - "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" fd "github.com/pingcap/tidb/pkg/planner/funcdep" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util/coreusage" "github.com/pingcap/tidb/pkg/planner/util/fixcontrol" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace/logicaltrace" + "github.com/pingcap/tidb/pkg/planner/util/utilfuncp" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/plancodec" ) @@ -41,7 +41,7 @@ type LogicalApply struct { // Init initializes LogicalApply. func (la LogicalApply) Init(ctx base.PlanContext, offset int) *LogicalApply { - la.BaseLogicalPlan = logicalop.NewBaseLogicalPlan(ctx, plancodec.TypeApply, &la, offset) + la.BaseLogicalPlan = NewBaseLogicalPlan(ctx, plancodec.TypeApply, &la, offset) return &la } @@ -73,7 +73,7 @@ func (la *LogicalApply) ReplaceExprColumns(replace map[string]*expression.Column // PruneColumns implements base.LogicalPlan.<2nd> interface. func (la *LogicalApply) PruneColumns(parentUsedCols []*expression.Column, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, error) { - leftCols, rightCols := la.extractUsedCols(parentUsedCols) + leftCols, rightCols := la.ExtractUsedCols(parentUsedCols) allowEliminateApply := fixcontrol.GetBoolWithDefault(la.SCtx().GetSessionVars().GetOptimizerFixControlMap(), fixcontrol.Fix45822, true) var err error if allowEliminateApply && rightCols == nil && la.JoinType == LeftOuterJoin { @@ -88,7 +88,6 @@ func (la *LogicalApply) PruneColumns(parentUsedCols []*expression.Column, opt *o if err != nil { return nil, err } - addConstOneForEmptyProjection(la.Children()[1]) la.CorCols = coreusage.ExtractCorColumnsBySchema4LogicalPlan(la.Children()[1], la.Children()[0].Schema()) for _, col := range la.CorCols { @@ -100,8 +99,7 @@ func (la *LogicalApply) PruneColumns(parentUsedCols []*expression.Column, opt *o if err != nil { return nil, err } - addConstOneForEmptyProjection(la.Children()[0]) - la.mergeSchema() + la.MergeSchema() return la, nil } @@ -172,7 +170,7 @@ func (la *LogicalApply) ExtractColGroups(colGroups [][]*expression.Column) [][]* // ExhaustPhysicalPlans implements base.LogicalPlan.<14th> interface. func (la *LogicalApply) ExhaustPhysicalPlans(prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { - return ExhaustPhysicalPlans4LogicalApply(la, prop) + return utilfuncp.ExhaustPhysicalPlans4LogicalApply(la, prop) } // ExtractCorrelatedCols implements base.LogicalPlan.<15th> interface. @@ -224,11 +222,11 @@ func (la *LogicalApply) ExtractFD() *fd.FDSet { } switch la.JoinType { case InnerJoin: - return la.extractFDForInnerJoin(eqCond) + return la.ExtractFDForInnerJoin(eqCond) case LeftOuterJoin, RightOuterJoin: - return la.extractFDForOuterJoin(eqCond) + return la.ExtractFDForOuterJoin(eqCond) case SemiJoin: - return la.extractFDForSemiJoin(eqCond) + return la.ExtractFDForSemiJoin(eqCond) default: return &fd.FDSet{HashCodeToUniqueID: make(map[string]int)} } diff --git a/pkg/planner/core/logical_cte_table.go b/pkg/planner/core/operator/logicalop/logical_cte_table.go similarity index 93% rename from pkg/planner/core/logical_cte_table.go rename to pkg/planner/core/operator/logicalop/logical_cte_table.go index 9c9e95089b244..6a0909ab42bea 100644 --- a/pkg/planner/core/logical_cte_table.go +++ b/pkg/planner/core/operator/logicalop/logical_cte_table.go @@ -12,20 +12,20 @@ // See the License for the specific language governing permissions and // limitations under the License. -package core +package logicalop import ( "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/planner/core/base" - "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" + "github.com/pingcap/tidb/pkg/planner/util/utilfuncp" "github.com/pingcap/tidb/pkg/util/plancodec" ) // LogicalCTETable is for CTE table type LogicalCTETable struct { - logicalop.LogicalSchemaProducer + LogicalSchemaProducer SeedStat *property.StatsInfo Name string @@ -37,7 +37,7 @@ type LogicalCTETable struct { // Init only assigns type and context. func (p LogicalCTETable) Init(ctx base.PlanContext, offset int) *LogicalCTETable { - p.BaseLogicalPlan = logicalop.NewBaseLogicalPlan(ctx, plancodec.TypeCTETable, &p, offset) + p.BaseLogicalPlan = NewBaseLogicalPlan(ctx, plancodec.TypeCTETable, &p, offset) return &p } @@ -51,7 +51,7 @@ func (p LogicalCTETable) Init(ctx base.PlanContext, offset int) *LogicalCTETable // FindBestTask implements the base.LogicalPlan.<3rd> interface. func (p *LogicalCTETable) FindBestTask(prop *property.PhysicalProperty, _ *base.PlanCounterTp, _ *optimizetrace.PhysicalOptimizeOp) (t base.Task, cntPlan int64, err error) { - return findBestTask4LogicalCTETable(p, prop, nil, nil) + return utilfuncp.FindBestTask4LogicalCTETable(p, prop, nil, nil) } // BuildKeyInfo inherits BaseLogicalPlan.LogicalPlan.<4th> implementation. diff --git a/pkg/planner/core/logical_expand.go b/pkg/planner/core/operator/logicalop/logical_expand.go similarity index 67% rename from pkg/planner/core/logical_expand.go rename to pkg/planner/core/operator/logicalop/logical_expand.go index 0197c210061eb..bd5cc3ba2a054 100644 --- a/pkg/planner/core/logical_expand.go +++ b/pkg/planner/core/operator/logicalop/logical_expand.go @@ -12,23 +12,28 @@ // See the License for the specific language governing permissions and // limitations under the License. -package core +package logicalop import ( "bytes" "fmt" "github.com/pingcap/tidb/pkg/expression" - "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" + "github.com/pingcap/tidb/pkg/planner/core/base" fd "github.com/pingcap/tidb/pkg/planner/funcdep" + "github.com/pingcap/tidb/pkg/planner/property" + "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" + "github.com/pingcap/tidb/pkg/planner/util/optimizetrace/logicaltrace" + "github.com/pingcap/tidb/pkg/planner/util/utilfuncp" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/dbterror/plannererrors" + "github.com/pingcap/tidb/pkg/util/plancodec" "github.com/pingcap/tipb/go-tipb" ) // LogicalExpand represents a logical Expand OP serves for data replication requirement. type LogicalExpand struct { - logicalop.LogicalSchemaProducer + LogicalSchemaProducer // distinct group by columns. (maybe projected below if it's a non-col) DistinctGroupByCol []*expression.Column @@ -59,14 +64,95 @@ type LogicalExpand struct { GPosName *types.FieldName } -// ExtractFD implements the logical plan interface, extracting the FD from bottom up. -func (p *LogicalExpand) ExtractFD() *fd.FDSet { - // basically extract the children's fdSet. - return p.LogicalSchemaProducer.ExtractFD() +// Init initializes LogicalProjection. +func (p LogicalExpand) Init(ctx base.PlanContext, offset int) *LogicalExpand { + p.BaseLogicalPlan = NewBaseLogicalPlan(ctx, plancodec.TypeExpand, &p, offset) + return &p } -// ExtractCorrelatedCols implements LogicalPlan interface. +// *************************** start implementation of logicalPlan interface *************************** + +// HashCode inherits BaseLogicalPlan.LogicalPlan.<0th> implementation. + +// PredicatePushDown implements base.LogicalPlan.<1st> interface. +func (p *LogicalExpand) PredicatePushDown(predicates []expression.Expression, opt *optimizetrace.LogicalOptimizeOp) (ret []expression.Expression, retPlan base.LogicalPlan) { + // Note that, grouping column related predicates can't be pushed down, since grouping column has nullability change after Expand OP itself. + // condition related with grouping column shouldn't be pushed down through it. + // currently, since expand is adjacent to aggregate, any filter above aggregate wanted to be push down through expand only have two cases: + // 1. agg function related filters. (these condition is always above aggregate) + // 2. group-by item related filters. (there condition is always related with grouping sets columns, which can't be pushed down) + // As a whole, we banned all the predicates pushing-down logic here that remained in Expand OP, and constructing a new selection above it if any. + remained, child := p.BaseLogicalPlan.PredicatePushDown(nil, opt) + return append(remained, predicates...), child +} + +// PruneColumns implement the base.LogicalPlan.<2nd> interface. +// logicExpand is built in the logical plan building phase, where all the column prune is not done yet. So the +// expand projection expressions is meaningless if it built at that time. (we only maintain its schema, while +// the level projection expressions construction is left to the last logical optimize rule) +// +// so when do the rule_column_pruning here, we just prune the schema is enough. +func (p *LogicalExpand) PruneColumns(parentUsedCols []*expression.Column, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, error) { + // Expand need those extra redundant distinct group by columns projected from underlying projection. + // distinct GroupByCol must be used by aggregate above, to make sure this, append DistinctGroupByCol again. + parentUsedCols = append(parentUsedCols, p.DistinctGroupByCol...) + used := expression.GetUsedList(p.SCtx().GetExprCtx().GetEvalCtx(), parentUsedCols, p.Schema()) + prunedColumns := make([]*expression.Column, 0) + for i := len(used) - 1; i >= 0; i-- { + if !used[i] { + prunedColumns = append(prunedColumns, p.Schema().Columns[i]) + p.Schema().Columns = append(p.Schema().Columns[:i], p.Schema().Columns[i+1:]...) + p.SetOutputNames(append(p.OutputNames()[:i], p.OutputNames()[i+1:]...)) + } + } + logicaltrace.AppendColumnPruneTraceStep(p, prunedColumns, opt) + // Underlying still need to keep the distinct group by columns and parent used columns. + var err error + p.Children()[0], err = p.Children()[0].PruneColumns(parentUsedCols, opt) + if err != nil { + return nil, err + } + return p, nil +} + +// FindBestTask inherits BaseLogicalPlan.LogicalPlan.<3rd> implementation. + +// BuildKeyInfo inherits BaseLogicalPlan.LogicalPlan.<4th> implementation. + +// PushDownTopN inherits BaseLogicalPlan.LogicalPlan.<5th> implementation. + +// DeriveTopN inherits BaseLogicalPlan.LogicalPlan.<6th> implementation. + +// PredicateSimplification inherits BaseLogicalPlan.LogicalPlan.<7th> implementation. + +// ConstantPropagation inherits BaseLogicalPlan.LogicalPlan.<8th> implementation. + +// PullUpConstantPredicates inherits BaseLogicalPlan.LogicalPlan.<9th> implementation. + +// RecursiveDeriveStats inherits BaseLogicalPlan.LogicalPlan.<10th> implementation. + +// DeriveStats inherits BaseLogicalPlan.LogicalPlan.<11th> implementation. + +// ExtractColGroups inherits BaseLogicalPlan.LogicalPlan.<12th> implementation. + +// PreparePossibleProperties inherits BaseLogicalPlan.LogicalPlan.<13th> implementation. + +// ExhaustPhysicalPlans implements base.LogicalPlan.<14th> interface. +func (p *LogicalExpand) ExhaustPhysicalPlans(prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { + return utilfuncp.ExhaustPhysicalPlans4LogicalExpand(p, prop) +} + +// ExtractCorrelatedCols implements base.LogicalPlan.<15th> interface. func (p *LogicalExpand) ExtractCorrelatedCols() []*expression.CorrelatedColumn { + // if p.LevelExprs is nil, it means the GenLevelProjections has not been called yet, + // which is done in logical optimizing phase. While for building correlated subquery + // plan, the ExtractCorrelatedCols will be called once after building, so we should + // distinguish the case here. + if p.LevelExprs == nil { + // since level projections generation don't produce any correlated columns, just + // return nil. + return nil + } corCols := make([]*expression.CorrelatedColumn, 0, len(p.LevelExprs[0])) for _, lExpr := range p.LevelExprs { for _, expr := range lExpr { @@ -76,6 +162,30 @@ func (p *LogicalExpand) ExtractCorrelatedCols() []*expression.CorrelatedColumn { return corCols } +// MaxOneRow inherits BaseLogicalPlan.LogicalPlan.<16th> implementation. + +// Children inherits BaseLogicalPlan.LogicalPlan.<17th> implementation. + +// SetChildren inherits BaseLogicalPlan.LogicalPlan.<18th> implementation. + +// SetChild inherits BaseLogicalPlan.LogicalPlan.<19th> implementation. + +// RollBackTaskMap inherits BaseLogicalPlan.LogicalPlan.<20th> implementation. + +// CanPushToCop inherits BaseLogicalPlan.LogicalPlan.<21st> implementation. + +// ExtractFD implements the base.LogicalPlan.<22nd> interface, extracting the FD from bottom up. +func (p *LogicalExpand) ExtractFD() *fd.FDSet { + // basically extract the children's fdSet. + return p.LogicalSchemaProducer.ExtractFD() +} + +// GetBaseLogicalPlan inherits BaseLogicalPlan.LogicalPlan.<23rd> implementation. + +// ConvertOuterToInnerJoin inherits BaseLogicalPlan.LogicalPlan.<24th> implementation. + +// *************************** end implementation of logicalPlan interface *************************** + // GetUsedCols extracts all of the Columns used by proj. func (*LogicalExpand) GetUsedCols() (usedCols []*expression.Column) { // be careful that, expand OP itself, shouldn't output its own used cols, because @@ -184,7 +294,8 @@ func (p *LogicalExpand) GenerateGroupingMarks(sourceCols []*expression.Column) [ return resSliceMap } -func (p *LogicalExpand) trySubstituteExprWithGroupingSetCol(expr expression.Expression) (expression.Expression, bool) { +// TrySubstituteExprWithGroupingSetCol is used to substitute the original gby expression with new gby col. +func (p *LogicalExpand) TrySubstituteExprWithGroupingSetCol(expr expression.Expression) (expression.Expression, bool) { // since all the original group items has been projected even single col, // let's check the origin gby expression here, and map it to new gby col. for i, oneExpr := range p.DistinctGbyExprs { @@ -197,8 +308,8 @@ func (p *LogicalExpand) trySubstituteExprWithGroupingSetCol(expr expression.Expr return expr, false } -// CheckGroupingFuncArgsInGroupBy checks whether grouping function args is in grouping items. -func (p *LogicalExpand) resolveGroupingFuncArgsInGroupBy(groupingFuncArgs []expression.Expression) ([]*expression.Column, error) { +// ResolveGroupingFuncArgsInGroupBy checks whether grouping function args is in grouping items. +func (p *LogicalExpand) ResolveGroupingFuncArgsInGroupBy(groupingFuncArgs []expression.Expression) ([]*expression.Column, error) { // build GBYColMap distinctGBYColMap := make(map[int64]struct{}, len(p.DistinctGroupByCol)) for _, oneDistinctGBYCol := range p.DistinctGroupByCol { diff --git a/pkg/planner/core/logical_join.go b/pkg/planner/core/operator/logicalop/logical_join.go similarity index 84% rename from pkg/planner/core/logical_join.go rename to pkg/planner/core/operator/logicalop/logical_join.go index 050b3a250ca7c..2f75c62e38f3e 100644 --- a/pkg/planner/core/logical_join.go +++ b/pkg/planner/core/operator/logicalop/logical_join.go @@ -12,22 +12,22 @@ // See the License for the specific language governing permissions and // limitations under the License. -package core +package logicalop import ( "bytes" "fmt" "math" + "math/bits" - "github.com/pingcap/failpoint" + "github.com/pingcap/errors" "github.com/pingcap/tidb/pkg/expression" - "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/planner/cardinality" "github.com/pingcap/tidb/pkg/planner/core/base" "github.com/pingcap/tidb/pkg/planner/core/cost" - "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" + ruleutil "github.com/pingcap/tidb/pkg/planner/core/rule/util" "github.com/pingcap/tidb/pkg/planner/funcdep" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util" @@ -93,7 +93,7 @@ func (tp JoinType) String() string { // LogicalJoin is the logical join plan. type LogicalJoin struct { - logicalop.LogicalSchemaProducer + LogicalSchemaProducer JoinType JoinType Reordered bool @@ -146,7 +146,7 @@ type LogicalJoin struct { // Init initializes LogicalJoin. func (p LogicalJoin) Init(ctx base.PlanContext, offset int) *LogicalJoin { - p.BaseLogicalPlan = logicalop.NewBaseLogicalPlan(ctx, plancodec.TypeJoin, &p, offset) + p.BaseLogicalPlan = NewBaseLogicalPlan(ctx, plancodec.TypeJoin, &p, offset) return &p } @@ -177,16 +177,16 @@ func (p *LogicalJoin) ExplainInfo() string { // ReplaceExprColumns implements base.LogicalPlan interface. func (p *LogicalJoin) ReplaceExprColumns(replace map[string]*expression.Column) { for _, equalExpr := range p.EqualConditions { - ResolveExprAndReplace(equalExpr, replace) + ruleutil.ResolveExprAndReplace(equalExpr, replace) } for _, leftExpr := range p.LeftConditions { - ResolveExprAndReplace(leftExpr, replace) + ruleutil.ResolveExprAndReplace(leftExpr, replace) } for _, rightExpr := range p.RightConditions { - ResolveExprAndReplace(rightExpr, replace) + ruleutil.ResolveExprAndReplace(rightExpr, replace) } for _, otherExpr := range p.OtherConditions { - ResolveExprAndReplace(otherExpr, replace) + ruleutil.ResolveExprAndReplace(otherExpr, replace) } } @@ -205,7 +205,7 @@ func (p *LogicalJoin) PredicatePushDown(predicates []expression.Expression, opt predicates = p.outerJoinPropConst(predicates) dual := Conds2TableDual(p, predicates) if dual != nil { - appendTableDualTraceStep(p, dual, predicates, opt) + AppendTableDualTraceStep(p, dual, predicates, opt) return ret, dual } // Handle where conditions @@ -224,7 +224,7 @@ func (p *LogicalJoin) PredicatePushDown(predicates []expression.Expression, opt predicates = p.outerJoinPropConst(predicates) dual := Conds2TableDual(p, predicates) if dual != nil { - appendTableDualTraceStep(p, dual, predicates, opt) + AppendTableDualTraceStep(p, dual, predicates, opt) return ret, dual } // Handle where conditions @@ -251,7 +251,7 @@ func (p *LogicalJoin) PredicatePushDown(predicates []expression.Expression, opt // Return table dual when filter is constant false or null. dual := Conds2TableDual(p, tempCond) if dual != nil { - appendTableDualTraceStep(p, dual, tempCond, opt) + AppendTableDualTraceStep(p, dual, tempCond, opt) return ret, dual } equalCond, leftPushCond, rightPushCond, otherCond = p.extractOnCondition(tempCond, true, true) @@ -266,7 +266,7 @@ func (p *LogicalJoin) PredicatePushDown(predicates []expression.Expression, opt // Return table dual when filter is constant false or null. dual := Conds2TableDual(p, predicates) if dual != nil { - appendTableDualTraceStep(p, dual, predicates, opt) + AppendTableDualTraceStep(p, dual, predicates, opt) return ret, dual } // `predicates` should only contain left conditions or constant filters. @@ -287,28 +287,26 @@ func (p *LogicalJoin) PredicatePushDown(predicates []expression.Expression, opt utilfuncp.AddSelection(p, lCh, leftRet, 0, opt) utilfuncp.AddSelection(p, rCh, rightRet, 1, opt) p.updateEQCond() - buildKeyInfo(p) + ruleutil.BuildKeyInfoPortal(p) return ret, p.Self() } // PruneColumns implements the base.LogicalPlan.<2nd> interface. func (p *LogicalJoin) PruneColumns(parentUsedCols []*expression.Column, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, error) { - leftCols, rightCols := p.extractUsedCols(parentUsedCols) + leftCols, rightCols := p.ExtractUsedCols(parentUsedCols) var err error p.Children()[0], err = p.Children()[0].PruneColumns(leftCols, opt) if err != nil { return nil, err } - addConstOneForEmptyProjection(p.Children()[0]) p.Children()[1], err = p.Children()[1].PruneColumns(rightCols, opt) if err != nil { return nil, err } - addConstOneForEmptyProjection(p.Children()[1]) - p.mergeSchema() + p.MergeSchema() if p.JoinType == LeftOuterSemiJoin || p.JoinType == AntiLeftOuterSemiJoin { joinCol := p.Schema().Columns[len(p.Schema().Columns)-1] parentUsedCols = append(parentUsedCols, joinCol) @@ -601,96 +599,7 @@ func (p *LogicalJoin) PreparePossibleProperties(_ *expression.Schema, childrenPr // If the hint is not matched, it will get other candidates. // If the hint is not figured, we will pick all candidates. func (p *LogicalJoin) ExhaustPhysicalPlans(prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { - failpoint.Inject("MockOnlyEnableIndexHashJoin", func(val failpoint.Value) { - if val.(bool) && !p.SCtx().GetSessionVars().InRestrictedSQL { - indexJoins, _ := tryToGetIndexJoin(p, prop) - failpoint.Return(indexJoins, true, nil) - } - }) - - if !isJoinHintSupportedInMPPMode(p.PreferJoinType) { - if hasMPPJoinHints(p.PreferJoinType) { - // If there are MPP hints but has some conflicts join method hints, all the join hints are invalid. - p.SCtx().GetSessionVars().StmtCtx.SetHintWarning("The MPP join hints are in conflict, and you can only specify join method hints that are currently supported by MPP mode now") - p.PreferJoinType = 0 - } else { - // If there are no MPP hints but has some conflicts join method hints, the MPP mode will be blocked. - p.SCtx().GetSessionVars().RaiseWarningWhenMPPEnforced("MPP mode may be blocked because you have used hint to specify a join algorithm which is not supported by mpp now.") - if prop.IsFlashProp() { - return nil, false, nil - } - } - } - if prop.MPPPartitionTp == property.BroadcastType { - return nil, false, nil - } - joins := make([]base.PhysicalPlan, 0, 8) - canPushToTiFlash := p.CanPushToCop(kv.TiFlash) - if p.SCtx().GetSessionVars().IsMPPAllowed() && canPushToTiFlash { - if (p.PreferJoinType & utilhint.PreferShuffleJoin) > 0 { - if shuffleJoins := tryToGetMppHashJoin(p, prop, false); len(shuffleJoins) > 0 { - return shuffleJoins, true, nil - } - } - if (p.PreferJoinType & utilhint.PreferBCJoin) > 0 { - if bcastJoins := tryToGetMppHashJoin(p, prop, true); len(bcastJoins) > 0 { - return bcastJoins, true, nil - } - } - if preferMppBCJ(p) { - mppJoins := tryToGetMppHashJoin(p, prop, true) - joins = append(joins, mppJoins...) - } else { - mppJoins := tryToGetMppHashJoin(p, prop, false) - joins = append(joins, mppJoins...) - } - } else { - hasMppHints := false - var errMsg string - if (p.PreferJoinType & utilhint.PreferShuffleJoin) > 0 { - errMsg = "The join can not push down to the MPP side, the shuffle_join() hint is invalid" - hasMppHints = true - } - if (p.PreferJoinType & utilhint.PreferBCJoin) > 0 { - errMsg = "The join can not push down to the MPP side, the broadcast_join() hint is invalid" - hasMppHints = true - } - if hasMppHints { - p.SCtx().GetSessionVars().StmtCtx.SetHintWarning(errMsg) - } - } - if prop.IsFlashProp() { - return joins, true, nil - } - - if !p.IsNAAJ() { - // naaj refuse merge join and index join. - mergeJoins := GetMergeJoin(p, prop, p.Schema(), p.StatsInfo(), p.Children()[0].StatsInfo(), p.Children()[1].StatsInfo()) - if (p.PreferJoinType&utilhint.PreferMergeJoin) > 0 && len(mergeJoins) > 0 { - return mergeJoins, true, nil - } - joins = append(joins, mergeJoins...) - - indexJoins, forced := tryToGetIndexJoin(p, prop) - if forced { - return indexJoins, true, nil - } - joins = append(joins, indexJoins...) - } - - hashJoins, forced := getHashJoins(p, prop) - if forced && len(hashJoins) > 0 { - return hashJoins, true, nil - } - joins = append(joins, hashJoins...) - - if p.PreferJoinType > 0 { - // If we reach here, it means we have a hint that doesn't work. - // It might be affected by the required property, so we enforce - // this property and try the hint again. - return joins, false, nil - } - return joins, true, nil + return utilfuncp.ExhaustPhysicalPlans4LogicalJoin(p, prop) } // ExtractCorrelatedCols implements the base.LogicalPlan.<15th> interface. @@ -727,11 +636,11 @@ func (p *LogicalJoin) ExtractCorrelatedCols() []*expression.CorrelatedColumn { func (p *LogicalJoin) ExtractFD() *funcdep.FDSet { switch p.JoinType { case InnerJoin: - return p.extractFDForInnerJoin(nil) + return p.ExtractFDForInnerJoin(nil) case LeftOuterJoin, RightOuterJoin: - return p.extractFDForOuterJoin(nil) + return p.ExtractFDForOuterJoin(nil) case SemiJoin: - return p.extractFDForSemiJoin(nil) + return p.ExtractFDForSemiJoin(nil) default: return &funcdep.FDSet{HashCodeToUniqueID: make(map[string]int)} } @@ -806,7 +715,8 @@ func (p *LogicalJoin) Shallow() *LogicalJoin { return join.Init(p.SCtx(), p.QueryBlockOffset()) } -func (p *LogicalJoin) extractFDForSemiJoin(filtersFromApply []expression.Expression) *funcdep.FDSet { +// ExtractFDForSemiJoin extracts FD for semi join. +func (p *LogicalJoin) ExtractFDForSemiJoin(filtersFromApply []expression.Expression) *funcdep.FDSet { // 1: since semi join will keep the part or all rows of the outer table, it's outer FD can be saved. // 2: the un-projected column will be left for the upper layer projection or already be pruned from bottom up. outerFD, _ := p.Children()[0].ExtractFD(), p.Children()[1].ExtractFD() @@ -815,9 +725,9 @@ func (p *LogicalJoin) extractFDForSemiJoin(filtersFromApply []expression.Express eqCondSlice := expression.ScalarFuncs2Exprs(p.EqualConditions) allConds := append(eqCondSlice, p.OtherConditions...) allConds = append(allConds, filtersFromApply...) - notNullColsFromFilters := ExtractNotNullFromConds(allConds, p) + notNullColsFromFilters := util.ExtractNotNullFromConds(allConds, p) - constUniqueIDs := ExtractConstantCols(p.LeftConditions, p.SCtx(), fds) + constUniqueIDs := util.ExtractConstantCols(p.LeftConditions, p.SCtx(), fds) fds.MakeNotNull(notNullColsFromFilters) fds.AddConstants(constUniqueIDs) @@ -825,7 +735,8 @@ func (p *LogicalJoin) extractFDForSemiJoin(filtersFromApply []expression.Express return fds } -func (p *LogicalJoin) extractFDForInnerJoin(filtersFromApply []expression.Expression) *funcdep.FDSet { +// ExtractFDForInnerJoin extracts FD for inner join. +func (p *LogicalJoin) ExtractFDForInnerJoin(filtersFromApply []expression.Expression) *funcdep.FDSet { leftFD, rightFD := p.Children()[0].ExtractFD(), p.Children()[1].ExtractFD() fds := leftFD fds.MakeCartesianProduct(rightFD) @@ -834,11 +745,11 @@ func (p *LogicalJoin) extractFDForInnerJoin(filtersFromApply []expression.Expres // some join eq conditions are stored in the OtherConditions. allConds := append(eqCondSlice, p.OtherConditions...) allConds = append(allConds, filtersFromApply...) - notNullColsFromFilters := ExtractNotNullFromConds(allConds, p) + notNullColsFromFilters := util.ExtractNotNullFromConds(allConds, p) - constUniqueIDs := ExtractConstantCols(allConds, p.SCtx(), fds) + constUniqueIDs := util.ExtractConstantCols(allConds, p.SCtx(), fds) - equivUniqueIDs := ExtractEquivalenceCols(allConds, p.SCtx(), fds) + equivUniqueIDs := util.ExtractEquivalenceCols(allConds, p.SCtx(), fds) fds.MakeNotNull(notNullColsFromFilters) fds.AddConstants(constUniqueIDs) @@ -866,7 +777,8 @@ func (p *LogicalJoin) extractFDForInnerJoin(filtersFromApply []expression.Expres return fds } -func (p *LogicalJoin) extractFDForOuterJoin(filtersFromApply []expression.Expression) *funcdep.FDSet { +// ExtractFDForOuterJoin extracts FD for outer join. +func (p *LogicalJoin) ExtractFDForOuterJoin(filtersFromApply []expression.Expression) *funcdep.FDSet { outerFD, innerFD := p.Children()[0].ExtractFD(), p.Children()[1].ExtractFD() innerCondition := p.RightConditions outerCondition := p.LeftConditions @@ -889,13 +801,13 @@ func (p *LogicalJoin) extractFDForOuterJoin(filtersFromApply []expression.Expres allConds = append(allConds, innerCondition...) allConds = append(allConds, outerCondition...) allConds = append(allConds, filtersFromApply...) - notNullColsFromFilters := ExtractNotNullFromConds(allConds, p) + notNullColsFromFilters := util.ExtractNotNullFromConds(allConds, p) filterFD := &funcdep.FDSet{HashCodeToUniqueID: make(map[string]int)} - constUniqueIDs := ExtractConstantCols(allConds, p.SCtx(), filterFD) + constUniqueIDs := util.ExtractConstantCols(allConds, p.SCtx(), filterFD) - equivUniqueIDs := ExtractEquivalenceCols(allConds, p.SCtx(), filterFD) + equivUniqueIDs := util.ExtractEquivalenceCols(allConds, p.SCtx(), filterFD) filterFD.AddConstants(constUniqueIDs) equivOuterUniqueIDs := intset.NewFastIntSet() @@ -1116,8 +1028,8 @@ func (p *LogicalJoin) ExtractJoinKeys(childIdx int) *expression.Schema { return expression.NewSchema(joinKeys...) } -// extractUsedCols extracts all the needed columns. -func (p *LogicalJoin) extractUsedCols(parentUsedCols []*expression.Column) (leftCols []*expression.Column, rightCols []*expression.Column) { +// ExtractUsedCols extracts all the needed columns. +func (p *LogicalJoin) ExtractUsedCols(parentUsedCols []*expression.Column) (leftCols []*expression.Column, rightCols []*expression.Column) { for _, eqCond := range p.EqualConditions { parentUsedCols = append(parentUsedCols, expression.ExtractColumns(eqCond)...) } @@ -1146,8 +1058,8 @@ func (p *LogicalJoin) extractUsedCols(parentUsedCols []*expression.Column) (left } // MergeSchema merge the schema of left and right child of join. -func (p *LogicalJoin) mergeSchema() { - p.SetSchema(buildLogicalJoinSchema(p.JoinType, p)) +func (p *LogicalJoin) MergeSchema() { + p.SetSchema(BuildLogicalJoinSchema(p.JoinType, p)) } // pushDownTopNToChild will push a topN to one child of join. The idx stands for join child index. 0 is for left child. @@ -1206,7 +1118,7 @@ func addCandidateSelection(currentPlan base.LogicalPlan, currentChildIdx int, pa parentPlan.SetChild(currentChildIdx, selection) } selection.SetChildren(currentPlan) - appendAddSelectionTraceStep(parentPlan, currentPlan, selection, opt) + AppendAddSelectionTraceStep(parentPlan, currentPlan, selection, opt) if parentPlan == nil { return newRoot } @@ -1378,8 +1290,8 @@ func (p *LogicalJoin) SetPreferredJoinTypeAndOrder(hintInfo *utilhint.PlanHints) return } - lhsAlias := extractTableAlias(p.Children()[0], p.QueryBlockOffset()) - rhsAlias := extractTableAlias(p.Children()[1], p.QueryBlockOffset()) + lhsAlias := util.ExtractTableAlias(p.Children()[0], p.QueryBlockOffset()) + rhsAlias := util.ExtractTableAlias(p.Children()[1], p.QueryBlockOffset()) if hintInfo.IfPreferMergeJoin(lhsAlias) { p.PreferJoinType |= utilhint.PreferMergeJoin p.LeftPreferJoinType |= utilhint.PreferMergeJoin @@ -1585,10 +1497,10 @@ func (p *LogicalJoin) updateEQCond() { for i := range leftKeys { lKey, rKey := leftKeys[i], rightKeys[i] if lProj != nil { - lKey = lProj.appendExpr(lKey) + lKey = lProj.AppendExpr(lKey) } if rProj != nil { - rKey = rProj.appendExpr(rKey) + rKey = rProj.AppendExpr(rKey) } eqCond := expression.NewFunctionInternal(p.SCtx().GetExprCtx(), ast.EQ, types.NewFieldType(mysql.TypeTiny), lKey, rKey) if isNA { @@ -1671,3 +1583,257 @@ func (p *LogicalJoin) outerJoinPropConst(predicates []expression.Expression) []e p.AttachOnConds(joinConds) return predicates } + +func mergeOnClausePredicates(p *LogicalJoin, predicates []expression.Expression) []expression.Expression { + combinedCond := make([]expression.Expression, 0, + len(p.LeftConditions)+len(p.RightConditions)+ + len(p.EqualConditions)+len(p.OtherConditions)+ + len(predicates)) + combinedCond = append(combinedCond, p.LeftConditions...) + combinedCond = append(combinedCond, p.RightConditions...) + combinedCond = append(combinedCond, expression.ScalarFuncs2Exprs(p.EqualConditions)...) + combinedCond = append(combinedCond, p.OtherConditions...) + combinedCond = append(combinedCond, predicates...) + return combinedCond +} + +func appendTopNPushDownJoinTraceStep(p *LogicalJoin, topN *LogicalTopN, idx int, opt *optimizetrace.LogicalOptimizeOp) { + ectx := p.SCtx().GetExprCtx().GetEvalCtx() + action := func() string { + buffer := bytes.NewBufferString(fmt.Sprintf("%v_%v is added and pushed into %v_%v's ", + topN.TP(), topN.ID(), p.TP(), p.ID())) + if idx == 0 { + buffer.WriteString("left ") + } else { + buffer.WriteString("right ") + } + buffer.WriteString("table") + return buffer.String() + } + reason := func() string { + buffer := bytes.NewBufferString(fmt.Sprintf("%v_%v's joinType is %v, and all ByItems[", p.TP(), p.ID(), p.JoinType.String())) + for i, item := range topN.ByItems { + if i > 0 { + buffer.WriteString(",") + } + buffer.WriteString(item.StringWithCtx(ectx, errors.RedactLogDisable)) + } + buffer.WriteString("] contained in ") + if idx == 0 { + buffer.WriteString("left ") + } else { + buffer.WriteString("right ") + } + buffer.WriteString("table") + return buffer.String() + } + opt.AppendStepToCurrent(p.ID(), p.TP(), reason, action) +} + +// AppendAddSelectionTraceStep appends a trace step for adding a selection operator. +func AppendAddSelectionTraceStep(p base.LogicalPlan, child base.LogicalPlan, sel *LogicalSelection, opt *optimizetrace.LogicalOptimizeOp) { + reason := func() string { + return "" + } + action := func() string { + return fmt.Sprintf("add %v_%v to connect %v_%v and %v_%v", sel.TP(), sel.ID(), p.TP(), p.ID(), child.TP(), child.ID()) + } + opt.AppendStepToCurrent(sel.ID(), sel.TP(), reason, action) +} + +// containDifferentJoinTypes checks whether `PreferJoinType` contains different +// join types. +func containDifferentJoinTypes(preferJoinType uint) bool { + preferJoinType &= ^utilhint.PreferNoHashJoin + preferJoinType &= ^utilhint.PreferNoMergeJoin + preferJoinType &= ^utilhint.PreferNoIndexJoin + preferJoinType &= ^utilhint.PreferNoIndexHashJoin + preferJoinType &= ^utilhint.PreferNoIndexMergeJoin + + inlMask := utilhint.PreferRightAsINLJInner ^ utilhint.PreferLeftAsINLJInner + inlhjMask := utilhint.PreferRightAsINLHJInner ^ utilhint.PreferLeftAsINLHJInner + inlmjMask := utilhint.PreferRightAsINLMJInner ^ utilhint.PreferLeftAsINLMJInner + hjRightBuildMask := utilhint.PreferRightAsHJBuild ^ utilhint.PreferLeftAsHJProbe + hjLeftBuildMask := utilhint.PreferLeftAsHJBuild ^ utilhint.PreferRightAsHJProbe + + mppMask := utilhint.PreferShuffleJoin ^ utilhint.PreferBCJoin + mask := inlMask ^ inlhjMask ^ inlmjMask ^ hjRightBuildMask ^ hjLeftBuildMask + onesCount := bits.OnesCount(preferJoinType & ^mask & ^mppMask) + if onesCount > 1 || onesCount == 1 && preferJoinType&mask > 0 { + return true + } + + cnt := 0 + if preferJoinType&inlMask > 0 { + cnt++ + } + if preferJoinType&inlhjMask > 0 { + cnt++ + } + if preferJoinType&inlmjMask > 0 { + cnt++ + } + if preferJoinType&hjLeftBuildMask > 0 { + cnt++ + } + if preferJoinType&hjRightBuildMask > 0 { + cnt++ + } + return cnt > 1 +} + +func setPreferredJoinTypeFromOneSide(preferJoinType uint, isLeft bool) (resJoinType uint) { + if preferJoinType == 0 { + return + } + if preferJoinType&utilhint.PreferINLJ > 0 { + preferJoinType &= ^utilhint.PreferINLJ + if isLeft { + resJoinType |= utilhint.PreferLeftAsINLJInner + } else { + resJoinType |= utilhint.PreferRightAsINLJInner + } + } + if preferJoinType&utilhint.PreferINLHJ > 0 { + preferJoinType &= ^utilhint.PreferINLHJ + if isLeft { + resJoinType |= utilhint.PreferLeftAsINLHJInner + } else { + resJoinType |= utilhint.PreferRightAsINLHJInner + } + } + if preferJoinType&utilhint.PreferINLMJ > 0 { + preferJoinType &= ^utilhint.PreferINLMJ + if isLeft { + resJoinType |= utilhint.PreferLeftAsINLMJInner + } else { + resJoinType |= utilhint.PreferRightAsINLMJInner + } + } + if preferJoinType&utilhint.PreferHJBuild > 0 { + preferJoinType &= ^utilhint.PreferHJBuild + if isLeft { + resJoinType |= utilhint.PreferLeftAsHJBuild + } else { + resJoinType |= utilhint.PreferRightAsHJBuild + } + } + if preferJoinType&utilhint.PreferHJProbe > 0 { + preferJoinType &= ^utilhint.PreferHJProbe + if isLeft { + resJoinType |= utilhint.PreferLeftAsHJProbe + } else { + resJoinType |= utilhint.PreferRightAsHJProbe + } + } + resJoinType |= preferJoinType + return +} + +// DeriveOtherConditions given a LogicalJoin, check the OtherConditions to see if we can derive more +// conditions for left/right child pushdown. +func DeriveOtherConditions( + p *LogicalJoin, leftSchema *expression.Schema, rightSchema *expression.Schema, + deriveLeft bool, deriveRight bool) ( + leftCond []expression.Expression, rightCond []expression.Expression) { + isOuterSemi := (p.JoinType == LeftOuterSemiJoin) || (p.JoinType == AntiLeftOuterSemiJoin) + ctx := p.SCtx() + exprCtx := ctx.GetExprCtx() + for _, expr := range p.OtherConditions { + if deriveLeft { + leftRelaxedCond := expression.DeriveRelaxedFiltersFromDNF(exprCtx, expr, leftSchema) + if leftRelaxedCond != nil { + leftCond = append(leftCond, leftRelaxedCond) + } + notNullExpr := deriveNotNullExpr(ctx, expr, leftSchema) + if notNullExpr != nil { + leftCond = append(leftCond, notNullExpr) + } + } + if deriveRight { + rightRelaxedCond := expression.DeriveRelaxedFiltersFromDNF(exprCtx, expr, rightSchema) + if rightRelaxedCond != nil { + rightCond = append(rightCond, rightRelaxedCond) + } + // For LeftOuterSemiJoin and AntiLeftOuterSemiJoin, we can actually generate + // `col is not null` according to expressions in `OtherConditions` now, but we + // are putting column equal condition converted from `in (subq)` into + // `OtherConditions`(@sa https://github.com/pingcap/tidb/pull/9051), then it would + // cause wrong results, so we disable this optimization for outer semi joins now. + // TODO enable this optimization for outer semi joins later by checking whether + // condition in `OtherConditions` is converted from `in (subq)`. + if isOuterSemi { + continue + } + notNullExpr := deriveNotNullExpr(ctx, expr, rightSchema) + if notNullExpr != nil { + rightCond = append(rightCond, notNullExpr) + } + } + } + return +} + +// deriveNotNullExpr generates a new expression `not(isnull(col))` given `col1 op col2`, +// in which `col` is in specified schema. Caller guarantees that only one of `col1` or +// `col2` is in schema. +func deriveNotNullExpr(ctx base.PlanContext, expr expression.Expression, schema *expression.Schema) expression.Expression { + binop, ok := expr.(*expression.ScalarFunction) + if !ok || len(binop.GetArgs()) != 2 { + return nil + } + arg0, lOK := binop.GetArgs()[0].(*expression.Column) + arg1, rOK := binop.GetArgs()[1].(*expression.Column) + if !lOK || !rOK { + return nil + } + childCol := schema.RetrieveColumn(arg0) + if childCol == nil { + childCol = schema.RetrieveColumn(arg1) + } + if util.IsNullRejected(ctx, schema, expr) && !mysql.HasNotNullFlag(childCol.RetType.GetFlag()) { + return expression.BuildNotNullExpr(ctx.GetExprCtx(), childCol) + } + return nil +} + +// Conds2TableDual builds a LogicalTableDual if cond is constant false or null. +func Conds2TableDual(p base.LogicalPlan, conds []expression.Expression) base.LogicalPlan { + if len(conds) != 1 { + return nil + } + con, ok := conds[0].(*expression.Constant) + if !ok { + return nil + } + sc := p.SCtx().GetSessionVars().StmtCtx + if expression.MaybeOverOptimized4PlanCache(p.SCtx().GetExprCtx(), []expression.Expression{con}) { + return nil + } + if isTrue, err := con.Value.ToBool(sc.TypeCtxOrDefault()); (err == nil && isTrue == 0) || con.Value.IsNull() { + dual := LogicalTableDual{}.Init(p.SCtx(), p.QueryBlockOffset()) + dual.SetSchema(p.Schema()) + return dual + } + return nil +} + +// BuildLogicalJoinSchema builds the schema for join operator. +func BuildLogicalJoinSchema(joinType JoinType, join base.LogicalPlan) *expression.Schema { + leftSchema := join.Children()[0].Schema() + switch joinType { + case SemiJoin, AntiSemiJoin: + return leftSchema.Clone() + case LeftOuterSemiJoin, AntiLeftOuterSemiJoin: + newSchema := leftSchema.Clone() + newSchema.Append(join.Schema().Columns[join.Schema().Len()-1]) + return newSchema + } + newSchema := expression.MergeSchema(leftSchema, join.Children()[1].Schema()) + if joinType == LeftOuterJoin { + util.ResetNotNullFlag(newSchema, leftSchema.Len(), newSchema.Len()) + } else if joinType == RightOuterJoin { + util.ResetNotNullFlag(newSchema, 0, leftSchema.Len()) + } + return newSchema +} diff --git a/pkg/planner/core/logical_limit.go b/pkg/planner/core/operator/logicalop/logical_limit.go similarity index 89% rename from pkg/planner/core/logical_limit.go rename to pkg/planner/core/operator/logicalop/logical_limit.go index 6cb45e3643d69..4badd27115961 100644 --- a/pkg/planner/core/logical_limit.go +++ b/pkg/planner/core/operator/logicalop/logical_limit.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package core +package logicalop import ( "bytes" @@ -21,15 +21,16 @@ import ( "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/planner/core/base" - "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/property" + "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" + "github.com/pingcap/tidb/pkg/planner/util/utilfuncp" "github.com/pingcap/tidb/pkg/util/plancodec" ) // LogicalLimit represents offset and limit plan. type LogicalLimit struct { - logicalop.LogicalSchemaProducer + LogicalSchemaProducer PartitionBy []property.SortItem // This is used for enhanced topN optimization Offset uint64 @@ -40,7 +41,7 @@ type LogicalLimit struct { // Init initializes LogicalLimit. func (p LogicalLimit) Init(ctx base.PlanContext, offset int) *LogicalLimit { - p.BaseLogicalPlan = logicalop.NewBaseLogicalPlan(ctx, plancodec.TypeLimit, &p, offset) + p.BaseLogicalPlan = NewBaseLogicalPlan(ctx, plancodec.TypeLimit, &p, offset) return &p } @@ -51,7 +52,7 @@ func (p *LogicalLimit) ExplainInfo() string { ectx := p.SCtx().GetExprCtx().GetEvalCtx() buffer := bytes.NewBufferString("") if len(p.GetPartitionBy()) > 0 { - buffer = explainPartitionBy(ectx, buffer, p.GetPartitionBy(), false) + buffer = util.ExplainPartitionBy(ectx, buffer, p.GetPartitionBy(), false) fmt.Fprintf(buffer, ", offset:%v, count:%v", p.Offset, p.Count) } else { fmt.Fprintf(buffer, "offset:%v, count:%v", p.Offset, p.Count) @@ -132,7 +133,7 @@ func (p *LogicalLimit) DeriveStats(childStats []*property.StatsInfo, _ *expressi if p.StatsInfo() != nil { return p.StatsInfo(), nil } - p.SetStats(deriveLimitStats(childStats[0], float64(p.Count))) + p.SetStats(util.DeriveLimitStats(childStats[0], float64(p.Count))) return p.StatsInfo(), nil } @@ -142,7 +143,7 @@ func (p *LogicalLimit) DeriveStats(childStats []*property.StatsInfo, _ *expressi // ExhaustPhysicalPlans implements base.LogicalPlan.<14th> interface. func (p *LogicalLimit) ExhaustPhysicalPlans(prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { - return getLimitPhysicalPlans(p, prop) + return utilfuncp.ExhaustPhysicalPlans4LogicalLimit(p, prop) } // ExtractCorrelatedCols inherits BaseLogicalPlan.LogicalPlan.<15th> implementation. @@ -177,3 +178,13 @@ func (p *LogicalLimit) convertToTopN(opt *optimizetrace.LogicalOptimizeOp) *Logi appendConvertTopNTraceStep(p, topn, opt) return topn } + +func appendConvertTopNTraceStep(p base.LogicalPlan, topN *LogicalTopN, opt *optimizetrace.LogicalOptimizeOp) { + reason := func() string { + return "" + } + action := func() string { + return fmt.Sprintf("%v_%v is converted into %v_%v", p.TP(), p.ID(), topN.TP(), topN.ID()) + } + opt.AppendStepToCurrent(topN.ID(), topN.TP(), reason, action) +} diff --git a/pkg/planner/core/logical_lock.go b/pkg/planner/core/operator/logicalop/logical_lock.go similarity index 82% rename from pkg/planner/core/logical_lock.go rename to pkg/planner/core/operator/logicalop/logical_lock.go index 8764be2851b70..0c3e7bc20692b 100644 --- a/pkg/planner/core/logical_lock.go +++ b/pkg/planner/core/operator/logicalop/logical_lock.go @@ -12,22 +12,22 @@ // See the License for the specific language governing permissions and // limitations under the License. -package core +package logicalop import ( "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/planner/core/base" - "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" + "github.com/pingcap/tidb/pkg/planner/util/utilfuncp" "github.com/pingcap/tidb/pkg/util/plancodec" ) // LogicalLock represents a select lock plan. type LogicalLock struct { - logicalop.BaseLogicalPlan + BaseLogicalPlan Lock *ast.SelectLockInfo TblID2Handle map[int64][]util.HandleCols @@ -40,7 +40,7 @@ type LogicalLock struct { // Init initializes LogicalLock. func (p LogicalLock) Init(ctx base.PlanContext) *LogicalLock { - p.BaseLogicalPlan = logicalop.NewBaseLogicalPlan(ctx, plancodec.TypeLock, &p, 0) + p.BaseLogicalPlan = NewBaseLogicalPlan(ctx, plancodec.TypeLock, &p, 0) return &p } @@ -53,7 +53,7 @@ func (p LogicalLock) Init(ctx base.PlanContext) *LogicalLock { // PruneColumns implements base.LogicalPlan.<2nd> interface. func (p *LogicalLock) PruneColumns(parentUsedCols []*expression.Column, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, error) { var err error - if !IsSelectForUpdateLockType(p.Lock.LockType) { + if !IsSupportedSelectLockType(p.Lock.LockType) { // when use .baseLogicalPlan to call the PruneColumns, it means current plan itself has // nothing to pruning or plan change, so they resort to its children's column pruning logic. // so for the returned logical plan here, p is definitely determined, we just need to collect @@ -117,7 +117,7 @@ func (p *LogicalLock) PushDownTopN(topNLogicalPlan base.LogicalPlan, opt *optimi // ExhaustPhysicalPlans implements base.LogicalPlan.<14th> interface. func (p *LogicalLock) ExhaustPhysicalPlans(prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { - return getLockPhysicalPlans(p, prop) + return utilfuncp.ExhaustPhysicalPlans4LogicalLock(p, prop) } // ExtractCorrelatedCols inherits BaseLogicalPlan.LogicalPlan.<15th> implementation. @@ -141,3 +141,26 @@ func (p *LogicalLock) ExhaustPhysicalPlans(prop *property.PhysicalProperty) ([]b // ConvertOuterToInnerJoin inherits BaseLogicalPlan.LogicalPlan.<24th> implementation. // *************************** end implementation of logicalPlan interface *************************** +// isSelectForUpdateLockType checks if the select lock type is the supported for update type. +func isSelectForUpdateLockType(lockType ast.SelectLockType) bool { + if lockType == ast.SelectLockForUpdate || + lockType == ast.SelectLockForUpdateNoWait || + lockType == ast.SelectLockForUpdateWaitN { + return true + } + return false +} + +// isSelectForShareLockType checks if the select lock type is supported for type. +func isSelectForShareLockType(lockType ast.SelectLockType) bool { + if lockType == ast.SelectLockForShare || + lockType == ast.SelectLockForShareNoWait { + return true + } + return false +} + +// IsSupportedSelectLockType checks if the lockType is supported to acquire pessimsitic locks if necessary. +func IsSupportedSelectLockType(lockType ast.SelectLockType) bool { + return isSelectForUpdateLockType(lockType) || isSelectForShareLockType(lockType) +} diff --git a/pkg/planner/core/logical_mem_table.go b/pkg/planner/core/operator/logicalop/logical_mem_table.go similarity index 94% rename from pkg/planner/core/logical_mem_table.go rename to pkg/planner/core/operator/logicalop/logical_mem_table.go index bf38a9b5b6457..3874e19030a33 100644 --- a/pkg/planner/core/logical_mem_table.go +++ b/pkg/planner/core/operator/logicalop/logical_mem_table.go @@ -12,18 +12,19 @@ // See the License for the specific language governing permissions and // limitations under the License. -package core +package logicalop import ( + "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/infoschema" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/planner/core/base" - "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace/logicaltrace" + "github.com/pingcap/tidb/pkg/planner/util/utilfuncp" "github.com/pingcap/tidb/pkg/statistics" "github.com/pingcap/tidb/pkg/util/plancodec" ) @@ -38,7 +39,7 @@ import ( // requesting all cluster components log search gRPC interface to retrieve // log message and filtering them in TiDB node. type LogicalMemTable struct { - logicalop.LogicalSchemaProducer + LogicalSchemaProducer Extractor base.MemTablePredicateExtractor DBName model.CIStr @@ -54,7 +55,7 @@ type LogicalMemTable struct { // Init initializes LogicalMemTable. func (p LogicalMemTable) Init(ctx base.PlanContext, offset int) *LogicalMemTable { - p.BaseLogicalPlan = logicalop.NewBaseLogicalPlan(ctx, plancodec.TypeMemTableScan, &p, offset) + p.BaseLogicalPlan = NewBaseLogicalPlan(ctx, plancodec.TypeMemTableScan, &p, offset) return &p } @@ -65,6 +66,9 @@ func (p LogicalMemTable) Init(ctx base.PlanContext, offset int) *LogicalMemTable // PredicatePushDown implements base.LogicalPlan.<1st> interface. func (p *LogicalMemTable) PredicatePushDown(predicates []expression.Expression, _ *optimizetrace.LogicalOptimizeOp) ([]expression.Expression, base.LogicalPlan) { if p.Extractor != nil { + failpoint.Inject("skipExtractor", func(_ failpoint.Value) { + failpoint.Return(predicates, p.Self()) + }) predicates = p.Extractor.Extract(p.SCtx(), p.Schema(), p.OutputNames(), predicates) } return predicates, p.Self() @@ -104,7 +108,7 @@ func (p *LogicalMemTable) PruneColumns(parentUsedCols []*expression.Column, opt // FindBestTask implements the base.LogicalPlan.<3rd> interface. func (p *LogicalMemTable) FindBestTask(prop *property.PhysicalProperty, planCounter *base.PlanCounterTp, opt *optimizetrace.PhysicalOptimizeOp) (t base.Task, cntPlan int64, err error) { - return findBestTask4LogicalMemTable(p, prop, planCounter, opt) + return utilfuncp.FindBestTask4LogicalMemTable(p, prop, planCounter, opt) } // BuildKeyInfo inherits BaseLogicalPlan.<4th> implementation. diff --git a/pkg/planner/core/logical_partition_union_all.go b/pkg/planner/core/operator/logicalop/logical_partition_union_all.go similarity index 86% rename from pkg/planner/core/logical_partition_union_all.go rename to pkg/planner/core/operator/logicalop/logical_partition_union_all.go index dc77954ff9d30..095abee2bd5b3 100644 --- a/pkg/planner/core/logical_partition_union_all.go +++ b/pkg/planner/core/operator/logicalop/logical_partition_union_all.go @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -package core +package logicalop import ( "github.com/pingcap/tidb/pkg/planner/core/base" - "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/property" + "github.com/pingcap/tidb/pkg/planner/util/utilfuncp" "github.com/pingcap/tidb/pkg/util/plancodec" ) @@ -28,7 +28,7 @@ type LogicalPartitionUnionAll struct { // Init initializes LogicalPartitionUnionAll. func (p LogicalPartitionUnionAll) Init(ctx base.PlanContext, offset int) *LogicalPartitionUnionAll { - p.BaseLogicalPlan = logicalop.NewBaseLogicalPlan(ctx, plancodec.TypePartitionUnion, &p, offset) + p.BaseLogicalPlan = NewBaseLogicalPlan(ctx, plancodec.TypePartitionUnion, &p, offset) return &p } @@ -36,7 +36,7 @@ func (p LogicalPartitionUnionAll) Init(ctx base.PlanContext, offset int) *Logica // ExhaustPhysicalPlans implements LogicalPlan interface. func (p *LogicalPartitionUnionAll) ExhaustPhysicalPlans(prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { - return exhaustPartitionUnionAllPhysicalPlans(p, prop) + return utilfuncp.ExhaustPhysicalPlans4LogicalPartitionUnionAll(p, prop) } // *************************** end implementation of LogicalPlan interface *************************** diff --git a/pkg/planner/core/logical_projection.go b/pkg/planner/core/operator/logicalop/logical_projection.go similarity index 86% rename from pkg/planner/core/logical_projection.go rename to pkg/planner/core/operator/logicalop/logical_projection.go index 37c03afe01ac9..98cb3541ff837 100644 --- a/pkg/planner/core/logical_projection.go +++ b/pkg/planner/core/operator/logicalop/logical_projection.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package core +package logicalop import ( "slices" @@ -21,19 +21,20 @@ import ( "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/planner/cardinality" "github.com/pingcap/tidb/pkg/planner/core/base" - "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" + ruleutil "github.com/pingcap/tidb/pkg/planner/core/rule/util" fd "github.com/pingcap/tidb/pkg/planner/funcdep" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace/logicaltrace" + "github.com/pingcap/tidb/pkg/planner/util/utilfuncp" "github.com/pingcap/tidb/pkg/util/intset" "github.com/pingcap/tidb/pkg/util/plancodec" ) // LogicalProjection represents a select fields plan. type LogicalProjection struct { - logicalop.LogicalSchemaProducer + LogicalSchemaProducer Exprs []expression.Expression @@ -43,13 +44,6 @@ type LogicalProjection struct { // See "https://dev.mysql.com/doc/refman/5.7/en/do.html" for more detail. CalculateNoDelay bool - // AvoidColumnEvaluator is a temporary variable which is ONLY used to avoid - // building columnEvaluator for the expressions of Projection which is - // built by buildProjection4Union. - // This can be removed after column pool being supported. - // Related issue: TiDB#8141(https://github.com/pingcap/tidb/issues/8141) - AvoidColumnEvaluator bool - // Proj4Expand is used for expand to project same column reference, while these // col may be filled with null so we couldn't just eliminate this projection itself. Proj4Expand bool @@ -57,7 +51,7 @@ type LogicalProjection struct { // Init initializes LogicalProjection. func (p LogicalProjection) Init(ctx base.PlanContext, qbOffset int) *LogicalProjection { - p.BaseLogicalPlan = logicalop.NewBaseLogicalPlan(ctx, plancodec.TypeProj, &p, qbOffset) + p.BaseLogicalPlan = NewBaseLogicalPlan(ctx, plancodec.TypeProj, &p, qbOffset) return &p } @@ -73,7 +67,7 @@ func (p *LogicalProjection) ExplainInfo() string { // ReplaceExprColumns implements base.LogicalPlan interface. func (p *LogicalProjection) ReplaceExprColumns(replace map[string]*expression.Column) { for _, expr := range p.Exprs { - ResolveExprAndReplace(expr, replace) + ruleutil.ResolveExprAndReplace(expr, replace) } } @@ -106,7 +100,7 @@ func (p *LogicalProjection) PredicatePushDown(predicates []expression.Expression return predicates, child } } - canBePushed, canNotBePushed := BreakDownPredicates(p, predicates) + canBePushed, canNotBePushed := breakDownPredicates(p, predicates) remained, child := p.BaseLogicalPlan.PredicatePushDown(canBePushed, opt) return append(remained, canNotBePushed...), child } @@ -117,6 +111,36 @@ func (p *LogicalProjection) PruneColumns(parentUsedCols []*expression.Column, op used := expression.GetUsedList(p.SCtx().GetExprCtx().GetEvalCtx(), parentUsedCols, p.Schema()) prunedColumns := make([]*expression.Column, 0) + allPruned := true + for i, b := range used { + if b || expression.ExprHasSetVarOrSleep(p.Exprs[i]) { + // Set to true to avoid the ExprHasSetVarOrSleep be called multiple times. + used[i] = true + allPruned = false + break + } + } + if allPruned { + _, ok := p.Children()[0].(*LogicalTableDual) + if ok { + // If the child is dual. The proj should not be eliminated. + // When the dual is generated by `select ....;`` directly(No source SELECT), the dual is created without any output cols. + // The dual only holds a RowCount, and the proj is used to generate the output cols. + // But we need reset the used columns in its expression since there can be correlated columns in the expression. + // e.g. SELECT 1 FROM t1 WHERE TRUE OR ( SELECT 1 FROM (SELECT a) q ) = 1; + // The `SELECT a` will create a projection whose expression is the correlated column `a` from outer table t1. + // We need to eliminate it so that our decorrelation can work as expected. + p.Exprs = p.Exprs[:1] + p.Schema().Columns = p.Schema().Columns[:1] + p.Exprs[0] = expression.NewZero() + p.Schema().Columns[0] = &expression.Column{ + UniqueID: p.SCtx().GetSessionVars().AllocPlanColumnID(), + RetType: p.Exprs[0].GetType(p.SCtx().GetExprCtx().GetEvalCtx()), + } + return p, nil + } + } + // for implicit projected cols, once the ancestor doesn't use it, the implicit expr will be automatically pruned here. for i := len(used) - 1; i >= 0; i-- { if !used[i] && !expression.ExprHasSetVarOrSleep(p.Exprs[i]) { @@ -250,7 +274,7 @@ func (p *LogicalProjection) PullUpConstantPredicates() []expression.Expression { continue } clonePredicate := predicate.Clone() - ResolveExprAndReplace(clonePredicate, replace) + ruleutil.ResolveExprAndReplace(clonePredicate, replace) result = append(result, clonePredicate) } return result @@ -338,7 +362,7 @@ func (p *LogicalProjection) PreparePossibleProperties(_ *expression.Schema, chil // ExhaustPhysicalPlans implements base.LogicalPlan.<14th> interface. func (p *LogicalProjection) ExhaustPhysicalPlans(prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { - return exhaustPhysicalPlans4Projection(p, prop) + return utilfuncp.ExhaustPhysicalPlans4LogicalProjection(p, prop) } // ExtractCorrelatedCols implements base.LogicalPlan.<15th> interface. @@ -457,7 +481,7 @@ func (p *LogicalProjection) ExtractFD() *fd.FDSet { // ConvertOuterToInnerJoin implements base.LogicalPlan.<24th> interface. func (p *LogicalProjection) ConvertOuterToInnerJoin(predicates []expression.Expression) base.LogicalPlan { proj := p.Self().(*LogicalProjection) - canBePushed, _ := BreakDownPredicates(proj, predicates) + canBePushed, _ := breakDownPredicates(proj, predicates) child := proj.Children()[0] child = child.ConvertOuterToInnerJoin(canBePushed) proj.SetChildren(child) @@ -547,7 +571,8 @@ func (p *LogicalProjection) getGroupNDVs(colGroups [][]*expression.Column, child return ndvs } -func (p *LogicalProjection) appendExpr(expr expression.Expression) *expression.Column { +// AppendExpr adds the expression to the projection. +func (p *LogicalProjection) AppendExpr(expr expression.Expression) *expression.Column { if col, ok := expr.(*expression.Column); ok { return col } @@ -567,3 +592,38 @@ func (p *LogicalProjection) appendExpr(expr expression.Expression) *expression.C } return col } + +// breakDownPredicates breaks down predicates into two sets: canBePushed and cannotBePushed. It also maps columns to projection schema. +func breakDownPredicates(p *LogicalProjection, predicates []expression.Expression) ([]expression.Expression, []expression.Expression) { + canBePushed := make([]expression.Expression, 0, len(predicates)) + canNotBePushed := make([]expression.Expression, 0, len(predicates)) + exprCtx := p.SCtx().GetExprCtx() + for _, cond := range predicates { + substituted, hasFailed, newFilter := expression.ColumnSubstituteImpl(exprCtx, cond, p.Schema(), p.Exprs, true) + if substituted && !hasFailed && !expression.HasGetSetVarFunc(newFilter) { + canBePushed = append(canBePushed, newFilter) + } else { + canNotBePushed = append(canNotBePushed, cond) + } + } + return canBePushed, canNotBePushed +} + +// todo: merge with rule_eliminate_projection.go +func canProjectionBeEliminatedLoose(p *LogicalProjection) bool { + // project for expand will assign a new col id for col ref, because these column should be + // data cloned in the execution time and may be filled with null value at the same time. + // so it's not a REAL column reference. Detect the column ref in projection here and do + // the elimination here will restore the Expand's grouping sets column back to use the + // original column ref again. (which is not right) + if p.Proj4Expand { + return false + } + for _, expr := range p.Exprs { + _, ok := expr.(*expression.Column) + if !ok { + return false + } + } + return true +} diff --git a/pkg/planner/core/logical_selection.go b/pkg/planner/core/operator/logicalop/logical_selection.go similarity index 73% rename from pkg/planner/core/logical_selection.go rename to pkg/planner/core/operator/logicalop/logical_selection.go index 1d5f430239575..304ea704508f7 100644 --- a/pkg/planner/core/logical_selection.go +++ b/pkg/planner/core/operator/logicalop/logical_selection.go @@ -12,29 +12,33 @@ // See the License for the specific language governing permissions and // limitations under the License. -package core +package logicalop import ( "bytes" + "fmt" "slices" + "github.com/pingcap/errors" "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/constraint" "github.com/pingcap/tidb/pkg/planner/core/cost" - "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" + ruleutil "github.com/pingcap/tidb/pkg/planner/core/rule/util" fd "github.com/pingcap/tidb/pkg/planner/funcdep" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" + "github.com/pingcap/tidb/pkg/planner/util/utilfuncp" "github.com/pingcap/tidb/pkg/util/intset" "github.com/pingcap/tidb/pkg/util/plancodec" ) // LogicalSelection represents a where or having predicate. type LogicalSelection struct { - logicalop.BaseLogicalPlan + BaseLogicalPlan // Originally the WHERE or ON condition is parsed into a single expression, // but after we converted to CNF(Conjunctive normal form), it can be @@ -44,7 +48,7 @@ type LogicalSelection struct { // Init initializes LogicalSelection. func (p LogicalSelection) Init(ctx base.PlanContext, qbOffset int) *LogicalSelection { - p.BaseLogicalPlan = logicalop.NewBaseLogicalPlan(ctx, plancodec.TypeSel, &p, qbOffset) + p.BaseLogicalPlan = NewBaseLogicalPlan(ctx, plancodec.TypeSel, &p, qbOffset) return &p } @@ -58,7 +62,7 @@ func (p *LogicalSelection) ExplainInfo() string { // ReplaceExprColumns implements base.LogicalPlan interface. func (p *LogicalSelection) ReplaceExprColumns(replace map[string]*expression.Column) { for _, expr := range p.Conditions { - ResolveExprAndReplace(expr, replace) + ruleutil.ResolveExprAndReplace(expr, replace) } } @@ -92,8 +96,8 @@ func (p *LogicalSelection) HashCode() []byte { // PredicatePushDown implements base.LogicalPlan.<1st> interface. func (p *LogicalSelection) PredicatePushDown(predicates []expression.Expression, opt *optimizetrace.LogicalOptimizeOp) ([]expression.Expression, base.LogicalPlan) { - predicates = DeleteTrueExprs(p, predicates) - p.Conditions = DeleteTrueExprs(p, p.Conditions) + predicates = constraint.DeleteTrueExprs(p, predicates) + p.Conditions = constraint.DeleteTrueExprs(p, p.Conditions) var child base.LogicalPlan var retConditions []expression.Expression var originConditions []expression.Expression @@ -107,7 +111,7 @@ func (p *LogicalSelection) PredicatePushDown(predicates []expression.Expression, // Return table dual when filter is constant false or null. dual := Conds2TableDual(p, p.Conditions) if dual != nil { - appendTableDualTraceStep(p, dual, p.Conditions, opt) + AppendTableDualTraceStep(p, dual, p.Conditions, opt) return nil, dual } return nil, p @@ -125,7 +129,6 @@ func (p *LogicalSelection) PruneColumns(parentUsedCols []*expression.Column, opt if err != nil { return nil, err } - addConstOneForEmptyProjection(p.Children()[0]) return p, nil } @@ -152,7 +155,7 @@ func (p *LogicalSelection) BuildKeyInfo(selfSchema *expression.Schema, childSche } } } - p.SetMaxOneRow(checkMaxOneRowCond(eqCols, childSchema[0])) + p.SetMaxOneRow(ruleutil.CheckMaxOneRowCond(eqCols, childSchema[0])) } // PushDownTopN inherits BaseLogicalPlan.<5th> implementation. @@ -160,10 +163,10 @@ func (p *LogicalSelection) BuildKeyInfo(selfSchema *expression.Schema, childSche // DeriveTopN implements the base.LogicalPlan.<6th> interface. func (p *LogicalSelection) DeriveTopN(opt *optimizetrace.LogicalOptimizeOp) base.LogicalPlan { s := p.Self().(*LogicalSelection) - windowIsTopN, limitValue := windowIsTopN(s) + windowIsTopN, limitValue := utilfuncp.WindowIsTopN(s) if windowIsTopN { child := s.Children()[0].(*LogicalWindow) - grandChild := child.Children()[0].(*DataSource) + grandChild := child.Children()[0] // Build order by for derived Limit byItems := make([]*util.ByItems, 0, len(child.OrderBy)) for _, col := range child.OrderBy { @@ -190,7 +193,7 @@ func (p *LogicalSelection) PullUpConstantPredicates() []expression.Expression { var result []expression.Expression for _, candidatePredicate := range p.Conditions { // the candidate predicate should be a constant and compare predicate - match := validCompareConstantPredicate(p.SCtx().GetExprCtx().GetEvalCtx(), candidatePredicate) + match := expression.ValidCompareConstantPredicate(p.SCtx().GetExprCtx().GetEvalCtx(), candidatePredicate) if match { result = append(result, candidatePredicate) } @@ -219,7 +222,7 @@ func (*LogicalSelection) PreparePossibleProperties(_ *expression.Schema, childre // ExhaustPhysicalPlans implements base.LogicalPlan.<14th> interface. func (p *LogicalSelection) ExhaustPhysicalPlans(prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { - return exhaustPhysicalPlans4LogicalSelection(p, prop) + return utilfuncp.ExhaustPhysicalPlans4LogicalSelection(p, prop) } // ExtractCorrelatedCols implements base.LogicalPlan.<15th> interface. @@ -264,13 +267,13 @@ func (p *LogicalSelection) ExtractFD() *fd.FDSet { } // extract the not null attributes from selection conditions. - notnullColsUniqueIDs.UnionWith(ExtractNotNullFromConds(p.Conditions, p)) + notnullColsUniqueIDs.UnionWith(util.ExtractNotNullFromConds(p.Conditions, p)) // extract the constant cols from selection conditions. - constUniqueIDs := ExtractConstantCols(p.Conditions, p.SCtx(), fds) + constUniqueIDs := util.ExtractConstantCols(p.Conditions, p.SCtx(), fds) // extract equivalence cols. - equivUniqueIDs := ExtractEquivalenceCols(p.Conditions, p.SCtx(), fds) + equivUniqueIDs := util.ExtractEquivalenceCols(p.Conditions, p.SCtx(), fds) // apply operator's characteristic's FD setting. fds.MakeNotNull(notnullColsUniqueIDs) @@ -298,9 +301,77 @@ func (p *LogicalSelection) ConvertOuterToInnerJoin(predicates []expression.Expre // *************************** end implementation of logicalPlan interface *************************** -// utility function to check whether we can push down Selection to TiKV or TiFlash -func (p *LogicalSelection) canPushDown(storeTp kv.StoreType) bool { +// CanPushDown is utility function to check whether we can push down Selection to TiKV or TiFlash +func (p *LogicalSelection) CanPushDown(storeTp kv.StoreType) bool { return !expression.ContainVirtualColumn(p.Conditions) && p.CanPushToCop(storeTp) && - expression.CanExprsPushDown(GetPushDownCtx(p.SCtx()), p.Conditions, storeTp) + expression.CanExprsPushDown(util.GetPushDownCtx(p.SCtx()), p.Conditions, storeTp) +} + +func splitSetGetVarFunc(filters []expression.Expression) ([]expression.Expression, []expression.Expression) { + canBePushDown := make([]expression.Expression, 0, len(filters)) + canNotBePushDown := make([]expression.Expression, 0, len(filters)) + for _, expr := range filters { + if expression.HasGetSetVarFunc(expr) { + canNotBePushDown = append(canNotBePushDown, expr) + } else { + canBePushDown = append(canBePushDown, expr) + } + } + return canBePushDown, canNotBePushDown +} + +// AppendTableDualTraceStep appends a trace step for replacing a plan with a dual table. +func AppendTableDualTraceStep(replaced base.LogicalPlan, dual base.LogicalPlan, conditions []expression.Expression, opt *optimizetrace.LogicalOptimizeOp) { + action := func() string { + return fmt.Sprintf("%v_%v is replaced by %v_%v", replaced.TP(), replaced.ID(), dual.TP(), dual.ID()) + } + ectx := replaced.SCtx().GetExprCtx().GetEvalCtx() + reason := func() string { + buffer := bytes.NewBufferString("The conditions[") + for i, cond := range conditions { + if i > 0 { + buffer.WriteString(",") + } + buffer.WriteString(cond.StringWithCtx(ectx, errors.RedactLogDisable)) + } + buffer.WriteString("] are constant false or null") + return buffer.String() + } + opt.AppendStepToCurrent(dual.ID(), dual.TP(), reason, action) +} + +func appendSelectionPredicatePushDownTraceStep(p *LogicalSelection, conditions []expression.Expression, opt *optimizetrace.LogicalOptimizeOp) { + action := func() string { + return fmt.Sprintf("%v_%v is removed", p.TP(), p.ID()) + } + reason := func() string { + return "" + } + if len(conditions) > 0 { + evalCtx := p.SCtx().GetExprCtx().GetEvalCtx() + reason = func() string { + buffer := bytes.NewBufferString("The conditions[") + for i, cond := range conditions { + if i > 0 { + buffer.WriteString(",") + } + buffer.WriteString(cond.StringWithCtx(evalCtx, errors.RedactLogDisable)) + } + fmt.Fprintf(buffer, "] in %v_%v are pushed down", p.TP(), p.ID()) + return buffer.String() + } + } + opt.AppendStepToCurrent(p.ID(), p.TP(), reason, action) +} + +func appendDerivedTopNTrace(topN base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) { + child := topN.Children()[0] + action := func() string { + return fmt.Sprintf("%v_%v top N added below %v_%v ", topN.TP(), topN.ID(), child.TP(), child.ID()) + } + reason := func() string { + return fmt.Sprintf("%v filter on row number", topN.TP()) + } + opt.AppendStepToCurrent(topN.ID(), topN.TP(), reason, action) } diff --git a/pkg/planner/core/logical_sequence.go b/pkg/planner/core/operator/logicalop/logical_sequence.go similarity index 95% rename from pkg/planner/core/logical_sequence.go rename to pkg/planner/core/operator/logicalop/logical_sequence.go index c3350bdba22e0..4ea69496b95cb 100644 --- a/pkg/planner/core/logical_sequence.go +++ b/pkg/planner/core/operator/logicalop/logical_sequence.go @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -package core +package logicalop import ( "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/planner/core/base" - "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" + "github.com/pingcap/tidb/pkg/planner/util/utilfuncp" "github.com/pingcap/tidb/pkg/util/plancodec" ) @@ -34,12 +34,12 @@ import ( // // We use this property to do complex optimizations for CTEs. type LogicalSequence struct { - logicalop.BaseLogicalPlan + BaseLogicalPlan } // Init initializes LogicalSequence func (p LogicalSequence) Init(ctx base.PlanContext, offset int) *LogicalSequence { - p.BaseLogicalPlan = logicalop.NewBaseLogicalPlan(ctx, plancodec.TypeSequence, &p, offset) + p.BaseLogicalPlan = NewBaseLogicalPlan(ctx, plancodec.TypeSequence, &p, offset) return &p } @@ -103,7 +103,7 @@ func (p *LogicalSequence) DeriveStats(childStats []*property.StatsInfo, _ *expre // ExhaustPhysicalPlans implements the base.LogicalPlan.<14th> interface. func (p *LogicalSequence) ExhaustPhysicalPlans(prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { - return exhaustPhysicalPlans4LogicalSequence(p, prop) + return utilfuncp.ExhaustPhysicalPlans4LogicalSequence(p, prop) } // ExtractCorrelatedCols inherits BaseLogicalPlan.LogicalPlan.<15th> implementation. diff --git a/pkg/planner/core/logical_show.go b/pkg/planner/core/operator/logicalop/logical_show.go similarity index 90% rename from pkg/planner/core/logical_show.go rename to pkg/planner/core/operator/logicalop/logical_show.go index 20b4511baeba8..33df6e19308fe 100644 --- a/pkg/planner/core/logical_show.go +++ b/pkg/planner/core/operator/logicalop/logical_show.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package core +package logicalop import ( "unsafe" @@ -22,16 +22,16 @@ import ( "github.com/pingcap/tidb/pkg/parser/auth" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/planner/core/base" - "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" + "github.com/pingcap/tidb/pkg/planner/util/utilfuncp" "github.com/pingcap/tidb/pkg/util/plancodec" "github.com/pingcap/tidb/pkg/util/size" ) // LogicalShow represents a show plan. type LogicalShow struct { - logicalop.LogicalSchemaProducer + LogicalSchemaProducer ShowContents Extractor base.ShowPredicateExtractor @@ -76,7 +76,7 @@ func (s *ShowContents) MemoryUsage() (sum int64) { // Init initializes LogicalShow. func (p LogicalShow) Init(ctx base.PlanContext) *LogicalShow { - p.BaseLogicalPlan = logicalop.NewBaseLogicalPlan(ctx, plancodec.TypeShow, &p, 0) + p.BaseLogicalPlan = NewBaseLogicalPlan(ctx, plancodec.TypeShow, &p, 0) return &p } @@ -90,7 +90,7 @@ func (p LogicalShow) Init(ctx base.PlanContext) *LogicalShow { // FindBestTask implements the base.LogicalPlan.<3rd> interface. func (p *LogicalShow) FindBestTask(prop *property.PhysicalProperty, planCounter *base.PlanCounterTp, _ *optimizetrace.PhysicalOptimizeOp) (base.Task, int64, error) { - return findBestTask4LogicalShow(p, prop, planCounter, nil) + return utilfuncp.FindBestTask4LogicalShow(p, prop, planCounter, nil) } // BuildKeyInfo inherits BaseLogicalPlan.LogicalPlan.<4th> implementation. @@ -138,3 +138,15 @@ func (p *LogicalShow) DeriveStats(_ []*property.StatsInfo, selfSchema *expressio // ConvertOuterToInnerJoin inherits BaseLogicalPlan.LogicalPlan.<24th> implementation. // *************************** end implementation of logicalPlan interface *************************** + +// todo: merge getFakeStats with the one in logical_show_ddl_jobs.go +func getFakeStats(schema *expression.Schema) *property.StatsInfo { + profile := &property.StatsInfo{ + RowCount: 1, + ColNDVs: make(map[int64]float64, schema.Len()), + } + for _, col := range schema.Columns { + profile.ColNDVs[col.UniqueID] = 1 + } + return profile +} diff --git a/pkg/planner/core/logical_show_ddl_jobs.go b/pkg/planner/core/operator/logicalop/logical_show_ddl_jobs.go similarity index 93% rename from pkg/planner/core/logical_show_ddl_jobs.go rename to pkg/planner/core/operator/logicalop/logical_show_ddl_jobs.go index 0bd7c71c95544..c4eea62fa5ceb 100644 --- a/pkg/planner/core/logical_show_ddl_jobs.go +++ b/pkg/planner/core/operator/logicalop/logical_show_ddl_jobs.go @@ -12,27 +12,27 @@ // See the License for the specific language governing permissions and // limitations under the License. -package core +package logicalop import ( "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/planner/core/base" - "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" + "github.com/pingcap/tidb/pkg/planner/util/utilfuncp" "github.com/pingcap/tidb/pkg/util/plancodec" ) // LogicalShowDDLJobs is for showing DDL job list. type LogicalShowDDLJobs struct { - logicalop.LogicalSchemaProducer + LogicalSchemaProducer JobNumber int64 } // Init initializes LogicalShowDDLJobs. func (p LogicalShowDDLJobs) Init(ctx base.PlanContext) *LogicalShowDDLJobs { - p.BaseLogicalPlan = logicalop.NewBaseLogicalPlan(ctx, plancodec.TypeShowDDLJobs, &p, 0) + p.BaseLogicalPlan = NewBaseLogicalPlan(ctx, plancodec.TypeShowDDLJobs, &p, 0) return &p } @@ -46,7 +46,7 @@ func (p LogicalShowDDLJobs) Init(ctx base.PlanContext) *LogicalShowDDLJobs { // FindBestTask implements the base.LogicalPlan.<3rd> interface. func (p *LogicalShowDDLJobs) FindBestTask(prop *property.PhysicalProperty, planCounter *base.PlanCounterTp, _ *optimizetrace.PhysicalOptimizeOp) (base.Task, int64, error) { - return findBestTask4LogicalShowDDLJobs(p, prop, planCounter, nil) + return utilfuncp.FindBestTask4LogicalShowDDLJobs(p, prop, planCounter, nil) } // BuildKeyInfo inherits the BaseLogicalPlan.<4th> interface. diff --git a/pkg/planner/core/logical_sort.go b/pkg/planner/core/operator/logicalop/logical_sort.go similarity index 78% rename from pkg/planner/core/logical_sort.go rename to pkg/planner/core/operator/logicalop/logical_sort.go index a7fc4f8b2e606..ea038d84e9a95 100644 --- a/pkg/planner/core/logical_sort.go +++ b/pkg/planner/core/operator/logicalop/logical_sort.go @@ -12,31 +12,33 @@ // See the License for the specific language governing permissions and // limitations under the License. -package core +package logicalop import ( "bytes" + "fmt" + "github.com/pingcap/errors" "github.com/pingcap/tidb/pkg/expression" - "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/planner/core/base" - "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" + ruleutil "github.com/pingcap/tidb/pkg/planner/core/rule/util" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" + "github.com/pingcap/tidb/pkg/planner/util/utilfuncp" "github.com/pingcap/tidb/pkg/util/plancodec" ) // LogicalSort stands for the order by plan. type LogicalSort struct { - logicalop.BaseLogicalPlan + BaseLogicalPlan ByItems []*util.ByItems } // Init initializes LogicalSort. func (ls LogicalSort) Init(ctx base.PlanContext, offset int) *LogicalSort { - ls.BaseLogicalPlan = logicalop.NewBaseLogicalPlan(ctx, plancodec.TypeSort, &ls, offset) + ls.BaseLogicalPlan = NewBaseLogicalPlan(ctx, plancodec.TypeSort, &ls, offset) return &ls } @@ -46,13 +48,13 @@ func (ls LogicalSort) Init(ctx base.PlanContext, offset int) *LogicalSort { func (ls *LogicalSort) ExplainInfo() string { buffer := bytes.NewBufferString("") eCtx := ls.SCtx().GetExprCtx().GetEvalCtx() - return explainByItems(eCtx, buffer, ls.ByItems).String() + return util.ExplainByItems(eCtx, buffer, ls.ByItems).String() } // ReplaceExprColumns implements base.LogicalPlan interface. func (ls *LogicalSort) ReplaceExprColumns(replace map[string]*expression.Column) { for _, byItem := range ls.ByItems { - ResolveExprAndReplace(byItem.Expr, replace) + ruleutil.ResolveExprAndReplace(byItem.Expr, replace) } } @@ -69,7 +71,7 @@ func (ls *LogicalSort) ReplaceExprColumns(replace map[string]*expression.Column) // we do prune them. Note that we can't prune the expressions contain non-deterministic functions, such as rand(). func (ls *LogicalSort) PruneColumns(parentUsedCols []*expression.Column, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, error) { var cols []*expression.Column - ls.ByItems, cols = pruneByItems(ls, ls.ByItems, opt) + ls.ByItems, cols = utilfuncp.PruneByItems(ls, ls.ByItems, opt) parentUsedCols = append(parentUsedCols, cols...) var err error ls.Children()[0], err = ls.Children()[0].PruneColumns(parentUsedCols, opt) @@ -91,7 +93,7 @@ func (ls *LogicalSort) PushDownTopN(topNLogicalPlan base.LogicalPlan, opt *optim } if topN == nil { return ls.BaseLogicalPlan.PushDownTopN(nil, opt) - } else if topN.isLimit() { + } else if topN.IsLimit() { topN.ByItems = ls.ByItems appendSortPassByItemsTraceStep(ls, topN, opt) return ls.Children()[0].PushDownTopN(topN, opt) @@ -125,23 +127,7 @@ func (ls *LogicalSort) PreparePossibleProperties(_ *expression.Schema, _ ...[][] // ExhaustPhysicalPlans implements base.LogicalPlan.<14th> interface. func (ls *LogicalSort) ExhaustPhysicalPlans(prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { - if prop.TaskTp == property.RootTaskType { - if MatchItems(prop, ls.ByItems) { - ret := make([]base.PhysicalPlan, 0, 2) - ret = append(ret, getPhysicalSort(ls, prop)) - ns := getNominalSort(ls, prop) - if ns != nil { - ret = append(ret, ns) - } - return ret, true, nil - } - } else if prop.TaskTp == property.MppTaskType && prop.RejectSort { - if canPushToCopImpl(&ls.BaseLogicalPlan, kv.TiFlash, true) { - ps := getNominalSortSimple(ls, prop) - return []base.PhysicalPlan{ps}, true, nil - } - } - return nil, true, nil + return utilfuncp.ExhaustPhysicalPlans4LogicalSort(ls, prop) } // ExtractCorrelatedCols implements base.LogicalPlan.<15th> interface. @@ -172,3 +158,34 @@ func (ls *LogicalSort) ExtractCorrelatedCols() []*expression.CorrelatedColumn { // ConvertOuterToInnerJoin inherits BaseLogicalPlan.LogicalPlan.<24th> implementation. // *************************** end implementation of logicalPlan interface *************************** + +func appendSortPassByItemsTraceStep(sort *LogicalSort, topN *LogicalTopN, opt *optimizetrace.LogicalOptimizeOp) { + ectx := sort.SCtx().GetExprCtx().GetEvalCtx() + action := func() string { + buffer := bytes.NewBufferString(fmt.Sprintf("%v_%v passes ByItems[", sort.TP(), sort.ID())) + for i, item := range sort.ByItems { + if i > 0 { + buffer.WriteString(",") + } + buffer.WriteString(item.StringWithCtx(ectx, errors.RedactLogDisable)) + } + fmt.Fprintf(buffer, "] to %v_%v", topN.TP(), topN.ID()) + return buffer.String() + } + reason := func() string { + return fmt.Sprintf("%v_%v is Limit originally", topN.TP(), topN.ID()) + } + opt.AppendStepToCurrent(sort.ID(), sort.TP(), reason, action) +} + +func getPossiblePropertyFromByItems(items []*util.ByItems) []*expression.Column { + cols := make([]*expression.Column, 0, len(items)) + for _, item := range items { + col, ok := item.Expr.(*expression.Column) + if !ok { + break + } + cols = append(cols, col) + } + return cols +} diff --git a/pkg/planner/core/logical_table_dual.go b/pkg/planner/core/operator/logicalop/logical_table_dual.go similarity index 95% rename from pkg/planner/core/logical_table_dual.go rename to pkg/planner/core/operator/logicalop/logical_table_dual.go index c70f1c67ff53d..fa05796f91b45 100644 --- a/pkg/planner/core/logical_table_dual.go +++ b/pkg/planner/core/operator/logicalop/logical_table_dual.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package core +package logicalop import ( "strconv" @@ -20,11 +20,11 @@ import ( "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/planner/core/base" - "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace/logicaltrace" + "github.com/pingcap/tidb/pkg/planner/util/utilfuncp" "github.com/pingcap/tidb/pkg/util/plancodec" ) @@ -33,7 +33,7 @@ import ( // outputting 0/1 row with zero column. This semantic may be different from your expectation sometimes but should not // cause any actual problems now. type LogicalTableDual struct { - logicalop.LogicalSchemaProducer + LogicalSchemaProducer // RowCount could only be 0 or 1. RowCount int @@ -41,7 +41,7 @@ type LogicalTableDual struct { // Init initializes LogicalTableDual. func (p LogicalTableDual) Init(ctx base.PlanContext, offset int) *LogicalTableDual { - p.BaseLogicalPlan = logicalop.NewBaseLogicalPlan(ctx, plancodec.TypeDual, &p, offset) + p.BaseLogicalPlan = NewBaseLogicalPlan(ctx, plancodec.TypeDual, &p, offset) return &p } @@ -90,7 +90,7 @@ func (p *LogicalTableDual) PruneColumns(parentUsedCols []*expression.Column, opt // FindBestTask implements the base.LogicalPlan.<3rd> interface. func (p *LogicalTableDual) FindBestTask(prop *property.PhysicalProperty, planCounter *base.PlanCounterTp, opt *optimizetrace.PhysicalOptimizeOp) (base.Task, int64, error) { - return findBestTask4LogicalTableDual(p, prop, planCounter, opt) + return utilfuncp.FindBestTask4LogicalTableDual(p, prop, planCounter, opt) } // BuildKeyInfo implements base.LogicalPlan.<4th> interface. diff --git a/pkg/planner/core/logical_top_n.go b/pkg/planner/core/operator/logicalop/logical_top_n.go similarity index 85% rename from pkg/planner/core/logical_top_n.go rename to pkg/planner/core/operator/logicalop/logical_top_n.go index 635072efbc14a..5a0e99a2b7651 100644 --- a/pkg/planner/core/logical_top_n.go +++ b/pkg/planner/core/operator/logicalop/logical_top_n.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package core +package logicalop import ( "bytes" @@ -20,16 +20,17 @@ import ( "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/planner/core/base" - "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" + ruleutil "github.com/pingcap/tidb/pkg/planner/core/rule/util" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" + "github.com/pingcap/tidb/pkg/planner/util/utilfuncp" "github.com/pingcap/tidb/pkg/util/plancodec" ) // LogicalTopN represents a top-n plan. type LogicalTopN struct { - logicalop.BaseLogicalPlan + BaseLogicalPlan ByItems []*util.ByItems // PartitionBy is used for extended TopN to consider K heaps. Used by rule_derive_topn_from_window @@ -41,7 +42,7 @@ type LogicalTopN struct { // Init initializes LogicalTopN. func (lt LogicalTopN) Init(ctx base.PlanContext, offset int) *LogicalTopN { - lt.BaseLogicalPlan = logicalop.NewBaseLogicalPlan(ctx, plancodec.TypeTopN, <, offset) + lt.BaseLogicalPlan = NewBaseLogicalPlan(ctx, plancodec.TypeTopN, <, offset) return < } @@ -51,11 +52,11 @@ func (lt LogicalTopN) Init(ctx base.PlanContext, offset int) *LogicalTopN { func (lt *LogicalTopN) ExplainInfo() string { ectx := lt.SCtx().GetExprCtx().GetEvalCtx() buffer := bytes.NewBufferString("") - buffer = explainPartitionBy(ectx, buffer, lt.GetPartitionBy(), false) + buffer = util.ExplainPartitionBy(ectx, buffer, lt.GetPartitionBy(), false) if len(lt.GetPartitionBy()) > 0 && len(lt.ByItems) > 0 { buffer.WriteString("order by ") } - buffer = explainByItems(lt.SCtx().GetExprCtx().GetEvalCtx(), buffer, lt.ByItems) + buffer = util.ExplainByItems(lt.SCtx().GetExprCtx().GetEvalCtx(), buffer, lt.ByItems) fmt.Fprintf(buffer, ", offset:%v, count:%v", lt.Offset, lt.Count) return buffer.String() } @@ -63,7 +64,7 @@ func (lt *LogicalTopN) ExplainInfo() string { // ReplaceExprColumns implements base.LogicalPlan interface. func (lt *LogicalTopN) ReplaceExprColumns(replace map[string]*expression.Column) { for _, byItem := range lt.ByItems { - ResolveExprAndReplace(byItem.Expr, replace) + ruleutil.ResolveExprAndReplace(byItem.Expr, replace) } } @@ -81,7 +82,7 @@ func (lt *LogicalTopN) ReplaceExprColumns(replace map[string]*expression.Column) func (lt *LogicalTopN) PruneColumns(parentUsedCols []*expression.Column, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, error) { child := lt.Children()[0] var cols []*expression.Column - lt.ByItems, cols = pruneByItems(lt, lt.ByItems, opt) + lt.ByItems, cols = utilfuncp.PruneByItems(lt, lt.ByItems, opt) parentUsedCols = append(parentUsedCols, cols...) var err error lt.Children()[0], err = child.PruneColumns(parentUsedCols, opt) @@ -118,7 +119,7 @@ func (lt *LogicalTopN) DeriveStats(childStats []*property.StatsInfo, _ *expressi if lt.StatsInfo() != nil { return lt.StatsInfo(), nil } - lt.SetStats(deriveLimitStats(childStats[0], float64(lt.Count))) + lt.SetStats(util.DeriveLimitStats(childStats[0], float64(lt.Count))) return lt.StatsInfo(), nil } @@ -135,10 +136,7 @@ func (lt *LogicalTopN) PreparePossibleProperties(_ *expression.Schema, _ ...[][] // ExhaustPhysicalPlans implements base.LogicalPlan.<14th> interface. func (lt *LogicalTopN) ExhaustPhysicalPlans(prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { - if MatchItems(prop, lt.ByItems) { - return append(getPhysTopN(lt, prop), getPhysLimits(lt, prop)...), true, nil - } - return nil, true, nil + return utilfuncp.ExhaustPhysicalPlans4LogicalTopN(lt, prop) } // ExtractCorrelatedCols implements base.LogicalPlan.<15th> interface. @@ -175,8 +173,8 @@ func (lt *LogicalTopN) GetPartitionBy() []property.SortItem { return lt.PartitionBy } -// isLimit checks if TopN is a limit plan. -func (lt *LogicalTopN) isLimit() bool { +// IsLimit checks if TopN is a limit plan. +func (lt *LogicalTopN) IsLimit() bool { return len(lt.ByItems) == 0 } @@ -195,7 +193,7 @@ func (lt *LogicalTopN) AttachChild(p base.LogicalPlan, opt *optimizetrace.Logica return dual } - if lt.isLimit() { + if lt.IsLimit() { limit := LogicalLimit{ Count: lt.Count, Offset: lt.Offset, @@ -211,3 +209,13 @@ func (lt *LogicalTopN) AttachChild(p base.LogicalPlan, opt *optimizetrace.Logica appendTopNPushDownTraceStep(lt, p, opt) return lt } + +func appendTopNPushDownTraceStep(parent base.LogicalPlan, child base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) { + action := func() string { + return fmt.Sprintf("%v_%v is added as %v_%v's parent", parent.TP(), parent.ID(), child.TP(), child.ID()) + } + reason := func() string { + return fmt.Sprintf("%v is pushed down", parent.TP()) + } + opt.AppendStepToCurrent(parent.ID(), parent.TP(), reason, action) +} diff --git a/pkg/planner/core/logical_union_all.go b/pkg/planner/core/operator/logicalop/logical_union_all.go similarity index 91% rename from pkg/planner/core/logical_union_all.go rename to pkg/planner/core/operator/logicalop/logical_union_all.go index c78e98506e74f..8b1c9b77dd930 100644 --- a/pkg/planner/core/logical_union_all.go +++ b/pkg/planner/core/operator/logicalop/logical_union_all.go @@ -12,12 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -package core +package logicalop import ( + "fmt" + "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/planner/core/base" - "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" @@ -28,12 +29,12 @@ import ( // LogicalUnionAll represents LogicalUnionAll plan. type LogicalUnionAll struct { - logicalop.LogicalSchemaProducer + LogicalSchemaProducer } // Init initializes LogicalUnionAll. func (p LogicalUnionAll) Init(ctx base.PlanContext, offset int) *LogicalUnionAll { - p.BaseLogicalPlan = logicalop.NewBaseLogicalPlan(ctx, plancodec.TypeUnion, &p, offset) + p.BaseLogicalPlan = NewBaseLogicalPlan(ctx, plancodec.TypeUnion, &p, offset) return &p } @@ -97,7 +98,7 @@ func (p *LogicalUnionAll) PruneColumns(parentUsedCols []*expression.Column, opt for j, col := range schema.Columns { exprs[j] = col } - proj := LogicalProjection{Exprs: exprs, AvoidColumnEvaluator: true}.Init(p.SCtx(), p.QueryBlockOffset()) + proj := LogicalProjection{Exprs: exprs}.Init(p.SCtx(), p.QueryBlockOffset()) proj.SetSchema(schema) proj.SetChildren(child) @@ -169,7 +170,7 @@ func (p *LogicalUnionAll) DeriveStats(childStats []*property.StatsInfo, selfSche // ExhaustPhysicalPlans implements base.LogicalPlan.<14th> interface. func (p *LogicalUnionAll) ExhaustPhysicalPlans(prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { - return exhaustUnionAllPhysicalPlans(p, prop) + return utilfuncp.ExhaustPhysicalPlans4LogicalUnionAll(p, prop) } // ExtractCorrelatedCols inherits BaseLogicalPlan.LogicalPlan.<15th> implementation. @@ -193,3 +194,13 @@ func (p *LogicalUnionAll) ExhaustPhysicalPlans(prop *property.PhysicalProperty) // ConvertOuterToInnerJoin inherits BaseLogicalPlan.LogicalPlan.<24th> implementation. // *************************** end implementation of logicalPlan interface *************************** + +func appendNewTopNTraceStep(topN *LogicalTopN, union *LogicalUnionAll, opt *optimizetrace.LogicalOptimizeOp) { + reason := func() string { + return "" + } + action := func() string { + return fmt.Sprintf("%v_%v is added and pushed down across %v_%v", topN.TP(), topN.ID(), union.TP(), union.ID()) + } + opt.AppendStepToCurrent(topN.ID(), topN.TP(), reason, action) +} diff --git a/pkg/planner/core/logical_union_scan.go b/pkg/planner/core/operator/logicalop/logical_union_scan.go similarity index 85% rename from pkg/planner/core/logical_union_scan.go rename to pkg/planner/core/operator/logicalop/logical_union_scan.go index 26ebe13389bcd..3fbd6deeb950a 100644 --- a/pkg/planner/core/logical_union_scan.go +++ b/pkg/planner/core/operator/logicalop/logical_union_scan.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package core +package logicalop import ( "bytes" @@ -21,16 +21,16 @@ import ( "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/planner/core/base" - "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" + "github.com/pingcap/tidb/pkg/planner/util/utilfuncp" "github.com/pingcap/tidb/pkg/util/plancodec" ) // LogicalUnionScan is used in non read-only txn or for scanning a local temporary table whose snapshot data is located in memory. type LogicalUnionScan struct { - logicalop.BaseLogicalPlan + BaseLogicalPlan Conditions []expression.Expression @@ -39,7 +39,7 @@ type LogicalUnionScan struct { // Init initializes LogicalUnionScan. func (p LogicalUnionScan) Init(ctx base.PlanContext, qbOffset int) *LogicalUnionScan { - p.BaseLogicalPlan = logicalop.NewBaseLogicalPlan(ctx, plancodec.TypeUnionScan, &p, qbOffset) + p.BaseLogicalPlan = NewBaseLogicalPlan(ctx, plancodec.TypeUnionScan, &p, qbOffset) return &p } @@ -62,15 +62,22 @@ func (p *LogicalUnionScan) ExplainInfo() string { // PredicatePushDown implements base.LogicalPlan.<1st> interface. func (p *LogicalUnionScan) PredicatePushDown(predicates []expression.Expression, opt *optimizetrace.LogicalOptimizeOp) ([]expression.Expression, base.LogicalPlan) { - if expression.ContainVirtualColumn(predicates) { - // predicates with virtual columns can't be pushed down to TiKV/TiFlash so they'll be put into a Projection - // below the UnionScan, but the current UnionScan doesn't support placing Projection below it, see #53951. - return predicates, p + var predicatesWithVCol, predicatesWithoutVCol []expression.Expression + // predicates with virtual columns can't be pushed down to TiKV/TiFlash so they'll be put into a Projection + // below the UnionScan, but the current UnionScan doesn't support placing Projection below it, see #53951. + for _, expr := range predicates { + if expression.ContainVirtualColumn([]expression.Expression{expr}) { + predicatesWithVCol = append(predicatesWithVCol, expr) + } else { + predicatesWithoutVCol = append(predicatesWithoutVCol, expr) + } } + predicates = predicatesWithoutVCol retainedPredicates, _ := p.Children()[0].PredicatePushDown(predicates, opt) p.Conditions = make([]expression.Expression, 0, len(predicates)) p.Conditions = append(p.Conditions, predicates...) // The conditions in UnionScan is only used for added rows, so parent Selection should not be removed. + retainedPredicates = append(retainedPredicates, predicatesWithVCol...) return retainedPredicates, p } @@ -118,7 +125,7 @@ func (p *LogicalUnionScan) PruneColumns(parentUsedCols []*expression.Column, opt // ExhaustPhysicalPlans implements base.LogicalPlan.<14th> interface. func (p *LogicalUnionScan) ExhaustPhysicalPlans(prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { - return exhaustPhysicalPlans4LogicalUnionScan(p, prop) + return utilfuncp.ExhaustPhysicalPlans4LogicalUnionScan(p, prop) } // ExtractCorrelatedCols inherits BaseLogicalPlan.LogicalPlan.<15th> implementation. diff --git a/pkg/planner/core/logical_window.go b/pkg/planner/core/operator/logicalop/logical_window.go similarity index 93% rename from pkg/planner/core/logical_window.go rename to pkg/planner/core/operator/logicalop/logical_window.go index a7260bed948d3..e4636f4721ad1 100644 --- a/pkg/planner/core/logical_window.go +++ b/pkg/planner/core/operator/logicalop/logical_window.go @@ -12,16 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. -package core +package logicalop import ( "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/expression/aggregation" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/planner/core/base" - "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" + ruleutil "github.com/pingcap/tidb/pkg/planner/core/rule/util" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" + "github.com/pingcap/tidb/pkg/planner/util/utilfuncp" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/plancodec" @@ -30,7 +31,7 @@ import ( // LogicalWindow represents a logical window function plan. type LogicalWindow struct { - logicalop.LogicalSchemaProducer + LogicalSchemaProducer WindowFuncDescs []*aggregation.WindowFuncDesc PartitionBy []property.SortItem @@ -89,7 +90,8 @@ func (fb *FrameBound) Clone() *FrameBound { return cloned } -func (fb *FrameBound) updateCmpFuncsAndCmpDataType(cmpDataType types.EvalType) { +// UpdateCmpFuncsAndCmpDataType updates CmpFuncs and CmpDataType. +func (fb *FrameBound) UpdateCmpFuncsAndCmpDataType(cmpDataType types.EvalType) { // When cmpDataType can't match to any condition, we can ignore it. // // For example: @@ -116,6 +118,28 @@ func (fb *FrameBound) updateCmpFuncsAndCmpDataType(cmpDataType types.EvalType) { } } +// ToPB converts FrameBound to tipb structure. +func (fb *FrameBound) ToPB(ctx *base.BuildPBContext) (*tipb.WindowFrameBound, error) { + pbBound := &tipb.WindowFrameBound{ + Type: tipb.WindowBoundType(fb.Type), + Unbounded: fb.UnBounded, + } + offset := fb.Num + pbBound.Offset = &offset + + if fb.IsExplicitRange { + rangeFrame, err := expression.ExpressionsToPBList(ctx.GetExprCtx().GetEvalCtx(), fb.CalcFuncs, ctx.GetClient()) + if err != nil { + return nil, err + } + + pbBound.FrameRange = rangeFrame[0] + pbBound.CmpDataType = &fb.CmpDataType + } + + return pbBound, nil +} + // UpdateCompareCols will update CompareCols. func (fb *FrameBound) UpdateCompareCols(ctx sessionctx.Context, orderByCols []*expression.Column) error { ectx := ctx.GetExprCtx().GetEvalCtx() @@ -135,14 +159,14 @@ func (fb *FrameBound) UpdateCompareCols(ctx sessionctx.Context, orderByCols []*e } cmpDataType := expression.GetAccurateCmpType(ctx.GetExprCtx().GetEvalCtx(), fb.CompareCols[0], fb.CalcFuncs[0]) - fb.updateCmpFuncsAndCmpDataType(cmpDataType) + fb.UpdateCmpFuncsAndCmpDataType(cmpDataType) } return nil } // Init initializes LogicalWindow. func (p LogicalWindow) Init(ctx base.PlanContext, offset int) *LogicalWindow { - p.BaseLogicalPlan = logicalop.NewBaseLogicalPlan(ctx, plancodec.TypeWindow, &p, offset) + p.BaseLogicalPlan = NewBaseLogicalPlan(ctx, plancodec.TypeWindow, &p, offset) return &p } @@ -152,14 +176,14 @@ func (p LogicalWindow) Init(ctx base.PlanContext, offset int) *LogicalWindow { func (p *LogicalWindow) ReplaceExprColumns(replace map[string]*expression.Column) { for _, desc := range p.WindowFuncDescs { for _, arg := range desc.Args { - ResolveExprAndReplace(arg, replace) + ruleutil.ResolveExprAndReplace(arg, replace) } } for _, item := range p.PartitionBy { - resolveColumnAndReplace(item.Col, replace) + ruleutil.ResolveColumnAndReplace(item.Col, replace) } for _, item := range p.OrderBy { - resolveColumnAndReplace(item.Col, replace) + ruleutil.ResolveColumnAndReplace(item.Col, replace) } } @@ -288,7 +312,7 @@ func (p *LogicalWindow) PreparePossibleProperties(_ *expression.Schema, _ ...[][ // ExhaustPhysicalPlans implements base.LogicalPlan.<14th> interface. func (p *LogicalWindow) ExhaustPhysicalPlans(prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) { - return exhaustLogicalWindowPhysicalPlans(p, prop) + return utilfuncp.ExhaustPhysicalPlans4LogicalWindow(p, prop) } // ExtractCorrelatedCols implements base.LogicalPlan.<15th> interface. diff --git a/pkg/planner/core/operator/logicalop/logicalop_test/BUILD.bazel b/pkg/planner/core/operator/logicalop/logicalop_test/BUILD.bazel new file mode 100644 index 0000000000000..5abb04dba597d --- /dev/null +++ b/pkg/planner/core/operator/logicalop/logicalop_test/BUILD.bazel @@ -0,0 +1,27 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_test") + +go_test( + name = "logicalop_test_test", + timeout = "short", + srcs = ["logical_mem_table_predicate_extractor_test.go"], + flaky = True, + shard_count = 13, + deps = [ + "//pkg/domain", + "//pkg/expression", + "//pkg/parser", + "//pkg/parser/ast", + "//pkg/planner", + "//pkg/planner/core", + "//pkg/planner/core/base", + "//pkg/planner/core/operator/logicalop", + "//pkg/planner/util", + "//pkg/session", + "//pkg/session/types", + "//pkg/testkit", + "//pkg/types", + "//pkg/util/hint", + "//pkg/util/set", + "@com_github_stretchr_testify//require", + ], +) diff --git a/pkg/planner/core/memtable_predicate_extractor_test.go b/pkg/planner/core/operator/logicalop/logicalop_test/logical_mem_table_predicate_extractor_test.go similarity index 96% rename from pkg/planner/core/memtable_predicate_extractor_test.go rename to pkg/planner/core/operator/logicalop/logicalop_test/logical_mem_table_predicate_extractor_test.go index 872764f59b1cb..fafd269fe7dd1 100644 --- a/pkg/planner/core/memtable_predicate_extractor_test.go +++ b/pkg/planner/core/operator/logicalop/logicalop_test/logical_mem_table_predicate_extractor_test.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package core_test +package logicalop_test import ( "context" @@ -31,6 +31,7 @@ import ( "github.com/pingcap/tidb/pkg/planner" plannercore "github.com/pingcap/tidb/pkg/planner/core" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/session" sessiontypes "github.com/pingcap/tidb/pkg/session/types" @@ -41,7 +42,7 @@ import ( "github.com/stretchr/testify/require" ) -func getLogicalMemTable(t *testing.T, dom *domain.Domain, se sessiontypes.Session, parser *parser.Parser, sql string) *plannercore.LogicalMemTable { +func getLogicalMemTable(t *testing.T, dom *domain.Domain, se sessiontypes.Session, parser *parser.Parser, sql string) *logicalop.LogicalMemTable { stmt, err := parser.ParseOneStmt(sql, "", "") require.NoError(t, err) @@ -50,7 +51,7 @@ func getLogicalMemTable(t *testing.T, dom *domain.Domain, se sessiontypes.Sessio plan, err := builder.Build(ctx, stmt) require.NoError(t, err) - logicalPlan, err := plannercore.LogicalOptimize(ctx, builder.GetOptFlag(), plan.(base.LogicalPlan)) + logicalPlan, err := plannercore.LogicalOptimizeTest(ctx, builder.GetOptFlag(), plan.(base.LogicalPlan)) require.NoError(t, err) // Obtain the leaf plan @@ -59,7 +60,7 @@ func getLogicalMemTable(t *testing.T, dom *domain.Domain, se sessiontypes.Sessio leafPlan = leafPlan.Children()[0] } - logicalMemTable := leafPlan.(*plannercore.LogicalMemTable) + logicalMemTable := leafPlan.(*logicalop.LogicalMemTable) return logicalMemTable } @@ -1574,7 +1575,7 @@ func TestColumns(t *testing.T) { }{ { sql: `select * from INFORMATION_SCHEMA.COLUMNS where lower(column_name)=lower('T');`, - columnName: set.NewStringSet(), + columnName: set.NewStringSet("t"), }, { sql: `select * from INFORMATION_SCHEMA.COLUMNS where column_name=lower('T');`, @@ -1631,33 +1632,33 @@ func TestColumns(t *testing.T) { logicalMemTable := getLogicalMemTable(t, dom, se, parser, ca.sql) require.NotNil(t, logicalMemTable.Extractor) - columnsTableExtractor := logicalMemTable.Extractor.(*plannercore.ColumnsTableExtractor) + columnsTableExtractor := logicalMemTable.Extractor.(*plannercore.InfoSchemaColumnsExtractor) require.Equal(t, ca.skipRequest, columnsTableExtractor.SkipRequest, "SQL: %v", ca.sql) - require.Equal(t, ca.columnName.Count(), columnsTableExtractor.ColumnName.Count()) - if ca.columnName.Count() > 0 && columnsTableExtractor.ColumnName.Count() > 0 { - require.EqualValues(t, ca.columnName, columnsTableExtractor.ColumnName, "SQL: %v", ca.sql) + require.Equal(t, ca.columnName.Count(), columnsTableExtractor.ColPredicates["column_name"].Count()) + if ca.columnName.Count() > 0 && columnsTableExtractor.ColPredicates["column_name"].Count() > 0 { + require.EqualValues(t, ca.columnName, columnsTableExtractor.ColPredicates["column_name"], "SQL: %v", ca.sql) } - require.Equal(t, ca.tableSchema.Count(), columnsTableExtractor.TableSchema.Count()) - if ca.tableSchema.Count() > 0 && columnsTableExtractor.TableSchema.Count() > 0 { - require.EqualValues(t, ca.tableSchema, columnsTableExtractor.TableSchema, "SQL: %v", ca.sql) + require.Equal(t, ca.tableSchema.Count(), columnsTableExtractor.ColPredicates["table_schema"].Count()) + if ca.tableSchema.Count() > 0 && columnsTableExtractor.ColPredicates["table_schema"].Count() > 0 { + require.EqualValues(t, ca.tableSchema, columnsTableExtractor.ColPredicates["table_schema"], "SQL: %v", ca.sql) } - require.Equal(t, ca.tableName.Count(), columnsTableExtractor.TableName.Count()) - if ca.tableName.Count() > 0 && columnsTableExtractor.TableName.Count() > 0 { - require.EqualValues(t, ca.tableName, columnsTableExtractor.TableName, "SQL: %v", ca.sql) + require.Equal(t, ca.tableName.Count(), columnsTableExtractor.ColPredicates["table_name"].Count()) + if ca.tableName.Count() > 0 && columnsTableExtractor.ColPredicates["table_name"].Count() > 0 { + require.EqualValues(t, ca.tableName, columnsTableExtractor.ColPredicates["table_name"], "SQL: %v", ca.sql) } - require.Equal(t, len(ca.tableNamePattern), len(columnsTableExtractor.TableNamePatterns)) - if len(ca.tableNamePattern) > 0 && len(columnsTableExtractor.TableNamePatterns) > 0 { - require.EqualValues(t, ca.tableNamePattern, columnsTableExtractor.TableNamePatterns, "SQL: %v", ca.sql) + require.Equal(t, len(ca.tableNamePattern), len(columnsTableExtractor.LikePatterns["table_name"])) + if len(ca.tableNamePattern) > 0 && len(columnsTableExtractor.LikePatterns["table_name"]) > 0 { + require.EqualValues(t, ca.tableNamePattern, columnsTableExtractor.LikePatterns["table_name"], "SQL: %v", ca.sql) } - require.Equal(t, len(ca.columnNamePattern), len(columnsTableExtractor.ColumnNamePatterns)) - if len(ca.columnNamePattern) > 0 && len(columnsTableExtractor.ColumnNamePatterns) > 0 { - require.EqualValues(t, ca.columnNamePattern, columnsTableExtractor.ColumnNamePatterns, "SQL: %v", ca.sql) + require.Equal(t, len(ca.columnNamePattern), len(columnsTableExtractor.LikePatterns["column_name"])) + if len(ca.columnNamePattern) > 0 && len(columnsTableExtractor.LikePatterns["column_name"]) > 0 { + require.EqualValues(t, ca.columnNamePattern, columnsTableExtractor.LikePatterns["column_name"], "SQL: %v", ca.sql) } - require.Equal(t, len(ca.tableSchemaPattern), len(columnsTableExtractor.TableSchemaPatterns)) - if len(ca.tableSchemaPattern) > 0 && len(columnsTableExtractor.TableSchemaPatterns) > 0 { - require.EqualValues(t, ca.tableSchemaPattern, columnsTableExtractor.TableSchemaPatterns, "SQL: %v", ca.sql) + require.Equal(t, len(ca.tableSchemaPattern), len(columnsTableExtractor.LikePatterns["table_schema"])) + if len(ca.tableSchemaPattern) > 0 && len(columnsTableExtractor.LikePatterns["table_schema"]) > 0 { + require.EqualValues(t, ca.tableSchemaPattern, columnsTableExtractor.LikePatterns["table_schema"], "SQL: %v", ca.sql) } } } @@ -1762,8 +1763,8 @@ func TestExtractorInPreparedStmt(t *testing.T) { userVars: []any{`"a%"`}, params: []any{"a%"}, checker: func(extractor base.MemTablePredicateExtractor) { - rse := extractor.(*plannercore.ColumnsTableExtractor) - require.EqualValues(t, []string{"a%"}, rse.TableNamePatterns) + rse := extractor.(*plannercore.InfoSchemaColumnsExtractor) + require.EqualValues(t, []string{"a%"}, rse.LikePatterns["table_name"]) }, }, { @@ -2037,8 +2038,42 @@ func TestInfoSchemaTableExtract(t *testing.T) { for _, ca := range cases { logicalMemTable := getLogicalMemTable(t, dom, se, parser, ca.sql) require.NotNil(t, logicalMemTable.Extractor) - columnsTableExtractor := logicalMemTable.Extractor.(*plannercore.InfoSchemaTablesExtractor) - require.Equal(t, ca.skipRequest, columnsTableExtractor.SkipRequest, "SQL: %v", ca.sql) - require.Equal(t, ca.colPredicates, columnsTableExtractor.ColPredicates, "SQL: %v", ca.sql) + var base *plannercore.InfoSchemaBaseExtractor + switch ex := logicalMemTable.Extractor.(type) { + case *plannercore.InfoSchemaBaseExtractor: + base = ex + case *plannercore.InfoSchemaTablesExtractor: + base = &ex.InfoSchemaBaseExtractor + case *plannercore.InfoSchemaPartitionsExtractor: + base = &ex.InfoSchemaBaseExtractor + case *plannercore.InfoSchemaStatisticsExtractor: + base = &ex.InfoSchemaBaseExtractor + case *plannercore.InfoSchemaSchemataExtractor: + base = &ex.InfoSchemaBaseExtractor + case *plannercore.InfoSchemaIndexesExtractor: + base = &ex.InfoSchemaBaseExtractor + case *plannercore.InfoSchemaIndexUsageExtractor: + base = &ex.InfoSchemaBaseExtractor + case *plannercore.InfoSchemaViewsExtractor: + base = &ex.InfoSchemaBaseExtractor + case *plannercore.InfoSchemaKeyColumnUsageExtractor: + base = &ex.InfoSchemaBaseExtractor + case *plannercore.InfoSchemaTableConstraintsExtractor: + base = &ex.InfoSchemaBaseExtractor + case *plannercore.InfoSchemaSequenceExtractor: + base = &ex.InfoSchemaBaseExtractor + case *plannercore.InfoSchemaCheckConstraintsExtractor: + base = &ex.InfoSchemaBaseExtractor + case *plannercore.InfoSchemaReferConstExtractor: + base = &ex.InfoSchemaBaseExtractor + case *plannercore.InfoSchemaTiDBCheckConstraintsExtractor: + base = &ex.InfoSchemaBaseExtractor + case *plannercore.InfoSchemaColumnsExtractor: + base = &ex.InfoSchemaBaseExtractor + default: + require.Failf(t, "unexpected extractor type", "%T", ex) + } + require.Equal(t, ca.skipRequest, base.SkipRequest, "SQL: %v", ca.sql) + require.Equal(t, ca.colPredicates, base.ColPredicates, "SQL: %v", ca.sql) } } diff --git a/pkg/planner/core/operator/physicalop/BUILD.bazel b/pkg/planner/core/operator/physicalop/BUILD.bazel new file mode 100644 index 0000000000000..bba351434dca8 --- /dev/null +++ b/pkg/planner/core/operator/physicalop/BUILD.bazel @@ -0,0 +1,23 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "physicalop", + srcs = ["base_physical_plan.go"], + importpath = "github.com/pingcap/tidb/pkg/planner/core/operator/physicalop", + visibility = ["//visibility:public"], + deps = [ + "//pkg/expression", + "//pkg/kv", + "//pkg/planner/core/base", + "//pkg/planner/core/operator/baseimpl", + "//pkg/planner/property", + "//pkg/planner/util/costusage", + "//pkg/planner/util/optimizetrace", + "//pkg/planner/util/utilfuncp", + "//pkg/util/execdetails", + "//pkg/util/size", + "//pkg/util/tracing", + "@com_github_pingcap_errors//:errors", + "@com_github_pingcap_tipb//go-tipb", + ], +) diff --git a/pkg/planner/core/operator/physicalop/base_physical_plan.go b/pkg/planner/core/operator/physicalop/base_physical_plan.go new file mode 100644 index 0000000000000..4370cfdeec5b1 --- /dev/null +++ b/pkg/planner/core/operator/physicalop/base_physical_plan.go @@ -0,0 +1,319 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package physicalop + +import ( + "github.com/pingcap/errors" + "github.com/pingcap/tidb/pkg/expression" + "github.com/pingcap/tidb/pkg/kv" + "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/baseimpl" + "github.com/pingcap/tidb/pkg/planner/property" + "github.com/pingcap/tidb/pkg/planner/util/costusage" + "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" + "github.com/pingcap/tidb/pkg/planner/util/utilfuncp" + "github.com/pingcap/tidb/pkg/util/execdetails" + "github.com/pingcap/tidb/pkg/util/size" + "github.com/pingcap/tidb/pkg/util/tracing" + "github.com/pingcap/tipb/go-tipb" +) + +// BasePhysicalPlan is the common structure that used in physical plan. +type BasePhysicalPlan struct { + baseimpl.Plan + + childrenReqProps []*property.PhysicalProperty `plan-cache-clone:"shallow"` + Self base.PhysicalPlan + children []base.PhysicalPlan + + // used by the new cost interface + PlanCostInit bool + PlanCost float64 + PlanCostVer2 costusage.CostVer2 `plan-cache-clone:"shallow"` + + // probeParents records the IndexJoins and Applys with this operator in their inner children. + // Please see comments in op.PhysicalPlan for details. + probeParents []base.PhysicalPlan `plan-cache-clone:"shallow"` + + // Only for MPP. If TiFlashFineGrainedShuffleStreamCount > 0: + // 1. For ExchangeSender, means its output will be partitioned by hash key. + // 2. For ExchangeReceiver/Window/Sort, means its input is already partitioned. + TiFlashFineGrainedShuffleStreamCount uint64 +} + +// ******************************* start implementation of Plan interface ******************************* + +// ExplainInfo implements Plan ExplainInfo interface. +func (*BasePhysicalPlan) ExplainInfo() string { + return "" +} + +// Schema implements Plan Schema interface. +func (p *BasePhysicalPlan) Schema() *expression.Schema { + return p.children[0].Schema() +} + +// BuildPlanTrace implements Plan BuildPlanTrace interface. +func (p *BasePhysicalPlan) BuildPlanTrace() *tracing.PlanTrace { + tp := "" + info := "" + if p.Self != nil { + tp = p.Self.TP() + info = p.Self.ExplainInfo() + } + + planTrace := &tracing.PlanTrace{ID: p.ID(), TP: tp, ExplainInfo: info} + for _, child := range p.Children() { + planTrace.Children = append(planTrace.Children, child.BuildPlanTrace()) + } + return planTrace +} + +// ******************************* end implementation of Plan interface ********************************* + +// *************************** start implementation of PhysicalPlan interface *************************** + +// GetPlanCostVer1 implements the base.PhysicalPlan.<0th> interface. +// which calculates the cost of the plan if it has not been calculated yet and returns the cost. +func (p *BasePhysicalPlan) GetPlanCostVer1(taskType property.TaskType, option *optimizetrace.PlanCostOption) (float64, error) { + costFlag := option.CostFlag + if p.PlanCostInit && !costusage.HasCostFlag(costFlag, costusage.CostFlagRecalculate) { + // just calculate the cost once and always reuse it + return p.PlanCost, nil + } + p.PlanCost = 0 // the default implementation, the operator have no cost + for _, child := range p.children { + childCost, err := child.GetPlanCostVer1(taskType, option) + if err != nil { + return 0, err + } + p.PlanCost += childCost + } + p.PlanCostInit = true + return p.PlanCost, nil +} + +// GetPlanCostVer2 implements the base.PhysicalPlan.<1st> interface. +// which calculates the cost of the plan if it has not been calculated yet and returns the cost. +func (p *BasePhysicalPlan) GetPlanCostVer2(taskType property.TaskType, option *optimizetrace.PlanCostOption) (costusage.CostVer2, error) { + if p.PlanCostInit && !costusage.HasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { + return p.PlanCostVer2, nil + } + childCosts := make([]costusage.CostVer2, 0, len(p.children)) + for _, child := range p.children { + childCost, err := child.GetPlanCostVer2(taskType, option) + if err != nil { + return costusage.ZeroCostVer2, err + } + childCosts = append(childCosts, childCost) + } + if len(childCosts) == 0 { + p.PlanCostVer2 = costusage.NewZeroCostVer2(costusage.TraceCost(option)) + } else { + p.PlanCostVer2 = costusage.SumCostVer2(childCosts...) + } + p.PlanCostInit = true + return p.PlanCostVer2, nil +} + +// Attach2Task implements the base.PhysicalPlan.<2nd> interface. +func (p *BasePhysicalPlan) Attach2Task(tasks ...base.Task) base.Task { + t := tasks[0].ConvertToRootTask(p.SCtx()) + return utilfuncp.AttachPlan2Task(p.Self, t) +} + +// ToPB implements the base.PhysicalPlan.<3rd> interface. +func (p *BasePhysicalPlan) ToPB(_ *base.BuildPBContext, _ kv.StoreType) (*tipb.Executor, error) { + return nil, errors.Errorf("plan %s fails converts to PB", p.Plan.ExplainID()) +} + +// GetChildReqProps implements the base.PhysicalPlan.<4th> interface. +func (p *BasePhysicalPlan) GetChildReqProps(idx int) *property.PhysicalProperty { + return p.childrenReqProps[idx] +} + +// StatsCount implements the base.PhysicalPlan.<5th> interface. +func (p *BasePhysicalPlan) StatsCount() float64 { + return p.StatsInfo().RowCount +} + +// ExtractCorrelatedCols implements the base.PhysicalPlan.<6th> interface. +func (*BasePhysicalPlan) ExtractCorrelatedCols() []*expression.CorrelatedColumn { + return nil +} + +// Children implements the base.PhysicalPlan.<7th> interface. +func (p *BasePhysicalPlan) Children() []base.PhysicalPlan { + return p.children +} + +// SetChildren implements the base.PhysicalPlan.<8th> interface. +func (p *BasePhysicalPlan) SetChildren(children ...base.PhysicalPlan) { + p.children = children +} + +// SetChild implements the base.PhysicalPlan.<9th> interface. +func (p *BasePhysicalPlan) SetChild(i int, child base.PhysicalPlan) { + p.children[i] = child +} + +// ResolveIndices implements the base.PhysicalPlan.<10th> interface. +func (p *BasePhysicalPlan) ResolveIndices() (err error) { + for _, child := range p.children { + err = child.ResolveIndices() + if err != nil { + return err + } + } + return +} + +// StatsInfo inherits the BasePhysicalPlan.Plan's implementation for <11th>. + +// SetStats inherits the BasePhysicalPlan.Plan's implementation for <12th>. + +// ExplainNormalizedInfo implements the base.PhysicalPlan.<13th> interface. +func (*BasePhysicalPlan) ExplainNormalizedInfo() string { + return "" +} + +// Clone implements the base.PhysicalPlan.<14th> interface. +func (p *BasePhysicalPlan) Clone(base.PlanContext) (base.PhysicalPlan, error) { + return nil, errors.Errorf("%T doesn't support cloning", p.Self) +} + +// AppendChildCandidate implements the base.PhysicalPlan.<15th> interface. +func (p *BasePhysicalPlan) AppendChildCandidate(op *optimizetrace.PhysicalOptimizeOp) { + if len(p.Children()) < 1 { + return + } + childrenID := make([]int, 0) + for _, child := range p.Children() { + childCandidate := &tracing.CandidatePlanTrace{ + PlanTrace: &tracing.PlanTrace{TP: child.TP(), ID: child.ID(), + ExplainInfo: child.ExplainInfo()}, + } + op.AppendCandidate(childCandidate) + child.AppendChildCandidate(op) + childrenID = append(childrenID, child.ID()) + } + op.GetTracer().Candidates[p.ID()].PlanTrace.AppendChildrenID(childrenID...) +} + +// MemoryUsage implements the base.PhysicalPlan.<16th> interface. +func (p *BasePhysicalPlan) MemoryUsage() (sum int64) { + if p == nil { + return + } + + sum = p.Plan.MemoryUsage() + size.SizeOfSlice + int64(cap(p.childrenReqProps))*size.SizeOfPointer + + size.SizeOfSlice + int64(cap(p.children)+1)*size.SizeOfInterface + size.SizeOfFloat64 + + size.SizeOfUint64 + size.SizeOfBool + + for _, prop := range p.childrenReqProps { + sum += prop.MemoryUsage() + } + for _, plan := range p.children { + sum += plan.MemoryUsage() + } + return +} + +// SetProbeParents implements base.PhysicalPlan.<17th> interface. +func (p *BasePhysicalPlan) SetProbeParents(probeParents []base.PhysicalPlan) { + p.probeParents = probeParents +} + +// GetEstRowCountForDisplay implements base.PhysicalPlan.<18th> interface. +func (p *BasePhysicalPlan) GetEstRowCountForDisplay() float64 { + if p == nil { + return 0 + } + return p.StatsInfo().RowCount * utilfuncp.GetEstimatedProbeCntFromProbeParents(p.probeParents) +} + +// GetActualProbeCnt implements base.PhysicalPlan.<19th> interface. +func (p *BasePhysicalPlan) GetActualProbeCnt(statsColl *execdetails.RuntimeStatsColl) int64 { + if p == nil { + return 1 + } + return utilfuncp.GetActualProbeCntFromProbeParents(p.probeParents, statsColl) +} + +// *************************** end implementation of PhysicalPlan interface ***************************** + +// CloneForPlanCacheWithSelf clones the plan with new self. +func (p *BasePhysicalPlan) CloneForPlanCacheWithSelf(newCtx base.PlanContext, newSelf base.PhysicalPlan) (*BasePhysicalPlan, bool) { + cloned := new(BasePhysicalPlan) + *cloned = *p + cloned.SetSCtx(newCtx) + cloned.Self = newSelf + cloned.children = make([]base.PhysicalPlan, 0, len(p.children)) + for _, child := range p.children { + clonedChild, ok := child.CloneForPlanCache(newCtx) + if !ok { + return nil, false + } + clonedPP, ok := clonedChild.(base.PhysicalPlan) + if !ok { + return nil, false + } + cloned.children = append(cloned.children, clonedPP) + } + return cloned, true +} + +// CloneWithSelf clones the plan with new self. +func (p *BasePhysicalPlan) CloneWithSelf(newCtx base.PlanContext, newSelf base.PhysicalPlan) (*BasePhysicalPlan, error) { + base := &BasePhysicalPlan{ + Plan: p.Plan, + Self: newSelf, + TiFlashFineGrainedShuffleStreamCount: p.TiFlashFineGrainedShuffleStreamCount, + probeParents: p.probeParents, + } + base.SetSCtx(newCtx) + for _, child := range p.children { + cloned, err := child.Clone(newCtx) + if err != nil { + return nil, err + } + base.children = append(base.children, cloned) + } + for _, prop := range p.childrenReqProps { + if prop == nil { + continue + } + base.childrenReqProps = append(base.childrenReqProps, prop.CloneEssentialFields()) + } + return base, nil +} + +// SetChildrenReqProps set the BasePhysicalPlan's childrenReqProps. +func (p *BasePhysicalPlan) SetChildrenReqProps(reqProps []*property.PhysicalProperty) { + p.childrenReqProps = reqProps +} + +// SetXthChildReqProps set the BasePhysicalPlan's x-th child as required property. +func (p *BasePhysicalPlan) SetXthChildReqProps(x int, reqProps *property.PhysicalProperty) { + p.childrenReqProps[x] = reqProps +} + +// NewBasePhysicalPlan creates a new BasePhysicalPlan. +func NewBasePhysicalPlan(ctx base.PlanContext, tp string, self base.PhysicalPlan, offset int) BasePhysicalPlan { + return BasePhysicalPlan{ + Plan: baseimpl.NewBasePlan(ctx, tp, offset), + Self: self, + } +} diff --git a/pkg/planner/core/optimizer.go b/pkg/planner/core/optimizer.go index 75c63c57ac3ee..1149710aee0b9 100644 --- a/pkg/planner/core/optimizer.go +++ b/pkg/planner/core/optimizer.go @@ -39,6 +39,9 @@ import ( "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" + "github.com/pingcap/tidb/pkg/planner/core/operator/physicalop" + "github.com/pingcap/tidb/pkg/planner/core/rule" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util/debugtrace" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" @@ -96,32 +99,32 @@ const ( flagResolveExpand ) -var optRuleList = []logicalOptRule{ - &gcSubstituter{}, - &columnPruner{}, - &resultReorder{}, - &buildKeySolver{}, - &decorrelateSolver{}, - &semiJoinRewriter{}, - &aggregationEliminator{}, - &skewDistinctAggRewriter{}, - &projectionEliminator{}, - &maxMinEliminator{}, - &constantPropagationSolver{}, - &convertOuterToInnerJoin{}, - &ppdSolver{}, - &outerJoinEliminator{}, - &partitionProcessor{}, - &collectPredicateColumnsPoint{}, - &aggregationPushDownSolver{}, - &deriveTopNFromWindow{}, - &predicateSimplification{}, - &pushDownTopNOptimizer{}, - &syncWaitStatsLoadPoint{}, - &joinReOrderSolver{}, - &columnPruner{}, // column pruning again at last, note it will mess up the results of buildKeySolver - &pushDownSequenceSolver{}, - &resolveExpand{}, +var optRuleList = []base.LogicalOptRule{ + &GcSubstituter{}, + &ColumnPruner{}, + &ResultReorder{}, + &rule.BuildKeySolver{}, + &DecorrelateSolver{}, + &SemiJoinRewriter{}, + &AggregationEliminator{}, + &SkewDistinctAggRewriter{}, + &ProjectionEliminator{}, + &MaxMinEliminator{}, + &rule.ConstantPropagationSolver{}, + &ConvertOuterToInnerJoin{}, + &PPDSolver{}, + &OuterJoinEliminator{}, + &PartitionProcessor{}, + &CollectPredicateColumnsPoint{}, + &AggregationPushDownSolver{}, + &DeriveTopNFromWindow{}, + &PredicateSimplification{}, + &PushDownTopNOptimizer{}, + &SyncWaitStatsLoadPoint{}, + &JoinReOrderSolver{}, + &ColumnPruner{}, // column pruning again at last, note it will mess up the results of buildKeySolver + &PushDownSequenceSolver{}, + &ResolveExpand{}, } // Interaction Rule List @@ -129,20 +132,7 @@ var optRuleList = []logicalOptRule{ 1. The related rule has been trigger and changed the plan 2. The interaction rule is enabled */ -var optInteractionRuleList = map[logicalOptRule]logicalOptRule{} - -// logicalOptRule means a logical optimizing rule, which contains decorrelate, ppd, column pruning, etc. -type logicalOptRule interface { - /* Return Parameters: - 1. base.LogicalPlan: The optimized base.LogicalPlan after rule is applied - 2. bool: Used to judge whether the plan is changed or not by logical rule. - If the plan is changed, it will return true. - The default value is false. It means that no interaction rule will be triggered. - 3. error: If there is error during the rule optimizer, it will be thrown - */ - optimize(context.Context, base.LogicalPlan, *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) - name() string -} +var optInteractionRuleList = map[base.LogicalOptRule]base.LogicalOptRule{} // BuildLogicalPlanForTest builds a logical plan for testing purpose from ast.Node. func BuildLogicalPlanForTest(ctx context.Context, sctx sessionctx.Context, node ast.Node, infoSchema infoschema.InfoSchema) (base.Plan, error) { @@ -397,13 +387,13 @@ func refineCETrace(sctx base.PlanContext) { func mergeContinuousSelections(p base.PhysicalPlan) { if sel, ok := p.(*PhysicalSelection); ok { for { - childSel := sel.children[0] + childSel := sel.Children()[0] tmp, ok := childSel.(*PhysicalSelection) if !ok { break } sel.Conditions = append(sel.Conditions, tmp.Conditions...) - sel.SetChild(0, tmp.children[0]) + sel.SetChild(0, tmp.Children()[0]) } } for _, child := range p.Children() { @@ -424,6 +414,7 @@ func postOptimize(ctx context.Context, sctx base.PlanContext, plan base.Physical plan = InjectExtraProjection(plan) mergeContinuousSelections(plan) plan = eliminateUnionScanAndLock(sctx, plan) + plan = avoidColumnEvaluatorForProjBelowUnion(plan) plan = enableParallelApply(sctx, plan) handleFineGrainedShuffle(ctx, sctx, plan) propagateProbeParents(plan, nil) @@ -522,7 +513,7 @@ func countStarRewriteInternal(plan base.PhysicalPlan) { default: return } - if len(physicalAgg.GroupByItems) > 0 || len(physicalAgg.children) != 1 { + if len(physicalAgg.GroupByItems) > 0 || len(physicalAgg.Children()) != 1 { return } for _, aggFunc := range physicalAgg.AggFuncs { @@ -612,7 +603,7 @@ func handleFineGrainedShuffle(ctx context.Context, sctx base.PlanContext, plan b func setupFineGrainedShuffle(ctx context.Context, sctx base.PlanContext, streamCountInfo *tiflashClusterInfo, tiflashServerCountInfo *tiflashClusterInfo, plan base.PhysicalPlan) { if tableReader, ok := plan.(*PhysicalTableReader); ok { if _, isExchangeSender := tableReader.tablePlan.(*PhysicalExchangeSender); isExchangeSender { - helper := fineGrainedShuffleHelper{shuffleTarget: unknown, plans: make([]*basePhysicalPlan, 1)} + helper := fineGrainedShuffleHelper{shuffleTarget: unknown, plans: make([]*physicalop.BasePhysicalPlan, 1)} setupFineGrainedShuffleInternal(ctx, sctx, tableReader.tablePlan, &helper, streamCountInfo, tiflashServerCountInfo) } } else { @@ -633,7 +624,7 @@ const ( type fineGrainedShuffleHelper struct { shuffleTarget shuffleTarget - plans []*basePhysicalPlan + plans []*physicalop.BasePhysicalPlan joinKeysCount int } @@ -656,7 +647,7 @@ func (h *fineGrainedShuffleHelper) clear() { h.joinKeysCount = 0 } -func (h *fineGrainedShuffleHelper) updateTarget(t shuffleTarget, p *basePhysicalPlan) { +func (h *fineGrainedShuffleHelper) updateTarget(t shuffleTarget, p *physicalop.BasePhysicalPlan) { h.shuffleTarget = t h.plans = append(h.plans, p) } @@ -812,34 +803,34 @@ func setupFineGrainedShuffleInternal(ctx context.Context, sctx base.PlanContext, // Do not clear the plans because window executor will keep the data partition. // For non hash partition window function, there will be a passthrough ExchangeSender to collect data, // which will break data partition. - helper.updateTarget(window, &x.basePhysicalPlan) - setupFineGrainedShuffleInternal(ctx, sctx, x.children[0], helper, streamCountInfo, tiflashServerCountInfo) + helper.updateTarget(window, &x.BasePhysicalPlan) + setupFineGrainedShuffleInternal(ctx, sctx, x.Children()[0], helper, streamCountInfo, tiflashServerCountInfo) case *PhysicalSort: if x.IsPartialSort { // Partial sort will keep the data partition. - helper.plans = append(helper.plans, &x.basePhysicalPlan) + helper.plans = append(helper.plans, &x.BasePhysicalPlan) } else { // Global sort will break the data partition. helper.clear() } - setupFineGrainedShuffleInternal(ctx, sctx, x.children[0], helper, streamCountInfo, tiflashServerCountInfo) + setupFineGrainedShuffleInternal(ctx, sctx, x.Children()[0], helper, streamCountInfo, tiflashServerCountInfo) case *PhysicalSelection: - helper.plans = append(helper.plans, &x.basePhysicalPlan) - setupFineGrainedShuffleInternal(ctx, sctx, x.children[0], helper, streamCountInfo, tiflashServerCountInfo) + helper.plans = append(helper.plans, &x.BasePhysicalPlan) + setupFineGrainedShuffleInternal(ctx, sctx, x.Children()[0], helper, streamCountInfo, tiflashServerCountInfo) case *PhysicalProjection: - helper.plans = append(helper.plans, &x.basePhysicalPlan) - setupFineGrainedShuffleInternal(ctx, sctx, x.children[0], helper, streamCountInfo, tiflashServerCountInfo) + helper.plans = append(helper.plans, &x.BasePhysicalPlan) + setupFineGrainedShuffleInternal(ctx, sctx, x.Children()[0], helper, streamCountInfo, tiflashServerCountInfo) case *PhysicalExchangeReceiver: - helper.plans = append(helper.plans, &x.basePhysicalPlan) - setupFineGrainedShuffleInternal(ctx, sctx, x.children[0], helper, streamCountInfo, tiflashServerCountInfo) + helper.plans = append(helper.plans, &x.BasePhysicalPlan) + setupFineGrainedShuffleInternal(ctx, sctx, x.Children()[0], helper, streamCountInfo, tiflashServerCountInfo) case *PhysicalHashAgg: // Todo: allow hash aggregation's output still benefits from fine grained shuffle - aggHelper := fineGrainedShuffleHelper{shuffleTarget: hashAgg, plans: []*basePhysicalPlan{}} - aggHelper.plans = append(aggHelper.plans, &x.basePhysicalPlan) - setupFineGrainedShuffleInternal(ctx, sctx, x.children[0], &aggHelper, streamCountInfo, tiflashServerCountInfo) + aggHelper := fineGrainedShuffleHelper{shuffleTarget: hashAgg, plans: []*physicalop.BasePhysicalPlan{}} + aggHelper.plans = append(aggHelper.plans, &x.BasePhysicalPlan) + setupFineGrainedShuffleInternal(ctx, sctx, x.Children()[0], &aggHelper, streamCountInfo, tiflashServerCountInfo) case *PhysicalHashJoin: - child0 := x.children[0] - child1 := x.children[1] + child0 := x.Children()[0] + child1 := x.Children()[1] buildChild := child0 probChild := child1 joinKeys := x.LeftJoinKeys @@ -850,12 +841,12 @@ func setupFineGrainedShuffleInternal(ctx context.Context, sctx base.PlanContext, probChild = child0 } if len(joinKeys) > 0 { // Not cross join - buildHelper := fineGrainedShuffleHelper{shuffleTarget: joinBuild, plans: []*basePhysicalPlan{}} - buildHelper.plans = append(buildHelper.plans, &x.basePhysicalPlan) + buildHelper := fineGrainedShuffleHelper{shuffleTarget: joinBuild, plans: []*physicalop.BasePhysicalPlan{}} + buildHelper.plans = append(buildHelper.plans, &x.BasePhysicalPlan) buildHelper.joinKeysCount = len(joinKeys) setupFineGrainedShuffleInternal(ctx, sctx, buildChild, &buildHelper, streamCountInfo, tiflashServerCountInfo) } else { - buildHelper := fineGrainedShuffleHelper{shuffleTarget: unknown, plans: []*basePhysicalPlan{}} + buildHelper := fineGrainedShuffleHelper{shuffleTarget: unknown, plans: []*physicalop.BasePhysicalPlan{}} setupFineGrainedShuffleInternal(ctx, sctx, buildChild, &buildHelper, streamCountInfo, tiflashServerCountInfo) } // don't apply fine grained shuffle for probe side @@ -896,10 +887,10 @@ func setupFineGrainedShuffleInternal(ctx context.Context, sctx base.PlanContext, } // exchange sender will break the data partition. helper.clear() - setupFineGrainedShuffleInternal(ctx, sctx, x.children[0], helper, streamCountInfo, tiflashServerCountInfo) + setupFineGrainedShuffleInternal(ctx, sctx, x.Children()[0], helper, streamCountInfo, tiflashServerCountInfo) default: for _, child := range x.Children() { - childHelper := fineGrainedShuffleHelper{shuffleTarget: unknown, plans: []*basePhysicalPlan{}} + childHelper := fineGrainedShuffleHelper{shuffleTarget: unknown, plans: []*physicalop.BasePhysicalPlan{}} setupFineGrainedShuffleInternal(ctx, sctx, child, &childHelper, streamCountInfo, tiflashServerCountInfo) } } @@ -999,7 +990,7 @@ func logicalOptimize(ctx context.Context, flag uint64, logic base.LogicalPlan) ( }() } var err error - var againRuleList []logicalOptRule + var againRuleList []base.LogicalOptRule for i, rule := range optRuleList { // The order of flags is same as the order of optRule in the list. // We use a bitmask to record which opt rules should be used. If the i-th bit is 1, it means we should @@ -1007,9 +998,9 @@ func logicalOptimize(ctx context.Context, flag uint64, logic base.LogicalPlan) ( if flag&(1< 0 { - logic.SCtx().GetSessionVars().StmtCtx.AppendWarning(errors.NewNoStackErrorf("The parameter of nth_plan() is out of range")) + logic.SCtx().GetSessionVars().StmtCtx.AppendWarning(errors.NewNoStackError("The parameter of nth_plan() is out of range")) } if t.Invalid() { errMsg := "Can't find a proper physical plan for this query" @@ -1097,6 +1088,22 @@ func physicalOptimize(logic base.LogicalPlan, planCounter *base.PlanCounterTp) ( return t.Plan(), cost, err } +// avoidColumnEvaluatorForProjBelowUnion sets AvoidColumnEvaluator to false for the projection operator which is a child of Union operator. +func avoidColumnEvaluatorForProjBelowUnion(p base.PhysicalPlan) base.PhysicalPlan { + iteratePhysicalPlan(p, func(p base.PhysicalPlan) bool { + x, ok := p.(*PhysicalUnionAll) + if ok { + for _, child := range x.Children() { + if proj, ok := child.(*PhysicalProjection); ok { + proj.AvoidColumnEvaluator = true + } + } + } + return true + }) + return p +} + // eliminateUnionScanAndLock set lock property for PointGet and BatchPointGet and eliminates UnionScan and Lock. func eliminateUnionScanAndLock(sctx base.PlanContext, p base.PhysicalPlan) base.PhysicalPlan { var pointGet *PointGetPlan @@ -1166,8 +1173,8 @@ func transformPhysicalPlan(p base.PhysicalPlan, f func(p base.PhysicalPlan) base } func existsCartesianProduct(p base.LogicalPlan) bool { - if join, ok := p.(*LogicalJoin); ok && len(join.EqualConditions) == 0 { - return join.JoinType == InnerJoin || join.JoinType == LeftOuterJoin || join.JoinType == RightOuterJoin + if join, ok := p.(*logicalop.LogicalJoin); ok && len(join.EqualConditions) == 0 { + return join.JoinType == logicalop.InnerJoin || join.JoinType == logicalop.LeftOuterJoin || join.JoinType == logicalop.RightOuterJoin } for _, child := range p.Children() { if existsCartesianProduct(child) { diff --git a/pkg/planner/core/optimizer_test.go b/pkg/planner/core/optimizer_test.go index c180557b35175..99cf7c0477e6d 100644 --- a/pkg/planner/core/optimizer_test.go +++ b/pkg/planner/core/optimizer_test.go @@ -25,6 +25,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/physicalop" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tipb/go-tipb" @@ -117,7 +118,7 @@ func TestHandleFineGrainedShuffle(t *testing.T) { Col: nil, Desc: true, } - var plans []*basePhysicalPlan + var plans []*physicalop.BasePhysicalPlan tableReader := &PhysicalTableReader{} partWindow := &PhysicalWindow{ // Meaningless sort item, just for test. @@ -135,14 +136,14 @@ func TestHandleFineGrainedShuffle(t *testing.T) { ExchangeType: tipb.ExchangeType_Hash, } tableScan := &PhysicalTableScan{} - plans = append(plans, &partWindow.basePhysicalPlan) - plans = append(plans, &partialSort.basePhysicalPlan) - plans = append(plans, &sort.basePhysicalPlan) - plans = append(plans, &recv.basePhysicalPlan) - plans = append(plans, &hashSender.basePhysicalPlan) - clear := func(plans []*basePhysicalPlan) { + plans = append(plans, &partWindow.BasePhysicalPlan) + plans = append(plans, &partialSort.BasePhysicalPlan) + plans = append(plans, &sort.BasePhysicalPlan) + plans = append(plans, &recv.BasePhysicalPlan) + plans = append(plans, &hashSender.BasePhysicalPlan) + clear := func(plans []*physicalop.BasePhysicalPlan) { for _, p := range plans { - p.children = nil + p.SetChildren(nil) p.TiFlashFineGrainedShuffleStreamCount = 0 } } @@ -176,29 +177,29 @@ func TestHandleFineGrainedShuffle(t *testing.T) { // Window <- Sort <- ExchangeReceiver <- ExchangeSender tableReader.tablePlan = passSender - passSender.children = []base.PhysicalPlan{partWindow} - partWindow.children = []base.PhysicalPlan{partialSort} - partialSort.children = []base.PhysicalPlan{recv} - recv.children = []base.PhysicalPlan{hashSender} - hashSender.children = []base.PhysicalPlan{tableScan} + passSender.SetChildren([]base.PhysicalPlan{partWindow}...) + partWindow.SetChildren([]base.PhysicalPlan{partialSort}...) + partialSort.SetChildren([]base.PhysicalPlan{recv}...) + recv.SetChildren([]base.PhysicalPlan{hashSender}...) + hashSender.SetChildren([]base.PhysicalPlan{tableScan}...) start(partWindow, expStreamCount, 4, 0) // Window <- ExchangeReceiver <- ExchangeSender tableReader.tablePlan = passSender - passSender.children = []base.PhysicalPlan{partWindow} - partWindow.children = []base.PhysicalPlan{recv} - recv.children = []base.PhysicalPlan{hashSender} - hashSender.children = []base.PhysicalPlan{tableScan} + passSender.SetChildren([]base.PhysicalPlan{partWindow}...) + partWindow.SetChildren([]base.PhysicalPlan{recv}...) + recv.SetChildren([]base.PhysicalPlan{hashSender}...) + hashSender.SetChildren([]base.PhysicalPlan{tableScan}...) start(partWindow, expStreamCount, 3, 0) // Window <- Sort(x) <- ExchangeReceiver <- ExchangeSender // Fine-grained shuffle is disabled because sort is not partial. tableReader.tablePlan = passSender - passSender.children = []base.PhysicalPlan{partWindow} - partWindow.children = []base.PhysicalPlan{sort} - sort.children = []base.PhysicalPlan{recv} - recv.children = []base.PhysicalPlan{hashSender} - hashSender.children = []base.PhysicalPlan{tableScan} + passSender.SetChildren([]base.PhysicalPlan{partWindow}...) + partWindow.SetChildren([]base.PhysicalPlan{sort}...) + sort.SetChildren([]base.PhysicalPlan{recv}...) + recv.SetChildren([]base.PhysicalPlan{hashSender}...) + hashSender.SetChildren([]base.PhysicalPlan{tableScan}...) start(partWindow, 0, 4, 0) // Window <- Sort <- Window <- Sort <- ExchangeReceiver <- ExchangeSender @@ -210,13 +211,13 @@ func TestHandleFineGrainedShuffle(t *testing.T) { IsPartialSort: true, } tableReader.tablePlan = passSender - passSender.children = []base.PhysicalPlan{partWindow} - partWindow.children = []base.PhysicalPlan{partialSort} - partialSort.children = []base.PhysicalPlan{partWindow1} - partWindow1.children = []base.PhysicalPlan{partialSort1} - partialSort1.children = []base.PhysicalPlan{recv} - recv.children = []base.PhysicalPlan{hashSender} - hashSender.children = []base.PhysicalPlan{tableScan} + passSender.SetChildren([]base.PhysicalPlan{partWindow}...) + partWindow.SetChildren([]base.PhysicalPlan{partialSort}...) + partialSort.SetChildren([]base.PhysicalPlan{partWindow1}...) + partWindow1.SetChildren([]base.PhysicalPlan{partialSort1}...) + partialSort1.SetChildren([]base.PhysicalPlan{recv}...) + recv.SetChildren([]base.PhysicalPlan{hashSender}...) + hashSender.SetChildren([]base.PhysicalPlan{tableScan}...) start(partWindow, expStreamCount, 6, 0) // Window <- Sort <- Window(x) <- Sort <- ExchangeReceiver <- ExchangeSender(x) @@ -226,74 +227,74 @@ func TestHandleFineGrainedShuffle(t *testing.T) { IsPartialSort: true, } tableReader.tablePlan = passSender - passSender.children = []base.PhysicalPlan{partWindow} - partWindow.children = []base.PhysicalPlan{partialSort} - partialSort.children = []base.PhysicalPlan{nonPartWindow} - nonPartWindow.children = []base.PhysicalPlan{partialSort1} - partialSort1.children = []base.PhysicalPlan{recv} - recv.children = []base.PhysicalPlan{passSender} - passSender.children = []base.PhysicalPlan{tableScan} + passSender.SetChildren([]base.PhysicalPlan{partWindow}...) + partWindow.SetChildren([]base.PhysicalPlan{partialSort}...) + partialSort.SetChildren([]base.PhysicalPlan{nonPartWindow}...) + nonPartWindow.SetChildren([]base.PhysicalPlan{partialSort1}...) + partialSort1.SetChildren([]base.PhysicalPlan{recv}...) + recv.SetChildren([]base.PhysicalPlan{passSender}...) + passSender.SetChildren([]base.PhysicalPlan{tableScan}...) start(partWindow, 0, 6, 0) // HashAgg <- Window <- ExchangeReceiver <- ExchangeSender hashAgg := &PhysicalHashAgg{} tableReader.tablePlan = passSender - passSender.children = []base.PhysicalPlan{hashAgg} - hashAgg.children = []base.PhysicalPlan{partWindow} - partWindow.children = []base.PhysicalPlan{recv} - recv.children = []base.PhysicalPlan{hashSender} - hashSender.children = []base.PhysicalPlan{tableScan} + passSender.SetChildren([]base.PhysicalPlan{hashAgg}...) + hashAgg.SetChildren([]base.PhysicalPlan{partWindow}...) + partWindow.SetChildren([]base.PhysicalPlan{recv}...) + recv.SetChildren([]base.PhysicalPlan{hashSender}...) + hashSender.SetChildren([]base.PhysicalPlan{tableScan}...) require.Equal(t, uint64(0), hashAgg.TiFlashFineGrainedShuffleStreamCount) start(partWindow, expStreamCount, 3, 0) // Window <- HashAgg(x) <- ExchangeReceiver <- ExchangeSender tableReader.tablePlan = passSender - passSender.children = []base.PhysicalPlan{partWindow} + passSender.SetChildren([]base.PhysicalPlan{partWindow}...) hashAgg = &PhysicalHashAgg{} - partWindow.children = []base.PhysicalPlan{hashAgg} - hashAgg.children = []base.PhysicalPlan{recv} - recv.children = []base.PhysicalPlan{hashSender} - hashSender.children = []base.PhysicalPlan{tableScan} + partWindow.SetChildren([]base.PhysicalPlan{hashAgg}...) + hashAgg.SetChildren([]base.PhysicalPlan{recv}...) + recv.SetChildren([]base.PhysicalPlan{hashSender}...) + hashSender.SetChildren([]base.PhysicalPlan{tableScan}...) start(partWindow, 0, 4, 0) // Window <- Join(x) <- ExchangeReceiver <- ExchangeSender // <- ExchangeReceiver <- ExchangeSender tableReader.tablePlan = passSender - passSender.children = []base.PhysicalPlan{partWindow} + passSender.SetChildren([]base.PhysicalPlan{partWindow}...) hashJoin := &PhysicalHashJoin{} recv1 := &PhysicalExchangeReceiver{} tableScan1 := &PhysicalTableScan{} - partWindow.children = []base.PhysicalPlan{hashJoin} + partWindow.SetChildren([]base.PhysicalPlan{hashJoin}...) hashSender1 := &PhysicalExchangeSender{ ExchangeType: tipb.ExchangeType_Hash, } - hashJoin.children = []base.PhysicalPlan{recv, recv1} - recv.children = []base.PhysicalPlan{hashSender} - recv1.children = []base.PhysicalPlan{hashSender1} - hashSender.children = []base.PhysicalPlan{tableScan} - hashSender1.children = []base.PhysicalPlan{tableScan1} + hashJoin.SetChildren([]base.PhysicalPlan{recv, recv1}...) + recv.SetChildren([]base.PhysicalPlan{hashSender}...) + recv1.SetChildren([]base.PhysicalPlan{hashSender1}...) + hashSender.SetChildren([]base.PhysicalPlan{tableScan}...) + hashSender1.SetChildren([]base.PhysicalPlan{tableScan1}...) start(partWindow, 0, 4, 0) // Join <- ExchangeReceiver <- ExchangeSender <- Window <- ExchangeReceiver(2) <- ExchangeSender(2) // <- ExchangeReceiver(1) <- ExchangeSender(1) tableReader.tablePlan = passSender - passSender.children = []base.PhysicalPlan{partWindow} + passSender.SetChildren([]base.PhysicalPlan{partWindow}...) hashJoin = &PhysicalHashJoin{} recv1 = &PhysicalExchangeReceiver{} - hashJoin.children = []base.PhysicalPlan{recv, recv1} - recv.children = []base.PhysicalPlan{hashSender} - hashSender.children = []base.PhysicalPlan{partWindow} + hashJoin.SetChildren([]base.PhysicalPlan{recv, recv1}...) + recv.SetChildren([]base.PhysicalPlan{hashSender}...) + hashSender.SetChildren([]base.PhysicalPlan{partWindow}...) recv2 := &PhysicalExchangeReceiver{} hashSender2 := &PhysicalExchangeSender{ ExchangeType: tipb.ExchangeType_Hash, } tableScan2 := &PhysicalTableScan{} - partWindow.children = []base.PhysicalPlan{recv2} - recv2.children = []base.PhysicalPlan{hashSender2} - hashSender2.children = []base.PhysicalPlan{tableScan2} - recv1.children = []base.PhysicalPlan{hashSender1} + partWindow.SetChildren([]base.PhysicalPlan{recv2}...) + recv2.SetChildren([]base.PhysicalPlan{hashSender2}...) + hashSender2.SetChildren([]base.PhysicalPlan{tableScan2}...) + recv1.SetChildren([]base.PhysicalPlan{hashSender1}...) tableScan1 = &PhysicalTableScan{} - hashSender1.children = []base.PhysicalPlan{tableScan1} + hashSender1.SetChildren([]base.PhysicalPlan{tableScan1}...) start(partWindow, expStreamCount, 3, 0) instances := []string{ @@ -325,10 +326,10 @@ func TestHandleFineGrainedShuffle(t *testing.T) { // HashAgg(x) <- ExchangeReceiver <- ExchangeSender tableReader.tablePlan = passSender hashAgg = &PhysicalHashAgg{} - passSender.children = []base.PhysicalPlan{hashAgg} - hashAgg.children = []base.PhysicalPlan{recv} - recv.children = []base.PhysicalPlan{hashSender} - hashSender.children = []base.PhysicalPlan{tableScan} + passSender.SetChildren([]base.PhysicalPlan{hashAgg}...) + hashAgg.SetChildren([]base.PhysicalPlan{recv}...) + recv.SetChildren([]base.PhysicalPlan{hashSender}...) + hashSender.SetChildren([]base.PhysicalPlan{tableScan}...) tableScan.Schema().Columns = append(tableScan.Schema().Columns, col0) start(hashAgg, 8, 3, 0) @@ -339,7 +340,7 @@ func TestHandleFineGrainedShuffle(t *testing.T) { hashJoin.EqualConditions = append(hashJoin.EqualConditions, sf) hashJoin.RightJoinKeys = append(hashJoin.RightJoinKeys, col0) hashJoin.InnerChildIdx = 1 - passSender.children = []base.PhysicalPlan{hashJoin} + passSender.SetChildren([]base.PhysicalPlan{hashJoin}...) recv = &PhysicalExchangeReceiver{} recv1 = &PhysicalExchangeReceiver{} tableScan = &PhysicalTableScan{} @@ -350,11 +351,11 @@ func TestHandleFineGrainedShuffle(t *testing.T) { hashSender1 = &PhysicalExchangeSender{ ExchangeType: tipb.ExchangeType_Hash, } - hashJoin.children = []base.PhysicalPlan{recv, recv1} - recv.children = []base.PhysicalPlan{hashSender} - recv1.children = []base.PhysicalPlan{hashSender1} - hashSender.children = []base.PhysicalPlan{tableScan} - hashSender1.children = []base.PhysicalPlan{tableScan1} + hashJoin.SetChildren([]base.PhysicalPlan{recv, recv1}...) + recv.SetChildren([]base.PhysicalPlan{hashSender}...) + recv1.SetChildren([]base.PhysicalPlan{hashSender1}...) + hashSender.SetChildren([]base.PhysicalPlan{tableScan}...) + hashSender1.SetChildren([]base.PhysicalPlan{tableScan1}...) hashSender1.HashCols = partitionCols tableScan1.Schema().Columns = append(tableScan1.Schema().Columns, col0) handleFineGrainedShuffle(nil, sctx.GetPlanCtx(), tableReader) @@ -370,10 +371,10 @@ func TestHandleFineGrainedShuffle(t *testing.T) { // HashAgg(x) <- ExchangeReceiver <- ExchangeSender, exceed splitLimit tableReader.tablePlan = passSender hashAgg = &PhysicalHashAgg{} - passSender.children = []base.PhysicalPlan{hashAgg} - hashAgg.children = []base.PhysicalPlan{recv} - recv.children = []base.PhysicalPlan{hashSender} - hashSender.children = []base.PhysicalPlan{tableScan} + passSender.SetChildren([]base.PhysicalPlan{hashAgg}...) + hashAgg.SetChildren([]base.PhysicalPlan{recv}...) + recv.SetChildren([]base.PhysicalPlan{hashSender}...) + hashSender.SetChildren([]base.PhysicalPlan{tableScan}...) tableScan.Schema().Columns = append(tableScan.Schema().Columns, col0) start(hashAgg, 0, 3, 0) @@ -385,17 +386,17 @@ func TestHandleFineGrainedShuffle(t *testing.T) { hashJoin.EqualConditions = append(hashJoin.EqualConditions, sf) hashJoin.LeftJoinKeys = append(hashJoin.LeftJoinKeys, col0) hashJoin.InnerChildIdx = 1 - passSender.children = []base.PhysicalPlan{hashJoin} + passSender.SetChildren([]base.PhysicalPlan{hashJoin}...) recv1 = &PhysicalExchangeReceiver{} tableScan1 = &PhysicalTableScan{} hashSender1 = &PhysicalExchangeSender{ ExchangeType: tipb.ExchangeType_Hash, } - hashJoin.children = []base.PhysicalPlan{recv, recv1} - recv.children = []base.PhysicalPlan{hashSender} - recv1.children = []base.PhysicalPlan{hashSender1} - hashSender.children = []base.PhysicalPlan{tableScan} - hashSender1.children = []base.PhysicalPlan{tableScan1} + hashJoin.SetChildren([]base.PhysicalPlan{recv, recv1}...) + recv.SetChildren([]base.PhysicalPlan{hashSender}...) + recv1.SetChildren([]base.PhysicalPlan{hashSender1}...) + hashSender.SetChildren([]base.PhysicalPlan{tableScan}...) + hashSender1.SetChildren([]base.PhysicalPlan{tableScan1}...) hashSender1.HashCols = partitionCols tableScan1.Schema().Columns = append(tableScan1.Schema().Columns, col0) start(hashJoin, 0, 3, 0) diff --git a/pkg/planner/core/partition_prune.go b/pkg/planner/core/partition_prune.go index 2f9381304f61e..d1194628ab806 100644 --- a/pkg/planner/core/partition_prune.go +++ b/pkg/planner/core/partition_prune.go @@ -27,7 +27,7 @@ import ( // idx in the partition definitions array, use pi.Definitions[idx] to get the partition ID func PartitionPruning(ctx base.PlanContext, tbl table.PartitionedTable, conds []expression.Expression, partitionNames []model.CIStr, columns []*expression.Column, names types.NameSlice) ([]int, error) { - s := partitionProcessor{} + s := PartitionProcessor{} pi := tbl.Meta().Partition switch pi.Type { case model.PartitionTypeHash, model.PartitionTypeKey: diff --git a/pkg/planner/core/pb_to_plan.go b/pkg/planner/core/pb_to_plan.go index 9ad0a4a953524..4e22874536d02 100644 --- a/pkg/planner/core/pb_to_plan.go +++ b/pkg/planner/core/pb_to_plan.go @@ -15,6 +15,7 @@ package core import ( + "context" "strings" "github.com/pingcap/errors" @@ -94,7 +95,7 @@ func (b *PBPlanBuilder) pbToPhysicalPlan(e *tipb.Executor, subPlan base.Physical func (b *PBPlanBuilder) pbToTableScan(e *tipb.Executor) (base.PhysicalPlan, error) { tblScan := e.TblScan - tbl, ok := b.is.TableByID(tblScan.TableId) + tbl, ok := b.is.TableByID(context.Background(), tblScan.TableId) if !ok { return nil, infoschema.ErrTableNotExists.GenWithStack("Table which ID = %d does not exist.", tblScan.TableId) } @@ -130,6 +131,10 @@ func (b *PBPlanBuilder) pbToTableScan(e *tipb.Executor) (base.PhysicalPlan, erro p.Extractor = extractor case infoschema.ClusterTableStatementsSummary, infoschema.ClusterTableStatementsSummaryHistory: p.Extractor = &StatementsSummaryExtractor{} + case infoschema.ClusterTableTiDBIndexUsage: + ex := &InfoSchemaIndexUsageExtractor{} + ex.initExtractableColNames(infoschema.TableTiDBIndexUsage) + p.Extractor = ex } return p, nil } diff --git a/pkg/planner/core/physical_plan_test.go b/pkg/planner/core/physical_plan_test.go index 7683b7383a547..16861bc31612b 100644 --- a/pkg/planner/core/physical_plan_test.go +++ b/pkg/planner/core/physical_plan_test.go @@ -518,3 +518,76 @@ func TestPhysicalTableScanExtractCorrelatedCols(t *testing.T) { require.Equal(t, 1, len(correlated)) require.Equal(t, "test.t2.company_no", correlated[0].StringWithCtx(tk.Session().GetExprCtx().GetEvalCtx(), errors.RedactLogDisable)) } + +func TestAvoidColumnEvaluatorForProjBelowUnion(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + + getPhysicalPlan := func(sql string) base.Plan { + tk.MustExec(sql) + info := tk.Session().ShowProcess() + require.NotNil(t, info) + p, ok := info.Plan.(base.Plan) + require.True(t, ok) + return p + } + + var findProjBelowUnion func(p base.Plan) (projsBelowUnion, normalProjs []*core.PhysicalProjection) + findProjBelowUnion = func(p base.Plan) (projsBelowUnion, normalProjs []*core.PhysicalProjection) { + if p == nil { + return projsBelowUnion, normalProjs + } + switch v := p.(type) { + case *core.PhysicalUnionAll: + for _, child := range v.Children() { + if proj, ok := child.(*core.PhysicalProjection); ok { + projsBelowUnion = append(projsBelowUnion, proj) + } + } + default: + for _, child := range p.(base.PhysicalPlan).Children() { + if proj, ok := child.(*core.PhysicalProjection); ok { + normalProjs = append(normalProjs, proj) + } + subProjsBelowUnion, subNormalProjs := findProjBelowUnion(child) + projsBelowUnion = append(projsBelowUnion, subProjsBelowUnion...) + normalProjs = append(normalProjs, subNormalProjs...) + } + } + return projsBelowUnion, normalProjs + } + + checkResult := func(sql string) { + p := getPhysicalPlan(sql) + projsBelowUnion, normalProjs := findProjBelowUnion(p) + if proj, ok := p.(*core.PhysicalProjection); ok { + normalProjs = append(normalProjs, proj) + } + require.NotEmpty(t, projsBelowUnion) + for _, proj := range projsBelowUnion { + require.True(t, proj.AvoidColumnEvaluator) + } + for _, proj := range normalProjs { + require.False(t, proj.AvoidColumnEvaluator) + } + } + + // Test setup + tk.MustExec("use test") + tk.MustExec(`drop table if exists t1, t2;`) + tk.MustExec(`create table t1 (cc1 int, cc2 text);`) + tk.MustExec(`insert into t1 values (1, 'aaaa'), (2, 'bbbb'), (3, 'cccc');`) + tk.MustExec(`create table t2 (cc1 int, cc2 text, primary key(cc1));`) + tk.MustExec(`insert into t2 values (2, '2');`) + tk.MustExec(`set tidb_executor_concurrency = 1;`) + tk.MustExec(`set tidb_window_concurrency = 100;`) + + testCases := []string{ + `select * from (SELECT DISTINCT cc2 as a, cc2 as b, cc1 as c FROM t2 UNION ALL SELECT count(1) over (partition by cc1), cc2, cc1 FROM t1) order by a, b, c;`, + `select a+1, b+1 from (select cc1 as a, cc2 as b from t1 union select cc2, cc1 from t1) tmp`, + } + + for _, sql := range testCases { + checkResult(sql) + } +} diff --git a/pkg/planner/core/physical_plans.go b/pkg/planner/core/physical_plans.go index 6227f352831d2..f988fd11c19f3 100644 --- a/pkg/planner/core/physical_plans.go +++ b/pkg/planner/core/physical_plans.go @@ -30,6 +30,8 @@ import ( "github.com/pingcap/tidb/pkg/planner/cardinality" "github.com/pingcap/tidb/pkg/planner/core/base" "github.com/pingcap/tidb/pkg/planner/core/cost" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" + "github.com/pingcap/tidb/pkg/planner/core/operator/physicalop" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/planner/util/coreusage" @@ -78,6 +80,12 @@ var ( _ base.PhysicalPlan = &PhysicalShuffleReceiverStub{} _ base.PhysicalPlan = &BatchPointGetPlan{} _ base.PhysicalPlan = &PhysicalTableSample{} + + _ PhysicalJoin = &PhysicalHashJoin{} + _ PhysicalJoin = &PhysicalMergeJoin{} + _ PhysicalJoin = &PhysicalIndexJoin{} + _ PhysicalJoin = &PhysicalIndexHashJoin{} + _ PhysicalJoin = &PhysicalIndexMergeJoin{} ) type tableScanAndPartitionInfo struct { @@ -128,8 +136,8 @@ type PhysicalTableReader struct { physicalSchemaProducer // TablePlans flats the tablePlan to construct executor pb. - TablePlans []base.PhysicalPlan tablePlan base.PhysicalPlan + TablePlans []base.PhysicalPlan // StoreType indicates table read from which type of store. StoreType kv.StoreType @@ -143,7 +151,7 @@ type PhysicalTableReader struct { // Used by partition table. PlanPartInfo *PhysPlanPartInfo // Used by MPP, because MPP plan may contain join/union/union all, it is possible that a physical table reader contains more than 1 table scan - TableScanAndPartitionInfos []tableScanAndPartitionInfo + TableScanAndPartitionInfos []tableScanAndPartitionInfo `plan-cache-clone:"must-nil"` } // PhysPlanPartInfo indicates partition helper info in physical plan. @@ -158,6 +166,9 @@ const emptyPartitionInfoSize = int64(unsafe.Sizeof(PhysPlanPartInfo{})) // Clone clones the PhysPlanPartInfo. func (pi *PhysPlanPartInfo) Clone() *PhysPlanPartInfo { + if pi == nil { + return nil + } cloned := new(PhysPlanPartInfo) cloned.PruningConds = util.CloneExprs(pi.PruningConds) cloned.PartitionNames = util.CloneCIStrs(pi.PartitionNames) @@ -247,6 +258,30 @@ func setMppOrBatchCopForTableScan(curPlan base.PhysicalPlan) { } } +// GetPhysicalIndexReader returns PhysicalIndexReader for logical TiKVSingleGather. +func GetPhysicalIndexReader(sg *TiKVSingleGather, schema *expression.Schema, stats *property.StatsInfo, props ...*property.PhysicalProperty) *PhysicalIndexReader { + reader := PhysicalIndexReader{}.Init(sg.SCtx(), sg.QueryBlockOffset()) + reader.SetStats(stats) + reader.SetSchema(schema) + reader.SetChildrenReqProps(props) + return reader +} + +// GetPhysicalTableReader returns PhysicalTableReader for logical TiKVSingleGather. +func GetPhysicalTableReader(sg *TiKVSingleGather, schema *expression.Schema, stats *property.StatsInfo, props ...*property.PhysicalProperty) *PhysicalTableReader { + reader := PhysicalTableReader{}.Init(sg.SCtx(), sg.QueryBlockOffset()) + reader.PlanPartInfo = &PhysPlanPartInfo{ + PruningConds: sg.Source.AllConds, + PartitionNames: sg.Source.PartitionNames, + Columns: sg.Source.TblCols, + ColumnNames: sg.Source.OutputNames(), + } + reader.SetStats(stats) + reader.SetSchema(schema) + reader.SetChildrenReqProps(props) + return reader +} + // Clone implements op.PhysicalPlan interface. func (p *PhysicalTableReader) Clone(newCtx base.PlanContext) (base.PhysicalPlan, error) { cloned := new(PhysicalTableReader) @@ -283,7 +318,7 @@ func (p *PhysicalTableReader) ExtractCorrelatedCols() (corCols []*expression.Cor // BuildPlanTrace implements op.PhysicalPlan interface. func (p *PhysicalTableReader) BuildPlanTrace() *tracing.PlanTrace { - rp := p.basePhysicalPlan.BuildPlanTrace() + rp := p.BasePhysicalPlan.BuildPlanTrace() if p.tablePlan != nil { rp.Children = append(rp.Children, p.tablePlan.BuildPlanTrace()) } @@ -292,7 +327,7 @@ func (p *PhysicalTableReader) BuildPlanTrace() *tracing.PlanTrace { // AppendChildCandidate implements PhysicalPlan interface. func (p *PhysicalTableReader) AppendChildCandidate(op *optimizetrace.PhysicalOptimizeOp) { - p.basePhysicalPlan.AppendChildCandidate(op) + p.BasePhysicalPlan.AppendChildCandidate(op) appendChildCandidate(p, p.tablePlan, op) } @@ -301,8 +336,8 @@ type PhysicalIndexReader struct { physicalSchemaProducer // IndexPlans flats the indexPlan to construct executor pb. - IndexPlans []base.PhysicalPlan indexPlan base.PhysicalPlan + IndexPlans []base.PhysicalPlan // OutputColumns represents the columns that index reader should return. OutputColumns []*expression.Column @@ -361,7 +396,7 @@ func (p *PhysicalIndexReader) ExtractCorrelatedCols() (corCols []*expression.Cor // BuildPlanTrace implements op.PhysicalPlan interface. func (p *PhysicalIndexReader) BuildPlanTrace() *tracing.PlanTrace { - rp := p.basePhysicalPlan.BuildPlanTrace() + rp := p.BasePhysicalPlan.BuildPlanTrace() if p.indexPlan != nil { rp.Children = append(rp.Children, p.indexPlan.BuildPlanTrace()) } @@ -370,7 +405,7 @@ func (p *PhysicalIndexReader) BuildPlanTrace() *tracing.PlanTrace { // AppendChildCandidate implements PhysicalPlan interface. func (p *PhysicalIndexReader) AppendChildCandidate(op *optimizetrace.PhysicalOptimizeOp) { - p.basePhysicalPlan.AppendChildCandidate(op) + p.BasePhysicalPlan.AppendChildCandidate(op) if p.indexPlan != nil { appendChildCandidate(p, p.indexPlan, op) } @@ -410,6 +445,9 @@ type PushedDownLimit struct { // Clone clones this pushed-down list. func (p *PushedDownLimit) Clone() *PushedDownLimit { + if p == nil { + return nil + } cloned := new(PushedDownLimit) *cloned = *p return cloned @@ -430,12 +468,12 @@ func (p *PushedDownLimit) MemoryUsage() (sum int64) { type PhysicalIndexLookUpReader struct { physicalSchemaProducer + indexPlan base.PhysicalPlan + tablePlan base.PhysicalPlan // IndexPlans flats the indexPlan to construct executor pb. IndexPlans []base.PhysicalPlan // TablePlans flats the tablePlan to construct executor pb. TablePlans []base.PhysicalPlan - indexPlan base.PhysicalPlan - tablePlan base.PhysicalPlan Paging bool ExtraHandleCol *expression.Column @@ -511,7 +549,7 @@ func (p *PhysicalIndexLookUpReader) GetAvgTableRowSize() float64 { // BuildPlanTrace implements op.PhysicalPlan interface. func (p *PhysicalIndexLookUpReader) BuildPlanTrace() *tracing.PlanTrace { - rp := p.basePhysicalPlan.BuildPlanTrace() + rp := p.BasePhysicalPlan.BuildPlanTrace() if p.indexPlan != nil { rp.Children = append(rp.Children, p.indexPlan.BuildPlanTrace()) } @@ -523,7 +561,7 @@ func (p *PhysicalIndexLookUpReader) BuildPlanTrace() *tracing.PlanTrace { // AppendChildCandidate implements PhysicalPlan interface. func (p *PhysicalIndexLookUpReader) AppendChildCandidate(op *optimizetrace.PhysicalOptimizeOp) { - p.basePhysicalPlan.AppendChildCandidate(op) + p.BasePhysicalPlan.AppendChildCandidate(op) if p.indexPlan != nil { appendChildCandidate(p, p.indexPlan, op) } @@ -581,14 +619,14 @@ type PhysicalIndexMergeReader struct { // ByItems is used to support sorting the handles returned by partialPlans. ByItems []*util.ByItems - // PartialPlans flats the partialPlans to construct executor pb. - PartialPlans [][]base.PhysicalPlan - // TablePlans flats the tablePlan to construct executor pb. - TablePlans []base.PhysicalPlan // partialPlans are the partial plans that have not been flatted. The type of each element is permitted PhysicalIndexScan or PhysicalTableScan. partialPlans []base.PhysicalPlan // tablePlan is a PhysicalTableScan to get the table tuples. Current, it must be not nil. tablePlan base.PhysicalPlan + // PartialPlans flats the partialPlans to construct executor pb. + PartialPlans [][]base.PhysicalPlan + // TablePlans flats the tablePlan to construct executor pb. + TablePlans []base.PhysicalPlan // Used by partition table. PlanPartInfo *PhysPlanPartInfo @@ -621,7 +659,7 @@ func (p *PhysicalIndexMergeReader) ExtractCorrelatedCols() (corCols []*expressio // BuildPlanTrace implements op.PhysicalPlan interface. func (p *PhysicalIndexMergeReader) BuildPlanTrace() *tracing.PlanTrace { - rp := p.basePhysicalPlan.BuildPlanTrace() + rp := p.BasePhysicalPlan.BuildPlanTrace() if p.tablePlan != nil { rp.Children = append(rp.Children, p.tablePlan.BuildPlanTrace()) } @@ -633,7 +671,7 @@ func (p *PhysicalIndexMergeReader) BuildPlanTrace() *tracing.PlanTrace { // AppendChildCandidate implements PhysicalPlan interface. func (p *PhysicalIndexMergeReader) AppendChildCandidate(op *optimizetrace.PhysicalOptimizeOp) { - p.basePhysicalPlan.AppendChildCandidate(op) + p.BasePhysicalPlan.AppendChildCandidate(op) if p.tablePlan != nil { appendChildCandidate(p, p.tablePlan, op) } @@ -1072,8 +1110,12 @@ func (ts *PhysicalTableScan) MemoryUsage() (sum int64) { type PhysicalProjection struct { physicalSchemaProducer - Exprs []expression.Expression - CalculateNoDelay bool + Exprs []expression.Expression + CalculateNoDelay bool + + // AvoidColumnEvaluator is ONLY used to avoid building columnEvaluator + // for the expressions of Projection which is child of Union operator. + // Related issue: TiDB#8141(https://github.com/pingcap/tidb/issues/8141) AvoidColumnEvaluator bool } @@ -1106,7 +1148,7 @@ func (p *PhysicalProjection) MemoryUsage() (sum int64) { return } - sum = p.basePhysicalPlan.MemoryUsage() + size.SizeOfBool*2 + sum = p.BasePhysicalPlan.MemoryUsage() + size.SizeOfBool*2 for _, expr := range p.Exprs { sum += expr.MemoryUsage() } @@ -1115,7 +1157,7 @@ func (p *PhysicalProjection) MemoryUsage() (sum int64) { // PhysicalTopN is the physical operator of topN. type PhysicalTopN struct { - basePhysicalPlan + physicalop.BasePhysicalPlan ByItems []*util.ByItems PartitionBy []property.SortItem @@ -1133,11 +1175,11 @@ func (lt *PhysicalTopN) Clone(newCtx base.PlanContext) (base.PhysicalPlan, error cloned := new(PhysicalTopN) *cloned = *lt cloned.SetSCtx(newCtx) - base, err := lt.basePhysicalPlan.cloneWithSelf(newCtx, cloned) + base, err := lt.BasePhysicalPlan.CloneWithSelf(newCtx, cloned) if err != nil { return nil, err } - cloned.basePhysicalPlan = *base + cloned.BasePhysicalPlan = *base cloned.ByItems = make([]*util.ByItems, 0, len(lt.ByItems)) for _, it := range lt.ByItems { cloned.ByItems = append(cloned.ByItems, it.Clone()) @@ -1164,7 +1206,7 @@ func (lt *PhysicalTopN) MemoryUsage() (sum int64) { return } - sum = lt.basePhysicalPlan.MemoryUsage() + size.SizeOfSlice + int64(cap(lt.ByItems))*size.SizeOfPointer + size.SizeOfUint64*2 + sum = lt.BasePhysicalPlan.MemoryUsage() + size.SizeOfSlice + int64(cap(lt.ByItems))*size.SizeOfPointer + size.SizeOfUint64*2 for _, byItem := range lt.ByItems { sum += byItem.MemoryUsage() } @@ -1183,6 +1225,11 @@ type PhysicalApply struct { OuterSchema []*expression.CorrelatedColumn } +// PhysicalJoinImplement has an extra bool return value compared with PhysicalJoin interface. +// This will override basePhysicalJoin.PhysicalJoinImplement() and make PhysicalApply not an implementation of +// base.PhysicalJoin interface. +func (*PhysicalApply) PhysicalJoinImplement() bool { return false } + // Clone implements op.PhysicalPlan interface. func (la *PhysicalApply) Clone(newCtx base.PlanContext) (base.PhysicalPlan, error) { cloned := new(PhysicalApply) @@ -1205,7 +1252,7 @@ func (la *PhysicalApply) Clone(newCtx base.PlanContext) (base.PhysicalPlan, erro func (la *PhysicalApply) ExtractCorrelatedCols() []*expression.CorrelatedColumn { corCols := la.PhysicalHashJoin.ExtractCorrelatedCols() for i := len(corCols) - 1; i >= 0; i-- { - if la.children[0].Schema().Contains(&corCols[i].Column) { + if la.Children()[0].Schema().Contains(&corCols[i].Column) { corCols = append(corCols[:i], corCols[i+1:]...) } } @@ -1226,10 +1273,19 @@ func (la *PhysicalApply) MemoryUsage() (sum int64) { return } +// PhysicalJoin provides some common methods for join operators. +// Note that PhysicalApply is deliberately excluded from this interface. +type PhysicalJoin interface { + base.PhysicalPlan + PhysicalJoinImplement() + getInnerChildIdx() int + GetJoinType() logicalop.JoinType +} + type basePhysicalJoin struct { physicalSchemaProducer - JoinType JoinType + JoinType logicalop.JoinType LeftConditions expression.CNFExprs RightConditions expression.CNFExprs @@ -1251,14 +1307,21 @@ type basePhysicalJoin struct { RightNAJoinKeys []*expression.Column } +func (p *basePhysicalJoin) GetJoinType() logicalop.JoinType { + return p.JoinType +} + +// PhysicalJoinImplement implements base.PhysicalJoin interface. +func (*basePhysicalJoin) PhysicalJoinImplement() {} + func (p *basePhysicalJoin) getInnerChildIdx() int { return p.InnerChildIdx } func (p *basePhysicalJoin) cloneForPlanCacheWithSelf(newCtx base.PlanContext, newSelf base.PhysicalPlan) (*basePhysicalJoin, bool) { cloned := new(basePhysicalJoin) - base, err := p.physicalSchemaProducer.cloneWithSelf(newCtx, newSelf) - if err != nil { + base, ok := p.physicalSchemaProducer.cloneForPlanCacheWithSelf(newCtx, newSelf) + if !ok { return nil, false } cloned.physicalSchemaProducer = *base @@ -1390,7 +1453,7 @@ type PhysicalHashJoin struct { // CanUseHashJoinV2 returns true if current join is supported by hash join v2 func (p *PhysicalHashJoin) CanUseHashJoinV2() bool { switch p.JoinType { - case LeftOuterJoin, RightOuterJoin, InnerJoin: + case logicalop.LeftOuterJoin, logicalop.RightOuterJoin, logicalop.InnerJoin: // null aware join is not supported yet if len(p.LeftNAJoinKeys) > 0 { return false @@ -1482,7 +1545,7 @@ func (p *PhysicalHashJoin) RightIsBuildSide() bool { } // NewPhysicalHashJoin creates a new PhysicalHashJoin from LogicalJoin. -func NewPhysicalHashJoin(p *LogicalJoin, innerIdx int, useOuterToBuild bool, newStats *property.StatsInfo, prop ...*property.PhysicalProperty) *PhysicalHashJoin { +func NewPhysicalHashJoin(p *logicalop.LogicalJoin, innerIdx int, useOuterToBuild bool, newStats *property.StatsInfo, prop ...*property.PhysicalProperty) *PhysicalHashJoin { leftJoinKeys, rightJoinKeys, isNullEQ, _ := p.GetJoinKeys() leftNAJoinKeys, rightNAJoinKeys := p.GetNAJoinKeys() baseJoin := basePhysicalJoin{ @@ -1513,7 +1576,7 @@ func NewPhysicalHashJoin(p *LogicalJoin, innerIdx int, useOuterToBuild bool, new type PhysicalIndexJoin struct { basePhysicalJoin - innerTask base.Task + innerPlan base.PhysicalPlan // Ranges stores the IndexRanges when the inner plan is index scan. Ranges ranger.MutableRanges @@ -1543,8 +1606,8 @@ func (p *PhysicalIndexJoin) MemoryUsage() (sum int64) { sum = p.basePhysicalJoin.MemoryUsage() + size.SizeOfInterface*2 + size.SizeOfSlice*4 + int64(cap(p.KeyOff2IdxOff)+cap(p.IdxColLens))*size.SizeOfInt + size.SizeOfPointer - if p.innerTask != nil { - sum += p.innerTask.MemoryUsage() + if p.innerPlan != nil { + sum += p.innerPlan.MemoryUsage() } if p.CompareFilters != nil { sum += p.CompareFilters.MemoryUsage() @@ -1625,7 +1688,7 @@ func (p *PhysicalMergeJoin) MemoryUsage() (sum int64) { // PhysicalExchangeReceiver accepts connection and receives data passively. type PhysicalExchangeReceiver struct { - basePhysicalPlan + physicalop.BasePhysicalPlan Tasks []*kv.MPPTask frags []*Fragment @@ -1637,11 +1700,11 @@ type PhysicalExchangeReceiver struct { func (p *PhysicalExchangeReceiver) Clone(newCtx base.PlanContext) (base.PhysicalPlan, error) { np := new(PhysicalExchangeReceiver) np.SetSCtx(newCtx) - base, err := p.basePhysicalPlan.cloneWithSelf(newCtx, np) + base, err := p.BasePhysicalPlan.CloneWithSelf(newCtx, np) if err != nil { return nil, errors.Trace(err) } - np.basePhysicalPlan = *base + np.BasePhysicalPlan = *base np.IsCTEReader = p.IsCTEReader return np, nil @@ -1649,7 +1712,7 @@ func (p *PhysicalExchangeReceiver) Clone(newCtx base.PlanContext) (base.Physical // GetExchangeSender return the connected sender of this receiver. We assume that its child must be a receiver. func (p *PhysicalExchangeReceiver) GetExchangeSender() *PhysicalExchangeSender { - return p.children[0].(*PhysicalExchangeSender) + return p.Children()[0].(*PhysicalExchangeSender) } // MemoryUsage return the memory usage of PhysicalExchangeReceiver @@ -1658,7 +1721,7 @@ func (p *PhysicalExchangeReceiver) MemoryUsage() (sum int64) { return } - sum = p.basePhysicalPlan.MemoryUsage() + size.SizeOfSlice*2 + int64(cap(p.Tasks)+cap(p.frags))*size.SizeOfPointer + sum = p.BasePhysicalPlan.MemoryUsage() + size.SizeOfSlice*2 + int64(cap(p.Tasks)+cap(p.frags))*size.SizeOfPointer for _, frag := range p.frags { sum += frag.MemoryUsage() } @@ -1686,8 +1749,8 @@ type PhysicalExpand struct { // Init only assigns type and context. func (p PhysicalExpand) Init(ctx base.PlanContext, stats *property.StatsInfo, offset int, props ...*property.PhysicalProperty) *PhysicalExpand { - p.basePhysicalPlan = newBasePhysicalPlan(ctx, plancodec.TypeExpand, &p, offset) - p.childrenReqProps = props + p.BasePhysicalPlan = physicalop.NewBasePhysicalPlan(ctx, plancodec.TypeExpand, &p, offset) + p.SetChildrenReqProps(props) p.SetStats(stats) return &p } @@ -1751,7 +1814,7 @@ func (p *PhysicalExpand) MemoryUsage() (sum int64) { // PhysicalExchangeSender dispatches data to upstream tasks. That means push mode processing. type PhysicalExchangeSender struct { - basePhysicalPlan + physicalop.BasePhysicalPlan TargetTasks []*kv.MPPTask TargetCTEReaderTasks [][]*kv.MPPTask @@ -1766,11 +1829,11 @@ type PhysicalExchangeSender struct { func (p *PhysicalExchangeSender) Clone(newCtx base.PlanContext) (base.PhysicalPlan, error) { np := new(PhysicalExchangeSender) np.SetSCtx(newCtx) - base, err := p.basePhysicalPlan.cloneWithSelf(newCtx, np) + base, err := p.BasePhysicalPlan.CloneWithSelf(newCtx, np) if err != nil { return nil, errors.Trace(err) } - np.basePhysicalPlan = *base + np.BasePhysicalPlan = *base np.ExchangeType = p.ExchangeType np.HashCols = p.HashCols np.CompressionMode = p.CompressionMode @@ -1783,7 +1846,7 @@ func (p *PhysicalExchangeSender) MemoryUsage() (sum int64) { return } - sum = p.basePhysicalPlan.MemoryUsage() + size.SizeOfSlice*3 + size.SizeOfInt32 + + sum = p.BasePhysicalPlan.MemoryUsage() + size.SizeOfSlice*3 + size.SizeOfInt32 + int64(cap(p.TargetTasks)+cap(p.HashCols)+cap(p.Tasks))*size.SizeOfPointer for _, hCol := range p.HashCols { sum += hCol.MemoryUsage() @@ -1807,9 +1870,9 @@ func (p *PhysicalMergeJoin) Clone(newCtx base.PlanContext) (base.PhysicalPlan, e // PhysicalLock is the physical operator of lock, which is used for `select ... for update` clause. type PhysicalLock struct { - basePhysicalPlan + physicalop.BasePhysicalPlan - Lock *ast.SelectLockInfo + Lock *ast.SelectLockInfo `plan-cache-clone:"shallow"` TblID2Handle map[int64][]util.HandleCols TblID2PhysTblIDCol map[int64]*expression.Column @@ -1821,7 +1884,7 @@ func (pl *PhysicalLock) MemoryUsage() (sum int64) { return } - sum = pl.basePhysicalPlan.MemoryUsage() + size.SizeOfPointer + size.SizeOfMap*2 + sum = pl.BasePhysicalPlan.MemoryUsage() + size.SizeOfPointer + size.SizeOfMap*2 if pl.Lock != nil { sum += int64(unsafe.Sizeof(ast.SelectLockInfo{})) } @@ -1943,8 +2006,8 @@ func (p *basePhysicalAgg) IsFinalAgg() bool { func (p *basePhysicalAgg) cloneForPlanCacheWithSelf(newCtx base.PlanContext, newSelf base.PhysicalPlan) (*basePhysicalAgg, bool) { cloned := new(basePhysicalAgg) - base, err := p.physicalSchemaProducer.cloneWithSelf(newCtx, newSelf) - if err != nil { + base, ok := p.physicalSchemaProducer.cloneForPlanCacheWithSelf(newCtx, newSelf) + if !ok { return nil, false } cloned.physicalSchemaProducer = *base @@ -2042,6 +2105,7 @@ func (p *basePhysicalAgg) MemoryUsage() (sum int64) { // PhysicalHashAgg is hash operator of aggregate. type PhysicalHashAgg struct { basePhysicalAgg + tiflashPreAggMode string } func (p *PhysicalHashAgg) getPointer() *basePhysicalAgg { @@ -2057,6 +2121,7 @@ func (p *PhysicalHashAgg) Clone(newCtx base.PlanContext) (base.PhysicalPlan, err return nil, err } cloned.basePhysicalAgg = *base + cloned.tiflashPreAggMode = p.tiflashPreAggMode return cloned, nil } @@ -2070,7 +2135,7 @@ func (p *PhysicalHashAgg) MemoryUsage() (sum int64) { } // NewPhysicalHashAgg creates a new PhysicalHashAgg from a LogicalAggregation. -func NewPhysicalHashAgg(la *LogicalAggregation, newStats *property.StatsInfo, prop *property.PhysicalProperty) *PhysicalHashAgg { +func NewPhysicalHashAgg(la *logicalop.LogicalAggregation, newStats *property.StatsInfo, prop *property.PhysicalProperty) *PhysicalHashAgg { newGbyItems := make([]expression.Expression, len(la.GroupByItems)) copy(newGbyItems, la.GroupByItems) newAggFuncs := make([]*aggregation.AggFuncDesc, len(la.AggFuncs)) @@ -2120,7 +2185,7 @@ func (p *PhysicalStreamAgg) MemoryUsage() (sum int64) { // PhysicalSort is the physical operator of sort, which implements a memory sort. type PhysicalSort struct { - basePhysicalPlan + physicalop.BasePhysicalPlan ByItems []*util.ByItems // whether this operator only need to sort the data of one partition. @@ -2133,11 +2198,11 @@ func (ls *PhysicalSort) Clone(newCtx base.PlanContext) (base.PhysicalPlan, error cloned := new(PhysicalSort) cloned.SetSCtx(newCtx) cloned.IsPartialSort = ls.IsPartialSort - base, err := ls.basePhysicalPlan.cloneWithSelf(newCtx, cloned) + base, err := ls.BasePhysicalPlan.CloneWithSelf(newCtx, cloned) if err != nil { return nil, err } - cloned.basePhysicalPlan = *base + cloned.BasePhysicalPlan = *base for _, it := range ls.ByItems { cloned.ByItems = append(cloned.ByItems, it.Clone()) } @@ -2159,7 +2224,7 @@ func (ls *PhysicalSort) MemoryUsage() (sum int64) { return } - sum = ls.basePhysicalPlan.MemoryUsage() + size.SizeOfSlice + int64(cap(ls.ByItems))*size.SizeOfPointer + + sum = ls.BasePhysicalPlan.MemoryUsage() + size.SizeOfSlice + int64(cap(ls.ByItems))*size.SizeOfPointer + size.SizeOfBool for _, byItem := range ls.ByItems { sum += byItem.MemoryUsage() @@ -2170,7 +2235,7 @@ func (ls *PhysicalSort) MemoryUsage() (sum int64) { // NominalSort asks sort properties for its child. It is a fake operator that will not // appear in final physical operator tree. It will be eliminated or converted to Projection. type NominalSort struct { - basePhysicalPlan + physicalop.BasePhysicalPlan // These two fields are used to switch ScalarFunctions to Constants. For these // NominalSorts, we need to converted to Projections check if the ScalarFunctions @@ -2185,7 +2250,7 @@ func (ns *NominalSort) MemoryUsage() (sum int64) { return } - sum = ns.basePhysicalPlan.MemoryUsage() + size.SizeOfSlice + int64(cap(ns.ByItems))*size.SizeOfPointer + + sum = ns.BasePhysicalPlan.MemoryUsage() + size.SizeOfSlice + int64(cap(ns.ByItems))*size.SizeOfPointer + size.SizeOfBool for _, byItem := range ns.ByItems { sum += byItem.MemoryUsage() @@ -2195,7 +2260,7 @@ func (ns *NominalSort) MemoryUsage() (sum int64) { // PhysicalUnionScan represents a union scan operator. type PhysicalUnionScan struct { - basePhysicalPlan + physicalop.BasePhysicalPlan Conditions []expression.Expression @@ -2217,7 +2282,7 @@ func (p *PhysicalUnionScan) MemoryUsage() (sum int64) { return } - sum = p.basePhysicalPlan.MemoryUsage() + size.SizeOfSlice + sum = p.BasePhysicalPlan.MemoryUsage() + size.SizeOfSlice if p.HandleCols != nil { sum += p.HandleCols.MemoryUsage() } @@ -2242,7 +2307,7 @@ func (p *PhysicalIndexScan) IsPointGetByUniqueKey(tc types.Context) bool { // PhysicalSelection represents a filter. type PhysicalSelection struct { - basePhysicalPlan + physicalop.BasePhysicalPlan Conditions []expression.Expression @@ -2263,11 +2328,11 @@ type PhysicalSelection struct { func (p *PhysicalSelection) Clone(newCtx base.PlanContext) (base.PhysicalPlan, error) { cloned := new(PhysicalSelection) cloned.SetSCtx(newCtx) - base, err := p.basePhysicalPlan.cloneWithSelf(newCtx, cloned) + base, err := p.BasePhysicalPlan.CloneWithSelf(newCtx, cloned) if err != nil { return nil, err } - cloned.basePhysicalPlan = *base + cloned.BasePhysicalPlan = *base cloned.Conditions = util.CloneExprs(p.Conditions) return cloned, nil } @@ -2287,7 +2352,7 @@ func (p *PhysicalSelection) MemoryUsage() (sum int64) { return } - sum = p.basePhysicalPlan.MemoryUsage() + size.SizeOfBool + sum = p.BasePhysicalPlan.MemoryUsage() + size.SizeOfBool for _, expr := range p.Conditions { sum += expr.MemoryUsage() } @@ -2296,18 +2361,18 @@ func (p *PhysicalSelection) MemoryUsage() (sum int64) { // PhysicalMaxOneRow is the physical operator of maxOneRow. type PhysicalMaxOneRow struct { - basePhysicalPlan + physicalop.BasePhysicalPlan } // Clone implements op.PhysicalPlan interface. func (p *PhysicalMaxOneRow) Clone(newCtx base.PlanContext) (base.PhysicalPlan, error) { cloned := new(PhysicalMaxOneRow) cloned.SetSCtx(newCtx) - base, err := p.basePhysicalPlan.cloneWithSelf(newCtx, cloned) + base, err := p.BasePhysicalPlan.CloneWithSelf(newCtx, cloned) if err != nil { return nil, err } - cloned.basePhysicalPlan = *base + cloned.BasePhysicalPlan = *base return cloned, nil } @@ -2317,7 +2382,7 @@ func (p *PhysicalMaxOneRow) MemoryUsage() (sum int64) { return } - return p.basePhysicalPlan.MemoryUsage() + return p.BasePhysicalPlan.MemoryUsage() } // PhysicalTableDual is the physical operator of dual. @@ -2361,7 +2426,7 @@ type PhysicalWindow struct { WindowFuncDescs []*aggregation.WindowFuncDesc PartitionBy []property.SortItem OrderBy []property.SortItem - Frame *WindowFrame + Frame *logicalop.WindowFrame // on which store the window function executes. storeTp kv.StoreType @@ -2452,7 +2517,7 @@ func (p *PhysicalWindow) MemoryUsage() (sum int64) { // ==> Window -> Sort(:Tail) -> shuffleWorker: for workers // ==> DataSource: for `fetchDataAndSplit` thread type PhysicalShuffle struct { - basePhysicalPlan + physicalop.BasePhysicalPlan Concurrency int Tails []base.PhysicalPlan @@ -2468,7 +2533,7 @@ func (p *PhysicalShuffle) MemoryUsage() (sum int64) { return } - sum = p.basePhysicalPlan.MemoryUsage() + size.SizeOfInt*2 + size.SizeOfSlice*(3+int64(cap(p.ByItemArrays))) + + sum = p.BasePhysicalPlan.MemoryUsage() + size.SizeOfInt*2 + size.SizeOfSlice*(3+int64(cap(p.ByItemArrays))) + int64(cap(p.Tails)+cap(p.DataSources))*size.SizeOfInterface for _, plan := range p.Tails { @@ -2547,7 +2612,7 @@ func CollectPlanStatsVersion(plan base.PhysicalPlan, statsInfos map[string]uint6 type PhysicalShow struct { physicalSchemaProducer - ShowContents + logicalop.ShowContents Extractor base.ShowPredicateExtractor } @@ -2578,7 +2643,7 @@ func (p *PhysicalShowDDLJobs) MemoryUsage() (sum int64) { } // BuildMergeJoinPlan builds a PhysicalMergeJoin from the given fields. Currently, it is only used for test purpose. -func BuildMergeJoinPlan(ctx base.PlanContext, joinType JoinType, leftKeys, rightKeys []*expression.Column) *PhysicalMergeJoin { +func BuildMergeJoinPlan(ctx base.PlanContext, joinType logicalop.JoinType, leftKeys, rightKeys []*expression.Column) *PhysicalMergeJoin { baseJoin := basePhysicalJoin{ JoinType: joinType, DefaultValues: []types.Datum{types.NewDatum(1), types.NewDatum(1)}, diff --git a/pkg/planner/core/plan.go b/pkg/planner/core/plan.go index 085f9427d91ab..dde4cba6e8f40 100644 --- a/pkg/planner/core/plan.go +++ b/pkg/planner/core/plan.go @@ -21,16 +21,11 @@ import ( "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/planner/cardinality" "github.com/pingcap/tidb/pkg/planner/core/base" - "github.com/pingcap/tidb/pkg/planner/core/operator/baseimpl" "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util" - "github.com/pingcap/tidb/pkg/planner/util/costusage" - "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/util/execdetails" - "github.com/pingcap/tidb/pkg/util/size" - "github.com/pingcap/tidb/pkg/util/tracing" ) // AsSctx converts PlanContext to sessionctx.Context. @@ -247,144 +242,6 @@ func getActualProbeCntFromProbeParents(pps []base.PhysicalPlan, statsColl *execd return res } -type basePhysicalPlan struct { - baseimpl.Plan - - childrenReqProps []*property.PhysicalProperty `plan-cache-clone:"shallow"` - self base.PhysicalPlan - children []base.PhysicalPlan - - // used by the new cost interface - planCostInit bool - planCost float64 - planCostVer2 costusage.CostVer2 `plan-cache-clone:"shallow"` - - // probeParents records the IndexJoins and Applys with this operator in their inner children. - // Please see comments in op.PhysicalPlan for details. - probeParents []base.PhysicalPlan - - // Only for MPP. If TiFlashFineGrainedShuffleStreamCount > 0: - // 1. For ExchangeSender, means its output will be partitioned by hash key. - // 2. For ExchangeReceiver/Window/Sort, means its input is already partitioned. - TiFlashFineGrainedShuffleStreamCount uint64 -} - -func (p *basePhysicalPlan) cloneForPlanCacheWithSelf(newCtx base.PlanContext, newSelf base.PhysicalPlan) (*basePhysicalPlan, bool) { - cloned := new(basePhysicalPlan) - *cloned = *p - cloned.SetSCtx(newCtx) - cloned.self = newSelf - cloned.children = make([]base.PhysicalPlan, 0, len(p.children)) - for _, child := range p.children { - clonedChild, ok := child.CloneForPlanCache(newCtx) - if !ok { - return nil, false - } - clonedPP, ok := clonedChild.(base.PhysicalPlan) - if !ok { - return nil, false - } - cloned.children = append(cloned.children, clonedPP) - } - for _, probe := range p.probeParents { - clonedProbe, ok := probe.CloneForPlanCache(newCtx) - if !ok { - return nil, false - } - clonedPP, ok := clonedProbe.(base.PhysicalPlan) - if !ok { - return nil, false - } - cloned.probeParents = append(cloned.probeParents, clonedPP) - } - return cloned, true -} - -func (p *basePhysicalPlan) cloneWithSelf(newCtx base.PlanContext, newSelf base.PhysicalPlan) (*basePhysicalPlan, error) { - base := &basePhysicalPlan{ - Plan: p.Plan, - self: newSelf, - TiFlashFineGrainedShuffleStreamCount: p.TiFlashFineGrainedShuffleStreamCount, - probeParents: p.probeParents, - } - base.SetSCtx(newCtx) - for _, child := range p.children { - cloned, err := child.Clone(newCtx) - if err != nil { - return nil, err - } - base.children = append(base.children, cloned) - } - for _, prop := range p.childrenReqProps { - if prop == nil { - continue - } - base.childrenReqProps = append(base.childrenReqProps, prop.CloneEssentialFields()) - } - return base, nil -} - -// Clone implements op.PhysicalPlan interface. -func (p *basePhysicalPlan) Clone(base.PlanContext) (base.PhysicalPlan, error) { - return nil, errors.Errorf("%T doesn't support cloning", p.self) -} - -// ExplainInfo implements Plan interface. -func (*basePhysicalPlan) ExplainInfo() string { - return "" -} - -// ExplainNormalizedInfo implements op.PhysicalPlan interface. -func (*basePhysicalPlan) ExplainNormalizedInfo() string { - return "" -} - -func (p *basePhysicalPlan) GetChildReqProps(idx int) *property.PhysicalProperty { - return p.childrenReqProps[idx] -} - -// ExtractCorrelatedCols implements op.PhysicalPlan interface. -func (*basePhysicalPlan) ExtractCorrelatedCols() []*expression.CorrelatedColumn { - return nil -} - -// MemoryUsage return the memory usage of baseop.PhysicalPlan -func (p *basePhysicalPlan) MemoryUsage() (sum int64) { - if p == nil { - return - } - - sum = p.Plan.MemoryUsage() + size.SizeOfSlice + int64(cap(p.childrenReqProps))*size.SizeOfPointer + - size.SizeOfSlice + int64(cap(p.children)+1)*size.SizeOfInterface + size.SizeOfFloat64 + - size.SizeOfUint64 + size.SizeOfBool - - for _, prop := range p.childrenReqProps { - sum += prop.MemoryUsage() - } - for _, plan := range p.children { - sum += plan.MemoryUsage() - } - return -} - -func (p *basePhysicalPlan) GetEstRowCountForDisplay() float64 { - if p == nil { - return 0 - } - return p.StatsInfo().RowCount * getEstimatedProbeCntFromProbeParents(p.probeParents) -} - -func (p *basePhysicalPlan) GetActualProbeCnt(statsColl *execdetails.RuntimeStatsColl) int64 { - if p == nil { - return 1 - } - return getActualProbeCntFromProbeParents(p.probeParents, statsColl) -} - -func (p *basePhysicalPlan) SetProbeParents(probeParents []base.PhysicalPlan) { - p.probeParents = probeParents -} - // HasMaxOneRow returns if the LogicalPlan will output at most one row. func HasMaxOneRow(p base.LogicalPlan, childMaxOneRow []bool) bool { if len(childMaxOneRow) == 0 { @@ -394,14 +251,14 @@ func HasMaxOneRow(p base.LogicalPlan, childMaxOneRow []bool) bool { return false } switch x := p.(type) { - case *LogicalLock, *LogicalLimit, *LogicalSort, *LogicalSelection, - *LogicalApply, *LogicalProjection, *LogicalWindow, *LogicalAggregation: + case *logicalop.LogicalLock, *logicalop.LogicalLimit, *logicalop.LogicalSort, *logicalop.LogicalSelection, + *logicalop.LogicalApply, *logicalop.LogicalProjection, *logicalop.LogicalWindow, *logicalop.LogicalAggregation: return childMaxOneRow[0] case *logicalop.LogicalMaxOneRow: return true - case *LogicalJoin: + case *logicalop.LogicalJoin: switch x.JoinType { - case SemiJoin, AntiSemiJoin, LeftOuterSemiJoin, AntiLeftOuterSemiJoin: + case logicalop.SemiJoin, logicalop.AntiSemiJoin, logicalop.LeftOuterSemiJoin, logicalop.AntiLeftOuterSemiJoin: return childMaxOneRow[0] default: return childMaxOneRow[0] && childMaxOneRow[1] @@ -409,64 +266,3 @@ func HasMaxOneRow(p base.LogicalPlan, childMaxOneRow []bool) bool { } return false } - -func newBasePhysicalPlan(ctx base.PlanContext, tp string, self base.PhysicalPlan, offset int) basePhysicalPlan { - return basePhysicalPlan{ - Plan: baseimpl.NewBasePlan(ctx, tp, offset), - self: self, - } -} - -// Schema implements Plan Schema interface. -func (p *basePhysicalPlan) Schema() *expression.Schema { - return p.children[0].Schema() -} - -// Children implements op.PhysicalPlan Children interface. -func (p *basePhysicalPlan) Children() []base.PhysicalPlan { - return p.children -} - -// SetChildren implements op.PhysicalPlan SetChildren interface. -func (p *basePhysicalPlan) SetChildren(children ...base.PhysicalPlan) { - p.children = children -} - -// SetChild implements op.PhysicalPlan SetChild interface. -func (p *basePhysicalPlan) SetChild(i int, child base.PhysicalPlan) { - p.children[i] = child -} - -// BuildPlanTrace implements Plan -func (p *basePhysicalPlan) BuildPlanTrace() *tracing.PlanTrace { - tp := "" - info := "" - if p.self != nil { - tp = p.self.TP() - info = p.self.ExplainInfo() - } - - planTrace := &tracing.PlanTrace{ID: p.ID(), TP: tp, ExplainInfo: info} - for _, child := range p.Children() { - planTrace.Children = append(planTrace.Children, child.BuildPlanTrace()) - } - return planTrace -} - -// AppendChildCandidate implements PhysicalPlan interface. -func (p *basePhysicalPlan) AppendChildCandidate(op *optimizetrace.PhysicalOptimizeOp) { - if len(p.Children()) < 1 { - return - } - childrenID := make([]int, 0) - for _, child := range p.Children() { - childCandidate := &tracing.CandidatePlanTrace{ - PlanTrace: &tracing.PlanTrace{TP: child.TP(), ID: child.ID(), - ExplainInfo: child.ExplainInfo()}, - } - op.AppendCandidate(childCandidate) - child.AppendChildCandidate(op) - childrenID = append(childrenID, child.ID()) - } - op.GetTracer().Candidates[p.ID()].PlanTrace.AppendChildrenID(childrenID...) -} diff --git a/pkg/planner/core/plan_cache.go b/pkg/planner/core/plan_cache.go index 669a0e7bd57cb..d988f48913622 100644 --- a/pkg/planner/core/plan_cache.go +++ b/pkg/planner/core/plan_cache.go @@ -28,12 +28,14 @@ import ( "github.com/pingcap/tidb/pkg/planner/util/debugtrace" "github.com/pingcap/tidb/pkg/privilege" "github.com/pingcap/tidb/pkg/sessionctx" + "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/sessiontxn/staleread" "github.com/pingcap/tidb/pkg/types" driver "github.com/pingcap/tidb/pkg/types/parser_driver" "github.com/pingcap/tidb/pkg/util/chunk" contextutil "github.com/pingcap/tidb/pkg/util/context" "github.com/pingcap/tidb/pkg/util/dbterror/plannererrors" + "github.com/pingcap/tidb/pkg/util/intest" ) // PlanCacheKeyTestIssue43667 is only for test. @@ -48,6 +50,9 @@ type PlanCacheKeyTestIssue47133 struct{} // PlanCacheKeyTestClone is only for test. type PlanCacheKeyTestClone struct{} +// PlanCacheKeyEnableInstancePlanCache is only for test. +type PlanCacheKeyEnableInstancePlanCache struct{} + // SetParameterValuesIntoSCtx sets these parameters into session context. func SetParameterValuesIntoSCtx(sctx base.PlanContext, isNonPrep bool, markers []ast.ParamMarkerExpr, params []expression.Expression) error { vars := sctx.GetSessionVars() @@ -101,7 +106,7 @@ func planCachePreprocess(ctx context.Context, sctx sessionctx.Context, isNonPrep // step 3: add metadata lock and check each table's schema version schemaNotMatch := false for i := 0; i < len(stmt.dbName); i++ { - tbl, ok := is.TableByID(stmt.tbls[i].Meta().ID) + tbl, ok := is.TableByID(ctx, stmt.tbls[i].Meta().ID) if !ok { tblByName, err := is.TableByName(context.Background(), stmt.dbName[i], stmt.tbls[i].Meta().Name) if err != nil { @@ -226,8 +231,16 @@ func GetPlanFromPlanCache(ctx context.Context, sctx sessionctx.Context, return generateNewPlan(ctx, sctx, isNonPrepared, is, stmt, cacheKey, paramTypes) } +func instancePlanCacheEnabled(ctx context.Context) bool { + if intest.InTest && ctx.Value(PlanCacheKeyEnableInstancePlanCache{}) != nil { + return true + } + enableInstancePlanCache := variable.EnableInstancePlanCache.Load() + return enableInstancePlanCache +} + func lookupPlanCache(ctx context.Context, sctx sessionctx.Context, cacheKey string, paramTypes []*types.FieldType) (cachedVal *PlanCacheValue, hit bool) { - if sctx.GetSessionVars().EnableInstancePlanCache { + if instancePlanCacheEnabled(ctx) { if v, hit := domain.GetDomain(sctx).GetInstancePlanCache().Get(cacheKey, paramTypes); hit { cachedVal = v.(*PlanCacheValue) return cachedVal.CloneForInstancePlanCache(ctx, sctx.GetPlanCtx()) // clone the value to solve concurrency problem @@ -296,7 +309,7 @@ func generateNewPlan(ctx context.Context, sctx sessionctx.Context, isNonPrepared stmt.NormalizedPlan, stmt.PlanDigest = NormalizePlan(p) stmtCtx.SetPlan(p) stmtCtx.SetPlanDigest(stmt.NormalizedPlan, stmt.PlanDigest) - if sessVars.EnableInstancePlanCache { + if instancePlanCacheEnabled(ctx) { domain.GetDomain(sctx).GetInstancePlanCache().Put(cacheKey, cached, paramTypes) } else { sctx.GetSessionPlanCache().Put(cacheKey, cached, paramTypes) diff --git a/pkg/planner/core/plan_cache_instance.go b/pkg/planner/core/plan_cache_instance.go index 9676654ebb89e..5cdfbab6a8de1 100644 --- a/pkg/planner/core/plan_cache_instance.go +++ b/pkg/planner/core/plan_cache_instance.go @@ -15,6 +15,7 @@ package core import ( + "fmt" "sort" "sync" "time" @@ -52,8 +53,10 @@ type instancePCNode struct { type instancePlanCache struct { heads sync.Map totCost atomic.Int64 + totPlan atomic.Int64 evictMutex sync.Mutex + inEvict atomic.Bool softMemLimit atomic.Int64 hardMemLimit atomic.Int64 } @@ -83,10 +86,12 @@ func (pc *instancePlanCache) Get(key string, paramTypes any) (value any, ok bool return pc.getPlanFromList(headNode, paramTypes) } -func (*instancePlanCache) getPlanFromList(headNode *instancePCNode, paramTypes any) (any, bool) { +func (pc *instancePlanCache) getPlanFromList(headNode *instancePCNode, paramTypes any) (any, bool) { for node := headNode.next.Load(); node != nil; node = node.next.Load() { if checkTypesCompatibility4PC(node.value.paramTypes, paramTypes) { // v.Plan is read-only, no need to lock - node.lastUsed.Store(time.Now()) // atomically update the lastUsed field + if !pc.inEvict.Load() { + node.lastUsed.Store(time.Now()) // atomically update the lastUsed field + } return node.value, true } } @@ -96,6 +101,9 @@ func (*instancePlanCache) getPlanFromList(headNode *instancePCNode, paramTypes a // Put puts the key and values into the cache. // Due to some thread-safety issues, this Put operation might fail, use the returned succ to indicate it. func (pc *instancePlanCache) Put(key string, value, paramTypes any) (succ bool) { + if pc.inEvict.Load() { + return // do nothing if eviction is in progress + } vMem := value.(*PlanCacheValue).MemoryUsage() if vMem+pc.totCost.Load() > pc.hardMemLimit.Load() { return // do nothing if it exceeds the hard limit @@ -107,12 +115,16 @@ func (pc *instancePlanCache) Put(key string, value, paramTypes any) (succ bool) if _, ok := pc.getPlanFromList(headNode, paramTypes); ok { return // some other thread has inserted the same plan before } + if pc.inEvict.Load() { + return // do nothing if eviction is in progress + } firstNode := headNode.next.Load() currNode := pc.createNode(value) currNode.next.Store(firstNode) if headNode.next.CompareAndSwap(firstNode, currNode) { // if failed, some other thread has updated this node, pc.totCost.Add(vMem) // then skip this Put and wait for the next time. + pc.totPlan.Add(1) succ = true } return @@ -122,11 +134,15 @@ func (pc *instancePlanCache) Put(key string, value, paramTypes any) (succ bool) // step 1: iterate all values to collect their last_used // step 2: estimate an eviction threshold time based on all last_used values // step 3: iterate all values again and evict qualified values -func (pc *instancePlanCache) Evict() (evicted bool) { +func (pc *instancePlanCache) Evict() (detailInfo string, numEvicted int) { pc.evictMutex.Lock() // make sure only one thread to trigger eviction for safety defer pc.evictMutex.Unlock() - if pc.totCost.Load() < pc.softMemLimit.Load() { - return // do nothing + pc.inEvict.Store(true) + defer pc.inEvict.Store(false) + currentTot, softLimit := pc.totCost.Load(), pc.softMemLimit.Load() + if currentTot < softLimit { + detailInfo = fmt.Sprintf("memory usage is below the soft limit, currentTot: %v, softLimit: %v", currentTot, softLimit) + return } lastUsedTimes := make([]time.Time, 0, 64) pc.foreach(func(_, this *instancePCNode) bool { // step 1 @@ -134,11 +150,13 @@ func (pc *instancePlanCache) Evict() (evicted bool) { return false }) threshold := pc.calcEvictionThreshold(lastUsedTimes) // step 2 - pc.foreach(func(prev, this *instancePCNode) bool { // step 3 + detailInfo = fmt.Sprintf("evict threshold: %v", threshold) + pc.foreach(func(prev, this *instancePCNode) bool { // step 3 if !this.lastUsed.Load().After(threshold) { // if lastUsed<=threshold, evict this value if prev.next.CompareAndSwap(this, this.next.Load()) { // have to use CAS since pc.totCost.Sub(this.value.MemoryUsage()) // it might have been updated by other thread - evicted = true + pc.totPlan.Sub(1) + numEvicted++ return true } } @@ -160,6 +178,11 @@ func (pc *instancePlanCache) MemUsage() int64 { return pc.totCost.Load() } +// Size returns the number of plans in this plan cache. +func (pc *instancePlanCache) Size() int64 { + return pc.totPlan.Load() +} + func (pc *instancePlanCache) calcEvictionThreshold(lastUsedTimes []time.Time) (t time.Time) { if len(lastUsedTimes) == 0 { return @@ -217,3 +240,14 @@ func (*instancePlanCache) createNode(value any) *instancePCNode { node.lastUsed.Store(time.Now()) return node } + +// GetLimits gets the memory limit of this plan cache. +func (pc *instancePlanCache) GetLimits() (softLimit, hardLimit int64) { + return pc.softMemLimit.Load(), pc.hardMemLimit.Load() +} + +// SetLimits sets the memory limit of this plan cache. +func (pc *instancePlanCache) SetLimits(softLimit, hardLimit int64) { + pc.softMemLimit.Store(softLimit) + pc.hardMemLimit.Store(hardLimit) +} diff --git a/pkg/planner/core/plan_cache_instance_test.go b/pkg/planner/core/plan_cache_instance_test.go index ad6ff77ba7382..d9bbc7a846601 100644 --- a/pkg/planner/core/plan_cache_instance_test.go +++ b/pkg/planner/core/plan_cache_instance_test.go @@ -84,7 +84,8 @@ func TestInstancePlanCacheBasic(t *testing.T) { _hit(t, pc, 1, 0) // access 1-3 to refresh their last_used _hit(t, pc, 2, 0) _hit(t, pc, 3, 0) - require.Equal(t, pc.Evict(), true) + _, numEvicted := pc.Evict() + require.Equal(t, numEvicted > 0, true) require.Equal(t, pc.MemUsage(), int64(300)) _hit(t, pc, 1, 0) // access 1-3 to refresh their last_used _hit(t, pc, 2, 0) @@ -97,7 +98,8 @@ func TestInstancePlanCacheBasic(t *testing.T) { _put(pc, 1, 100, 0) _put(pc, 2, 100, 0) _put(pc, 3, 100, 0) - require.Equal(t, pc.Evict(), false) + _, numEvicted = pc.Evict() + require.Equal(t, numEvicted > 0, false) require.Equal(t, pc.MemUsage(), int64(300)) _hit(t, pc, 1, 0) _hit(t, pc, 2, 0) @@ -113,7 +115,8 @@ func TestInstancePlanCacheBasic(t *testing.T) { numHeads := 0 pcImpl.heads.Range(func(k, v any) bool { numHeads++; return true }) require.Equal(t, numHeads, 3) - require.Equal(t, pc.Evict(), true) + _, numEvicted = pc.Evict() + require.Equal(t, numEvicted > 0, true) require.Equal(t, pc.MemUsage(), int64(0)) numHeads = 0 pcImpl.heads.Range(func(k, v any) bool { numHeads++; return true }) @@ -174,7 +177,8 @@ func TestInstancePlanCacheWithMatchOpts(t *testing.T) { _hit(t, pc, 1, 1) // refresh 1-3's last_used _hit(t, pc, 1, 2) _hit(t, pc, 1, 3) - require.True(t, pc.Evict()) + _, numEvicted := pc.Evict() + require.True(t, numEvicted > 0) require.Equal(t, pc.MemUsage(), int64(300)) _hit(t, pc, 1, 1) _hit(t, pc, 1, 2) diff --git a/pkg/planner/core/plan_cache_lru.go b/pkg/planner/core/plan_cache_lru.go index 78e7d2dcc3fff..7fc9b512f718d 100644 --- a/pkg/planner/core/plan_cache_lru.go +++ b/pkg/planner/core/plan_cache_lru.go @@ -150,9 +150,9 @@ func (l *LRUPlanCache) DeleteAll() { // update metrics if l.sctx.GetSessionVars().EnablePreparedPlanCacheMemoryMonitor { - core_metrics.GetPlanCacheInstanceMemoryUsage().Sub(float64(l.memoryUsageTotal)) + core_metrics.GetPlanCacheInstanceMemoryUsage(false).Sub(float64(l.memoryUsageTotal)) } - core_metrics.GetPlanCacheInstanceNumCounter().Sub(float64(l.size)) + core_metrics.GetPlanCacheInstanceNumCounter(false).Sub(float64(l.size)) // reset all fields l.size = 0 @@ -256,14 +256,14 @@ func (l *LRUPlanCache) updateInstanceMetric(in, out *planCacheEntry) { } if in != nil && out != nil { // replace plan - core_metrics.GetPlanCacheInstanceMemoryUsage().Sub(float64(out.MemoryUsage())) - core_metrics.GetPlanCacheInstanceMemoryUsage().Add(float64(in.MemoryUsage())) + core_metrics.GetPlanCacheInstanceMemoryUsage(false).Sub(float64(out.MemoryUsage())) + core_metrics.GetPlanCacheInstanceMemoryUsage(false).Add(float64(in.MemoryUsage())) l.memoryUsageTotal += in.MemoryUsage() - out.MemoryUsage() } else if in != nil { // put plan - core_metrics.GetPlanCacheInstanceMemoryUsage().Add(float64(in.MemoryUsage())) + core_metrics.GetPlanCacheInstanceMemoryUsage(false).Add(float64(in.MemoryUsage())) l.memoryUsageTotal += in.MemoryUsage() } else { // delete plan - core_metrics.GetPlanCacheInstanceMemoryUsage().Sub(float64(out.MemoryUsage())) + core_metrics.GetPlanCacheInstanceMemoryUsage(false).Sub(float64(out.MemoryUsage())) l.memoryUsageTotal -= out.MemoryUsage() } } @@ -273,8 +273,8 @@ func updateInstancePlanNum(in, out *planCacheEntry) { if in != nil && out != nil { // replace plan return } else if in != nil { // put plan - core_metrics.GetPlanCacheInstanceNumCounter().Add(1) + core_metrics.GetPlanCacheInstanceNumCounter(false).Add(1) } else { // delete plan - core_metrics.GetPlanCacheInstanceNumCounter().Sub(1) + core_metrics.GetPlanCacheInstanceNumCounter(false).Sub(1) } } diff --git a/pkg/planner/core/plan_cache_rebuild.go b/pkg/planner/core/plan_cache_rebuild.go index d2a500215fba7..0280d453d4bad 100644 --- a/pkg/planner/core/plan_cache_rebuild.go +++ b/pkg/planner/core/plan_cache_rebuild.go @@ -84,12 +84,11 @@ func rebuildRange(p base.Plan) error { case *PhysicalIndexMergeJoin: return rebuildRange(&x.PhysicalIndexJoin) case *PhysicalIndexJoin: - if err := x.Ranges.Rebuild(); err != nil { + if err := x.Ranges.Rebuild(sctx); err != nil { return err } if mutableRange, ok := x.Ranges.(*mutableIndexJoinRange); ok { - helper := mutableRange.buildHelper - rangeInfo := helper.buildRangeDecidedByInformation(helper.chosenPath.IdxCols, mutableRange.outerJoinKeys) + rangeInfo := mutableRange.rangeInfo innerPlan := x.Children()[x.InnerChildIdx] updateRange(innerPlan, x.Ranges.Range(), rangeInfo) } diff --git a/pkg/planner/core/plan_cache_rebuild_test.go b/pkg/planner/core/plan_cache_rebuild_test.go index a11229ba2f8e4..da0ae8670279c 100644 --- a/pkg/planner/core/plan_cache_rebuild_test.go +++ b/pkg/planner/core/plan_cache_rebuild_test.go @@ -19,6 +19,7 @@ import ( "fmt" "math/rand" "reflect" + "strings" "testing" "unsafe" @@ -28,7 +29,6 @@ import ( "github.com/pingcap/tidb/pkg/planner/core/base" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/testkit" - "github.com/pingcap/tidb/pkg/types" "github.com/stretchr/testify/require" ) @@ -36,11 +36,10 @@ func TestPlanCacheClone(t *testing.T) { store := testkit.CreateMockStore(t) tk1 := testkit.NewTestKit(t, store) tk2 := testkit.NewTestKit(t, store) - tk1.Session().GetSessionVars().EnableInstancePlanCache = true - tk2.Session().GetSessionVars().EnableInstancePlanCache = true tk1.MustExec(`use test`) tk2.MustExec(`use test`) tk1.MustExec(`create table t (a int, b int, c int, d int, primary key(a), key(b), unique key(d))`) + tk1.MustExec(`create table t1 (a int, b int, c int, d int)`) for i := -20; i < 20; i++ { tk1.MustExec(fmt.Sprintf("insert into t values (%v,%v,%v,%v)", i, rand.Intn(20), rand.Intn(20), -i)) @@ -70,31 +69,175 @@ func TestPlanCacheClone(t *testing.T) { testCachedPlanClone(t, tk1, tk2, `prepare st from 'select * from t use index(b) where a?'`, + `set @a1=1, @a2=2`, `execute st using @a1`, `execute st using @a2`) + testCachedPlanClone(t, tk1, tk2, `prepare st from 'select * from t use index(b) where b>?'`, + `set @a1=1, @a2=2`, `execute st using @a1`, `execute st using @a2`) + + // IndexMerge + testCachedPlanClone(t, tk1, tk2, "prepare st from 'select /*+ use_index_merge(t, primary, b, d) */ * from t where a=? or b=1'", + `set @a1=1, @a2=2`, `execute st using @a1`, `execute st using @a2`) + testCachedPlanClone(t, tk1, tk2, "prepare st from 'select /*+ use_index_merge(t, primary, b, d) */ * from t where a=? or b=1 or d=1'", + `set @a1=1, @a2=2`, `execute st using @a1`, `execute st using @a2`) + testCachedPlanClone(t, tk1, tk2, "prepare st from 'select /*+ use_index_merge(t, primary, b, d) */ * from t where a>? or b>1'", + `set @a1=1, @a2=2`, `execute st using @a1`, `execute st using @a2`) + testCachedPlanClone(t, tk1, tk2, "prepare st from 'select /*+ use_index_merge(t, primary, b, d) */ * from t where a>? or b>1 or d=1'", + `set @a1=1, @a2=2`, `execute st using @a1`, `execute st using @a2`) + + // HashAgg + testCachedPlanClone(t, tk1, tk2, `prepare st from 'select /*+ hash_agg() */ sum(a) from t where a=? order by b'`, + `set @a1=1, @a2=2`, `execute st using @a1`, `execute st using @a2`) + testCachedPlanClone(t, tk1, tk2, `prepare st from 'select * from t use index(primary) where a=? order by b limit 5'`, + `set @a1=1, @a2=2`, `execute st using @a1`, `execute st using @a2`) + testCachedPlanClone(t, tk1, tk2, `prepare st from 'select * from t use index(primary) where a 0 } -// GetPlanCostVer1 calculates the cost of the plan if it has not been calculated yet and returns the cost. -func (p *basePhysicalPlan) GetPlanCostVer1(taskType property.TaskType, option *optimizetrace.PlanCostOption) (float64, error) { - costFlag := option.CostFlag - if p.planCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { - // just calculate the cost once and always reuse it - return p.planCost, nil - } - p.planCost = 0 // the default implementation, the operator have no cost - for _, child := range p.children { - childCost, err := child.GetPlanCostVer1(taskType, option) - if err != nil { - return 0, err - } - p.planCost += childCost - } - p.planCostInit = true - return p.planCost, nil -} - // GetPlanCostVer1 calculates the cost of the plan if it has not been calculated yet and returns the cost. func (p *PhysicalSelection) GetPlanCostVer1(taskType property.TaskType, option *optimizetrace.PlanCostOption) (float64, error) { costFlag := option.CostFlag - if p.planCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { - return p.planCost, nil + if p.PlanCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { + return p.PlanCost, nil } var selfCost float64 @@ -76,18 +58,18 @@ func (p *PhysicalSelection) GetPlanCostVer1(taskType property.TaskType, option * default: return 0, errors.Errorf("unknown task type %v", taskType) } - selfCost = getCardinality(p.children[0], costFlag) * cpuFactor + selfCost = getCardinality(p.Children()[0], costFlag) * cpuFactor if p.fromDataSource { selfCost = 0 // for compatibility, see https://github.com/pingcap/tidb/issues/36243 } - childCost, err := p.children[0].GetPlanCostVer1(taskType, option) + childCost, err := p.Children()[0].GetPlanCostVer1(taskType, option) if err != nil { return 0, err } - p.planCost = childCost + selfCost - p.planCostInit = true - return p.planCost, nil + p.PlanCost = childCost + selfCost + p.PlanCostInit = true + return p.PlanCost, nil } // GetCost computes the cost of projection operator itself. @@ -106,17 +88,17 @@ func (p *PhysicalProjection) GetCost(count float64) float64 { // GetPlanCostVer1 calculates the cost of the plan if it has not been calculated yet and returns the cost. func (p *PhysicalProjection) GetPlanCostVer1(taskType property.TaskType, option *optimizetrace.PlanCostOption) (float64, error) { costFlag := option.CostFlag - if p.planCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { - return p.planCost, nil + if p.PlanCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { + return p.PlanCost, nil } - childCost, err := p.children[0].GetPlanCostVer1(taskType, option) + childCost, err := p.Children()[0].GetPlanCostVer1(taskType, option) if err != nil { return 0, err } - p.planCost = childCost - p.planCost += p.GetCost(getCardinality(p, costFlag)) // projection cost - p.planCostInit = true - return p.planCost, nil + p.PlanCost = childCost + p.PlanCost += p.GetCost(getCardinality(p, costFlag)) // projection cost + p.PlanCostInit = true + return p.PlanCost, nil } // GetCost computes cost of index lookup operator itself. @@ -168,18 +150,18 @@ func (p *PhysicalIndexLookUpReader) GetCost(costFlag uint64) (cost float64) { // GetPlanCostVer1 calculates the cost of the plan if it has not been calculated yet and returns the cost. func (p *PhysicalIndexLookUpReader) GetPlanCostVer1(_ property.TaskType, option *optimizetrace.PlanCostOption) (float64, error) { costFlag := option.CostFlag - if p.planCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { - return p.planCost, nil + if p.PlanCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { + return p.PlanCost, nil } - p.planCost = 0 + p.PlanCost = 0 // child's cost for _, child := range []base.PhysicalPlan{p.indexPlan, p.tablePlan} { childCost, err := child.GetPlanCostVer1(property.CopMultiReadTaskType, option) if err != nil { return 0, err } - p.planCost += childCost + p.PlanCost += childCost } // to keep compatible with the previous cost implementation, re-calculate table-scan cost by using index stats-count again (see copTask.finishIndexPlan). @@ -193,38 +175,38 @@ func (p *PhysicalIndexLookUpReader) GetPlanCostVer1(_ property.TaskType, option if err != nil { return 0, err } - p.planCost -= tblCost - p.planCost += getCardinality(p.indexPlan, costFlag) * ts.getScanRowSize() * p.SCtx().GetSessionVars().GetScanFactor(ts.Table) + p.PlanCost -= tblCost + p.PlanCost += getCardinality(p.indexPlan, costFlag) * ts.getScanRowSize() * p.SCtx().GetSessionVars().GetScanFactor(ts.Table) // index-side net I/O cost: rows * row-size * net-factor netFactor := getTableNetFactor(p.tablePlan) rowSize := cardinality.GetAvgRowSize(p.SCtx(), getTblStats(p.indexPlan), p.indexPlan.Schema().Columns, true, false) - p.planCost += getCardinality(p.indexPlan, costFlag) * rowSize * netFactor + p.PlanCost += getCardinality(p.indexPlan, costFlag) * rowSize * netFactor // index-side net seek cost - p.planCost += estimateNetSeekCost(p.indexPlan) + p.PlanCost += estimateNetSeekCost(p.indexPlan) // table-side net I/O cost: rows * row-size * net-factor tblRowSize := cardinality.GetAvgRowSize(p.SCtx(), getTblStats(p.tablePlan), p.tablePlan.Schema().Columns, false, false) - p.planCost += getCardinality(p.tablePlan, costFlag) * tblRowSize * netFactor + p.PlanCost += getCardinality(p.tablePlan, costFlag) * tblRowSize * netFactor // table-side seek cost - p.planCost += estimateNetSeekCost(p.tablePlan) + p.PlanCost += estimateNetSeekCost(p.tablePlan) // consider concurrency - p.planCost /= float64(p.SCtx().GetSessionVars().DistSQLScanConcurrency()) + p.PlanCost /= float64(p.SCtx().GetSessionVars().DistSQLScanConcurrency()) // lookup-cpu-cost in TiDB - p.planCost += p.GetCost(costFlag) - p.planCostInit = true - return p.planCost, nil + p.PlanCost += p.GetCost(costFlag) + p.PlanCostInit = true + return p.PlanCost, nil } // GetPlanCostVer1 calculates the cost of the plan if it has not been calculated yet and returns the cost. func (p *PhysicalIndexReader) GetPlanCostVer1(_ property.TaskType, option *optimizetrace.PlanCostOption) (float64, error) { costFlag := option.CostFlag - if p.planCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { - return p.planCost, nil + if p.PlanCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { + return p.PlanCost, nil } var rowCount, rowSize, netFactor, indexPlanCost, netSeekCost float64 @@ -235,24 +217,24 @@ func (p *PhysicalIndexReader) GetPlanCostVer1(_ property.TaskType, option *optim return 0, err } indexPlanCost = childCost - p.planCost = indexPlanCost + p.PlanCost = indexPlanCost // net I/O cost: rows * row-size * net-factor tblStats := getTblStats(p.indexPlan) rowSize = cardinality.GetAvgRowSize(p.SCtx(), tblStats, p.indexPlan.Schema().Columns, true, false) rowCount = getCardinality(p.indexPlan, costFlag) netFactor = getTableNetFactor(p.indexPlan) - p.planCost += rowCount * rowSize * netFactor + p.PlanCost += rowCount * rowSize * netFactor // net seek cost netSeekCost = estimateNetSeekCost(p.indexPlan) - p.planCost += netSeekCost + p.PlanCost += netSeekCost // consider concurrency - p.planCost /= float64(sqlScanConcurrency) + p.PlanCost /= float64(sqlScanConcurrency) if option.GetTracer() != nil { setPhysicalIndexReaderCostDetail(p, option.GetTracer(), rowCount, rowSize, netFactor, netSeekCost, indexPlanCost, sqlScanConcurrency) } - p.planCostInit = true - return p.planCost, nil + p.PlanCostInit = true + return p.PlanCost, nil } // GetNetDataSize calculates the cost of the plan in network data transfer. @@ -265,11 +247,11 @@ func (p *PhysicalIndexReader) GetNetDataSize() float64 { // GetPlanCostVer1 calculates the cost of the plan if it has not been calculated yet and returns the cost. func (p *PhysicalTableReader) GetPlanCostVer1(_ property.TaskType, option *optimizetrace.PlanCostOption) (float64, error) { costFlag := option.CostFlag - if p.planCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { - return p.planCost, nil + if p.PlanCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { + return p.PlanCost, nil } - p.planCost = 0 + p.PlanCost = 0 netFactor := getTableNetFactor(p.tablePlan) var rowCount, rowSize, netSeekCost, tableCost float64 sqlScanConcurrency := p.SCtx().GetSessionVars().DistSQLScanConcurrency() @@ -282,16 +264,16 @@ func (p *PhysicalTableReader) GetPlanCostVer1(_ property.TaskType, option *optim return 0, err } tableCost = childCost - p.planCost = childCost + p.PlanCost = childCost // net I/O cost: rows * row-size * net-factor rowSize = cardinality.GetAvgRowSize(p.SCtx(), getTblStats(p.tablePlan), p.tablePlan.Schema().Columns, false, false) rowCount = getCardinality(p.tablePlan, costFlag) - p.planCost += rowCount * rowSize * netFactor + p.PlanCost += rowCount * rowSize * netFactor // net seek cost netSeekCost = estimateNetSeekCost(p.tablePlan) - p.planCost += netSeekCost + p.PlanCost += netSeekCost // consider concurrency - p.planCost /= float64(sqlScanConcurrency) + p.PlanCost /= float64(sqlScanConcurrency) case kv.TiFlash: var concurrency, rowSize, seekCost float64 _, isMPP := p.tablePlan.(*PhysicalExchangeSender) @@ -304,7 +286,7 @@ func (p *PhysicalTableReader) GetPlanCostVer1(_ property.TaskType, option *optim if err != nil { return 0, err } - p.planCost = childCost + p.PlanCost = childCost } else { // cop protocol concurrency = float64(p.SCtx().GetSessionVars().DistSQLScanConcurrency()) @@ -315,19 +297,19 @@ func (p *PhysicalTableReader) GetPlanCostVer1(_ property.TaskType, option *optim if err != nil { return 0, err } - p.planCost = childCost + p.PlanCost = childCost } // net I/O cost - p.planCost += getCardinality(p.tablePlan, costFlag) * rowSize * netFactor + p.PlanCost += getCardinality(p.tablePlan, costFlag) * rowSize * netFactor // net seek cost - p.planCost += seekCost + p.PlanCost += seekCost // consider concurrency - p.planCost /= concurrency + p.PlanCost /= concurrency // consider tidb_enforce_mpp if isMPP && p.SCtx().GetSessionVars().IsMPPEnforced() && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { // show the real cost in explain-statements - p.planCost /= 1000000000 + p.PlanCost /= 1000000000 } } if option.GetTracer() != nil { @@ -335,8 +317,8 @@ func (p *PhysicalTableReader) GetPlanCostVer1(_ property.TaskType, option *optim rowCount, rowSize, netFactor, netSeekCost, tableCost, sqlScanConcurrency, storeType) } - p.planCostInit = true - return p.planCost, nil + p.PlanCostInit = true + return p.PlanCost, nil } // GetNetDataSize calculates the estimated total data size fetched from storage. @@ -348,21 +330,21 @@ func (p *PhysicalTableReader) GetNetDataSize() float64 { // GetPlanCostVer1 calculates the cost of the plan if it has not been calculated yet and returns the cost. func (p *PhysicalIndexMergeReader) GetPlanCostVer1(_ property.TaskType, option *optimizetrace.PlanCostOption) (float64, error) { costFlag := option.CostFlag - if p.planCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { - return p.planCost, nil + if p.PlanCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { + return p.PlanCost, nil } - p.planCost = 0 + p.PlanCost = 0 if tblScan := p.tablePlan; tblScan != nil { childCost, err := tblScan.GetPlanCostVer1(property.CopSingleReadTaskType, option) if err != nil { return 0, err } netFactor := getTableNetFactor(tblScan) - p.planCost += childCost // child's cost + p.PlanCost += childCost // child's cost tblStats := getTblStats(tblScan) rowSize := cardinality.GetAvgRowSize(p.SCtx(), tblStats, tblScan.Schema().Columns, false, false) - p.planCost += getCardinality(tblScan, costFlag) * rowSize * netFactor // net I/O cost + p.PlanCost += getCardinality(tblScan, costFlag) * rowSize * netFactor // net I/O cost } for _, partialScan := range p.partialPlans { childCost, err := partialScan.GetPlanCostVer1(property.CopSingleReadTaskType, option) @@ -378,10 +360,10 @@ func (p *PhysicalIndexMergeReader) GetPlanCostVer1(_ property.TaskType, option * } netFactor := getTableNetFactor(partialScan) - p.planCost += childCost // child's cost + p.PlanCost += childCost // child's cost tblStats := getTblStats(partialScan) rowSize := cardinality.GetAvgRowSize(p.SCtx(), tblStats, partialScan.Schema().Columns, isIdxScan, false) - p.planCost += getCardinality(partialScan, costFlag) * rowSize * netFactor // net I/O cost + p.PlanCost += getCardinality(partialScan, costFlag) * rowSize * netFactor // net I/O cost } // give a bias to pushDown limit, since it will get the same cost with NON_PUSH_DOWN_LIMIT case via expect count. @@ -396,16 +378,16 @@ func (p *PhysicalIndexMergeReader) GetPlanCostVer1(_ property.TaskType, option * // will have the same cost, actually if limit are more close to the fetch side, the fewer rows that table plan need to read. // todo: refine the cost computation out from cost model. if p.PushedLimit != nil { - p.planCost = p.planCost * 0.99 + p.PlanCost = p.PlanCost * 0.99 } // TODO: accumulate table-side seek cost // consider concurrency copIterWorkers := float64(p.SCtx().GetSessionVars().DistSQLScanConcurrency()) - p.planCost /= copIterWorkers - p.planCostInit = true - return p.planCost, nil + p.PlanCost /= copIterWorkers + p.PlanCostInit = true + return p.PlanCost, nil } // GetPartialReaderNetDataSize returns the estimated total response data size of a partial read. @@ -417,8 +399,8 @@ func (p *PhysicalIndexMergeReader) GetPartialReaderNetDataSize(plan base.Physica // GetPlanCostVer1 calculates the cost of the plan if it has not been calculated yet and returns the cost. func (p *PhysicalTableScan) GetPlanCostVer1(_ property.TaskType, option *optimizetrace.PlanCostOption) (float64, error) { costFlag := option.CostFlag - if p.planCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { - return p.planCost, nil + if p.PlanCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { + return p.PlanCost, nil } var selfCost float64 @@ -434,16 +416,16 @@ func (p *PhysicalTableScan) GetPlanCostVer1(_ property.TaskType, option *optimiz if option.GetTracer() != nil { setPhysicalTableOrIndexScanCostDetail(p, option.GetTracer(), rowCount, rowSize, scanFactor, costModelVersion) } - p.planCost = selfCost - p.planCostInit = true - return p.planCost, nil + p.PlanCost = selfCost + p.PlanCostInit = true + return p.PlanCost, nil } // GetPlanCostVer1 calculates the cost of the plan if it has not been calculated yet and returns the cost. func (p *PhysicalIndexScan) GetPlanCostVer1(_ property.TaskType, option *optimizetrace.PlanCostOption) (float64, error) { costFlag := option.CostFlag - if p.planCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { - return p.planCost, nil + if p.PlanCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { + return p.PlanCost, nil } var selfCost float64 @@ -459,9 +441,9 @@ func (p *PhysicalIndexScan) GetPlanCostVer1(_ property.TaskType, option *optimiz if option.GetTracer() != nil { setPhysicalTableOrIndexScanCostDetail(p, option.GetTracer(), rowCount, rowSize, scanFactor, costModelVersion) } - p.planCost = selfCost - p.planCostInit = true - return p.planCost, nil + p.PlanCost = selfCost + p.PlanCostInit = true + return p.PlanCost, nil } // GetCost computes the cost of index join operator and its children. @@ -494,8 +476,8 @@ func (p *PhysicalIndexJoin) GetCost(outerCnt, innerCnt, outerCost, innerCost flo cpuCost += innerCPUCost / innerConcurrency // Cost of probing hash table in main thread. numPairs := outerCnt * innerCnt - if p.JoinType == SemiJoin || p.JoinType == AntiSemiJoin || - p.JoinType == LeftOuterSemiJoin || p.JoinType == AntiLeftOuterSemiJoin { + if p.JoinType == logicalop.SemiJoin || p.JoinType == logicalop.AntiSemiJoin || + p.JoinType == logicalop.LeftOuterSemiJoin || p.JoinType == logicalop.AntiLeftOuterSemiJoin { if len(p.OtherConditions) > 0 { numPairs *= 0.5 } else { @@ -527,10 +509,10 @@ func (p *PhysicalIndexJoin) GetCost(outerCnt, innerCnt, outerCost, innerCost flo // GetPlanCostVer1 calculates the cost of the plan if it has not been calculated yet and returns the cost. func (p *PhysicalIndexJoin) GetPlanCostVer1(taskType property.TaskType, option *optimizetrace.PlanCostOption) (float64, error) { costFlag := option.CostFlag - if p.planCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { - return p.planCost, nil + if p.PlanCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { + return p.PlanCost, nil } - outerChild, innerChild := p.children[1-p.InnerChildIdx], p.children[p.InnerChildIdx] + outerChild, innerChild := p.Children()[1-p.InnerChildIdx], p.Children()[p.InnerChildIdx] outerCost, err := outerChild.GetPlanCostVer1(taskType, option) if err != nil { return 0, err @@ -545,9 +527,9 @@ func (p *PhysicalIndexJoin) GetPlanCostVer1(taskType property.TaskType, option * innerCnt /= outerCnt // corresponding to one outer row when calculating IndexJoin costs innerCost /= outerCnt } - p.planCost = p.GetCost(outerCnt, innerCnt, outerCost, innerCost, costFlag) - p.planCostInit = true - return p.planCost, nil + p.PlanCost = p.GetCost(outerCnt, innerCnt, outerCost, innerCost, costFlag) + p.PlanCostInit = true + return p.PlanCost, nil } // GetCost computes the cost of index merge join operator and its children. @@ -581,8 +563,8 @@ func (p *PhysicalIndexHashJoin) GetCost(outerCnt, innerCnt, outerCost, innerCost cpuCost += outerCPUCost / concurrency // Cost of probing hash table concurrently. numPairs := outerCnt * innerCnt - if p.JoinType == SemiJoin || p.JoinType == AntiSemiJoin || - p.JoinType == LeftOuterSemiJoin || p.JoinType == AntiLeftOuterSemiJoin { + if p.JoinType == logicalop.SemiJoin || p.JoinType == logicalop.AntiSemiJoin || + p.JoinType == logicalop.LeftOuterSemiJoin || p.JoinType == logicalop.AntiLeftOuterSemiJoin { if len(p.OtherConditions) > 0 { numPairs *= 0.5 } else { @@ -616,10 +598,10 @@ func (p *PhysicalIndexHashJoin) GetCost(outerCnt, innerCnt, outerCost, innerCost // GetPlanCostVer1 calculates the cost of the plan if it has not been calculated yet and returns the cost. func (p *PhysicalIndexHashJoin) GetPlanCostVer1(taskType property.TaskType, option *optimizetrace.PlanCostOption) (float64, error) { costFlag := option.CostFlag - if p.planCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { - return p.planCost, nil + if p.PlanCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { + return p.PlanCost, nil } - outerChild, innerChild := p.children[1-p.InnerChildIdx], p.children[p.InnerChildIdx] + outerChild, innerChild := p.Children()[1-p.InnerChildIdx], p.Children()[p.InnerChildIdx] outerCost, err := outerChild.GetPlanCostVer1(taskType, option) if err != nil { return 0, err @@ -634,9 +616,9 @@ func (p *PhysicalIndexHashJoin) GetPlanCostVer1(taskType property.TaskType, opti innerCnt /= outerCnt // corresponding to one outer row when calculating IndexJoin costs innerCost /= outerCnt } - p.planCost = p.GetCost(outerCnt, innerCnt, outerCost, innerCost, costFlag) - p.planCostInit = true - return p.planCost, nil + p.PlanCost = p.GetCost(outerCnt, innerCnt, outerCost, innerCost, costFlag) + p.PlanCostInit = true + return p.PlanCost, nil } // GetCost computes the cost of index merge join operator and its children. @@ -672,8 +654,8 @@ func (p *PhysicalIndexMergeJoin) GetCost(outerCnt, innerCnt, outerCost, innerCos cpuCost += innerCPUCost / innerConcurrency // Cost of merge join in inner worker. numPairs := outerCnt * innerCnt - if p.JoinType == SemiJoin || p.JoinType == AntiSemiJoin || - p.JoinType == LeftOuterSemiJoin || p.JoinType == AntiLeftOuterSemiJoin { + if p.JoinType == logicalop.SemiJoin || p.JoinType == logicalop.AntiSemiJoin || + p.JoinType == logicalop.LeftOuterSemiJoin || p.JoinType == logicalop.AntiLeftOuterSemiJoin { if len(p.OtherConditions) > 0 { numPairs *= 0.5 } else { @@ -707,10 +689,10 @@ func (p *PhysicalIndexMergeJoin) GetCost(outerCnt, innerCnt, outerCost, innerCos // GetPlanCostVer1 calculates the cost of the plan if it has not been calculated yet and returns the cost. func (p *PhysicalIndexMergeJoin) GetPlanCostVer1(taskType property.TaskType, option *optimizetrace.PlanCostOption) (float64, error) { costFlag := option.CostFlag - if p.planCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { - return p.planCost, nil + if p.PlanCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { + return p.PlanCost, nil } - outerChild, innerChild := p.children[1-p.InnerChildIdx], p.children[p.InnerChildIdx] + outerChild, innerChild := p.Children()[1-p.InnerChildIdx], p.Children()[p.InnerChildIdx] outerCost, err := outerChild.GetPlanCostVer1(taskType, option) if err != nil { return 0, err @@ -725,9 +707,9 @@ func (p *PhysicalIndexMergeJoin) GetPlanCostVer1(taskType property.TaskType, opt innerCnt /= outerCnt // corresponding to one outer row when calculating IndexJoin costs innerCost /= outerCnt } - p.planCost = p.GetCost(outerCnt, innerCnt, outerCost, innerCost, costFlag) - p.planCostInit = true - return p.planCost, nil + p.PlanCost = p.GetCost(outerCnt, innerCnt, outerCost, innerCost, costFlag) + p.PlanCostInit = true + return p.PlanCost, nil } // GetCost computes the cost of apply operator. @@ -743,8 +725,8 @@ func (p *PhysicalApply) GetCost(lCount, rCount, lCost, rCost float64) float64 { rCount *= cost.SelectionFactor } if len(p.EqualConditions)+len(p.OtherConditions)+len(p.NAEqualConditions) > 0 { - if p.JoinType == SemiJoin || p.JoinType == AntiSemiJoin || - p.JoinType == LeftOuterSemiJoin || p.JoinType == AntiLeftOuterSemiJoin { + if p.JoinType == logicalop.SemiJoin || p.JoinType == logicalop.AntiSemiJoin || + p.JoinType == logicalop.LeftOuterSemiJoin || p.JoinType == logicalop.AntiLeftOuterSemiJoin { cpuCost += lCount * rCount * sessVars.GetCPUFactor() * 0.5 } else { cpuCost += lCount * rCount * sessVars.GetCPUFactor() @@ -760,10 +742,10 @@ func (p *PhysicalApply) GetCost(lCount, rCount, lCost, rCost float64) float64 { // GetPlanCostVer1 calculates the cost of the plan if it has not been calculated yet and returns the cost. func (p *PhysicalApply) GetPlanCostVer1(taskType property.TaskType, option *optimizetrace.PlanCostOption) (float64, error) { costFlag := option.CostFlag - if p.planCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { - return p.planCost, nil + if p.PlanCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { + return p.PlanCost, nil } - outerChild, innerChild := p.children[1-p.InnerChildIdx], p.children[p.InnerChildIdx] + outerChild, innerChild := p.Children()[1-p.InnerChildIdx], p.Children()[p.InnerChildIdx] outerCost, err := outerChild.GetPlanCostVer1(taskType, option) if err != nil { return 0, err @@ -774,9 +756,9 @@ func (p *PhysicalApply) GetPlanCostVer1(taskType property.TaskType, option *opti } outerCnt := getCardinality(outerChild, costFlag) innerCnt := getCardinality(innerChild, costFlag) - p.planCost = p.GetCost(outerCnt, innerCnt, outerCost, innerCost) - p.planCostInit = true - return p.planCost, nil + p.PlanCost = p.GetCost(outerCnt, innerCnt, outerCost, innerCost) + p.PlanCostInit = true + return p.PlanCost, nil } // GetCost computes cost of merge join operator itself. @@ -784,22 +766,22 @@ func (p *PhysicalMergeJoin) GetCost(lCnt, rCnt float64, costFlag uint64) float64 outerCnt := lCnt innerCnt := rCnt innerKeys := p.RightJoinKeys - innerSchema := p.children[1].Schema() - innerStats := p.children[1].StatsInfo() - if p.JoinType == RightOuterJoin { + innerSchema := p.Children()[1].Schema() + innerStats := p.Children()[1].StatsInfo() + if p.JoinType == logicalop.RightOuterJoin { outerCnt = rCnt innerCnt = lCnt innerKeys = p.LeftJoinKeys - innerSchema = p.children[0].Schema() - innerStats = p.children[0].StatsInfo() + innerSchema = p.Children()[0].Schema() + innerStats = p.Children()[0].StatsInfo() } numPairs := cardinality.EstimateFullJoinRowCount(p.SCtx(), false, - p.children[0].StatsInfo(), p.children[1].StatsInfo(), + p.Children()[0].StatsInfo(), p.Children()[1].StatsInfo(), p.LeftJoinKeys, p.RightJoinKeys, - p.children[0].Schema(), p.children[1].Schema(), + p.Children()[0].Schema(), p.Children()[1].Schema(), p.LeftNAJoinKeys, p.RightNAJoinKeys) - if p.JoinType == SemiJoin || p.JoinType == AntiSemiJoin || - p.JoinType == LeftOuterSemiJoin || p.JoinType == AntiLeftOuterSemiJoin { + if p.JoinType == logicalop.SemiJoin || p.JoinType == logicalop.AntiSemiJoin || + p.JoinType == logicalop.LeftOuterSemiJoin || p.JoinType == logicalop.AntiLeftOuterSemiJoin { if len(p.OtherConditions) > 0 { numPairs *= 0.5 } else { @@ -828,30 +810,30 @@ func (p *PhysicalMergeJoin) GetCost(lCnt, rCnt float64, costFlag uint64) float64 // GetPlanCostVer1 calculates the cost of the plan if it has not been calculated yet and returns the cost. func (p *PhysicalMergeJoin) GetPlanCostVer1(taskType property.TaskType, option *optimizetrace.PlanCostOption) (float64, error) { costFlag := option.CostFlag - if p.planCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { - return p.planCost, nil + if p.PlanCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { + return p.PlanCost, nil } - p.planCost = 0 - for _, child := range p.children { + p.PlanCost = 0 + for _, child := range p.Children() { childCost, err := child.GetPlanCostVer1(taskType, option) if err != nil { return 0, err } - p.planCost += childCost + p.PlanCost += childCost } - p.planCost += p.GetCost(getCardinality(p.children[0], costFlag), getCardinality(p.children[1], costFlag), costFlag) - p.planCostInit = true - return p.planCost, nil + p.PlanCost += p.GetCost(getCardinality(p.Children()[0], costFlag), getCardinality(p.Children()[1], costFlag), costFlag) + p.PlanCostInit = true + return p.PlanCost, nil } // GetCost computes cost of hash join operator itself. func (p *PhysicalHashJoin) GetCost(lCnt, rCnt float64, _ bool, costFlag uint64, op *optimizetrace.PhysicalOptimizeOp) float64 { buildCnt, probeCnt := lCnt, rCnt - build := p.children[0] + build := p.Children()[0] // Taking the right as the inner for right join or using the outer to build a hash table. if (p.InnerChildIdx == 1 && !p.UseOuterToBuild) || (p.InnerChildIdx == 0 && p.UseOuterToBuild) { buildCnt, probeCnt = rCnt, lCnt - build = p.children[1] + build = p.Children()[1] } sessVars := p.SCtx().GetSessionVars() oomUseTmpStorage := variable.EnableTmpStorageOnOOM.Load() @@ -869,9 +851,9 @@ func (p *PhysicalHashJoin) GetCost(lCnt, rCnt float64, _ bool, costFlag uint64, diskCost := buildCnt * diskFactor * rowSize // Number of matched row pairs regarding the equal join conditions. numPairs := cardinality.EstimateFullJoinRowCount(p.SCtx(), false, - p.children[0].StatsInfo(), p.children[1].StatsInfo(), + p.Children()[0].StatsInfo(), p.Children()[1].StatsInfo(), p.LeftJoinKeys, p.RightJoinKeys, - p.children[0].Schema(), p.children[1].Schema(), + p.Children()[0].Schema(), p.Children()[1].Schema(), p.LeftNAJoinKeys, p.RightNAJoinKeys) // For semi-join class, if `OtherConditions` is empty, we already know // the join results after querying hash table, otherwise, we have to @@ -881,8 +863,8 @@ func (p *PhysicalHashJoin) GetCost(lCnt, rCnt float64, _ bool, costFlag uint64, // to the end of those pairs; since we have no idea about when we can // terminate the iteration, we assume that we need to iterate half of // those pairs in average. - if p.JoinType == SemiJoin || p.JoinType == AntiSemiJoin || - p.JoinType == LeftOuterSemiJoin || p.JoinType == AntiLeftOuterSemiJoin { + if p.JoinType == logicalop.SemiJoin || p.JoinType == logicalop.AntiSemiJoin || + p.JoinType == logicalop.LeftOuterSemiJoin || p.JoinType == logicalop.AntiLeftOuterSemiJoin { if len(p.OtherConditions) > 0 { numPairs *= 0.5 } else { @@ -935,21 +917,21 @@ func (p *PhysicalHashJoin) GetCost(lCnt, rCnt float64, _ bool, costFlag uint64, // GetPlanCostVer1 calculates the cost of the plan if it has not been calculated yet and returns the cost. func (p *PhysicalHashJoin) GetPlanCostVer1(taskType property.TaskType, option *optimizetrace.PlanCostOption) (float64, error) { costFlag := option.CostFlag - if p.planCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { - return p.planCost, nil + if p.PlanCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { + return p.PlanCost, nil } - p.planCost = 0 - for _, child := range p.children { + p.PlanCost = 0 + for _, child := range p.Children() { childCost, err := child.GetPlanCostVer1(taskType, option) if err != nil { return 0, err } - p.planCost += childCost + p.PlanCost += childCost } - p.planCost += p.GetCost(getCardinality(p.children[0], costFlag), getCardinality(p.children[1], costFlag), + p.PlanCost += p.GetCost(getCardinality(p.Children()[0], costFlag), getCardinality(p.Children()[1], costFlag), taskType == property.MppTaskType, costFlag, option.GetTracer()) - p.planCostInit = true - return p.planCost, nil + p.PlanCostInit = true + return p.PlanCost, nil } // GetCost computes cost of stream aggregation considering CPU/memory. @@ -970,17 +952,17 @@ func (p *PhysicalStreamAgg) GetCost(inputRows float64, isRoot, _ bool, costFlag // GetPlanCostVer1 calculates the cost of the plan if it has not been calculated yet and returns the cost. func (p *PhysicalStreamAgg) GetPlanCostVer1(taskType property.TaskType, option *optimizetrace.PlanCostOption) (float64, error) { costFlag := option.CostFlag - if p.planCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { - return p.planCost, nil + if p.PlanCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { + return p.PlanCost, nil } - childCost, err := p.children[0].GetPlanCostVer1(taskType, option) + childCost, err := p.Children()[0].GetPlanCostVer1(taskType, option) if err != nil { return 0, err } - p.planCost = childCost - p.planCost += p.GetCost(getCardinality(p.children[0], costFlag), taskType == property.RootTaskType, taskType == property.MppTaskType, costFlag) - p.planCostInit = true - return p.planCost, nil + p.PlanCost = childCost + p.PlanCost += p.GetCost(getCardinality(p.Children()[0], costFlag), taskType == property.RootTaskType, taskType == property.MppTaskType, costFlag) + p.PlanCostInit = true + return p.PlanCost, nil } // GetCost computes the cost of hash aggregation considering CPU/memory. @@ -1011,27 +993,27 @@ func (p *PhysicalHashAgg) GetCost(inputRows float64, isRoot, isMPP bool, costFla // GetPlanCostVer1 calculates the cost of the plan if it has not been calculated yet and returns the cost. func (p *PhysicalHashAgg) GetPlanCostVer1(taskType property.TaskType, option *optimizetrace.PlanCostOption) (float64, error) { costFlag := option.CostFlag - if p.planCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { - return p.planCost, nil + if p.PlanCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { + return p.PlanCost, nil } - childCost, err := p.children[0].GetPlanCostVer1(taskType, option) + childCost, err := p.Children()[0].GetPlanCostVer1(taskType, option) if err != nil { return 0, err } - p.planCost = childCost - statsCnt := getCardinality(p.children[0], costFlag) + p.PlanCost = childCost + statsCnt := getCardinality(p.Children()[0], costFlag) switch taskType { case property.RootTaskType: - p.planCost += p.GetCost(statsCnt, true, false, costFlag) + p.PlanCost += p.GetCost(statsCnt, true, false, costFlag) case property.CopSingleReadTaskType, property.CopMultiReadTaskType: - p.planCost += p.GetCost(statsCnt, false, false, costFlag) + p.PlanCost += p.GetCost(statsCnt, false, false, costFlag) case property.MppTaskType: - p.planCost += p.GetCost(statsCnt, false, true, costFlag) + p.PlanCost += p.GetCost(statsCnt, false, true, costFlag) default: return 0, errors.Errorf("unknown task type %v", taskType) } - p.planCostInit = true - return p.planCost, nil + p.PlanCostInit = true + return p.PlanCost, nil } // GetCost computes the cost of in memory sort. @@ -1059,17 +1041,17 @@ func (p *PhysicalSort) GetCost(count float64, schema *expression.Schema) float64 // GetPlanCostVer1 calculates the cost of the plan if it has not been calculated yet and returns the cost. func (p *PhysicalSort) GetPlanCostVer1(taskType property.TaskType, option *optimizetrace.PlanCostOption) (float64, error) { costFlag := option.CostFlag - if p.planCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { - return p.planCost, nil + if p.PlanCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { + return p.PlanCost, nil } - childCost, err := p.children[0].GetPlanCostVer1(taskType, option) + childCost, err := p.Children()[0].GetPlanCostVer1(taskType, option) if err != nil { return 0, err } - p.planCost = childCost - p.planCost += p.GetCost(getCardinality(p.children[0], costFlag), p.Schema()) - p.planCostInit = true - return p.planCost, nil + p.PlanCost = childCost + p.PlanCost += p.GetCost(getCardinality(p.Children()[0], costFlag), p.Schema()) + p.PlanCostInit = true + return p.PlanCost, nil } // GetCost computes cost of TopN operator itself. @@ -1098,17 +1080,17 @@ func (p *PhysicalTopN) GetCost(count float64, isRoot bool) float64 { // GetPlanCostVer1 calculates the cost of the plan if it has not been calculated yet and returns the cost. func (p *PhysicalTopN) GetPlanCostVer1(taskType property.TaskType, option *optimizetrace.PlanCostOption) (float64, error) { costFlag := option.CostFlag - if p.planCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { - return p.planCost, nil + if p.PlanCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { + return p.PlanCost, nil } - childCost, err := p.children[0].GetPlanCostVer1(taskType, option) + childCost, err := p.Children()[0].GetPlanCostVer1(taskType, option) if err != nil { return 0, err } - p.planCost = childCost - p.planCost += p.GetCost(getCardinality(p.children[0], costFlag), taskType == property.RootTaskType) - p.planCostInit = true - return p.planCost, nil + p.PlanCost = childCost + p.PlanCost += p.GetCost(getCardinality(p.Children()[0], costFlag), taskType == property.RootTaskType) + p.PlanCostInit = true + return p.PlanCost, nil } // GetCost returns cost of the PointGetPlan. @@ -1213,37 +1195,37 @@ func (p *PointGetPlan) GetAvgRowSize() float64 { // GetPlanCostVer1 calculates the cost of the plan if it has not been calculated yet and returns the cost. func (p *PhysicalUnionAll) GetPlanCostVer1(taskType property.TaskType, option *optimizetrace.PlanCostOption) (float64, error) { costFlag := option.CostFlag - if p.planCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { - return p.planCost, nil + if p.PlanCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { + return p.PlanCost, nil } var childMaxCost float64 - for _, child := range p.children { + for _, child := range p.Children() { childCost, err := child.GetPlanCostVer1(taskType, option) if err != nil { return 0, err } childMaxCost = math.Max(childMaxCost, childCost) } - p.planCost = childMaxCost + float64(1+len(p.children))*p.SCtx().GetSessionVars().GetConcurrencyFactor() - p.planCostInit = true - return p.planCost, nil + p.PlanCost = childMaxCost + float64(1+len(p.Children()))*p.SCtx().GetSessionVars().GetConcurrencyFactor() + p.PlanCostInit = true + return p.PlanCost, nil } // GetPlanCostVer1 calculates the cost of the plan if it has not been calculated yet and returns the cost. func (p *PhysicalExchangeReceiver) GetPlanCostVer1(taskType property.TaskType, option *optimizetrace.PlanCostOption) (float64, error) { costFlag := option.CostFlag - if p.planCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { - return p.planCost, nil + if p.PlanCostInit && !hasCostFlag(costFlag, costusage.CostFlagRecalculate) { + return p.PlanCost, nil } - childCost, err := p.children[0].GetPlanCostVer1(taskType, option) + childCost, err := p.Children()[0].GetPlanCostVer1(taskType, option) if err != nil { return 0, err } - p.planCost = childCost + p.PlanCost = childCost // accumulate net cost - p.planCost += getCardinality(p.children[0], costFlag) * p.SCtx().GetSessionVars().GetNetworkFactor(nil) - p.planCostInit = true - return p.planCost, nil + p.PlanCost += getCardinality(p.Children()[0], costFlag) * p.SCtx().GetSessionVars().GetNetworkFactor(nil) + p.PlanCostInit = true + return p.PlanCost, nil } func getOperatorActRows(operator base.PhysicalPlan) float64 { diff --git a/pkg/planner/core/plan_cost_ver1_test.go b/pkg/planner/core/plan_cost_ver1_test.go index b2b4bbcb58b83..2555cbd92e511 100644 --- a/pkg/planner/core/plan_cost_ver1_test.go +++ b/pkg/planner/core/plan_cost_ver1_test.go @@ -15,6 +15,7 @@ package core_test import ( + "context" "strconv" "strings" "testing" @@ -109,7 +110,9 @@ func TestScanOnSmallTable(t *testing.T) { is := dom.InfoSchema() db, exists := is.SchemaByName(model.NewCIStr("test")) require.True(t, exists) - for _, tblInfo := range db.Tables { + tblInfos, err := is.SchemaTableInfos(context.Background(), db.Name) + require.NoError(t, err) + for _, tblInfo := range tblInfos { if tblInfo.Name.L == "t" { tblInfo.TiFlashReplica = &model.TiFlashReplicaInfo{ Count: 1, @@ -118,7 +121,9 @@ func TestScanOnSmallTable(t *testing.T) { } } - rs := tk.MustQuery("explain select * from t").Rows() + result := tk.MustQuery("explain select * from t") + resStr := result.String() + rs := result.Rows() useTiKVScan := false for _, r := range rs { op := r[0].(string) @@ -127,5 +132,5 @@ func TestScanOnSmallTable(t *testing.T) { useTiKVScan = true } } - require.True(t, useTiKVScan) + require.True(t, useTiKVScan, "should use tikv scan, but got:\n%s", resStr) } diff --git a/pkg/planner/core/plan_cost_ver2.go b/pkg/planner/core/plan_cost_ver2.go index dbaa4cbee358e..89a307c4eba58 100644 --- a/pkg/planner/core/plan_cost_ver2.go +++ b/pkg/planner/core/plan_cost_ver2.go @@ -52,59 +52,37 @@ func getPlanCost(p base.PhysicalPlan, taskType property.TaskType, option *optimi return p.GetPlanCostVer1(taskType, option) } -// GetPlanCostVer2 calculates the cost of the plan if it has not been calculated yet and returns the cost. -func (p *basePhysicalPlan) GetPlanCostVer2(taskType property.TaskType, option *optimizetrace.PlanCostOption) (costusage.CostVer2, error) { - if p.planCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { - return p.planCostVer2, nil - } - childCosts := make([]costusage.CostVer2, 0, len(p.children)) - for _, child := range p.children { - childCost, err := child.GetPlanCostVer2(taskType, option) - if err != nil { - return costusage.ZeroCostVer2, err - } - childCosts = append(childCosts, childCost) - } - if len(childCosts) == 0 { - p.planCostVer2 = costusage.NewZeroCostVer2(costusage.TraceCost(option)) - } else { - p.planCostVer2 = costusage.SumCostVer2(childCosts...) - } - p.planCostInit = true - return p.planCostVer2, nil -} - // GetPlanCostVer2 returns the plan-cost of this sub-plan, which is: // plan-cost = child-cost + filter-cost func (p *PhysicalSelection) GetPlanCostVer2(taskType property.TaskType, option *optimizetrace.PlanCostOption) (costusage.CostVer2, error) { - if p.planCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { - return p.planCostVer2, nil + if p.PlanCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { + return p.PlanCostVer2, nil } - inputRows := getCardinality(p.children[0], option.CostFlag) + inputRows := getCardinality(p.Children()[0], option.CostFlag) cpuFactor := getTaskCPUFactorVer2(p, taskType) filterCost := filterCostVer2(option, inputRows, p.Conditions, cpuFactor) - childCost, err := p.children[0].GetPlanCostVer2(taskType, option) + childCost, err := p.Children()[0].GetPlanCostVer2(taskType, option) if err != nil { return costusage.ZeroCostVer2, err } - p.planCostVer2 = costusage.SumCostVer2(filterCost, childCost) - p.planCostInit = true - return p.planCostVer2, nil + p.PlanCostVer2 = costusage.SumCostVer2(filterCost, childCost) + p.PlanCostInit = true + return p.PlanCostVer2, nil } // GetPlanCostVer2 returns the plan-cost of this sub-plan, which is: // plan-cost = child-cost + proj-cost / concurrency // proj-cost = input-rows * len(expressions) * cpu-factor func (p *PhysicalProjection) GetPlanCostVer2(taskType property.TaskType, option *optimizetrace.PlanCostOption) (costusage.CostVer2, error) { - if p.planCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { - return p.planCostVer2, nil + if p.PlanCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { + return p.PlanCostVer2, nil } - inputRows := getCardinality(p.children[0], option.CostFlag) + inputRows := getCardinality(p.Children()[0], option.CostFlag) cpuFactor := getTaskCPUFactorVer2(p, taskType) concurrency := float64(p.SCtx().GetSessionVars().ProjectionConcurrency()) if concurrency == 0 { @@ -113,39 +91,39 @@ func (p *PhysicalProjection) GetPlanCostVer2(taskType property.TaskType, option projCost := filterCostVer2(option, inputRows, p.Exprs, cpuFactor) - childCost, err := p.children[0].GetPlanCostVer2(taskType, option) + childCost, err := p.Children()[0].GetPlanCostVer2(taskType, option) if err != nil { return costusage.ZeroCostVer2, err } - p.planCostVer2 = costusage.SumCostVer2(childCost, costusage.DivCostVer2(projCost, concurrency)) - p.planCostInit = true - return p.planCostVer2, nil + p.PlanCostVer2 = costusage.SumCostVer2(childCost, costusage.DivCostVer2(projCost, concurrency)) + p.PlanCostInit = true + return p.PlanCostVer2, nil } // GetPlanCostVer2 returns the plan-cost of this sub-plan, which is: // plan-cost = rows * log2(row-size) * scan-factor // log2(row-size) is from experiments. func (p *PhysicalIndexScan) GetPlanCostVer2(taskType property.TaskType, option *optimizetrace.PlanCostOption) (costusage.CostVer2, error) { - if p.planCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { - return p.planCostVer2, nil + if p.PlanCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { + return p.PlanCostVer2, nil } rows := getCardinality(p, option.CostFlag) rowSize := math.Max(getAvgRowSize(p.StatsInfo(), p.schema.Columns), 2.0) // consider all index columns scanFactor := getTaskScanFactorVer2(p, kv.TiKV, taskType) - p.planCostVer2 = scanCostVer2(option, rows, rowSize, scanFactor) - p.planCostInit = true - return p.planCostVer2, nil + p.PlanCostVer2 = scanCostVer2(option, rows, rowSize, scanFactor) + p.PlanCostInit = true + return p.PlanCostVer2, nil } // GetPlanCostVer2 returns the plan-cost of this sub-plan, which is: // plan-cost = rows * log2(row-size) * scan-factor // log2(row-size) is from experiments. func (p *PhysicalTableScan) GetPlanCostVer2(taskType property.TaskType, option *optimizetrace.PlanCostOption) (costusage.CostVer2, error) { - if p.planCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { - return p.planCostVer2, nil + if p.PlanCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { + return p.PlanCostVer2, nil } rows := getCardinality(p, option.CostFlag) @@ -158,23 +136,23 @@ func (p *PhysicalTableScan) GetPlanCostVer2(taskType property.TaskType, option * rowSize = math.Max(rowSize, 2.0) scanFactor := getTaskScanFactorVer2(p, p.StoreType, taskType) - p.planCostVer2 = scanCostVer2(option, rows, rowSize, scanFactor) + p.PlanCostVer2 = scanCostVer2(option, rows, rowSize, scanFactor) // give TiFlash a start-up cost to let the optimizer prefers to use TiKV to process small table scans. if p.StoreType == kv.TiFlash { - p.planCostVer2 = costusage.SumCostVer2(p.planCostVer2, scanCostVer2(option, 10000, rowSize, scanFactor)) + p.PlanCostVer2 = costusage.SumCostVer2(p.PlanCostVer2, scanCostVer2(option, 10000, rowSize, scanFactor)) } - p.planCostInit = true - return p.planCostVer2, nil + p.PlanCostInit = true + return p.PlanCostVer2, nil } // GetPlanCostVer2 returns the plan-cost of this sub-plan, which is: // plan-cost = (child-cost + net-cost) / concurrency // net-cost = rows * row-size * net-factor func (p *PhysicalIndexReader) GetPlanCostVer2(taskType property.TaskType, option *optimizetrace.PlanCostOption) (costusage.CostVer2, error) { - if p.planCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { - return p.planCostVer2, nil + if p.PlanCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { + return p.PlanCostVer2, nil } rows := getCardinality(p.indexPlan, option.CostFlag) @@ -189,17 +167,17 @@ func (p *PhysicalIndexReader) GetPlanCostVer2(taskType property.TaskType, option return costusage.ZeroCostVer2, err } - p.planCostVer2 = costusage.DivCostVer2(costusage.SumCostVer2(childCost, netCost), concurrency) - p.planCostInit = true - return p.planCostVer2, nil + p.PlanCostVer2 = costusage.DivCostVer2(costusage.SumCostVer2(childCost, netCost), concurrency) + p.PlanCostInit = true + return p.PlanCostVer2, nil } // GetPlanCostVer2 returns the plan-cost of this sub-plan, which is: // plan-cost = (child-cost + net-cost) / concurrency // net-cost = rows * row-size * net-factor func (p *PhysicalTableReader) GetPlanCostVer2(taskType property.TaskType, option *optimizetrace.PlanCostOption) (costusage.CostVer2, error) { - if p.planCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { - return p.planCostVer2, nil + if p.PlanCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { + return p.PlanCostVer2, nil } rows := getCardinality(p.tablePlan, option.CostFlag) @@ -218,15 +196,15 @@ func (p *PhysicalTableReader) GetPlanCostVer2(taskType property.TaskType, option return costusage.ZeroCostVer2, err } - p.planCostVer2 = costusage.DivCostVer2(costusage.SumCostVer2(childCost, netCost), concurrency) - p.planCostInit = true + p.PlanCostVer2 = costusage.DivCostVer2(costusage.SumCostVer2(childCost, netCost), concurrency) + p.PlanCostInit = true // consider tidb_enforce_mpp if p.StoreType == kv.TiFlash && p.SCtx().GetSessionVars().IsMPPEnforced() && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { // show the real cost in explain-statements - p.planCostVer2 = costusage.DivCostVer2(p.planCostVer2, 1000000000) + p.PlanCostVer2 = costusage.DivCostVer2(p.PlanCostVer2, 1000000000) } - return p.planCostVer2, nil + return p.PlanCostVer2, nil } // GetPlanCostVer2 returns the plan-cost of this sub-plan, which is: @@ -238,8 +216,8 @@ func (p *PhysicalTableReader) GetPlanCostVer2(taskType property.TaskType, option // double-read-cpu-cost = index-rows * cpu-factor // double-read-tasks = index-rows / batch-size * task-per-batch # task-per-batch is a magic number now func (p *PhysicalIndexLookUpReader) GetPlanCostVer2(taskType property.TaskType, option *optimizetrace.PlanCostOption) (costusage.CostVer2, error) { - if p.planCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { - return p.planCostVer2, nil + if p.PlanCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { + return p.PlanCostVer2, nil } indexRows := getCardinality(p.indexPlan, option.CostFlag) @@ -278,16 +256,16 @@ func (p *PhysicalIndexLookUpReader) GetPlanCostVer2(taskType property.TaskType, doubleReadRequestCost := doubleReadCostVer2(option, doubleReadTasks, requestFactor) doubleReadCost := costusage.SumCostVer2(doubleReadCPUCost, doubleReadRequestCost) - p.planCostVer2 = costusage.SumCostVer2(indexSideCost, costusage.DivCostVer2(costusage.SumCostVer2(tableSideCost, doubleReadCost), doubleReadConcurrency)) + p.PlanCostVer2 = costusage.SumCostVer2(indexSideCost, costusage.DivCostVer2(costusage.SumCostVer2(tableSideCost, doubleReadCost), doubleReadConcurrency)) if p.SCtx().GetSessionVars().EnablePaging && p.expectedCnt > 0 && p.expectedCnt <= paging.Threshold { // if the expectCnt is below the paging threshold, using paging API p.Paging = true // TODO: move this operation from cost model to physical optimization - p.planCostVer2 = costusage.MulCostVer2(p.planCostVer2, 0.6) + p.PlanCostVer2 = costusage.MulCostVer2(p.PlanCostVer2, 0.6) } - p.planCostInit = true - return p.planCostVer2, nil + p.PlanCostInit = true + return p.PlanCostVer2, nil } // GetPlanCostVer2 returns the plan-cost of this sub-plan, which is: @@ -295,8 +273,8 @@ func (p *PhysicalIndexLookUpReader) GetPlanCostVer2(taskType property.TaskType, // index-side-cost = (index-child-cost + index-net-cost) / dist-concurrency # same with IndexReader // table-side-cost = (table-child-cost + table-net-cost) / dist-concurrency # same with TableReader func (p *PhysicalIndexMergeReader) GetPlanCostVer2(taskType property.TaskType, option *optimizetrace.PlanCostOption) (costusage.CostVer2, error) { - if p.planCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { - return p.planCostVer2, nil + if p.PlanCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { + return p.PlanCostVer2, nil } netFactor := getTaskNetFactorVer2(p, taskType) @@ -330,7 +308,7 @@ func (p *PhysicalIndexMergeReader) GetPlanCostVer2(taskType property.TaskType, o } sumIndexSideCost := costusage.SumCostVer2(indexSideCost...) - p.planCostVer2 = costusage.SumCostVer2(tableSideCost, sumIndexSideCost) + p.PlanCostVer2 = costusage.SumCostVer2(tableSideCost, sumIndexSideCost) // give a bias to pushDown limit, since it will get the same cost with NON_PUSH_DOWN_LIMIT case via expect count. // push down limit case may reduce cop request consumption if any in some cases. // @@ -343,10 +321,10 @@ func (p *PhysicalIndexMergeReader) GetPlanCostVer2(taskType property.TaskType, o // will have the same cost, actually if limit are more close to the fetch side, the fewer rows that table plan need to read. // todo: refine the cost computation out from cost model. if p.PushedLimit != nil { - p.planCostVer2 = costusage.MulCostVer2(p.planCostVer2, 0.99) + p.PlanCostVer2 = costusage.MulCostVer2(p.PlanCostVer2, 0.99) } - p.planCostInit = true - return p.planCostVer2, nil + p.PlanCostInit = true + return p.PlanCostVer2, nil } // GetPlanCostVer2 returns the plan-cost of this sub-plan, which is: @@ -359,11 +337,11 @@ func (p *PhysicalIndexMergeReader) GetPlanCostVer2(taskType property.TaskType, o // 1. sort-mem-cost = mem-quota * mem-factor // 2. sort-disk-cost = rows * row-size * disk-factor func (p *PhysicalSort) GetPlanCostVer2(taskType property.TaskType, option *optimizetrace.PlanCostOption) (costusage.CostVer2, error) { - if p.planCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { - return p.planCostVer2, nil + if p.PlanCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { + return p.PlanCostVer2, nil } - rows := math.Max(getCardinality(p.children[0], option.CostFlag), 1) + rows := math.Max(getCardinality(p.Children()[0], option.CostFlag), 1) rowSize := getAvgRowSize(p.StatsInfo(), p.Schema().Columns) cpuFactor := getTaskCPUFactorVer2(p, taskType) memFactor := getTaskMemFactorVer2(p, taskType) @@ -392,14 +370,14 @@ func (p *PhysicalSort) GetPlanCostVer2(taskType property.TaskType, option *optim func() string { return fmt.Sprintf("sortDisk(%v*%v*%v)", rows, rowSize, diskFactor) }) } - childCost, err := p.children[0].GetPlanCostVer2(taskType, option) + childCost, err := p.Children()[0].GetPlanCostVer2(taskType, option) if err != nil { return costusage.ZeroCostVer2, err } - p.planCostVer2 = costusage.SumCostVer2(childCost, sortCPUCost, sortMemCost, sortDiskCost) - p.planCostInit = true - return p.planCostVer2, nil + p.PlanCostVer2 = costusage.SumCostVer2(childCost, sortCPUCost, sortMemCost, sortDiskCost) + p.PlanCostInit = true + return p.PlanCostVer2, nil } // GetPlanCostVer2 returns the plan-cost of this sub-plan, which is: @@ -407,11 +385,11 @@ func (p *PhysicalSort) GetPlanCostVer2(taskType property.TaskType, option *optim // topn-cpu-cost = rows * log2(N) * len(sort-items) * cpu-factor // topn-mem-cost = N * row-size * mem-factor func (p *PhysicalTopN) GetPlanCostVer2(taskType property.TaskType, option *optimizetrace.PlanCostOption) (costusage.CostVer2, error) { - if p.planCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { - return p.planCostVer2, nil + if p.PlanCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { + return p.PlanCostVer2, nil } - rows := getCardinality(p.children[0], option.CostFlag) + rows := getCardinality(p.Children()[0], option.CostFlag) n := max(1, float64(p.Count+p.Offset)) if n > 10000 { // It's only used to prevent some extreme cases, e.g. `select * from t order by a limit 18446744073709551615`. @@ -427,47 +405,47 @@ func (p *PhysicalTopN) GetPlanCostVer2(taskType property.TaskType, option *optim n*rowSize*memFactor.Value, func() string { return fmt.Sprintf("topMem(%v*%v*%v)", n, rowSize, memFactor) }) - childCost, err := p.children[0].GetPlanCostVer2(taskType, option) + childCost, err := p.Children()[0].GetPlanCostVer2(taskType, option) if err != nil { return costusage.ZeroCostVer2, err } - p.planCostVer2 = costusage.SumCostVer2(childCost, topNCPUCost, topNMemCost) - p.planCostInit = true - return p.planCostVer2, nil + p.PlanCostVer2 = costusage.SumCostVer2(childCost, topNCPUCost, topNMemCost) + p.PlanCostInit = true + return p.PlanCostVer2, nil } // GetPlanCostVer2 returns the plan-cost of this sub-plan, which is: // plan-cost = child-cost + agg-cost + group-cost func (p *PhysicalStreamAgg) GetPlanCostVer2(taskType property.TaskType, option *optimizetrace.PlanCostOption) (costusage.CostVer2, error) { - if p.planCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { - return p.planCostVer2, nil + if p.PlanCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { + return p.PlanCostVer2, nil } - rows := getCardinality(p.children[0], option.CostFlag) + rows := getCardinality(p.Children()[0], option.CostFlag) cpuFactor := getTaskCPUFactorVer2(p, taskType) aggCost := aggCostVer2(option, rows, p.AggFuncs, cpuFactor) groupCost := groupCostVer2(option, rows, p.GroupByItems, cpuFactor) - childCost, err := p.children[0].GetPlanCostVer2(taskType, option) + childCost, err := p.Children()[0].GetPlanCostVer2(taskType, option) if err != nil { return costusage.ZeroCostVer2, err } - p.planCostVer2 = costusage.SumCostVer2(childCost, aggCost, groupCost) - p.planCostInit = true - return p.planCostVer2, nil + p.PlanCostVer2 = costusage.SumCostVer2(childCost, aggCost, groupCost) + p.PlanCostInit = true + return p.PlanCostVer2, nil } // GetPlanCostVer2 returns the plan-cost of this sub-plan, which is: // plan-cost = child-cost + (agg-cost + group-cost + hash-build-cost + hash-probe-cost) / concurrency func (p *PhysicalHashAgg) GetPlanCostVer2(taskType property.TaskType, option *optimizetrace.PlanCostOption) (costusage.CostVer2, error) { - if p.planCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { - return p.planCostVer2, nil + if p.PlanCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { + return p.PlanCostVer2, nil } - inputRows := getCardinality(p.children[0], option.CostFlag) + inputRows := getCardinality(p.Children()[0], option.CostFlag) outputRows := getCardinality(p, option.CostFlag) outputRowSize := getAvgRowSize(p.StatsInfo(), p.Schema().Columns) cpuFactor := getTaskCPUFactorVer2(p, taskType) @@ -482,25 +460,25 @@ func (p *PhysicalHashAgg) GetPlanCostVer2(taskType property.TaskType, option *op 10*3*cpuFactor.Value, // 10rows * 3func * cpuFactor func() string { return fmt.Sprintf("cpu(10*3*%v)", cpuFactor) }) - childCost, err := p.children[0].GetPlanCostVer2(taskType, option) + childCost, err := p.Children()[0].GetPlanCostVer2(taskType, option) if err != nil { return costusage.ZeroCostVer2, err } - p.planCostVer2 = costusage.SumCostVer2(startCost, childCost, costusage.DivCostVer2(costusage.SumCostVer2(aggCost, groupCost, hashBuildCost, hashProbeCost), concurrency)) - p.planCostInit = true - return p.planCostVer2, nil + p.PlanCostVer2 = costusage.SumCostVer2(startCost, childCost, costusage.DivCostVer2(costusage.SumCostVer2(aggCost, groupCost, hashBuildCost, hashProbeCost), concurrency)) + p.PlanCostInit = true + return p.PlanCostVer2, nil } // GetPlanCostVer2 returns the plan-cost of this sub-plan, which is: // plan-cost = left-child-cost + right-child-cost + filter-cost + group-cost func (p *PhysicalMergeJoin) GetPlanCostVer2(taskType property.TaskType, option *optimizetrace.PlanCostOption) (costusage.CostVer2, error) { - if p.planCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { - return p.planCostVer2, nil + if p.PlanCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { + return p.PlanCostVer2, nil } - leftRows := getCardinality(p.children[0], option.CostFlag) - rightRows := getCardinality(p.children[1], option.CostFlag) + leftRows := getCardinality(p.Children()[0], option.CostFlag) + rightRows := getCardinality(p.Children()[1], option.CostFlag) cpuFactor := getTaskCPUFactorVer2(p, taskType) filterCost := costusage.SumCostVer2(filterCostVer2(option, leftRows, p.LeftConditions, cpuFactor), @@ -508,18 +486,18 @@ func (p *PhysicalMergeJoin) GetPlanCostVer2(taskType property.TaskType, option * groupCost := costusage.SumCostVer2(groupCostVer2(option, leftRows, cols2Exprs(p.LeftJoinKeys), cpuFactor), groupCostVer2(option, rightRows, cols2Exprs(p.LeftJoinKeys), cpuFactor)) - leftChildCost, err := p.children[0].GetPlanCostVer2(taskType, option) + leftChildCost, err := p.Children()[0].GetPlanCostVer2(taskType, option) if err != nil { return costusage.ZeroCostVer2, err } - rightChildCost, err := p.children[1].GetPlanCostVer2(taskType, option) + rightChildCost, err := p.Children()[1].GetPlanCostVer2(taskType, option) if err != nil { return costusage.ZeroCostVer2, err } - p.planCostVer2 = costusage.SumCostVer2(leftChildCost, rightChildCost, filterCost, groupCost) - p.planCostInit = true - return p.planCostVer2, nil + p.PlanCostVer2 = costusage.SumCostVer2(leftChildCost, rightChildCost, filterCost, groupCost) + p.PlanCostInit = true + return p.PlanCostVer2, nil } // GetPlanCostVer2 returns the plan-cost of this sub-plan, which is: @@ -527,11 +505,11 @@ func (p *PhysicalMergeJoin) GetPlanCostVer2(taskType property.TaskType, option * // build-hash-cost + build-filter-cost + // (probe-filter-cost + probe-hash-cost) / concurrency func (p *PhysicalHashJoin) GetPlanCostVer2(taskType property.TaskType, option *optimizetrace.PlanCostOption) (costusage.CostVer2, error) { - if p.planCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { - return p.planCostVer2, nil + if p.PlanCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { + return p.PlanCostVer2, nil } - build, probe := p.children[0], p.children[1] + build, probe := p.Children()[0], p.Children()[1] buildFilters, probeFilters := p.LeftConditions, p.RightConditions buildKeys, probeKeys := p.LeftJoinKeys, p.RightJoinKeys if (p.InnerChildIdx == 1 && !p.UseOuterToBuild) || (p.InnerChildIdx == 0 && p.UseOuterToBuild) { @@ -562,25 +540,25 @@ func (p *PhysicalHashJoin) GetPlanCostVer2(taskType property.TaskType, option *o } if taskType == property.MppTaskType { // BCast or Shuffle Join, use mppConcurrency - p.planCostVer2 = costusage.SumCostVer2(buildChildCost, probeChildCost, + p.PlanCostVer2 = costusage.SumCostVer2(buildChildCost, probeChildCost, costusage.DivCostVer2(costusage.SumCostVer2(buildHashCost, buildFilterCost, probeHashCost, probeFilterCost), mppConcurrency)) } else { // TiDB HashJoin startCost := costusage.NewCostVer2(option, cpuFactor, 10*3*cpuFactor.Value, // 10rows * 3func * cpuFactor func() string { return fmt.Sprintf("cpu(10*3*%v)", cpuFactor) }) - p.planCostVer2 = costusage.SumCostVer2(startCost, buildChildCost, probeChildCost, buildHashCost, buildFilterCost, + p.PlanCostVer2 = costusage.SumCostVer2(startCost, buildChildCost, probeChildCost, buildHashCost, buildFilterCost, costusage.DivCostVer2(costusage.SumCostVer2(probeFilterCost, probeHashCost), tidbConcurrency)) } - p.planCostInit = true - return p.planCostVer2, nil + p.PlanCostInit = true + return p.PlanCostVer2, nil } func (p *PhysicalIndexJoin) getIndexJoinCostVer2(taskType property.TaskType, option *optimizetrace.PlanCostOption, indexJoinType int) (costusage.CostVer2, error) { - if p.planCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { - return p.planCostVer2, nil + if p.PlanCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { + return p.PlanCostVer2, nil } - build, probe := p.children[1-p.InnerChildIdx], p.children[p.InnerChildIdx] + build, probe := p.Children()[1-p.InnerChildIdx], p.Children()[p.InnerChildIdx] buildRows := getCardinality(build, option.CostFlag) buildRowSize := getAvgRowSize(build.StatsInfo(), build.Schema().Columns) probeRowsOne := getCardinality(probe, option.CostFlag) @@ -637,9 +615,9 @@ func (p *PhysicalIndexJoin) getIndexJoinCostVer2(taskType property.TaskType, opt doubleReadCost = costusage.MulCostVer2(doubleReadCost, p.SCtx().GetSessionVars().IndexJoinDoubleReadPenaltyCostRate) } - p.planCostVer2 = costusage.SumCostVer2(startCost, buildChildCost, buildFilterCost, buildTaskCost, costusage.DivCostVer2(costusage.SumCostVer2(doubleReadCost, probeCost, probeFilterCost, hashTableCost), probeConcurrency)) - p.planCostInit = true - return p.planCostVer2, nil + p.PlanCostVer2 = costusage.SumCostVer2(startCost, buildChildCost, buildFilterCost, buildTaskCost, costusage.DivCostVer2(costusage.SumCostVer2(doubleReadCost, probeCost, probeFilterCost, hashTableCost), probeConcurrency)) + p.PlanCostInit = true + return p.PlanCostVer2, nil } // GetPlanCostVer2 returns the plan-cost of this sub-plan, which is: @@ -664,66 +642,66 @@ func (p *PhysicalIndexMergeJoin) GetPlanCostVer2(taskType property.TaskType, opt // plan-cost = build-child-cost + build-filter-cost + probe-cost + probe-filter-cost // probe-cost = probe-child-cost * build-rows func (p *PhysicalApply) GetPlanCostVer2(taskType property.TaskType, option *optimizetrace.PlanCostOption) (costusage.CostVer2, error) { - if p.planCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { - return p.planCostVer2, nil + if p.PlanCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { + return p.PlanCostVer2, nil } - buildRows := getCardinality(p.children[0], option.CostFlag) - probeRowsOne := getCardinality(p.children[1], option.CostFlag) + buildRows := getCardinality(p.Children()[0], option.CostFlag) + probeRowsOne := getCardinality(p.Children()[1], option.CostFlag) probeRowsTot := buildRows * probeRowsOne cpuFactor := getTaskCPUFactorVer2(p, taskType) buildFilterCost := filterCostVer2(option, buildRows, p.LeftConditions, cpuFactor) - buildChildCost, err := p.children[0].GetPlanCostVer2(taskType, option) + buildChildCost, err := p.Children()[0].GetPlanCostVer2(taskType, option) if err != nil { return costusage.ZeroCostVer2, err } probeFilterCost := filterCostVer2(option, probeRowsTot, p.RightConditions, cpuFactor) - probeChildCost, err := p.children[1].GetPlanCostVer2(taskType, option) + probeChildCost, err := p.Children()[1].GetPlanCostVer2(taskType, option) if err != nil { return costusage.ZeroCostVer2, err } probeCost := costusage.MulCostVer2(probeChildCost, buildRows) - p.planCostVer2 = costusage.SumCostVer2(buildChildCost, buildFilterCost, probeCost, probeFilterCost) - p.planCostInit = true - return p.planCostVer2, nil + p.PlanCostVer2 = costusage.SumCostVer2(buildChildCost, buildFilterCost, probeCost, probeFilterCost) + p.PlanCostInit = true + return p.PlanCostVer2, nil } // GetPlanCostVer2 calculates the cost of the plan if it has not been calculated yet and returns the cost. // plan-cost = sum(child-cost) / concurrency func (p *PhysicalUnionAll) GetPlanCostVer2(taskType property.TaskType, option *optimizetrace.PlanCostOption) (costusage.CostVer2, error) { - if p.planCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { - return p.planCostVer2, nil + if p.PlanCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { + return p.PlanCostVer2, nil } concurrency := float64(p.SCtx().GetSessionVars().UnionConcurrency()) - childCosts := make([]costusage.CostVer2, 0, len(p.children)) - for _, child := range p.children { + childCosts := make([]costusage.CostVer2, 0, len(p.Children())) + for _, child := range p.Children() { childCost, err := child.GetPlanCostVer2(taskType, option) if err != nil { return costusage.ZeroCostVer2, err } childCosts = append(childCosts, childCost) } - p.planCostVer2 = costusage.DivCostVer2(costusage.SumCostVer2(childCosts...), concurrency) - p.planCostInit = true - return p.planCostVer2, nil + p.PlanCostVer2 = costusage.DivCostVer2(costusage.SumCostVer2(childCosts...), concurrency) + p.PlanCostInit = true + return p.PlanCostVer2, nil } // GetPlanCostVer2 returns the plan-cost of this sub-plan, which is: // plan-cost = child-cost + net-cost func (p *PhysicalExchangeReceiver) GetPlanCostVer2(taskType property.TaskType, option *optimizetrace.PlanCostOption) (costusage.CostVer2, error) { - if p.planCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { - return p.planCostVer2, nil + if p.PlanCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { + return p.PlanCostVer2, nil } rows := getCardinality(p, option.CostFlag) rowSize := getAvgRowSize(p.StatsInfo(), p.Schema().Columns) netFactor := getTaskNetFactorVer2(p, taskType) isBCast := false - if sender, ok := p.children[0].(*PhysicalExchangeSender); ok { + if sender, ok := p.Children()[0].(*PhysicalExchangeSender); ok { isBCast = sender.ExchangeType == tipb.ExchangeType_Broadcast } numNode := float64(3) // TODO: remove this empirical value @@ -732,14 +710,14 @@ func (p *PhysicalExchangeReceiver) GetPlanCostVer2(taskType property.TaskType, o if isBCast { netCost = costusage.MulCostVer2(netCost, numNode) } - childCost, err := p.children[0].GetPlanCostVer2(taskType, option) + childCost, err := p.Children()[0].GetPlanCostVer2(taskType, option) if err != nil { return costusage.ZeroCostVer2, err } - p.planCostVer2 = costusage.SumCostVer2(childCost, netCost) - p.planCostInit = true - return p.planCostVer2, nil + p.PlanCostVer2 = costusage.SumCostVer2(childCost, netCost) + p.PlanCostInit = true + return p.PlanCostVer2, nil } // GetPlanCostVer2 returns the plan-cost of this sub-plan, which is: @@ -783,8 +761,8 @@ func (p *BatchPointGetPlan) GetPlanCostVer2(taskType property.TaskType, option * // GetPlanCostVer2 implements PhysicalPlan interface. func (p *PhysicalCTE) GetPlanCostVer2(taskType property.TaskType, option *optimizetrace.PlanCostOption) (costusage.CostVer2, error) { - if p.planCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { - return p.planCostVer2, nil + if p.PlanCostInit && !hasCostFlag(option.CostFlag, costusage.CostFlagRecalculate) { + return p.PlanCostVer2, nil } inputRows := getCardinality(p, option.CostFlag) @@ -792,9 +770,9 @@ func (p *PhysicalCTE) GetPlanCostVer2(taskType property.TaskType, option *optimi projCost := filterCostVer2(option, inputRows, expression.Column2Exprs(p.schema.Columns), cpuFactor) - p.planCostVer2 = projCost - p.planCostInit = true - return p.planCostVer2, nil + p.PlanCostVer2 = projCost + p.PlanCostInit = true + return p.PlanCostVer2, nil } func scanCostVer2(option *optimizetrace.PlanCostOption, rows, rowSize float64, scanFactor costusage.CostVer2Factor) costusage.CostVer2 { diff --git a/pkg/planner/core/plan_to_pb.go b/pkg/planner/core/plan_to_pb.go index 970f13058e003..03ef91daac7f3 100644 --- a/pkg/planner/core/plan_to_pb.go +++ b/pkg/planner/core/plan_to_pb.go @@ -15,23 +15,23 @@ package core import ( + "fmt" + "github.com/pingcap/errors" "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/expression/aggregation" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" + util2 "github.com/pingcap/tidb/pkg/planner/util" + "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/table/tables" "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/ranger" "github.com/pingcap/tipb/go-tipb" ) -// ToPB implements PhysicalPlan ToPB interface. -func (p *basePhysicalPlan) ToPB(_ *base.BuildPBContext, _ kv.StoreType) (*tipb.Executor, error) { - return nil, errors.Errorf("plan %s fails converts to PB", p.Plan.ExplainID()) -} - // ToPB implements PhysicalPlan ToPB interface. func (p *PhysicalExpand) ToPB(ctx *base.BuildPBContext, storeType kv.StoreType) (*tipb.Executor, error) { if len(p.LevelExprs) > 0 { @@ -48,7 +48,7 @@ func (p *PhysicalExpand) ToPB(ctx *base.BuildPBContext, storeType kv.StoreType) executorID := "" if storeType == kv.TiFlash { var err error - expand.Child, err = p.children[0].ToPB(ctx, storeType) + expand.Child, err = p.Children()[0].ToPB(ctx, storeType) if err != nil { return nil, errors.Trace(err) } @@ -75,7 +75,7 @@ func (p *PhysicalExpand) toPBV2(ctx *base.BuildPBContext, storeType kv.StoreType executorID := "" if storeType == kv.TiFlash { var err error - expand2.Child, err = p.children[0].ToPB(ctx, storeType) + expand2.Child, err = p.Children()[0].ToPB(ctx, storeType) if err != nil { return nil, errors.Trace(err) } @@ -94,7 +94,7 @@ func (p *PhysicalHashAgg) ToPB(ctx *base.BuildPBContext, storeType kv.StoreType) aggExec := &tipb.Aggregation{ GroupBy: groupByExprs, } - pushDownCtx := GetPushDownCtx(p.SCtx()) + pushDownCtx := util2.GetPushDownCtx(p.SCtx()) for _, aggFunc := range p.AggFuncs { agg, err := aggregation.AggFuncToPBExpr(pushDownCtx, aggFunc, storeType) if err != nil { @@ -105,11 +105,23 @@ func (p *PhysicalHashAgg) ToPB(ctx *base.BuildPBContext, storeType kv.StoreType) executorID := "" if storeType == kv.TiFlash { var err error - aggExec.Child, err = p.children[0].ToPB(ctx, storeType) + aggExec.Child, err = p.Children()[0].ToPB(ctx, storeType) if err != nil { return nil, errors.Trace(err) } executorID = p.ExplainID().String() + // If p.tiflashPreAggMode is empty, means no need to consider preagg mode. + // For example it's the the second stage of hashagg. + if len(p.tiflashPreAggMode) != 0 { + if preAggModeVal, ok := variable.ToTiPBTiFlashPreAggMode(p.tiflashPreAggMode); !ok { + err = fmt.Errorf("unexpected tiflash pre agg mode: %v", p.tiflashPreAggMode) + } else { + aggExec.PreAggMode = &preAggModeVal + } + if err != nil { + return nil, err + } + } } return &tipb.Executor{ Tp: tipb.ExecType_TypeAggregation, @@ -124,7 +136,7 @@ func (p *PhysicalHashAgg) ToPB(ctx *base.BuildPBContext, storeType kv.StoreType) func (p *PhysicalStreamAgg) ToPB(ctx *base.BuildPBContext, storeType kv.StoreType) (*tipb.Executor, error) { client := ctx.GetClient() evalCtx := ctx.GetExprCtx().GetEvalCtx() - pushDownCtx := GetPushDownCtxFromBuildPBContext(ctx) + pushDownCtx := util2.GetPushDownCtxFromBuildPBContext(ctx) groupByExprs, err := expression.ExpressionsToPBList(evalCtx, p.GroupByItems, client) if err != nil { return nil, err @@ -142,7 +154,7 @@ func (p *PhysicalStreamAgg) ToPB(ctx *base.BuildPBContext, storeType kv.StoreTyp executorID := "" if storeType == kv.TiFlash { var err error - aggExec.Child, err = p.children[0].ToPB(ctx, storeType) + aggExec.Child, err = p.Children()[0].ToPB(ctx, storeType) if err != nil { return nil, errors.Trace(err) } @@ -164,7 +176,7 @@ func (p *PhysicalSelection) ToPB(ctx *base.BuildPBContext, storeType kv.StoreTyp executorID := "" if storeType == kv.TiFlash { var err error - selExec.Child, err = p.children[0].ToPB(ctx, storeType) + selExec.Child, err = p.Children()[0].ToPB(ctx, storeType) if err != nil { return nil, errors.Trace(err) } @@ -187,7 +199,7 @@ func (p *PhysicalProjection) ToPB(ctx *base.BuildPBContext, storeType kv.StoreTy if !(storeType == kv.TiFlash || storeType == kv.TiKV) { return nil, errors.Errorf("the projection can only be pushed down to TiFlash or TiKV now, not %s", storeType.Name()) } - projExec.Child, err = p.children[0].ToPB(ctx, storeType) + projExec.Child, err = p.Children()[0].ToPB(ctx, storeType) if err != nil { return nil, errors.Trace(err) } @@ -211,7 +223,7 @@ func (p *PhysicalTopN) ToPB(ctx *base.BuildPBContext, storeType kv.StoreType) (* executorID := "" if storeType == kv.TiFlash { var err error - topNExec.Child, err = p.children[0].ToPB(ctx, storeType) + topNExec.Child, err = p.Children()[0].ToPB(ctx, storeType) if err != nil { return nil, errors.Trace(err) } @@ -232,7 +244,7 @@ func (p *PhysicalLimit) ToPB(ctx *base.BuildPBContext, storeType kv.StoreType) ( } if storeType == kv.TiFlash { var err error - limitExec.Child, err = p.children[0].ToPB(ctx, storeType) + limitExec.Child, err = p.Children()[0].ToPB(ctx, storeType) if err != nil { return nil, errors.Trace(err) } @@ -246,7 +258,7 @@ func (p *PhysicalTableScan) ToPB(ctx *base.BuildPBContext, storeType kv.StoreTyp if storeType == kv.TiFlash && p.Table.GetPartitionInfo() != nil && p.IsMPPOrBatchCop && p.SCtx().GetSessionVars().StmtCtx.UseDynamicPartitionPrune() { return p.partitionTableScanToPBForFlash(ctx) } - tsExec := tables.BuildTableScanFromInfos(p.Table, p.Columns) + tsExec := tables.BuildTableScanFromInfos(p.Table, p.Columns, p.StoreType == kv.TiFlash) tsExec.Desc = p.Desc keepOrder := p.KeepOrder tsExec.KeepOrder = &keepOrder @@ -476,7 +488,7 @@ func (p *PhysicalIndexScan) ToPB(_ *base.BuildPBContext, _ kv.StoreType) (*tipb. idxExec := &tipb.IndexScan{ TableId: p.Table.ID, IndexId: p.Index.ID, - Columns: util.ColumnsToProto(columns, p.Table.PKIsHandle, true), + Columns: util.ColumnsToProto(columns, p.Table.PKIsHandle, true, false), Desc: p.Desc, PrimaryColumnIds: pkColIDs, } @@ -515,11 +527,11 @@ func (p *PhysicalHashJoin) ToPB(ctx *base.BuildPBContext, storeType kv.StoreType rightKeys = append(rightKeys, rightKey) } - lChildren, err := p.children[0].ToPB(ctx, storeType) + lChildren, err := p.Children()[0].ToPB(ctx, storeType) if err != nil { return nil, errors.Trace(err) } - rChildren, err := p.children[1].ToPB(ctx, storeType) + rChildren, err := p.Children()[1].ToPB(ctx, storeType) if err != nil { return nil, errors.Trace(err) } @@ -547,7 +559,7 @@ func (p *PhysicalHashJoin) ToPB(ctx *base.BuildPBContext, storeType kv.StoreType var otherEqConditionsFromIn expression.CNFExprs /// For anti join, equal conditions from `in` clause requires additional processing, /// for example, treat `null` as true. - if p.JoinType == AntiSemiJoin || p.JoinType == AntiLeftOuterSemiJoin || p.JoinType == LeftOuterSemiJoin { + if p.JoinType == logicalop.AntiSemiJoin || p.JoinType == logicalop.AntiLeftOuterSemiJoin || p.JoinType == logicalop.LeftOuterSemiJoin { for _, condition := range p.OtherConditions { if expression.IsEQCondFromIn(condition) { otherEqConditionsFromIn = append(otherEqConditionsFromIn, condition) @@ -569,17 +581,17 @@ func (p *PhysicalHashJoin) ToPB(ctx *base.BuildPBContext, storeType kv.StoreType pbJoinType := tipb.JoinType_TypeInnerJoin switch p.JoinType { - case LeftOuterJoin: + case logicalop.LeftOuterJoin: pbJoinType = tipb.JoinType_TypeLeftOuterJoin - case RightOuterJoin: + case logicalop.RightOuterJoin: pbJoinType = tipb.JoinType_TypeRightOuterJoin - case SemiJoin: + case logicalop.SemiJoin: pbJoinType = tipb.JoinType_TypeSemiJoin - case AntiSemiJoin: + case logicalop.AntiSemiJoin: pbJoinType = tipb.JoinType_TypeAntiSemiJoin - case LeftOuterSemiJoin: + case logicalop.LeftOuterSemiJoin: pbJoinType = tipb.JoinType_TypeLeftOuterSemiJoin - case AntiLeftOuterSemiJoin: + case logicalop.AntiLeftOuterSemiJoin: pbJoinType = tipb.JoinType_TypeAntiLeftOuterSemiJoin } @@ -636,28 +648,6 @@ func (p *PhysicalHashJoin) ToPB(ctx *base.BuildPBContext, storeType kv.StoreType }, nil } -// ToPB converts FrameBound to tipb structure. -func (fb *FrameBound) ToPB(ctx *base.BuildPBContext) (*tipb.WindowFrameBound, error) { - pbBound := &tipb.WindowFrameBound{ - Type: tipb.WindowBoundType(fb.Type), - Unbounded: fb.UnBounded, - } - offset := fb.Num - pbBound.Offset = &offset - - if fb.IsExplicitRange { - rangeFrame, err := expression.ExpressionsToPBList(ctx.GetExprCtx().GetEvalCtx(), fb.CalcFuncs, ctx.GetClient()) - if err != nil { - return nil, err - } - - pbBound.FrameRange = rangeFrame[0] - pbBound.CmpDataType = &fb.CmpDataType - } - - return pbBound, nil -} - // ToPB implements PhysicalPlan ToPB interface. func (p *PhysicalWindow) ToPB(ctx *base.BuildPBContext, storeType kv.StoreType) (*tipb.Executor, error) { client := ctx.GetClient() @@ -697,7 +687,7 @@ func (p *PhysicalWindow) ToPB(ctx *base.BuildPBContext, storeType kv.StoreType) } var err error - windowExec.Child, err = p.children[0].ToPB(ctx, storeType) + windowExec.Child, err = p.Children()[0].ToPB(ctx, storeType) if err != nil { return nil, errors.Trace(err) } @@ -727,7 +717,7 @@ func (p *PhysicalSort) ToPB(ctx *base.BuildPBContext, storeType kv.StoreType) (* sortExec.IsPartialSort = &isPartialSort var err error - sortExec.Child, err = p.children[0].ToPB(ctx, storeType) + sortExec.Child, err = p.Children()[0].ToPB(ctx, storeType) if err != nil { return nil, errors.Trace(err) } diff --git a/pkg/planner/core/plan_to_pb_test.go b/pkg/planner/core/plan_to_pb_test.go index c6548d6c8049e..9f6219f73ab1b 100644 --- a/pkg/planner/core/plan_to_pb_test.go +++ b/pkg/planner/core/plan_to_pb_test.go @@ -35,16 +35,16 @@ func TestColumnToProto(t *testing.T) { col := &model.ColumnInfo{ FieldType: *tp, } - pc := util.ColumnToProto(col, false) + pc := util.ColumnToProto(col, false, false) expect := &tipb.ColumnInfo{ColumnId: 0, Tp: 3, Collation: 83, ColumnLen: 11, Decimal: 0, Flag: 10, Elems: []string(nil), DefaultVal: []uint8(nil), PkHandle: false, XXX_unrecognized: []uint8(nil)} require.Equal(t, expect, pc) cols := []*model.ColumnInfo{col, col} - pcs := util.ColumnsToProto(cols, false, false) + pcs := util.ColumnsToProto(cols, false, false, false) for _, v := range pcs { require.Equal(t, int32(10), v.GetFlag()) } - pcs = util.ColumnsToProto(cols, true, false) + pcs = util.ColumnsToProto(cols, true, false, false) for _, v := range pcs { require.Equal(t, int32(10), v.GetFlag()) } @@ -56,19 +56,19 @@ func TestColumnToProto(t *testing.T) { col1 := &model.ColumnInfo{ FieldType: *tp, } - pc = util.ColumnToProto(col1, false) + pc = util.ColumnToProto(col1, false, false) require.Equal(t, int32(8), pc.Collation) collate.SetNewCollationEnabledForTest(true) - pc = util.ColumnToProto(col, false) + pc = util.ColumnToProto(col, false, false) expect = &tipb.ColumnInfo{ColumnId: 0, Tp: 3, Collation: -83, ColumnLen: 11, Decimal: 0, Flag: 10, Elems: []string(nil), DefaultVal: []uint8(nil), PkHandle: false, XXX_unrecognized: []uint8(nil)} require.Equal(t, expect, pc) - pcs = util.ColumnsToProto(cols, true, false) + pcs = util.ColumnsToProto(cols, true, false, false) for _, v := range pcs { require.Equal(t, int32(-83), v.Collation) } - pc = util.ColumnToProto(col1, false) + pc = util.ColumnToProto(col1, false, false) require.Equal(t, int32(-8), pc.Collation) tp = types.NewFieldType(mysql.TypeEnum) @@ -77,7 +77,7 @@ func TestColumnToProto(t *testing.T) { col2 := &model.ColumnInfo{ FieldType: *tp, } - pc = util.ColumnToProto(col2, false) + pc = util.ColumnToProto(col2, false, false) require.Len(t, pc.Elems, 2) tp = types.NewFieldTypeBuilder(). @@ -91,7 +91,7 @@ func TestColumnToProto(t *testing.T) { col3 := &model.ColumnInfo{ FieldType: *tp, } - pc = util.ColumnToProto(col3, true) + pc = util.ColumnToProto(col3, true, false) expect = &tipb.ColumnInfo{ColumnId: 0, Tp: 0xfe, Collation: 63, ColumnLen: 100, Decimal: 0, Flag: 10, Elems: []string(nil), DefaultVal: []uint8(nil), PkHandle: false, XXX_unrecognized: []uint8(nil)} require.Equal(t, expect, pc) } diff --git a/pkg/planner/core/planbuilder.go b/pkg/planner/core/planbuilder.go index 40849fd2f992b..304a4f34cd6cf 100644 --- a/pkg/planner/core/planbuilder.go +++ b/pkg/planner/core/planbuilder.go @@ -41,6 +41,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/opcode" "github.com/pingcap/tidb/pkg/parser/terror" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/privilege" @@ -49,6 +50,7 @@ import ( "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/sessiontxn/staleread" "github.com/pingcap/tidb/pkg/statistics" + handleutil "github.com/pingcap/tidb/pkg/statistics/handle/util" "github.com/pingcap/tidb/pkg/table" "github.com/pingcap/tidb/pkg/table/tables" "github.com/pingcap/tidb/pkg/table/temptable" @@ -197,8 +199,8 @@ type PlanBuilder struct { outerNames [][]*types.FieldName outerCTEs []*cteInfo // outerBlockExpand register current Expand OP for rollup syntax in every select query block. - outerBlockExpand []*LogicalExpand - currentBlockExpand *LogicalExpand + outerBlockExpand []*logicalop.LogicalExpand + currentBlockExpand *logicalop.LogicalExpand // colMapper stores the column that must be pre-resolved. colMapper map[*ast.ColumnNameExpr]int // visitInfo is used for privilege check. @@ -370,7 +372,7 @@ func GetDBTableInfo(visitInfo []visitInfo) []stmtctx.TableEntry { return tables } -// GetOptFlag gets the optFlag of the PlanBuilder. +// GetOptFlag gets the OptFlag of the PlanBuilder. func (b *PlanBuilder) GetOptFlag() uint64 { if b.isSampling { // Disable logical optimization to avoid the optimizer @@ -569,7 +571,7 @@ func (b *PlanBuilder) Build(ctx context.Context, node ast.Node) (base.Plan, erro func (b *PlanBuilder) buildSetConfig(ctx context.Context, v *ast.SetConfigStmt) (base.Plan, error) { privErr := plannererrors.ErrSpecificAccessDenied.GenWithStackByArgs("CONFIG") b.visitInfo = appendVisitInfo(b.visitInfo, mysql.ConfigPriv, "", "", "", privErr) - mockTablePlan := LogicalTableDual{}.Init(b.ctx, b.getSelectOffset()) + mockTablePlan := logicalop.LogicalTableDual{}.Init(b.ctx, b.getSelectOffset()) if _, ok := v.Value.(*ast.DefaultExpr); ok { return nil, errors.New("Unknown DEFAULT for SET CONFIG") } @@ -607,10 +609,10 @@ func (b *PlanBuilder) buildExecute(ctx context.Context, v *ast.ExecuteStmt) (bas func (b *PlanBuilder) buildDo(ctx context.Context, v *ast.DoStmt) (base.Plan, error) { var p base.LogicalPlan - dual := LogicalTableDual{RowCount: 1}.Init(b.ctx, b.getSelectOffset()) + dual := logicalop.LogicalTableDual{RowCount: 1}.Init(b.ctx, b.getSelectOffset()) dual.SetSchema(expression.NewSchema()) p = dual - proj := LogicalProjection{Exprs: make([]expression.Expression, 0, len(v.Exprs))}.Init(b.ctx, b.getSelectOffset()) + proj := logicalop.LogicalProjection{Exprs: make([]expression.Expression, 0, len(v.Exprs))}.Init(b.ctx, b.getSelectOffset()) proj.SetOutputNames(make([]*types.FieldName, len(v.Exprs))) schema := expression.NewSchema(make([]*expression.Column, 0, len(v.Exprs))...) @@ -687,7 +689,7 @@ func (b *PlanBuilder) buildSet(ctx context.Context, v *ast.SetStmt) (base.Plan, } // The mocked plan need one output for the complex cases. // See the following IF branch. - mockTablePlan := LogicalTableDual{RowCount: 1}.Init(b.ctx, b.getSelectOffset()) + mockTablePlan := logicalop.LogicalTableDual{RowCount: 1}.Init(b.ctx, b.getSelectOffset()) var err error var possiblePlan base.LogicalPlan assign.Expr, possiblePlan, err = b.rewrite(ctx, vars.Value, mockTablePlan, nil, true) @@ -695,7 +697,7 @@ func (b *PlanBuilder) buildSet(ctx context.Context, v *ast.SetStmt) (base.Plan, return nil, err } // It's possible that the subquery of the SET_VAR is a complex one so we need to get the result by evaluating the plan. - if _, ok := possiblePlan.(*LogicalTableDual); !ok { + if _, ok := possiblePlan.(*logicalop.LogicalTableDual); !ok { physicalPlan, _, err := DoOptimize(ctx, b.ctx, b.optFlag, possiblePlan) if err != nil { return nil, err @@ -729,20 +731,37 @@ func (b *PlanBuilder) buildDropBindPlan(v *ast.DropBindingStmt) (base.Plan, erro if v.OriginNode != nil { normdOrigSQL, sqlDigestWithDB := norm.NormalizeStmtForBinding(v.OriginNode, norm.WithSpecifiedDB(b.ctx.GetSessionVars().CurrentDB)) p = &SQLBindPlan{ - SQLBindOp: OpSQLBindDrop, - NormdOrigSQL: normdOrigSQL, - IsGlobal: v.GlobalScope, - Db: utilparser.GetDefaultDB(v.OriginNode, b.ctx.GetSessionVars().CurrentDB), - SQLDigest: sqlDigestWithDB, + IsGlobal: v.GlobalScope, + SQLBindOp: OpSQLBindDrop, + Details: []*SQLBindOpDetail{{ + NormdOrigSQL: normdOrigSQL, + Db: utilparser.GetDefaultDB(v.OriginNode, b.ctx.GetSessionVars().CurrentDB), + SQLDigest: sqlDigestWithDB, + }}, } if v.HintedNode != nil { - p.BindSQL = utilparser.RestoreWithDefaultDB(v.HintedNode, b.ctx.GetSessionVars().CurrentDB, v.HintedNode.Text()) + p.Details[0].BindSQL = utilparser.RestoreWithDefaultDB( + v.HintedNode, + b.ctx.GetSessionVars().CurrentDB, + v.HintedNode.Text(), + ) } } else { + sqlDigests, err := collectStrOrUserVarList(b.ctx, v.SQLDigests) + if err != nil { + return nil, err + } + if len(sqlDigests) == 0 { + return nil, errors.New("sql digest is empty") + } + details := make([]*SQLBindOpDetail, 0, len(sqlDigests)) + for _, sqlDigest := range sqlDigests { + details = append(details, &SQLBindOpDetail{SQLDigest: sqlDigest}) + } p = &SQLBindPlan{ SQLBindOp: OpSQLBindDropByDigest, IsGlobal: v.GlobalScope, - SQLDigest: v.SQLDigest, + Details: details, } } b.visitInfo = appendVisitInfo(b.visitInfo, mysql.SuperPriv, "", "", "", nil) @@ -753,26 +772,33 @@ func (b *PlanBuilder) buildSetBindingStatusPlan(v *ast.SetBindingStmt) (base.Pla var p *SQLBindPlan if v.OriginNode != nil { p = &SQLBindPlan{ - SQLBindOp: OpSetBindingStatus, - NormdOrigSQL: parser.NormalizeForBinding(utilparser.RestoreWithDefaultDB(v.OriginNode, b.ctx.GetSessionVars().CurrentDB, v.OriginNode.Text()), false), - Db: utilparser.GetDefaultDB(v.OriginNode, b.ctx.GetSessionVars().CurrentDB), + SQLBindOp: OpSetBindingStatus, + Details: []*SQLBindOpDetail{{ + NormdOrigSQL: parser.NormalizeForBinding( + utilparser.RestoreWithDefaultDB(v.OriginNode, b.ctx.GetSessionVars().CurrentDB, v.OriginNode.Text()), + false, + ), + Db: utilparser.GetDefaultDB(v.OriginNode, b.ctx.GetSessionVars().CurrentDB), + }}, } } else if v.SQLDigest != "" { p = &SQLBindPlan{ SQLBindOp: OpSetBindingStatusByDigest, - SQLDigest: v.SQLDigest, + Details: []*SQLBindOpDetail{{ + SQLDigest: v.SQLDigest, + }}, } } else { return nil, errors.New("sql digest is empty") } switch v.BindingStatusType { case ast.BindingStatusTypeEnabled: - p.NewStatus = bindinfo.Enabled + p.Details[0].NewStatus = bindinfo.Enabled case ast.BindingStatusTypeDisabled: - p.NewStatus = bindinfo.Disabled + p.Details[0].NewStatus = bindinfo.Disabled } if v.HintedNode != nil { - p.BindSQL = utilparser.RestoreWithDefaultDB(v.HintedNode, b.ctx.GetSessionVars().CurrentDB, v.HintedNode.Text()) + p.Details[0].BindSQL = utilparser.RestoreWithDefaultDB(v.HintedNode, b.ctx.GetSessionVars().CurrentDB, v.HintedNode.Text()) } b.visitInfo = appendVisitInfo(b.visitInfo, mysql.SuperPriv, "", "", "", nil) return p, nil @@ -820,51 +846,127 @@ func fetchRecordFromClusterStmtSummary(sctx base.PlanContext, planDigest string) return rows, nil } -func (b *PlanBuilder) buildCreateBindPlanFromPlanDigest(v *ast.CreateBindingStmt) (base.Plan, error) { - if v.PlanDigest == "" { - return nil, errors.New("plan digest is empty") +func collectStrOrUserVarList(ctx base.PlanContext, list []*ast.StringOrUserVar) ([]string, error) { + result := make([]string, 0, len(list)) + for _, single := range list { + var str string + if single.UserVar != nil { + val, ok := ctx.GetSessionVars().GetUserVarVal(strings.ToLower(single.UserVar.Name)) + if !ok { + return nil, errors.New("can't find specified user variable: " + single.UserVar.Name) + } + var err error + str, err = val.ToString() + if err != nil { + return nil, err + } + } else { + str = single.StringLit + } + split := strings.Split(str, ",") + for _, single := range split { + trimmed := strings.TrimSpace(single) + if len(trimmed) > 0 { + result = append(result, trimmed) + } + } } - rows, err := fetchRecordFromClusterStmtSummary(b.ctx, v.PlanDigest) + return result, nil +} + +// constructSQLBindOPFromPlanDigest tries to construct a SQLBindOpDetail from plan digest by fetching the corresponding +// record from cluster_statements_summary or cluster_statements_summary_history. +// If it fails to construct the SQLBindOpDetail for any reason, it will return (nil, error). +// If the plan digest corresponds to the same SQL digest as another one in handledSQLDigests, it will append a warning +// then return (nil, nil). +func constructSQLBindOPFromPlanDigest( + ctx base.PlanContext, + planDigest string, + handledSQLDigests map[string]struct{}, +) ( + *SQLBindOpDetail, + error, +) { + // The warnings will be broken in fetchRecordFromClusterStmtSummary(), so we need to save and restore it to make the + // warnings for repeated SQL Digest work. + warnings := ctx.GetSessionVars().StmtCtx.GetWarnings() + rows, err := fetchRecordFromClusterStmtSummary(ctx, planDigest) if err != nil { return nil, err } + ctx.GetSessionVars().StmtCtx.SetWarnings(warnings) bindableStmt := stmtsummary.GetBindableStmtFromCluster(rows) if bindableStmt == nil { - return nil, errors.New("can't find any plans for '" + v.PlanDigest + "'") + return nil, errors.New("can't find any plans for '" + planDigest + "'") } - parser4binding := parser.New() originNode, err := parser4binding.ParseOneStmt(bindableStmt.Query, bindableStmt.Charset, bindableStmt.Collation) if err != nil { - return nil, errors.Errorf("binding failed: %v", err) - } - if complete, reason := hint.CheckBindingFromHistoryComplete(originNode, bindableStmt.PlanHint); !complete { - b.ctx.GetSessionVars().StmtCtx.AppendWarning(errors.NewNoStackError(reason)) + return nil, errors.NewNoStackErrorf("binding failed: %v. Plan Digest: %v", err, planDigest) } + complete, reason := hint.CheckBindingFromHistoryComplete(originNode, bindableStmt.PlanHint) bindSQL := bindinfo.GenerateBindingSQL(originNode, bindableStmt.PlanHint, true, bindableStmt.Schema) var hintNode ast.StmtNode hintNode, err = parser4binding.ParseOneStmt(bindSQL, bindableStmt.Charset, bindableStmt.Collation) if err != nil { - return nil, errors.Errorf("binding failed: %v", err) + return nil, errors.NewNoStackErrorf("binding failed: %v. Plan Digest: %v", err, planDigest) } - restoredSQL := utilparser.RestoreWithDefaultDB(originNode, bindableStmt.Schema, bindableStmt.Query) bindSQL = utilparser.RestoreWithDefaultDB(hintNode, bindableStmt.Schema, hintNode.Text()) db := utilparser.GetDefaultDB(originNode, bindableStmt.Schema) normdOrigSQL, sqlDigestWithDB := parser.NormalizeDigestForBinding(restoredSQL) - - p := &SQLBindPlan{ - SQLBindOp: OpSQLBindCreate, + sqlDigestWithDBStr := sqlDigestWithDB.String() + if _, ok := handledSQLDigests[sqlDigestWithDBStr]; ok { + ctx.GetSessionVars().StmtCtx.AppendWarning(errors.NewNoStackError( + planDigest + " is ignored because it corresponds to the same SQL digest as another Plan Digest", + )) + return nil, nil + } + handledSQLDigests[sqlDigestWithDBStr] = struct{}{} + if !complete { + ctx.GetSessionVars().StmtCtx.AppendWarning( + errors.NewNoStackErrorf("%v. Plan Digest: %v", reason, planDigest), + ) + } + op := &SQLBindOpDetail{ NormdOrigSQL: normdOrigSQL, BindSQL: bindSQL, - IsGlobal: v.GlobalScope, BindStmt: hintNode, Db: db, Charset: bindableStmt.Charset, Collation: bindableStmt.Collation, Source: bindinfo.History, - SQLDigest: sqlDigestWithDB.String(), - PlanDigest: v.PlanDigest, + SQLDigest: sqlDigestWithDBStr, + PlanDigest: planDigest, + } + return op, nil +} + +func (b *PlanBuilder) buildCreateBindPlanFromPlanDigest(v *ast.CreateBindingStmt) (base.Plan, error) { + planDigests, err := collectStrOrUserVarList(b.ctx, v.PlanDigests) + if err != nil { + return nil, err + } + if len(planDigests) == 0 { + return nil, errors.New("plan digest is empty") + } + handledSQLDigests := make(map[string]struct{}, len(planDigests)) + opDetails := make([]*SQLBindOpDetail, 0, len(planDigests)) + for _, planDigest := range planDigests { + op, err2 := constructSQLBindOPFromPlanDigest(b.ctx, planDigest, handledSQLDigests) + if err2 != nil { + return nil, err2 + } + if op == nil { + continue + } + opDetails = append(opDetails, op) + } + + p := &SQLBindPlan{ + IsGlobal: v.GlobalScope, + SQLBindOp: OpSQLBindCreate, + Details: opDetails, } b.visitInfo = appendVisitInfo(b.visitInfo, mysql.SuperPriv, "", "", "", nil) return p, nil @@ -890,16 +992,18 @@ func (b *PlanBuilder) buildCreateBindPlan(v *ast.CreateBindingStmt) (base.Plan, db := utilparser.GetDefaultDB(v.OriginNode, b.ctx.GetSessionVars().CurrentDB) normdOrigSQL, sqlDigestWithDB := parser.NormalizeDigestForBinding(restoredSQL) p := &SQLBindPlan{ - SQLBindOp: OpSQLBindCreate, - NormdOrigSQL: normdOrigSQL, - BindSQL: bindSQL, - IsGlobal: v.GlobalScope, - BindStmt: v.HintedNode, - Db: db, - Charset: charSet, - Collation: collation, - Source: bindinfo.Manual, - SQLDigest: sqlDigestWithDB.String(), + IsGlobal: v.GlobalScope, + SQLBindOp: OpSQLBindCreate, + Details: []*SQLBindOpDetail{{ + NormdOrigSQL: normdOrigSQL, + BindSQL: bindSQL, + BindStmt: v.HintedNode, + Db: db, + Charset: charSet, + Collation: collation, + Source: bindinfo.Manual, + SQLDigest: sqlDigestWithDB.String(), + }}, } b.visitInfo = appendVisitInfo(b.visitInfo, mysql.SuperPriv, "", "", "", nil) return p, nil @@ -1036,7 +1140,7 @@ func getLatestIndexInfo(ctx base.PlanContext, id int64, startVer int64) (map[int } latestIndexes := make(map[int64]*model.IndexInfo) - latestTbl, latestTblExist := is.TableByID(id) + latestTbl, latestTblExist := is.TableByID(context.Background(), id) if latestTblExist { latestTblInfo := latestTbl.Meta() for _, index := range latestTblInfo.Indices { @@ -1309,7 +1413,7 @@ func removeGlobalIndexPaths(paths []*util.AccessPath) []*util.AccessPath { return paths[:i] } -func (b *PlanBuilder) buildSelectLock(src base.LogicalPlan, lock *ast.SelectLockInfo) (*LogicalLock, error) { +func (b *PlanBuilder) buildSelectLock(src base.LogicalPlan, lock *ast.SelectLockInfo) (*logicalop.LogicalLock, error) { var tblID2PhysTblIDCol map[int64]*expression.Column if len(b.partitionedTable) > 0 { tblID2PhysTblIDCol = make(map[int64]*expression.Column) @@ -1323,7 +1427,7 @@ func (b *PlanBuilder) buildSelectLock(src base.LogicalPlan, lock *ast.SelectLock // since it would otherwise be lost in the PartitionUnion executor. setExtraPhysTblIDColsOnDataSource(src, tblID2PhysTblIDCol) } - selectLock := LogicalLock{ + selectLock := logicalop.LogicalLock{ Lock: lock, TblID2Handle: b.handleHelper.tailMap(), TblID2PhysTblIDCol: tblID2PhysTblIDCol, @@ -1397,7 +1501,7 @@ func (b *PlanBuilder) buildAdmin(ctx context.Context, as *ast.AdminStmt) (base.P p.setSchemaAndNames(buildShowDDLFields()) ret = p case ast.AdminShowDDLJobs: - p := LogicalShowDDLJobs{JobNumber: as.JobNumber}.Init(b.ctx) + p := logicalop.LogicalShowDDLJobs{JobNumber: as.JobNumber}.Init(b.ctx) p.SetSchemaAndNames(buildShowDDLJobsFields()) for _, col := range p.Schema().Columns { col.UniqueID = b.ctx.GetSessionVars().AllocPlanColumnID() @@ -1715,7 +1819,7 @@ func (b *PlanBuilder) buildPhysicalIndexLookUpReaders(ctx context.Context, dbNam func (b *PlanBuilder) buildAdminCheckTable(ctx context.Context, as *ast.AdminStmt) (*CheckTable, error) { tblName := as.Tables[0] tableInfo := as.Tables[0].TableInfo - tbl, ok := b.is.TableByID(tableInfo.ID) + tbl, ok := b.is.TableByID(ctx, tableInfo.ID) if !ok { return nil, infoschema.ErrTableNotExists.FastGenByArgs(tblName.DBInfo.Name.O, tableInfo.Name.O) } @@ -2260,7 +2364,7 @@ func (b *PlanBuilder) buildAnalyzeFullSamplingTask( // Version 2 doesn't support incremental analyze. // And incremental analyze will be deprecated in the future. if as.Incremental { - b.ctx.GetSessionVars().StmtCtx.AppendWarning(errors.NewNoStackErrorf("The version 2 stats would ignore the INCREMENTAL keyword and do full sampling")) + b.ctx.GetSessionVars().StmtCtx.AppendWarning(errors.NewNoStackError("The version 2 stats would ignore the INCREMENTAL keyword and do full sampling")) } astOpts, err := handleAnalyzeOptionsV2(as.AnalyzeOpts) @@ -2613,10 +2717,10 @@ func (b *PlanBuilder) buildAnalyzeIndex(as *ast.AnalyzeTableStmt, opts map[ast.A } versionIsSame := statsHandle.CheckAnalyzeVersion(tblInfo, physicalIDs, &version) if !versionIsSame { - b.ctx.GetSessionVars().StmtCtx.AppendWarning(errors.NewNoStackErrorf("The analyze version from the session is not compatible with the existing statistics of the table. Use the existing version instead")) + b.ctx.GetSessionVars().StmtCtx.AppendWarning(errors.NewNoStackError("The analyze version from the session is not compatible with the existing statistics of the table. Use the existing version instead")) } if version == statistics.Version2 { - b.ctx.GetSessionVars().StmtCtx.AppendWarning(errors.NewNoStackErrorf("The version 2 would collect all statistics not only the selected indexes")) + b.ctx.GetSessionVars().StmtCtx.AppendWarning(errors.NewNoStackError("The version 2 would collect all statistics not only the selected indexes")) return b.buildAnalyzeTable(as, opts, version) } for _, idxName := range as.IndexNames { @@ -3169,8 +3273,8 @@ func splitWhere(where ast.ExprNode) []ast.ExprNode { } func (b *PlanBuilder) buildShow(ctx context.Context, show *ast.ShowStmt) (base.Plan, error) { - p := LogicalShow{ - ShowContents: ShowContents{ + p := logicalop.LogicalShow{ + ShowContents: logicalop.ShowContents{ Tp: show.Tp, CountWarningsOrErrors: show.CountWarningsOrErrors, DBName: show.DBName, @@ -3311,7 +3415,7 @@ func (b *PlanBuilder) buildShow(ctx context.Context, show *ast.ShowStmt) (base.P if np != p { b.optFlag |= flagEliminateProjection fieldsLen := len(p.Schema().Columns) - proj := LogicalProjection{Exprs: make([]expression.Expression, 0, fieldsLen)}.Init(b.ctx, 0) + proj := logicalop.LogicalProjection{Exprs: make([]expression.Expression, 0, fieldsLen)}.Init(b.ctx, 0) schema := expression.NewSchema(make([]*expression.Column, 0, fieldsLen)...) for _, col := range p.Schema().Columns { proj.Exprs = append(proj.Exprs, col) @@ -3327,7 +3431,7 @@ func (b *PlanBuilder) buildShow(ctx context.Context, show *ast.ShowStmt) (base.P if show.Tp == ast.ShowVariables || show.Tp == ast.ShowStatus { b.curClause = orderByClause orderByCol := np.Schema().Columns[0].Clone().(*expression.Column) - sort := LogicalSort{ + sort := logicalop.LogicalSort{ ByItems: []*util.ByItems{{Expr: orderByCol}}, }.Init(b.ctx, b.getSelectOffset()) sort.SetChildren(np) @@ -3404,7 +3508,7 @@ func (b *PlanBuilder) buildSimple(ctx context.Context, node ast.StmtNode) (base. b.visitInfo = appendDynamicVisitInfo(b.visitInfo, []string{"CONNECTION_ADMIN"}, false, err) b.visitInfo = appendVisitInfoIsRestrictedUser(b.visitInfo, b.ctx, &auth.UserIdentity{Username: pi.User, Hostname: pi.Host}, "RESTRICTED_CONNECTION_ADMIN") } - } else if raw.ConnectionID == domain.GetDomain(b.ctx).GetAutoAnalyzeProcID() { + } else if handleutil.GlobalAutoAnalyzeProcessList.Contains(raw.ConnectionID) { // Only the users with SUPER or CONNECTION_ADMIN privilege can kill auto analyze. err := plannererrors.ErrSpecificAccessDenied.GenWithStackByArgs("SUPER or CONNECTION_ADMIN") b.visitInfo = appendDynamicVisitInfo(b.visitInfo, []string{"CONNECTION_ADMIN"}, false, err) @@ -3644,7 +3748,6 @@ func (b *PlanBuilder) resolveGeneratedColumns(ctx context.Context, columns []*ta return igc, err } - igc.Columns = append(igc.Columns, columnName) igc.Exprs = append(igc.Exprs, expr) if onDups == nil { continue @@ -3689,7 +3792,7 @@ func (b *PlanBuilder) buildInsert(ctx context.Context, insert *ast.InsertStmt) ( if err != nil { return nil, err } - tableInPlan, ok := b.is.TableByID(tableInfo.ID) + tableInPlan, ok := b.is.TableByID(ctx, tableInfo.ID) if !ok { return nil, errors.Errorf("Can't get table %s", tableInfo.Name.O) } @@ -3700,6 +3803,7 @@ func (b *PlanBuilder) buildInsert(ctx context.Context, insert *ast.InsertStmt) ( tableSchema: schema, tableColNames: names, IsReplace: insert.IsReplace, + IgnoreErr: insert.IgnoreErr, }.Init(b.ctx) if tableInfo.GetPartitionInfo() != nil && len(insert.PartitionNames) != 0 { @@ -3743,7 +3847,7 @@ func (b *PlanBuilder) buildInsert(ctx context.Context, insert *ast.InsertStmt) ( b.visitInfo = appendVisitInfo(b.visitInfo, extraPriv, tn.DBInfo.Name.L, tableInfo.Name.L, "", authErr) } - mockTablePlan := LogicalTableDual{}.Init(b.ctx, b.getSelectOffset()) + mockTablePlan := logicalop.LogicalTableDual{}.Init(b.ctx, b.getSelectOffset()) mockTablePlan.SetSchema(insertPlan.tableSchema) mockTablePlan.SetOutputNames(insertPlan.tableColNames) @@ -3878,7 +3982,7 @@ func (*PlanBuilder) getAffectCols(insertStmt *ast.InsertStmt, insertPlan *Insert return affectedValuesCols, nil } -func (b PlanBuilder) getInsertColExpr(ctx context.Context, insertPlan *Insert, mockTablePlan *LogicalTableDual, col *table.Column, expr ast.ExprNode, checkRefColumn func(n ast.Node) ast.Node) (outExpr expression.Expression, err error) { +func (b PlanBuilder) getInsertColExpr(ctx context.Context, insertPlan *Insert, mockTablePlan *logicalop.LogicalTableDual, col *table.Column, expr ast.ExprNode, checkRefColumn func(n ast.Node) ast.Node) (outExpr expression.Expression, err error) { if col.Hidden { return nil, plannererrors.ErrUnknownColumn.GenWithStackByArgs(col.Name, clauseMsg[fieldList]) } @@ -3907,18 +4011,18 @@ func (b PlanBuilder) getInsertColExpr(ctx context.Context, insertPlan *Insert, m RetType: &x.Type, } case *driver.ParamMarkerExpr: - outExpr, err = expression.ParamMarkerExpression(b.ctx, x, false) + outExpr, err = expression.ParamMarkerExpression(b.ctx.GetExprCtx(), x, false) default: b.curClause = fieldList // subquery in insert values should not reference upper scope usingPlan := mockTablePlan if _, ok := expr.(*ast.SubqueryExpr); ok { - usingPlan = LogicalTableDual{}.Init(b.ctx, b.getSelectOffset()) + usingPlan = logicalop.LogicalTableDual{}.Init(b.ctx, b.getSelectOffset()) } var np base.LogicalPlan outExpr, np, err = b.rewriteWithPreprocess(ctx, expr, usingPlan, nil, nil, true, checkRefColumn) if np != nil { - if _, ok := np.(*LogicalTableDual); !ok { + if _, ok := np.(*logicalop.LogicalTableDual); !ok { // See issue#30626 and the related tests in function TestInsertValuesWithSubQuery for more details. // This is a TODO and we will support it later. return nil, errors.New("Insert's SET operation or VALUES_LIST doesn't support complex subqueries now") @@ -3940,7 +4044,7 @@ func (b PlanBuilder) getInsertColExpr(ctx context.Context, insertPlan *Insert, m return outExpr, nil } -func (b *PlanBuilder) buildValuesListOfInsert(ctx context.Context, insert *ast.InsertStmt, insertPlan *Insert, mockTablePlan *LogicalTableDual, checkRefColumn func(n ast.Node) ast.Node) error { +func (b *PlanBuilder) buildValuesListOfInsert(ctx context.Context, insert *ast.InsertStmt, insertPlan *Insert, mockTablePlan *logicalop.LogicalTableDual, checkRefColumn func(n ast.Node) ast.Node) error { affectedValuesCols, err := b.getAffectCols(insert, insertPlan) if err != nil { return err @@ -4131,7 +4235,7 @@ func (b *PlanBuilder) buildSelectPlanOfInsert(ctx context.Context, insert *ast.I } func (b *PlanBuilder) buildLoadData(ctx context.Context, ld *ast.LoadDataStmt) (base.Plan, error) { - mockTablePlan := LogicalTableDual{}.Init(b.ctx, b.getSelectOffset()) + mockTablePlan := logicalop.LogicalTableDual{}.Init(b.ctx, b.getSelectOffset()) var ( err error options = make([]*LoadDataOpt, 0, len(ld.Options)) @@ -4172,7 +4276,7 @@ func (b *PlanBuilder) buildLoadData(ctx context.Context, ld *ast.LoadDataStmt) ( b.visitInfo = appendVisitInfo(b.visitInfo, mysql.DeletePriv, p.Table.Schema.O, p.Table.Name.O, "", deleteErr) } tableInfo := p.Table.TableInfo - tableInPlan, ok := b.is.TableByID(tableInfo.ID) + tableInPlan, ok := b.is.TableByID(ctx, tableInfo.ID) if !ok { db := b.ctx.GetSessionVars().CurrentDB return nil, infoschema.ErrTableNotExists.FastGenByArgs(db, tableInfo.Name.O) @@ -4201,7 +4305,7 @@ var ( ) func (b *PlanBuilder) buildImportInto(ctx context.Context, ld *ast.ImportIntoStmt) (base.Plan, error) { - mockTablePlan := LogicalTableDual{}.Init(b.ctx, b.getSelectOffset()) + mockTablePlan := logicalop.LogicalTableDual{}.Init(b.ctx, b.getSelectOffset()) var ( err error options = make([]*LoadDataOpt, 0, len(ld.Options)) @@ -4267,7 +4371,7 @@ func (b *PlanBuilder) buildImportInto(ctx context.Context, ld *ast.ImportIntoStm // tidb_read_staleness can be used to do stale read too, it's allowed as long as // TableInfo.ID matches with the latest schema. latestIS := b.ctx.GetDomainInfoSchema().(infoschema.InfoSchema) - tableInPlan, ok := latestIS.TableByID(tableInfo.ID) + tableInPlan, ok := latestIS.TableByID(ctx, tableInfo.ID) if !ok { // adaptor.handleNoDelayExecutor has a similar check, but we want to give // a more specific error message here. @@ -4387,7 +4491,7 @@ func (b *PlanBuilder) buildSplitIndexRegion(node *ast.SplitRegionStmt) (base.Pla if indexInfo == nil { return nil, plannererrors.ErrKeyDoesNotExist.GenWithStackByArgs(node.IndexName, tblInfo.Name) } - mockTablePlan := LogicalTableDual{}.Init(b.ctx, b.getSelectOffset()) + mockTablePlan := logicalop.LogicalTableDual{}.Init(b.ctx, b.getSelectOffset()) schema, names, err := expression.TableInfo2SchemaAndNames(b.ctx.GetExprCtx(), node.Table.Schema, tblInfo) if err != nil { return nil, err @@ -4502,7 +4606,7 @@ func (b *PlanBuilder) convertValue(valueItem ast.ExprNode, mockTablePlan base.Lo func (b *PlanBuilder) buildSplitTableRegion(node *ast.SplitRegionStmt) (base.Plan, error) { tblInfo := node.Table.TableInfo handleColInfos := buildHandleColumnInfos(tblInfo) - mockTablePlan := LogicalTableDual{}.Init(b.ctx, b.getSelectOffset()) + mockTablePlan := logicalop.LogicalTableDual{}.Init(b.ctx, b.getSelectOffset()) schema, names, err := expression.TableInfo2SchemaAndNames(b.ctx.GetExprCtx(), node.Table.Schema, tblInfo) if err != nil { return nil, err @@ -4573,7 +4677,7 @@ const ( ) func convertValueListToData(valueList []ast.ExprNode, handleColInfos []*model.ColumnInfo, rowIdx int, - b *PlanBuilder, mockTablePlan *LogicalTableDual) ([]types.Datum, error) { + b *PlanBuilder, mockTablePlan *logicalop.LogicalTableDual) ([]types.Datum, error) { if len(valueList) != len(handleColInfos) { var err error switch rowIdx { diff --git a/pkg/planner/core/planbuilder_test.go b/pkg/planner/core/planbuilder_test.go index a8af7684ec94a..40c0390bba87a 100644 --- a/pkg/planner/core/planbuilder_test.go +++ b/pkg/planner/core/planbuilder_test.go @@ -367,10 +367,12 @@ func TestPhysicalPlanClone(t *testing.T) { require.NoError(t, checkPhysicalPlanClone(streamAgg)) // hash agg - hashAgg := &PhysicalHashAgg{basePhysicalAgg{ - AggFuncs: aggDescs, - GroupByItems: []expression.Expression{col, cst}, - }} + hashAgg := &PhysicalHashAgg{ + basePhysicalAgg: basePhysicalAgg{ + AggFuncs: aggDescs, + GroupByItems: []expression.Expression{col, cst}, + }, + } hashAgg = hashAgg.initForHash(ctx, stats, 0) hashAgg.SetSchema(schema) require.NoError(t, checkPhysicalPlanClone(hashAgg)) diff --git a/pkg/planner/core/point_get_plan.go b/pkg/planner/core/point_get_plan.go index e61dc28e7e74e..fc1b92282d8cb 100644 --- a/pkg/planner/core/point_get_plan.go +++ b/pkg/planner/core/point_get_plan.go @@ -15,6 +15,7 @@ package core import ( + "context" math2 "math" "strconv" "strings" @@ -34,6 +35,7 @@ import ( ptypes "github.com/pingcap/tidb/pkg/parser/types" "github.com/pingcap/tidb/pkg/planner/core/base" "github.com/pingcap/tidb/pkg/planner/core/operator/baseimpl" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/planner/util/costusage" @@ -71,18 +73,25 @@ const GlobalWithoutColumnPos = -1 // This plan is much faster to build and to execute because it avoids the optimization and coprocessor cost. type PointGetPlan struct { baseimpl.Plan + + // probeParents records the IndexJoins and Applys with this operator in their inner children. + // Please see comments in PhysicalPlan for details. + probeParents []base.PhysicalPlan + // explicit partition selection + PartitionNames []model.CIStr + dbName string schema *expression.Schema - TblInfo *model.TableInfo - IndexInfo *model.IndexInfo + TblInfo *model.TableInfo `plan-cache-clone:"shallow"` + IndexInfo *model.IndexInfo `plan-cache-clone:"shallow"` PartitionIdx *int Handle kv.Handle HandleConstant *expression.Constant - handleFieldType *types.FieldType + handleFieldType *types.FieldType `plan-cache-clone:"shallow"` HandleColOffset int IndexValues []types.Datum IndexConstants []*expression.Constant - ColsFieldType []*types.FieldType + ColsFieldType []*types.FieldType `plan-cache-clone:"shallow"` IdxCols []*expression.Column IdxColLens []int AccessConditions []expression.Expression @@ -90,23 +99,17 @@ type PointGetPlan struct { UnsignedHandle bool IsTableDual bool Lock bool - outputNames []*types.FieldName + outputNames []*types.FieldName `plan-cache-clone:"shallow"` LockWaitTime int64 - Columns []*model.ColumnInfo + Columns []*model.ColumnInfo `plan-cache-clone:"shallow"` cost float64 // required by cost model planCostInit bool planCost float64 - planCostVer2 costusage.CostVer2 + planCostVer2 costusage.CostVer2 `plan-cache-clone:"shallow"` // accessCols represents actual columns the PointGet will access, which are used to calculate row-size accessCols []*expression.Column - - // probeParents records the IndexJoins and Applys with this operator in their inner children. - // Please see comments in PhysicalPlan for details. - probeParents []base.PhysicalPlan - // explicit partition selection - PartitionNames []model.CIStr } // GetEstRowCountForDisplay implements PhysicalPlan interface. @@ -366,7 +369,7 @@ func (p *PointGetPlan) PrunePartitions(sctx sessionctx.Context) bool { return false } is := sessiontxn.GetTxnManager(sctx).GetTxnInfoSchema() - tbl, ok := is.TableByID(p.TblInfo.ID) + tbl, ok := is.TableByID(context.Background(), p.TblInfo.ID) if tbl == nil || !ok { // Can this happen? intest.Assert(false) @@ -423,16 +426,22 @@ func (p *PointGetPlan) PrunePartitions(sctx sessionctx.Context) bool { type BatchPointGetPlan struct { baseSchemaProducer + // probeParents records the IndexJoins and Applys with this operator in their inner children. + // Please see comments in PhysicalPlan for details. + probeParents []base.PhysicalPlan + // explicit partition selection + PartitionNames []model.CIStr + ctx base.PlanContext dbName string - TblInfo *model.TableInfo - IndexInfo *model.IndexInfo + TblInfo *model.TableInfo `plan-cache-clone:"shallow"` + IndexInfo *model.IndexInfo `plan-cache-clone:"shallow"` Handles []kv.Handle - HandleType *types.FieldType + HandleType *types.FieldType `plan-cache-clone:"shallow"` HandleParams []*expression.Constant // record all Parameters for Plan-Cache IndexValues [][]types.Datum IndexValueParams [][]*expression.Constant // record all Parameters for Plan-Cache - IndexColTypes []*types.FieldType + IndexColTypes []*types.FieldType `plan-cache-clone:"shallow"` AccessConditions []expression.Expression IdxCols []*expression.Column IdxColLens []int @@ -447,21 +456,15 @@ type BatchPointGetPlan struct { Desc bool Lock bool LockWaitTime int64 - Columns []*model.ColumnInfo + Columns []*model.ColumnInfo `plan-cache-clone:"shallow"` cost float64 // required by cost model planCostInit bool planCost float64 - planCostVer2 costusage.CostVer2 + planCostVer2 costusage.CostVer2 `plan-cache-clone:"shallow"` // accessCols represents actual columns the PointGet will access, which are used to calculate row-size accessCols []*expression.Column - - // probeParents records the IndexJoins and Applys with this operator in their inner children. - // Please see comments in PhysicalPlan for details. - probeParents []base.PhysicalPlan - // explicit partition selection - PartitionNames []model.CIStr } // GetEstRowCountForDisplay implements PhysicalPlan interface. @@ -664,7 +667,7 @@ func isInExplicitPartitions(pi *model.PartitionInfo, idx int, names []model.CISt // Map each index value to Partition ID func (p *BatchPointGetPlan) getPartitionIdxs(sctx sessionctx.Context) []int { is := sessiontxn.GetTxnManager(sctx).GetTxnInfoSchema() - tbl, ok := is.TableByID(p.TblInfo.ID) + tbl, ok := is.TableByID(context.Background(), p.TblInfo.ID) intest.Assert(ok) pTbl, ok := tbl.(table.PartitionedTable) intest.Assert(ok) @@ -758,7 +761,7 @@ func (p *BatchPointGetPlan) PrunePartitionsAndValues(sctx sessionctx.Context) ([ } if pi != nil { is := sessiontxn.GetTxnManager(sctx).GetTxnInfoSchema() - tbl, ok := is.TableByID(p.TblInfo.ID) + tbl, ok := is.TableByID(context.Background(), p.TblInfo.ID) intest.Assert(ok) pTbl, ok := tbl.(table.PartitionedTable) intest.Assert(ok) @@ -942,20 +945,9 @@ func TryFastPlan(ctx base.PlanContext, node ast.Node) (p base.Plan) { return nil } -// IsSelectForUpdateLockType checks if the select lock type is for update type. -func IsSelectForUpdateLockType(lockType ast.SelectLockType) bool { - if lockType == ast.SelectLockForUpdate || - lockType == ast.SelectLockForShare || - lockType == ast.SelectLockForUpdateNoWait || - lockType == ast.SelectLockForUpdateWaitN { - return true - } - return false -} - func getLockWaitTime(ctx base.PlanContext, lockInfo *ast.SelectLockInfo) (lock bool, waitTime int64) { if lockInfo != nil { - if IsSelectForUpdateLockType(lockInfo.LockType) { + if logicalop.IsSupportedSelectLockType(lockInfo.LockType) { // Locking of rows for update using SELECT FOR UPDATE only applies when autocommit // is disabled (either by beginning transaction with START TRANSACTION or by setting // autocommit to 0. If autocommit is enabled, the rows matching the specification are not locked. @@ -966,7 +958,7 @@ func getLockWaitTime(ctx base.PlanContext, lockInfo *ast.SelectLockInfo) (lock b waitTime = sessVars.LockWaitTimeout if lockInfo.LockType == ast.SelectLockForUpdateWaitN { waitTime = int64(lockInfo.WaitSec * 1000) - } else if lockInfo.LockType == ast.SelectLockForUpdateNoWait { + } else if lockInfo.LockType == ast.SelectLockForUpdateNoWait || lockInfo.LockType == ast.SelectLockForShareNoWait { waitTime = tikvstore.LockNoWait } } @@ -987,7 +979,7 @@ func newBatchPointGetPlan( // Only keeping it for now to limit impact of // enable plan cache for partitioned tables PR. is := ctx.GetInfoSchema().(infoschema.InfoSchema) - table, ok := is.TableByID(tbl.ID) + table, ok := is.TableByID(context.Background(), tbl.ID) if !ok { return nil } @@ -1023,7 +1015,7 @@ func newBatchPointGetPlan( d = x.Datum case *driver.ParamMarkerExpr: var err error - con, err = expression.ParamMarkerExpression(ctx, x, true) + con, err = expression.ParamMarkerExpression(ctx.GetExprCtx(), x, true) if err != nil { return nil } @@ -1138,7 +1130,7 @@ func newBatchPointGetPlan( values[permIndex] = innerX.Datum pairs = append(pairs, nameValuePair{colName: whereColNames[index], value: innerX.Datum}) case *driver.ParamMarkerExpr: - con, err := expression.ParamMarkerExpression(ctx, innerX, true) + con, err := expression.ParamMarkerExpression(ctx.GetExprCtx(), innerX, true) if err != nil { return nil } @@ -1177,7 +1169,7 @@ func newBatchPointGetPlan( if len(whereColNames) != 1 { return nil } - con, err := expression.ParamMarkerExpression(ctx, x, true) + con, err := expression.ParamMarkerExpression(ctx.GetExprCtx(), x, true) if err != nil { return nil } @@ -1319,7 +1311,7 @@ func tryPointGetPlan(ctx base.PlanContext, selStmt *ast.SelectStmt, check bool) if selStmt.Having != nil || selStmt.OrderBy != nil { return nil } else if selStmt.Limit != nil { - count, offset, err := extractLimitCountOffset(ctx, selStmt.Limit) + count, offset, err := extractLimitCountOffset(ctx.GetExprCtx(), selStmt.Limit) if err != nil || count == 0 || offset > 0 { return nil } @@ -1357,7 +1349,7 @@ func tryPointGetPlan(ctx base.PlanContext, selStmt *ast.SelectStmt, check bool) } pairs := make([]nameValuePair, 0, 4) - pairs, isTableDual := getNameValuePairs(ctx, tbl, tblAlias, pairs, selStmt.Where) + pairs, isTableDual := getNameValuePairs(ctx.GetExprCtx(), tbl, tblAlias, pairs, selStmt.Where) if pairs == nil && !isTableDual { return nil } @@ -1656,9 +1648,9 @@ func getSingleTableNameAndAlias(tableRefs *ast.TableRefsClause) (tblName *ast.Ta } // getNameValuePairs extracts `column = constant/paramMarker` conditions from expr as name value pairs. -func getNameValuePairs(ctx base.PlanContext, tbl *model.TableInfo, tblName model.CIStr, nvPairs []nameValuePair, expr ast.ExprNode) ( +func getNameValuePairs(ctx expression.BuildContext, tbl *model.TableInfo, tblName model.CIStr, nvPairs []nameValuePair, expr ast.ExprNode) ( pairs []nameValuePair, isTableDual bool) { - stmtCtx := ctx.GetSessionVars().StmtCtx + evalCtx := ctx.GetEvalCtx() binOp, ok := expr.(*ast.BinaryOperationExpr) if !ok { return nil, false @@ -1690,7 +1682,7 @@ func getNameValuePairs(ctx base.PlanContext, tbl *model.TableInfo, tblName model if err != nil { return nil, false } - d, err = con.Eval(ctx.GetExprCtx().GetEvalCtx(), chunk.Row{}) + d, err = con.Eval(evalCtx, chunk.Row{}) if err != nil { return nil, false } @@ -1704,7 +1696,7 @@ func getNameValuePairs(ctx base.PlanContext, tbl *model.TableInfo, tblName model if err != nil { return nil, false } - d, err = con.Eval(ctx.GetExprCtx().GetEvalCtx(), chunk.Row{}) + d, err = con.Eval(evalCtx, chunk.Row{}) if err != nil { return nil, false } @@ -1743,7 +1735,7 @@ func getNameValuePairs(ctx base.PlanContext, tbl *model.TableInfo, tblName model if col.GetType() == mysql.TypeString && col.GetCollate() == charset.CollationBin { // This type we needn't to pad `\0` in here. return append(nvPairs, nameValuePair{colName: colName.Name.Name.L, colFieldType: &col.FieldType, value: d, con: con}), false } - dVal, err := d.ConvertTo(stmtCtx.TypeCtx(), &col.FieldType) + dVal, err := d.ConvertTo(evalCtx.TypeCtx(), &col.FieldType) if err != nil { if terror.ErrorEqual(types.ErrOverflow, err) { return append(nvPairs, nameValuePair{colName: colName.Name.Name.L, colFieldType: &col.FieldType, value: d, con: con}), true @@ -1754,7 +1746,7 @@ func getNameValuePairs(ctx base.PlanContext, tbl *model.TableInfo, tblName model } } // The converted result must be same as original datum. - cmp, err := dVal.Compare(stmtCtx.TypeCtx(), &d, collate.GetCollator(col.GetCollate())) + cmp, err := dVal.Compare(evalCtx.TypeCtx(), &d, collate.GetCollator(col.GetCollate())) if err != nil || cmp != 0 { return nil, false } @@ -1959,10 +1951,11 @@ func buildPointUpdatePlan(ctx base.PlanContext, pointPlan base.PhysicalPlan, dbN }, AllAssignmentsAreConstant: allAssignmentsAreConstant, VirtualAssignmentsOffset: len(orderedList), + IgnoreError: updateStmt.IgnoreErr, }.Init(ctx) updatePlan.names = pointPlan.OutputNames() is := ctx.GetInfoSchema().(infoschema.InfoSchema) - t, _ := is.TableByID(tbl.ID) + t, _ := is.TableByID(context.Background(), tbl.ID) updatePlan.tblID2Table = map[int64]table.Table{ tbl.ID: t, } @@ -2078,7 +2071,7 @@ func buildPointDeletePlan(ctx base.PlanContext, pointPlan base.PhysicalPlan, dbN }.Init(ctx) var err error is := ctx.GetInfoSchema().(infoschema.InfoSchema) - t, _ := is.TableByID(tbl.ID) + t, _ := is.TableByID(context.Background(), tbl.ID) if t != nil { tblID2Table := map[int64]table.Table{tbl.ID: t} err = delPlan.buildOnDeleteFKTriggers(ctx, is, tblID2Table) @@ -2144,7 +2137,7 @@ func getHashOrKeyPartitionColumnName(ctx base.PlanContext, tbl *model.TableInfo) return nil } is := ctx.GetInfoSchema().(infoschema.InfoSchema) - table, ok := is.TableByID(tbl.ID) + table, ok := is.TableByID(context.Background(), tbl.ID) if !ok { return nil } diff --git a/pkg/planner/core/preprocess.go b/pkg/planner/core/preprocess.go index 4d43a62eef916..076799db3eee6 100644 --- a/pkg/planner/core/preprocess.go +++ b/pkg/planner/core/preprocess.go @@ -315,7 +315,7 @@ func (p *preprocessor) Enter(in ast.Node) (out ast.Node, skipChildren bool) { case *ast.CreateBindingStmt: p.stmtTp = TypeCreate if node.OriginNode != nil { - // if node.PlanDigest is not empty, this binding will be created from history, the node.OriginNode and node.HintedNode should be nil + // if node.PlanDigests is not empty, this binding will be created from history, the node.OriginNode and node.HintedNode should be nil EraseLastSemicolon(node.OriginNode) EraseLastSemicolon(node.HintedNode) p.checkBindGrammar(node.OriginNode, node.HintedNode, p.sctx.GetSessionVars().CurrentDB) @@ -1139,6 +1139,14 @@ func (p *preprocessor) checkCreateIndexGrammar(stmt *ast.CreateIndexStmt) { func (p *preprocessor) checkSelectNoopFuncs(stmt *ast.SelectStmt) { noopFuncsMode := p.sctx.GetSessionVars().NoopFuncsMode if noopFuncsMode == variable.OnInt { + // Set `ForShareLockEnabledByNoop` properly before returning. + // When `tidb_enable_shared_lock_promotion` is enabled, the `for share` statements would be + // executed as `for update` statements despite setting of noop functions. + if stmt.LockInfo != nil && (stmt.LockInfo.LockType == ast.SelectLockForShare || + stmt.LockInfo.LockType == ast.SelectLockForShareNoWait) && + !p.sctx.GetSessionVars().SharedLockPromotion { + p.sctx.GetSessionVars().StmtCtx.ForShareLockEnabledByNoop = true + } return } if stmt.SelectStmtOpts != nil && stmt.SelectStmtOpts.CalcFoundRows { @@ -1150,7 +1158,12 @@ func (p *preprocessor) checkSelectNoopFuncs(stmt *ast.SelectStmt) { // NoopFuncsMode is Warn, append an error p.sctx.GetSessionVars().StmtCtx.AppendWarning(err) } - if stmt.LockInfo != nil && stmt.LockInfo.LockType == ast.SelectLockForShare { + + // When `tidb_enable_shared_lock_promotion` is enabled, the `for share` statements would be + // executed as `for update` statements. + if stmt.LockInfo != nil && (stmt.LockInfo.LockType == ast.SelectLockForShare || + stmt.LockInfo.LockType == ast.SelectLockForShareNoWait) && + !p.sctx.GetSessionVars().SharedLockPromotion { err := expression.ErrFunctionsNoopImpl.GenWithStackByArgs("LOCK IN SHARE MODE") if noopFuncsMode == variable.OffInt { p.err = err @@ -1158,6 +1171,7 @@ func (p *preprocessor) checkSelectNoopFuncs(stmt *ast.SelectStmt) { } // NoopFuncsMode is Warn, append an error p.sctx.GetSessionVars().StmtCtx.AppendWarning(err) + p.sctx.GetSessionVars().StmtCtx.ForShareLockEnabledByNoop = true } } @@ -1872,20 +1886,20 @@ func tryLockMDLAndUpdateSchemaIfNecessary(ctx context.Context, sctx base.PlanCon sctx.GetSessionVars().GetRelatedTableForMDL().Store(tbl.Meta().ID, domainSchemaVer) } // Check the table change, if adding new public index or modify a column, we need to handle them. - if !sctx.GetSessionVars().IsPessimisticReadConsistency() { + if tbl.Meta().Revision != tableInfo.Revision && !sctx.GetSessionVars().IsPessimisticReadConsistency() { var copyTableInfo *model.TableInfo + + infoIndices := make(map[string]int64, len(tableInfo.Indices)) + for _, idx := range tableInfo.Indices { + infoIndices[idx.Name.L] = idx.ID + } + for i, idx := range tbl.Meta().Indices { if idx.State != model.StatePublic { continue } - found := false - for _, idxx := range tableInfo.Indices { - if idx.Name.L == idxx.Name.L && idx.ID == idxx.ID { - found = true - break - } - } - if !found { + id, found := infoIndices[idx.Name.L] + if !found || id != idx.ID { if copyTableInfo == nil { copyTableInfo = tbl.Meta().Clone() } @@ -1899,19 +1913,19 @@ func tryLockMDLAndUpdateSchemaIfNecessary(ctx context.Context, sctx base.PlanCon } } // Check the column change. + infoColumns := make(map[string]int64, len(tableInfo.Columns)) + for _, col := range tableInfo.Columns { + infoColumns[col.Name.L] = col.ID + } for _, col := range tbl.Meta().Columns { if col.State != model.StatePublic { continue } - found := false - for _, coll := range tableInfo.Columns { - if col.Name.L == coll.Name.L && col.ID != coll.ID { - logutil.BgLogger().Info("public column changed", zap.String("column", col.Name.L), zap.String("old_col", coll.Name.L), zap.Int64("new id", col.ID), zap.Int64("old id", coll.ID)) - found = true - break - } - } - if found { + colid, found := infoColumns[col.Name.L] + if found && colid != col.ID { + logutil.BgLogger().Info("public column changed", + zap.String("column", col.Name.L), zap.String("old_col", col.Name.L), + zap.Int64("new id", col.ID), zap.Int64("old id", col.ID)) if !skipLock { sctx.GetSessionVars().GetRelatedTableForMDL().Delete(tableInfo.ID) } diff --git a/pkg/planner/core/property_cols_prune.go b/pkg/planner/core/property_cols_prune.go index becaffe54c507..26e9850e20b67 100644 --- a/pkg/planner/core/property_cols_prune.go +++ b/pkg/planner/core/property_cols_prune.go @@ -17,7 +17,6 @@ package core import ( "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/planner/core/base" - "github.com/pingcap/tidb/pkg/planner/util" ) // preparePossibleProperties traverses the plan tree by a post-order method, @@ -29,15 +28,3 @@ func preparePossibleProperties(lp base.LogicalPlan) [][]*expression.Column { } return lp.PreparePossibleProperties(lp.Schema(), childrenProperties...) } - -func getPossiblePropertyFromByItems(items []*util.ByItems) []*expression.Column { - cols := make([]*expression.Column, 0, len(items)) - for _, item := range items { - col, ok := item.Expr.(*expression.Column) - if !ok { - break - } - cols = append(cols, col) - } - return cols -} diff --git a/pkg/planner/core/recheck_cte.go b/pkg/planner/core/recheck_cte.go index 6f9fea141eb3c..6fce7b61faa35 100644 --- a/pkg/planner/core/recheck_cte.go +++ b/pkg/planner/core/recheck_cte.go @@ -36,17 +36,17 @@ func findCTEs( cte := cteReader.Cte if !isRootTree { // Set it to false since it's referenced by other CTEs. - cte.isOuterMostCTE = false + cte.IsOuterMostCTE = false } if visited.Has(cte.IDForStorage) { return } visited.Insert(cte.IDForStorage) // Set it when we meet it first time. - cte.isOuterMostCTE = isRootTree - findCTEs(cte.seedPartLogicalPlan, visited, false) - if cte.recursivePartLogicalPlan != nil { - findCTEs(cte.recursivePartLogicalPlan, visited, false) + cte.IsOuterMostCTE = isRootTree + findCTEs(cte.SeedPartLogicalPlan, visited, false) + if cte.RecursivePartLogicalPlan != nil { + findCTEs(cte.RecursivePartLogicalPlan, visited, false) } return } diff --git a/pkg/planner/core/resolve_indices.go b/pkg/planner/core/resolve_indices.go index bc63c798f601d..a930a7b31a0a2 100644 --- a/pkg/planner/core/resolve_indices.go +++ b/pkg/planner/core/resolve_indices.go @@ -17,6 +17,8 @@ package core import ( "github.com/pingcap/errors" "github.com/pingcap/tidb/pkg/expression" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" + "github.com/pingcap/tidb/pkg/planner/core/operator/physicalop" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/util/disjointset" ) @@ -24,12 +26,12 @@ import ( // ResolveIndicesItself resolve indices for PhysicalPlan itself func (p *PhysicalProjection) ResolveIndicesItself() (err error) { for i, expr := range p.Exprs { - p.Exprs[i], err = expr.ResolveIndices(p.children[0].Schema()) + p.Exprs[i], err = expr.ResolveIndices(p.Children()[0].Schema()) if err != nil { return err } } - childProj, isProj := p.children[0].(*PhysicalProjection) + childProj, isProj := p.Children()[0].(*PhysicalProjection) if !isProj { return } @@ -81,8 +83,8 @@ func refine4NeighbourProj(p, childProj *PhysicalProjection) { // ResolveIndicesItself resolve indices for PhyicalPlan itself func (p *PhysicalHashJoin) ResolveIndicesItself() (err error) { - lSchema := p.children[0].Schema() - rSchema := p.children[1].Schema() + lSchema := p.Children()[0].Schema() + rSchema := p.Children()[1].Schema() ctx := p.SCtx() for i, fun := range p.EqualConditions { lArg, err := fun.GetArgs()[0].ResolveIndices(lSchema) @@ -134,7 +136,7 @@ func (p *PhysicalHashJoin) ResolveIndicesItself() (err error) { colsNeedResolving := p.schema.Len() // The last output column of this two join is the generated column to indicate whether the row is matched or not. - if p.JoinType == LeftOuterSemiJoin || p.JoinType == AntiLeftOuterSemiJoin { + if p.JoinType == logicalop.LeftOuterSemiJoin || p.JoinType == logicalop.AntiLeftOuterSemiJoin { colsNeedResolving-- } // To avoid that two plan shares the same column slice. @@ -187,8 +189,8 @@ func (p *PhysicalMergeJoin) ResolveIndices() (err error) { if err != nil { return err } - lSchema := p.children[0].Schema() - rSchema := p.children[1].Schema() + lSchema := p.Children()[0].Schema() + rSchema := p.Children()[1].Schema() for i, col := range p.LeftJoinKeys { newKey, err := col.ResolveIndices(lSchema) if err != nil { @@ -227,7 +229,7 @@ func (p *PhysicalMergeJoin) ResolveIndices() (err error) { colsNeedResolving := p.schema.Len() // The last output column of this two join is the generated column to indicate whether the row is matched or not. - if p.JoinType == LeftOuterSemiJoin || p.JoinType == AntiLeftOuterSemiJoin { + if p.JoinType == logicalop.LeftOuterSemiJoin || p.JoinType == logicalop.AntiLeftOuterSemiJoin { colsNeedResolving-- } // To avoid that two plan shares the same column slice. @@ -263,15 +265,15 @@ func (p *PhysicalIndexJoin) ResolveIndices() (err error) { if err != nil { return err } - lSchema := p.children[0].Schema() - rSchema := p.children[1].Schema() + lSchema := p.Children()[0].Schema() + rSchema := p.Children()[1].Schema() for i := range p.InnerJoinKeys { - newOuterKey, err := p.OuterJoinKeys[i].ResolveIndices(p.children[1-p.InnerChildIdx].Schema()) + newOuterKey, err := p.OuterJoinKeys[i].ResolveIndices(p.Children()[1-p.InnerChildIdx].Schema()) if err != nil { return err } p.OuterJoinKeys[i] = newOuterKey.(*expression.Column) - newInnerKey, err := p.InnerJoinKeys[i].ResolveIndices(p.children[p.InnerChildIdx].Schema()) + newInnerKey, err := p.InnerJoinKeys[i].ResolveIndices(p.Children()[p.InnerChildIdx].Schema()) if err != nil { return err } @@ -297,12 +299,12 @@ func (p *PhysicalIndexJoin) ResolveIndices() (err error) { } } if p.CompareFilters != nil { - err = p.CompareFilters.resolveIndices(p.children[1-p.InnerChildIdx].Schema()) + err = p.CompareFilters.resolveIndices(p.Children()[1-p.InnerChildIdx].Schema()) if err != nil { return err } for i := range p.CompareFilters.affectedColSchema.Columns { - resolvedCol, err1 := p.CompareFilters.affectedColSchema.Columns[i].ResolveIndices(p.children[1-p.InnerChildIdx].Schema()) + resolvedCol, err1 := p.CompareFilters.affectedColSchema.Columns[i].ResolveIndices(p.Children()[1-p.InnerChildIdx].Schema()) if err1 != nil { return err1 } @@ -310,11 +312,11 @@ func (p *PhysicalIndexJoin) ResolveIndices() (err error) { } } for i := range p.OuterHashKeys { - outerKey, err := p.OuterHashKeys[i].ResolveIndices(p.children[1-p.InnerChildIdx].Schema()) + outerKey, err := p.OuterHashKeys[i].ResolveIndices(p.Children()[1-p.InnerChildIdx].Schema()) if err != nil { return err } - innerKey, err := p.InnerHashKeys[i].ResolveIndices(p.children[p.InnerChildIdx].Schema()) + innerKey, err := p.InnerHashKeys[i].ResolveIndices(p.Children()[p.InnerChildIdx].Schema()) if err != nil { return err } @@ -323,7 +325,7 @@ func (p *PhysicalIndexJoin) ResolveIndices() (err error) { colsNeedResolving := p.schema.Len() // The last output column of this two join is the generated column to indicate whether the row is matched or not. - if p.JoinType == LeftOuterSemiJoin || p.JoinType == AntiLeftOuterSemiJoin { + if p.JoinType == logicalop.LeftOuterSemiJoin || p.JoinType == logicalop.AntiLeftOuterSemiJoin { colsNeedResolving-- } // To avoid that two plan shares the same column slice. @@ -356,17 +358,17 @@ func (p *PhysicalIndexJoin) ResolveIndices() (err error) { // ResolveIndices implements Plan interface. func (p *PhysicalUnionScan) ResolveIndices() (err error) { - err = p.basePhysicalPlan.ResolveIndices() + err = p.BasePhysicalPlan.ResolveIndices() if err != nil { return err } for i, expr := range p.Conditions { - p.Conditions[i], err = expr.ResolveIndices(p.children[0].Schema()) + p.Conditions[i], err = expr.ResolveIndices(p.Children()[0].Schema()) if err != nil { return err } } - resolvedHandleCol, err := p.HandleCols.ResolveIndices(p.children[0].Schema()) + resolvedHandleCol, err := p.HandleCols.ResolveIndices(p.Children()[0].Schema()) if err != nil { return err } @@ -484,15 +486,15 @@ func (p *PhysicalIndexMergeReader) ResolveIndices() (err error) { // ResolveIndices implements Plan interface. func (p *PhysicalSelection) ResolveIndices() (err error) { - err = p.basePhysicalPlan.ResolveIndices() + err = p.BasePhysicalPlan.ResolveIndices() if err != nil { return err } for i, expr := range p.Conditions { - p.Conditions[i], err = expr.ResolveIndices(p.children[0].Schema()) + p.Conditions[i], err = expr.ResolveIndices(p.Children()[0].Schema()) if err != nil { // Check if there is duplicate virtual expression column matched. - newCond, isOk := expr.ResolveIndicesByVirtualExpr(p.SCtx().GetExprCtx().GetEvalCtx(), p.children[0].Schema()) + newCond, isOk := expr.ResolveIndicesByVirtualExpr(p.SCtx().GetExprCtx().GetEvalCtx(), p.Children()[0].Schema()) if isOk { p.Conditions[i] = newCond continue @@ -506,7 +508,7 @@ func (p *PhysicalSelection) ResolveIndices() (err error) { // ResolveIndicesItself resolve indices for PhysicalPlan itself func (p *PhysicalExchangeSender) ResolveIndicesItself() (err error) { for i, col := range p.HashCols { - colExpr, err1 := col.Col.ResolveIndices(p.children[0].Schema()) + colExpr, err1 := col.Col.ResolveIndices(p.Children()[0].Schema()) if err1 != nil { return err1 } @@ -517,7 +519,7 @@ func (p *PhysicalExchangeSender) ResolveIndicesItself() (err error) { // ResolveIndices implements Plan interface. func (p *PhysicalExchangeSender) ResolveIndices() (err error) { - err = p.basePhysicalPlan.ResolveIndices() + err = p.BasePhysicalPlan.ResolveIndices() if err != nil { return err } @@ -530,7 +532,7 @@ func (p *PhysicalExpand) ResolveIndicesItself() (err error) { for _, gs := range p.GroupingSets { for _, groupingExprs := range gs { for k, groupingExpr := range groupingExprs { - gExpr, err := groupingExpr.ResolveIndices(p.children[0].Schema()) + gExpr, err := groupingExpr.ResolveIndices(p.Children()[0].Schema()) if err != nil { return err } @@ -542,7 +544,7 @@ func (p *PhysicalExpand) ResolveIndicesItself() (err error) { for i, oneLevel := range p.LevelExprs { for j, expr := range oneLevel { // expr in expand level-projections only contains column ref and literal constant projection. - p.LevelExprs[i][j], err = expr.ResolveIndices(p.children[0].Schema()) + p.LevelExprs[i][j], err = expr.ResolveIndices(p.Children()[0].Schema()) if err != nil { return err } @@ -568,20 +570,20 @@ func (p *basePhysicalAgg) ResolveIndices() (err error) { } for _, aggFun := range p.AggFuncs { for i, arg := range aggFun.Args { - aggFun.Args[i], err = arg.ResolveIndices(p.children[0].Schema()) + aggFun.Args[i], err = arg.ResolveIndices(p.Children()[0].Schema()) if err != nil { return err } } for _, byItem := range aggFun.OrderByItems { - byItem.Expr, err = byItem.Expr.ResolveIndices(p.children[0].Schema()) + byItem.Expr, err = byItem.Expr.ResolveIndices(p.Children()[0].Schema()) if err != nil { return err } } } for i, item := range p.GroupByItems { - p.GroupByItems[i], err = item.ResolveIndices(p.children[0].Schema()) + p.GroupByItems[i], err = item.ResolveIndices(p.Children()[0].Schema()) if err != nil { return err } @@ -589,14 +591,14 @@ func (p *basePhysicalAgg) ResolveIndices() (err error) { return } -func resolveIndicesForSort(p basePhysicalPlan) (err error) { +func resolveIndicesForSort(p physicalop.BasePhysicalPlan) (err error) { err = p.ResolveIndices() if err != nil { return err } var byItems []*util.ByItems - switch x := p.self.(type) { + switch x := p.Self.(type) { case *PhysicalSort: byItems = x.ByItems case *NominalSort: @@ -615,12 +617,12 @@ func resolveIndicesForSort(p basePhysicalPlan) (err error) { // ResolveIndices implements Plan interface. func (p *PhysicalSort) ResolveIndices() (err error) { - return resolveIndicesForSort(p.basePhysicalPlan) + return resolveIndicesForSort(p.BasePhysicalPlan) } // ResolveIndices implements Plan interface. func (p *NominalSort) ResolveIndices() (err error) { - return resolveIndicesForSort(p.basePhysicalPlan) + return resolveIndicesForSort(p.BasePhysicalPlan) } // ResolveIndices implements Plan interface. @@ -631,21 +633,21 @@ func (p *PhysicalWindow) ResolveIndices() (err error) { } for i := 0; i < len(p.Schema().Columns)-len(p.WindowFuncDescs); i++ { col := p.Schema().Columns[i] - newCol, err := col.ResolveIndices(p.children[0].Schema()) + newCol, err := col.ResolveIndices(p.Children()[0].Schema()) if err != nil { return err } p.Schema().Columns[i] = newCol.(*expression.Column) } for i, item := range p.PartitionBy { - newCol, err := item.Col.ResolveIndices(p.children[0].Schema()) + newCol, err := item.Col.ResolveIndices(p.Children()[0].Schema()) if err != nil { return err } p.PartitionBy[i].Col = newCol.(*expression.Column) } for i, item := range p.OrderBy { - newCol, err := item.Col.ResolveIndices(p.children[0].Schema()) + newCol, err := item.Col.ResolveIndices(p.Children()[0].Schema()) if err != nil { return err } @@ -653,7 +655,7 @@ func (p *PhysicalWindow) ResolveIndices() (err error) { } for _, desc := range p.WindowFuncDescs { for i, arg := range desc.Args { - desc.Args[i], err = arg.ResolveIndices(p.children[0].Schema()) + desc.Args[i], err = arg.ResolveIndices(p.Children()[0].Schema()) if err != nil { return err } @@ -661,13 +663,13 @@ func (p *PhysicalWindow) ResolveIndices() (err error) { } if p.Frame != nil { for i := range p.Frame.Start.CalcFuncs { - p.Frame.Start.CalcFuncs[i], err = p.Frame.Start.CalcFuncs[i].ResolveIndices(p.children[0].Schema()) + p.Frame.Start.CalcFuncs[i], err = p.Frame.Start.CalcFuncs[i].ResolveIndices(p.Children()[0].Schema()) if err != nil { return err } } for i := range p.Frame.End.CalcFuncs { - p.Frame.End.CalcFuncs[i], err = p.Frame.End.CalcFuncs[i].ResolveIndices(p.children[0].Schema()) + p.Frame.End.CalcFuncs[i], err = p.Frame.End.CalcFuncs[i].ResolveIndices(p.Children()[0].Schema()) if err != nil { return err } @@ -678,7 +680,7 @@ func (p *PhysicalWindow) ResolveIndices() (err error) { // ResolveIndices implements Plan interface. func (p *PhysicalShuffle) ResolveIndices() (err error) { - err = p.basePhysicalPlan.ResolveIndices() + err = p.BasePhysicalPlan.ResolveIndices() if err != nil { return err } @@ -698,18 +700,18 @@ func (p *PhysicalShuffle) ResolveIndices() (err error) { // ResolveIndices implements Plan interface. func (p *PhysicalTopN) ResolveIndices() (err error) { - err = p.basePhysicalPlan.ResolveIndices() + err = p.BasePhysicalPlan.ResolveIndices() if err != nil { return err } for _, item := range p.ByItems { - item.Expr, err = item.Expr.ResolveIndices(p.children[0].Schema()) + item.Expr, err = item.Expr.ResolveIndices(p.Children()[0].Schema()) if err != nil { return err } } for i, item := range p.PartitionBy { - newCol, err := item.Col.ResolveIndices(p.children[0].Schema()) + newCol, err := item.Col.ResolveIndices(p.Children()[0].Schema()) if err != nil { return err } @@ -720,12 +722,12 @@ func (p *PhysicalTopN) ResolveIndices() (err error) { // ResolveIndices implements Plan interface. func (p *PhysicalLimit) ResolveIndices() (err error) { - err = p.basePhysicalPlan.ResolveIndices() + err = p.BasePhysicalPlan.ResolveIndices() if err != nil { return err } for i, item := range p.PartitionBy { - newCol, err := item.Col.ResolveIndices(p.children[0].Schema()) + newCol, err := item.Col.ResolveIndices(p.Children()[0].Schema()) if err != nil { return err } @@ -741,8 +743,8 @@ func (p *PhysicalLimit) ResolveIndices() (err error) { // We don't use the normal ResolvIndices here since there might be duplicate columns in the schema. // e.g. The schema of child_0 is [col0, col0, col1] // ResolveIndices will only resolve all col0 reference of the current plan to the first col0. - for i, j := 0, 0; i < p.schema.Len() && j < p.children[0].Schema().Len(); { - if !p.schema.Columns[i].EqualColumn(p.children[0].Schema().Columns[j]) { + for i, j := 0, 0; i < p.schema.Len() && j < p.Children()[0].Schema().Len(); { + if !p.schema.Columns[i].EqualColumn(p.Children()[0].Schema().Columns[j]) { j++ continue } @@ -772,7 +774,7 @@ func (p *PhysicalApply) ResolveIndices() (err error) { } p.OuterSchema = make([]*expression.CorrelatedColumn, 0, len(dedupCols)) for _, col := range dedupCols { - newCol, err := col.Column.ResolveIndices(p.children[0].Schema()) + newCol, err := col.Column.ResolveIndices(p.Children()[0].Schema()) if err != nil { return err } @@ -783,7 +785,7 @@ func (p *PhysicalApply) ResolveIndices() (err error) { // hash join on the fact that equal conditions are evaluated against the join result, // so columns from equal conditions come from merged schema of children, instead of // single child's schema. - joinedSchema := expression.MergeSchema(p.children[0].Schema(), p.children[1].Schema()) + joinedSchema := expression.MergeSchema(p.Children()[0].Schema(), p.Children()[1].Schema()) for i, cond := range p.PhysicalHashJoin.EqualConditions { newSf, err := cond.ResolveIndices(joinedSchema) if err != nil { @@ -841,13 +843,13 @@ func (p *Update) ResolveIndices() (err error) { // ResolveIndices implements Plan interface. func (p *PhysicalLock) ResolveIndices() (err error) { - err = p.basePhysicalPlan.ResolveIndices() + err = p.BasePhysicalPlan.ResolveIndices() if err != nil { return err } for i, cols := range p.TblID2Handle { for j, col := range cols { - resolvedCol, err := col.ResolveIndices(p.children[0].Schema()) + resolvedCol, err := col.ResolveIndices(p.Children()[0].Schema()) if err != nil { return err } @@ -898,21 +900,10 @@ func (p *Insert) ResolveIndices() (err error) { } func (p *physicalSchemaProducer) ResolveIndices() (err error) { - err = p.basePhysicalPlan.ResolveIndices() + err = p.BasePhysicalPlan.ResolveIndices() return err } func (*baseSchemaProducer) ResolveIndices() (err error) { return } - -// ResolveIndices implements Plan interface. -func (p *basePhysicalPlan) ResolveIndices() (err error) { - for _, child := range p.children { - err = child.ResolveIndices() - if err != nil { - return err - } - } - return -} diff --git a/pkg/planner/core/rule/BUILD.bazel b/pkg/planner/core/rule/BUILD.bazel new file mode 100644 index 0000000000000..e37b3eaaf3852 --- /dev/null +++ b/pkg/planner/core/rule/BUILD.bazel @@ -0,0 +1,18 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "rule", + srcs = [ + "rule_build_key_info.go", + "rule_constant_propagation.go", + "rule_init.go", + ], + importpath = "github.com/pingcap/tidb/pkg/planner/core/rule", + visibility = ["//visibility:public"], + deps = [ + "//pkg/expression", + "//pkg/planner/core/base", + "//pkg/planner/core/rule/util", + "//pkg/planner/util/optimizetrace", + ], +) diff --git a/pkg/planner/core/rule/rule_build_key_info.go b/pkg/planner/core/rule/rule_build_key_info.go new file mode 100644 index 0000000000000..b5231c90bf14d --- /dev/null +++ b/pkg/planner/core/rule/rule_build_key_info.go @@ -0,0 +1,54 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package rule + +import ( + "context" + + "github.com/pingcap/tidb/pkg/expression" + "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" +) + +// BuildKeySolver is used to build key info for logical plan. +type BuildKeySolver struct{} + +// *************************** start implementation of LogicalOptRule interface *************************** + +// Name implements base.LogicalOptRule.<0th> interface. +func (*BuildKeySolver) Name() string { + return "build_keys" +} + +// Optimize implements base.LogicalOptRule.<1st> interface. +func (*BuildKeySolver) Optimize(_ context.Context, p base.LogicalPlan, _ *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { + planChanged := false + buildKeyInfo(p) + return p, planChanged, nil +} + +// **************************** end implementation of LogicalOptRule interface **************************** + +// buildKeyInfo recursively calls base.LogicalPlan's BuildKeyInfo method. +func buildKeyInfo(lp base.LogicalPlan) { + for _, child := range lp.Children() { + buildKeyInfo(child) + } + childSchema := make([]*expression.Schema, len(lp.Children())) + for i, child := range lp.Children() { + childSchema[i] = child.Schema() + } + lp.BuildKeyInfo(lp.Schema(), childSchema) +} diff --git a/pkg/planner/core/rule_constant_propagation.go b/pkg/planner/core/rule/rule_constant_propagation.go similarity index 70% rename from pkg/planner/core/rule_constant_propagation.go rename to pkg/planner/core/rule/rule_constant_propagation.go index 437c085d801e9..a3c8c16e0821b 100644 --- a/pkg/planner/core/rule_constant_propagation.go +++ b/pkg/planner/core/rule/rule_constant_propagation.go @@ -12,18 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -package core +package rule import ( "context" - "github.com/pingcap/tidb/pkg/expression" - "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/planner/core/base" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" ) -// constantPropagationSolver can support constant propagated cross-query block. +// ConstantPropagationSolver can support constant propagated cross-query block. // This is a logical optimize rule. // It mainly used for the sub query in FromList and propagated the constant predicate // from sub query to outer query. @@ -41,9 +39,10 @@ import ( // Steps 1 and 2 will be called recursively // 3. (ppdSolver in rule_predicate_push_down.go) Push down constant predicate // and propagate constant predicate into other side. 't.id>1' -type constantPropagationSolver struct { +type ConstantPropagationSolver struct { } +// Optimize implements base.LogicalOptRule.<0th> interface. // **Preorder traversal** of logic tree // Step1: constant propagation current plan node // Step2: optimize all of child @@ -52,7 +51,7 @@ type constantPropagationSolver struct { // which is mainly implemented in the interface "constantPropagation" of LogicalPlan. // Currently only the Logical Join implements this function. (Used for the subquery in FROM List) // In the future, the Logical Apply will implements this function. (Used for the subquery in WHERE or SELECT list) -func (cp *constantPropagationSolver) optimize(_ context.Context, p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { +func (cp *ConstantPropagationSolver) Optimize(_ context.Context, p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { planChanged := false // constant propagation root plan newRoot := p.ConstantPropagation(nil, 0, opt) @@ -69,7 +68,7 @@ func (cp *constantPropagationSolver) optimize(_ context.Context, p base.LogicalP } // execOptimize optimize constant propagation exclude root plan node -func (cp *constantPropagationSolver) execOptimize(currentPlan base.LogicalPlan, parentPlan base.LogicalPlan, currentChildIdx int, opt *optimizetrace.LogicalOptimizeOp) { +func (cp *ConstantPropagationSolver) execOptimize(currentPlan base.LogicalPlan, parentPlan base.LogicalPlan, currentChildIdx int, opt *optimizetrace.LogicalOptimizeOp) { if parentPlan == nil { // Attention: The function 'execOptimize' could not handle the root plan, so the parent plan could not be nil. return @@ -82,29 +81,7 @@ func (cp *constantPropagationSolver) execOptimize(currentPlan base.LogicalPlan, } } -func (*constantPropagationSolver) name() string { +// Name implements base.LogicalOptRule.<1st> interface. +func (*ConstantPropagationSolver) Name() string { return "constant_propagation" } - -// validComparePredicate checks if the predicate is an expression like [column '>'|'>='|'<'|'<='|'=' constant]. -// return param1: return true, if the predicate is a compare constant predicate. -// return param2: return the column side of predicate. -func validCompareConstantPredicate(ctx expression.EvalContext, candidatePredicate expression.Expression) bool { - scalarFunction, ok := candidatePredicate.(*expression.ScalarFunction) - if !ok { - return false - } - if scalarFunction.FuncName.L != ast.GT && scalarFunction.FuncName.L != ast.GE && - scalarFunction.FuncName.L != ast.LT && scalarFunction.FuncName.L != ast.LE && - scalarFunction.FuncName.L != ast.EQ { - return false - } - column, _ := expression.ValidCompareConstantPredicateHelper(ctx, scalarFunction, true) - if column == nil { - column, _ = expression.ValidCompareConstantPredicateHelper(ctx, scalarFunction, false) - } - if column == nil { - return false - } - return true -} diff --git a/pkg/ddl/util/callback/callback_test.go b/pkg/planner/core/rule/rule_init.go similarity index 56% rename from pkg/ddl/util/callback/callback_test.go rename to pkg/planner/core/rule/rule_init.go index d70e9d26a058e..d10d7f754c429 100644 --- a/pkg/ddl/util/callback/callback_test.go +++ b/pkg/planner/core/rule/rule_init.go @@ -1,4 +1,4 @@ -// Copyright 2023 PingCAP, Inc. +// Copyright 2024 PingCAP, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,16 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -package callback +package rule -import ( - "testing" +import "github.com/pingcap/tidb/pkg/planner/core/rule/util" - "github.com/pingcap/tidb/pkg/ddl" -) +// rule/pkg should rely on operator/pkg to do type check and dig in and out, +// rule/util doesn't have to rely on rule/pkg, but it can be put with rule +// handling logic, and be referenced by operator/pkg. +// the core usage only care and call about the rule/pkg and operator/pkg. -func TestCallback(t *testing.T) { - cb := &ddl.BaseCallback{} - cb.OnJobRunBefore(nil) - cb.OnJobUpdated(nil) +func init() { + util.BuildKeyInfoPortal = buildKeyInfo } diff --git a/pkg/planner/core/rule/util/BUILD.bazel b/pkg/planner/core/rule/util/BUILD.bazel new file mode 100644 index 0000000000000..0aa9d23ab8723 --- /dev/null +++ b/pkg/planner/core/rule/util/BUILD.bazel @@ -0,0 +1,17 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "util", + srcs = [ + "build_key_info_misc.go", + "misc.go", + ], + importpath = "github.com/pingcap/tidb/pkg/planner/core/rule/util", + visibility = ["//visibility:public"], + deps = [ + "//pkg/expression", + "//pkg/parser/model", + "//pkg/parser/mysql", + "//pkg/planner/core/base", + ], +) diff --git a/pkg/planner/core/rule_build_key_info.go b/pkg/planner/core/rule/util/build_key_info_misc.go similarity index 66% rename from pkg/planner/core/rule_build_key_info.go rename to pkg/planner/core/rule/util/build_key_info_misc.go index f96271fe6ae2a..8d566868a54e9 100644 --- a/pkg/planner/core/rule_build_key_info.go +++ b/pkg/planner/core/rule/util/build_key_info_misc.go @@ -1,4 +1,4 @@ -// Copyright 2017 PingCAP, Inc. +// Copyright 2024 PingCAP, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,41 +12,18 @@ // See the License for the specific language governing permissions and // limitations under the License. -package core +package util import ( - "context" - "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/planner/core/base" - "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" ) -type buildKeySolver struct{} - -func (*buildKeySolver) optimize(_ context.Context, p base.LogicalPlan, _ *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { - planChanged := false - buildKeyInfo(p) - return p, planChanged, nil -} - -// buildKeyInfo recursively calls base.LogicalPlan's BuildKeyInfo method. -func buildKeyInfo(lp base.LogicalPlan) { - for _, child := range lp.Children() { - buildKeyInfo(child) - } - childSchema := make([]*expression.Schema, len(lp.Children())) - for i, child := range lp.Children() { - childSchema[i] = child.Schema() - } - lp.BuildKeyInfo(lp.Schema(), childSchema) -} - -// If a condition is the form of (uniqueKey = constant) or (uniqueKey = Correlated column), it returns at most one row. -// This function will check it. -func checkMaxOneRowCond(eqColIDs map[int64]struct{}, childSchema *expression.Schema) bool { +// CheckMaxOneRowCond check if a condition is the form of (uniqueKey = constant) or (uniqueKey = +// Correlated column), it returns at most one row. +func CheckMaxOneRowCond(eqColIDs map[int64]struct{}, childSchema *expression.Schema) bool { if len(eqColIDs) == 0 { return false } @@ -70,8 +47,8 @@ func checkMaxOneRowCond(eqColIDs map[int64]struct{}, childSchema *expression.Sch return false } -// checkIndexCanBeKey checks whether an Index can be a Key in schema. -func checkIndexCanBeKey(idx *model.IndexInfo, columns []*model.ColumnInfo, schema *expression.Schema) (uniqueKey, newKey expression.KeyInfo) { +// CheckIndexCanBeKey checks whether an Index can be a Key in schema. +func CheckIndexCanBeKey(idx *model.IndexInfo, columns []*model.ColumnInfo, schema *expression.Schema) (uniqueKey, newKey expression.KeyInfo) { if !idx.Unique { return nil, nil } @@ -110,6 +87,5 @@ func checkIndexCanBeKey(idx *model.IndexInfo, columns []*model.ColumnInfo, schem return nil, nil } -func (*buildKeySolver) name() string { - return "build_keys" -} +// BuildKeyInfoPortal is a hook for other packages to build key info for logical plan. +var BuildKeyInfoPortal func(lp base.LogicalPlan) diff --git a/pkg/planner/core/rule/util/misc.go b/pkg/planner/core/rule/util/misc.go new file mode 100644 index 0000000000000..ca5f987da91c5 --- /dev/null +++ b/pkg/planner/core/rule/util/misc.go @@ -0,0 +1,43 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package util + +import ( + "github.com/pingcap/tidb/pkg/expression" +) + +// ResolveExprAndReplace replaces columns fields of expressions by children logical plans. +func ResolveExprAndReplace(origin expression.Expression, replace map[string]*expression.Column) { + switch expr := origin.(type) { + case *expression.Column: + ResolveColumnAndReplace(expr, replace) + case *expression.CorrelatedColumn: + ResolveColumnAndReplace(&expr.Column, replace) + case *expression.ScalarFunction: + for _, arg := range expr.GetArgs() { + ResolveExprAndReplace(arg, replace) + } + } +} + +// ResolveColumnAndReplace replaces columns fields of expressions by children logical plans. +func ResolveColumnAndReplace(origin *expression.Column, replace map[string]*expression.Column) { + dst := replace[string(origin.HashCode())] + if dst != nil { + retType, inOperand := origin.RetType, origin.InOperand + *origin = *dst + origin.RetType, origin.InOperand = retType, inOperand + } +} diff --git a/pkg/planner/core/rule_aggregation_elimination.go b/pkg/planner/core/rule_aggregation_elimination.go index d8be0e894dd6c..6b5a7796e81b8 100644 --- a/pkg/planner/core/rule_aggregation_elimination.go +++ b/pkg/planner/core/rule_aggregation_elimination.go @@ -24,11 +24,13 @@ import ( "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" "github.com/pingcap/tidb/pkg/types" ) -type aggregationEliminator struct { +// AggregationEliminator is used to eliminate aggregation grouped by unique key. +type AggregationEliminator struct { aggregationEliminateChecker } @@ -49,7 +51,7 @@ type aggregationEliminateChecker struct { // e.g. select min(b) from t group by a. If a is a unique key, then this sql is equal to `select b from t group by a`. // For count(expr), sum(expr), avg(expr), count(distinct expr, [expr...]) we may need to rewrite the expr. Details are shown below. // If we can eliminate agg successful, we return a projection. Else we return a nil pointer. -func (a *aggregationEliminateChecker) tryToEliminateAggregation(agg *LogicalAggregation, opt *optimizetrace.LogicalOptimizeOp) *LogicalProjection { +func (a *aggregationEliminateChecker) tryToEliminateAggregation(agg *logicalop.LogicalAggregation, opt *optimizetrace.LogicalOptimizeOp) *logicalop.LogicalProjection { for _, af := range agg.AggFuncs { // TODO(issue #9968): Actually, we can rewrite GROUP_CONCAT when all the // arguments it accepts are promised to be NOT-NULL. @@ -90,7 +92,7 @@ func (a *aggregationEliminateChecker) tryToEliminateAggregation(agg *LogicalAggr // tryToEliminateDistinct will eliminate distinct in the aggregation function if the aggregation args // have unique key column. see detail example in https://github.com/pingcap/tidb/issues/23436 -func (*aggregationEliminateChecker) tryToEliminateDistinct(agg *LogicalAggregation, opt *optimizetrace.LogicalOptimizeOp) { +func (*aggregationEliminateChecker) tryToEliminateDistinct(agg *logicalop.LogicalAggregation, opt *optimizetrace.LogicalOptimizeOp) { for _, af := range agg.AggFuncs { if af.HasDistinct { cols := make([]*expression.Column, 0, len(af.Args)) @@ -130,7 +132,7 @@ func (*aggregationEliminateChecker) tryToEliminateDistinct(agg *LogicalAggregati } } -func appendAggregationEliminateTraceStep(agg *LogicalAggregation, proj *LogicalProjection, uniqueKey expression.KeyInfo, opt *optimizetrace.LogicalOptimizeOp) { +func appendAggregationEliminateTraceStep(agg *logicalop.LogicalAggregation, proj *logicalop.LogicalProjection, uniqueKey expression.KeyInfo, opt *optimizetrace.LogicalOptimizeOp) { reason := func() string { return fmt.Sprintf("%s is a unique key", uniqueKey.String()) } @@ -141,7 +143,7 @@ func appendAggregationEliminateTraceStep(agg *LogicalAggregation, proj *LogicalP opt.AppendStepToCurrent(agg.ID(), agg.TP(), reason, action) } -func appendDistinctEliminateTraceStep(agg *LogicalAggregation, uniqueKey expression.KeyInfo, af *aggregation.AggFuncDesc, +func appendDistinctEliminateTraceStep(agg *logicalop.LogicalAggregation, uniqueKey expression.KeyInfo, af *aggregation.AggFuncDesc, opt *optimizetrace.LogicalOptimizeOp) { reason := func() string { return fmt.Sprintf("%s is a unique key", uniqueKey.String()) @@ -154,13 +156,13 @@ func appendDistinctEliminateTraceStep(agg *LogicalAggregation, uniqueKey express // CheckCanConvertAggToProj check whether a special old aggregation (which has already been pushed down) to projection. // link: issue#44795 -func CheckCanConvertAggToProj(agg *LogicalAggregation) bool { +func CheckCanConvertAggToProj(agg *logicalop.LogicalAggregation) bool { var mayNullSchema *expression.Schema - if join, ok := agg.Children()[0].(*LogicalJoin); ok { - if join.JoinType == LeftOuterJoin { + if join, ok := agg.Children()[0].(*logicalop.LogicalJoin); ok { + if join.JoinType == logicalop.LeftOuterJoin { mayNullSchema = join.Children()[1].Schema() } - if join.JoinType == RightOuterJoin { + if join.JoinType == logicalop.RightOuterJoin { mayNullSchema = join.Children()[0].Schema() } if mayNullSchema == nil { @@ -181,8 +183,8 @@ func CheckCanConvertAggToProj(agg *LogicalAggregation) bool { } // ConvertAggToProj convert aggregation to projection. -func ConvertAggToProj(agg *LogicalAggregation, schema *expression.Schema) (bool, *LogicalProjection) { - proj := LogicalProjection{ +func ConvertAggToProj(agg *logicalop.LogicalAggregation, schema *expression.Schema) (bool, *logicalop.LogicalProjection) { + proj := logicalop.LogicalProjection{ Exprs: make([]expression.Expression, 0, len(agg.AggFuncs)), }.Init(agg.SCtx(), agg.QueryBlockOffset()) for _, fun := range agg.AggFuncs { @@ -255,18 +257,19 @@ func wrapCastFunction(ctx expression.BuildContext, arg expression.Expression, ta return expression.BuildCastFunction(ctx, arg, targetTp) } -func (a *aggregationEliminator) optimize(ctx context.Context, p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { +// Optimize implements the base.LogicalOptRule.<0th> interface. +func (a *AggregationEliminator) Optimize(ctx context.Context, p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { planChanged := false newChildren := make([]base.LogicalPlan, 0, len(p.Children())) for _, child := range p.Children() { - newChild, planChanged, err := a.optimize(ctx, child, opt) + newChild, planChanged, err := a.Optimize(ctx, child, opt) if err != nil { return nil, planChanged, err } newChildren = append(newChildren, newChild) } p.SetChildren(newChildren...) - agg, ok := p.(*LogicalAggregation) + agg, ok := p.(*logicalop.LogicalAggregation) if !ok { return p, planChanged, nil } @@ -277,6 +280,7 @@ func (a *aggregationEliminator) optimize(ctx context.Context, p base.LogicalPlan return p, planChanged, nil } -func (*aggregationEliminator) name() string { +// Name implements the base.LogicalOptRule.<1st> interface. +func (*AggregationEliminator) Name() string { return "aggregation_eliminate" } diff --git a/pkg/planner/core/rule_aggregation_push_down.go b/pkg/planner/core/rule_aggregation_push_down.go index d52fa56b15f2d..e172fd967c048 100644 --- a/pkg/planner/core/rule_aggregation_push_down.go +++ b/pkg/planner/core/rule_aggregation_push_down.go @@ -25,12 +25,15 @@ import ( "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" + ruleutil "github.com/pingcap/tidb/pkg/planner/core/rule/util" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" "github.com/pingcap/tidb/pkg/types" ) -type aggregationPushDownSolver struct { +// AggregationPushDownSolver is a rule that pushes down aggregation functions to the child of LogicalJoin. +type AggregationPushDownSolver struct { aggregationEliminateChecker } @@ -41,7 +44,7 @@ type aggregationPushDownSolver struct { // It's easy to see that max, min, first row is decomposable, no matter whether it's distinct, but sum(distinct) and // count(distinct) is not. // Currently we don't support avg and concat. -func (*aggregationPushDownSolver) isDecomposableWithJoin(fun *aggregation.AggFuncDesc) bool { +func (*AggregationPushDownSolver) isDecomposableWithJoin(fun *aggregation.AggFuncDesc) bool { if len(fun.OrderByItems) > 0 { return false } @@ -58,7 +61,7 @@ func (*aggregationPushDownSolver) isDecomposableWithJoin(fun *aggregation.AggFun } } -func (*aggregationPushDownSolver) isDecomposableWithUnion(fun *aggregation.AggFuncDesc) bool { +func (*AggregationPushDownSolver) isDecomposableWithUnion(fun *aggregation.AggFuncDesc) bool { if len(fun.OrderByItems) > 0 { return false } @@ -76,7 +79,7 @@ func (*aggregationPushDownSolver) isDecomposableWithUnion(fun *aggregation.AggFu // getAggFuncChildIdx gets which children it belongs to. // 0 stands for left, 1 stands for right, -1 stands for both, 2 stands for neither (e.g. count(*), sum(1) ...) -func (*aggregationPushDownSolver) getAggFuncChildIdx(aggFunc *aggregation.AggFuncDesc, lSchema, rSchema *expression.Schema) int { +func (*AggregationPushDownSolver) getAggFuncChildIdx(aggFunc *aggregation.AggFuncDesc, lSchema, rSchema *expression.Schema) int { fromLeft, fromRight := false, false var cols []*expression.Column cols = expression.ExtractColumnsFromExpressions(cols, aggFunc.Args, nil) @@ -101,7 +104,7 @@ func (*aggregationPushDownSolver) getAggFuncChildIdx(aggFunc *aggregation.AggFun // collectAggFuncs collects all aggregate functions and splits them into two parts: "leftAggFuncs" and "rightAggFuncs" whose // arguments are all from left child or right child separately. If some aggregate functions have the arguments that have // columns both from left and right children, the whole aggregation is forbidden to push down. -func (a *aggregationPushDownSolver) collectAggFuncs(agg *LogicalAggregation, join *LogicalJoin) (valid bool, leftAggFuncs, rightAggFuncs []*aggregation.AggFuncDesc) { +func (a *AggregationPushDownSolver) collectAggFuncs(agg *logicalop.LogicalAggregation, join *logicalop.LogicalJoin) (valid bool, leftAggFuncs, rightAggFuncs []*aggregation.AggFuncDesc) { valid = true leftChild := join.Children()[0] rightChild := join.Children()[1] @@ -112,21 +115,21 @@ func (a *aggregationPushDownSolver) collectAggFuncs(agg *LogicalAggregation, joi index := a.getAggFuncChildIdx(aggFunc, leftChild.Schema(), rightChild.Schema()) switch index { case 0: - if join.JoinType == RightOuterJoin && !a.checkAllArgsColumn(aggFunc) { + if join.JoinType == logicalop.RightOuterJoin && !a.checkAllArgsColumn(aggFunc) { return false, nil, nil } leftAggFuncs = append(leftAggFuncs, aggFunc) case 1: - if join.JoinType == LeftOuterJoin && !a.checkAllArgsColumn(aggFunc) { + if join.JoinType == logicalop.LeftOuterJoin && !a.checkAllArgsColumn(aggFunc) { return false, nil, nil } rightAggFuncs = append(rightAggFuncs, aggFunc) case 2: // arguments are constant switch join.JoinType { - case LeftOuterJoin: + case logicalop.LeftOuterJoin: leftAggFuncs = append(leftAggFuncs, aggFunc) - case RightOuterJoin: + case logicalop.RightOuterJoin: rightAggFuncs = append(rightAggFuncs, aggFunc) default: // either left or right is fine, ideally we'd better put this to the hash build side @@ -144,7 +147,7 @@ func (a *aggregationPushDownSolver) collectAggFuncs(agg *LogicalAggregation, joi // query should be "SELECT SUM(B.agg) FROM A, (SELECT SUM(id) as agg, c1, c2, c3 FROM B GROUP BY id, c1, c2, c3) as B // WHERE A.c1 = B.c1 AND A.c2 != B.c2 GROUP BY B.c3". As you see, all the columns appearing in join-conditions should be // treated as group by columns in join subquery. -func (a *aggregationPushDownSolver) collectGbyCols(agg *LogicalAggregation, join *LogicalJoin) (leftGbyCols, rightGbyCols []*expression.Column) { +func (a *AggregationPushDownSolver) collectGbyCols(agg *logicalop.LogicalAggregation, join *logicalop.LogicalJoin) (leftGbyCols, rightGbyCols []*expression.Column) { leftChild := join.Children()[0] ctx := agg.SCtx() for _, gbyExpr := range agg.GroupByItems { @@ -183,7 +186,7 @@ func (a *aggregationPushDownSolver) collectGbyCols(agg *LogicalAggregation, join return } -func (a *aggregationPushDownSolver) splitAggFuncsAndGbyCols(agg *LogicalAggregation, join *LogicalJoin) (valid bool, +func (a *AggregationPushDownSolver) splitAggFuncsAndGbyCols(agg *logicalop.LogicalAggregation, join *logicalop.LogicalJoin) (valid bool, leftAggFuncs, rightAggFuncs []*aggregation.AggFuncDesc, leftGbyCols, rightGbyCols []*expression.Column) { valid, leftAggFuncs, rightAggFuncs = a.collectAggFuncs(agg, join) @@ -195,7 +198,7 @@ func (a *aggregationPushDownSolver) splitAggFuncsAndGbyCols(agg *LogicalAggregat } // addGbyCol adds a column to gbyCols. If a group by column has existed, it will not be added repeatedly. -func (*aggregationPushDownSolver) addGbyCol(ctx base.PlanContext, gbyCols []*expression.Column, cols ...*expression.Column) []*expression.Column { +func (*AggregationPushDownSolver) addGbyCol(ctx base.PlanContext, gbyCols []*expression.Column, cols ...*expression.Column) []*expression.Column { for _, c := range cols { duplicate := false for _, gbyCol := range gbyCols { @@ -212,13 +215,13 @@ func (*aggregationPushDownSolver) addGbyCol(ctx base.PlanContext, gbyCols []*exp } // checkValidJoin checks if this join should be pushed across. -func (*aggregationPushDownSolver) checkValidJoin(join *LogicalJoin) bool { - return join.JoinType == InnerJoin || join.JoinType == LeftOuterJoin || join.JoinType == RightOuterJoin +func (*AggregationPushDownSolver) checkValidJoin(join *logicalop.LogicalJoin) bool { + return join.JoinType == logicalop.InnerJoin || join.JoinType == logicalop.LeftOuterJoin || join.JoinType == logicalop.RightOuterJoin } // decompose splits an aggregate function to two parts: a final mode function and a partial mode function. Currently // there are no differences between partial mode and complete mode, so we can confuse them. -func (*aggregationPushDownSolver) decompose(ctx base.PlanContext, aggFunc *aggregation.AggFuncDesc, +func (*AggregationPushDownSolver) decompose(ctx base.PlanContext, aggFunc *aggregation.AggFuncDesc, schema *expression.Schema, nullGenerating bool) ([]*aggregation.AggFuncDesc, *expression.Schema) { // Result is a slice because avg should be decomposed to sum and count. Currently we don't process this case. result := []*aggregation.AggFuncDesc{aggFunc.Clone()} @@ -250,14 +253,14 @@ func (*aggregationPushDownSolver) decompose(ctx base.PlanContext, aggFunc *aggre // tryToPushDownAgg tries to push down an aggregate function into a join path. If all aggFuncs are first row, we won't // process it temporarily. If not, We will add additional group by columns and first row functions. We make a new aggregation operator. // If the pushed aggregation is grouped by unique key, it's no need to push it down. -func (a *aggregationPushDownSolver) tryToPushDownAgg(oldAgg *LogicalAggregation, aggFuncs []*aggregation.AggFuncDesc, gbyCols []*expression.Column, - join *LogicalJoin, childIdx int, blockOffset int, opt *optimizetrace.LogicalOptimizeOp) (_ base.LogicalPlan, err error) { +func (a *AggregationPushDownSolver) tryToPushDownAgg(oldAgg *logicalop.LogicalAggregation, aggFuncs []*aggregation.AggFuncDesc, gbyCols []*expression.Column, + join *logicalop.LogicalJoin, childIdx int, blockOffset int, opt *optimizetrace.LogicalOptimizeOp) (_ base.LogicalPlan, err error) { child := join.Children()[childIdx] if aggregation.IsAllFirstRow(aggFuncs) { return child, nil } // If the join is multiway-join, we forbid pushing down. - if _, ok := join.Children()[childIdx].(*LogicalJoin); ok { + if _, ok := join.Children()[childIdx].(*logicalop.LogicalJoin); ok { return child, nil } tmpSchema := expression.NewSchema(gbyCols...) @@ -266,8 +269,8 @@ func (a *aggregationPushDownSolver) tryToPushDownAgg(oldAgg *LogicalAggregation, return child, nil } } - nullGenerating := (join.JoinType == LeftOuterJoin && childIdx == 1) || - (join.JoinType == RightOuterJoin && childIdx == 0) + nullGenerating := (join.JoinType == logicalop.LeftOuterJoin && childIdx == 1) || + (join.JoinType == logicalop.RightOuterJoin && childIdx == 0) agg, err := a.makeNewAgg(join.SCtx(), aggFuncs, gbyCols, oldAgg.PreferAggType, oldAgg.PreferAggToCop, blockOffset, nullGenerating) if err != nil { return nil, err @@ -280,7 +283,7 @@ func (a *aggregationPushDownSolver) tryToPushDownAgg(oldAgg *LogicalAggregation, Value: types.NewDatum(0), RetType: types.NewFieldType(mysql.TypeLong)}} } - if (childIdx == 0 && join.JoinType == RightOuterJoin) || (childIdx == 1 && join.JoinType == LeftOuterJoin) { + if (childIdx == 0 && join.JoinType == logicalop.RightOuterJoin) || (childIdx == 1 && join.JoinType == logicalop.LeftOuterJoin) { var existsDefaultValues bool join.DefaultValues, existsDefaultValues = a.getDefaultValues(agg) if !existsDefaultValues { @@ -291,7 +294,7 @@ func (a *aggregationPushDownSolver) tryToPushDownAgg(oldAgg *LogicalAggregation, return agg, nil } -func (*aggregationPushDownSolver) getDefaultValues(agg *LogicalAggregation) ([]types.Datum, bool) { +func (*AggregationPushDownSolver) getDefaultValues(agg *logicalop.LogicalAggregation) ([]types.Datum, bool) { defaultValues := make([]types.Datum, 0, agg.Schema().Len()) for _, aggFunc := range agg.AggFuncs { value, existsDefaultValue := aggFunc.EvalNullValueInOuterJoin(agg.SCtx().GetExprCtx(), agg.Children()[0].Schema()) @@ -303,7 +306,7 @@ func (*aggregationPushDownSolver) getDefaultValues(agg *LogicalAggregation) ([]t return defaultValues, true } -func (*aggregationPushDownSolver) checkAnyCountAndSum(aggFuncs []*aggregation.AggFuncDesc) bool { +func (*AggregationPushDownSolver) checkAnyCountAndSum(aggFuncs []*aggregation.AggFuncDesc) bool { for _, fun := range aggFuncs { if fun.Name == ast.AggFuncSum || fun.Name == ast.AggFuncCount { return true @@ -314,7 +317,7 @@ func (*aggregationPushDownSolver) checkAnyCountAndSum(aggFuncs []*aggregation.Ag // checkAllArgsColumn checks whether the args in function are dedicated columns // eg: count(*) or sum(a+1) will return false while count(a) or sum(a) will return true -func (*aggregationPushDownSolver) checkAllArgsColumn(fun *aggregation.AggFuncDesc) bool { +func (*AggregationPushDownSolver) checkAllArgsColumn(fun *aggregation.AggFuncDesc) bool { for _, arg := range fun.Args { _, ok := arg.(*expression.Column) if !ok { @@ -327,9 +330,9 @@ func (*aggregationPushDownSolver) checkAllArgsColumn(fun *aggregation.AggFuncDes // TODO: // 1. https://github.com/pingcap/tidb/issues/16355, push avg & distinct functions across join // 2. remove this method and use splitPartialAgg instead for clean code. -func (a *aggregationPushDownSolver) makeNewAgg(ctx base.PlanContext, aggFuncs []*aggregation.AggFuncDesc, - gbyCols []*expression.Column, preferAggType uint, preferAggToCop bool, blockOffset int, nullGenerating bool) (*LogicalAggregation, error) { - agg := LogicalAggregation{ +func (a *AggregationPushDownSolver) makeNewAgg(ctx base.PlanContext, aggFuncs []*aggregation.AggFuncDesc, + gbyCols []*expression.Column, preferAggType uint, preferAggToCop bool, blockOffset int, nullGenerating bool) (*logicalop.LogicalAggregation, error) { + agg := logicalop.LogicalAggregation{ GroupByItems: expression.Column2Exprs(gbyCols), PreferAggType: preferAggType, PreferAggToCop: preferAggToCop, @@ -359,7 +362,7 @@ func (a *aggregationPushDownSolver) makeNewAgg(ctx base.PlanContext, aggFuncs [] return agg, nil } -func (*aggregationPushDownSolver) splitPartialAgg(agg *LogicalAggregation) (pushedAgg *LogicalAggregation) { +func (*AggregationPushDownSolver) splitPartialAgg(agg *logicalop.LogicalAggregation) (pushedAgg *logicalop.LogicalAggregation) { partial, final, _ := BuildFinalModeAggregation(agg.SCtx(), &AggInfo{ AggFuncs: agg.AggFuncs, GroupByItems: agg.GroupByItems, @@ -373,7 +376,7 @@ func (*aggregationPushDownSolver) splitPartialAgg(agg *LogicalAggregation) (push agg.AggFuncs = final.AggFuncs agg.GroupByItems = final.GroupByItems - pushedAgg = LogicalAggregation{ + pushedAgg = logicalop.LogicalAggregation{ AggFuncs: partial.AggFuncs, GroupByItems: partial.GroupByItems, PreferAggType: agg.PreferAggType, @@ -385,9 +388,9 @@ func (*aggregationPushDownSolver) splitPartialAgg(agg *LogicalAggregation) (push // pushAggCrossUnion will try to push the agg down to the union. If the new aggregation's group-by columns doesn't contain unique key. // We will return the new aggregation. Otherwise we will transform the aggregation to projection. -func (*aggregationPushDownSolver) pushAggCrossUnion(agg *LogicalAggregation, unionSchema *expression.Schema, unionChild base.LogicalPlan) (base.LogicalPlan, error) { +func (*AggregationPushDownSolver) pushAggCrossUnion(agg *logicalop.LogicalAggregation, unionSchema *expression.Schema, unionChild base.LogicalPlan) (base.LogicalPlan, error) { ctx := agg.SCtx() - newAgg := LogicalAggregation{ + newAgg := logicalop.LogicalAggregation{ AggFuncs: make([]*aggregation.AggFuncDesc, 0, len(agg.AggFuncs)), GroupByItems: make([]expression.Expression, 0, len(agg.GroupByItems)), PreferAggType: agg.PreferAggType, @@ -436,13 +439,14 @@ func (*aggregationPushDownSolver) pushAggCrossUnion(agg *LogicalAggregation, uni return newAgg, nil } -func (a *aggregationPushDownSolver) optimize(_ context.Context, p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { +// Optimize implements the base.LogicalOptRule.<0th> interface. +func (a *AggregationPushDownSolver) Optimize(_ context.Context, p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { planChanged := false newLogicalPlan, err := a.aggPushDown(p, opt) return newLogicalPlan, planChanged, err } -func (a *aggregationPushDownSolver) tryAggPushDownForUnion(union *LogicalUnionAll, agg *LogicalAggregation, opt *optimizetrace.LogicalOptimizeOp) error { +func (a *AggregationPushDownSolver) tryAggPushDownForUnion(union *logicalop.LogicalUnionAll, agg *logicalop.LogicalAggregation, opt *optimizetrace.LogicalOptimizeOp) error { for _, aggFunc := range agg.AggFuncs { if !a.isDecomposableWithUnion(aggFunc) { return nil @@ -477,8 +481,8 @@ func (a *aggregationPushDownSolver) tryAggPushDownForUnion(union *LogicalUnionAl } // aggPushDown tries to push down aggregate functions to join paths. -func (a *aggregationPushDownSolver) aggPushDown(p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (_ base.LogicalPlan, err error) { - if agg, ok := p.(*LogicalAggregation); ok { +func (a *AggregationPushDownSolver) aggPushDown(p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (_ base.LogicalPlan, err error) { + if agg, ok := p.(*logicalop.LogicalAggregation); ok { proj := a.tryToEliminateAggregation(agg, opt) if proj != nil { p = proj @@ -487,7 +491,7 @@ func (a *aggregationPushDownSolver) aggPushDown(p base.LogicalPlan, opt *optimiz // For example, we can optimize 'select sum(a.id) from t as a,t as b where a.id = b.id;' as // 'select sum(agg) from (select sum(id) as agg,id from t group by id) as a, t as b where a.id = b.id;' // by pushing down sum aggregation functions. - if join, ok1 := child.(*LogicalJoin); ok1 && a.checkValidJoin(join) && p.SCtx().GetSessionVars().AllowAggPushDown { + if join, ok1 := child.(*logicalop.LogicalJoin); ok1 && a.checkValidJoin(join) && p.SCtx().GetSessionVars().AllowAggPushDown { if valid, leftAggFuncs, rightAggFuncs, leftGbyCols, rightGbyCols := a.splitAggFuncsAndGbyCols(agg, join); valid { var lChild, rChild base.LogicalPlan // If there exist count or sum functions in left join path, we can't push any @@ -512,12 +516,12 @@ func (a *aggregationPushDownSolver) aggPushDown(p base.LogicalPlan, opt *optimiz } join.SetChildren(lChild, rChild) join.SetSchema(expression.MergeSchema(lChild.Schema(), rChild.Schema())) - if join.JoinType == LeftOuterJoin { + if join.JoinType == logicalop.LeftOuterJoin { util.ResetNotNullFlag(join.Schema(), lChild.Schema().Len(), join.Schema().Len()) - } else if join.JoinType == RightOuterJoin { + } else if join.JoinType == logicalop.RightOuterJoin { util.ResetNotNullFlag(join.Schema(), 0, lChild.Schema().Len()) } - buildKeyInfo(join) + ruleutil.BuildKeyInfoPortal(join) // count(a) -> ifnull(col#x, 0, 1) in rewriteExpr of agg function, since col#x is already the final // pushed-down aggregation's result, we don't need to take every row as count 1 when they don't have // not-null flag in a.tryToEliminateAggregation(oldAgg, opt), which is not suitable here. @@ -533,14 +537,14 @@ func (a *aggregationPushDownSolver) aggPushDown(p base.LogicalPlan, opt *optimiz // Notice that even if we eliminate new agg below if possible, the agg's schema is inherited by proj. // Therefore, we don't need to set the join's schema again, just build the keyInfo again. changed := false - if newAgg, ok1 := lChild.(*LogicalAggregation); ok1 { + if newAgg, ok1 := lChild.(*logicalop.LogicalAggregation); ok1 { proj := a.tryToEliminateAggregation(newAgg, opt) if proj != nil { lChild = proj changed = true } } - if newAgg, ok2 := rChild.(*LogicalAggregation); ok2 { + if newAgg, ok2 := rChild.(*logicalop.LogicalAggregation); ok2 { proj := a.tryToEliminateAggregation(newAgg, opt) if proj != nil { rChild = proj @@ -549,10 +553,10 @@ func (a *aggregationPushDownSolver) aggPushDown(p base.LogicalPlan, opt *optimiz } if changed { join.SetChildren(lChild, rChild) - buildKeyInfo(join) + ruleutil.BuildKeyInfoPortal(join) } } - } else if proj, ok1 := child.(*LogicalProjection); ok1 { + } else if proj, ok1 := child.(*logicalop.LogicalProjection); ok1 { // push aggregation across projection // TODO: This optimization is not always reasonable. We have not supported pushing projection to kv layer yet, // so we must do this optimization. @@ -657,12 +661,12 @@ func (a *aggregationPushDownSolver) aggPushDown(p base.LogicalPlan, opt *optimiz appendAggPushDownAcrossProjTraceStep(agg, proj, opt) } } - if union, ok1 := child.(*LogicalUnionAll); ok1 && p.SCtx().GetSessionVars().AllowAggPushDown { + if union, ok1 := child.(*logicalop.LogicalUnionAll); ok1 && p.SCtx().GetSessionVars().AllowAggPushDown { err := a.tryAggPushDownForUnion(union, agg, opt) if err != nil { return nil, err } - } else if union, ok1 := child.(*LogicalPartitionUnionAll); ok1 { + } else if union, ok1 := child.(*logicalop.LogicalPartitionUnionAll); ok1 { err := a.tryAggPushDownForUnion(&union.LogicalUnionAll, agg, opt) if err != nil { return nil, err @@ -682,11 +686,12 @@ func (a *aggregationPushDownSolver) aggPushDown(p base.LogicalPlan, opt *optimiz return p, nil } -func (*aggregationPushDownSolver) name() string { +// Name implements the base.LogicalOptRule.<1st> interface. +func (*AggregationPushDownSolver) Name() string { return "aggregation_push_down" } -func appendAggPushDownAcrossJoinTraceStep(oldAgg, newAgg *LogicalAggregation, aggFuncs []*aggregation.AggFuncDesc, join *LogicalJoin, +func appendAggPushDownAcrossJoinTraceStep(oldAgg, newAgg *logicalop.LogicalAggregation, aggFuncs []*aggregation.AggFuncDesc, join *logicalop.LogicalJoin, childIdx int, opt *optimizetrace.LogicalOptimizeOp) { evalCtx := oldAgg.SCtx().GetExprCtx().GetEvalCtx() reason := func() string { @@ -713,7 +718,7 @@ func appendAggPushDownAcrossJoinTraceStep(oldAgg, newAgg *LogicalAggregation, ag opt.AppendStepToCurrent(join.ID(), join.TP(), reason, action) } -func appendAggPushDownAcrossProjTraceStep(agg *LogicalAggregation, proj *LogicalProjection, opt *optimizetrace.LogicalOptimizeOp) { +func appendAggPushDownAcrossProjTraceStep(agg *logicalop.LogicalAggregation, proj *logicalop.LogicalProjection, opt *optimizetrace.LogicalOptimizeOp) { evalCtx := agg.SCtx().GetExprCtx().GetEvalCtx() action := func() string { buffer := bytes.NewBufferString(fmt.Sprintf("%v_%v is eliminated, and %v_%v's functions changed into[", proj.TP(), proj.ID(), agg.TP(), agg.ID())) @@ -732,7 +737,7 @@ func appendAggPushDownAcrossProjTraceStep(agg *LogicalAggregation, proj *Logical opt.AppendStepToCurrent(agg.ID(), agg.TP(), reason, action) } -func appendAggPushDownAcrossUnionTraceStep(union *LogicalUnionAll, agg *LogicalAggregation, opt *optimizetrace.LogicalOptimizeOp) { +func appendAggPushDownAcrossUnionTraceStep(union *logicalop.LogicalUnionAll, agg *logicalop.LogicalAggregation, opt *optimizetrace.LogicalOptimizeOp) { evalCtx := union.SCtx().GetExprCtx().GetEvalCtx() reason := func() string { buffer := bytes.NewBufferString(fmt.Sprintf("%v_%v functions[", agg.TP(), agg.ID())) diff --git a/pkg/planner/core/rule_aggregation_skew_rewrite.go b/pkg/planner/core/rule_aggregation_skew_rewrite.go index b0a30a07dcd2c..f2123902ece00 100644 --- a/pkg/planner/core/rule_aggregation_skew_rewrite.go +++ b/pkg/planner/core/rule_aggregation_skew_rewrite.go @@ -22,11 +22,13 @@ import ( "github.com/pingcap/tidb/pkg/expression/aggregation" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" "github.com/pingcap/tidb/pkg/util/intset" ) -type skewDistinctAggRewriter struct { +// SkewDistinctAggRewriter rewrites group distinct aggregate into 2 level aggregates. +type SkewDistinctAggRewriter struct { } // skewDistinctAggRewriter will rewrite group distinct aggregate into 2 level aggregates, e.g.: @@ -48,7 +50,7 @@ type skewDistinctAggRewriter struct { // - The aggregate has 1 and only 1 distinct aggregate function (limited to count, avg, sum) // // This rule is disabled by default. Use tidb_opt_skew_distinct_agg to enable the rule. -func (a *skewDistinctAggRewriter) rewriteSkewDistinctAgg(agg *LogicalAggregation, opt *optimizetrace.LogicalOptimizeOp) base.LogicalPlan { +func (a *SkewDistinctAggRewriter) rewriteSkewDistinctAgg(agg *logicalop.LogicalAggregation, opt *optimizetrace.LogicalOptimizeOp) base.LogicalPlan { // only group aggregate is applicable if len(agg.GroupByItems) == 0 { return nil @@ -192,7 +194,7 @@ func (a *skewDistinctAggRewriter) rewriteSkewDistinctAgg(agg *LogicalAggregation } // now create the bottom and top aggregate operators - bottomAgg := LogicalAggregation{ + bottomAgg := logicalop.LogicalAggregation{ AggFuncs: bottomAggFuncs, GroupByItems: bottomAggGroupbyItems, PreferAggType: agg.PreferAggType, @@ -200,7 +202,7 @@ func (a *skewDistinctAggRewriter) rewriteSkewDistinctAgg(agg *LogicalAggregation bottomAgg.SetChildren(agg.Children()...) bottomAgg.SetSchema(bottomAggSchema) - topAgg := LogicalAggregation{ + topAgg := logicalop.LogicalAggregation{ AggFuncs: topAggFuncs, GroupByItems: agg.GroupByItems, PreferAggToCop: agg.PreferAggToCop, @@ -215,7 +217,7 @@ func (a *skewDistinctAggRewriter) rewriteSkewDistinctAgg(agg *LogicalAggregation // it has count(), we have split it into sum()+count(), since sum() returns decimal // we have to return a project operator that casts decimal to bigint - proj := LogicalProjection{ + proj := logicalop.LogicalProjection{ Exprs: make([]expression.Expression, 0, len(agg.AggFuncs)), }.Init(agg.SCtx(), agg.QueryBlockOffset()) for _, column := range topAggSchema.Columns { @@ -236,7 +238,7 @@ func (a *skewDistinctAggRewriter) rewriteSkewDistinctAgg(agg *LogicalAggregation return proj } -func (*skewDistinctAggRewriter) isQualifiedAgg(aggFunc *aggregation.AggFuncDesc) bool { +func (*SkewDistinctAggRewriter) isQualifiedAgg(aggFunc *aggregation.AggFuncDesc) bool { if aggFunc.Mode != aggregation.CompleteMode { return false } @@ -264,7 +266,7 @@ func (*skewDistinctAggRewriter) isQualifiedAgg(aggFunc *aggregation.AggFuncDesc) } } -func appendSkewDistinctAggRewriteTraceStep(agg *LogicalAggregation, result base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) { +func appendSkewDistinctAggRewriteTraceStep(agg *logicalop.LogicalAggregation, result base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) { reason := func() string { return fmt.Sprintf("%v_%v has a distinct agg function", agg.TP(), agg.ID()) } @@ -275,18 +277,19 @@ func appendSkewDistinctAggRewriteTraceStep(agg *LogicalAggregation, result base. opt.AppendStepToCurrent(agg.ID(), agg.TP(), reason, action) } -func (a *skewDistinctAggRewriter) optimize(ctx context.Context, p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { +// Optimize implements base.LogicalOptRule.<0th> interface. +func (a *SkewDistinctAggRewriter) Optimize(ctx context.Context, p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { planChanged := false newChildren := make([]base.LogicalPlan, 0, len(p.Children())) for _, child := range p.Children() { - newChild, planChanged, err := a.optimize(ctx, child, opt) + newChild, planChanged, err := a.Optimize(ctx, child, opt) if err != nil { return nil, planChanged, err } newChildren = append(newChildren, newChild) } p.SetChildren(newChildren...) - agg, ok := p.(*LogicalAggregation) + agg, ok := p.(*logicalop.LogicalAggregation) if !ok { return p, planChanged, nil } @@ -296,6 +299,7 @@ func (a *skewDistinctAggRewriter) optimize(ctx context.Context, p base.LogicalPl return p, planChanged, nil } -func (*skewDistinctAggRewriter) name() string { +// Name implements base.LogicalOptRule.<1st> interface. +func (*SkewDistinctAggRewriter) Name() string { return "skew_distinct_agg_rewrite" } diff --git a/pkg/planner/core/rule_collect_plan_stats.go b/pkg/planner/core/rule_collect_plan_stats.go index 2983390083932..b89919524b600 100644 --- a/pkg/planner/core/rule_collect_plan_stats.go +++ b/pkg/planner/core/rule_collect_plan_stats.go @@ -31,9 +31,11 @@ import ( "go.uber.org/zap" ) -type collectPredicateColumnsPoint struct{} +// CollectPredicateColumnsPoint collects the columns that are used in the predicates. +type CollectPredicateColumnsPoint struct{} -func (collectPredicateColumnsPoint) optimize(_ context.Context, plan base.LogicalPlan, _ *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { +// Optimize implements LogicalOptRule.<0th> interface. +func (CollectPredicateColumnsPoint) Optimize(_ context.Context, plan base.LogicalPlan, _ *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { planChanged := false if plan.SCtx().GetSessionVars().InRestrictedSQL { return plan, planChanged, nil @@ -72,13 +74,16 @@ func (collectPredicateColumnsPoint) optimize(_ context.Context, plan base.Logica return plan, planChanged, nil } -func (collectPredicateColumnsPoint) name() string { +// Name implements the base.LogicalOptRule.<1st> interface. +func (CollectPredicateColumnsPoint) Name() string { return "collect_predicate_columns_point" } -type syncWaitStatsLoadPoint struct{} +// SyncWaitStatsLoadPoint sync-wait for stats load point. +type SyncWaitStatsLoadPoint struct{} -func (syncWaitStatsLoadPoint) optimize(_ context.Context, plan base.LogicalPlan, _ *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { +// Optimize implements the base.LogicalOptRule.<0th> interface. +func (SyncWaitStatsLoadPoint) Optimize(_ context.Context, plan base.LogicalPlan, _ *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { planChanged := false if plan.SCtx().GetSessionVars().InRestrictedSQL { return plan, planChanged, nil @@ -90,7 +95,8 @@ func (syncWaitStatsLoadPoint) optimize(_ context.Context, plan base.LogicalPlan, return plan, planChanged, err } -func (syncWaitStatsLoadPoint) name() string { +// Name implements the base.LogicalOptRule.<1st> interface. +func (SyncWaitStatsLoadPoint) Name() string { return "sync_wait_stats_load_point" } @@ -298,7 +304,7 @@ func recordSingleTableRuntimeStats(sctx base.PlanContext, tblID int64) (stats *s dom := domain.GetDomain(sctx) statsHandle := dom.StatsHandle() is := sctx.GetDomainInfoSchema().(infoschema.InfoSchema) - tbl, ok := is.TableByID(tblID) + tbl, ok := is.TableByID(context.Background(), tblID) if !ok { return nil, false, nil } diff --git a/pkg/planner/core/rule_column_pruning.go b/pkg/planner/core/rule_column_pruning.go index c1aa54db7d93e..43d23b9eaacae 100644 --- a/pkg/planner/core/rule_column_pruning.go +++ b/pkg/planner/core/rule_column_pruning.go @@ -18,54 +18,50 @@ import ( "context" "slices" + "github.com/pingcap/errors" "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace/logicaltrace" + "github.com/pingcap/tidb/pkg/util/intest" ) -type columnPruner struct { +// ColumnPruner is used to prune unnecessary columns. +type ColumnPruner struct { } -func (*columnPruner) optimize(_ context.Context, lp base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { +// Optimize implements base.LogicalOptRule.<0th> interface. +func (*ColumnPruner) Optimize(_ context.Context, lp base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { planChanged := false lp, err := lp.PruneColumns(slices.Clone(lp.Schema().Columns), opt) if err != nil { return nil, planChanged, err } + intest.AssertNoError(noZeroColumnLayOut(lp), "After column pruning, some operator got zero row output. Please fix it.") return lp, planChanged, nil } -// PruneColumns implement the Expand OP's column pruning logic. -// logicExpand is built in the logical plan building phase, where all the column prune is not done yet. So the -// expand projection expressions is meaningless if it built at that time. (we only maintain its schema, while -// the level projection expressions construction is left to the last logical optimize rule) -// -// so when do the rule_column_pruning here, we just prune the schema is enough. -func (p *LogicalExpand) PruneColumns(parentUsedCols []*expression.Column, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, error) { - // Expand need those extra redundant distinct group by columns projected from underlying projection. - // distinct GroupByCol must be used by aggregate above, to make sure this, append DistinctGroupByCol again. - parentUsedCols = append(parentUsedCols, p.DistinctGroupByCol...) - used := expression.GetUsedList(p.SCtx().GetExprCtx().GetEvalCtx(), parentUsedCols, p.Schema()) - prunedColumns := make([]*expression.Column, 0) - for i := len(used) - 1; i >= 0; i-- { - if !used[i] { - prunedColumns = append(prunedColumns, p.Schema().Columns[i]) - p.Schema().Columns = append(p.Schema().Columns[:i], p.Schema().Columns[i+1:]...) - p.SetOutputNames(append(p.OutputNames()[:i], p.OutputNames()[i+1:]...)) +func noZeroColumnLayOut(p base.LogicalPlan) error { + for _, child := range p.Children() { + if err := noZeroColumnLayOut(child); err != nil { + return err } } - logicaltrace.AppendColumnPruneTraceStep(p, prunedColumns, opt) - // Underlying still need to keep the distinct group by columns and parent used columns. - var err error - p.Children()[0], err = p.Children()[0].PruneColumns(parentUsedCols, opt) - if err != nil { - return nil, err + if p.Schema().Len() == 0 { + // The p don't hold its schema. So we don't need check itself. + if len(p.Children()) > 0 && p.Schema() == p.Children()[0].Schema() { + return nil + } + _, ok := p.(*logicalop.LogicalTableDual) + if !ok { + return errors.Errorf("Operator %s has zero row output", p.ExplainID().String()) + } } - return p, nil + return nil } func pruneByItems(p base.LogicalPlan, old []*util.ByItems, opt *optimizetrace.LogicalOptimizeOp) (byItems []*util.ByItems, @@ -99,32 +95,11 @@ func pruneByItems(p base.LogicalPlan, old []*util.ByItems, opt *optimizetrace.Lo return } -func (*columnPruner) name() string { +// Name implements base.LogicalOptRule.<1st> interface. +func (*ColumnPruner) Name() string { return "column_prune" } -// By add const one, we can avoid empty Projection is eliminated. -// Because in some cases, Projectoin cannot be eliminated even its output is empty. -func addConstOneForEmptyProjection(p base.LogicalPlan) { - proj, ok := p.(*LogicalProjection) - if !ok { - return - } - if proj.Schema().Len() != 0 { - return - } - - constOne := expression.NewOne() - proj.Schema().Append(&expression.Column{ - UniqueID: proj.SCtx().GetSessionVars().AllocPlanColumnID(), - RetType: constOne.GetType(p.SCtx().GetExprCtx().GetEvalCtx()), - }) - proj.Exprs = append(proj.Exprs, &expression.Constant{ - Value: constOne.Value, - RetType: constOne.GetType(p.SCtx().GetExprCtx().GetEvalCtx()), - }) -} - func preferKeyColumnFromTable(dataSource *DataSource, originColumns []*expression.Column, originSchemaColumns []*model.ColumnInfo) (*expression.Column, *model.ColumnInfo) { var resultColumnInfo *model.ColumnInfo diff --git a/pkg/planner/core/rule_decorrelate.go b/pkg/planner/core/rule_decorrelate.go index dd6c4c759ec5f..962632c362d30 100644 --- a/pkg/planner/core/rule_decorrelate.go +++ b/pkg/planner/core/rule_decorrelate.go @@ -105,10 +105,10 @@ func extractOuterApplyCorrelatedColsHelper(p base.PhysicalPlan, outerSchemas []* return newCorCols } -// decorrelateSolver tries to convert apply plan to join plan. -type decorrelateSolver struct{} +// DecorrelateSolver tries to convert apply plan to join plan. +type DecorrelateSolver struct{} -func (*decorrelateSolver) aggDefaultValueMap(agg *LogicalAggregation) map[int]*expression.Constant { +func (*DecorrelateSolver) aggDefaultValueMap(agg *logicalop.LogicalAggregation) map[int]*expression.Constant { defaultValueMap := make(map[int]*expression.Constant, len(agg.AggFuncs)) for i, f := range agg.AggFuncs { switch f.Name { @@ -121,10 +121,10 @@ func (*decorrelateSolver) aggDefaultValueMap(agg *LogicalAggregation) map[int]*e return defaultValueMap } -// optimize implements logicalOptRule interface. -func (s *decorrelateSolver) optimize(ctx context.Context, p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { +// Optimize implements base.LogicalOptRule.<0th> interface. +func (s *DecorrelateSolver) Optimize(ctx context.Context, p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { planChanged := false - if apply, ok := p.(*LogicalApply); ok { + if apply, ok := p.(*logicalop.LogicalApply); ok { outerPlan := apply.Children()[0] innerPlan := apply.Children()[1] apply.CorCols = coreusage.ExtractCorColumnsBySchema4LogicalPlan(apply.Children()[1], apply.Children()[0].Schema()) @@ -137,7 +137,7 @@ func (s *decorrelateSolver) optimize(ctx context.Context, p base.LogicalPlan, op appendApplySimplifiedTraceStep(apply, join, opt) } else if apply.NoDecorrelate { goto NoOptimize - } else if sel, ok := innerPlan.(*LogicalSelection); ok { + } else if sel, ok := innerPlan.(*logicalop.LogicalSelection); ok { // If the inner plan is a selection, we add this condition to join predicates. // Notice that no matter what kind of join is, it's always right. newConds := make([]expression.Expression, 0, len(sel.Conditions)) @@ -148,15 +148,15 @@ func (s *decorrelateSolver) optimize(ctx context.Context, p base.LogicalPlan, op innerPlan = sel.Children()[0] apply.SetChildren(outerPlan, innerPlan) appendRemoveSelectionTraceStep(apply, sel, opt) - return s.optimize(ctx, p, opt) + return s.Optimize(ctx, p, opt) } else if m, ok := innerPlan.(*logicalop.LogicalMaxOneRow); ok { if m.Children()[0].MaxOneRow() { innerPlan = m.Children()[0] apply.SetChildren(outerPlan, innerPlan) appendRemoveMaxOneRowTraceStep(m, opt) - return s.optimize(ctx, p, opt) + return s.Optimize(ctx, p, opt) } - } else if proj, ok := innerPlan.(*LogicalProjection); ok { + } else if proj, ok := innerPlan.(*logicalop.LogicalProjection); ok { // After the column pruning, some expressions in the projection operator may be pruned. // In this situation, we can decorrelate the apply operator. allConst := len(proj.Exprs) > 0 @@ -166,7 +166,7 @@ func (s *decorrelateSolver) optimize(ctx context.Context, p base.LogicalPlan, op break } } - if allConst && apply.JoinType == LeftOuterJoin { + if allConst && apply.JoinType == logicalop.LeftOuterJoin { // If the projection just references some constant. We cannot directly pull it up when the APPLY is an outer join. // e.g. select (select 1 from t1 where t1.a=t2.a) from t2; When the t1.a=t2.a is false the join's output is NULL. // But if we pull the projection upon the APPLY. It will return 1 since the projection is evaluated after the join. @@ -198,11 +198,11 @@ func (s *decorrelateSolver) optimize(ctx context.Context, p base.LogicalPlan, op innerPlan = proj.Children()[0] apply.SetChildren(outerPlan, innerPlan) - if apply.JoinType != SemiJoin && apply.JoinType != LeftOuterSemiJoin && apply.JoinType != AntiSemiJoin && apply.JoinType != AntiLeftOuterSemiJoin { + if apply.JoinType != logicalop.SemiJoin && apply.JoinType != logicalop.LeftOuterSemiJoin && apply.JoinType != logicalop.AntiSemiJoin && apply.JoinType != logicalop.AntiLeftOuterSemiJoin { proj.SetSchema(apply.Schema()) proj.Exprs = append(expression.Column2Exprs(outerPlan.Schema().Clone().Columns), proj.Exprs...) apply.SetSchema(expression.MergeSchema(outerPlan.Schema(), innerPlan.Schema())) - np, planChanged, err := s.optimize(ctx, p, opt) + np, planChanged, err := s.Optimize(ctx, p, opt) if err != nil { return nil, planChanged, err } @@ -211,12 +211,12 @@ func (s *decorrelateSolver) optimize(ctx context.Context, p base.LogicalPlan, op return proj, planChanged, nil } appendRemoveProjTraceStep(apply, proj, opt) - return s.optimize(ctx, p, opt) - } else if li, ok := innerPlan.(*LogicalLimit); ok { + return s.Optimize(ctx, p, opt) + } else if li, ok := innerPlan.(*logicalop.LogicalLimit); ok { // The presence of 'limit' in 'exists' will make the plan not optimal, so we need to decorrelate the 'limit' of subquery in optimization. // e.g. select count(*) from test t1 where exists (select value from test t2 where t1.id = t2.id limit 1); When using 'limit' in subquery, the plan will not optimal. // If apply is not SemiJoin, the output of it might be expanded even though we are `limit 1`. - if apply.JoinType != SemiJoin && apply.JoinType != LeftOuterSemiJoin && apply.JoinType != AntiSemiJoin && apply.JoinType != AntiLeftOuterSemiJoin { + if apply.JoinType != logicalop.SemiJoin && apply.JoinType != logicalop.LeftOuterSemiJoin && apply.JoinType != logicalop.AntiSemiJoin && apply.JoinType != logicalop.AntiLeftOuterSemiJoin { goto NoOptimize } // If subquery has some filter condition, we will not optimize limit. @@ -228,12 +228,12 @@ func (s *decorrelateSolver) optimize(ctx context.Context, p base.LogicalPlan, op innerPlan = li.Children()[0] apply.SetChildren(outerPlan, innerPlan) appendRemoveLimitTraceStep(li, opt) - return s.optimize(ctx, p, opt) + return s.Optimize(ctx, p, opt) } - } else if agg, ok := innerPlan.(*LogicalAggregation); ok { - if apply.CanPullUpAgg() && agg.canPullUp() { + } else if agg, ok := innerPlan.(*logicalop.LogicalAggregation); ok { + if apply.CanPullUpAgg() && agg.CanPullUp() { innerPlan = agg.Children()[0] - apply.JoinType = LeftOuterJoin + apply.JoinType = logicalop.LeftOuterJoin apply.SetChildren(outerPlan, innerPlan) agg.SetSchema(apply.Schema()) agg.GroupByItems = expression.Column2Exprs(outerPlan.Schema().Keys[0]) @@ -278,7 +278,7 @@ func (s *decorrelateSolver) optimize(ctx context.Context, p base.LogicalPlan, op newAggFuncs = append(newAggFuncs, desc) } agg.AggFuncs = newAggFuncs - np, planChanged, err := s.optimize(ctx, p, opt) + np, planChanged, err := s.Optimize(ctx, p, opt) if err != nil { return nil, planChanged, err } @@ -290,7 +290,7 @@ func (s *decorrelateSolver) optimize(ctx context.Context, p base.LogicalPlan, op } // We can pull up the equal conditions below the aggregation as the join key of the apply, if only // the equal conditions contain the correlated column of this apply. - if sel, ok := agg.Children()[0].(*LogicalSelection); ok && apply.JoinType == LeftOuterJoin { + if sel, ok := agg.Children()[0].(*logicalop.LogicalSelection); ok && apply.JoinType == logicalop.LeftOuterJoin { var ( eqCondWithCorCol []*expression.ScalarFunction remainedExpr []expression.Expression @@ -343,7 +343,7 @@ func (s *decorrelateSolver) optimize(ctx context.Context, p base.LogicalPlan, op defaultValueMap := s.aggDefaultValueMap(agg) // We should use it directly, rather than building a projection. if len(defaultValueMap) > 0 { - proj := LogicalProjection{}.Init(agg.SCtx(), agg.QueryBlockOffset()) + proj := logicalop.LogicalProjection{}.Init(agg.SCtx(), agg.QueryBlockOffset()) proj.SetSchema(apply.Schema()) proj.Exprs = expression.Column2Exprs(apply.Schema().Columns) for i, val := range defaultValueMap { @@ -356,19 +356,19 @@ func (s *decorrelateSolver) optimize(ctx context.Context, p base.LogicalPlan, op appendAddProjTraceStep(apply, proj, opt) } appendModifyAggTraceStep(outerPlan, apply, agg, sel, appendedGroupByCols, appendedAggFuncs, eqCondWithCorCol, opt) - return s.optimize(ctx, p, opt) + return s.Optimize(ctx, p, opt) } sel.Conditions = originalExpr apply.CorCols = coreusage.ExtractCorColumnsBySchema4LogicalPlan(apply.Children()[1], apply.Children()[0].Schema()) } } - } else if sort, ok := innerPlan.(*LogicalSort); ok { + } else if sort, ok := innerPlan.(*logicalop.LogicalSort); ok { // Since we only pull up Selection, Projection, Aggregation, MaxOneRow, // the top level Sort has no effect on the subquery's result. innerPlan = sort.Children()[0] apply.SetChildren(outerPlan, innerPlan) appendRemoveSortTraceStep(sort, opt) - return s.optimize(ctx, p, opt) + return s.Optimize(ctx, p, opt) } } NoOptimize: @@ -378,7 +378,7 @@ NoOptimize: } newChildren := make([]base.LogicalPlan, 0, len(p.Children())) for _, child := range p.Children() { - np, planChanged, err := s.optimize(ctx, child, opt) + np, planChanged, err := s.Optimize(ctx, child, opt) if err != nil { return nil, planChanged, err } @@ -388,11 +388,12 @@ NoOptimize: return p, planChanged, nil } -func (*decorrelateSolver) name() string { +// Name implements base.LogicalOptRule.<1st> interface. +func (*DecorrelateSolver) Name() string { return "decorrelate" } -func appendApplySimplifiedTraceStep(p *LogicalApply, j *LogicalJoin, opt *optimizetrace.LogicalOptimizeOp) { +func appendApplySimplifiedTraceStep(p *logicalop.LogicalApply, j *logicalop.LogicalJoin, opt *optimizetrace.LogicalOptimizeOp) { action := func() string { return fmt.Sprintf("%v_%v simplified into %v_%v", plancodec.TypeApply, p.ID(), plancodec.TypeJoin, j.ID()) } @@ -402,7 +403,7 @@ func appendApplySimplifiedTraceStep(p *LogicalApply, j *LogicalJoin, opt *optimi opt.AppendStepToCurrent(p.ID(), p.TP(), reason, action) } -func appendRemoveSelectionTraceStep(p base.LogicalPlan, s *LogicalSelection, opt *optimizetrace.LogicalOptimizeOp) { +func appendRemoveSelectionTraceStep(p base.LogicalPlan, s *logicalop.LogicalSelection, opt *optimizetrace.LogicalOptimizeOp) { action := func() string { return fmt.Sprintf("%v_%v removed from plan tree", s.TP(), s.ID()) } @@ -422,7 +423,7 @@ func appendRemoveMaxOneRowTraceStep(m *logicalop.LogicalMaxOneRow, opt *optimize opt.AppendStepToCurrent(m.ID(), m.TP(), reason, action) } -func appendRemoveLimitTraceStep(limit *LogicalLimit, opt *optimizetrace.LogicalOptimizeOp) { +func appendRemoveLimitTraceStep(limit *logicalop.LogicalLimit, opt *optimizetrace.LogicalOptimizeOp) { action := func() string { return fmt.Sprintf("%v_%v removed from plan tree", limit.TP(), limit.ID()) } @@ -432,7 +433,7 @@ func appendRemoveLimitTraceStep(limit *LogicalLimit, opt *optimizetrace.LogicalO opt.AppendStepToCurrent(limit.ID(), limit.TP(), reason, action) } -func appendRemoveProjTraceStep(p *LogicalApply, proj *LogicalProjection, opt *optimizetrace.LogicalOptimizeOp) { +func appendRemoveProjTraceStep(p *logicalop.LogicalApply, proj *logicalop.LogicalProjection, opt *optimizetrace.LogicalOptimizeOp) { action := func() string { return fmt.Sprintf("%v_%v removed from plan tree", proj.TP(), proj.ID()) } @@ -442,7 +443,7 @@ func appendRemoveProjTraceStep(p *LogicalApply, proj *LogicalProjection, opt *op opt.AppendStepToCurrent(proj.ID(), proj.TP(), reason, action) } -func appendMoveProjTraceStep(p *LogicalApply, np base.LogicalPlan, proj *LogicalProjection, opt *optimizetrace.LogicalOptimizeOp) { +func appendMoveProjTraceStep(p *logicalop.LogicalApply, np base.LogicalPlan, proj *logicalop.LogicalProjection, opt *optimizetrace.LogicalOptimizeOp) { action := func() string { return fmt.Sprintf("%v_%v is moved as %v_%v's parent", proj.TP(), proj.ID(), np.TP(), np.ID()) } @@ -452,7 +453,7 @@ func appendMoveProjTraceStep(p *LogicalApply, np base.LogicalPlan, proj *Logical opt.AppendStepToCurrent(proj.ID(), proj.TP(), reason, action) } -func appendRemoveSortTraceStep(sort *LogicalSort, opt *optimizetrace.LogicalOptimizeOp) { +func appendRemoveSortTraceStep(sort *logicalop.LogicalSort, opt *optimizetrace.LogicalOptimizeOp) { action := func() string { return fmt.Sprintf("%v_%v removed from plan tree", sort.TP(), sort.ID()) } @@ -462,19 +463,19 @@ func appendRemoveSortTraceStep(sort *LogicalSort, opt *optimizetrace.LogicalOpti opt.AppendStepToCurrent(sort.ID(), sort.TP(), reason, action) } -func appendPullUpAggTraceStep(p *LogicalApply, np base.LogicalPlan, agg *LogicalAggregation, opt *optimizetrace.LogicalOptimizeOp) { +func appendPullUpAggTraceStep(p *logicalop.LogicalApply, np base.LogicalPlan, agg *logicalop.LogicalAggregation, opt *optimizetrace.LogicalOptimizeOp) { action := func() string { return fmt.Sprintf("%v_%v pulled up as %v_%v's parent, and %v_%v's join type becomes %v", agg.TP(), agg.ID(), np.TP(), np.ID(), p.TP(), p.ID(), p.JoinType.String()) } reason := func() string { return fmt.Sprintf("%v_%v's functions haven't any group by items and %v_%v's join type isn't %v or %v, and hasn't any conditions", - agg.TP(), agg.ID(), p.TP(), p.ID(), InnerJoin.String(), LeftOuterJoin.String()) + agg.TP(), agg.ID(), p.TP(), p.ID(), logicalop.InnerJoin.String(), logicalop.LeftOuterJoin.String()) } opt.AppendStepToCurrent(agg.ID(), agg.TP(), reason, action) } -func appendAddProjTraceStep(p *LogicalApply, proj *LogicalProjection, opt *optimizetrace.LogicalOptimizeOp) { +func appendAddProjTraceStep(p *logicalop.LogicalApply, proj *logicalop.LogicalProjection, opt *optimizetrace.LogicalOptimizeOp) { action := func() string { return fmt.Sprintf("%v_%v is added as %v_%v's parent", proj.TP(), proj.ID(), p.TP(), p.ID()) } @@ -484,7 +485,7 @@ func appendAddProjTraceStep(p *LogicalApply, proj *LogicalProjection, opt *optim opt.AppendStepToCurrent(proj.ID(), proj.TP(), reason, action) } -func appendModifyAggTraceStep(outerPlan base.LogicalPlan, p *LogicalApply, agg *LogicalAggregation, sel *LogicalSelection, +func appendModifyAggTraceStep(outerPlan base.LogicalPlan, p *logicalop.LogicalApply, agg *logicalop.LogicalAggregation, sel *logicalop.LogicalSelection, appendedGroupByCols *expression.Schema, appendedAggFuncs []*aggregation.AggFuncDesc, eqCondWithCorCol []*expression.ScalarFunction, opt *optimizetrace.LogicalOptimizeOp) { evalCtx := outerPlan.SCtx().GetExprCtx().GetEvalCtx() diff --git a/pkg/planner/core/rule_derive_topn_from_window.go b/pkg/planner/core/rule_derive_topn_from_window.go index 5b0ce8e4de7a7..4192389b8e9e0 100644 --- a/pkg/planner/core/rule_derive_topn_from_window.go +++ b/pkg/planner/core/rule_derive_topn_from_window.go @@ -16,33 +16,22 @@ package core import ( "context" - "fmt" "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" ) -// deriveTopNFromWindow pushes down the topN or limit. In the future we will remove the limit from `requiredProperty` in CBO phase. -type deriveTopNFromWindow struct { -} - -func appendDerivedTopNTrace(topN base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) { - child := topN.Children()[0] - action := func() string { - return fmt.Sprintf("%v_%v top N added below %v_%v ", topN.TP(), topN.ID(), child.TP(), child.ID()) - } - reason := func() string { - return fmt.Sprintf("%v filter on row number", topN.TP()) - } - opt.AppendStepToCurrent(topN.ID(), topN.TP(), reason, action) +// DeriveTopNFromWindow pushes down the topN or limit. In the future we will remove the limit from `requiredProperty` in CBO phase. +type DeriveTopNFromWindow struct { } // checkPartitionBy mainly checks if partition by of window function is a prefix of // data order (clustered index) of the data source. TiFlash is allowed only for empty partition by. -func checkPartitionBy(p *LogicalWindow, d *DataSource) bool { +func checkPartitionBy(p *logicalop.LogicalWindow, d *DataSource) bool { // No window partition by. We are OK. if len(p.PartitionBy) == 0 { return true @@ -73,9 +62,10 @@ func checkPartitionBy(p *LogicalWindow, d *DataSource) bool { current row is only frame applicable to row number - Child is a data source with no tiflash option. */ -func windowIsTopN(p *LogicalSelection) (bool, uint64) { +func windowIsTopN(lp base.LogicalPlan) (bool, uint64) { + p := lp.(*logicalop.LogicalSelection) // Check if child is window function. - child, isLogicalWindow := p.Children()[0].(*LogicalWindow) + child, isLogicalWindow := p.Children()[0].(*logicalop.LogicalWindow) if !isLogicalWindow { return false, 0 } @@ -117,11 +107,13 @@ func windowIsTopN(p *LogicalSelection) (bool, uint64) { return false, 0 } -func (*deriveTopNFromWindow) optimize(_ context.Context, p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { +// Optimize implements base.LogicalOptRule.<0th> interface. +func (*DeriveTopNFromWindow) Optimize(_ context.Context, p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { planChanged := false return p.DeriveTopN(opt), planChanged, nil } -func (*deriveTopNFromWindow) name() string { +// Name implements base.LogicalOptRule.<1st> interface. +func (*DeriveTopNFromWindow) Name() string { return "derive_topn_from_window" } diff --git a/pkg/planner/core/rule_eliminate_projection.go b/pkg/planner/core/rule_eliminate_projection.go index 0f4bce027f61e..426b46c4bbfc2 100644 --- a/pkg/planner/core/rule_eliminate_projection.go +++ b/pkg/planner/core/rule_eliminate_projection.go @@ -25,12 +25,14 @@ import ( "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" + ruleutil "github.com/pingcap/tidb/pkg/planner/core/rule/util" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" ) // canProjectionBeEliminatedLoose checks whether a projection can be eliminated, // returns true if every expression is a single column. -func canProjectionBeEliminatedLoose(p *LogicalProjection) bool { +func canProjectionBeEliminatedLoose(p *logicalop.LogicalProjection) bool { // project for expand will assign a new col id for col ref, because these column should be // data cloned in the execution time and may be filled with null value at the same time. // so it's not a REAL column reference. Detect the column ref in projection here and do @@ -92,29 +94,6 @@ func canProjectionBeEliminatedStrict(p *PhysicalProjection) bool { return true } -func resolveColumnAndReplace(origin *expression.Column, replace map[string]*expression.Column) { - dst := replace[string(origin.HashCode())] - if dst != nil { - retType, inOperand := origin.RetType, origin.InOperand - *origin = *dst - origin.RetType, origin.InOperand = retType, inOperand - } -} - -// ResolveExprAndReplace replaces columns fields of expressions by children logical plans. -func ResolveExprAndReplace(origin expression.Expression, replace map[string]*expression.Column) { - switch expr := origin.(type) { - case *expression.Column: - resolveColumnAndReplace(expr, replace) - case *expression.CorrelatedColumn: - resolveColumnAndReplace(&expr.Column, replace) - case *expression.ScalarFunction: - for _, arg := range expr.GetArgs() { - ResolveExprAndReplace(arg, replace) - } - } -} - func doPhysicalProjectionElimination(p base.PhysicalPlan) base.PhysicalPlan { for i, child := range p.Children() { p.Children()[i] = doPhysicalProjectionElimination(child) @@ -165,32 +144,32 @@ func eliminatePhysicalProjection(p base.PhysicalPlan) base.PhysicalPlan { // The projection eliminate in logical optimize will optimize the projection under the projection, window, agg // The projection eliminate in post optimize will optimize other projection -// For update stmt +// ProjectionEliminator is for update stmt // The projection eliminate in logical optimize has been forbidden. // The projection eliminate in post optimize will optimize the projection under the projection, window, agg (the condition is same as logical optimize) -type projectionEliminator struct { +type ProjectionEliminator struct { } -// optimize implements the logicalOptRule interface. -func (pe *projectionEliminator) optimize(_ context.Context, lp base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { +// Optimize implements the logicalOptRule interface. +func (pe *ProjectionEliminator) Optimize(_ context.Context, lp base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { planChanged := false root := pe.eliminate(lp, make(map[string]*expression.Column), false, opt) return root, planChanged, nil } // eliminate eliminates the redundant projection in a logical plan. -func (pe *projectionEliminator) eliminate(p base.LogicalPlan, replace map[string]*expression.Column, canEliminate bool, opt *optimizetrace.LogicalOptimizeOp) base.LogicalPlan { +func (pe *ProjectionEliminator) eliminate(p base.LogicalPlan, replace map[string]*expression.Column, canEliminate bool, opt *optimizetrace.LogicalOptimizeOp) base.LogicalPlan { // LogicalCTE's logical optimization is independent. if _, ok := p.(*LogicalCTE); ok { return p } - proj, isProj := p.(*LogicalProjection) + proj, isProj := p.(*logicalop.LogicalProjection) childFlag := canEliminate - if _, isUnion := p.(*LogicalUnionAll); isUnion { + if _, isUnion := p.(*logicalop.LogicalUnionAll); isUnion { childFlag = false - } else if _, isAgg := p.(*LogicalAggregation); isAgg || isProj { + } else if _, isAgg := p.(*logicalop.LogicalAggregation); isAgg || isProj { childFlag = true - } else if _, isWindow := p.(*LogicalWindow); isWindow { + } else if _, isWindow := p.(*logicalop.LogicalWindow); isWindow { childFlag = true } for i, child := range p.Children() { @@ -199,13 +178,13 @@ func (pe *projectionEliminator) eliminate(p base.LogicalPlan, replace map[string // replace logical plan schema switch x := p.(type) { - case *LogicalJoin: - x.SetSchema(buildLogicalJoinSchema(x.JoinType, x)) - case *LogicalApply: - x.SetSchema(buildLogicalJoinSchema(x.JoinType, x)) + case *logicalop.LogicalJoin: + x.SetSchema(logicalop.BuildLogicalJoinSchema(x.JoinType, x)) + case *logicalop.LogicalApply: + x.SetSchema(logicalop.BuildLogicalJoinSchema(x.JoinType, x)) default: for _, dst := range p.Schema().Columns { - resolveColumnAndReplace(dst, replace) + ruleutil.ResolveColumnAndReplace(dst, replace) } } // replace all of exprs in logical plan @@ -213,7 +192,7 @@ func (pe *projectionEliminator) eliminate(p base.LogicalPlan, replace map[string // eliminate duplicate projection: projection with child projection if isProj { - if child, ok := p.Children()[0].(*LogicalProjection); ok && !expression.ExprsHasSideEffects(child.Exprs) { + if child, ok := p.Children()[0].(*logicalop.LogicalProjection); ok && !expression.ExprsHasSideEffects(child.Exprs) { ctx := p.SCtx() for i := range proj.Exprs { proj.Exprs[i] = ReplaceColumnOfExpr(proj.Exprs[i], child, child.Schema()) @@ -239,7 +218,7 @@ func (pe *projectionEliminator) eliminate(p base.LogicalPlan, replace map[string } // ReplaceColumnOfExpr replaces column of expression by another LogicalProjection. -func ReplaceColumnOfExpr(expr expression.Expression, proj *LogicalProjection, schema *expression.Schema) expression.Expression { +func ReplaceColumnOfExpr(expr expression.Expression, proj *logicalop.LogicalProjection, schema *expression.Schema) expression.Expression { switch v := expr.(type) { case *expression.Column: idx := schema.ColumnIndex(v) @@ -254,11 +233,12 @@ func ReplaceColumnOfExpr(expr expression.Expression, proj *LogicalProjection, sc return expr } -func (*projectionEliminator) name() string { +// Name implements the logicalOptRule.<1st> interface. +func (*ProjectionEliminator) Name() string { return "projection_eliminate" } -func appendDupProjEliminateTraceStep(parent, child *LogicalProjection, opt *optimizetrace.LogicalOptimizeOp) { +func appendDupProjEliminateTraceStep(parent, child *logicalop.LogicalProjection, opt *optimizetrace.LogicalOptimizeOp) { ectx := parent.SCtx().GetExprCtx().GetEvalCtx() action := func() string { buffer := bytes.NewBufferString( @@ -278,7 +258,7 @@ func appendDupProjEliminateTraceStep(parent, child *LogicalProjection, opt *opti opt.AppendStepToCurrent(child.ID(), child.TP(), reason, action) } -func appendProjEliminateTraceStep(proj *LogicalProjection, opt *optimizetrace.LogicalOptimizeOp) { +func appendProjEliminateTraceStep(proj *logicalop.LogicalProjection, opt *optimizetrace.LogicalOptimizeOp) { reason := func() string { return fmt.Sprintf("%v_%v's Exprs are all Columns", proj.TP(), proj.ID()) } diff --git a/pkg/planner/core/rule_generate_column_substitute.go b/pkg/planner/core/rule_generate_column_substitute.go index 40f9c0673e39e..2f593849d0266 100644 --- a/pkg/planner/core/rule_generate_column_substitute.go +++ b/pkg/planner/core/rule_generate_column_substitute.go @@ -22,12 +22,14 @@ import ( "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" "github.com/pingcap/tidb/pkg/types" h "github.com/pingcap/tidb/pkg/util/hint" ) -type gcSubstituter struct { +// GcSubstituter is used to substitute the expression to indexed virtual generated column in where, group by, order by, and field clause. +type GcSubstituter struct { } // ExprColumnMap is used to store all expressions of indexed generated columns in a table, @@ -35,12 +37,13 @@ type gcSubstituter struct { // thus we can substitute the expression in a query to an indexed generated column. type ExprColumnMap map[expression.Expression]*expression.Column +// Optimize implements base.LogicalOptRule.<0th> interface. // optimize try to replace the expression to indexed virtual generate column in where, group by, order by, and field clause // so that we can use the index on expression. // For example: select a+1 from t order by a+1, with a virtual generate column c as (a+1) and // an index on c. We need to replace a+1 with c so that we can use the index on c. // See also https://dev.mysql.com/doc/refman/8.0/en/generated-column-index-optimizations.html -func (gc *gcSubstituter) optimize(ctx context.Context, lp base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { +func (gc *GcSubstituter) Optimize(ctx context.Context, lp base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { planChanged := false exprToColumn := make(ExprColumnMap) collectGenerateColumn(lp, exprToColumn) @@ -179,29 +182,29 @@ func substituteExpression(cond expression.Expression, lp base.LogicalPlan, exprT return changed } -func (gc *gcSubstituter) substitute(ctx context.Context, lp base.LogicalPlan, exprToColumn ExprColumnMap, opt *optimizetrace.LogicalOptimizeOp) base.LogicalPlan { +func (gc *GcSubstituter) substitute(ctx context.Context, lp base.LogicalPlan, exprToColumn ExprColumnMap, opt *optimizetrace.LogicalOptimizeOp) base.LogicalPlan { var tp types.EvalType ectx := lp.SCtx().GetExprCtx().GetEvalCtx() switch x := lp.(type) { - case *LogicalSelection: + case *logicalop.LogicalSelection: for _, cond := range x.Conditions { substituteExpression(cond, lp, exprToColumn, x.Schema(), opt) } - case *LogicalProjection: + case *logicalop.LogicalProjection: for i := range x.Exprs { tp = x.Exprs[i].GetType(ectx).EvalType() for candidateExpr, column := range exprToColumn { tryToSubstituteExpr(&x.Exprs[i], lp, candidateExpr, tp, x.Children()[0].Schema(), column, opt) } } - case *LogicalSort: + case *logicalop.LogicalSort: for i := range x.ByItems { tp = x.ByItems[i].Expr.GetType(ectx).EvalType() for candidateExpr, column := range exprToColumn { tryToSubstituteExpr(&x.ByItems[i].Expr, lp, candidateExpr, tp, x.Schema(), column, opt) } } - case *LogicalAggregation: + case *logicalop.LogicalAggregation: for _, aggFunc := range x.AggFuncs { for i := 0; i < len(aggFunc.Args); i++ { tp = aggFunc.Args[i].GetType(ectx).EvalType() @@ -231,6 +234,7 @@ func (gc *gcSubstituter) substitute(ctx context.Context, lp base.LogicalPlan, ex return lp } -func (*gcSubstituter) name() string { +// Name implements base.LogicalOptRule.<1st> interface. +func (*GcSubstituter) Name() string { return "generate_column_substitute" } diff --git a/pkg/planner/core/rule_generate_column_substitute_test.go b/pkg/planner/core/rule_generate_column_substitute_test.go index 774d9cf79e5d0..f86aefd88f63e 100644 --- a/pkg/planner/core/rule_generate_column_substitute_test.go +++ b/pkg/planner/core/rule_generate_column_substitute_test.go @@ -23,6 +23,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/planner/core" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/testkit" "github.com/stretchr/testify/require" ) @@ -276,7 +277,7 @@ func BenchmarkSubstituteExpression(b *testing.B) { b.ResetTimer() b.StartTimer() for i := 0; i < b.N; i++ { - core.SubstituteExpression(selection.(*core.LogicalSelection).Conditions[0], selection, m, selection.Schema(), nil) + core.SubstituteExpression(selection.(*logicalop.LogicalSelection).Conditions[0], selection, m, selection.Schema(), nil) } b.StopTimer() } diff --git a/pkg/planner/core/rule_inject_extra_projection.go b/pkg/planner/core/rule_inject_extra_projection.go index e86c7db13fdd9..0bd50896d2c4f 100644 --- a/pkg/planner/core/rule_inject_extra_projection.go +++ b/pkg/planner/core/rule_inject_extra_projection.go @@ -84,7 +84,7 @@ func injectProjBelowUnion(un *PhysicalUnionAll) *PhysicalUnionAll { if !un.mpp { return un } - for i, ch := range un.children { + for i, ch := range un.Children() { exprs := make([]expression.Expression, len(ch.Schema().Columns)) needChange := false for i, dstCol := range un.schema.Columns { @@ -105,7 +105,7 @@ func injectProjBelowUnion(un *PhysicalUnionAll) *PhysicalUnionAll { }.Init(un.SCtx(), ch.StatsInfo(), 0) proj.SetSchema(un.schema.Clone()) proj.SetChildren(ch) - un.children[i] = proj + un.Children()[i] = proj } } return un @@ -207,8 +207,7 @@ func InjectProjBelowAgg(aggPlan base.PhysicalPlan, aggFuncs []*aggregation.AggFu child := aggPlan.Children()[0] prop := aggPlan.GetChildReqProps(0).CloneEssentialFields() proj := PhysicalProjection{ - Exprs: projExprs, - AvoidColumnEvaluator: false, + Exprs: projExprs, }.Init(aggPlan.SCtx(), child.StatsInfo().ScaleByExpectCnt(prop.ExpectedCnt), aggPlan.QueryBlockOffset(), prop) proj.SetSchema(expression.NewSchema(projSchemaCols...)) proj.SetChildren(child) @@ -241,8 +240,7 @@ func InjectProjBelowSort(p base.PhysicalPlan, orderByItems []*util.ByItems) base topProjExprs = append(topProjExprs, col) } topProj := PhysicalProjection{ - Exprs: topProjExprs, - AvoidColumnEvaluator: false, + Exprs: topProjExprs, }.Init(p.SCtx(), p.StatsInfo(), p.QueryBlockOffset(), nil) topProj.SetSchema(p.Schema().Clone()) topProj.SetChildren(p) @@ -274,8 +272,7 @@ func InjectProjBelowSort(p base.PhysicalPlan, orderByItems []*util.ByItems) base childProp := p.GetChildReqProps(0).CloneEssentialFields() bottomProj := PhysicalProjection{ - Exprs: bottomProjExprs, - AvoidColumnEvaluator: false, + Exprs: bottomProjExprs, }.Init(p.SCtx(), childPlan.StatsInfo().ScaleByExpectCnt(childProp.ExpectedCnt), p.QueryBlockOffset(), childProp) bottomProj.SetSchema(expression.NewSchema(bottomProjSchemaCols...)) bottomProj.SetChildren(childPlan) @@ -324,8 +321,7 @@ func TurnNominalSortIntoProj(p base.PhysicalPlan, onlyColumn bool, orderByItems childProp := p.GetChildReqProps(0).CloneEssentialFields() bottomProj := PhysicalProjection{ - Exprs: bottomProjExprs, - AvoidColumnEvaluator: false, + Exprs: bottomProjExprs, }.Init(p.SCtx(), childPlan.StatsInfo().ScaleByExpectCnt(childProp.ExpectedCnt), p.QueryBlockOffset(), childProp) bottomProj.SetSchema(expression.NewSchema(bottomProjSchemaCols...)) bottomProj.SetChildren(childPlan) @@ -337,8 +333,7 @@ func TurnNominalSortIntoProj(p base.PhysicalPlan, onlyColumn bool, orderByItems topProjExprs = append(topProjExprs, col) } topProj := PhysicalProjection{ - Exprs: topProjExprs, - AvoidColumnEvaluator: false, + Exprs: topProjExprs, }.Init(p.SCtx(), childPlan.StatsInfo().ScaleByExpectCnt(childProp.ExpectedCnt), p.QueryBlockOffset(), childProp) topProj.SetSchema(childPlan.Schema().Clone()) topProj.SetChildren(bottomProj) diff --git a/pkg/planner/core/rule_join_elimination.go b/pkg/planner/core/rule_join_elimination.go index 3a3ab0795a665..2fa4e41cceb64 100644 --- a/pkg/planner/core/rule_join_elimination.go +++ b/pkg/planner/core/rule_join_elimination.go @@ -23,11 +23,13 @@ import ( "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" "github.com/pingcap/tidb/pkg/util/set" ) -type outerJoinEliminator struct { +// OuterJoinEliminator is used to eliminate outer join. +type OuterJoinEliminator struct { } // tryToEliminateOuterJoin will eliminate outer join plan base on the following rules @@ -37,12 +39,12 @@ type outerJoinEliminator struct { // 2. outer join elimination with duplicate agnostic aggregate functions: For example left outer join. // If the parent only use the columns from left table with 'distinct' label. The left outer join can // be eliminated. -func (o *outerJoinEliminator) tryToEliminateOuterJoin(p *LogicalJoin, aggCols []*expression.Column, parentCols []*expression.Column, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { +func (o *OuterJoinEliminator) tryToEliminateOuterJoin(p *logicalop.LogicalJoin, aggCols []*expression.Column, parentCols []*expression.Column, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { var innerChildIdx int switch p.JoinType { - case LeftOuterJoin: + case logicalop.LeftOuterJoin: innerChildIdx = 1 - case RightOuterJoin: + case logicalop.RightOuterJoin: innerChildIdx = 0 default: return p, false, nil @@ -95,7 +97,7 @@ func (o *outerJoinEliminator) tryToEliminateOuterJoin(p *LogicalJoin, aggCols [] } // extract join keys as a schema for inner child of a outer join -func (*outerJoinEliminator) extractInnerJoinKeys(join *LogicalJoin, innerChildIdx int) *expression.Schema { +func (*OuterJoinEliminator) extractInnerJoinKeys(join *logicalop.LogicalJoin, innerChildIdx int) *expression.Schema { joinKeys := make([]*expression.Column, 0, len(join.EqualConditions)) for _, eqCond := range join.EqualConditions { joinKeys = append(joinKeys, eqCond.GetArgs()[innerChildIdx].(*expression.Column)) @@ -120,7 +122,7 @@ func IsColsAllFromOuterTable(cols []*expression.Column, outerUniqueIDs set.Int64 } // check whether one of unique keys sets is contained by inner join keys -func (*outerJoinEliminator) isInnerJoinKeysContainUniqueKey(innerPlan base.LogicalPlan, joinKeys *expression.Schema) (bool, error) { +func (*OuterJoinEliminator) isInnerJoinKeysContainUniqueKey(innerPlan base.LogicalPlan, joinKeys *expression.Schema) (bool, error) { for _, keyInfo := range innerPlan.Schema().Keys { joinKeysContainKeyInfo := true for _, col := range keyInfo { @@ -137,7 +139,7 @@ func (*outerJoinEliminator) isInnerJoinKeysContainUniqueKey(innerPlan base.Logic } // check whether one of index sets is contained by inner join index -func (*outerJoinEliminator) isInnerJoinKeysContainIndex(innerPlan base.LogicalPlan, joinKeys *expression.Schema) (bool, error) { +func (*OuterJoinEliminator) isInnerJoinKeysContainIndex(innerPlan base.LogicalPlan, joinKeys *expression.Schema) (bool, error) { ds, ok := innerPlan.(*DataSource) if !ok { return false, nil @@ -172,7 +174,7 @@ func GetDupAgnosticAggCols( p base.LogicalPlan, oldAggCols []*expression.Column, // Reuse the original buffer. ) (isAgg bool, newAggCols []*expression.Column) { - agg, ok := p.(*LogicalAggregation) + agg, ok := p.(*logicalop.LogicalAggregation) if !ok { return false, nil } @@ -194,14 +196,14 @@ func GetDupAgnosticAggCols( return true, newAggCols } -func (o *outerJoinEliminator) doOptimize(p base.LogicalPlan, aggCols []*expression.Column, parentCols []*expression.Column, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, error) { +func (o *OuterJoinEliminator) doOptimize(p base.LogicalPlan, aggCols []*expression.Column, parentCols []*expression.Column, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, error) { // CTE's logical optimization is independent. if _, ok := p.(*LogicalCTE); ok { return p, nil } var err error var isEliminated bool - for join, isJoin := p.(*LogicalJoin); isJoin; join, isJoin = p.(*LogicalJoin) { + for join, isJoin := p.(*logicalop.LogicalJoin); isJoin; join, isJoin = p.(*logicalop.LogicalJoin) { p, isEliminated, err = o.tryToEliminateOuterJoin(join, aggCols, parentCols, opt) if err != nil { return p, err @@ -212,12 +214,12 @@ func (o *outerJoinEliminator) doOptimize(p base.LogicalPlan, aggCols []*expressi } switch x := p.(type) { - case *LogicalProjection: + case *logicalop.LogicalProjection: parentCols = parentCols[:0] for _, expr := range x.Exprs { parentCols = append(parentCols, expression.ExtractColumns(expr)...) } - case *LogicalAggregation: + case *logicalop.LogicalAggregation: parentCols = parentCols[:0] for _, groupByItem := range x.GroupByItems { parentCols = append(parentCols, expression.ExtractColumns(groupByItem)...) @@ -248,17 +250,19 @@ func (o *outerJoinEliminator) doOptimize(p base.LogicalPlan, aggCols []*expressi return p, nil } -func (o *outerJoinEliminator) optimize(_ context.Context, p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { +// Optimize implements base.LogicalOptRule.<0th> interface. +func (o *OuterJoinEliminator) Optimize(_ context.Context, p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { planChanged := false p, err := o.doOptimize(p, nil, nil, opt) return p, planChanged, err } -func (*outerJoinEliminator) name() string { +// Name implements base.LogicalOptRule.<1st> interface. +func (*OuterJoinEliminator) Name() string { return "outer_join_eliminate" } -func appendOuterJoinEliminateTraceStep(join *LogicalJoin, outerPlan base.LogicalPlan, parentCols []*expression.Column, +func appendOuterJoinEliminateTraceStep(join *logicalop.LogicalJoin, outerPlan base.LogicalPlan, parentCols []*expression.Column, innerJoinKeys *expression.Schema, opt *optimizetrace.LogicalOptimizeOp) { ectx := join.SCtx().GetExprCtx().GetEvalCtx() reason := func() string { @@ -285,7 +289,7 @@ func appendOuterJoinEliminateTraceStep(join *LogicalJoin, outerPlan base.Logical opt.AppendStepToCurrent(join.ID(), join.TP(), reason, action) } -func appendOuterJoinEliminateAggregationTraceStep(join *LogicalJoin, outerPlan base.LogicalPlan, aggCols []*expression.Column, opt *optimizetrace.LogicalOptimizeOp) { +func appendOuterJoinEliminateAggregationTraceStep(join *logicalop.LogicalJoin, outerPlan base.LogicalPlan, aggCols []*expression.Column, opt *optimizetrace.LogicalOptimizeOp) { ectx := join.SCtx().GetExprCtx().GetEvalCtx() reason := func() string { buffer := bytes.NewBufferString("The columns[") diff --git a/pkg/planner/core/rule_join_reorder.go b/pkg/planner/core/rule_join_reorder.go index f4b4094e51ed7..93896039eb145 100644 --- a/pkg/planner/core/rule_join_reorder.go +++ b/pkg/planner/core/rule_join_reorder.go @@ -23,6 +23,8 @@ import ( "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" + "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" h "github.com/pingcap/tidb/pkg/util/hint" "github.com/pingcap/tidb/pkg/util/plancodec" @@ -45,7 +47,7 @@ func extractJoinGroup(p base.LogicalPlan) *joinGroupResult { joinTypes []*joinTypeWithExtMsg hasOuterJoin bool ) - join, isJoin := p.(*LogicalJoin) + join, isJoin := p.(*logicalop.LogicalJoin) if isJoin && join.PreferJoinOrder { // When there is a leading hint, the hint may not take effect for other reasons. // For example, the join type is cross join or straight join, or exists the join algorithm hint, etc. @@ -54,8 +56,8 @@ func extractJoinGroup(p base.LogicalPlan) *joinGroupResult { } // If the variable `tidb_opt_advanced_join_hint` is false and the join node has the join method hint, we will not split the current join node to join reorder process. if !isJoin || (join.PreferJoinType > uint(0) && !p.SCtx().GetSessionVars().EnableAdvancedJoinHint) || join.StraightJoin || - (join.JoinType != InnerJoin && join.JoinType != LeftOuterJoin && join.JoinType != RightOuterJoin) || - ((join.JoinType == LeftOuterJoin || join.JoinType == RightOuterJoin) && join.EqualConditions == nil) { + (join.JoinType != logicalop.InnerJoin && join.JoinType != logicalop.LeftOuterJoin && join.JoinType != logicalop.RightOuterJoin) || + ((join.JoinType == logicalop.LeftOuterJoin || join.JoinType == logicalop.RightOuterJoin) && join.EqualConditions == nil) { if joinOrderHintInfo != nil { // The leading hint can not work for some reasons. So clear it in the join node. join.HintInfo = nil @@ -67,7 +69,7 @@ func extractJoinGroup(p base.LogicalPlan) *joinGroupResult { } } // If the session var is set to off, we will still reject the outer joins. - if !p.SCtx().GetSessionVars().EnableOuterJoinReorder && (join.JoinType == LeftOuterJoin || join.JoinType == RightOuterJoin) { + if !p.SCtx().GetSessionVars().EnableOuterJoinReorder && (join.JoinType == logicalop.LeftOuterJoin || join.JoinType == logicalop.RightOuterJoin) { return &joinGroupResult{ group: []base.LogicalPlan{p}, joinOrderHintInfo: joinOrderHintInfo, @@ -87,16 +89,16 @@ func extractJoinGroup(p base.LogicalPlan) *joinGroupResult { rightHasHint = true } } - hasOuterJoin = hasOuterJoin || (join.JoinType != InnerJoin) + hasOuterJoin = hasOuterJoin || (join.JoinType != logicalop.InnerJoin) // If the left child has the hint, it means there are some join method hints want to specify the join method based on the left child. // For example: `select .. from t1 join t2 join (select .. from t3 join t4) t5 where ..;` If there are some join method hints related to `t5`, we can't split `t5` into `t3` and `t4`. // So we don't need to split the left child part. The right child part is the same. - if join.JoinType != RightOuterJoin && !leftHasHint { + if join.JoinType != logicalop.RightOuterJoin && !leftHasHint { lhsJoinGroupResult := extractJoinGroup(join.Children()[0]) lhsGroup, lhsEqualConds, lhsOtherConds, lhsJoinTypes, lhsJoinOrderHintInfo, lhsJoinMethodHintInfo, lhsHasOuterJoin := lhsJoinGroupResult.group, lhsJoinGroupResult.eqEdges, lhsJoinGroupResult.otherConds, lhsJoinGroupResult.joinTypes, lhsJoinGroupResult.joinOrderHintInfo, lhsJoinGroupResult.joinMethodHintInfo, lhsJoinGroupResult.hasOuterJoin noExpand := false // If the filters of the outer join is related with multiple leaves of the outer join side. We don't reorder it for now. - if join.JoinType == LeftOuterJoin { + if join.JoinType == logicalop.LeftOuterJoin { extractedCols := make([]*expression.Column, 0, 8) extractedCols = expression.ExtractColumnsFromExpressions(extractedCols, join.OtherConditions, nil) extractedCols = expression.ExtractColumnsFromExpressions(extractedCols, join.LeftConditions, nil) @@ -135,12 +137,12 @@ func extractJoinGroup(p base.LogicalPlan) *joinGroupResult { } // You can see the comments in the upside part which we try to split the left child part. It's the same here. - if join.JoinType != LeftOuterJoin && !rightHasHint { + if join.JoinType != logicalop.LeftOuterJoin && !rightHasHint { rhsJoinGroupResult := extractJoinGroup(join.Children()[1]) rhsGroup, rhsEqualConds, rhsOtherConds, rhsJoinTypes, rhsJoinOrderHintInfo, rhsJoinMethodHintInfo, rhsHasOuterJoin := rhsJoinGroupResult.group, rhsJoinGroupResult.eqEdges, rhsJoinGroupResult.otherConds, rhsJoinGroupResult.joinTypes, rhsJoinGroupResult.joinOrderHintInfo, rhsJoinGroupResult.joinMethodHintInfo, rhsJoinGroupResult.hasOuterJoin noExpand := false // If the filters of the outer join is related with multiple leaves of the outer join side. We don't reorder it for now. - if join.JoinType == RightOuterJoin { + if join.JoinType == logicalop.RightOuterJoin { extractedCols := make([]*expression.Column, 0, 8) extractedCols = expression.ExtractColumnsFromExpressions(extractedCols, join.OtherConditions, nil) extractedCols = expression.ExtractColumnsFromExpressions(extractedCols, join.RightConditions, nil) @@ -183,7 +185,7 @@ func extractJoinGroup(p base.LogicalPlan) *joinGroupResult { tmpOtherConds = append(tmpOtherConds, join.OtherConditions...) tmpOtherConds = append(tmpOtherConds, join.LeftConditions...) tmpOtherConds = append(tmpOtherConds, join.RightConditions...) - if join.JoinType == LeftOuterJoin || join.JoinType == RightOuterJoin || join.JoinType == LeftOuterSemiJoin || join.JoinType == AntiLeftOuterSemiJoin { + if join.JoinType == logicalop.LeftOuterJoin || join.JoinType == logicalop.RightOuterJoin || join.JoinType == logicalop.LeftOuterSemiJoin || join.JoinType == logicalop.AntiLeftOuterSemiJoin { for range join.EqualConditions { abType := &joinTypeWithExtMsg{JoinType: join.JoinType} // outer join's other condition should be bound with the connecting edge. @@ -211,7 +213,8 @@ func extractJoinGroup(p base.LogicalPlan) *joinGroupResult { } } -type joinReOrderSolver struct { +// JoinReOrderSolver is used to reorder the join nodes in a logical plan. +type JoinReOrderSolver struct { } type jrNode struct { @@ -220,11 +223,12 @@ type jrNode struct { } type joinTypeWithExtMsg struct { - JoinType + logicalop.JoinType outerBindCondition []expression.Expression } -func (s *joinReOrderSolver) optimize(_ context.Context, p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { +// Optimize implements the base.LogicalOptRule.<0th> interface. +func (s *JoinReOrderSolver) Optimize(_ context.Context, p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { planChanged := false tracer := &joinReorderTrace{cost: map[string]float64{}, opt: opt} tracer.traceJoinReorder(p) @@ -235,7 +239,7 @@ func (s *joinReOrderSolver) optimize(_ context.Context, p base.LogicalPlan, opt } // optimizeRecursive recursively collects join groups and applies join reorder algorithm for each group. -func (s *joinReOrderSolver) optimizeRecursive(ctx base.PlanContext, p base.LogicalPlan, tracer *joinReorderTrace) (base.LogicalPlan, error) { +func (s *JoinReOrderSolver) optimizeRecursive(ctx base.PlanContext, p base.LogicalPlan, tracer *joinReorderTrace) (base.LogicalPlan, error) { if _, ok := p.(*LogicalCTE); ok { return p, nil } @@ -256,7 +260,7 @@ func (s *joinReOrderSolver) optimizeRecursive(ctx base.PlanContext, p base.Logic // Not support outer join reorder when using the DP algorithm isSupportDP := true for _, joinType := range joinTypes { - if joinType.JoinType != InnerJoin { + if joinType.JoinType != logicalop.InnerJoin { isSupportDP = false break } @@ -317,7 +321,7 @@ func (s *joinReOrderSolver) optimizeRecursive(ctx base.PlanContext, p base.Logic } } if schemaChanged { - proj := LogicalProjection{ + proj := logicalop.LogicalProjection{ Exprs: expression.Column2Exprs(originalSchema.Columns), }.Init(p.SCtx(), p.QueryBlockOffset()) // Clone the schema here, because the schema may be changed by column pruning rules. @@ -411,7 +415,7 @@ func (s *baseSingleGroupJoinOrderSolver) generateLeadingJoinGroup(curJoinGroup [ for _, hintTbl := range hintInfo.LeadingJoinOrder { match := false for i, joinGroup := range leftJoinGroup { - tableAlias := extractTableAlias(joinGroup, joinGroup.QueryBlockOffset()) + tableAlias := util.ExtractTableAlias(joinGroup, joinGroup.QueryBlockOffset()) if tableAlias == nil { continue } @@ -499,7 +503,7 @@ func (s *baseSingleGroupJoinOrderSolver) baseNodeCumCost(groupNode base.LogicalP // checkConnection used to check whether two nodes have equal conditions or not. func (s *baseSingleGroupJoinOrderSolver) checkConnection(leftPlan, rightPlan base.LogicalPlan) (leftNode, rightNode base.LogicalPlan, usedEdges []*expression.ScalarFunction, joinType *joinTypeWithExtMsg) { - joinType = &joinTypeWithExtMsg{JoinType: InnerJoin} + joinType = &joinTypeWithExtMsg{JoinType: logicalop.InnerJoin} leftNode, rightNode = leftPlan, rightPlan for idx, edge := range s.eqEdges { lCol := edge.GetArgs()[0].(*expression.Column) @@ -509,7 +513,7 @@ func (s *baseSingleGroupJoinOrderSolver) checkConnection(leftPlan, rightPlan bas usedEdges = append(usedEdges, edge) } else if rightPlan.Schema().Contains(lCol) && leftPlan.Schema().Contains(rCol) { joinType = s.joinTypes[idx] - if joinType.JoinType != InnerJoin { + if joinType.JoinType != logicalop.InnerJoin { rightNode, leftNode = leftPlan, rightPlan usedEdges = append(usedEdges, edge) } else { @@ -538,13 +542,13 @@ func (s *baseSingleGroupJoinOrderSolver) checkConnection(leftPlan, rightPlan bas } func (*baseSingleGroupJoinOrderSolver) injectExpr(p base.LogicalPlan, expr expression.Expression) (base.LogicalPlan, *expression.Column) { - proj, ok := p.(*LogicalProjection) + proj, ok := p.(*logicalop.LogicalProjection) if !ok { - proj = LogicalProjection{Exprs: cols2Exprs(p.Schema().Columns)}.Init(p.SCtx(), p.QueryBlockOffset()) + proj = logicalop.LogicalProjection{Exprs: cols2Exprs(p.Schema().Columns)}.Init(p.SCtx(), p.QueryBlockOffset()) proj.SetSchema(p.Schema().Clone()) proj.SetChildren(p) } - return proj, proj.appendExpr(expr) + return proj, proj.AppendExpr(expr) } // makeJoin build join tree for the nodes which have equal conditions to connect them. @@ -573,7 +577,7 @@ func (s *baseSingleGroupJoinOrderSolver) makeJoin(leftPlan, rightPlan base.Logic return expression.ExprFromSchema(expr, mergedSchema) }) - if joinType.JoinType == LeftOuterJoin || joinType.JoinType == RightOuterJoin || joinType.JoinType == LeftOuterSemiJoin || joinType.JoinType == AntiLeftOuterSemiJoin { + if joinType.JoinType == logicalop.LeftOuterJoin || joinType.JoinType == logicalop.RightOuterJoin || joinType.JoinType == logicalop.LeftOuterSemiJoin || joinType.JoinType == logicalop.AntiLeftOuterSemiJoin { // the original outer join's other conditions has been bound to the outer join Edge, // these remained other condition here shouldn't be appended to it because on-mismatch // logic will produce more append-null rows which is banned in original semantic. @@ -629,7 +633,7 @@ func (s *baseSingleGroupJoinOrderSolver) makeBushyJoin(cartesianJoinGroup []base } // other conditions may be possible to exist across different cartesian join group, resolving cartesianJoin first then adding another selection. if len(s.otherConds) > 0 { - additionSelection := LogicalSelection{ + additionSelection := logicalop.LogicalSelection{ Conditions: s.otherConds, }.Init(cartesianJoinGroup[0].SCtx(), cartesianJoinGroup[0].QueryBlockOffset()) additionSelection.SetChildren(cartesianJoinGroup[0]) @@ -638,13 +642,13 @@ func (s *baseSingleGroupJoinOrderSolver) makeBushyJoin(cartesianJoinGroup []base return cartesianJoinGroup[0] } -func (s *baseSingleGroupJoinOrderSolver) newCartesianJoin(lChild, rChild base.LogicalPlan) *LogicalJoin { +func (s *baseSingleGroupJoinOrderSolver) newCartesianJoin(lChild, rChild base.LogicalPlan) *logicalop.LogicalJoin { offset := lChild.QueryBlockOffset() if offset != rChild.QueryBlockOffset() { offset = -1 } - join := LogicalJoin{ - JoinType: InnerJoin, + join := logicalop.LogicalJoin{ + JoinType: logicalop.InnerJoin, Reordered: true, }.Init(s.ctx, offset) join.SetSchema(expression.MergeSchema(lChild.Schema(), rChild.Schema())) @@ -654,7 +658,7 @@ func (s *baseSingleGroupJoinOrderSolver) newCartesianJoin(lChild, rChild base.Lo } func (s *baseSingleGroupJoinOrderSolver) newJoinWithEdges(lChild, rChild base.LogicalPlan, - eqEdges []*expression.ScalarFunction, otherConds, leftConds, rightConds []expression.Expression, joinType JoinType) base.LogicalPlan { + eqEdges []*expression.ScalarFunction, otherConds, leftConds, rightConds []expression.Expression, joinType logicalop.JoinType) base.LogicalPlan { newJoin := s.newCartesianJoin(lChild, rChild) newJoin.EqualConditions = eqEdges newJoin.OtherConditions = otherConds @@ -667,7 +671,7 @@ func (s *baseSingleGroupJoinOrderSolver) newJoinWithEdges(lChild, rChild base.Lo // setNewJoinWithHint sets the join method hint for the join node. // Before the join reorder process, we split the join node and collect the join method hint. // And we record the join method hint and reset the hint after we have finished the join reorder process. -func (s *baseSingleGroupJoinOrderSolver) setNewJoinWithHint(newJoin *LogicalJoin) { +func (s *baseSingleGroupJoinOrderSolver) setNewJoinWithHint(newJoin *logicalop.LogicalJoin) { lChild := newJoin.Children()[0] rChild := newJoin.Children()[1] if joinMethodHint, ok := s.joinMethodHintInfo[lChild.ID()]; ok { @@ -686,7 +690,8 @@ func (*baseSingleGroupJoinOrderSolver) calcJoinCumCost(join base.LogicalPlan, lN return join.StatsInfo().RowCount + lNode.cumCost + rNode.cumCost } -func (*joinReOrderSolver) name() string { +// Name implements the base.LogicalOptRule.<1st> interface. +func (*JoinReOrderSolver) Name() string { return "join_reorder" } diff --git a/pkg/planner/core/rule_join_reorder_dp.go b/pkg/planner/core/rule_join_reorder_dp.go index 06d5f28f825c3..804a5714f88fd 100644 --- a/pkg/planner/core/rule_join_reorder_dp.go +++ b/pkg/planner/core/rule_join_reorder_dp.go @@ -20,12 +20,13 @@ import ( "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/util/dbterror/plannererrors" ) type joinReorderDPSolver struct { *baseSingleGroupJoinOrderSolver - newJoin func(lChild, rChild base.LogicalPlan, eqConds []*expression.ScalarFunction, otherConds, leftConds, rightConds []expression.Expression, joinType JoinType) base.LogicalPlan + newJoin func(lChild, rChild base.LogicalPlan, eqConds []*expression.ScalarFunction, otherConds, leftConds, rightConds []expression.Expression, joinType logicalop.JoinType) base.LogicalPlan } type joinGroupEqEdge struct { @@ -253,7 +254,7 @@ func (s *joinReorderDPSolver) newJoinWithEdge(leftPlan, rightPlan base.LogicalPl eqConds = append(eqConds, newSf) } } - join := s.newJoin(leftPlan, rightPlan, eqConds, otherConds, nil, nil, InnerJoin) + join := s.newJoin(leftPlan, rightPlan, eqConds, otherConds, nil, nil, logicalop.InnerJoin) _, err := join.RecursiveDeriveStats(nil) return join, err } @@ -275,7 +276,7 @@ func (s *joinReorderDPSolver) makeBushyJoin(cartesianJoinGroup []base.LogicalPla otherConds, usedOtherConds = expression.FilterOutInPlace(otherConds, func(expr expression.Expression) bool { return expression.ExprFromSchema(expr, mergedSchema) }) - resultJoinGroup = append(resultJoinGroup, s.newJoin(cartesianJoinGroup[i], cartesianJoinGroup[i+1], nil, usedOtherConds, nil, nil, InnerJoin)) + resultJoinGroup = append(resultJoinGroup, s.newJoin(cartesianJoinGroup[i], cartesianJoinGroup[i+1], nil, usedOtherConds, nil, nil, logicalop.InnerJoin)) } cartesianJoinGroup = resultJoinGroup } diff --git a/pkg/planner/core/rule_join_reorder_dp_test.go b/pkg/planner/core/rule_join_reorder_dp_test.go index 2748a977d9f1f..b859971fee316 100644 --- a/pkg/planner/core/rule_join_reorder_dp_test.go +++ b/pkg/planner/core/rule_join_reorder_dp_test.go @@ -34,7 +34,7 @@ type mockLogicalJoin struct { logicalop.LogicalSchemaProducer involvedNodeSet int statsMap map[int]*property.StatsInfo - JoinType JoinType + JoinType logicalop.JoinType } func (mj mockLogicalJoin) init(ctx base.PlanContext) *mockLogicalJoin { @@ -50,8 +50,8 @@ func (mj *mockLogicalJoin) RecursiveDeriveStats(_ [][]*expression.Column) (*prop return mj.statsMap[mj.involvedNodeSet], nil } -func newMockJoin(ctx base.PlanContext, statsMap map[int]*property.StatsInfo) func(lChild, rChild base.LogicalPlan, _ []*expression.ScalarFunction, _, _, _ []expression.Expression, joinType JoinType) base.LogicalPlan { - return func(lChild, rChild base.LogicalPlan, _ []*expression.ScalarFunction, _, _, _ []expression.Expression, joinType JoinType) base.LogicalPlan { +func newMockJoin(ctx base.PlanContext, statsMap map[int]*property.StatsInfo) func(lChild, rChild base.LogicalPlan, _ []*expression.ScalarFunction, _, _, _ []expression.Expression, joinType logicalop.JoinType) base.LogicalPlan { + return func(lChild, rChild base.LogicalPlan, _ []*expression.ScalarFunction, _, _, _ []expression.Expression, joinType logicalop.JoinType) base.LogicalPlan { retJoin := mockLogicalJoin{}.init(ctx) retJoin.SetSchema(expression.MergeSchema(lChild.Schema(), rChild.Schema())) retJoin.statsMap = statsMap diff --git a/pkg/planner/core/rule_max_min_eliminate.go b/pkg/planner/core/rule_max_min_eliminate.go index 13cba96e7f924..c6cb256fcf0f0 100644 --- a/pkg/planner/core/rule_max_min_eliminate.go +++ b/pkg/planner/core/rule_max_min_eliminate.go @@ -32,27 +32,28 @@ import ( "github.com/pingcap/tidb/pkg/util/ranger" ) -// maxMinEliminator tries to eliminate max/min aggregate function. +// MaxMinEliminator tries to eliminate max/min aggregate function. // For SQL like `select max(id) from t;`, we could optimize it to `select max(id) from (select id from t order by id desc limit 1 where id is not null) t;`. // For SQL like `select min(id) from t;`, we could optimize it to `select min(id) from (select id from t order by id limit 1 where id is not null) t;`. // For SQL like `select max(id), min(id) from t;`, we could optimize it to the cartesianJoin result of the two queries above if `id` has an index. -type maxMinEliminator struct { +type MaxMinEliminator struct { } -func (a *maxMinEliminator) optimize(_ context.Context, p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { +// Optimize implements base.LogicalOptRule.<0th> interface. +func (a *MaxMinEliminator) Optimize(_ context.Context, p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { planChanged := false return a.eliminateMaxMin(p, opt), planChanged, nil } // composeAggsByInnerJoin composes the scalar aggregations by cartesianJoin. -func (*maxMinEliminator) composeAggsByInnerJoin(originAgg *LogicalAggregation, aggs []*LogicalAggregation, opt *optimizetrace.LogicalOptimizeOp) (plan base.LogicalPlan) { +func (*MaxMinEliminator) composeAggsByInnerJoin(originAgg *logicalop.LogicalAggregation, aggs []*logicalop.LogicalAggregation, opt *optimizetrace.LogicalOptimizeOp) (plan base.LogicalPlan) { plan = aggs[0] sctx := plan.SCtx() - joins := make([]*LogicalJoin, 0) + joins := make([]*logicalop.LogicalJoin, 0) for i := 1; i < len(aggs); i++ { - join := LogicalJoin{JoinType: InnerJoin}.Init(sctx, plan.QueryBlockOffset()) + join := logicalop.LogicalJoin{JoinType: logicalop.InnerJoin}.Init(sctx, plan.QueryBlockOffset()) join.SetChildren(plan, aggs[i]) - join.SetSchema(buildLogicalJoinSchema(InnerJoin, join)) + join.SetSchema(logicalop.BuildLogicalJoinSchema(logicalop.InnerJoin, join)) join.CartesianJoin = true plan = join joins = append(joins, join) @@ -64,9 +65,9 @@ func (*maxMinEliminator) composeAggsByInnerJoin(originAgg *LogicalAggregation, a // checkColCanUseIndex checks whether there is an AccessPath satisfy the conditions: // 1. all of the selection's condition can be pushed down as AccessConds of the path. // 2. the path can keep order for `col` after pushing down the conditions. -func (a *maxMinEliminator) checkColCanUseIndex(plan base.LogicalPlan, col *expression.Column, conditions []expression.Expression) bool { +func (a *MaxMinEliminator) checkColCanUseIndex(plan base.LogicalPlan, col *expression.Column, conditions []expression.Expression) bool { switch p := plan.(type) { - case *LogicalSelection: + case *logicalop.LogicalSelection: conditions = append(conditions, p.Conditions...) return a.checkColCanUseIndex(p.Children()[0], col, conditions) case *DataSource: @@ -108,12 +109,12 @@ func (a *maxMinEliminator) checkColCanUseIndex(plan base.LogicalPlan, col *expre // cloneSubPlans shallow clones the subPlan. We only consider `Selection` and `DataSource` here, // because we have restricted the subPlan in `checkColCanUseIndex`. -func (a *maxMinEliminator) cloneSubPlans(plan base.LogicalPlan) base.LogicalPlan { +func (a *MaxMinEliminator) cloneSubPlans(plan base.LogicalPlan) base.LogicalPlan { switch p := plan.(type) { - case *LogicalSelection: + case *logicalop.LogicalSelection: newConditions := make([]expression.Expression, len(p.Conditions)) copy(newConditions, p.Conditions) - sel := LogicalSelection{Conditions: newConditions}.Init(p.SCtx(), p.QueryBlockOffset()) + sel := logicalop.LogicalSelection{Conditions: newConditions}.Init(p.SCtx(), p.QueryBlockOffset()) sel.SetChildren(a.cloneSubPlans(p.Children()[0])) return sel case *DataSource: @@ -141,7 +142,7 @@ func (a *maxMinEliminator) cloneSubPlans(plan base.LogicalPlan) base.LogicalPlan // `select max(a) from t` + `select min(a) from t` + `select max(b) from t`. // Then we check whether `a` and `b` have indices. If any of the used column has no index, we cannot eliminate // this aggregation. -func (a *maxMinEliminator) splitAggFuncAndCheckIndices(agg *LogicalAggregation, opt *optimizetrace.LogicalOptimizeOp) (aggs []*LogicalAggregation, canEliminate bool) { +func (a *MaxMinEliminator) splitAggFuncAndCheckIndices(agg *logicalop.LogicalAggregation, opt *optimizetrace.LogicalOptimizeOp) (aggs []*logicalop.LogicalAggregation, canEliminate bool) { for _, f := range agg.AggFuncs { // We must make sure the args of max/min is a simple single column. col, ok := f.Args[0].(*expression.Column) @@ -152,10 +153,10 @@ func (a *maxMinEliminator) splitAggFuncAndCheckIndices(agg *LogicalAggregation, return nil, false } } - aggs = make([]*LogicalAggregation, 0, len(agg.AggFuncs)) + aggs = make([]*logicalop.LogicalAggregation, 0, len(agg.AggFuncs)) // we can split the aggregation only if all of the aggFuncs pass the check. for i, f := range agg.AggFuncs { - newAgg := LogicalAggregation{AggFuncs: []*aggregation.AggFuncDesc{f}}.Init(agg.SCtx(), agg.QueryBlockOffset()) + newAgg := logicalop.LogicalAggregation{AggFuncs: []*aggregation.AggFuncDesc{f}}.Init(agg.SCtx(), agg.QueryBlockOffset()) newAgg.SetChildren(a.cloneSubPlans(agg.Children()[0])) newAgg.SetSchema(expression.NewSchema(agg.Schema().Columns[i])) // Since LogicalAggregation doesn’t use the parent base.LogicalPlan, passing an incorrect parameter here won’t affect subsequent optimizations. @@ -166,25 +167,25 @@ func (a *maxMinEliminator) splitAggFuncAndCheckIndices(agg *LogicalAggregation, if p, err = newAgg.PruneColumns([]*expression.Column{newAgg.Schema().Columns[0]}, opt); err != nil { return nil, false } - newAgg = p.(*LogicalAggregation) + newAgg = p.(*logicalop.LogicalAggregation) aggs = append(aggs, newAgg) } return aggs, true } // eliminateSingleMaxMin tries to convert a single max/min to Limit+Sort operators. -func (*maxMinEliminator) eliminateSingleMaxMin(agg *LogicalAggregation, opt *optimizetrace.LogicalOptimizeOp) *LogicalAggregation { +func (*MaxMinEliminator) eliminateSingleMaxMin(agg *logicalop.LogicalAggregation, opt *optimizetrace.LogicalOptimizeOp) *logicalop.LogicalAggregation { f := agg.AggFuncs[0] child := agg.Children()[0] ctx := agg.SCtx() - var sel *LogicalSelection - var sort *LogicalSort + var sel *logicalop.LogicalSelection + var sort *logicalop.LogicalSort // If there's no column in f.GetArgs()[0], we still need limit and read data from real table because the result should be NULL if the input is empty. if len(expression.ExtractColumns(f.Args[0])) > 0 { // If it can be NULL, we need to filter NULL out first. if !mysql.HasNotNullFlag(f.Args[0].GetType(ctx.GetExprCtx().GetEvalCtx()).GetFlag()) { - sel = LogicalSelection{}.Init(ctx, agg.QueryBlockOffset()) + sel = logicalop.LogicalSelection{}.Init(ctx, agg.QueryBlockOffset()) isNullFunc := expression.NewFunctionInternal(ctx.GetExprCtx(), ast.IsNull, types.NewFieldType(mysql.TypeTiny), f.Args[0]) notNullFunc := expression.NewFunctionInternal(ctx.GetExprCtx(), ast.UnaryNot, types.NewFieldType(mysql.TypeTiny), isNullFunc) sel.Conditions = []expression.Expression{notNullFunc} @@ -196,14 +197,14 @@ func (*maxMinEliminator) eliminateSingleMaxMin(agg *LogicalAggregation, opt *opt // For max function, the sort order should be desc. desc := f.Name == ast.AggFuncMax // Compose Sort operator. - sort = LogicalSort{}.Init(ctx, agg.QueryBlockOffset()) + sort = logicalop.LogicalSort{}.Init(ctx, agg.QueryBlockOffset()) sort.ByItems = append(sort.ByItems, &util.ByItems{Expr: f.Args[0], Desc: desc}) sort.SetChildren(child) child = sort } // Compose Limit operator. - li := LogicalLimit{Count: 1}.Init(ctx, agg.QueryBlockOffset()) + li := logicalop.LogicalLimit{Count: 1}.Init(ctx, agg.QueryBlockOffset()) li.SetChildren(child) // If no data in the child, we need to return NULL instead of empty. This cannot be done by sort and limit themselves. @@ -214,7 +215,7 @@ func (*maxMinEliminator) eliminateSingleMaxMin(agg *LogicalAggregation, opt *opt } // eliminateMaxMin tries to convert max/min to Limit+Sort operators. -func (a *maxMinEliminator) eliminateMaxMin(p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) base.LogicalPlan { +func (a *MaxMinEliminator) eliminateMaxMin(p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) base.LogicalPlan { // CTE's logical optimization is indenpent. if _, ok := p.(*LogicalCTE); ok { return p @@ -224,7 +225,7 @@ func (a *maxMinEliminator) eliminateMaxMin(p base.LogicalPlan, opt *optimizetrac newChildren = append(newChildren, a.eliminateMaxMin(child, opt)) } p.SetChildren(newChildren...) - if agg, ok := p.(*LogicalAggregation); ok { + if agg, ok := p.(*logicalop.LogicalAggregation); ok { if len(agg.GroupByItems) != 0 { return agg } @@ -260,11 +261,12 @@ func (a *maxMinEliminator) eliminateMaxMin(p base.LogicalPlan, opt *optimizetrac return p } -func (*maxMinEliminator) name() string { +// Name implements base.LogicalOptRule.<1st> interface. +func (*MaxMinEliminator) Name() string { return "max_min_eliminate" } -func appendEliminateSingleMaxMinTrace(agg *LogicalAggregation, sel *LogicalSelection, sort *LogicalSort, limit *LogicalLimit, opt *optimizetrace.LogicalOptimizeOp) { +func appendEliminateSingleMaxMinTrace(agg *logicalop.LogicalAggregation, sel *logicalop.LogicalSelection, sort *logicalop.LogicalSort, limit *logicalop.LogicalLimit, opt *optimizetrace.LogicalOptimizeOp) { action := func() string { buffer := bytes.NewBufferString("") if sel != nil { @@ -289,7 +291,7 @@ func appendEliminateSingleMaxMinTrace(agg *LogicalAggregation, sel *LogicalSelec opt.AppendStepToCurrent(agg.ID(), agg.TP(), reason, action) } -func appendEliminateMultiMinMaxTraceStep(originAgg *LogicalAggregation, aggs []*LogicalAggregation, joins []*LogicalJoin, opt *optimizetrace.LogicalOptimizeOp) { +func appendEliminateMultiMinMaxTraceStep(originAgg *logicalop.LogicalAggregation, aggs []*logicalop.LogicalAggregation, joins []*logicalop.LogicalJoin, opt *optimizetrace.LogicalOptimizeOp) { action := func() string { buffer := bytes.NewBufferString(fmt.Sprintf("%v_%v splited into [", originAgg.TP(), originAgg.ID())) for i, agg := range aggs { diff --git a/pkg/planner/core/rule_outer_to_inner_join.go b/pkg/planner/core/rule_outer_to_inner_join.go index 433739752992c..47cd20fd151e1 100644 --- a/pkg/planner/core/rule_outer_to_inner_join.go +++ b/pkg/planner/core/rule_outer_to_inner_join.go @@ -17,28 +17,15 @@ package core import ( "context" - "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/planner/core/base" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" ) -func mergeOnClausePredicates(p *LogicalJoin, predicates []expression.Expression) []expression.Expression { - combinedCond := make([]expression.Expression, 0, - len(p.LeftConditions)+len(p.RightConditions)+ - len(p.EqualConditions)+len(p.OtherConditions)+ - len(predicates)) - combinedCond = append(combinedCond, p.LeftConditions...) - combinedCond = append(combinedCond, p.RightConditions...) - combinedCond = append(combinedCond, expression.ScalarFuncs2Exprs(p.EqualConditions)...) - combinedCond = append(combinedCond, p.OtherConditions...) - combinedCond = append(combinedCond, predicates...) - return combinedCond -} - -// convertOuterToInnerJoin converts outer to inner joins if the unmtaching rows are filtered. -type convertOuterToInnerJoin struct { +// ConvertOuterToInnerJoin converts outer to inner joins if the unmtaching rows are filtered. +type ConvertOuterToInnerJoin struct { } +// Optimize implements base.LogicalOptRule.<0th> interface. // convertOuterToInnerJoin is refactoring of the outer to inner join logic that used to be part of predicate push down. // The rewrite passes down predicates from selection (WHERE clause) and join predicates (ON clause). // All nodes except LogicalJoin are pass through where the rewrite is done for the child and nothing for the node itself. @@ -50,7 +37,7 @@ type convertOuterToInnerJoin struct { // - For inner/semi joins, the ON clause can be applied on both children // - For anti semi joins, ON clause applied only on left side // - For all other cases, do not pass ON clause. -func (*convertOuterToInnerJoin) optimize(_ context.Context, p base.LogicalPlan, _ *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { +func (*ConvertOuterToInnerJoin) Optimize(_ context.Context, p base.LogicalPlan, _ *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { planChanged := false return p.ConvertOuterToInnerJoin(nil), planChanged, nil } @@ -59,6 +46,7 @@ func (*convertOuterToInnerJoin) optimize(_ context.Context, p base.LogicalPlan, // Also, predicates involving aggregate expressions are not null filtering. IsNullReject always returns // false for those cases. -func (*convertOuterToInnerJoin) name() string { +// Name implements base.LogicalOptRule.<1st> interface. +func (*ConvertOuterToInnerJoin) Name() string { return "convert_outer_to_inner_joins" } diff --git a/pkg/planner/core/rule_partition_processor.go b/pkg/planner/core/rule_partition_processor.go index f237059aa8042..8601b44e3d64d 100644 --- a/pkg/planner/core/rule_partition_processor.go +++ b/pkg/planner/core/rule_partition_processor.go @@ -42,12 +42,13 @@ import ( "github.com/pingcap/tidb/pkg/util/plancodec" "github.com/pingcap/tidb/pkg/util/ranger" "github.com/pingcap/tidb/pkg/util/set" + "github.com/pingcap/tipb/go-tipb" ) // FullRange represent used all partitions. const FullRange = -1 -// partitionProcessor rewrites the ast for table partition. +// PartitionProcessor rewrites the ast for table partition. // Used by static partition prune mode. /* // create table t (id int) partition by range (id) @@ -61,32 +62,38 @@ const FullRange = -1 // select * from p2 where id < 20 // select * from p3 where id < 30) */ -// partitionProcessor is here because it's easier to prune partition after predicate push down. -type partitionProcessor struct{} +// PartitionProcessor is here because it's easier to prune partition after predicate push down. +type PartitionProcessor struct{} -func (s *partitionProcessor) optimize(_ context.Context, lp base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { +// Optimize implements the LogicalOptRule.<0th> interface. +func (s *PartitionProcessor) Optimize(_ context.Context, lp base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { planChanged := false p, err := s.rewriteDataSource(lp, opt) return p, planChanged, err } -func (s *partitionProcessor) rewriteDataSource(lp base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, error) { +// Name implements the LogicalOptRule.<1st> interface. +func (*PartitionProcessor) Name() string { + return "partition_processor" +} + +func (s *PartitionProcessor) rewriteDataSource(lp base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, error) { // Assert there will not be sel -> sel in the ast. switch p := lp.(type) { case *DataSource: return s.prune(p, opt) - case *LogicalUnionScan: + case *logicalop.LogicalUnionScan: ds := p.Children()[0] ds, err := s.prune(ds.(*DataSource), opt) if err != nil { return nil, err } - if ua, ok := ds.(*LogicalPartitionUnionAll); ok { + if ua, ok := ds.(*logicalop.LogicalPartitionUnionAll); ok { // Adjust the UnionScan->Union->DataSource1, DataSource2 ... to // Union->(UnionScan->DataSource1), (UnionScan->DataSource2) children := make([]base.LogicalPlan, 0, len(ua.Children())) for _, child := range ua.Children() { - us := LogicalUnionScan{ + us := logicalop.LogicalUnionScan{ Conditions: p.Conditions, HandleCols: p.HandleCols, }.Init(ua.SCtx(), ua.QueryBlockOffset()) @@ -147,7 +154,7 @@ func getPartColumnsForHashPartition(hashExpr expression.Expression) ([]*expressi return partCols, colLen } -func (s *partitionProcessor) getUsedHashPartitions(ctx base.PlanContext, +func (s *PartitionProcessor) getUsedHashPartitions(ctx base.PlanContext, tbl table.Table, partitionNames []model.CIStr, columns []*expression.Column, conds []expression.Expression, names types.NameSlice) ([]int, error) { pi := tbl.Meta().Partition @@ -265,7 +272,7 @@ func (s *partitionProcessor) getUsedHashPartitions(ctx base.PlanContext, return used, nil } -func (s *partitionProcessor) getUsedKeyPartitions(ctx base.PlanContext, +func (s *PartitionProcessor) getUsedKeyPartitions(ctx base.PlanContext, tbl table.Table, partitionNames []model.CIStr, columns []*expression.Column, conds []expression.Expression, _ types.NameSlice) ([]int, error) { pi := tbl.Meta().Partition @@ -373,7 +380,7 @@ func (s *partitionProcessor) getUsedKeyPartitions(ctx base.PlanContext, } // getUsedPartitions is used to get used partitions for hash or key partition tables -func (s *partitionProcessor) getUsedPartitions(ctx base.PlanContext, tbl table.Table, +func (s *PartitionProcessor) getUsedPartitions(ctx base.PlanContext, tbl table.Table, partitionNames []model.CIStr, columns []*expression.Column, conds []expression.Expression, names types.NameSlice, partType model.PartitionType) ([]int, error) { if partType == model.PartitionTypeHash { @@ -384,7 +391,7 @@ func (s *partitionProcessor) getUsedPartitions(ctx base.PlanContext, tbl table.T // findUsedPartitions is used to get used partitions for hash or key partition tables. // The first returning is the used partition index set pruned by `conds`. -func (s *partitionProcessor) findUsedPartitions(ctx base.PlanContext, +func (s *PartitionProcessor) findUsedPartitions(ctx base.PlanContext, tbl table.Table, partitionNames []model.CIStr, conds []expression.Expression, columns []*expression.Column, names types.NameSlice) ([]int, error) { pi := tbl.Meta().Partition @@ -407,7 +414,7 @@ func (s *partitionProcessor) findUsedPartitions(ctx base.PlanContext, return ret, nil } -func (s *partitionProcessor) convertToIntSlice(or partitionRangeOR, pi *model.PartitionInfo, partitionNames []model.CIStr) []int { +func (s *PartitionProcessor) convertToIntSlice(or partitionRangeOR, pi *model.PartitionInfo, partitionNames []model.CIStr) []int { if len(or) == 1 && or[0].start == 0 && or[0].end == len(pi.Definitions) { if len(partitionNames) == 0 { if len(pi.Definitions) == 1 { @@ -441,7 +448,7 @@ func convertToRangeOr(used []int, pi *model.PartitionInfo) partitionRangeOR { } // pruneHashOrKeyPartition is used to prune hash or key partition tables -func (s *partitionProcessor) pruneHashOrKeyPartition(ctx base.PlanContext, tbl table.Table, partitionNames []model.CIStr, +func (s *PartitionProcessor) pruneHashOrKeyPartition(ctx base.PlanContext, tbl table.Table, partitionNames []model.CIStr, conds []expression.Expression, columns []*expression.Column, names types.NameSlice) ([]int, error) { used, err := s.findUsedPartitions(ctx, tbl, partitionNames, conds, columns, names) if err != nil { @@ -453,7 +460,7 @@ func (s *partitionProcessor) pruneHashOrKeyPartition(ctx base.PlanContext, tbl t // reconstructTableColNames reconstructs FieldsNames according to ds.TblCols. // ds.names may not match ds.TblCols since ds.names is pruned while ds.TblCols contains all original columns. // please see https://github.com/pingcap/tidb/issues/22635 for more details. -func (*partitionProcessor) reconstructTableColNames(ds *DataSource) ([]*types.FieldName, error) { +func (*PartitionProcessor) reconstructTableColNames(ds *DataSource) ([]*types.FieldName, error) { names := make([]*types.FieldName, 0, len(ds.TblCols)) // Use DeletableCols to get all the columns. colsInfo := ds.table.DeletableCols() @@ -497,7 +504,7 @@ func (*partitionProcessor) reconstructTableColNames(ds *DataSource) ([]*types.Fi return names, nil } -func (s *partitionProcessor) processHashOrKeyPartition(ds *DataSource, pi *model.PartitionInfo, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, error) { +func (s *PartitionProcessor) processHashOrKeyPartition(ds *DataSource, pi *model.PartitionInfo, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, error) { names, err := s.reconstructTableColNames(ds) if err != nil { return nil, err @@ -510,7 +517,7 @@ func (s *partitionProcessor) processHashOrKeyPartition(ds *DataSource, pi *model if used != nil { return s.makeUnionAllChildren(ds, pi, convertToRangeOr(used, pi), opt) } - tableDual := LogicalTableDual{RowCount: 0}.Init(ds.SCtx(), ds.QueryBlockOffset()) + tableDual := logicalop.LogicalTableDual{RowCount: 0}.Init(ds.SCtx(), ds.QueryBlockOffset()) tableDual.SCtx().GetSessionVars().StmtCtx.SetSkipPlanCache("TableDual/Static partition pruning mode") tableDual.SetSchema(ds.Schema()) appendNoPartitionChildTraceStep(ds, tableDual, opt) @@ -519,7 +526,7 @@ func (s *partitionProcessor) processHashOrKeyPartition(ds *DataSource, pi *model // listPartitionPruner uses to prune partition for list partition. type listPartitionPruner struct { - *partitionProcessor + *PartitionProcessor ctx base.PlanContext pi *model.PartitionInfo partitionNames []model.CIStr @@ -527,7 +534,7 @@ type listPartitionPruner struct { listPrune *tables.ForListPruning } -func newListPartitionPruner(ctx base.PlanContext, tbl table.Table, partitionNames []model.CIStr, s *partitionProcessor, pruneList *tables.ForListPruning, columns []*expression.Column) *listPartitionPruner { +func newListPartitionPruner(ctx base.PlanContext, tbl table.Table, partitionNames []model.CIStr, s *PartitionProcessor, pruneList *tables.ForListPruning, columns []*expression.Column) *listPartitionPruner { pruneList = pruneList.Clone() for i := range pruneList.PruneExprCols { for j := range columns { @@ -548,7 +555,7 @@ func newListPartitionPruner(ctx base.PlanContext, tbl table.Table, partitionName fullRange := make(map[int]struct{}) fullRange[FullRange] = struct{}{} return &listPartitionPruner{ - partitionProcessor: s, + PartitionProcessor: s, ctx: ctx, pi: tbl.Meta().Partition, partitionNames: partitionNames, @@ -782,7 +789,7 @@ func (l *listPartitionPruner) findUsedListPartitions(conds []expression.Expressi return used, nil } -func (s *partitionProcessor) findUsedListPartitions(ctx base.PlanContext, tbl table.Table, partitionNames []model.CIStr, +func (s *PartitionProcessor) findUsedListPartitions(ctx base.PlanContext, tbl table.Table, partitionNames []model.CIStr, conds []expression.Expression, columns []*expression.Column) ([]int, error) { pi := tbl.Meta().Partition partExpr := tbl.(partitionTable).PartitionExpr() @@ -810,7 +817,7 @@ func (s *partitionProcessor) findUsedListPartitions(ctx base.PlanContext, tbl ta return ret, nil } -func (s *partitionProcessor) pruneListPartition(ctx base.PlanContext, tbl table.Table, partitionNames []model.CIStr, +func (s *PartitionProcessor) pruneListPartition(ctx base.PlanContext, tbl table.Table, partitionNames []model.CIStr, conds []expression.Expression, columns []*expression.Column) ([]int, error) { used, err := s.findUsedListPartitions(ctx, tbl, partitionNames, conds, columns) if err != nil { @@ -819,7 +826,7 @@ func (s *partitionProcessor) pruneListPartition(ctx base.PlanContext, tbl table. return used, nil } -func (s *partitionProcessor) prune(ds *DataSource, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, error) { +func (s *PartitionProcessor) prune(ds *DataSource, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, error) { pi := ds.TableInfo.GetPartitionInfo() if pi == nil { return ds, nil @@ -848,7 +855,7 @@ func (s *partitionProcessor) prune(ds *DataSource, opt *optimizetrace.LogicalOpt } // findByName checks whether object name exists in list. -func (*partitionProcessor) findByName(partitionNames []model.CIStr, partitionName string) bool { +func (*PartitionProcessor) findByName(partitionNames []model.CIStr, partitionName string) bool { for _, s := range partitionNames { if s.L == partitionName { return true @@ -857,10 +864,6 @@ func (*partitionProcessor) findByName(partitionNames []model.CIStr, partitionNam return false } -func (*partitionProcessor) name() string { - return "partition_processor" -} - type lessThanDataInt struct { data []int64 unsigned bool @@ -996,7 +999,7 @@ func intersectionRange(start, end, newStart, newEnd int) (s int, e int) { return s, e } -func (s *partitionProcessor) pruneRangePartition(ctx base.PlanContext, pi *model.PartitionInfo, tbl table.PartitionedTable, conds []expression.Expression, +func (s *PartitionProcessor) pruneRangePartition(ctx base.PlanContext, pi *model.PartitionInfo, tbl table.PartitionedTable, conds []expression.Expression, columns []*expression.Column, names types.NameSlice) (partitionRangeOR, error) { partExpr := tbl.(partitionTable).PartitionExpr() @@ -1032,7 +1035,7 @@ func (s *partitionProcessor) pruneRangePartition(ctx base.PlanContext, pi *model return result, nil } -func (s *partitionProcessor) processRangePartition(ds *DataSource, pi *model.PartitionInfo, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, error) { +func (s *PartitionProcessor) processRangePartition(ds *DataSource, pi *model.PartitionInfo, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, error) { used, err := s.pruneRangePartition(ds.SCtx(), pi, ds.table.(table.PartitionedTable), ds.AllConds, ds.TblCols, ds.OutputNames()) if err != nil { return nil, err @@ -1040,7 +1043,7 @@ func (s *partitionProcessor) processRangePartition(ds *DataSource, pi *model.Par return s.makeUnionAllChildren(ds, pi, used, opt) } -func (s *partitionProcessor) processListPartition(ds *DataSource, pi *model.PartitionInfo, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, error) { +func (s *PartitionProcessor) processListPartition(ds *DataSource, pi *model.PartitionInfo, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, error) { used, err := s.pruneListPartition(ds.SCtx(), ds.table, ds.PartitionNames, ds.AllConds, ds.TblCols) if err != nil { return nil, err @@ -1067,9 +1070,11 @@ func makePartitionByFnCol(sctx base.PlanContext, columns []*expression.Column, n switch raw := partExpr.(type) { case *expression.ScalarFunction: args := raw.GetArgs() - // Special handle for floor(unix_timestamp(ts)) as partition expression. - // This pattern is so common for timestamp(3) column as partition expression that it deserve an optimization. - if raw.FuncName.L == ast.Floor { + // Optimizations for a limited set of functions + switch raw.FuncName.L { + case ast.Floor: + // Special handle for floor(unix_timestamp(ts)) as partition expression. + // This pattern is so common for timestamp(3) column as partition expression that it deserve an optimization. if ut, ok := args[0].(*expression.ScalarFunction); ok && ut.FuncName.L == ast.UnixTimestamp { args1 := ut.GetArgs() if len(args1) == 1 { @@ -1078,6 +1083,58 @@ func makePartitionByFnCol(sctx base.PlanContext, columns []*expression.Column, n } } } + case ast.Extract: + con, ok := args[0].(*expression.Constant) + if !ok { + break + } + col, ok = args[1].(*expression.Column) + if !ok { + // Special case where CastTimeToDuration is added + expr, ok := args[1].(*expression.ScalarFunction) + if !ok { + break + } + if expr.Function.PbCode() != tipb.ScalarFuncSig_CastTimeAsDuration { + break + } + castArgs := expr.GetArgs() + col, ok = castArgs[0].(*expression.Column) + if !ok { + break + } + } + if con.Value.Kind() != types.KindString { + break + } + val := con.Value.GetString() + colType := col.GetStaticType().GetType() + switch colType { + case mysql.TypeDate, mysql.TypeDatetime: + switch val { + // Only YEAR, YEAR_MONTH can be considered monotonic, the rest will wrap around! + case "YEAR", "YEAR_MONTH": + // Note, this function will not have the column as first argument, + // so in replaceColumnWithConst it will replace the second argument, which + // is special handling there too! + return col, raw, monotoneModeNonStrict, nil + default: + return col, raw, monotonous, nil + } + case mysql.TypeDuration: + switch val { + // Only HOUR* can be considered monotonic, the rest will wrap around! + // TODO: if fsp match for HOUR_SECOND or HOUR_MICROSECOND we could + // mark it as monotoneModeStrict + case "HOUR", "HOUR_MINUTE", "HOUR_SECOND", "HOUR_MICROSECOND": + // Note, this function will not have the column as first argument, + // so in replaceColumnWithConst it will replace the second argument, which + // is special handling there too! + return col, raw, monotoneModeNonStrict, nil + default: + return col, raw, monotonous, nil + } + } } fn = raw @@ -1552,6 +1609,15 @@ func replaceColumnWithConst(partFn *expression.ScalarFunction, con *expression.C args[0] = con return partFn } + } else if partFn.FuncName.L == ast.Extract { + if expr, ok := args[1].(*expression.ScalarFunction); ok && expr.Function.PbCode() == tipb.ScalarFuncSig_CastTimeAsDuration { + // Special handing if Cast is added + funcArgs := expr.GetArgs() + funcArgs[0] = con + return partFn + } + args[1] = con + return partFn } // No 'copy on write' for the expression here, this is a dangerous operation. @@ -1647,7 +1713,7 @@ func pruneUseBinarySearch(lessThan lessThanDataInt, data dataForPrune) (start in return start, end } -func (*partitionProcessor) resolveAccessPaths(ds *DataSource) error { +func (*PartitionProcessor) resolveAccessPaths(ds *DataSource) error { possiblePaths, err := getPossibleAccessPaths( ds.SCtx(), &h.PlanHints{IndexMergeHintList: ds.IndexMergeHints, IndexHintList: ds.IndexHints}, ds.AstIndexHints, ds.table, ds.DBName, ds.TableInfo.Name, ds.IsForUpdateRead, true) @@ -1662,7 +1728,7 @@ func (*partitionProcessor) resolveAccessPaths(ds *DataSource) error { return nil } -func (s *partitionProcessor) resolveOptimizeHint(ds *DataSource, partitionName model.CIStr) error { +func (s *PartitionProcessor) resolveOptimizeHint(ds *DataSource, partitionName model.CIStr) error { // index hint if len(ds.IndexHints) > 0 { newIndexHint := make([]h.HintedIndex, 0, len(ds.IndexHints)) @@ -1747,7 +1813,7 @@ func appendWarnForUnknownPartitions(ctx base.PlanContext, hintName string, unkno ctx.GetSessionVars().StmtCtx.SetHintWarningFromError(warning) } -func (*partitionProcessor) checkHintsApplicable(ds *DataSource, partitionSet set.StringSet) { +func (*PartitionProcessor) checkHintsApplicable(ds *DataSource, partitionSet set.StringSet) { for _, idxHint := range ds.IndexHints { unknownPartitions := checkTableHintsApplicableForPartition(idxHint.Partitions, partitionSet) appendWarnForUnknownPartitions(ds.SCtx(), h.Restore2IndexHint(idxHint.HintTypeString(), idxHint), unknownPartitions) @@ -1762,7 +1828,7 @@ func (*partitionProcessor) checkHintsApplicable(ds *DataSource, partitionSet set appendWarnForUnknownPartitions(ds.SCtx(), h.HintReadFromStorage, unknownPartitions) } -func (s *partitionProcessor) makeUnionAllChildren(ds *DataSource, pi *model.PartitionInfo, or partitionRangeOR, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, error) { +func (s *PartitionProcessor) makeUnionAllChildren(ds *DataSource, pi *model.PartitionInfo, or partitionRangeOR, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, error) { children := make([]base.LogicalPlan, 0, len(pi.Definitions)) partitionNameSet := make(set.StringSet) usedDefinition := make(map[int64]model.PartitionDefinition) @@ -1802,7 +1868,7 @@ func (s *partitionProcessor) makeUnionAllChildren(ds *DataSource, pi *model.Part ds.SCtx().GetSessionVars().StmtCtx.SetSkipPlanCache("Static partition pruning mode") if len(children) == 0 { // No result after table pruning. - tableDual := LogicalTableDual{RowCount: 0}.Init(ds.SCtx(), ds.QueryBlockOffset()) + tableDual := logicalop.LogicalTableDual{RowCount: 0}.Init(ds.SCtx(), ds.QueryBlockOffset()) tableDual.SetSchema(ds.Schema()) appendMakeUnionAllChildrenTranceStep(ds, usedDefinition, tableDual, children, opt) return tableDual, nil @@ -1812,14 +1878,14 @@ func (s *partitionProcessor) makeUnionAllChildren(ds *DataSource, pi *model.Part appendMakeUnionAllChildrenTranceStep(ds, usedDefinition, children[0], children, opt) return children[0], nil } - unionAll := LogicalPartitionUnionAll{}.Init(ds.SCtx(), ds.QueryBlockOffset()) + unionAll := logicalop.LogicalPartitionUnionAll{}.Init(ds.SCtx(), ds.QueryBlockOffset()) unionAll.SetChildren(children...) unionAll.SetSchema(ds.Schema().Clone()) appendMakeUnionAllChildrenTranceStep(ds, usedDefinition, unionAll, children, opt) return unionAll, nil } -func (*partitionProcessor) pruneRangeColumnsPartition(ctx base.PlanContext, conds []expression.Expression, pi *model.PartitionInfo, pe *tables.PartitionExpr, columns []*expression.Column) (partitionRangeOR, error) { +func (*PartitionProcessor) pruneRangeColumnsPartition(ctx base.PlanContext, conds []expression.Expression, pi *model.PartitionInfo, pe *tables.PartitionExpr, columns []*expression.Column) (partitionRangeOR, error) { result := fullRange(len(pi.Definitions)) if len(pi.Columns) < 1 { diff --git a/pkg/planner/core/rule_predicate_push_down.go b/pkg/planner/core/rule_predicate_push_down.go index 88780b8bd3484..9f8afe5839f3a 100644 --- a/pkg/planner/core/rule_predicate_push_down.go +++ b/pkg/planner/core/rule_predicate_push_down.go @@ -22,14 +22,16 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/parser/ast" - "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/constraint" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" "github.com/pingcap/tidb/pkg/util/ranger" ) -type ppdSolver struct{} +// PPDSolver stands for Predicate Push Down. +type PPDSolver struct{} // exprPrefixAdder is the wrapper struct to add tidb_shard(x) = val for `OrigConds` // `cols` is the index columns for a unique shard index @@ -40,7 +42,8 @@ type exprPrefixAdder struct { lengths []int } -func (*ppdSolver) optimize(_ context.Context, lp base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { +// Optimize implements base.LogicalOptRule.<0th> interface. +func (*PPDSolver) Optimize(_ context.Context, lp base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { planChanged := false _, p := lp.PredicatePushDown(nil, opt) return p, planChanged, nil @@ -53,222 +56,29 @@ func addSelection(p base.LogicalPlan, child base.LogicalPlan, conditions []expre } conditions = expression.PropagateConstant(p.SCtx().GetExprCtx(), conditions) // Return table dual when filter is constant false or null. - dual := Conds2TableDual(child, conditions) + dual := logicalop.Conds2TableDual(child, conditions) if dual != nil { p.Children()[chIdx] = dual - appendTableDualTraceStep(child, dual, conditions, opt) + logicalop.AppendTableDualTraceStep(child, dual, conditions, opt) return } - conditions = DeleteTrueExprs(p, conditions) + conditions = constraint.DeleteTrueExprs(p, conditions) if len(conditions) == 0 { p.Children()[chIdx] = child return } - selection := LogicalSelection{Conditions: conditions}.Init(p.SCtx(), p.QueryBlockOffset()) + selection := logicalop.LogicalSelection{Conditions: conditions}.Init(p.SCtx(), p.QueryBlockOffset()) selection.SetChildren(child) p.Children()[chIdx] = selection - appendAddSelectionTraceStep(p, child, selection, opt) + logicalop.AppendAddSelectionTraceStep(p, child, selection, opt) } -func splitSetGetVarFunc(filters []expression.Expression) ([]expression.Expression, []expression.Expression) { - canBePushDown := make([]expression.Expression, 0, len(filters)) - canNotBePushDown := make([]expression.Expression, 0, len(filters)) - for _, expr := range filters { - if expression.HasGetSetVarFunc(expr) { - canNotBePushDown = append(canNotBePushDown, expr) - } else { - canBePushDown = append(canBePushDown, expr) - } - } - return canBePushDown, canNotBePushDown -} - -// BreakDownPredicates breaks down predicates into two sets: canBePushed and cannotBePushed. It also maps columns to projection schema. -func BreakDownPredicates(p *LogicalProjection, predicates []expression.Expression) ([]expression.Expression, []expression.Expression) { - canBePushed := make([]expression.Expression, 0, len(predicates)) - canNotBePushed := make([]expression.Expression, 0, len(predicates)) - exprCtx := p.SCtx().GetExprCtx() - for _, cond := range predicates { - substituted, hasFailed, newFilter := expression.ColumnSubstituteImpl(exprCtx, cond, p.Schema(), p.Exprs, true) - if substituted && !hasFailed && !expression.HasGetSetVarFunc(newFilter) { - canBePushed = append(canBePushed, newFilter) - } else { - canNotBePushed = append(canNotBePushed, cond) - } - } - return canBePushed, canNotBePushed -} - -// PredicatePushDown implements base.LogicalPlan PredicatePushDown interface. -func (p *LogicalExpand) PredicatePushDown(predicates []expression.Expression, opt *optimizetrace.LogicalOptimizeOp) (ret []expression.Expression, retPlan base.LogicalPlan) { - // Note that, grouping column related predicates can't be pushed down, since grouping column has nullability change after Expand OP itself. - // condition related with grouping column shouldn't be pushed down through it. - // currently, since expand is adjacent to aggregate, any filter above aggregate wanted to be push down through expand only have two cases: - // 1. agg function related filters. (these condition is always above aggregate) - // 2. group-by item related filters. (there condition is always related with grouping sets columns, which can't be pushed down) - // As a whole, we banned all the predicates pushing-down logic here that remained in Expand OP, and constructing a new selection above it if any. - remained, child := p.BaseLogicalPlan.PredicatePushDown(nil, opt) - return append(remained, predicates...), child -} - -// DeriveOtherConditions given a LogicalJoin, check the OtherConditions to see if we can derive more -// conditions for left/right child pushdown. -func DeriveOtherConditions( - p *LogicalJoin, leftSchema *expression.Schema, rightSchema *expression.Schema, - deriveLeft bool, deriveRight bool) ( - leftCond []expression.Expression, rightCond []expression.Expression) { - isOuterSemi := (p.JoinType == LeftOuterSemiJoin) || (p.JoinType == AntiLeftOuterSemiJoin) - ctx := p.SCtx() - exprCtx := ctx.GetExprCtx() - for _, expr := range p.OtherConditions { - if deriveLeft { - leftRelaxedCond := expression.DeriveRelaxedFiltersFromDNF(exprCtx, expr, leftSchema) - if leftRelaxedCond != nil { - leftCond = append(leftCond, leftRelaxedCond) - } - notNullExpr := deriveNotNullExpr(ctx, expr, leftSchema) - if notNullExpr != nil { - leftCond = append(leftCond, notNullExpr) - } - } - if deriveRight { - rightRelaxedCond := expression.DeriveRelaxedFiltersFromDNF(exprCtx, expr, rightSchema) - if rightRelaxedCond != nil { - rightCond = append(rightCond, rightRelaxedCond) - } - // For LeftOuterSemiJoin and AntiLeftOuterSemiJoin, we can actually generate - // `col is not null` according to expressions in `OtherConditions` now, but we - // are putting column equal condition converted from `in (subq)` into - // `OtherConditions`(@sa https://github.com/pingcap/tidb/pull/9051), then it would - // cause wrong results, so we disable this optimization for outer semi joins now. - // TODO enable this optimization for outer semi joins later by checking whether - // condition in `OtherConditions` is converted from `in (subq)`. - if isOuterSemi { - continue - } - notNullExpr := deriveNotNullExpr(ctx, expr, rightSchema) - if notNullExpr != nil { - rightCond = append(rightCond, notNullExpr) - } - } - } - return -} - -// deriveNotNullExpr generates a new expression `not(isnull(col))` given `col1 op col2`, -// in which `col` is in specified schema. Caller guarantees that only one of `col1` or -// `col2` is in schema. -func deriveNotNullExpr(ctx base.PlanContext, expr expression.Expression, schema *expression.Schema) expression.Expression { - binop, ok := expr.(*expression.ScalarFunction) - if !ok || len(binop.GetArgs()) != 2 { - return nil - } - arg0, lOK := binop.GetArgs()[0].(*expression.Column) - arg1, rOK := binop.GetArgs()[1].(*expression.Column) - if !lOK || !rOK { - return nil - } - childCol := schema.RetrieveColumn(arg0) - if childCol == nil { - childCol = schema.RetrieveColumn(arg1) - } - if util.IsNullRejected(ctx, schema, expr) && !mysql.HasNotNullFlag(childCol.RetType.GetFlag()) { - return expression.BuildNotNullExpr(ctx.GetExprCtx(), childCol) - } - return nil -} - -// Conds2TableDual builds a LogicalTableDual if cond is constant false or null. -func Conds2TableDual(p base.LogicalPlan, conds []expression.Expression) base.LogicalPlan { - if len(conds) != 1 { - return nil - } - con, ok := conds[0].(*expression.Constant) - if !ok { - return nil - } - sc := p.SCtx().GetSessionVars().StmtCtx - if expression.MaybeOverOptimized4PlanCache(p.SCtx().GetExprCtx(), []expression.Expression{con}) { - return nil - } - if isTrue, err := con.Value.ToBool(sc.TypeCtxOrDefault()); (err == nil && isTrue == 0) || con.Value.IsNull() { - dual := LogicalTableDual{}.Init(p.SCtx(), p.QueryBlockOffset()) - dual.SetSchema(p.Schema()) - return dual - } - return nil -} - -// DeleteTrueExprs deletes the surely true expressions -func DeleteTrueExprs(p base.LogicalPlan, conds []expression.Expression) []expression.Expression { - newConds := make([]expression.Expression, 0, len(conds)) - for _, cond := range conds { - con, ok := cond.(*expression.Constant) - if !ok { - newConds = append(newConds, cond) - continue - } - if expression.MaybeOverOptimized4PlanCache(p.SCtx().GetExprCtx(), []expression.Expression{con}) { - newConds = append(newConds, cond) - continue - } - sc := p.SCtx().GetSessionVars().StmtCtx - if isTrue, err := con.Value.ToBool(sc.TypeCtx()); err == nil && isTrue == 1 { - continue - } - newConds = append(newConds, cond) - } - return newConds -} - -func (*ppdSolver) name() string { +// Name implements base.LogicalOptRule.<1st> interface. +func (*PPDSolver) Name() string { return "predicate_push_down" } -func appendTableDualTraceStep(replaced base.LogicalPlan, dual base.LogicalPlan, conditions []expression.Expression, opt *optimizetrace.LogicalOptimizeOp) { - action := func() string { - return fmt.Sprintf("%v_%v is replaced by %v_%v", replaced.TP(), replaced.ID(), dual.TP(), dual.ID()) - } - ectx := replaced.SCtx().GetExprCtx().GetEvalCtx() - reason := func() string { - buffer := bytes.NewBufferString("The conditions[") - for i, cond := range conditions { - if i > 0 { - buffer.WriteString(",") - } - buffer.WriteString(cond.StringWithCtx(ectx, errors.RedactLogDisable)) - } - buffer.WriteString("] are constant false or null") - return buffer.String() - } - opt.AppendStepToCurrent(dual.ID(), dual.TP(), reason, action) -} - -func appendSelectionPredicatePushDownTraceStep(p *LogicalSelection, conditions []expression.Expression, opt *optimizetrace.LogicalOptimizeOp) { - action := func() string { - return fmt.Sprintf("%v_%v is removed", p.TP(), p.ID()) - } - reason := func() string { - return "" - } - if len(conditions) > 0 { - evalCtx := p.SCtx().GetExprCtx().GetEvalCtx() - reason = func() string { - buffer := bytes.NewBufferString("The conditions[") - for i, cond := range conditions { - if i > 0 { - buffer.WriteString(",") - } - buffer.WriteString(cond.StringWithCtx(evalCtx, errors.RedactLogDisable)) - } - fmt.Fprintf(buffer, "] in %v_%v are pushed down", p.TP(), p.ID()) - return buffer.String() - } - } - opt.AppendStepToCurrent(p.ID(), p.TP(), reason, action) -} - func appendDataSourcePredicatePushDownTraceStep(ds *DataSource, opt *optimizetrace.LogicalOptimizeOp) { if len(ds.PushedDownConds) < 1 { return @@ -291,16 +101,6 @@ func appendDataSourcePredicatePushDownTraceStep(ds *DataSource, opt *optimizetra opt.AppendStepToCurrent(ds.ID(), ds.TP(), reason, action) } -func appendAddSelectionTraceStep(p base.LogicalPlan, child base.LogicalPlan, sel *LogicalSelection, opt *optimizetrace.LogicalOptimizeOp) { - reason := func() string { - return "" - } - action := func() string { - return fmt.Sprintf("add %v_%v to connect %v_%v and %v_%v", sel.TP(), sel.ID(), p.TP(), p.ID(), child.TP(), child.ID()) - } - opt.AppendStepToCurrent(sel.ID(), sel.TP(), reason, action) -} - func (ds *DataSource) addExprPrefixCond(sc base.PlanContext, path *util.AccessPath, conds []expression.Expression) ([]expression.Expression, error) { idxCols, idxColLens := diff --git a/pkg/planner/core/rule_predicate_simplification.go b/pkg/planner/core/rule_predicate_simplification.go index cd663bf003804..dd0c801489b8f 100644 --- a/pkg/planner/core/rule_predicate_simplification.go +++ b/pkg/planner/core/rule_predicate_simplification.go @@ -24,9 +24,9 @@ import ( "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" ) -// predicateSimplification consolidates different predcicates on a column and its equivalence classes. Initial out is for +// PredicateSimplification consolidates different predcicates on a column and its equivalence classes. Initial out is for // in-list and not equal list intersection. -type predicateSimplification struct { +type PredicateSimplification struct { } type predicateType = byte @@ -65,7 +65,8 @@ func findPredicateType(expr expression.Expression) (*expression.Column, predicat return nil, otherPredicate } -func (*predicateSimplification) optimize(_ context.Context, p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { +// Optimize implements base.LogicalOptRule.<0th> interface. +func (*PredicateSimplification) Optimize(_ context.Context, p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { planChanged := false return p.PredicateSimplification(opt), planChanged, nil } @@ -146,6 +147,7 @@ func applyPredicateSimplification(sctx base.PlanContext, predicates []expression return newValues } -func (*predicateSimplification) name() string { +// Name implements base.LogicalOptRule.<1st> interface. +func (*PredicateSimplification) Name() string { return "predicate_simplification" } diff --git a/pkg/planner/core/rule_push_down_sequence.go b/pkg/planner/core/rule_push_down_sequence.go index 02516e2275e58..ef433dbe78c85 100644 --- a/pkg/planner/core/rule_push_down_sequence.go +++ b/pkg/planner/core/rule_push_down_sequence.go @@ -18,23 +18,27 @@ import ( "context" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" ) -type pushDownSequenceSolver struct { +// PushDownSequenceSolver is used to push down sequence. +type PushDownSequenceSolver struct { } -func (*pushDownSequenceSolver) name() string { +// Name implements the base.LogicalOptRule.<1st> interface. +func (*PushDownSequenceSolver) Name() string { return "push_down_sequence" } -func (pdss *pushDownSequenceSolver) optimize(_ context.Context, lp base.LogicalPlan, _ *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { +// Optimize implements the base.LogicalOptRule.<0th> interface. +func (pdss *PushDownSequenceSolver) Optimize(_ context.Context, lp base.LogicalPlan, _ *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { planChanged := false return pdss.recursiveOptimize(nil, lp), planChanged, nil } -func (pdss *pushDownSequenceSolver) recursiveOptimize(pushedSequence *LogicalSequence, lp base.LogicalPlan) base.LogicalPlan { - _, ok := lp.(*LogicalSequence) +func (pdss *PushDownSequenceSolver) recursiveOptimize(pushedSequence *logicalop.LogicalSequence, lp base.LogicalPlan) base.LogicalPlan { + _, ok := lp.(*logicalop.LogicalSequence) if !ok && pushedSequence == nil { newChildren := make([]base.LogicalPlan, 0, len(lp.Children())) for _, child := range lp.Children() { @@ -44,9 +48,9 @@ func (pdss *pushDownSequenceSolver) recursiveOptimize(pushedSequence *LogicalSeq return lp } switch x := lp.(type) { - case *LogicalSequence: + case *logicalop.LogicalSequence: if pushedSequence == nil { - pushedSequence = LogicalSequence{}.Init(lp.SCtx(), lp.QueryBlockOffset()) + pushedSequence = logicalop.LogicalSequence{}.Init(lp.SCtx(), lp.QueryBlockOffset()) pushedSequence.SetChildren(lp.Children()...) return pdss.recursiveOptimize(pushedSequence, lp.Children()[len(lp.Children())-1]) } @@ -55,10 +59,10 @@ func (pdss *pushDownSequenceSolver) recursiveOptimize(pushedSequence *LogicalSeq allCTEs := make([]base.LogicalPlan, 0, childLen+pushedSequence.ChildLen()-2) allCTEs = append(allCTEs, pushedSequence.Children()[:pushedSequence.ChildLen()-1]...) allCTEs = append(allCTEs, x.Children()[:childLen-1]...) - pushedSequence = LogicalSequence{}.Init(lp.SCtx(), lp.QueryBlockOffset()) + pushedSequence = logicalop.LogicalSequence{}.Init(lp.SCtx(), lp.QueryBlockOffset()) pushedSequence.SetChildren(append(allCTEs, mainQuery)...) return pdss.recursiveOptimize(pushedSequence, mainQuery) - case *DataSource, *LogicalAggregation, *LogicalCTE: + case *DataSource, *logicalop.LogicalAggregation, *LogicalCTE: pushedSequence.SetChild(pushedSequence.ChildLen()-1, pdss.recursiveOptimize(nil, lp)) return pushedSequence default: diff --git a/pkg/planner/core/rule_resolve_grouping_expand.go b/pkg/planner/core/rule_resolve_grouping_expand.go index 27d886583d2ec..0a42a459e5da7 100644 --- a/pkg/planner/core/rule_resolve_grouping_expand.go +++ b/pkg/planner/core/rule_resolve_grouping_expand.go @@ -18,6 +18,7 @@ import ( "context" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" ) @@ -51,10 +52,11 @@ import ( // to achieve this similar effect, put it in the last logical optimizing phase is much // more reasonable. -// resolveExpand generating Expand projection list when all the logical optimization is done. -type resolveExpand struct { +// ResolveExpand generating Expand projection list when all the logical optimization is done. +type ResolveExpand struct { } +// Optimize implements the base.LogicalOptRule.<0th> interface. // By now, rollup syntax will build a LogicalExpand from bottom up. In LogicalExpand itself, its schema out should be 3 parts: // // +---------------------------------------------------------------------+ @@ -75,7 +77,7 @@ type resolveExpand struct { // (upper required) (grouping sets columns appended) // // Expand operator itself is kind like a projection, while difference is that it has a multi projection list, named as leveled projection. -func (*resolveExpand) optimize(_ context.Context, p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { +func (*ResolveExpand) Optimize(_ context.Context, p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { planChanged := false // As you see, Expand's leveled projection should be built after all column-prune is done. So we just make generating-leveled-projection // as the last rule of logical optimization, which is more clear. (spark has column prune action before building expand) @@ -83,7 +85,8 @@ func (*resolveExpand) optimize(_ context.Context, p base.LogicalPlan, opt *optim return newLogicalPlan, planChanged, err } -func (*resolveExpand) name() string { +// Name implements the base.LogicalOptRule.<1st> interface. +func (*ResolveExpand) Name() string { return "resolve_expand" } @@ -95,7 +98,7 @@ func genExpand(p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.L } p.Children()[i] = np } - if expand, ok := p.(*LogicalExpand); ok { + if expand, ok := p.(*logicalop.LogicalExpand); ok { expand.GenLevelProjections() } return p, nil diff --git a/pkg/planner/core/rule_result_reorder.go b/pkg/planner/core/rule_result_reorder.go index 123476b5e24b8..3b31e579b1cfd 100644 --- a/pkg/planner/core/rule_result_reorder.go +++ b/pkg/planner/core/rule_result_reorder.go @@ -19,12 +19,13 @@ import ( "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" ) /* -resultReorder reorder query results. +ResultReorder reorder query results. NOTE: it's not a common rule for all queries, it's specially implemented for a few customers. Results of some queries are not ordered, for example: @@ -38,10 +39,11 @@ This rule reorders results by modifying or injecting a Sort operator: 2.1. if it's a Sort, update it by appending all output columns into its order-by list, 2.2. otherwise, inject a new Sort upon this operator. */ -type resultReorder struct { +type ResultReorder struct { } -func (rs *resultReorder) optimize(_ context.Context, lp base.LogicalPlan, _ *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { +// Optimize implements base.LogicalOptRule.<0th> interface. +func (rs *ResultReorder) Optimize(_ context.Context, lp base.LogicalPlan, _ *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { planChanged := false ordered := rs.completeSort(lp) if !ordered { @@ -50,10 +52,13 @@ func (rs *resultReorder) optimize(_ context.Context, lp base.LogicalPlan, _ *opt return lp, planChanged, nil } -func (rs *resultReorder) completeSort(lp base.LogicalPlan) bool { +func (rs *ResultReorder) completeSort(lp base.LogicalPlan) bool { if rs.isInputOrderKeeper(lp) { + if len(lp.Children()) == 0 { + return true + } return rs.completeSort(lp.Children()[0]) - } else if sort, ok := lp.(*LogicalSort); ok { + } else if sort, ok := lp.(*logicalop.LogicalSort); ok { cols := sort.Schema().Columns // sort results by all output columns if handleCol := rs.extractHandleCol(sort.Children()[0]); handleCol != nil { cols = []*expression.Column{handleCol} // sort results by the handle column if we can get it @@ -75,7 +80,7 @@ func (rs *resultReorder) completeSort(lp base.LogicalPlan) bool { return false } -func (rs *resultReorder) injectSort(lp base.LogicalPlan) base.LogicalPlan { +func (rs *ResultReorder) injectSort(lp base.LogicalPlan) base.LogicalPlan { if rs.isInputOrderKeeper(lp) { lp.SetChildren(rs.injectSort(lp.Children()[0])) return lp @@ -89,25 +94,25 @@ func (rs *resultReorder) injectSort(lp base.LogicalPlan) base.LogicalPlan { for _, col := range cols { byItems = append(byItems, &util.ByItems{Expr: col}) } - sort := LogicalSort{ + sort := logicalop.LogicalSort{ ByItems: byItems, }.Init(lp.SCtx(), lp.QueryBlockOffset()) sort.SetChildren(lp) return sort } -func (*resultReorder) isInputOrderKeeper(lp base.LogicalPlan) bool { +func (*ResultReorder) isInputOrderKeeper(lp base.LogicalPlan) bool { switch lp.(type) { - case *LogicalSelection, *LogicalProjection, *LogicalLimit: + case *logicalop.LogicalSelection, *logicalop.LogicalProjection, *logicalop.LogicalLimit, *logicalop.LogicalTableDual: return true } return false } // extractHandleCols does the best effort to get the handle column. -func (rs *resultReorder) extractHandleCol(lp base.LogicalPlan) *expression.Column { +func (rs *ResultReorder) extractHandleCol(lp base.LogicalPlan) *expression.Column { switch x := lp.(type) { - case *LogicalSelection, *LogicalLimit: + case *logicalop.LogicalSelection, *logicalop.LogicalLimit: handleCol := rs.extractHandleCol(lp.Children()[0]) if handleCol == nil { return nil // fail to extract handle column from the child, just return nil. @@ -129,6 +134,7 @@ func (rs *resultReorder) extractHandleCol(lp base.LogicalPlan) *expression.Colum return nil } -func (*resultReorder) name() string { +// Name implements base.LogicalOptRule.<1st> interface. +func (*ResultReorder) Name() string { return "result_reorder" } diff --git a/pkg/planner/core/rule_semi_join_rewrite.go b/pkg/planner/core/rule_semi_join_rewrite.go index cb922193ef686..8cafc180a16dc 100644 --- a/pkg/planner/core/rule_semi_join_rewrite.go +++ b/pkg/planner/core/rule_semi_join_rewrite.go @@ -21,11 +21,12 @@ import ( "github.com/pingcap/tidb/pkg/expression/aggregation" "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" h "github.com/pingcap/tidb/pkg/util/hint" ) -// semiJoinRewriter rewrites semi join to inner join with aggregation. +// SemiJoinRewriter rewrites semi join to inner join with aggregation. // Note: This rewriter is only used for exists subquery. // And it also requires the hint `SEMI_JOIN_REWRITE` to be set. // For example: @@ -35,20 +36,22 @@ import ( // will be rewriten to: // // select * from t join (select a from s group by a) s on t.a = s.a; -type semiJoinRewriter struct { +type SemiJoinRewriter struct { } -func (smj *semiJoinRewriter) optimize(_ context.Context, p base.LogicalPlan, _ *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { +// Optimize implements base.LogicalOptRule.<0th> interface. +func (smj *SemiJoinRewriter) Optimize(_ context.Context, p base.LogicalPlan, _ *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { planChanged := false newLogicalPlan, err := smj.recursivePlan(p) return newLogicalPlan, planChanged, err } -func (*semiJoinRewriter) name() string { +// Name implements base.LogicalOptRule.<1st> interface. +func (*SemiJoinRewriter) Name() string { return "semi_join_rewrite" } -func (smj *semiJoinRewriter) recursivePlan(p base.LogicalPlan) (base.LogicalPlan, error) { +func (smj *SemiJoinRewriter) recursivePlan(p base.LogicalPlan) (base.LogicalPlan, error) { if _, ok := p.(*LogicalCTE); ok { return p, nil } @@ -61,16 +64,16 @@ func (smj *semiJoinRewriter) recursivePlan(p base.LogicalPlan) (base.LogicalPlan newChildren = append(newChildren, newChild) } p.SetChildren(newChildren...) - join, ok := p.(*LogicalJoin) + join, ok := p.(*logicalop.LogicalJoin) // If it's not a join, or not a (outer) semi join. We just return it since no optimization is needed. // Actually the check of the preferRewriteSemiJoin is a superset of checking the join type. We remain them for a better understanding. - if !ok || !(join.JoinType == SemiJoin || join.JoinType == LeftOuterSemiJoin) || (join.PreferJoinType&h.PreferRewriteSemiJoin == 0) { + if !ok || !(join.JoinType == logicalop.SemiJoin || join.JoinType == logicalop.LeftOuterSemiJoin) || (join.PreferJoinType&h.PreferRewriteSemiJoin == 0) { return p, nil } // The preferRewriteSemiJoin flag only be used here. We should reset it in order to not affect other parts. join.PreferJoinType &= ^h.PreferRewriteSemiJoin - if join.JoinType == LeftOuterSemiJoin { + if join.JoinType == logicalop.LeftOuterSemiJoin { p.SCtx().GetSessionVars().StmtCtx.SetHintWarning("SEMI_JOIN_REWRITE() is inapplicable for LeftOuterSemiJoin.") return p, nil } @@ -91,13 +94,13 @@ func (smj *semiJoinRewriter) recursivePlan(p base.LogicalPlan) (base.LogicalPlan // But the aggregation we added may block the predicate push down since we've not maintained the functional dependency to pass the equiv class to guide the push down. // So we create a selection before we build the aggregation. if len(join.RightConditions) > 0 { - sel := LogicalSelection{Conditions: make([]expression.Expression, len(join.RightConditions))}.Init(p.SCtx(), innerChild.QueryBlockOffset()) + sel := logicalop.LogicalSelection{Conditions: make([]expression.Expression, len(join.RightConditions))}.Init(p.SCtx(), innerChild.QueryBlockOffset()) copy(sel.Conditions, join.RightConditions) sel.SetChildren(innerChild) innerChild = sel } - subAgg := LogicalAggregation{ + subAgg := logicalop.LogicalAggregation{ AggFuncs: make([]*aggregation.AggFuncDesc, 0, len(join.EqualConditions)), GroupByItems: make([]expression.Expression, 0, len(join.EqualConditions)), }.Init(p.SCtx(), p.Children()[1].QueryBlockOffset()) @@ -115,10 +118,10 @@ func (smj *semiJoinRewriter) recursivePlan(p base.LogicalPlan) (base.LogicalPlan } subAgg.SetChildren(innerChild) subAgg.SetSchema(expression.NewSchema(aggOutputCols...)) - subAgg.buildSelfKeyInfo(subAgg.Schema()) + subAgg.BuildSelfKeyInfo(subAgg.Schema()) - innerJoin := LogicalJoin{ - JoinType: InnerJoin, + innerJoin := logicalop.LogicalJoin{ + JoinType: logicalop.InnerJoin, HintInfo: join.HintInfo, PreferJoinType: join.PreferJoinType, PreferJoinOrder: join.PreferJoinOrder, @@ -128,7 +131,7 @@ func (smj *semiJoinRewriter) recursivePlan(p base.LogicalPlan) (base.LogicalPlan innerJoin.SetSchema(expression.MergeSchema(join.Children()[0].Schema(), subAgg.Schema())) innerJoin.AttachOnConds(expression.ScalarFuncs2Exprs(join.EqualConditions)) - proj := LogicalProjection{ + proj := logicalop.LogicalProjection{ Exprs: expression.Column2Exprs(join.Children()[0].Schema().Columns), }.Init(p.SCtx(), p.QueryBlockOffset()) proj.SetChildren(innerJoin) diff --git a/pkg/planner/core/rule_topn_push_down.go b/pkg/planner/core/rule_topn_push_down.go index 0fa1229584013..84d076773b18b 100644 --- a/pkg/planner/core/rule_topn_push_down.go +++ b/pkg/planner/core/rule_topn_push_down.go @@ -15,21 +15,19 @@ package core import ( - "bytes" "context" - "fmt" - "github.com/pingcap/errors" "github.com/pingcap/tidb/pkg/planner/core/base" "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" ) -// pushDownTopNOptimizer pushes down the topN or limit. In the future we will remove the limit from `requiredProperty` in CBO phase. -type pushDownTopNOptimizer struct { +// PushDownTopNOptimizer pushes down the topN or limit. In the future we will remove the limit from `requiredProperty` in CBO phase. +type PushDownTopNOptimizer struct { } -func (*pushDownTopNOptimizer) optimize(_ context.Context, p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { +// Optimize implements the base.LogicalOptRule.<0th> interface. +func (*PushDownTopNOptimizer) Optimize(_ context.Context, p base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) (base.LogicalPlan, bool, error) { planChanged := false return p.PushDownTopN(nil, opt), planChanged, nil } @@ -38,9 +36,9 @@ func (*pushDownTopNOptimizer) optimize(_ context.Context, p base.LogicalPlan, op func pushDownTopNForBaseLogicalPlan(lp base.LogicalPlan, topNLogicalPlan base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) base.LogicalPlan { s := lp.GetBaseLogicalPlan().(*logicalop.BaseLogicalPlan) - var topN *LogicalTopN + var topN *logicalop.LogicalTopN if topNLogicalPlan != nil { - topN = topNLogicalPlan.(*LogicalTopN) + topN = topNLogicalPlan.(*logicalop.LogicalTopN) } p := s.Self() for i, child := range p.Children() { @@ -52,88 +50,7 @@ func pushDownTopNForBaseLogicalPlan(lp base.LogicalPlan, topNLogicalPlan base.Lo return p } -func (*pushDownTopNOptimizer) name() string { +// Name implements the base.LogicalOptRule.<1st> interface. +func (*PushDownTopNOptimizer) Name() string { return "topn_push_down" } - -func appendTopNPushDownTraceStep(parent base.LogicalPlan, child base.LogicalPlan, opt *optimizetrace.LogicalOptimizeOp) { - action := func() string { - return fmt.Sprintf("%v_%v is added as %v_%v's parent", parent.TP(), parent.ID(), child.TP(), child.ID()) - } - reason := func() string { - return fmt.Sprintf("%v is pushed down", parent.TP()) - } - opt.AppendStepToCurrent(parent.ID(), parent.TP(), reason, action) -} - -func appendTopNPushDownJoinTraceStep(p *LogicalJoin, topN *LogicalTopN, idx int, opt *optimizetrace.LogicalOptimizeOp) { - ectx := p.SCtx().GetExprCtx().GetEvalCtx() - action := func() string { - buffer := bytes.NewBufferString(fmt.Sprintf("%v_%v is added and pushed into %v_%v's ", - topN.TP(), topN.ID(), p.TP(), p.ID())) - if idx == 0 { - buffer.WriteString("left ") - } else { - buffer.WriteString("right ") - } - buffer.WriteString("table") - return buffer.String() - } - reason := func() string { - buffer := bytes.NewBufferString(fmt.Sprintf("%v_%v's joinType is %v, and all ByItems[", p.TP(), p.ID(), p.JoinType.String())) - for i, item := range topN.ByItems { - if i > 0 { - buffer.WriteString(",") - } - buffer.WriteString(item.StringWithCtx(ectx, errors.RedactLogDisable)) - } - buffer.WriteString("] contained in ") - if idx == 0 { - buffer.WriteString("left ") - } else { - buffer.WriteString("right ") - } - buffer.WriteString("table") - return buffer.String() - } - opt.AppendStepToCurrent(p.ID(), p.TP(), reason, action) -} - -func appendSortPassByItemsTraceStep(sort *LogicalSort, topN *LogicalTopN, opt *optimizetrace.LogicalOptimizeOp) { - ectx := sort.SCtx().GetExprCtx().GetEvalCtx() - action := func() string { - buffer := bytes.NewBufferString(fmt.Sprintf("%v_%v passes ByItems[", sort.TP(), sort.ID())) - for i, item := range sort.ByItems { - if i > 0 { - buffer.WriteString(",") - } - buffer.WriteString(item.StringWithCtx(ectx, errors.RedactLogDisable)) - } - fmt.Fprintf(buffer, "] to %v_%v", topN.TP(), topN.ID()) - return buffer.String() - } - reason := func() string { - return fmt.Sprintf("%v_%v is Limit originally", topN.TP(), topN.ID()) - } - opt.AppendStepToCurrent(sort.ID(), sort.TP(), reason, action) -} - -func appendNewTopNTraceStep(topN *LogicalTopN, union *LogicalUnionAll, opt *optimizetrace.LogicalOptimizeOp) { - reason := func() string { - return "" - } - action := func() string { - return fmt.Sprintf("%v_%v is added and pushed down across %v_%v", topN.TP(), topN.ID(), union.TP(), union.ID()) - } - opt.AppendStepToCurrent(topN.ID(), topN.TP(), reason, action) -} - -func appendConvertTopNTraceStep(p base.LogicalPlan, topN *LogicalTopN, opt *optimizetrace.LogicalOptimizeOp) { - reason := func() string { - return "" - } - action := func() string { - return fmt.Sprintf("%v_%v is converted into %v_%v", p.TP(), p.ID(), topN.TP(), topN.ID()) - } - opt.AppendStepToCurrent(topN.ID(), topN.TP(), reason, action) -} diff --git a/pkg/planner/core/runtime_filter_generator.go b/pkg/planner/core/runtime_filter_generator.go index bfa4d4091e47d..dba6e0b59d49e 100644 --- a/pkg/planner/core/runtime_filter_generator.go +++ b/pkg/planner/core/runtime_filter_generator.go @@ -21,6 +21,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/logutil" @@ -162,8 +163,8 @@ func (generator *RuntimeFilterGenerator) assignRuntimeFilter(physicalTableScan * func (*RuntimeFilterGenerator) matchRFJoinType(hashJoinPlan *PhysicalHashJoin) bool { if hashJoinPlan.RightIsBuildSide() { // case1: build side is on the right - if hashJoinPlan.JoinType == LeftOuterJoin || hashJoinPlan.JoinType == AntiSemiJoin || - hashJoinPlan.JoinType == LeftOuterSemiJoin || hashJoinPlan.JoinType == AntiLeftOuterSemiJoin { + if hashJoinPlan.JoinType == logicalop.LeftOuterJoin || hashJoinPlan.JoinType == logicalop.AntiSemiJoin || + hashJoinPlan.JoinType == logicalop.LeftOuterSemiJoin || hashJoinPlan.JoinType == logicalop.AntiLeftOuterSemiJoin { logutil.BgLogger().Debug("Join type does not match RF pattern when build side is on the right", zap.Int32("PlanNodeId", int32(hashJoinPlan.ID())), zap.String("JoinType", hashJoinPlan.JoinType.String())) @@ -171,7 +172,7 @@ func (*RuntimeFilterGenerator) matchRFJoinType(hashJoinPlan *PhysicalHashJoin) b } } else { // case2: build side is on the left - if hashJoinPlan.JoinType == RightOuterJoin { + if hashJoinPlan.JoinType == logicalop.RightOuterJoin { logutil.BgLogger().Debug("Join type does not match RF pattern when build side is on the left", zap.Int32("PlanNodeId", int32(hashJoinPlan.ID())), zap.String("JoinType", hashJoinPlan.JoinType.String())) diff --git a/pkg/planner/core/stats.go b/pkg/planner/core/stats.go index 15564d6ba60a5..c80ae25151d18 100644 --- a/pkg/planner/core/stats.go +++ b/pkg/planner/core/stats.go @@ -16,7 +16,6 @@ package core import ( "fmt" - "math" "slices" "strconv" "strings" @@ -43,21 +42,6 @@ import ( "go.uber.org/zap" ) -func (p *basePhysicalPlan) StatsCount() float64 { - return p.StatsInfo().RowCount -} - -func getFakeStats(schema *expression.Schema) *property.StatsInfo { - profile := &property.StatsInfo{ - RowCount: 1, - ColNDVs: make(map[int64]float64, schema.Len()), - } - for _, col := range schema.Columns { - profile.ColNDVs[col.UniqueID] = 1 - } - return profile -} - // RecursiveDeriveStats4Test is a exporter just for test. func RecursiveDeriveStats4Test(p base.LogicalPlan) (*property.StatsInfo, error) { return p.RecursiveDeriveStats(nil) @@ -245,7 +229,7 @@ func (ds *DataSource) derivePathStatsAndTryHeuristics() error { path.IsSingleScan = true } else { ds.deriveIndexPathStats(path, ds.PushedDownConds, false) - path.IsSingleScan = ds.isSingleScan(path.FullIdxCols, path.FullIdxColLens) + path.IsSingleScan = isSingleScan(ds, path.FullIdxCols, path.FullIdxColLens) } // step: 3 // Try some heuristic rules to select access path. @@ -362,17 +346,6 @@ func (ds *DataSource) derivePathStatsAndTryHeuristics() error { return nil } -func deriveLimitStats(childProfile *property.StatsInfo, limitCount float64) *property.StatsInfo { - stats := &property.StatsInfo{ - RowCount: math.Min(limitCount, childProfile.RowCount), - ColNDVs: make(map[int64]float64, len(childProfile.ColNDVs)), - } - for id, c := range childProfile.ColNDVs { - stats.ColNDVs[id] = math.Min(c, stats.RowCount) - } - return stats -} - // loadTableStats loads the stats of the table and store it in the statement `UsedStatsInfo` if it didn't exist func loadTableStats(ctx sessionctx.Context, tblInfo *model.TableInfo, pid int64) { statsRecord := ctx.GetSessionVars().StmtCtx.GetUsedStatsInfo(true) diff --git a/pkg/planner/core/stringer.go b/pkg/planner/core/stringer.go index 81dfc5076145b..ec6dcf2fd66b3 100644 --- a/pkg/planner/core/stringer.go +++ b/pkg/planner/core/stringer.go @@ -44,7 +44,7 @@ func FDToString(p base.LogicalPlan) string { func needIncludeChildrenString(plan base.Plan) bool { switch x := plan.(type) { - case *LogicalUnionAll, *PhysicalUnionAll, *LogicalPartitionUnionAll: + case *logicalop.LogicalUnionAll, *PhysicalUnionAll, *logicalop.LogicalPartitionUnionAll: // after https://github.com/pingcap/tidb/pull/25218, the union may contain less than 2 children, // but we still wants to include its child plan's information when calling `toString` on union. return true @@ -59,21 +59,21 @@ func needIncludeChildrenString(plan base.Plan) bool { func fdToString(in base.LogicalPlan, strs []string, idxs []int) ([]string, []int) { switch x := in.(type) { - case *LogicalProjection: + case *logicalop.LogicalProjection: strs = append(strs, "{"+x.FDs().String()+"}") for _, child := range x.Children() { strs, idxs = fdToString(child, strs, idxs) } - case *LogicalAggregation: + case *logicalop.LogicalAggregation: strs = append(strs, "{"+x.FDs().String()+"}") for _, child := range x.Children() { strs, idxs = fdToString(child, strs, idxs) } case *DataSource: strs = append(strs, "{"+x.FDs().String()+"}") - case *LogicalApply: + case *logicalop.LogicalApply: strs = append(strs, "{"+x.FDs().String()+"}") - case *LogicalJoin: + case *logicalop.LogicalJoin: strs = append(strs, "{"+x.FDs().String()+"}") default: } @@ -139,19 +139,19 @@ func toString(in base.Plan, strs []string, idxs []int) ([]string, []int) { idxs = idxs[:last] id := "MergeJoin" switch x.JoinType { - case SemiJoin: + case logicalop.SemiJoin: id = "MergeSemiJoin" - case AntiSemiJoin: + case logicalop.AntiSemiJoin: id = "MergeAntiSemiJoin" - case LeftOuterSemiJoin: + case logicalop.LeftOuterSemiJoin: id = "MergeLeftOuterSemiJoin" - case AntiLeftOuterSemiJoin: + case logicalop.AntiLeftOuterSemiJoin: id = "MergeAntiLeftOuterSemiJoin" - case LeftOuterJoin: + case logicalop.LeftOuterJoin: id = "MergeLeftOuterJoin" - case RightOuterJoin: + case logicalop.RightOuterJoin: id = "MergeRightOuterJoin" - case InnerJoin: + case logicalop.InnerJoin: id = "MergeInnerJoin" } str = id + "{" + strings.Join(children, "->") + "}" @@ -160,7 +160,7 @@ func toString(in base.Plan, strs []string, idxs []int) ([]string, []int) { r := x.RightJoinKeys[i].StringWithCtx(ectx, perrors.RedactLogDisable) str += fmt.Sprintf("(%s,%s)", l, r) } - case *LogicalApply, *PhysicalApply: + case *logicalop.LogicalApply, *PhysicalApply: last := len(idxs) - 1 idx := idxs[last] children := strs[idx:] @@ -169,15 +169,15 @@ func toString(in base.Plan, strs []string, idxs []int) ([]string, []int) { str = "Apply{" + strings.Join(children, "->") + "}" case *logicalop.LogicalMaxOneRow, *PhysicalMaxOneRow: str = "MaxOneRow" - case *LogicalLimit, *PhysicalLimit: + case *logicalop.LogicalLimit, *PhysicalLimit: str = "Limit" - case *PhysicalLock, *LogicalLock: + case *PhysicalLock, *logicalop.LogicalLock: str = "Lock" case *ShowDDL: str = "ShowDDL" - case *LogicalShow: + case *logicalop.LogicalShow: str = "Show" - if pl := in.(*LogicalShow); pl.Extractor != nil { + if pl := in.(*logicalop.LogicalShow); pl.Extractor != nil { str = str + "(" + pl.Extractor.ExplainInfo() + ")" } case *PhysicalShow: @@ -185,11 +185,11 @@ func toString(in base.Plan, strs []string, idxs []int) ([]string, []int) { if pl := in.(*PhysicalShow); pl.Extractor != nil { str = str + "(" + pl.Extractor.ExplainInfo() + ")" } - case *LogicalShowDDLJobs, *PhysicalShowDDLJobs: + case *logicalop.LogicalShowDDLJobs, *PhysicalShowDDLJobs: str = "ShowDDLJobs" - case *LogicalSort, *PhysicalSort: + case *logicalop.LogicalSort, *PhysicalSort: str = "Sort" - case *LogicalJoin: + case *logicalop.LogicalJoin: last := len(idxs) - 1 idx := idxs[last] children := strs[idx:] @@ -201,7 +201,7 @@ func toString(in base.Plan, strs []string, idxs []int) ([]string, []int) { r := eq.GetArgs()[1].StringWithCtx(ectx, perrors.RedactLogDisable) str += fmt.Sprintf("(%s,%s)", l, r) } - case *LogicalUnionAll, *PhysicalUnionAll, *LogicalPartitionUnionAll: + case *logicalop.LogicalUnionAll, *PhysicalUnionAll, *logicalop.LogicalPartitionUnionAll: last := len(idxs) - 1 idx := idxs[last] children := strs[idx:] @@ -212,7 +212,7 @@ func toString(in base.Plan, strs []string, idxs []int) ([]string, []int) { } str = name + "{" + strings.Join(children, "->") + "}" idxs = idxs[:last] - case *LogicalSequence: + case *logicalop.LogicalSequence: last := len(idxs) - 1 idx := idxs[last] children := strs[idx:] @@ -232,23 +232,23 @@ func toString(in base.Plan, strs []string, idxs []int) ([]string, []int) { str = fmt.Sprintf("DataScan(%s)", x.TableInfo.Name) } } - case *LogicalSelection: + case *logicalop.LogicalSelection: str = fmt.Sprintf("Sel(%s)", expression.StringifyExpressionsWithCtx(ectx, x.Conditions)) case *PhysicalSelection: str = fmt.Sprintf("Sel(%s)", expression.StringifyExpressionsWithCtx(ectx, x.Conditions)) - case *LogicalProjection, *PhysicalProjection: + case *logicalop.LogicalProjection, *PhysicalProjection: str = "Projection" - case *LogicalTopN: + case *logicalop.LogicalTopN: str = fmt.Sprintf("TopN(%v,%d,%d)", util.StringifyByItemsWithCtx(ectx, x.ByItems), x.Offset, x.Count) case *PhysicalTopN: str = fmt.Sprintf("TopN(%v,%d,%d)", util.StringifyByItemsWithCtx(ectx, x.ByItems), x.Offset, x.Count) - case *LogicalTableDual, *PhysicalTableDual: + case *logicalop.LogicalTableDual, *PhysicalTableDual: str = "Dual" case *PhysicalHashAgg: str = "HashAgg" case *PhysicalStreamAgg: str = "StreamAgg" - case *LogicalAggregation: + case *logicalop.LogicalAggregation: str = "Aggr(" for i, aggFunc := range x.AggFuncs { str += aggFunc.StringWithCtx(ectx, perrors.RedactLogDisable) @@ -336,7 +336,7 @@ func toString(in base.Plan, strs []string, idxs []int) ([]string, []int) { if x.SelectPlan != nil { str = fmt.Sprintf("%s->Insert", ToString(x.SelectPlan)) } - case *LogicalWindow: + case *logicalop.LogicalWindow: buffer := bytes.NewBufferString("") formatWindowFuncDescs(ectx, buffer, x.WindowFuncDescs, x.Schema()) str = fmt.Sprintf("Window(%s)", buffer.String()) diff --git a/pkg/planner/core/task.go b/pkg/planner/core/task.go index b36a4841a726f..40b3383b4c606 100644 --- a/pkg/planner/core/task.go +++ b/pkg/planner/core/task.go @@ -29,6 +29,7 @@ import ( "github.com/pingcap/tidb/pkg/planner/core/base" "github.com/pingcap/tidb/pkg/planner/core/cost" "github.com/pingcap/tidb/pkg/planner/core/operator/baseimpl" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/types" @@ -96,20 +97,14 @@ func (t *CopTask) getStoreType() kv.StoreType { return kv.TiKV } -// Attach2Task implements PhysicalPlan interface. -func (p *basePhysicalPlan) Attach2Task(tasks ...base.Task) base.Task { - t := tasks[0].ConvertToRootTask(p.SCtx()) - return attachPlan2Task(p.self, t) -} - // Attach2Task implements PhysicalPlan interface. func (p *PhysicalUnionScan) Attach2Task(tasks ...base.Task) base.Task { // We need to pull the projection under unionScan upon unionScan. // Since the projection only prunes columns, it's ok the put it upon unionScan. if sel, ok := tasks[0].Plan().(*PhysicalSelection); ok { - if pj, ok := sel.children[0].(*PhysicalProjection); ok { + if pj, ok := sel.Children()[0].(*PhysicalProjection); ok { // Convert unionScan->selection->projection to projection->unionScan->selection. - sel.SetChildren(pj.children...) + sel.SetChildren(pj.Children()...) p.SetChildren(sel) p.SetStats(tasks[0].Plan().StatsInfo()) rt, _ := tasks[0].(*RootTask) @@ -120,15 +115,15 @@ func (p *PhysicalUnionScan) Attach2Task(tasks ...base.Task) base.Task { } if pj, ok := tasks[0].Plan().(*PhysicalProjection); ok { // Convert unionScan->projection to projection->unionScan, because unionScan can't handle projection as its children. - p.SetChildren(pj.children...) + p.SetChildren(pj.Children()...) p.SetStats(tasks[0].Plan().StatsInfo()) rt, _ := tasks[0].(*RootTask) - rt.SetPlan(pj.children[0]) + rt.SetPlan(pj.Children()[0]) pj.SetChildren(p) - return pj.Attach2Task(p.basePhysicalPlan.Attach2Task(tasks...)) + return pj.Attach2Task(p.BasePhysicalPlan.Attach2Task(tasks...)) } p.SetStats(tasks[0].Plan().StatsInfo()) - return p.basePhysicalPlan.Attach2Task(tasks...) + return p.BasePhysicalPlan.Attach2Task(tasks...) } // Attach2Task implements PhysicalPlan interface. @@ -144,12 +139,11 @@ func (p *PhysicalApply) Attach2Task(tasks ...base.Task) base.Task { // Attach2Task implements PhysicalPlan interface. func (p *PhysicalIndexMergeJoin) Attach2Task(tasks ...base.Task) base.Task { - innerTask := p.innerTask outerTask := tasks[1-p.InnerChildIdx].ConvertToRootTask(p.SCtx()) if p.InnerChildIdx == 1 { - p.SetChildren(outerTask.Plan(), innerTask.Plan()) + p.SetChildren(outerTask.Plan(), p.innerPlan) } else { - p.SetChildren(innerTask.Plan(), outerTask.Plan()) + p.SetChildren(p.innerPlan, outerTask.Plan()) } t := &RootTask{} t.SetPlan(p) @@ -158,12 +152,11 @@ func (p *PhysicalIndexMergeJoin) Attach2Task(tasks ...base.Task) base.Task { // Attach2Task implements PhysicalPlan interface. func (p *PhysicalIndexHashJoin) Attach2Task(tasks ...base.Task) base.Task { - innerTask := p.innerTask outerTask := tasks[1-p.InnerChildIdx].ConvertToRootTask(p.SCtx()) if p.InnerChildIdx == 1 { - p.SetChildren(outerTask.Plan(), innerTask.Plan()) + p.SetChildren(outerTask.Plan(), p.innerPlan) } else { - p.SetChildren(innerTask.Plan(), outerTask.Plan()) + p.SetChildren(p.innerPlan, outerTask.Plan()) } t := &RootTask{} t.SetPlan(p) @@ -172,12 +165,11 @@ func (p *PhysicalIndexHashJoin) Attach2Task(tasks ...base.Task) base.Task { // Attach2Task implements PhysicalPlan interface. func (p *PhysicalIndexJoin) Attach2Task(tasks ...base.Task) base.Task { - innerTask := p.innerTask outerTask := tasks[1-p.InnerChildIdx].ConvertToRootTask(p.SCtx()) if p.InnerChildIdx == 1 { - p.SetChildren(outerTask.Plan(), innerTask.Plan()) + p.SetChildren(outerTask.Plan(), p.innerPlan) } else { - p.SetChildren(innerTask.Plan(), outerTask.Plan()) + p.SetChildren(p.innerPlan, outerTask.Plan()) } t := &RootTask{} t.SetPlan(p) @@ -404,8 +396,8 @@ func (p *PhysicalHashJoin) attach2TaskForMpp(tasks ...base.Task) base.Task { // for outer join, it should always be the outer side of the join // for semi join, it should be the left side(the same as left out join) outerTaskIndex := 1 - p.InnerChildIdx - if p.JoinType != InnerJoin { - if p.JoinType == RightOuterJoin { + if p.JoinType != logicalop.InnerJoin { + if p.JoinType == logicalop.RightOuterJoin { outerTaskIndex = 1 } else { outerTaskIndex = 0 @@ -647,12 +639,12 @@ func (p *PhysicalLimit) Attach2Task(tasks ...base.Task) base.Task { newCount := p.Offset + p.Count childProfile := cop.tablePlan.StatsInfo() // but "regionNum" is unknown since the copTask can be a double read, so we ignore it now. - stats := deriveLimitStats(childProfile, float64(newCount)) + stats := util.DeriveLimitStats(childProfile, float64(newCount)) pushedDownLimit := PhysicalLimit{PartitionBy: newPartitionBy, Count: newCount}.Init(p.SCtx(), stats, p.QueryBlockOffset()) pushedDownLimit.SetChildren(cop.tablePlan) cop.tablePlan = pushedDownLimit // Don't use clone() so that Limit and its children share the same schema. Otherwise, the virtual generated column may not be resolved right. - pushedDownLimit.SetSchema(pushedDownLimit.children[0].Schema()) + pushedDownLimit.SetSchema(pushedDownLimit.Children()[0].Schema()) t = cop.ConvertToRootTask(p.SCtx()) } if len(cop.idxMergePartPlans) == 0 { @@ -664,11 +656,11 @@ func (p *PhysicalLimit) Attach2Task(tasks ...base.Task) base.Task { childProfile := cop.Plan().StatsInfo() // Strictly speaking, for the row count of stats, we should multiply newCount with "regionNum", // but "regionNum" is unknown since the copTask can be a double read, so we ignore it now. - stats := deriveLimitStats(childProfile, float64(newCount)) + stats := util.DeriveLimitStats(childProfile, float64(newCount)) pushedDownLimit := PhysicalLimit{PartitionBy: newPartitionBy, Count: newCount}.Init(p.SCtx(), stats, p.QueryBlockOffset()) cop = attachPlan2Task(pushedDownLimit, cop).(*CopTask) // Don't use clone() so that Limit and its children share the same schema. Otherwise the virtual generated column may not be resolved right. - pushedDownLimit.SetSchema(pushedDownLimit.children[0].Schema()) + pushedDownLimit.SetSchema(pushedDownLimit.Children()[0].Schema()) } t = cop.ConvertToRootTask(p.SCtx()) sunk = p.sinkIntoIndexLookUp(t) @@ -686,10 +678,10 @@ func (p *PhysicalLimit) Attach2Task(tasks ...base.Task) base.Task { limitChildren := make([]base.PhysicalPlan, 0, len(cop.idxMergePartPlans)) for _, partialScan := range cop.idxMergePartPlans { childProfile := partialScan.StatsInfo() - stats := deriveLimitStats(childProfile, float64(newCount)) + stats := util.DeriveLimitStats(childProfile, float64(newCount)) pushedDownLimit := PhysicalLimit{PartitionBy: newPartitionBy, Count: newCount}.Init(p.SCtx(), stats, p.QueryBlockOffset()) pushedDownLimit.SetChildren(partialScan) - pushedDownLimit.SetSchema(pushedDownLimit.children[0].Schema()) + pushedDownLimit.SetSchema(pushedDownLimit.Children()[0].Schema()) limitChildren = append(limitChildren, pushedDownLimit) } cop.idxMergePartPlans = limitChildren @@ -730,10 +722,10 @@ func (p *PhysicalLimit) Attach2Task(tasks ...base.Task) base.Task { } else if mpp, ok := t.(*MppTask); ok { newCount := p.Offset + p.Count childProfile := mpp.Plan().StatsInfo() - stats := deriveLimitStats(childProfile, float64(newCount)) + stats := util.DeriveLimitStats(childProfile, float64(newCount)) pushedDownLimit := PhysicalLimit{Count: newCount, PartitionBy: newPartitionBy}.Init(p.SCtx(), stats, p.QueryBlockOffset()) mpp = attachPlan2Task(pushedDownLimit, mpp).(*MppTask) - pushedDownLimit.SetSchema(pushedDownLimit.children[0].Schema()) + pushedDownLimit.SetSchema(pushedDownLimit.Children()[0].Schema()) t = mpp.ConvertToRootTask(p.SCtx()) } if sunk { @@ -882,7 +874,7 @@ func (p *PhysicalTopN) getPushedDownTopN(childPlan base.PhysicalPlan) *PhysicalT childProfile := childPlan.StatsInfo() // Strictly speaking, for the row count of pushed down TopN, we should multiply newCount with "regionNum", // but "regionNum" is unknown since the copTask can be a double read, so we ignore it now. - stats := deriveLimitStats(childProfile, float64(newCount)) + stats := util.DeriveLimitStats(childProfile, float64(newCount)) topN := PhysicalTopN{ ByItems: newByItems, PartitionBy: newPartitionBy, @@ -920,7 +912,7 @@ func (p *PhysicalTopN) canExpressionConvertedToPB(storeTp kv.StoreType) bool { for _, item := range p.ByItems { exprs = append(exprs, item.Expr) } - return expression.CanExprsPushDown(GetPushDownCtx(p.SCtx()), exprs, storeTp) + return expression.CanExprsPushDown(util.GetPushDownCtx(p.SCtx()), exprs, storeTp) } // containVirtualColumn checks whether TopN.ByItems contains virtual generated columns. @@ -1032,12 +1024,12 @@ func (p *PhysicalExpand) Attach2Task(tasks ...base.Task) base.Task { func (p *PhysicalProjection) Attach2Task(tasks ...base.Task) base.Task { t := tasks[0].Copy() if cop, ok := t.(*CopTask); ok { - if (len(cop.rootTaskConds) == 0 && len(cop.idxMergePartPlans) == 0) && expression.CanExprsPushDown(GetPushDownCtx(p.SCtx()), p.Exprs, cop.getStoreType()) { + if (len(cop.rootTaskConds) == 0 && len(cop.idxMergePartPlans) == 0) && expression.CanExprsPushDown(util.GetPushDownCtx(p.SCtx()), p.Exprs, cop.getStoreType()) { copTask := attachPlan2Task(p, cop) return copTask } } else if mpp, ok := t.(*MppTask); ok { - if expression.CanExprsPushDown(GetPushDownCtx(p.SCtx()), p.Exprs, kv.TiFlash) { + if expression.CanExprsPushDown(util.GetPushDownCtx(p.SCtx()), p.Exprs, kv.TiFlash) { p.SetChildren(mpp.p) mpp.p = p return mpp @@ -1097,7 +1089,7 @@ func (p *PhysicalUnionAll) Attach2Task(tasks ...base.Task) base.Task { // Attach2Task implements PhysicalPlan interface. func (sel *PhysicalSelection) Attach2Task(tasks ...base.Task) base.Task { if mppTask, _ := tasks[0].(*MppTask); mppTask != nil { // always push to mpp task. - if expression.CanExprsPushDown(GetPushDownCtx(sel.SCtx()), sel.Conditions, kv.TiFlash) { + if expression.CanExprsPushDown(util.GetPushDownCtx(sel.SCtx()), sel.Conditions, kv.TiFlash) { return attachPlan2Task(sel, mppTask.Copy()) } } @@ -1111,7 +1103,7 @@ func CheckAggCanPushCop(sctx base.PlanContext, aggFuncs []*aggregation.AggFuncDe sc := sctx.GetSessionVars().StmtCtx ret := true reason := "" - pushDownCtx := GetPushDownCtx(sctx) + pushDownCtx := util.GetPushDownCtx(sctx) for _, aggFunc := range aggFuncs { // if the aggFunc contain VirtualColumn or CorrelatedColumn, it can not be pushed down. if expression.ContainVirtualColumn(aggFunc.Args) || expression.ContainCorrelatedColumn(aggFunc.Args) { @@ -1124,7 +1116,7 @@ func CheckAggCanPushCop(sctx base.PlanContext, aggFuncs []*aggregation.AggFuncDe ret = false break } - if !expression.CanExprsPushDownWithExtraInfo(GetPushDownCtx(sctx), aggFunc.Args, storeType, aggFunc.Name == ast.AggFuncSum) { + if !expression.CanExprsPushDownWithExtraInfo(util.GetPushDownCtx(sctx), aggFunc.Args, storeType, aggFunc.Name == ast.AggFuncSum) { reason = "arguments of AggFunc `" + aggFunc.Name + "` contains unsupported exprs" ret = false break @@ -1135,7 +1127,7 @@ func CheckAggCanPushCop(sctx base.PlanContext, aggFuncs []*aggregation.AggFuncDe for _, item := range aggFunc.OrderByItems { exprs = append(exprs, item.Expr) } - if !expression.CanExprsPushDownWithExtraInfo(GetPushDownCtx(sctx), exprs, storeType, false) { + if !expression.CanExprsPushDownWithExtraInfo(util.GetPushDownCtx(sctx), exprs, storeType, false) { reason = "arguments of AggFunc `" + aggFunc.Name + "` contains unsupported exprs in order-by clause" ret = false break @@ -1152,7 +1144,7 @@ func CheckAggCanPushCop(sctx base.PlanContext, aggFuncs []*aggregation.AggFuncDe reason = "groupByItems contain virtual columns, which is not supported now" ret = false } - if ret && !expression.CanExprsPushDown(GetPushDownCtx(sctx), groupByItems, storeType) { + if ret && !expression.CanExprsPushDown(util.GetPushDownCtx(sctx), groupByItems, storeType) { reason = "groupByItems contain unsupported exprs" ret = false } @@ -1499,9 +1491,8 @@ func (p *basePhysicalAgg) convertAvgForMPP() *PhysicalProjection { exprs = append(exprs, p.schema.Columns[i]) } proj := PhysicalProjection{ - Exprs: exprs, - CalculateNoDelay: false, - AvoidColumnEvaluator: false, + Exprs: exprs, + CalculateNoDelay: false, }.Init(p.SCtx(), p.StatsInfo(), p.QueryBlockOffset(), p.GetChildReqProps(0).CloneEssentialFields()) proj.SetSchema(p.schema) @@ -1514,7 +1505,7 @@ func (p *basePhysicalAgg) convertAvgForMPP() *PhysicalProjection { func (p *basePhysicalAgg) newPartialAggregate(copTaskType kv.StoreType, isMPPTask bool) (partial, final base.PhysicalPlan) { // Check if this aggregation can push down. if !CheckAggCanPushCop(p.SCtx(), p.AggFuncs, p.GroupByItems, copTaskType) { - return nil, p.self + return nil, p.Self } partialPref, finalPref, firstRowFuncMap := BuildFinalModeAggregation(p.SCtx(), &AggInfo{ AggFuncs: p.AggFuncs, @@ -1522,10 +1513,10 @@ func (p *basePhysicalAgg) newPartialAggregate(copTaskType kv.StoreType, isMPPTas Schema: p.Schema().Clone(), }, true, isMPPTask) if partialPref == nil { - return nil, p.self + return nil, p.Self } if p.TP() == plancodec.TypeStreamAgg && len(partialPref.GroupByItems) != len(finalPref.GroupByItems) { - return nil, p.self + return nil, p.Self } // Remove unnecessary FirstRow. partialPref.AggFuncs = RemoveUnnecessaryFirstRow(p.SCtx(), @@ -1536,14 +1527,14 @@ func (p *basePhysicalAgg) newPartialAggregate(copTaskType kv.StoreType, isMPPTas // so we need add `firstrow` aggregation function to output the group by value. aggFuncs, err := genFirstRowAggForGroupBy(p.SCtx(), partialPref.GroupByItems) if err != nil { - return nil, p.self + return nil, p.Self } partialPref.AggFuncs = append(partialPref.AggFuncs, aggFuncs...) } p.AggFuncs = partialPref.AggFuncs p.GroupByItems = partialPref.GroupByItems p.schema = partialPref.Schema - partialAgg := p.self + partialAgg := p.Self // Create physical "final" aggregation. prop := &property.PhysicalProperty{ExpectedCnt: math.MaxFloat64} if p.TP() == plancodec.TypeStreamAgg { @@ -1822,7 +1813,7 @@ func (p *PhysicalHashAgg) attach2TaskForMpp1Phase(mpp *MppTask) base.Task { // 1-phase agg: when the partition columns can be satisfied, where the plan does not need to enforce Exchange // only push down the original agg proj := p.convertAvgForMPP() - attachPlan2Task(p.self, mpp) + attachPlan2Task(p.Self, mpp) if proj != nil { attachPlan2Task(proj, mpp) } @@ -2171,6 +2162,9 @@ func (p *PhysicalHashAgg) attach2TaskForMpp(tasks ...base.Task) base.Task { }) } } + if partialHashAgg, ok := partialAgg.(*PhysicalHashAgg); ok && len(partitionCols) != 0 { + partialHashAgg.tiflashPreAggMode = p.SCtx().GetSessionVars().TiFlashPreAggMode + } prop := &property.PhysicalProperty{TaskTp: property.MppTaskType, ExpectedCnt: math.MaxFloat64, MPPPartitionTp: property.HashType, MPPPartitionCols: partitionCols} newMpp := mpp.enforceExchangerImpl(prop) if newMpp.Invalid() { @@ -2238,6 +2232,9 @@ func (p *PhysicalHashAgg) attach2TaskForMpp(tasks ...base.Task) base.Task { newMpp := mpp.enforceExchanger(exProp) attachPlan2Task(middle, newMpp) mpp = newMpp + if partialHashAgg, ok := partial.(*PhysicalHashAgg); ok && len(partitionCols) != 0 { + partialHashAgg.tiflashPreAggMode = p.SCtx().GetSessionVars().TiFlashPreAggMode + } } // prop here still be the first generated single-partition requirement. @@ -2325,7 +2322,7 @@ func (p *PhysicalWindow) Attach2Task(tasks ...base.Task) base.Task { return p.attach2TaskForMPP(mpp) } t := tasks[0].ConvertToRootTask(p.SCtx()) - return attachPlan2Task(p.self, t) + return attachPlan2Task(p.Self, t) } // Attach2Task implements the PhysicalPlan interface. diff --git a/pkg/planner/core/task_base.go b/pkg/planner/core/task_base.go index 947a87aa0afc6..27537d718c2cc 100644 --- a/pkg/planner/core/task_base.go +++ b/pkg/planner/core/task_base.go @@ -345,7 +345,7 @@ func (t *CopTask) convertToRootTaskImpl(ctx base.PlanContext) *RootTask { tp = tp.Children()[0] } else { join := tp.(*PhysicalHashJoin) - tp = join.children[1-join.InnerChildIdx] + tp = join.Children()[1-join.InnerChildIdx] } } ts := tp.(*PhysicalTableScan) @@ -394,7 +394,7 @@ func (t *CopTask) convertToRootTaskImpl(ctx base.PlanContext) *RootTask { tp = tp.Children()[0] } else { join := tp.(*PhysicalHashJoin) - tp = join.children[1-join.InnerChildIdx] + tp = join.Children()[1-join.InnerChildIdx] } } ts := tp.(*PhysicalTableScan) diff --git a/pkg/planner/core/testdata/index_merge_suite_out.json b/pkg/planner/core/testdata/index_merge_suite_out.json index 0d98061beedd1..66cc33e82a435 100644 --- a/pkg/planner/core/testdata/index_merge_suite_out.json +++ b/pkg/planner/core/testdata/index_merge_suite_out.json @@ -252,7 +252,7 @@ { "SQL": "select * from vh", "Plan": [ - "PartitionUnion 0.50 root ", + "PartitionUnion 1.50 root ", "├─IndexMerge 0.50 root type: intersection", "│ ├─IndexRangeScan(Build) 2.00 cop[tikv] table:t1, partition:p0, index:ia(a) range:[10,10], keep order:false", "│ ├─IndexRangeScan(Build) 1.00 cop[tikv] table:t1, partition:p0, index:ibc(b, c) range:[20 -inf,20 30), keep order:false", @@ -276,7 +276,7 @@ { "SQL": "select /*+ qb_name(v, v), use_index_merge(@v t1, ia, ibc, id) */ * from v", "Plan": [ - "PartitionUnion 0.50 root ", + "PartitionUnion 1.50 root ", "├─IndexMerge 0.50 root type: intersection", "│ ├─IndexRangeScan(Build) 2.00 cop[tikv] table:t1, partition:p0, index:ia(a) range:[10,10], keep order:false", "│ ├─IndexRangeScan(Build) 1.00 cop[tikv] table:t1, partition:p0, index:ibc(b, c) range:[20 -inf,20 30), keep order:false", @@ -300,7 +300,7 @@ { "SQL": "select /*+ qb_name(v, v@sel_1), use_index_merge(@v t1, ia, ibc, id) */ * from v", "Plan": [ - "PartitionUnion 0.50 root ", + "PartitionUnion 1.50 root ", "├─IndexMerge 0.50 root type: intersection", "│ ├─IndexRangeScan(Build) 2.00 cop[tikv] table:t1, partition:p0, index:ia(a) range:[10,10], keep order:false", "│ ├─IndexRangeScan(Build) 1.00 cop[tikv] table:t1, partition:p0, index:ibc(b, c) range:[20 -inf,20 30), keep order:false", @@ -324,7 +324,7 @@ { "SQL": "select /*+ qb_name(v, v@sel_1 .@sel_1), use_index_merge(@v t1, ia, ibc, id) */ * from v", "Plan": [ - "PartitionUnion 0.50 root ", + "PartitionUnion 1.50 root ", "├─IndexMerge 0.50 root type: intersection", "│ ├─IndexRangeScan(Build) 2.00 cop[tikv] table:t1, partition:p0, index:ia(a) range:[10,10], keep order:false", "│ ├─IndexRangeScan(Build) 1.00 cop[tikv] table:t1, partition:p0, index:ibc(b, c) range:[20 -inf,20 30), keep order:false", @@ -348,7 +348,7 @@ { "SQL": "select /*+ qb_name(v, v@sel_1 .@sel_1), use_index_merge(@v t1, ia, ibc, id) */ * from v", "Plan": [ - "PartitionUnion 0.50 root ", + "PartitionUnion 1.50 root ", "├─IndexMerge 0.50 root type: intersection", "│ ├─IndexRangeScan(Build) 2.00 cop[tikv] table:t1, partition:p0, index:ia(a) range:[10,10], keep order:false", "│ ├─IndexRangeScan(Build) 1.00 cop[tikv] table:t1, partition:p0, index:ibc(b, c) range:[20 -inf,20 30), keep order:false", diff --git a/pkg/planner/core/testdata/runtime_filter_generator_suite_out.json b/pkg/planner/core/testdata/runtime_filter_generator_suite_out.json index 131c9e9c6c219..158cfc64b6e4b 100644 --- a/pkg/planner/core/testdata/runtime_filter_generator_suite_out.json +++ b/pkg/planner/core/testdata/runtime_filter_generator_suite_out.json @@ -5,14 +5,14 @@ { "SQL": "select /*+ hash_join_build(t1) */ * from t1, t2 where t1.k1=t2.k1 and t2.k2 = 1", "Plan": [ - "TableReader_32 0.00 root MppVersion: 2, data:ExchangeSender_31", - "└─ExchangeSender_31 0.00 mpp[tiflash] ExchangeType: PassThrough", - " └─HashJoin_24 0.00 mpp[tiflash] inner join, equal:[eq(test.t1.k1, test.t2.k1)], runtime filter:0[IN] <- test.t1.k1", + "TableReader_32 1.00 root MppVersion: 2, data:ExchangeSender_31", + "└─ExchangeSender_31 1.00 mpp[tiflash] ExchangeType: PassThrough", + " └─HashJoin_24 1.00 mpp[tiflash] inner join, equal:[eq(test.t1.k1, test.t2.k1)], runtime filter:0[IN] <- test.t1.k1", " ├─ExchangeReceiver_28(Build) 1.00 mpp[tiflash] ", " │ └─ExchangeSender_27 1.00 mpp[tiflash] ExchangeType: Broadcast, Compression: FAST", " │ └─Selection_26 1.00 mpp[tiflash] not(isnull(test.t1.k1))", " │ └─TableFullScan_25 1.00 mpp[tiflash] table:t1 pushed down filter:empty, keep order:false", - " └─Selection_30(Probe) 0.00 mpp[tiflash] eq(test.t2.k2, 1), not(isnull(test.t2.k1))", + " └─Selection_30(Probe) 1.00 mpp[tiflash] eq(test.t2.k2, 1), not(isnull(test.t2.k1))", " └─TableFullScan_29 1.00 mpp[tiflash] table:t2 pushed down filter:empty, keep order:false, runtime filter:0[IN] -> test.t2.k1" ] }, diff --git a/pkg/planner/core/util.go b/pkg/planner/core/util.go index 7c96d46916568..7ad81e06cd5d3 100644 --- a/pkg/planner/core/util.go +++ b/pkg/planner/core/util.go @@ -26,6 +26,8 @@ import ( "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/planner/core/base" "github.com/pingcap/tidb/pkg/planner/core/operator/baseimpl" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" + "github.com/pingcap/tidb/pkg/planner/core/operator/physicalop" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/table" @@ -96,27 +98,27 @@ func (a *WindowFuncExtractor) Leave(n ast.Node) (ast.Node, bool) { // physicalSchemaProducer stores the schema for the physical plans who can produce schema directly. type physicalSchemaProducer struct { schema *expression.Schema - basePhysicalPlan + physicalop.BasePhysicalPlan } func (s *physicalSchemaProducer) cloneForPlanCacheWithSelf(newCtx base.PlanContext, newSelf base.PhysicalPlan) (*physicalSchemaProducer, bool) { cloned := new(physicalSchemaProducer) cloned.schema = s.Schema().Clone() - base, ok := s.basePhysicalPlan.cloneForPlanCacheWithSelf(newCtx, newSelf) + base, ok := s.BasePhysicalPlan.CloneForPlanCacheWithSelf(newCtx, newSelf) if !ok { return nil, false } - cloned.basePhysicalPlan = *base + cloned.BasePhysicalPlan = *base return cloned, true } func (s *physicalSchemaProducer) cloneWithSelf(newCtx base.PlanContext, newSelf base.PhysicalPlan) (*physicalSchemaProducer, error) { - base, err := s.basePhysicalPlan.cloneWithSelf(newCtx, newSelf) + base, err := s.BasePhysicalPlan.CloneWithSelf(newCtx, newSelf) if err != nil { return nil, err } return &physicalSchemaProducer{ - basePhysicalPlan: *base, + BasePhysicalPlan: *base, schema: s.Schema().Clone(), }, nil } @@ -146,17 +148,26 @@ func (s *physicalSchemaProducer) MemoryUsage() (sum int64) { return } - sum = s.basePhysicalPlan.MemoryUsage() + size.SizeOfPointer + sum = s.BasePhysicalPlan.MemoryUsage() + size.SizeOfPointer return } // baseSchemaProducer stores the schema for the base plans who can produce schema directly. type baseSchemaProducer struct { schema *expression.Schema - names types.NameSlice + names types.NameSlice `plan-cache-clone:"shallow"` baseimpl.Plan } +// CloneWithNewCtx clones the baseSchemaProducer with new context. +func (s *baseSchemaProducer) CloneWithNewCtx(newCtx base.PlanContext) *baseSchemaProducer { + cloned := new(baseSchemaProducer) + cloned.Plan = *s.Plan.CloneWithNewCtx(newCtx) + cloned.schema = s.schema.Clone() + cloned.names = s.names + return cloned +} + // OutputNames returns the outputting names of each column. func (s *baseSchemaProducer) OutputNames() types.NameSlice { return s.names @@ -200,40 +211,21 @@ func (s *baseSchemaProducer) MemoryUsage() (sum int64) { return } -func buildLogicalJoinSchema(joinType JoinType, join base.LogicalPlan) *expression.Schema { - leftSchema := join.Children()[0].Schema() - switch joinType { - case SemiJoin, AntiSemiJoin: - return leftSchema.Clone() - case LeftOuterSemiJoin, AntiLeftOuterSemiJoin: - newSchema := leftSchema.Clone() - newSchema.Append(join.Schema().Columns[join.Schema().Len()-1]) - return newSchema - } - newSchema := expression.MergeSchema(leftSchema, join.Children()[1].Schema()) - if joinType == LeftOuterJoin { - util.ResetNotNullFlag(newSchema, leftSchema.Len(), newSchema.Len()) - } else if joinType == RightOuterJoin { - util.ResetNotNullFlag(newSchema, 0, leftSchema.Len()) - } - return newSchema -} - // BuildPhysicalJoinSchema builds the schema of PhysicalJoin from it's children's schema. -func BuildPhysicalJoinSchema(joinType JoinType, join base.PhysicalPlan) *expression.Schema { +func BuildPhysicalJoinSchema(joinType logicalop.JoinType, join base.PhysicalPlan) *expression.Schema { leftSchema := join.Children()[0].Schema() switch joinType { - case SemiJoin, AntiSemiJoin: + case logicalop.SemiJoin, logicalop.AntiSemiJoin: return leftSchema.Clone() - case LeftOuterSemiJoin, AntiLeftOuterSemiJoin: + case logicalop.LeftOuterSemiJoin, logicalop.AntiLeftOuterSemiJoin: newSchema := leftSchema.Clone() newSchema.Append(join.Schema().Columns[join.Schema().Len()-1]) return newSchema } newSchema := expression.MergeSchema(leftSchema, join.Children()[1].Schema()) - if joinType == LeftOuterJoin { + if joinType == logicalop.LeftOuterJoin { util.ResetNotNullFlag(newSchema, leftSchema.Len(), newSchema.Len()) - } else if joinType == RightOuterJoin { + } else if joinType == logicalop.RightOuterJoin { util.ResetNotNullFlag(newSchema, 0, leftSchema.Len()) } return newSchema @@ -418,13 +410,3 @@ func EncodeUniqueIndexValuesForKey(ctx sessionctx.Context, tblInfo *model.TableI } return encodedIdxVals, nil } - -// GetPushDownCtx creates a PushDownContext from PlanContext -func GetPushDownCtx(pctx base.PlanContext) expression.PushDownContext { - return GetPushDownCtxFromBuildPBContext(pctx.GetBuildPBCtx()) -} - -// GetPushDownCtxFromBuildPBContext creates a PushDownContext from BuildPBContext -func GetPushDownCtxFromBuildPBContext(bctx *base.BuildPBContext) expression.PushDownContext { - return expression.NewPushDownContext(bctx.GetExprCtx().GetEvalCtx(), bctx.GetClient(), bctx.InExplainStmt, bctx.WarnHandler, bctx.ExtraWarnghandler, bctx.GroupConcatMaxLen) -} diff --git a/pkg/planner/memo/BUILD.bazel b/pkg/planner/memo/BUILD.bazel index 533c2b1f9b60d..d546a99ba5581 100644 --- a/pkg/planner/memo/BUILD.bazel +++ b/pkg/planner/memo/BUILD.bazel @@ -40,6 +40,7 @@ go_test( "//pkg/parser/model", "//pkg/planner/core", "//pkg/planner/core/base", + "//pkg/planner/core/operator/logicalop", "//pkg/planner/pattern", "//pkg/planner/property", "//pkg/sessionctx/variable", diff --git a/pkg/planner/memo/expr_iterator_test.go b/pkg/planner/memo/expr_iterator_test.go index 9a869341012fb..ab62157adc674 100644 --- a/pkg/planner/memo/expr_iterator_test.go +++ b/pkg/planner/memo/expr_iterator_test.go @@ -20,6 +20,7 @@ import ( "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/expression" plannercore "github.com/pingcap/tidb/pkg/planner/core" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/pattern" "github.com/stretchr/testify/require" "go.opencensus.io/stats/view" @@ -33,17 +34,17 @@ func TestNewExprIterFromGroupElem(t *testing.T) { do := domain.GetDomain(ctx) do.StatsHandle().Close() }() - g0 := NewGroupWithSchema(NewGroupExpr(plannercore.LogicalSelection{}.Init(ctx, 0)), schema) - g0.Insert(NewGroupExpr(plannercore.LogicalLimit{}.Init(ctx, 0))) - g0.Insert(NewGroupExpr(plannercore.LogicalProjection{}.Init(ctx, 0))) - g0.Insert(NewGroupExpr(plannercore.LogicalLimit{}.Init(ctx, 0))) + g0 := NewGroupWithSchema(NewGroupExpr(logicalop.LogicalSelection{}.Init(ctx, 0)), schema) + g0.Insert(NewGroupExpr(logicalop.LogicalLimit{}.Init(ctx, 0))) + g0.Insert(NewGroupExpr(logicalop.LogicalProjection{}.Init(ctx, 0))) + g0.Insert(NewGroupExpr(logicalop.LogicalLimit{}.Init(ctx, 0))) - g1 := NewGroupWithSchema(NewGroupExpr(plannercore.LogicalSelection{}.Init(ctx, 0)), schema) - g1.Insert(NewGroupExpr(plannercore.LogicalLimit{}.Init(ctx, 0))) - g1.Insert(NewGroupExpr(plannercore.LogicalProjection{}.Init(ctx, 0))) - g1.Insert(NewGroupExpr(plannercore.LogicalLimit{}.Init(ctx, 0))) + g1 := NewGroupWithSchema(NewGroupExpr(logicalop.LogicalSelection{}.Init(ctx, 0)), schema) + g1.Insert(NewGroupExpr(logicalop.LogicalLimit{}.Init(ctx, 0))) + g1.Insert(NewGroupExpr(logicalop.LogicalProjection{}.Init(ctx, 0))) + g1.Insert(NewGroupExpr(logicalop.LogicalLimit{}.Init(ctx, 0))) - expr := NewGroupExpr(plannercore.LogicalJoin{}.Init(ctx, 0)) + expr := NewGroupExpr(logicalop.LogicalJoin{}.Init(ctx, 0)) expr.Children = append(expr.Children, g0) expr.Children = append(expr.Children, g1) g2 := NewGroupWithSchema(expr, schema) @@ -81,19 +82,19 @@ func TestExprIterNext(t *testing.T) { do := domain.GetDomain(ctx) do.StatsHandle().Close() }() - g0 := NewGroupWithSchema(NewGroupExpr(plannercore.LogicalProjection{Exprs: []expression.Expression{expression.NewZero()}}.Init(ctx, 0)), schema) - g0.Insert(NewGroupExpr(plannercore.LogicalLimit{Count: 1}.Init(ctx, 0))) - g0.Insert(NewGroupExpr(plannercore.LogicalProjection{Exprs: []expression.Expression{expression.NewOne()}}.Init(ctx, 0))) - g0.Insert(NewGroupExpr(plannercore.LogicalLimit{Count: 2}.Init(ctx, 0))) - g0.Insert(NewGroupExpr(plannercore.LogicalProjection{Exprs: []expression.Expression{expression.NewNull()}}.Init(ctx, 0))) - - g1 := NewGroupWithSchema(NewGroupExpr(plannercore.LogicalSelection{Conditions: []expression.Expression{expression.NewNull()}}.Init(ctx, 0)), schema) - g1.Insert(NewGroupExpr(plannercore.LogicalLimit{Count: 3}.Init(ctx, 0))) - g1.Insert(NewGroupExpr(plannercore.LogicalSelection{Conditions: []expression.Expression{expression.NewOne()}}.Init(ctx, 0))) - g1.Insert(NewGroupExpr(plannercore.LogicalLimit{Count: 4}.Init(ctx, 0))) - g1.Insert(NewGroupExpr(plannercore.LogicalSelection{Conditions: []expression.Expression{expression.NewZero()}}.Init(ctx, 0))) - - expr := NewGroupExpr(plannercore.LogicalJoin{}.Init(ctx, 0)) + g0 := NewGroupWithSchema(NewGroupExpr(logicalop.LogicalProjection{Exprs: []expression.Expression{expression.NewZero()}}.Init(ctx, 0)), schema) + g0.Insert(NewGroupExpr(logicalop.LogicalLimit{Count: 1}.Init(ctx, 0))) + g0.Insert(NewGroupExpr(logicalop.LogicalProjection{Exprs: []expression.Expression{expression.NewOne()}}.Init(ctx, 0))) + g0.Insert(NewGroupExpr(logicalop.LogicalLimit{Count: 2}.Init(ctx, 0))) + g0.Insert(NewGroupExpr(logicalop.LogicalProjection{Exprs: []expression.Expression{expression.NewNull()}}.Init(ctx, 0))) + + g1 := NewGroupWithSchema(NewGroupExpr(logicalop.LogicalSelection{Conditions: []expression.Expression{expression.NewNull()}}.Init(ctx, 0)), schema) + g1.Insert(NewGroupExpr(logicalop.LogicalLimit{Count: 3}.Init(ctx, 0))) + g1.Insert(NewGroupExpr(logicalop.LogicalSelection{Conditions: []expression.Expression{expression.NewOne()}}.Init(ctx, 0))) + g1.Insert(NewGroupExpr(logicalop.LogicalLimit{Count: 4}.Init(ctx, 0))) + g1.Insert(NewGroupExpr(logicalop.LogicalSelection{Conditions: []expression.Expression{expression.NewZero()}}.Init(ctx, 0))) + + expr := NewGroupExpr(logicalop.LogicalJoin{}.Init(ctx, 0)) expr.Children = append(expr.Children, g0) expr.Children = append(expr.Children, g1) g2 := NewGroupWithSchema(expr, schema) @@ -134,29 +135,29 @@ func TestExprIterReset(t *testing.T) { do := domain.GetDomain(ctx) do.StatsHandle().Close() }() - g0 := NewGroupWithSchema(NewGroupExpr(plannercore.LogicalProjection{Exprs: []expression.Expression{expression.NewZero()}}.Init(ctx, 0)), schema) - g0.Insert(NewGroupExpr(plannercore.LogicalLimit{Count: 1}.Init(ctx, 0))) - g0.Insert(NewGroupExpr(plannercore.LogicalProjection{Exprs: []expression.Expression{expression.NewOne()}}.Init(ctx, 0))) - g0.Insert(NewGroupExpr(plannercore.LogicalLimit{Count: 2}.Init(ctx, 0))) - g0.Insert(NewGroupExpr(plannercore.LogicalProjection{Exprs: []expression.Expression{expression.NewNull()}}.Init(ctx, 0))) - - sel1 := NewGroupExpr(plannercore.LogicalSelection{Conditions: []expression.Expression{expression.NewNull()}}.Init(ctx, 0)) - sel2 := NewGroupExpr(plannercore.LogicalSelection{Conditions: []expression.Expression{expression.NewOne()}}.Init(ctx, 0)) - sel3 := NewGroupExpr(plannercore.LogicalSelection{Conditions: []expression.Expression{expression.NewZero()}}.Init(ctx, 0)) + g0 := NewGroupWithSchema(NewGroupExpr(logicalop.LogicalProjection{Exprs: []expression.Expression{expression.NewZero()}}.Init(ctx, 0)), schema) + g0.Insert(NewGroupExpr(logicalop.LogicalLimit{Count: 1}.Init(ctx, 0))) + g0.Insert(NewGroupExpr(logicalop.LogicalProjection{Exprs: []expression.Expression{expression.NewOne()}}.Init(ctx, 0))) + g0.Insert(NewGroupExpr(logicalop.LogicalLimit{Count: 2}.Init(ctx, 0))) + g0.Insert(NewGroupExpr(logicalop.LogicalProjection{Exprs: []expression.Expression{expression.NewNull()}}.Init(ctx, 0))) + + sel1 := NewGroupExpr(logicalop.LogicalSelection{Conditions: []expression.Expression{expression.NewNull()}}.Init(ctx, 0)) + sel2 := NewGroupExpr(logicalop.LogicalSelection{Conditions: []expression.Expression{expression.NewOne()}}.Init(ctx, 0)) + sel3 := NewGroupExpr(logicalop.LogicalSelection{Conditions: []expression.Expression{expression.NewZero()}}.Init(ctx, 0)) g1 := NewGroupWithSchema(sel1, schema) - g1.Insert(NewGroupExpr(plannercore.LogicalLimit{Count: 3}.Init(ctx, 0))) + g1.Insert(NewGroupExpr(logicalop.LogicalLimit{Count: 3}.Init(ctx, 0))) g1.Insert(sel2) - g1.Insert(NewGroupExpr(plannercore.LogicalLimit{Count: 4}.Init(ctx, 0))) + g1.Insert(NewGroupExpr(logicalop.LogicalLimit{Count: 4}.Init(ctx, 0))) g1.Insert(sel3) - g2 := NewGroupWithSchema(NewGroupExpr(plannercore.LogicalSelection{Conditions: []expression.Expression{expression.NewNull()}}.Init(ctx, 0)), schema) - g2.Insert(NewGroupExpr(plannercore.LogicalLimit{Count: 3}.Init(ctx, 0))) - g2.Insert(NewGroupExpr(plannercore.LogicalSelection{Conditions: []expression.Expression{expression.NewOne()}}.Init(ctx, 0))) - g2.Insert(NewGroupExpr(plannercore.LogicalLimit{Count: 4}.Init(ctx, 0))) - g2.Insert(NewGroupExpr(plannercore.LogicalSelection{Conditions: []expression.Expression{expression.NewZero()}}.Init(ctx, 0))) + g2 := NewGroupWithSchema(NewGroupExpr(logicalop.LogicalSelection{Conditions: []expression.Expression{expression.NewNull()}}.Init(ctx, 0)), schema) + g2.Insert(NewGroupExpr(logicalop.LogicalLimit{Count: 3}.Init(ctx, 0))) + g2.Insert(NewGroupExpr(logicalop.LogicalSelection{Conditions: []expression.Expression{expression.NewOne()}}.Init(ctx, 0))) + g2.Insert(NewGroupExpr(logicalop.LogicalLimit{Count: 4}.Init(ctx, 0))) + g2.Insert(NewGroupExpr(logicalop.LogicalSelection{Conditions: []expression.Expression{expression.NewZero()}}.Init(ctx, 0))) // link join with Group 0 and 1 - expr := NewGroupExpr(plannercore.LogicalJoin{}.Init(ctx, 0)) + expr := NewGroupExpr(logicalop.LogicalJoin{}.Init(ctx, 0)) expr.Children = append(expr.Children, g0) expr.Children = append(expr.Children, g1) g3 := NewGroupWithSchema(expr, schema) @@ -211,15 +212,15 @@ func TestExprIterWithEngineType(t *testing.T) { do := domain.GetDomain(ctx) do.StatsHandle().Close() }() - g1 := NewGroupWithSchema(NewGroupExpr(plannercore.LogicalSelection{Conditions: []expression.Expression{expression.NewOne()}}.Init(ctx, 0)), schema).SetEngineType(pattern.EngineTiFlash) - g1.Insert(NewGroupExpr(plannercore.LogicalLimit{Count: 1}.Init(ctx, 0))) - g1.Insert(NewGroupExpr(plannercore.LogicalProjection{Exprs: []expression.Expression{expression.NewOne()}}.Init(ctx, 0))) - g1.Insert(NewGroupExpr(plannercore.LogicalLimit{Count: 2}.Init(ctx, 0))) + g1 := NewGroupWithSchema(NewGroupExpr(logicalop.LogicalSelection{Conditions: []expression.Expression{expression.NewOne()}}.Init(ctx, 0)), schema).SetEngineType(pattern.EngineTiFlash) + g1.Insert(NewGroupExpr(logicalop.LogicalLimit{Count: 1}.Init(ctx, 0))) + g1.Insert(NewGroupExpr(logicalop.LogicalProjection{Exprs: []expression.Expression{expression.NewOne()}}.Init(ctx, 0))) + g1.Insert(NewGroupExpr(logicalop.LogicalLimit{Count: 2}.Init(ctx, 0))) - g2 := NewGroupWithSchema(NewGroupExpr(plannercore.LogicalSelection{Conditions: []expression.Expression{expression.NewOne()}}.Init(ctx, 0)), schema).SetEngineType(pattern.EngineTiKV) - g2.Insert(NewGroupExpr(plannercore.LogicalLimit{Count: 2}.Init(ctx, 0))) - g2.Insert(NewGroupExpr(plannercore.LogicalProjection{Exprs: []expression.Expression{expression.NewOne()}}.Init(ctx, 0))) - g2.Insert(NewGroupExpr(plannercore.LogicalLimit{Count: 3}.Init(ctx, 0))) + g2 := NewGroupWithSchema(NewGroupExpr(logicalop.LogicalSelection{Conditions: []expression.Expression{expression.NewOne()}}.Init(ctx, 0)), schema).SetEngineType(pattern.EngineTiKV) + g2.Insert(NewGroupExpr(logicalop.LogicalLimit{Count: 2}.Init(ctx, 0))) + g2.Insert(NewGroupExpr(logicalop.LogicalProjection{Exprs: []expression.Expression{expression.NewOne()}}.Init(ctx, 0))) + g2.Insert(NewGroupExpr(logicalop.LogicalLimit{Count: 3}.Init(ctx, 0))) flashGather := NewGroupExpr(plannercore.TiKVSingleGather{}.Init(ctx, 0)) flashGather.Children = append(flashGather.Children, g1) @@ -229,7 +230,7 @@ func TestExprIterWithEngineType(t *testing.T) { tikvGather.Children = append(tikvGather.Children, g2) g3.Insert(tikvGather) - join := NewGroupExpr(plannercore.LogicalJoin{}.Init(ctx, 0)) + join := NewGroupExpr(logicalop.LogicalJoin{}.Init(ctx, 0)) join.Children = append(join.Children, g3, g3) g4 := NewGroupWithSchema(join, schema).SetEngineType(pattern.EngineTiDB) diff --git a/pkg/planner/memo/group_expr_test.go b/pkg/planner/memo/group_expr_test.go index df42a515ae32e..fdb248a40ce7e 100644 --- a/pkg/planner/memo/group_expr_test.go +++ b/pkg/planner/memo/group_expr_test.go @@ -20,12 +20,12 @@ import ( "testing" "github.com/pingcap/tidb/pkg/expression" - plannercore "github.com/pingcap/tidb/pkg/planner/core" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/stretchr/testify/require" ) func TestNewGroupExpr(t *testing.T) { - p := &plannercore.LogicalLimit{} + p := &logicalop.LogicalLimit{} expr := NewGroupExpr(p) require.Equal(t, p, expr.ExprNode) require.Nil(t, expr.Children) @@ -33,7 +33,7 @@ func TestNewGroupExpr(t *testing.T) { } func TestGroupExprFingerprint(t *testing.T) { - p := &plannercore.LogicalLimit{Count: 3} + p := &logicalop.LogicalLimit{Count: 3} expr := NewGroupExpr(p) childGroup := NewGroupWithSchema(nil, expression.NewSchema()) expr.SetChildren(childGroup) diff --git a/pkg/planner/memo/group_test.go b/pkg/planner/memo/group_test.go index ba3b73946bc59..32ec633d48050 100644 --- a/pkg/planner/memo/group_test.go +++ b/pkg/planner/memo/group_test.go @@ -25,6 +25,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/model" plannercore "github.com/pingcap/tidb/pkg/planner/core" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/planner/pattern" "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/sessionctx/variable" @@ -32,7 +33,7 @@ import ( ) func TestNewGroup(t *testing.T) { - p := &plannercore.LogicalLimit{} + p := &logicalop.LogicalLimit{} expr := NewGroupExpr(p) g := NewGroupWithSchema(expr, expression.NewSchema()) @@ -43,7 +44,7 @@ func TestNewGroup(t *testing.T) { } func TestGroupInsert(t *testing.T) { - p := &plannercore.LogicalLimit{} + p := &logicalop.LogicalLimit{} expr := NewGroupExpr(p) g := NewGroupWithSchema(expr, expression.NewSchema()) require.False(t, g.Insert(expr)) @@ -52,7 +53,7 @@ func TestGroupInsert(t *testing.T) { } func TestGroupDelete(t *testing.T) { - p := &plannercore.LogicalLimit{} + p := &logicalop.LogicalLimit{} expr := NewGroupExpr(p) g := NewGroupWithSchema(expr, expression.NewSchema()) require.Equal(t, 1, g.Equivalents.Len()) @@ -70,10 +71,10 @@ func TestGroupDeleteAll(t *testing.T) { do := domain.GetDomain(ctx) do.StatsHandle().Close() }() - expr := NewGroupExpr(plannercore.LogicalSelection{}.Init(ctx, 0)) + expr := NewGroupExpr(logicalop.LogicalSelection{}.Init(ctx, 0)) g := NewGroupWithSchema(expr, expression.NewSchema()) - require.True(t, g.Insert(NewGroupExpr(plannercore.LogicalLimit{}.Init(ctx, 0)))) - require.True(t, g.Insert(NewGroupExpr(plannercore.LogicalProjection{}.Init(ctx, 0)))) + require.True(t, g.Insert(NewGroupExpr(logicalop.LogicalLimit{}.Init(ctx, 0)))) + require.True(t, g.Insert(NewGroupExpr(logicalop.LogicalProjection{}.Init(ctx, 0)))) require.Equal(t, 3, g.Equivalents.Len()) require.NotNil(t, g.GetFirstElem(pattern.OperandProjection)) require.True(t, g.Exists(expr)) @@ -85,7 +86,7 @@ func TestGroupDeleteAll(t *testing.T) { } func TestGroupExists(t *testing.T) { - p := &plannercore.LogicalLimit{} + p := &logicalop.LogicalLimit{} expr := NewGroupExpr(p) g := NewGroupWithSchema(expr, expression.NewSchema()) require.True(t, g.Exists(expr)) @@ -112,9 +113,9 @@ func TestGroupFingerPrint(t *testing.T) { require.True(t, ok) // Plan tree should be: DataSource -> Selection -> Projection - proj, ok := logic1.(*plannercore.LogicalProjection) + proj, ok := logic1.(*logicalop.LogicalProjection) require.True(t, ok) - sel, ok := logic1.Children()[0].(*plannercore.LogicalSelection) + sel, ok := logic1.Children()[0].(*logicalop.LogicalSelection) require.True(t, ok) group1 := Convert2Group(logic1) oldGroupExpr := group1.Equivalents.Front().Value.(*GroupExpr) @@ -133,7 +134,7 @@ func TestGroupFingerPrint(t *testing.T) { require.Equal(t, 2, group1.Equivalents.Len()) // Insert a GroupExpr with different ExprNode. - limit := plannercore.LogicalLimit{}.Init(proj.SCtx(), 0) + limit := logicalop.LogicalLimit{}.Init(proj.SCtx(), 0) newGroupExpr3 := NewGroupExpr(limit) newGroupExpr3.SetChildren(oldGroupExpr.Children[0]) group1.Insert(newGroupExpr3) @@ -141,7 +142,7 @@ func TestGroupFingerPrint(t *testing.T) { // Insert two LogicalSelections with same conditions but different order. require.Len(t, sel.Conditions, 2) - newSelection := plannercore.LogicalSelection{ + newSelection := logicalop.LogicalSelection{ Conditions: make([]expression.Expression, 2)}.Init(sel.SCtx(), sel.QueryBlockOffset()) newSelection.Conditions[0], newSelection.Conditions[1] = sel.Conditions[1], sel.Conditions[0] newGroupExpr4 := NewGroupExpr(sel) @@ -160,11 +161,11 @@ func TestGroupGetFirstElem(t *testing.T) { do := domain.GetDomain(ctx) do.StatsHandle().Close() }() - expr0 := NewGroupExpr(plannercore.LogicalProjection{}.Init(ctx, 0)) - expr1 := NewGroupExpr(plannercore.LogicalLimit{}.Init(ctx, 0)) - expr2 := NewGroupExpr(plannercore.LogicalProjection{}.Init(ctx, 0)) - expr3 := NewGroupExpr(plannercore.LogicalLimit{}.Init(ctx, 0)) - expr4 := NewGroupExpr(plannercore.LogicalProjection{}.Init(ctx, 0)) + expr0 := NewGroupExpr(logicalop.LogicalProjection{}.Init(ctx, 0)) + expr1 := NewGroupExpr(logicalop.LogicalLimit{}.Init(ctx, 0)) + expr2 := NewGroupExpr(logicalop.LogicalProjection{}.Init(ctx, 0)) + expr3 := NewGroupExpr(logicalop.LogicalLimit{}.Init(ctx, 0)) + expr4 := NewGroupExpr(logicalop.LogicalProjection{}.Init(ctx, 0)) g := NewGroupWithSchema(expr0, expression.NewSchema()) g.Insert(expr1) @@ -190,7 +191,7 @@ func (impl *fakeImpl) GetCostLimit(float64, ...Implementation) float64 { return func TestGetInsertGroupImpl(t *testing.T) { ctx := plannercore.MockContext() - g := NewGroupWithSchema(NewGroupExpr(plannercore.LogicalLimit{}.Init(ctx, 0)), expression.NewSchema()) + g := NewGroupWithSchema(NewGroupExpr(logicalop.LogicalLimit{}.Init(ctx, 0)), expression.NewSchema()) defer func() { do := domain.GetDomain(ctx) do.StatsHandle().Close() @@ -212,9 +213,9 @@ func TestFirstElemAfterDelete(t *testing.T) { do := domain.GetDomain(ctx) do.StatsHandle().Close() }() - oldExpr := NewGroupExpr(plannercore.LogicalLimit{Count: 10}.Init(ctx, 0)) + oldExpr := NewGroupExpr(logicalop.LogicalLimit{Count: 10}.Init(ctx, 0)) g := NewGroupWithSchema(oldExpr, expression.NewSchema()) - newExpr := NewGroupExpr(plannercore.LogicalLimit{Count: 20}.Init(ctx, 0)) + newExpr := NewGroupExpr(logicalop.LogicalLimit{Count: 20}.Init(ctx, 0)) g.Insert(newExpr) require.NotNil(t, g.GetFirstElem(pattern.OperandLimit)) require.Equal(t, oldExpr, g.GetFirstElem(pattern.OperandLimit).Value) @@ -261,7 +262,7 @@ func TestBuildKeyInfo(t *testing.T) { require.Len(t, group2.Prop.Schema.Keys, 1) // case 3: build key info for new Group - newSel := plannercore.LogicalSelection{}.Init(ctx, 0) + newSel := logicalop.LogicalSelection{}.Init(ctx, 0) newExpr1 := NewGroupExpr(newSel) newExpr1.SetChildren(group2) newGroup1 := NewGroupWithSchema(newExpr1, group2.Prop.Schema) @@ -269,7 +270,7 @@ func TestBuildKeyInfo(t *testing.T) { require.Len(t, newGroup1.Prop.Schema.Keys, 1) // case 4: build maxOneRow for new Group - newLimit := plannercore.LogicalLimit{Count: 1}.Init(ctx, 0) + newLimit := logicalop.LogicalLimit{Count: 1}.Init(ctx, 0) newExpr2 := NewGroupExpr(newLimit) newExpr2.SetChildren(group2) newGroup2 := NewGroupWithSchema(newExpr2, group2.Prop.Schema) diff --git a/pkg/planner/optimize.go b/pkg/planner/optimize.go index cd7757176821e..6379ffae3feee 100644 --- a/pkg/planner/optimize.go +++ b/pkg/planner/optimize.go @@ -583,7 +583,7 @@ func buildLogicalPlan(ctx context.Context, sctx pctx.PlanContext, node ast.Node, func handleInvalidBinding(ctx context.Context, sctx pctx.PlanContext, level string, binding bindinfo.Binding) { sessionHandle := sctx.Value(bindinfo.SessionBindInfoKeyType).(bindinfo.SessionBindingHandle) - err := sessionHandle.DropSessionBinding(binding.SQLDigest) + err := sessionHandle.DropSessionBinding([]string{binding.SQLDigest}) if err != nil { logutil.Logger(ctx).Info("drop session bindings failed") } diff --git a/pkg/planner/pattern/pattern.go b/pkg/planner/pattern/pattern.go index 6711e4c42df01..8488bcc856e3d 100644 --- a/pkg/planner/pattern/pattern.go +++ b/pkg/planner/pattern/pattern.go @@ -77,45 +77,45 @@ const ( // GetOperand maps logical plan operator to Operand. func GetOperand(p base.LogicalPlan) Operand { switch p.(type) { - case *plannercore.LogicalApply: + case *logicalop.LogicalApply: return OperandApply - case *plannercore.LogicalJoin: + case *logicalop.LogicalJoin: return OperandJoin - case *plannercore.LogicalAggregation: + case *logicalop.LogicalAggregation: return OperandAggregation - case *plannercore.LogicalProjection: + case *logicalop.LogicalProjection: return OperandProjection - case *plannercore.LogicalSelection: + case *logicalop.LogicalSelection: return OperandSelection case *logicalop.LogicalMaxOneRow: return OperandMaxOneRow - case *plannercore.LogicalTableDual: + case *logicalop.LogicalTableDual: return OperandTableDual case *plannercore.DataSource: return OperandDataSource - case *plannercore.LogicalUnionScan: + case *logicalop.LogicalUnionScan: return OperandUnionScan - case *plannercore.LogicalUnionAll: + case *logicalop.LogicalUnionAll: return OperandUnionAll - case *plannercore.LogicalSort: + case *logicalop.LogicalSort: return OperandSort - case *plannercore.LogicalTopN: + case *logicalop.LogicalTopN: return OperandTopN - case *plannercore.LogicalLock: + case *logicalop.LogicalLock: return OperandLock - case *plannercore.LogicalLimit: + case *logicalop.LogicalLimit: return OperandLimit case *plannercore.TiKVSingleGather: return OperandTiKVSingleGather case *plannercore.LogicalTableScan: return OperandTableScan - case *plannercore.LogicalMemTable: + case *logicalop.LogicalMemTable: return OperandMemTableScan case *plannercore.LogicalIndexScan: return OperandIndexScan - case *plannercore.LogicalShow: + case *logicalop.LogicalShow: return OperandShow - case *plannercore.LogicalWindow: + case *logicalop.LogicalWindow: return OperandWindow default: return OperandUnsupported diff --git a/pkg/planner/pattern/pattern_test.go b/pkg/planner/pattern/pattern_test.go index c56669f9c40a3..c2fb8ecde54ec 100644 --- a/pkg/planner/pattern/pattern_test.go +++ b/pkg/planner/pattern/pattern_test.go @@ -23,20 +23,20 @@ import ( ) func TestGetOperand(t *testing.T) { - require.Equal(t, OperandJoin, GetOperand(&plannercore.LogicalJoin{})) - require.Equal(t, OperandAggregation, GetOperand(&plannercore.LogicalAggregation{})) - require.Equal(t, OperandProjection, GetOperand(&plannercore.LogicalProjection{})) - require.Equal(t, OperandSelection, GetOperand(&plannercore.LogicalSelection{})) - require.Equal(t, OperandApply, GetOperand(&plannercore.LogicalApply{})) + require.Equal(t, OperandJoin, GetOperand(&logicalop.LogicalJoin{})) + require.Equal(t, OperandAggregation, GetOperand(&logicalop.LogicalAggregation{})) + require.Equal(t, OperandProjection, GetOperand(&logicalop.LogicalProjection{})) + require.Equal(t, OperandSelection, GetOperand(&logicalop.LogicalSelection{})) + require.Equal(t, OperandApply, GetOperand(&logicalop.LogicalApply{})) require.Equal(t, OperandMaxOneRow, GetOperand(&logicalop.LogicalMaxOneRow{})) - require.Equal(t, OperandTableDual, GetOperand(&plannercore.LogicalTableDual{})) + require.Equal(t, OperandTableDual, GetOperand(&logicalop.LogicalTableDual{})) require.Equal(t, OperandDataSource, GetOperand(&plannercore.DataSource{})) - require.Equal(t, OperandUnionScan, GetOperand(&plannercore.LogicalUnionScan{})) - require.Equal(t, OperandUnionAll, GetOperand(&plannercore.LogicalUnionAll{})) - require.Equal(t, OperandSort, GetOperand(&plannercore.LogicalSort{})) - require.Equal(t, OperandTopN, GetOperand(&plannercore.LogicalTopN{})) - require.Equal(t, OperandLock, GetOperand(&plannercore.LogicalLock{})) - require.Equal(t, OperandLimit, GetOperand(&plannercore.LogicalLimit{})) + require.Equal(t, OperandUnionScan, GetOperand(&logicalop.LogicalUnionScan{})) + require.Equal(t, OperandUnionAll, GetOperand(&logicalop.LogicalUnionAll{})) + require.Equal(t, OperandSort, GetOperand(&logicalop.LogicalSort{})) + require.Equal(t, OperandTopN, GetOperand(&logicalop.LogicalTopN{})) + require.Equal(t, OperandLock, GetOperand(&logicalop.LogicalLock{})) + require.Equal(t, OperandLimit, GetOperand(&logicalop.LogicalLimit{})) } func TestOperandMatch(t *testing.T) { diff --git a/pkg/planner/property/logical_property.go b/pkg/planner/property/logical_property.go index ffa8e90b24796..e1e6156e156e0 100644 --- a/pkg/planner/property/logical_property.go +++ b/pkg/planner/property/logical_property.go @@ -14,9 +14,7 @@ package property -import ( - "github.com/pingcap/tidb/pkg/expression" -) +import "github.com/pingcap/tidb/pkg/expression" // LogicalProperty stands for logical properties such as schema of expression, // or statistics of columns in schema for output of Group. diff --git a/pkg/planner/util/BUILD.bazel b/pkg/planner/util/BUILD.bazel index 351ad77cff20c..8500f83dc55bd 100644 --- a/pkg/planner/util/BUILD.bazel +++ b/pkg/planner/util/BUILD.bazel @@ -4,7 +4,9 @@ go_library( name = "util", srcs = [ "byitem.go", + "explain_misc.go", "expression.go", + "funcdep_misc.go", "handle_cols.go", "misc.go", "null_misc.go", @@ -20,6 +22,7 @@ go_library( "//pkg/parser/mysql", "//pkg/planner/context", "//pkg/planner/core/base", + "//pkg/planner/funcdep", "//pkg/planner/property", "//pkg/sessionctx/stmtctx", "//pkg/tablecodec", @@ -27,6 +30,8 @@ go_library( "//pkg/util/chunk", "//pkg/util/codec", "//pkg/util/collate", + "//pkg/util/hint", + "//pkg/util/intset", "//pkg/util/ranger", "//pkg/util/size", "@com_github_pingcap_errors//:errors", diff --git a/pkg/planner/util/costusage/cost_misc.go b/pkg/planner/util/costusage/cost_misc.go index ba3a5cc6d1761..282ea6363f22d 100644 --- a/pkg/planner/util/costusage/cost_misc.go +++ b/pkg/planner/util/costusage/cost_misc.go @@ -91,13 +91,14 @@ func NewZeroCostVer2(trace bool) (ret CostVer2) { return } -func hasCostFlag(costFlag, flag uint64) bool { +// HasCostFlag indicates whether the costFlag has the flag. +func HasCostFlag(costFlag, flag uint64) bool { return (costFlag & flag) > 0 } // TraceCost indicates whether to trace cost. func TraceCost(option *optimizetrace.PlanCostOption) bool { - if option != nil && hasCostFlag(option.CostFlag, CostFlagTrace) { + if option != nil && HasCostFlag(option.CostFlag, CostFlagTrace) { return true } return false diff --git a/pkg/planner/util/explain_misc.go b/pkg/planner/util/explain_misc.go new file mode 100644 index 0000000000000..2a56d58ce0fb9 --- /dev/null +++ b/pkg/planner/util/explain_misc.go @@ -0,0 +1,54 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package util + +import ( + "bytes" + "fmt" + + "github.com/pingcap/tidb/pkg/expression" + "github.com/pingcap/tidb/pkg/planner/property" +) + +// ExplainByItems generates explain information for ByItems. +func ExplainByItems(ctx expression.EvalContext, buffer *bytes.Buffer, byItems []*ByItems) *bytes.Buffer { + for i, item := range byItems { + if item.Desc { + fmt.Fprintf(buffer, "%s:desc", item.Expr.ExplainInfo(ctx)) + } else { + fmt.Fprintf(buffer, "%s", item.Expr.ExplainInfo(ctx)) + } + + if i+1 < len(byItems) { + buffer.WriteString(", ") + } + } + return buffer +} + +// ExplainPartitionBy produce text for p.PartitionBy. Common for window functions and TopN. +func ExplainPartitionBy(ctx expression.EvalContext, buffer *bytes.Buffer, + partitionBy []property.SortItem, normalized bool) *bytes.Buffer { + if len(partitionBy) > 0 { + buffer.WriteString("partition by ") + for i, item := range partitionBy { + fmt.Fprintf(buffer, "%s", item.Col.ColumnExplainInfo(ctx, normalized)) + if i+1 < len(partitionBy) { + buffer.WriteString(", ") + } + } + } + return buffer +} diff --git a/pkg/planner/util/fixcontrol/get.go b/pkg/planner/util/fixcontrol/get.go index c2bed71c7b47f..33d1d083ec37b 100644 --- a/pkg/planner/util/fixcontrol/get.go +++ b/pkg/planner/util/fixcontrol/get.go @@ -11,6 +11,9 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. +// +// NOTE: For assigning new fix control numbers - use the issue number associated with the fix. +// package fixcontrol @@ -48,6 +51,8 @@ const ( Fix45798 uint64 = 45798 // Fix46177 controls whether to explore enforced plans for DataSource if it has already found an unenforced plan. Fix46177 uint64 = 46177 + // Fix47400 controls whether to allow a rowEst below 1 + Fix47400 uint64 = 47400 // Fix49736 controls whether to force the optimizer to use plan cache even if there is risky optimization. // This fix-control is test-only. Fix49736 uint64 = 49736 diff --git a/pkg/planner/util/funcdep_misc.go b/pkg/planner/util/funcdep_misc.go new file mode 100644 index 0000000000000..ed2fc849fb4b6 --- /dev/null +++ b/pkg/planner/util/funcdep_misc.go @@ -0,0 +1,123 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package util + +import ( + "github.com/pingcap/tidb/pkg/expression" + "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/funcdep" + "github.com/pingcap/tidb/pkg/util/intset" +) + +// ExtractNotNullFromConds extracts not-null columns from conditions. +func ExtractNotNullFromConds(conditions []expression.Expression, p base.LogicalPlan) intset.FastIntSet { + // extract the column NOT NULL rejection characteristic from selection condition. + // CNF considered only, DNF doesn't have its meanings (cause that condition's eval may don't take effect) + // + // Take this case: select * from t where (a = 1) and (b is null): + // + // If we wanna where phrase eval to true, two pre-condition: {a=1} and {b is null} both need to be true. + // Hence, we assert that: + // + // 1: `a` must not be null since `NULL = 1` is evaluated as NULL. + // 2: `b` must be null since only `NULL is NULL` is evaluated as true. + // + // As a result, `a` will be extracted as not-null column to abound the FDSet. + notnullColsUniqueIDs := intset.NewFastIntSet() + for _, condition := range conditions { + var cols []*expression.Column + cols = expression.ExtractColumnsFromExpressions(cols, []expression.Expression{condition}, nil) + if IsNullRejected(p.SCtx(), p.Schema(), condition) { + for _, col := range cols { + notnullColsUniqueIDs.Insert(int(col.UniqueID)) + } + } + } + return notnullColsUniqueIDs +} + +// ExtractConstantCols extracts constant columns from conditions. +func ExtractConstantCols(conditions []expression.Expression, sctx base.PlanContext, + fds *funcdep.FDSet) intset.FastIntSet { + // extract constant cols + // eg: where a=1 and b is null and (1+c)=5. + // TODO: Some columns can only be determined to be constant from multiple constraints (e.g. x <= 1 AND x >= 1) + var ( + constObjs []expression.Expression + constUniqueIDs = intset.NewFastIntSet() + ) + constObjs = expression.ExtractConstantEqColumnsOrScalar(sctx.GetExprCtx(), constObjs, conditions) + for _, constObj := range constObjs { + switch x := constObj.(type) { + case *expression.Column: + constUniqueIDs.Insert(int(x.UniqueID)) + case *expression.ScalarFunction: + hashCode := string(x.HashCode()) + if uniqueID, ok := fds.IsHashCodeRegistered(hashCode); ok { + constUniqueIDs.Insert(uniqueID) + } else { + scalarUniqueID := int(sctx.GetSessionVars().AllocPlanColumnID()) + fds.RegisterUniqueID(string(x.HashCode()), scalarUniqueID) + constUniqueIDs.Insert(scalarUniqueID) + } + } + } + return constUniqueIDs +} + +// ExtractEquivalenceCols extracts equivalence columns from conditions. +func ExtractEquivalenceCols(conditions []expression.Expression, sctx base.PlanContext, + fds *funcdep.FDSet) [][]intset.FastIntSet { + var equivObjsPair [][]expression.Expression + equivObjsPair = expression.ExtractEquivalenceColumns(equivObjsPair, conditions) + equivUniqueIDs := make([][]intset.FastIntSet, 0, len(equivObjsPair)) + for _, equivObjPair := range equivObjsPair { + // lhs of equivalence. + var ( + lhsUniqueID int + rhsUniqueID int + ) + switch x := equivObjPair[0].(type) { + case *expression.Column: + lhsUniqueID = int(x.UniqueID) + case *expression.ScalarFunction: + hashCode := string(x.HashCode()) + if uniqueID, ok := fds.IsHashCodeRegistered(hashCode); ok { + lhsUniqueID = uniqueID + } else { + scalarUniqueID := int(sctx.GetSessionVars().AllocPlanColumnID()) + fds.RegisterUniqueID(string(x.HashCode()), scalarUniqueID) + lhsUniqueID = scalarUniqueID + } + } + // rhs of equivalence. + switch x := equivObjPair[1].(type) { + case *expression.Column: + rhsUniqueID = int(x.UniqueID) + case *expression.ScalarFunction: + hashCode := string(x.HashCode()) + if uniqueID, ok := fds.IsHashCodeRegistered(hashCode); ok { + rhsUniqueID = uniqueID + } else { + scalarUniqueID := int(sctx.GetSessionVars().AllocPlanColumnID()) + fds.RegisterUniqueID(string(x.HashCode()), scalarUniqueID) + rhsUniqueID = scalarUniqueID + } + } + equivUniqueIDs = append(equivUniqueIDs, []intset.FastIntSet{intset.NewFastIntSet( + lhsUniqueID), intset.NewFastIntSet(rhsUniqueID)}) + } + return equivUniqueIDs +} diff --git a/pkg/planner/util/misc.go b/pkg/planner/util/misc.go index 98d7dc18897e1..300f45d004517 100644 --- a/pkg/planner/util/misc.go +++ b/pkg/planner/util/misc.go @@ -17,13 +17,19 @@ package util import ( "encoding/binary" "fmt" + "math" "time" "unsafe" "github.com/pingcap/tidb/pkg/expression" + "github.com/pingcap/tidb/pkg/kv" + "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/model" + "github.com/pingcap/tidb/pkg/planner/core/base" "github.com/pingcap/tidb/pkg/planner/property" + "github.com/pingcap/tidb/pkg/sessionctx/stmtctx" "github.com/pingcap/tidb/pkg/types" + h "github.com/pingcap/tidb/pkg/util/hint" "github.com/pingcap/tidb/pkg/util/ranger" ) @@ -34,6 +40,7 @@ func CloneFieldNames(names []*types.FieldName) []*types.FieldName { } cloned := make([]*types.FieldName, len(names)) for i, name := range names { + cloned[i] = new(types.FieldName) *cloned[i] = *name } return cloned @@ -61,6 +68,23 @@ func CloneExprs(exprs []expression.Expression) []expression.Expression { return cloned } +// CloneExpressions uses CloneExprs to clone a slice of expression.Expression. +func CloneExpressions(exprs []expression.Expression) []expression.Expression { + return CloneExprs(exprs) +} + +// CloneExpression2D uses CloneExprs to clone a 2D slice of expression.Expression. +func CloneExpression2D(exprs [][]expression.Expression) [][]expression.Expression { + if exprs == nil { + return nil + } + cloned := make([][]expression.Expression, 0, len(exprs)) + for _, e := range exprs { + cloned = append(cloned, CloneExprs(e)) + } + return cloned +} + // CloneScalarFunctions uses (*ScalarFunction).Clone to clone a slice of *ScalarFunction. func CloneScalarFunctions(scalarFuncs []*expression.ScalarFunction) []*expression.ScalarFunction { if scalarFuncs == nil { @@ -73,6 +97,30 @@ func CloneScalarFunctions(scalarFuncs []*expression.ScalarFunction) []*expressio return cloned } +// CloneAssignments uses (*Assignment).Clone to clone a slice of *Assignment. +func CloneAssignments(assignments []*expression.Assignment) []*expression.Assignment { + if assignments == nil { + return nil + } + cloned := make([]*expression.Assignment, 0, len(assignments)) + for _, a := range assignments { + cloned = append(cloned, a.Clone()) + } + return cloned +} + +// CloneHandleCols uses HandleCols.Clone to clone a slice of HandleCols. +func CloneHandleCols(newCtx *stmtctx.StatementContext, handles []HandleCols) []HandleCols { + if handles == nil { + return nil + } + cloned := make([]HandleCols, 0, len(handles)) + for _, h := range handles { + cloned = append(cloned, h.Clone(newCtx)) + } + return cloned +} + // CloneCols uses (*Column).Clone to clone a slice of *Column. func CloneCols(cols []*expression.Column) []*expression.Column { if cols == nil { @@ -89,6 +137,59 @@ func CloneCols(cols []*expression.Column) []*expression.Column { return cloned } +// CloneColumns uses CloneCols to clone a slice of expression.Column. +func CloneColumns(cols []*expression.Column) []*expression.Column { + return CloneCols(cols) +} + +// CloneConstants uses (*Constant).Clone to clone a slice of *Constant. +func CloneConstants(constants []*expression.Constant) []*expression.Constant { + if constants == nil { + return nil + } + cloned := make([]*expression.Constant, 0, len(constants)) + for _, c := range constants { + cloned = append(cloned, c.Clone().(*expression.Constant)) + } + return cloned +} + +// CloneConstant2D uses CloneConstants to clone a 2D slice of *Constant. +func CloneConstant2D(constants [][]*expression.Constant) [][]*expression.Constant { + if constants == nil { + return nil + } + cloned := make([][]*expression.Constant, 0, len(constants)) + for _, c := range constants { + cloned = append(cloned, CloneConstants(c)) + } + return cloned +} + +// CloneDatums uses Datum.Clone to clone a slice of Datum. +func CloneDatums(datums []types.Datum) []types.Datum { + if datums == nil { + return nil + } + cloned := make([]types.Datum, 0, len(datums)) + for _, d := range datums { + cloned = append(cloned, *d.Clone()) + } + return cloned +} + +// CloneDatum2D uses CloneDatums to clone a 2D slice of Datum. +func CloneDatum2D(datums [][]types.Datum) [][]types.Datum { + if datums == nil { + return nil + } + cloned := make([][]types.Datum, 0, len(datums)) + for _, d := range datums { + cloned = append(cloned, CloneDatums(d)) + } + return cloned +} + // CloneColInfos uses (*ColumnInfo).Clone to clone a slice of *ColumnInfo. func CloneColInfos(cols []*model.ColumnInfo) []*model.ColumnInfo { if cols == nil { @@ -113,8 +214,8 @@ func CloneRanges(ranges []*ranger.Range) []*ranger.Range { return cloned } -// CloneByItems uses (*ByItems).Clone to clone a slice of *ByItems. -func CloneByItems(byItems []*ByItems) []*ByItems { +// CloneByItemss uses (*ByItems).Clone to clone a slice of *ByItems. +func CloneByItemss(byItems []*ByItems) []*ByItems { if byItems == nil { return nil } @@ -125,8 +226,8 @@ func CloneByItems(byItems []*ByItems) []*ByItems { return cloned } -// CloneSortItem uses SortItem.Clone to clone a slice of SortItem. -func CloneSortItem(items []property.SortItem) []property.SortItem { +// CloneSortItems uses SortItem.Clone to clone a slice of SortItem. +func CloneSortItems(items []property.SortItem) []property.SortItem { if items == nil { return nil } @@ -137,6 +238,18 @@ func CloneSortItem(items []property.SortItem) []property.SortItem { return cloned } +// CloneHandles uses Handle.Copy to clone a slice of Handle. +func CloneHandles(handles []kv.Handle) []kv.Handle { + if handles == nil { + return nil + } + cloned := make([]kv.Handle, 0, len(handles)) + for _, h := range handles { + cloned = append(cloned, h.Copy()) + } + return cloned +} + // QueryTimeRange represents a time range specified by TIME_RANGE hint type QueryTimeRange struct { From time.Time @@ -182,3 +295,57 @@ func GetMaxSortPrefix(sortCols, allCols []*expression.Column) []int { } return sortColOffsets } + +// DeriveLimitStats derives the stats of the top-n plan. +func DeriveLimitStats(childProfile *property.StatsInfo, limitCount float64) *property.StatsInfo { + stats := &property.StatsInfo{ + RowCount: math.Min(limitCount, childProfile.RowCount), + ColNDVs: make(map[int64]float64, len(childProfile.ColNDVs)), + } + for id, c := range childProfile.ColNDVs { + stats.ColNDVs[id] = math.Min(c, stats.RowCount) + } + return stats +} + +// ExtractTableAlias returns table alias of the base.LogicalPlan's columns. +// It will return nil when there are multiple table alias, because the alias is only used to check if +// the base.LogicalPlan Match some optimizer hints, and hints are not expected to take effect in this case. +func ExtractTableAlias(p base.Plan, parentOffset int) *h.HintedTable { + if len(p.OutputNames()) > 0 && p.OutputNames()[0].TblName.L != "" { + firstName := p.OutputNames()[0] + for _, name := range p.OutputNames() { + if name.TblName.L != firstName.TblName.L || + (name.DBName.L != "" && firstName.DBName.L != "" && + name.DBName.L != firstName.DBName.L) { // DBName can be nil, see #46160 + return nil + } + } + qbOffset := p.QueryBlockOffset() + var blockAsNames []ast.HintTable + if p := p.SCtx().GetSessionVars().PlannerSelectBlockAsName.Load(); p != nil { + blockAsNames = *p + } + // For sub-queries like `(select * from t) t1`, t1 should belong to its surrounding select block. + if qbOffset != parentOffset && blockAsNames != nil && blockAsNames[qbOffset].TableName.L != "" { + qbOffset = parentOffset + } + dbName := firstName.DBName + if dbName.L == "" { + dbName = model.NewCIStr(p.SCtx().GetSessionVars().CurrentDB) + } + return &h.HintedTable{DBName: dbName, TblName: firstName.TblName, SelectOffset: qbOffset} + } + return nil +} + +// GetPushDownCtx creates a PushDownContext from PlanContext +func GetPushDownCtx(pctx base.PlanContext) expression.PushDownContext { + return GetPushDownCtxFromBuildPBContext(pctx.GetBuildPBCtx()) +} + +// GetPushDownCtxFromBuildPBContext creates a PushDownContext from BuildPBContext +func GetPushDownCtxFromBuildPBContext(bctx *base.BuildPBContext) expression.PushDownContext { + return expression.NewPushDownContext(bctx.GetExprCtx().GetEvalCtx(), bctx.GetClient(), + bctx.InExplainStmt, bctx.WarnHandler, bctx.ExtraWarnghandler, bctx.GroupConcatMaxLen) +} diff --git a/pkg/planner/util/utilfuncp/BUILD.bazel b/pkg/planner/util/utilfuncp/BUILD.bazel index 070064ce1c056..af7acd39062a3 100644 --- a/pkg/planner/util/utilfuncp/BUILD.bazel +++ b/pkg/planner/util/utilfuncp/BUILD.bazel @@ -12,5 +12,6 @@ go_library( "//pkg/planner/property", "//pkg/planner/util", "//pkg/planner/util/optimizetrace", + "//pkg/util/execdetails", ], ) diff --git a/pkg/planner/util/utilfuncp/func_pointer_misc.go b/pkg/planner/util/utilfuncp/func_pointer_misc.go index 77149c26e7c25..c653e13eb7ea8 100644 --- a/pkg/planner/util/utilfuncp/func_pointer_misc.go +++ b/pkg/planner/util/utilfuncp/func_pointer_misc.go @@ -21,6 +21,7 @@ import ( "github.com/pingcap/tidb/pkg/planner/property" "github.com/pingcap/tidb/pkg/planner/util" "github.com/pingcap/tidb/pkg/planner/util/optimizetrace" + "github.com/pingcap/tidb/pkg/util/execdetails" ) // this file is used for passing function pointer at init(){} to avoid some import cycles. @@ -72,19 +73,9 @@ var FindBestTask func(p base.LogicalPlan, prop *property.PhysicalProperty, planC // todo: (7) arenatlx, remove this util func pointer when logical operators are all moved from core to logicalOp. var CanPushToCopImpl func(p base.LogicalPlan, storeTp kv.StoreType, considerDual bool) bool -// GetStreamAggs will be called by baseLogicalPlan in logicalOp pkg. The logic inside covers concrete physical -// operators. -// todo: (8) arenatlx, move this util func pointer to physicalOp when physical operators are all moved. -var GetStreamAggs func(lp base.LogicalPlan, prop *property.PhysicalProperty) []base.PhysicalPlan - -// GetHashAggs will be called by baseLogicalPlan in logicalOp pkg. The logic inside covers concrete physical -// operators. -// todo: (9) arenatlx, move this util func pointer to physicalOp when physical operators are all moved. -var GetHashAggs func(la base.LogicalPlan, prop *property.PhysicalProperty) []base.PhysicalPlan - // PruneByItems will be called by baseLogicalPlan in logicalOp pkg. The logic current exists for rule logic // inside core. -// todo: (10) arenatlx, when rule is moved out of core, we should direct ref the rule.Func instead of this +// todo: (8) arenatlx, when rule is moved out of core, we should direct ref the rule.Func instead of this // util func pointer. var PruneByItems func(p base.LogicalPlan, old []*util.ByItems, opt *optimizetrace.LogicalOptimizeOp) ( byItems []*util.ByItems, parentUsedCols []*expression.Column) @@ -92,3 +83,101 @@ var PruneByItems func(p base.LogicalPlan, old []*util.ByItems, opt *optimizetrac // ExhaustPhysicalPlans4LogicalMaxOneRow will be called by LogicalMaxOneRow in logicalOp pkg. var ExhaustPhysicalPlans4LogicalMaxOneRow func(p base.LogicalPlan, prop *property.PhysicalProperty) ( []base.PhysicalPlan, bool, error) + +// FindBestTask4LogicalCTETable will be called by LogicalCTETable in logicalOp pkg. +var FindBestTask4LogicalCTETable func(lp base.LogicalPlan, prop *property.PhysicalProperty, _ *base.PlanCounterTp, + _ *optimizetrace.PhysicalOptimizeOp) (t base.Task, cntPlan int64, err error) + +// FindBestTask4LogicalMemTable will be called by LogicalMemTable in logicalOp pkg. +var FindBestTask4LogicalMemTable func(lp base.LogicalPlan, prop *property.PhysicalProperty, + planCounter *base.PlanCounterTp, opt *optimizetrace.PhysicalOptimizeOp) (t base.Task, + cntPlan int64, err error) + +// FindBestTask4LogicalShow will be called by LogicalShow in logicalOp pkg. +var FindBestTask4LogicalShow func(lp base.LogicalPlan, prop *property.PhysicalProperty, planCounter *base.PlanCounterTp, + _ *optimizetrace.PhysicalOptimizeOp) (base.Task, int64, error) + +// FindBestTask4LogicalShowDDLJobs will be called by LogicalShowDDLJobs in logicalOp pkg. +var FindBestTask4LogicalShowDDLJobs func(lp base.LogicalPlan, prop *property.PhysicalProperty, + planCounter *base.PlanCounterTp, _ *optimizetrace.PhysicalOptimizeOp) (base.Task, int64, error) + +// ExhaustPhysicalPlans4LogicalSequence will be called by LogicalSequence in logicalOp pkg. +var ExhaustPhysicalPlans4LogicalSequence func(lp base.LogicalPlan, prop *property.PhysicalProperty) ( + []base.PhysicalPlan, bool, error) + +// FindBestTask4LogicalTableDual will be called by LogicalTableDual in logicalOp pkg. +var FindBestTask4LogicalTableDual func(lp base.LogicalPlan, prop *property.PhysicalProperty, + planCounter *base.PlanCounterTp, opt *optimizetrace.PhysicalOptimizeOp) (base.Task, int64, error) + +// ExhaustPhysicalPlans4LogicalSort will be called by LogicalSort in logicalOp pkg. +var ExhaustPhysicalPlans4LogicalSort func(lp base.LogicalPlan, prop *property.PhysicalProperty) ( + []base.PhysicalPlan, bool, error) + +// ExhaustPhysicalPlans4LogicalTopN will be called by LogicalTopN in logicalOp pkg. +var ExhaustPhysicalPlans4LogicalTopN func(lp base.LogicalPlan, prop *property.PhysicalProperty) ( + []base.PhysicalPlan, bool, error) + +// ExhaustPhysicalPlans4LogicalLimit will be called by LogicalLimit in logicalOp pkg. +var ExhaustPhysicalPlans4LogicalLimit func(lp base.LogicalPlan, prop *property.PhysicalProperty) ( + []base.PhysicalPlan, bool, error) + +// ExhaustPhysicalPlans4LogicalProjection will be called by LogicalLimit in logicalOp pkg. +var ExhaustPhysicalPlans4LogicalProjection func(lp base.LogicalPlan, + prop *property.PhysicalProperty) ([]base.PhysicalPlan, bool, error) + +// ExhaustPhysicalPlans4LogicalWindow will be called by LogicalWindow in logicalOp pkg. +var ExhaustPhysicalPlans4LogicalWindow func(lp base.LogicalPlan, prop *property.PhysicalProperty) ( + []base.PhysicalPlan, bool, error) + +// ExhaustPhysicalPlans4LogicalLock will be called by LogicalLock in logicalOp pkg. +var ExhaustPhysicalPlans4LogicalLock func(lp base.LogicalPlan, prop *property.PhysicalProperty) ( + []base.PhysicalPlan, bool, error) + +// ExhaustPhysicalPlans4LogicalUnionScan will be called by LogicalUnionScan in logicalOp pkg. +var ExhaustPhysicalPlans4LogicalUnionScan func(lp base.LogicalPlan, prop *property.PhysicalProperty) ( + []base.PhysicalPlan, bool, error) + +// ExhaustPhysicalPlans4LogicalSelection will be called by LogicalSelection in logicalOp pkg. +var ExhaustPhysicalPlans4LogicalSelection func(lp base.LogicalPlan, prop *property.PhysicalProperty) ( + []base.PhysicalPlan, bool, error) + +// ExhaustPhysicalPlans4LogicalJoin will be called by LogicalJoin in logicalOp pkg. +var ExhaustPhysicalPlans4LogicalJoin func(lp base.LogicalPlan, prop *property.PhysicalProperty) ( + []base.PhysicalPlan, bool, error) + +// ExhaustPhysicalPlans4LogicalAggregation will be called by LogicalAggregation in logicalOp pkg. +var ExhaustPhysicalPlans4LogicalAggregation func(lp base.LogicalPlan, prop *property.PhysicalProperty) ( + []base.PhysicalPlan, bool, error) + +// ExhaustPhysicalPlans4LogicalApply will be called by LogicalApply in logicalOp pkg. +var ExhaustPhysicalPlans4LogicalApply func(lp base.LogicalPlan, prop *property.PhysicalProperty) ( + []base.PhysicalPlan, bool, error) + +// ExhaustPhysicalPlans4LogicalPartitionUnionAll will be called by LogicalPartitionUnionAll in logicalOp pkg. +var ExhaustPhysicalPlans4LogicalPartitionUnionAll func(lp base.LogicalPlan, prop *property.PhysicalProperty) ( + []base.PhysicalPlan, bool, error) + +// ExhaustPhysicalPlans4LogicalUnionAll will be called by LogicalUnionAll in logicalOp pkg. +var ExhaustPhysicalPlans4LogicalUnionAll func(lp base.LogicalPlan, prop *property.PhysicalProperty) ( + []base.PhysicalPlan, bool, error) + +// ExhaustPhysicalPlans4LogicalExpand will be called by LogicalExpand in logicalOp pkg. +var ExhaustPhysicalPlans4LogicalExpand func(lp base.LogicalPlan, prop *property.PhysicalProperty) ( + []base.PhysicalPlan, bool, error) + +// *************************************** physical op related ******************************************* + +// GetEstimatedProbeCntFromProbeParents will be called by BasePhysicalPlan in physicalOp pkg. +var GetEstimatedProbeCntFromProbeParents func(probeParents []base.PhysicalPlan) float64 + +// GetActualProbeCntFromProbeParents will be called by BasePhysicalPlan in physicalOp pkg. +var GetActualProbeCntFromProbeParents func(pps []base.PhysicalPlan, statsColl *execdetails.RuntimeStatsColl) int64 + +// ****************************************** task related *********************************************** + +// AttachPlan2Task will be called by BasePhysicalPlan in physicalOp pkg. +var AttachPlan2Task func(p base.PhysicalPlan, t base.Task) base.Task + +// WindowIsTopN is used in DeriveTopNFromWindow rule. +// todo: @arenatlx: remove it after logical_datasource is migrated to logicalop. +var WindowIsTopN func(p base.LogicalPlan) (bool, uint64) diff --git a/pkg/plugin/integration_test.go b/pkg/plugin/integration_test.go index 9e9447a1a1fdf..0fea7eab37600 100644 --- a/pkg/plugin/integration_test.go +++ b/pkg/plugin/integration_test.go @@ -39,7 +39,6 @@ func TestAuditLogNormal(t *testing.T) { conn := server.CreateMockConn(t, sv) defer conn.Close() session.DisableStats4Test() - session.SetSchemaLease(0) type normalTest struct { sql string diff --git a/pkg/privilege/privileges/cache_test.go b/pkg/privilege/privileges/cache_test.go index 8af63cb523d66..f835a8dd0b874 100644 --- a/pkg/privilege/privileges/cache_test.go +++ b/pkg/privilege/privileges/cache_test.go @@ -366,83 +366,6 @@ func TestFindAllUserEffectiveRoles(t *testing.T) { require.Equal(t, "r_3", ret[1].Username) } -func TestAbnormalMySQLTable(t *testing.T) { - store := createStoreAndPrepareDB(t) - - tk := testkit.NewTestKit(t, store) - - // Simulate the case mysql.user is synchronized from MySQL. - tk.MustExec("DROP TABLE mysql.user;") - tk.MustExec("USE mysql;") - tk.MustExec(`CREATE TABLE user ( - Host char(60) COLLATE utf8_bin NOT NULL DEFAULT '', - User char(16) COLLATE utf8_bin NOT NULL DEFAULT '', - Password char(41) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '', - Select_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Insert_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Update_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Delete_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Create_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Drop_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Reload_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Shutdown_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Process_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - File_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Config_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Grant_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - References_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Index_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Alter_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Show_db_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Super_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Create_tmp_table_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Lock_tables_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Execute_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Repl_slave_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Repl_client_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Create_view_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Show_view_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Create_routine_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Alter_routine_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Create_user_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Event_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Trigger_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Create_tablespace_priv enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - Create_role_priv ENUM('N','Y') NOT NULL DEFAULT 'N', - Drop_role_priv ENUM('N','Y') NOT NULL DEFAULT 'N', - Account_locked ENUM('N','Y') NOT NULL DEFAULT 'N', - ssl_type enum('','ANY','X509','SPECIFIED') CHARACTER SET utf8 NOT NULL DEFAULT '', - ssl_cipher blob NOT NULL, - x509_issuer blob NOT NULL, - x509_subject blob NOT NULL, - max_questions int(11) unsigned NOT NULL DEFAULT '0', - max_updates int(11) unsigned NOT NULL DEFAULT '0', - max_connections int(11) unsigned NOT NULL DEFAULT '0', - max_user_connections int(11) unsigned NOT NULL DEFAULT '0', - plugin char(64) COLLATE utf8_bin DEFAULT 'mysql_native_password', - authentication_string text COLLATE utf8_bin, - token_issuer varchar(255), - user_attributes json, - password_expired ENUM('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N', - password_last_changed TIMESTAMP DEFAULT CURRENT_TIMESTAMP(), - password_lifetime SMALLINT UNSIGNED, - PRIMARY KEY (Host,User) -) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Users and global privileges';`) - tk.MustExec(`INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'mysql_native_password','', '', 'null', 'N', current_timestamp(), null); -`) - var p privileges.MySQLPrivilege - require.NoError(t, p.LoadUserTable(tk.Session())) - activeRoles := make([]*auth.RoleIdentity, 0) - // MySQL mysql.user table schema is not identical to TiDB, check it doesn't break privilege. - require.True(t, p.RequestVerification(activeRoles, "root", "localhost", "test", "", "", mysql.SelectPriv)) - - // Absent of those tables doesn't cause error. - tk.MustExec("DROP TABLE mysql.db;") - tk.MustExec("DROP TABLE mysql.tables_priv;") - tk.MustExec("DROP TABLE mysql.columns_priv;") - require.NoError(t, p.LoadAll(tk.Session())) -} - func TestSortUserTable(t *testing.T) { var p privileges.MySQLPrivilege p.User = []privileges.UserRecord{ diff --git a/pkg/privilege/privileges/main_test.go b/pkg/privilege/privileges/main_test.go index 6ea379c912a3f..24c59de635058 100644 --- a/pkg/privilege/privileges/main_test.go +++ b/pkg/privilege/privileges/main_test.go @@ -35,7 +35,6 @@ func TestMain(m *testing.M) { } testsetup.SetupForCommonTest() - session.SetSchemaLease(0) session.DisableStats4Test() goleak.VerifyTestMain(m, opts...) diff --git a/pkg/server/BUILD.bazel b/pkg/server/BUILD.bazel index 62311486be93f..2b1a8a80470f5 100644 --- a/pkg/server/BUILD.bazel +++ b/pkg/server/BUILD.bazel @@ -71,6 +71,8 @@ go_library( "//pkg/sessionctx/variable", "//pkg/sessiontxn", "//pkg/statistics/handle", + "//pkg/statistics/handle/initstats", + "//pkg/statistics/handle/util", "//pkg/store", "//pkg/store/driver/error", "//pkg/store/helper", diff --git a/pkg/server/conn.go b/pkg/server/conn.go index 1c8c8236c75e2..39e0e56b112c0 100644 --- a/pkg/server/conn.go +++ b/pkg/server/conn.go @@ -1126,17 +1126,22 @@ func (cc *clientConn) Run(ctx context.Context) { return } - // Should check InTxn() to avoid execute `begin` stmt. + // It should be CAS before checking the `inShutdownMode` to avoid the following scenario: + // 1. The connection checks the `inShutdownMode` and it's false. + // 2. The server sets the `inShutdownMode` to true. The `DrainClients` process ignores this connection + // because the connection is in the `connStatusReading` status. + // 3. The connection changes its status to `connStatusDispatching` and starts to execute the command. + if !cc.CompareAndSwapStatus(connStatusReading, connStatusDispatching) { + return + } + + // Should check InTxn() to avoid execute `begin` stmt and allow executing statements in the not committed txn. if cc.server.inShutdownMode.Load() { if !cc.ctx.GetSessionVars().InTxn() { return } } - if !cc.CompareAndSwapStatus(connStatusReading, connStatusDispatching) { - return - } - startTime := time.Now() err = cc.dispatch(ctx, data) cc.ctx.GetSessionVars().ClearAlloc(&cc.chunkAlloc, err != nil) @@ -1265,6 +1270,10 @@ func (cc *clientConn) addMetrics(cmd byte, startTime time.Time, err error) { for _, dbName := range session.GetDBNames(vars) { metrics.QueryDurationHistogram.WithLabelValues(sqlType, dbName, vars.StmtCtx.ResourceGroupName).Observe(cost.Seconds()) + metrics.QueryRPCHistogram.WithLabelValues(sqlType, dbName).Observe(float64(vars.StmtCtx.GetExecDetails().RequestCount)) + if vars.StmtCtx.GetExecDetails().ScanDetail != nil { + metrics.QueryProcessedKeyHistogram.WithLabelValues(sqlType, dbName).Observe(float64(vars.StmtCtx.GetExecDetails().ScanDetail.ProcessedKeys)) + } } } diff --git a/pkg/server/conn_test.go b/pkg/server/conn_test.go index d76835ba94e02..dfa5c28926180 100644 --- a/pkg/server/conn_test.go +++ b/pkg/server/conn_test.go @@ -784,22 +784,39 @@ func TestShutDown(t *testing.T) { cc = &clientConn{server: srv} cc.SetCtx(tc) - // test in txn - srv.clients[dom.NextConnID()] = cc - cc.getCtx().GetSessionVars().SetInTxn(true) - - waitTime := 100 * time.Millisecond - begin := time.Now() - srv.DrainClients(waitTime, waitTime) - require.Greater(t, time.Since(begin), waitTime) - - // test not in txn - srv.clients[dom.NextConnID()] = cc - cc.getCtx().GetSessionVars().SetInTxn(false) - - begin = time.Now() - srv.DrainClients(waitTime, waitTime) - require.Less(t, time.Since(begin), waitTime) + waitMap := [][]bool{ + // Reading, Not Reading + {false, true}, // Not InTxn + {true, true}, // InTxn + } + for idx, waitMap := range waitMap { + inTxn := idx > 0 + for idx, shouldWait := range waitMap { + reading := idx == 0 + if inTxn { + cc.getCtx().GetSessionVars().SetInTxn(true) + } else { + cc.getCtx().GetSessionVars().SetInTxn(false) + } + if reading { + cc.CompareAndSwapStatus(cc.getStatus(), connStatusReading) + } else { + cc.CompareAndSwapStatus(cc.getStatus(), connStatusDispatching) + } + + srv.clients[dom.NextConnID()] = cc + + waitTime := 100 * time.Millisecond + begin := time.Now() + srv.DrainClients(waitTime, waitTime) + + if shouldWait { + require.Greater(t, time.Since(begin), waitTime) + } else { + require.Less(t, time.Since(begin), waitTime) + } + } + } } type snapshotCache interface { diff --git a/pkg/server/handler/extractorhandler/BUILD.bazel b/pkg/server/handler/extractorhandler/BUILD.bazel index 73013b1a37011..199cbe9828e69 100644 --- a/pkg/server/handler/extractorhandler/BUILD.bazel +++ b/pkg/server/handler/extractorhandler/BUILD.bazel @@ -28,6 +28,7 @@ go_test( ":extractorhandler", "//pkg/config", "//pkg/domain", + "//pkg/kv", "//pkg/metrics", "//pkg/server", "//pkg/server/internal/testserverclient", @@ -36,12 +37,12 @@ go_test( "//pkg/session", "//pkg/store/mockstore/unistore", "//pkg/testkit", + "//pkg/testkit/testfailpoint", "//pkg/testkit/testsetup", "//pkg/types", "//pkg/util/stmtsummary/v2:stmtsummary", "//pkg/util/topsql/state", "@com_github_gorilla_mux//:mux", - "@com_github_pingcap_failpoint//:failpoint", "@com_github_stretchr_testify//require", "@com_github_tikv_client_go_v2//tikv", "@org_uber_go_goleak//:goleak", diff --git a/pkg/server/handler/extractorhandler/extract_test.go b/pkg/server/handler/extractorhandler/extract_test.go index 4951b8cc0301f..aac23010342b6 100644 --- a/pkg/server/handler/extractorhandler/extract_test.go +++ b/pkg/server/handler/extractorhandler/extract_test.go @@ -24,9 +24,9 @@ import ( "time" "github.com/gorilla/mux" - "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/config" "github.com/pingcap/tidb/pkg/domain" + "github.com/pingcap/tidb/pkg/kv" server2 "github.com/pingcap/tidb/pkg/server" "github.com/pingcap/tidb/pkg/server/handler/extractorhandler" "github.com/pingcap/tidb/pkg/server/internal/testserverclient" @@ -34,6 +34,7 @@ import ( "github.com/pingcap/tidb/pkg/server/internal/util" "github.com/pingcap/tidb/pkg/session" "github.com/pingcap/tidb/pkg/testkit" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/types" stmtsummaryv2 "github.com/pingcap/tidb/pkg/util/stmtsummary/v2" "github.com/stretchr/testify/require" @@ -44,7 +45,23 @@ func TestExtractHandler(t *testing.T) { defer closeStmtSummary() store := testkit.CreateMockStore(t) + testExtractHandler(t, store) +} + +func TestExtractHandlerInfoSchemaV2(t *testing.T) { + setupStmtSummary() + defer closeStmtSummary() + + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec("set @@global.tidb_schema_cache_size = 600*1024*1024") + testfailpoint.Enable(t, "github.com/pingcap/tidb/pkg/infoschema/skipGet", `return()`) + testExtractHandler(t, store) +} + +func testExtractHandler(t *testing.T, store kv.Storage) { + server2.RunInGoTestChan = make(chan struct{}) driver := server2.NewTiDBDriver(store) client := testserverclient.NewTestServerClient() cfg := util.NewTestConfig() @@ -59,11 +76,14 @@ func TestExtractHandler(t *testing.T) { dom, err := session.GetDomain(store) require.NoError(t, err) server.SetDomain(dom) + tk := testkit.NewTestKit(t, store) + tk.MustExec("set @@global.tidb_schema_cache_size = 600*1024*1024") go func() { err := server.Run(nil) require.NoError(t, err) }() <-server2.RunInGoTestChan + client.Port = testutil.GetPortFromTCPAddr(server.ListenAddr()) client.StatusPort = testutil.GetPortFromTCPAddr(server.StatusListenerAddr()) client.WaitUntilServerOnline() @@ -75,10 +95,7 @@ func TestExtractHandler(t *testing.T) { eh := &extractorhandler.ExtractTaskServeHandler{ExtractHandler: dom.GetExtractHandle()} router := mux.NewRouter() router.Handle("/extract_task/dump", eh) - require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/server/extractTaskServeHandler", `return(true)`)) - defer func() { - require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/server/extractTaskServeHandler")) - }() + testfailpoint.Enable(t, "github.com/pingcap/tidb/pkg/server/extractTaskServeHandler", `return(true)`) resp0, err := client.FetchStatus(fmt.Sprintf("/extract_task/dump?type=plan&begin=%s&end=%s", url.QueryEscape(startTime.Format(types.TimeFormat)), url.QueryEscape(endTime.Format(types.TimeFormat)))) defer os.RemoveAll(domain.GetExtractTaskDirName()) diff --git a/pkg/server/handler/extractorhandler/main_test.go b/pkg/server/handler/extractorhandler/main_test.go index a9a19564bcfd9..7a64e8f2fc0ea 100644 --- a/pkg/server/handler/extractorhandler/main_test.go +++ b/pkg/server/handler/extractorhandler/main_test.go @@ -23,7 +23,6 @@ import ( "github.com/pingcap/tidb/pkg/config" "github.com/pingcap/tidb/pkg/metrics" "github.com/pingcap/tidb/pkg/server" - "github.com/pingcap/tidb/pkg/session" "github.com/pingcap/tidb/pkg/store/mockstore/unistore" "github.com/pingcap/tidb/pkg/testkit/testsetup" topsqlstate "github.com/pingcap/tidb/pkg/util/topsql/state" @@ -38,10 +37,6 @@ func TestMain(m *testing.M) { topsqlstate.EnableTopSQL() unistore.CheckResourceTagForTopSQLInGoTest = true - // AsyncCommit will make DDL wait 2.5s before changing to the next state. - // Set schema lease to avoid it from making CI slow. - session.SetSchemaLease(0) - tikv.EnableFailpoints() metrics.RegisterMetrics() diff --git a/pkg/server/handler/optimizor/main_test.go b/pkg/server/handler/optimizor/main_test.go index 75598c3c3802a..b3220444e2d90 100644 --- a/pkg/server/handler/optimizor/main_test.go +++ b/pkg/server/handler/optimizor/main_test.go @@ -23,7 +23,6 @@ import ( "github.com/pingcap/tidb/pkg/config" "github.com/pingcap/tidb/pkg/metrics" "github.com/pingcap/tidb/pkg/server" - "github.com/pingcap/tidb/pkg/session" "github.com/pingcap/tidb/pkg/store/mockstore/unistore" "github.com/pingcap/tidb/pkg/testkit/testsetup" topsqlstate "github.com/pingcap/tidb/pkg/util/topsql/state" @@ -38,10 +37,6 @@ func TestMain(m *testing.M) { topsqlstate.EnableTopSQL() unistore.CheckResourceTagForTopSQLInGoTest = true - // AsyncCommit will make DDL wait 2.5s before changing to the next state. - // Set schema lease to avoid it from making CI slow. - session.SetSchemaLease(0) - tikv.EnableFailpoints() metrics.RegisterMetrics() diff --git a/pkg/server/handler/tests/main_test.go b/pkg/server/handler/tests/main_test.go index 1ee8ef712db61..f35bdc9779f8e 100644 --- a/pkg/server/handler/tests/main_test.go +++ b/pkg/server/handler/tests/main_test.go @@ -23,7 +23,6 @@ import ( "github.com/pingcap/tidb/pkg/config" "github.com/pingcap/tidb/pkg/metrics" "github.com/pingcap/tidb/pkg/server" - "github.com/pingcap/tidb/pkg/session" "github.com/pingcap/tidb/pkg/store/mockstore/unistore" "github.com/pingcap/tidb/pkg/testkit/testsetup" topsqlstate "github.com/pingcap/tidb/pkg/util/topsql/state" @@ -38,10 +37,6 @@ func TestMain(m *testing.M) { topsqlstate.EnableTopSQL() unistore.CheckResourceTagForTopSQLInGoTest = true - // AsyncCommit will make DDL wait 2.5s before changing to the next state. - // Set schema lease to avoid it from making CI slow. - session.SetSchemaLease(0) - tikv.EnableFailpoints() metrics.RegisterMetrics() diff --git a/pkg/server/handler/tikvhandler/BUILD.bazel b/pkg/server/handler/tikvhandler/BUILD.bazel index 824f6a4053f4e..3f9673d987950 100644 --- a/pkg/server/handler/tikvhandler/BUILD.bazel +++ b/pkg/server/handler/tikvhandler/BUILD.bazel @@ -37,6 +37,7 @@ go_library( "//pkg/util/sqlexec", "@com_github_gorilla_mux//:mux", "@com_github_pingcap_errors//:errors", + "@com_github_pingcap_failpoint//:failpoint", "@com_github_pingcap_log//:log", "@com_github_tikv_client_go_v2//tikv", "@com_github_tikv_pd_client//http", diff --git a/pkg/server/handler/tikvhandler/tikv_handler.go b/pkg/server/handler/tikvhandler/tikv_handler.go index df8644bce925b..5ed22f113cc27 100644 --- a/pkg/server/handler/tikvhandler/tikv_handler.go +++ b/pkg/server/handler/tikvhandler/tikv_handler.go @@ -32,6 +32,7 @@ import ( "github.com/gorilla/mux" "github.com/pingcap/errors" + "github.com/pingcap/failpoint" "github.com/pingcap/log" "github.com/pingcap/tidb/pkg/config" "github.com/pingcap/tidb/pkg/ddl" @@ -196,14 +197,7 @@ func NewProfileHandler(tool *handler.TikvHandlerTool) *ProfileHandler { // DDLHookHandler is the handler for use pre-defined ddl callback. // It's convenient to provide some APIs for integration tests. -type DDLHookHandler struct { - store kv.Storage -} - -// NewDDLHookHandler creates a new DDLHookHandler. -func NewDDLHookHandler(store kv.Storage) *DDLHookHandler { - return &DDLHookHandler{store} -} +type DDLHookHandler struct{} // ValueHandler is the handler for get value. type ValueHandler struct { @@ -717,7 +711,7 @@ func (h FlashReplicaHandler) getDropOrTruncateTableTiflash(currentSchema infosch uniqueIDMap := make(map[int64]struct{}) handleJobAndTableInfo := func(_ *model.Job, tblInfo *model.TableInfo) (bool, error) { // Avoid duplicate table ID info. - if _, ok := currentSchema.TableByID(tblInfo.ID); ok { + if _, ok := currentSchema.TableByID(context.Background(), tblInfo.ID); ok { return false, nil } if _, ok := uniqueIDMap[tblInfo.ID]; ok { @@ -1073,7 +1067,7 @@ func getTableByIDStr(schema infoschema.InfoSchema, tableID string) (*model.Table if tid < 0 { return nil, infoschema.ErrTableNotExists.GenWithStack("Table which ID = %s does not exist.", tableID) } - if data, ok := schema.TableByID(int64(tid)); ok { + if data, ok := schema.TableByID(context.Background(), int64(tid)); ok { return data.Meta(), nil } // The tid maybe a partition ID of the partition-table. @@ -1484,12 +1478,12 @@ func (h RegionHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { return } ctx := context.Background() - hotRead, err := h.ScrapeHotInfo(ctx, helper.HotRead, schema.AllSchemas()) + hotRead, err := h.ScrapeHotInfo(ctx, helper.HotRead, schema, nil) if err != nil { handler.WriteError(w, err) return } - hotWrite, err := h.ScrapeHotInfo(ctx, helper.HotWrite, schema.AllSchemas()) + hotWrite, err := h.ScrapeHotInfo(ctx, helper.HotWrite, schema, nil) if err != nil { handler.WriteError(w, err) return @@ -1866,7 +1860,7 @@ func (h DBTableHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { dbTblInfo := DBTableInfo{ SchemaVersion: schema.SchemaMetaVersion(), } - tbl, ok := schema.TableByID(int64(physicalID)) + tbl, ok := schema.TableByID(context.Background(), int64(physicalID)) if ok { dbTblInfo.TableInfo = tbl.Meta() dbInfo, ok := infoschema.SchemaByTable(schema, dbTblInfo.TableInfo) @@ -1996,26 +1990,35 @@ func (h *TestHandler) handleGCResolveLocks(w http.ResponseWriter, req *http.Requ } // ServeHTTP handles request of resigning ddl owner. -func (h DDLHookHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { +func (DDLHookHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { if req.Method != http.MethodPost { handler.WriteError(w, errors.Errorf("This api only support POST method")) return } - dom, err := session.GetDomain(h.store) - if err != nil { - log.Error("failed to get session domain", zap.Error(err)) - handler.WriteError(w, err) - } - - newCallbackFunc, err := ddl.GetCustomizedHook(req.FormValue("ddl_hook")) - if err != nil { - log.Error("failed to get customized hook", zap.Error(err)) - handler.WriteError(w, err) + hook := req.FormValue("ddl_hook") + switch hook { + case "ctc_hook": + err := failpoint.EnableCall("github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { + log.Info("on job run before", zap.String("job", job.String())) + // Only block the ctc type ddl here. + if job.Type != model.ActionModifyColumn { + return + } + switch job.SchemaState { + case model.StateDeleteOnly, model.StateWriteOnly, model.StateWriteReorganization: + log.Warn(fmt.Sprintf("[DDL_HOOK] Hang for 0.5 seconds on %s state triggered", job.SchemaState.String())) + time.Sleep(500 * time.Millisecond) + } + }) + if err != nil { + handler.WriteError(w, err) + return + } + case "default_hook": + _ = failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/onJobRunBefore") } - callback := newCallbackFunc(dom) - dom.DDL().SetHook(callback) handler.WriteData(w, "success!") ctx := req.Context() diff --git a/pkg/server/http_status.go b/pkg/server/http_status.go index 86bad5964c10a..92acc5538d9f8 100644 --- a/pkg/server/http_status.go +++ b/pkg/server/http_status.go @@ -50,6 +50,7 @@ import ( "github.com/pingcap/tidb/pkg/server/handler/ttlhandler" util2 "github.com/pingcap/tidb/pkg/server/internal/util" "github.com/pingcap/tidb/pkg/session" + "github.com/pingcap/tidb/pkg/statistics/handle/initstats" "github.com/pingcap/tidb/pkg/store" "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/cpuprofile" @@ -336,7 +337,7 @@ func (s *Server) startHTTPServer() { }) router.HandleFunc("/debug/zip", func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Content-Disposition", fmt.Sprintf(`attachment; filename="tidb_debug"`+time.Now().Format("20060102150405")+".zip")) + w.Header().Set("Content-Disposition", `attachment; filename="tidb_debug"`+time.Now().Format("20060102150405")+".zip") // dump goroutine/heap/mutex items := []struct { @@ -430,7 +431,7 @@ func (s *Server) startHTTPServer() { }) // ddlHook is enabled only for tests so we can substitute the callback in the DDL. - router.Handle("/test/ddl/hook", tikvhandler.NewDDLHookHandler(tikvHandlerTool.Store.(kv.Storage))) + router.Handle("/test/ddl/hook", tikvhandler.DDLHookHandler{}) // ttlJobTriggerHandler is enabled only for tests, so we can accelerate the schedule of TTL job router.Handle("/test/ttl/trigger/{db}/{table}", ttlhandler.NewTTLJobTriggerHandler(tikvHandlerTool.Store.(kv.Storage))) @@ -557,9 +558,15 @@ func (s *Server) SetCNChecker(tlsConfig *tls.Config) *tls.Config { // Status of TiDB. type Status struct { - Connections int `json:"connections"` - Version string `json:"version"` - GitHash string `json:"git_hash"` + Connections int `json:"connections"` + Version string `json:"version"` + GitHash string `json:"git_hash"` + Status DetailStatus `json:"status"` +} + +// DetailStatus is to show the detail status of TiDB. for example the init stats percentage. +type DetailStatus struct { + InitStatsPercentage float64 `json:"init_stats_percentage"` } func (s *Server) handleStatus(w http.ResponseWriter, _ *http.Request) { @@ -571,10 +578,14 @@ func (s *Server) handleStatus(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(http.StatusInternalServerError) return } + initStatsPercentage := min(100, initstats.InitStatsPercentage.Load()) st := Status{ Connections: s.ConnectionCount(), Version: mysql.ServerVersion, GitHash: versioninfo.TiDBGitHash, + Status: DetailStatus{ + InitStatsPercentage: initStatsPercentage, + }, } js, err := json.Marshal(st) if err != nil { diff --git a/pkg/server/internal/testserverclient/BUILD.bazel b/pkg/server/internal/testserverclient/BUILD.bazel index c370ec0dd39f9..b2b72a651c465 100644 --- a/pkg/server/internal/testserverclient/BUILD.bazel +++ b/pkg/server/internal/testserverclient/BUILD.bazel @@ -6,8 +6,6 @@ go_library( importpath = "github.com/pingcap/tidb/pkg/server/internal/testserverclient", visibility = ["//pkg/server:__subpackages__"], deps = [ - "//pkg/ddl/util/callback", - "//pkg/domain", "//pkg/errno", "//pkg/kv", "//pkg/metrics", @@ -17,6 +15,7 @@ go_library( "//pkg/sessionctx/sessionstates", "//pkg/testkit", "//pkg/testkit/testenv", + "//pkg/testkit/testfailpoint", "//pkg/util", "//pkg/util/versioninfo", "@com_github_go_sql_driver_mysql//:mysql", diff --git a/pkg/server/internal/testserverclient/server_client.go b/pkg/server/internal/testserverclient/server_client.go index b8813f034903c..2e79094f12fdf 100644 --- a/pkg/server/internal/testserverclient/server_client.go +++ b/pkg/server/internal/testserverclient/server_client.go @@ -39,8 +39,6 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/log" - "github.com/pingcap/tidb/pkg/ddl/util/callback" - "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/errno" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/metrics" @@ -50,6 +48,7 @@ import ( "github.com/pingcap/tidb/pkg/sessionctx/sessionstates" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/testkit/testenv" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/versioninfo" dto "github.com/prometheus/client_model/go" @@ -2930,7 +2929,7 @@ type expectQuery struct { rows []string } -func (cli *TestServerClient) RunTestIssue53634(t *testing.T, dom *domain.Domain) { +func (cli *TestServerClient) RunTestIssue53634(t *testing.T) { cli.RunTests(t, func(config *mysql.Config) { config.MaxAllowedPacket = 1024 }, func(dbt *testkit.DBTestKit) { @@ -2962,11 +2961,11 @@ func (cli *TestServerClient) RunTestIssue53634(t *testing.T, dom *domain.Domain) sqls[4] = sqlWithErr{nil, "commit"} dropColumnSQL := "alter table stock drop column cct_1" query := &expectQuery{sql: "select * from stock;", rows: []string{"1 a 101 x \n2 b 102 z "}} - runTestInSchemaState(t, conn, cli, dom, model.StateWriteReorganization, true, dropColumnSQL, sqls, query) + runTestInSchemaState(t, conn, cli, model.StateWriteReorganization, true, dropColumnSQL, sqls, query) }) } -func (cli *TestServerClient) RunTestIssue54254(t *testing.T, dom *domain.Domain) { +func (cli *TestServerClient) RunTestIssue54254(t *testing.T) { cli.RunTests(t, func(config *mysql.Config) { config.MaxAllowedPacket = 1024 }, func(dbt *testkit.DBTestKit) { @@ -2995,7 +2994,7 @@ func (cli *TestServerClient) RunTestIssue54254(t *testing.T, dom *domain.Domain) sqls[4] = sqlWithErr{nil, "commit"} addColumnSQL := "alter table stock add column cct_1 int" query := &expectQuery{sql: "select * from stock;", rows: []string{"1 a 101 x \n2 b 102 z "}} - runTestInSchemaState(t, conn, cli, dom, model.StateWriteReorganization, true, addColumnSQL, sqls, query) + runTestInSchemaState(t, conn, cli, model.StateWriteReorganization, true, addColumnSQL, sqls, query) }) } @@ -3003,7 +3002,6 @@ func runTestInSchemaState( t *testing.T, conn *sql.Conn, cli *TestServerClient, - dom *domain.Domain, state model.SchemaState, isOnJobUpdated bool, dropColumnSQL string, @@ -3013,7 +3011,6 @@ func runTestInSchemaState( ctx := context.Background() MustExec(ctx, t, conn, "use test_db_state") - callback := &callback.TestDDLCallback{Do: dom} prevState := model.StateNone var checkErr error dbt := cli.getNewDB(t, func(config *mysql.Config) { @@ -3078,13 +3075,12 @@ func runTestInSchemaState( } } if isOnJobUpdated { - callback.OnJobUpdatedExported.Store(&cbFunc1) + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", cbFunc1) + defer testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated") } else { - callback.OnJobRunBeforeExported = cbFunc1 + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", cbFunc1) + defer testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore") } - d := dom.DDL() - originalCallback := d.GetHook() - d.SetHook(callback) MustExec(ctx, t, conn, dropColumnSQL) require.NoError(t, checkErr) @@ -3099,7 +3095,6 @@ func runTestInSchemaState( cli.CheckRows(t, rs, expectQuery.rows[0]) } } - d.SetHook(originalCallback) } func jobStateOrLastSubJobState(job *model.Job) model.SchemaState { diff --git a/pkg/server/main_test.go b/pkg/server/main_test.go index 806182bc61e8f..0d74b129a28cc 100644 --- a/pkg/server/main_test.go +++ b/pkg/server/main_test.go @@ -22,7 +22,6 @@ import ( "github.com/pingcap/tidb/pkg/config" "github.com/pingcap/tidb/pkg/metrics" - "github.com/pingcap/tidb/pkg/session" "github.com/pingcap/tidb/pkg/store/mockstore/unistore" "github.com/pingcap/tidb/pkg/testkit/testdata" "github.com/pingcap/tidb/pkg/testkit/testmain" @@ -43,10 +42,6 @@ func TestMain(m *testing.M) { topsqlstate.EnableTopSQL() unistore.CheckResourceTagForTopSQLInGoTest = true - // AsyncCommit will make DDL wait 2.5s before changing to the next state. - // Set schema lease to avoid it from making CI slow. - session.SetSchemaLease(0) - tikv.EnableFailpoints() metrics.RegisterMetrics() diff --git a/pkg/server/server.go b/pkg/server/server.go index b67e006b142a4..d745b0dcd93a9 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -69,6 +69,7 @@ import ( "github.com/pingcap/tidb/pkg/session" "github.com/pingcap/tidb/pkg/session/txninfo" "github.com/pingcap/tidb/pkg/sessionctx/variable" + statsutil "github.com/pingcap/tidb/pkg/statistics/handle/util" "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/fastrand" "github.com/pingcap/tidb/pkg/util/logutil" @@ -892,8 +893,9 @@ func (s *Server) GetConAttrs(user *auth.UserIdentity) map[uint64]map[string]stri } // Kill implements the SessionManager interface. -func (s *Server) Kill(connectionID uint64, query bool, maxExecutionTime bool) { - logutil.BgLogger().Info("kill", zap.Uint64("conn", connectionID), zap.Bool("query", query)) +func (s *Server) Kill(connectionID uint64, query bool, maxExecutionTime bool, runaway bool) { + logutil.BgLogger().Info("kill", zap.Uint64("conn", connectionID), + zap.Bool("query", query), zap.Bool("maxExecutionTime", maxExecutionTime), zap.Bool("runawayExceed", runaway)) metrics.ServerEventCounter.WithLabelValues(metrics.EventKill).Inc() s.rwlock.RLock() @@ -916,7 +918,7 @@ func (s *Server) Kill(connectionID uint64, query bool, maxExecutionTime bool) { } } } - killQuery(conn, maxExecutionTime) + killQuery(conn, maxExecutionTime, runaway) } // UpdateTLSConfig implements the SessionManager interface. @@ -929,9 +931,11 @@ func (s *Server) GetTLSConfig() *tls.Config { return (*tls.Config)(atomic.LoadPointer(&s.tlsConfig)) } -func killQuery(conn *clientConn, maxExecutionTime bool) { +func killQuery(conn *clientConn, maxExecutionTime, runaway bool) { sessVars := conn.ctx.GetSessionVars() - if maxExecutionTime { + if runaway { + sessVars.SQLKiller.SendKillSignal(sqlkiller.RunawayQueryExceeded) + } else if maxExecutionTime { sessVars.SQLKiller.SendKillSignal(sqlkiller.MaxExecTimeExceeded) } else { sessVars.SQLKiller.SendKillSignal(sqlkiller.QueryInterrupted) @@ -974,7 +978,7 @@ func (s *Server) KillAllConnections() { if err := conn.closeWithoutLock(); err != nil { terror.Log(err) } - killQuery(conn, false) + killQuery(conn, false, false) } s.KillSysProcesses() @@ -1000,7 +1004,8 @@ func (s *Server) DrainClients(drainWait time.Duration, cancelWait time.Duration) go func() { defer close(allDone) for _, conn := range conns { - if !conn.getCtx().GetSessionVars().InTxn() { + // Wait for the connections with explicit transaction or an executing auto-commit query. + if conn.getStatus() == connStatusReading && !conn.getCtx().GetSessionVars().InTxn() { continue } select { @@ -1032,11 +1037,6 @@ func (s *Server) ServerID() uint64 { return s.dom.ServerID() } -// GetAutoAnalyzeProcID implements SessionManager interface. -func (s *Server) GetAutoAnalyzeProcID() uint64 { - return s.dom.GetAutoAnalyzeProcID() -} - // StoreInternalSession implements SessionManager interface. // @param addr The address of a session.session struct variable func (s *Server) StoreInternalSession(se any) { @@ -1058,10 +1058,9 @@ func (s *Server) GetInternalSessionStartTSList() []uint64 { s.sessionMapMutex.Lock() defer s.sessionMapMutex.Unlock() tsList := make([]uint64, 0, len(s.internalSessions)) - analyzeProcID := s.GetAutoAnalyzeProcID() for se := range s.internalSessions { if ts, processInfoID := session.GetStartTSFromSession(se); ts != 0 { - if processInfoID == analyzeProcID { + if statsutil.GlobalAutoAnalyzeProcessList.Contains(processInfoID) { continue } tsList = append(tsList, ts) @@ -1134,6 +1133,6 @@ func (s *Server) KillNonFlashbackClusterConn() { } s.rwlock.RUnlock() for _, id := range connIDs { - s.Kill(id, false, false) + s.Kill(id, false, false, false) } } diff --git a/pkg/server/tests/BUILD.bazel b/pkg/server/tests/BUILD.bazel index 6d13fe4c50bd8..aa6fad2e49a32 100644 --- a/pkg/server/tests/BUILD.bazel +++ b/pkg/server/tests/BUILD.bazel @@ -16,7 +16,6 @@ go_test( "//pkg/server", "//pkg/server/internal/util", "//pkg/server/tests/servertestkit", - "//pkg/session", "//pkg/store/mockstore/unistore", "//pkg/testkit", "//pkg/testkit/testsetup", diff --git a/pkg/server/tests/commontest/main_test.go b/pkg/server/tests/commontest/main_test.go index 1e7d0484adf68..94d058bd8dc86 100644 --- a/pkg/server/tests/commontest/main_test.go +++ b/pkg/server/tests/commontest/main_test.go @@ -23,7 +23,6 @@ import ( "github.com/pingcap/tidb/pkg/config" "github.com/pingcap/tidb/pkg/metrics" "github.com/pingcap/tidb/pkg/server" - "github.com/pingcap/tidb/pkg/session" "github.com/pingcap/tidb/pkg/store/mockstore/unistore" "github.com/pingcap/tidb/pkg/testkit/testsetup" topsqlstate "github.com/pingcap/tidb/pkg/util/topsql/state" @@ -38,10 +37,6 @@ func TestMain(m *testing.M) { topsqlstate.EnableTopSQL() unistore.CheckResourceTagForTopSQLInGoTest = true - // AsyncCommit will make DDL wait 2.5s before changing to the next state. - // Set schema lease to avoid it from making CI slow. - session.SetSchemaLease(0) - tikv.EnableFailpoints() metrics.RegisterMetrics() diff --git a/pkg/server/tests/commontest/tidb_test.go b/pkg/server/tests/commontest/tidb_test.go index 24533dc5fa9d3..4a90bee0c2c51 100644 --- a/pkg/server/tests/commontest/tidb_test.go +++ b/pkg/server/tests/commontest/tidb_test.go @@ -3277,12 +3277,12 @@ func TestTypeAndCharsetOfSendLongData(t *testing.T) { func TestIssue53634(t *testing.T) { ts := servertestkit.CreateTidbTestSuiteWithDDLLease(t, "20s") - ts.RunTestIssue53634(t, ts.Domain) + ts.RunTestIssue53634(t) } func TestIssue54254(t *testing.T) { ts := servertestkit.CreateTidbTestSuiteWithDDLLease(t, "20s") - ts.RunTestIssue54254(t, ts.Domain) + ts.RunTestIssue54254(t) } func TestAuthSocket(t *testing.T) { diff --git a/pkg/server/tests/cursor/BUILD.bazel b/pkg/server/tests/cursor/BUILD.bazel index cfc030e98e7da..6e479264e3950 100644 --- a/pkg/server/tests/cursor/BUILD.bazel +++ b/pkg/server/tests/cursor/BUILD.bazel @@ -8,14 +8,13 @@ go_test( "main_test.go", ], flaky = True, - shard_count = 5, + shard_count = 8, deps = [ "//pkg/config", "//pkg/metrics", "//pkg/parser/mysql", "//pkg/server", "//pkg/server/tests/servertestkit", - "//pkg/session", "//pkg/store/mockstore/unistore", "//pkg/testkit", "//pkg/testkit/testsetup", diff --git a/pkg/server/tests/cursor/cursor_test.go b/pkg/server/tests/cursor/cursor_test.go index 030054e9058de..f7f8903361332 100644 --- a/pkg/server/tests/cursor/cursor_test.go +++ b/pkg/server/tests/cursor/cursor_test.go @@ -304,3 +304,205 @@ outerLoop: } } } + +func TestLazyExecuteProjection(t *testing.T) { + ts := servertestkit.CreateTidbTestSuite(t) + + mysqldriver := &mysqlcursor.MySQLDriver{} + rawConn, err := mysqldriver.Open(ts.GetDSNWithCursor(10)) + require.NoError(t, err) + conn := rawConn.(mysqlcursor.Connection) + defer conn.Close() + + _, err = conn.ExecContext(context.Background(), "drop table if exists t1", nil) + require.NoError(t, err) + _, err = conn.ExecContext(context.Background(), "create table t1(id int primary key, v int)", nil) + require.NoError(t, err) + rowCount := 1000 + for i := 0; i < rowCount; i++ { + _, err = conn.ExecContext(context.Background(), fmt.Sprintf("insert into t1 values(%d, %d)", i, i), nil) + require.NoError(t, err) + } + + _, err = conn.ExecContext(context.Background(), "set tidb_enable_lazy_cursor_fetch = 'ON'", nil) + require.NoError(t, err) + + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/server/avoidEagerCursorFetch", "return")) + defer func() { + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/server/avoidEagerCursorFetch")) + }() + + // Normal execute. Simple table reader. + execTimes := 0 +outerLoop: + for execTimes < 50 { + execTimes++ + rawStmt, err := conn.Prepare("select id + v from t1 order by id") + require.NoError(t, err) + stmt := rawStmt.(mysqlcursor.Statement) + + // This query will return `rowCount` rows and use cursor fetch. + rows, err := stmt.QueryContext(context.Background(), nil) + require.NoError(t, err) + + dest := make([]driver.Value, 1) + fetchRowCount := int64(0) + + for { + // it'll send `FETCH` commands for every 10 rows. + err := rows.Next(dest) + if err != nil { + switch err { + case io.EOF: + require.Equal(t, int64(rowCount), fetchRowCount) + rows.Close() + break outerLoop + default: + require.NoError(t, err) + } + } + require.Equal(t, fetchRowCount*2, dest[0]) + fetchRowCount++ + } + } +} + +func TestLazyExecuteSelection(t *testing.T) { + ts := servertestkit.CreateTidbTestSuite(t) + + mysqldriver := &mysqlcursor.MySQLDriver{} + rawConn, err := mysqldriver.Open(ts.GetDSNWithCursor(10)) + require.NoError(t, err) + conn := rawConn.(mysqlcursor.Connection) + defer conn.Close() + + _, err = conn.ExecContext(context.Background(), "drop table if exists t1", nil) + require.NoError(t, err) + _, err = conn.ExecContext(context.Background(), "create table t1(id int primary key, v int)", nil) + require.NoError(t, err) + rowCount := 1000 + for i := 0; i < rowCount; i++ { + _, err = conn.ExecContext(context.Background(), fmt.Sprintf("insert into t1 values(%d, %d)", i, i), nil) + require.NoError(t, err) + } + + _, err = conn.ExecContext(context.Background(), "set tidb_enable_lazy_cursor_fetch = 'ON'", nil) + require.NoError(t, err) + + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/server/avoidEagerCursorFetch", "return")) + defer func() { + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/server/avoidEagerCursorFetch")) + }() + + // Normal execute. Simple table reader. + execTimes := 0 +outerLoop: + for execTimes < 50 { + execTimes++ + rawStmt, err := conn.Prepare("select id from t1 where v >= ? order by id") + require.NoError(t, err) + stmt := rawStmt.(mysqlcursor.Statement) + + // This query will return `rowCount - 500` rows and use cursor fetch. + rows, err := stmt.QueryContext(context.Background(), []driver.NamedValue{{Value: int64(500)}}) + require.NoError(t, err) + + dest := make([]driver.Value, 1) + fetchRowCount := int64(0) + + for { + // it'll send `FETCH` commands for every 10 rows. + err := rows.Next(dest) + if err != nil { + switch err { + case io.EOF: + require.Equal(t, int64(rowCount-500), fetchRowCount) + rows.Close() + break outerLoop + default: + require.NoError(t, err) + } + } + require.Equal(t, fetchRowCount+500, dest[0]) + fetchRowCount++ + } + } +} + +func TestLazyExecuteWithParam(t *testing.T) { + ts := servertestkit.CreateTidbTestSuite(t) + + mysqldriver := &mysqlcursor.MySQLDriver{} + rawConn, err := mysqldriver.Open(ts.GetDSNWithCursor(10)) + require.NoError(t, err) + conn := rawConn.(mysqlcursor.Connection) + defer conn.Close() + + _, err = conn.ExecContext(context.Background(), "drop table if exists t1", nil) + require.NoError(t, err) + _, err = conn.ExecContext(context.Background(), "create table t1(id int primary key, v int)", nil) + require.NoError(t, err) + rowCount := 1000 + for i := 0; i < rowCount; i++ { + _, err = conn.ExecContext(context.Background(), fmt.Sprintf("insert into t1 values(%d, %d)", i, i), nil) + require.NoError(t, err) + } + + _, err = conn.ExecContext(context.Background(), "set tidb_enable_lazy_cursor_fetch = 'ON'", nil) + require.NoError(t, err) + + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/server/avoidEagerCursorFetch", "return")) + defer func() { + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/server/avoidEagerCursorFetch")) + }() + + // Normal execute. Simple table reader. + execTimes := 0 +outerLoop: + for execTimes < 50 { + execTimes++ + rawStmt, err := conn.Prepare("select id from t1 where v >= ? and v <= ? order by id") + require.NoError(t, err) + stmt := rawStmt.(mysqlcursor.Statement) + + // This query will return `rowCount - 500` rows and use cursor fetch. + rows, err := stmt.QueryContext(context.Background(), []driver.NamedValue{{Value: int64(500)}, {Value: int64(10000)}}) + require.NoError(t, err) + + dest := make([]driver.Value, 1) + fetchRowCount := int64(0) + + for { + // it'll send `FETCH` commands for every 10 rows. + err := rows.Next(dest) + if err != nil { + switch err { + case io.EOF: + require.Equal(t, int64(rowCount-500), fetchRowCount) + rows.Close() + break outerLoop + default: + require.NoError(t, err) + } + } + require.Equal(t, fetchRowCount+500, dest[0]) + fetchRowCount++ + + if fetchRowCount%50 == 0 { + // Run another query with only one parameter. + rawStmt, err := conn.Prepare("select id from t1 where v = ?") + require.NoError(t, err) + stmt := rawStmt.(mysqlcursor.Statement) + + // This query will return `rowCount` rows and use cursor fetch. + rows, err := stmt.QueryContext(context.Background(), []driver.NamedValue{{Value: int64(500)}}) + require.NoError(t, err) + + dest := make([]driver.Value, 2) + require.NoError(t, rows.Next(dest)) + require.Equal(t, int64(500), dest[0]) + require.NoError(t, rawStmt.Close()) + } + } + } +} diff --git a/pkg/server/tests/cursor/main_test.go b/pkg/server/tests/cursor/main_test.go index f16318debb3d3..0e6b15755fbd5 100644 --- a/pkg/server/tests/cursor/main_test.go +++ b/pkg/server/tests/cursor/main_test.go @@ -23,7 +23,6 @@ import ( "github.com/pingcap/tidb/pkg/config" "github.com/pingcap/tidb/pkg/metrics" "github.com/pingcap/tidb/pkg/server" - "github.com/pingcap/tidb/pkg/session" "github.com/pingcap/tidb/pkg/store/mockstore/unistore" "github.com/pingcap/tidb/pkg/testkit/testsetup" topsqlstate "github.com/pingcap/tidb/pkg/util/topsql/state" @@ -38,10 +37,6 @@ func TestMain(m *testing.M) { topsqlstate.EnableTopSQL() unistore.CheckResourceTagForTopSQLInGoTest = true - // AsyncCommit will make DDL wait 2.5s before changing to the next state. - // Set schema lease to avoid it from making CI slow. - session.SetSchemaLease(0) - tikv.EnableFailpoints() metrics.RegisterMetrics() diff --git a/pkg/server/tests/main_test.go b/pkg/server/tests/main_test.go index 32ab551e50f7d..e4dd64b449d6a 100644 --- a/pkg/server/tests/main_test.go +++ b/pkg/server/tests/main_test.go @@ -23,7 +23,6 @@ import ( "github.com/pingcap/tidb/pkg/config" "github.com/pingcap/tidb/pkg/metrics" "github.com/pingcap/tidb/pkg/server" - "github.com/pingcap/tidb/pkg/session" "github.com/pingcap/tidb/pkg/store/mockstore/unistore" "github.com/pingcap/tidb/pkg/testkit/testsetup" topsqlstate "github.com/pingcap/tidb/pkg/util/topsql/state" @@ -38,10 +37,6 @@ func TestMain(m *testing.M) { topsqlstate.EnableTopSQL() unistore.CheckResourceTagForTopSQLInGoTest = true - // AsyncCommit will make DDL wait 2.5s before changing to the next state. - // Set schema lease to avoid it from making CI slow. - session.SetSchemaLease(0) - tikv.EnableFailpoints() metrics.RegisterMetrics() diff --git a/pkg/server/tests/tls/BUILD.bazel b/pkg/server/tests/tls/BUILD.bazel index a110d91533ce0..837f9ca4291cc 100644 --- a/pkg/server/tests/tls/BUILD.bazel +++ b/pkg/server/tests/tls/BUILD.bazel @@ -17,7 +17,6 @@ go_test( "//pkg/server/internal/testutil", "//pkg/server/internal/util", "//pkg/server/tests/servertestkit", - "//pkg/session", "//pkg/sessionctx/variable", "//pkg/store/mockstore/unistore", "//pkg/testkit/testsetup", diff --git a/pkg/server/tests/tls/main_test.go b/pkg/server/tests/tls/main_test.go index b0e4571ee3062..7d87e42a738aa 100644 --- a/pkg/server/tests/tls/main_test.go +++ b/pkg/server/tests/tls/main_test.go @@ -23,7 +23,6 @@ import ( "github.com/pingcap/tidb/pkg/config" "github.com/pingcap/tidb/pkg/metrics" "github.com/pingcap/tidb/pkg/server" - "github.com/pingcap/tidb/pkg/session" "github.com/pingcap/tidb/pkg/store/mockstore/unistore" "github.com/pingcap/tidb/pkg/testkit/testsetup" topsqlstate "github.com/pingcap/tidb/pkg/util/topsql/state" @@ -38,10 +37,6 @@ func TestMain(m *testing.M) { topsqlstate.EnableTopSQL() unistore.CheckResourceTagForTopSQLInGoTest = true - // AsyncCommit will make DDL wait 2.5s before changing to the next state. - // Set schema lease to avoid it from making CI slow. - session.SetSchemaLease(0) - tikv.EnableFailpoints() metrics.RegisterMetrics() diff --git a/pkg/session/BUILD.bazel b/pkg/session/BUILD.bazel index 0dbad63e51e8f..db889bb5294c0 100644 --- a/pkg/session/BUILD.bazel +++ b/pkg/session/BUILD.bazel @@ -23,7 +23,7 @@ go_library( "//pkg/ddl", "//pkg/ddl/placement", "//pkg/ddl/schematracker", - "//pkg/ddl/syncer", + "//pkg/ddl/serverstate", "//pkg/distsql/context", "//pkg/disttask/framework/proto", "//pkg/disttask/framework/scheduler", diff --git a/pkg/session/bench_test.go b/pkg/session/bench_test.go index 482dbad7fc171..ee482ec006354 100644 --- a/pkg/session/bench_test.go +++ b/pkg/session/bench_test.go @@ -23,6 +23,7 @@ import ( "testing" "time" + "github.com/pingcap/failpoint" "github.com/pingcap/log" _ "github.com/pingcap/tidb/pkg/autoid_service" "github.com/pingcap/tidb/pkg/config" @@ -37,6 +38,7 @@ import ( "github.com/pingcap/tidb/pkg/util/chunk" "github.com/pingcap/tidb/pkg/util/logutil" "github.com/pingcap/tidb/pkg/util/sqlexec" + "github.com/stretchr/testify/require" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) @@ -1949,6 +1951,8 @@ var batchNum = 100 var batchSize = 100 func BenchmarkPipelinedSimpleInsert(b *testing.B) { + require.NoError(b, failpoint.Enable("tikvclient/pipelinedSkipResolveLock", "return")) + defer require.NoError(b, failpoint.Disable("tikvclient/pipelinedSkipResolveLock")) logutil.InitLogger(&logutil.LogConfig{Config: log.Config{Level: "fatal"}}) se, do, st := prepareBenchSession() defer func() { @@ -1977,6 +1981,8 @@ func BenchmarkPipelinedSimpleInsert(b *testing.B) { } func BenchmarkPipelinedInsertIgnoreNoDuplicates(b *testing.B) { + require.NoError(b, failpoint.Enable("tikvclient/pipelinedSkipResolveLock", "return")) + defer require.NoError(b, failpoint.Disable("tikvclient/pipelinedSkipResolveLock")) logutil.InitLogger(&logutil.LogConfig{Config: log.Config{Level: "fatal"}}) se, do, st := prepareBenchSession() defer func() { @@ -2058,7 +2064,7 @@ func BenchmarkPipelinedDelete(b *testing.B) { } se.GetSessionVars().BulkDMLEnabled = true - se.GetSessionVars().StmtCtx.InInsertStmt = true + se.GetSessionVars().StmtCtx.InDeleteStmt = true b.StopTimer() b.ResetTimer() for i := 0; i < b.N; i++ { @@ -2072,6 +2078,8 @@ func BenchmarkPipelinedDelete(b *testing.B) { } func BenchmarkPipelinedReplaceNoDuplicates(b *testing.B) { + require.NoError(b, failpoint.Enable("tikvclient/pipelinedSkipResolveLock", "return")) + defer require.NoError(b, failpoint.Disable("tikvclient/pipelinedSkipResolveLock")) logutil.InitLogger(&logutil.LogConfig{Config: log.Config{Level: "fatal"}}) se, do, st := prepareBenchSession() defer func() { @@ -2099,3 +2107,37 @@ func BenchmarkPipelinedReplaceNoDuplicates(b *testing.B) { b.StopTimer() b.ReportMetric(float64(b.Elapsed().Nanoseconds()/int64(b.N*batchSize*batchNum)), "ns/row") } + +func BenchmarkPipelinedUpdate(b *testing.B) { + logutil.InitLogger(&logutil.LogConfig{Config: log.Config{Level: "fatal"}}) + se, do, st := prepareBenchSession() + defer func() { + se.Close() + do.Close() + st.Close() + }() + mustExecute(se, `create table src (id int, dt varchar(128))`) + for i := 0; i < batchNum; i++ { + mustExecute(se, "begin") + for lines := 0; lines < batchSize; lines++ { + mustExecute(se, "insert into src values (42, repeat('x', 128))") + } + mustExecute(se, "commit") + } + + se.GetSessionVars().BulkDMLEnabled = true + se.GetSessionVars().StmtCtx.InUpdateStmt = true + + b.StopTimer() + b.ResetTimer() + for i := 0; i < b.N; i++ { + b.StartTimer() + if i%2 == 0 { + se.Execute(context.Background(), "update src set dt = left(concat('y', dt), 128)") + } else { + se.Execute(context.Background(), "update src set dt = left(concat('z', dt), 128)") + } + b.StopTimer() + } + b.ReportMetric(float64(b.Elapsed().Nanoseconds()/int64(b.N*batchSize*batchNum)), "ns/row") +} diff --git a/pkg/session/bootstrap.go b/pkg/session/bootstrap.go index adaae4cdb5f91..04bbd844d2b5b 100644 --- a/pkg/session/bootstrap.go +++ b/pkg/session/bootstrap.go @@ -1422,6 +1422,8 @@ func upgrade(s sessiontypes.Session) { logutil.BgLogger().Fatal("[upgrade] init metadata lock failed", zap.Error(err)) } + // when upgrade from v6.4.0 or earlier, enables metadata lock automatically, + // but during upgrade we disable it. if isNull { upgradeToVer99Before(s) } @@ -3380,7 +3382,7 @@ func rebuildAllPartitionValueMapAndSorted(s *session) { if pi == nil || pi.Type != model.PartitionTypeList { continue } - tbl, ok := is.TableByID(t.ID) + tbl, ok := is.TableByID(s.currentCtx, t.ID) intest.Assert(ok, "table not found in infoschema") pe := tbl.(partitionExpr).PartitionExpr() for _, cp := range pe.ColPrunes { diff --git a/pkg/session/bootstrap_test.go b/pkg/session/bootstrap_test.go index 18d73f7928b25..0987adb382ddd 100644 --- a/pkg/session/bootstrap_test.go +++ b/pkg/session/bootstrap_test.go @@ -170,6 +170,7 @@ func TestBootstrapWithError(t *testing.T) { require.NoError(t, err) dom, err := domap.Get(store) require.NoError(t, err) + require.NoError(t, dom.Start()) domain.BindDomain(se, dom) b, err := checkBootstrapped(se) require.False(t, b) @@ -497,7 +498,6 @@ func TestANSISQLMode(t *testing.T) { // Do some clean up, BootstrapSession will not create a new domain otherwise. dom.Close() - domap.Delete(store) // Set ANSI sql_mode and bootstrap again, to cover a bugfix. // Once we have a SQL like that: @@ -1106,7 +1106,7 @@ func TestTiDBCostModelInNewCluster(t *testing.T) { func TestTiDBCostModelUpgradeFrom300To650(t *testing.T) { ctx := context.Background() - store, _ := CreateStoreAndBootstrap(t) + store, dom := CreateStoreAndBootstrap(t) defer func() { require.NoError(t, store.Close()) }() // Upgrade from 3.0.0 to 6.5+. @@ -1134,6 +1134,7 @@ func TestTiDBCostModelUpgradeFrom300To650(t *testing.T) { require.NoError(t, err) require.Equal(t, 0, chk.NumRows()) + dom.Close() domCurVer, err := BootstrapSession(store) require.NoError(t, err) defer domCurVer.Close() @@ -1225,7 +1226,7 @@ func TestTiDBCostModelUpgradeFrom610To650(t *testing.T) { func TestTiDBGCAwareUpgradeFrom630To650(t *testing.T) { ctx := context.Background() - store, _ := CreateStoreAndBootstrap(t) + store, dom := CreateStoreAndBootstrap(t) defer func() { require.NoError(t, store.Close()) }() // upgrade from 6.3 to 6.5+. @@ -1257,6 +1258,7 @@ func TestTiDBGCAwareUpgradeFrom630To650(t *testing.T) { require.Equal(t, "1", row.GetString(1)) // Upgrade to 6.5. + dom.Close() domCurVer, err := BootstrapSession(store) require.NoError(t, err) defer domCurVer.Close() @@ -1278,7 +1280,7 @@ func TestTiDBGCAwareUpgradeFrom630To650(t *testing.T) { func TestTiDBServerMemoryLimitUpgradeTo651_1(t *testing.T) { ctx := context.Background() - store, _ := CreateStoreAndBootstrap(t) + store, dom := CreateStoreAndBootstrap(t) defer func() { require.NoError(t, store.Close()) }() // upgrade from 6.5.0 to 6.5.1+. @@ -1310,6 +1312,7 @@ func TestTiDBServerMemoryLimitUpgradeTo651_1(t *testing.T) { require.Equal(t, "0", row.GetString(1)) // Upgrade to 6.5.1+. + dom.Close() domCurVer, err := BootstrapSession(store) require.NoError(t, err) defer domCurVer.Close() @@ -1331,7 +1334,7 @@ func TestTiDBServerMemoryLimitUpgradeTo651_1(t *testing.T) { func TestTiDBServerMemoryLimitUpgradeTo651_2(t *testing.T) { ctx := context.Background() - store, _ := CreateStoreAndBootstrap(t) + store, dom := CreateStoreAndBootstrap(t) defer func() { require.NoError(t, store.Close()) }() // upgrade from 6.5.0 to 6.5.1+. @@ -1363,6 +1366,7 @@ func TestTiDBServerMemoryLimitUpgradeTo651_2(t *testing.T) { require.Equal(t, "70%", row.GetString(1)) // Upgrade to 6.5.1+. + dom.Close() domCurVer, err := BootstrapSession(store) require.NoError(t, err) defer domCurVer.Close() @@ -1384,7 +1388,7 @@ func TestTiDBServerMemoryLimitUpgradeTo651_2(t *testing.T) { func TestTiDBGlobalVariablesDefaultValueUpgradeFrom630To660(t *testing.T) { ctx := context.Background() - store, _ := CreateStoreAndBootstrap(t) + store, dom := CreateStoreAndBootstrap(t) defer func() { require.NoError(t, store.Close()) }() // upgrade from 6.3.0 to 6.6.0. @@ -1423,6 +1427,7 @@ func TestTiDBGlobalVariablesDefaultValueUpgradeFrom630To660(t *testing.T) { } // Upgrade to 6.6.0. + dom.Close() domCurVer, err := BootstrapSession(store) require.NoError(t, err) defer domCurVer.Close() @@ -1516,7 +1521,7 @@ func TestTiDBStoreBatchSizeUpgradeFrom650To660(t *testing.T) { } func TestTiDBUpgradeToVer136(t *testing.T) { - store, _ := CreateStoreAndBootstrap(t) + store, do := CreateStoreAndBootstrap(t) defer func() { require.NoError(t, store.Close()) }() @@ -1543,6 +1548,7 @@ func TestTiDBUpgradeToVer136(t *testing.T) { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/reorgMetaRecordFastReorgDisabled")) }) MustExec(t, seV135, "set global tidb_ddl_enable_fast_reorg = 1") + do.Close() dom, err := BootstrapSession(store) require.NoError(t, err) ver, err = getBootstrapVersion(seV135) @@ -1554,7 +1560,7 @@ func TestTiDBUpgradeToVer136(t *testing.T) { } func TestTiDBUpgradeToVer140(t *testing.T) { - store, _ := CreateStoreAndBootstrap(t) + store, do := CreateStoreAndBootstrap(t) defer func() { require.NoError(t, store.Close()) }() @@ -1580,6 +1586,7 @@ func TestTiDBUpgradeToVer140(t *testing.T) { s := CreateSessionAndSetID(t, store) MustExec(t, s, "alter table mysql.tidb_global_task drop column task_key") resetTo139(s) + do.Close() dom, err := BootstrapSession(store) require.NoError(t, err) ver, err := getBootstrapVersion(s) @@ -1600,7 +1607,7 @@ func TestTiDBUpgradeToVer140(t *testing.T) { func TestTiDBNonPrepPlanCacheUpgradeFrom540To700(t *testing.T) { ctx := context.Background() - store, _ := CreateStoreAndBootstrap(t) + store, dom := CreateStoreAndBootstrap(t) defer func() { require.NoError(t, store.Close()) }() // bootstrap to 5.4 @@ -1629,6 +1636,7 @@ func TestTiDBNonPrepPlanCacheUpgradeFrom540To700(t *testing.T) { require.Equal(t, 0, chk.NumRows()) // Upgrade to 7.0 + dom.Close() domCurVer, err := BootstrapSession(store) require.NoError(t, err) defer domCurVer.Close() @@ -1659,7 +1667,7 @@ func TestTiDBNonPrepPlanCacheUpgradeFrom540To700(t *testing.T) { func TestTiDBStatsLoadPseudoTimeoutUpgradeFrom610To650(t *testing.T) { ctx := context.Background() - store, _ := CreateStoreAndBootstrap(t) + store, dom := CreateStoreAndBootstrap(t) defer func() { require.NoError(t, store.Close()) }() // upgrade from 6.1 to 6.5+. @@ -1691,6 +1699,7 @@ func TestTiDBStatsLoadPseudoTimeoutUpgradeFrom610To650(t *testing.T) { require.Equal(t, "0", row.GetString(1)) // Upgrade to 6.5. + dom.Close() domCurVer, err := BootstrapSession(store) require.NoError(t, err) defer domCurVer.Close() @@ -1712,7 +1721,7 @@ func TestTiDBStatsLoadPseudoTimeoutUpgradeFrom610To650(t *testing.T) { func TestTiDBTiDBOptTiDBOptimizerEnableNAAJWhenUpgradingToVer138(t *testing.T) { ctx := context.Background() - store, _ := CreateStoreAndBootstrap(t) + store, dom := CreateStoreAndBootstrap(t) defer func() { require.NoError(t, store.Close()) }() ver137 := version137 @@ -1742,6 +1751,7 @@ func TestTiDBTiDBOptTiDBOptimizerEnableNAAJWhenUpgradingToVer138(t *testing.T) { require.Equal(t, "OFF", row.GetString(1)) // Upgrade to version 138. + dom.Close() domCurVer, err := BootstrapSession(store) require.NoError(t, err) defer domCurVer.Close() @@ -1761,7 +1771,7 @@ func TestTiDBTiDBOptTiDBOptimizerEnableNAAJWhenUpgradingToVer138(t *testing.T) { } func TestTiDBUpgradeToVer143(t *testing.T) { - store, _ := CreateStoreAndBootstrap(t) + store, do := CreateStoreAndBootstrap(t) defer func() { require.NoError(t, store.Close()) }() @@ -1782,6 +1792,7 @@ func TestTiDBUpgradeToVer143(t *testing.T) { require.NoError(t, err) require.Equal(t, int64(ver142), ver) + do.Close() dom, err := BootstrapSession(store) require.NoError(t, err) ver, err = getBootstrapVersion(seV142) @@ -1792,7 +1803,7 @@ func TestTiDBUpgradeToVer143(t *testing.T) { func TestTiDBLoadBasedReplicaReadThresholdUpgradingToVer141(t *testing.T) { ctx := context.Background() - store, _ := CreateStoreAndBootstrap(t) + store, do := CreateStoreAndBootstrap(t) defer func() { require.NoError(t, store.Close()) }() // upgrade from 7.0 to 7.1. @@ -1824,6 +1835,7 @@ func TestTiDBLoadBasedReplicaReadThresholdUpgradingToVer141(t *testing.T) { require.Equal(t, "0", row.GetString(1)) // Upgrade to 7.1. + do.Close() domCurVer, err := BootstrapSession(store) require.NoError(t, err) defer domCurVer.Close() @@ -1845,7 +1857,7 @@ func TestTiDBLoadBasedReplicaReadThresholdUpgradingToVer141(t *testing.T) { func TestTiDBPlanCacheInvalidationOnFreshStatsWhenUpgradingToVer144(t *testing.T) { ctx := context.Background() - store, _ := CreateStoreAndBootstrap(t) + store, do := CreateStoreAndBootstrap(t) defer func() { require.NoError(t, store.Close()) }() // bootstrap as version143 @@ -1864,6 +1876,7 @@ func TestTiDBPlanCacheInvalidationOnFreshStatsWhenUpgradingToVer144(t *testing.T unsetStoreBootstrapped(store.UUID()) // upgrade to ver144 + do.Close() domCurVer, err := BootstrapSession(store) require.NoError(t, err) defer domCurVer.Close() @@ -1891,7 +1904,7 @@ func TestTiDBPlanCacheInvalidationOnFreshStatsWhenUpgradingToVer144(t *testing.T } func TestTiDBUpgradeToVer145(t *testing.T) { - store, _ := CreateStoreAndBootstrap(t) + store, do := CreateStoreAndBootstrap(t) defer func() { require.NoError(t, store.Close()) }() @@ -1912,6 +1925,7 @@ func TestTiDBUpgradeToVer145(t *testing.T) { require.NoError(t, err) require.Equal(t, int64(ver144), ver) + do.Close() dom, err := BootstrapSession(store) require.NoError(t, err) ver, err = getBootstrapVersion(seV144) @@ -1921,7 +1935,7 @@ func TestTiDBUpgradeToVer145(t *testing.T) { } func TestTiDBUpgradeToVer170(t *testing.T) { - store, _ := CreateStoreAndBootstrap(t) + store, do := CreateStoreAndBootstrap(t) defer func() { require.NoError(t, store.Close()) }() @@ -1941,6 +1955,7 @@ func TestTiDBUpgradeToVer170(t *testing.T) { require.NoError(t, err) require.Equal(t, int64(ver169), ver) + do.Close() dom, err := BootstrapSession(store) require.NoError(t, err) ver, err = getBootstrapVersion(seV169) @@ -1951,7 +1966,7 @@ func TestTiDBUpgradeToVer170(t *testing.T) { func TestTiDBBindingInListToVer175(t *testing.T) { ctx := context.Background() - store, _ := CreateStoreAndBootstrap(t) + store, dom := CreateStoreAndBootstrap(t) defer func() { require.NoError(t, store.Close()) }() // bootstrap as version174 @@ -2003,6 +2018,7 @@ func TestTiDBBindingInListToVer175(t *testing.T) { "SELECT /*+ use_index(`t` `c`)*/ * FROM `test`.`t` WHERE `a` IN (1,2,3):select * from `test` . `t` where `a` in ( ... )"}, bindings) // upgrade to ver175 + dom.Close() domCurVer, err := BootstrapSession(store) require.NoError(t, err) defer domCurVer.Close() @@ -2033,7 +2049,7 @@ func TestTiDBBindingInListToVer175(t *testing.T) { } func TestTiDBUpgradeToVer176(t *testing.T) { - store, _ := CreateStoreAndBootstrap(t) + store, do := CreateStoreAndBootstrap(t) defer func() { require.NoError(t, store.Close()) }() @@ -2053,6 +2069,7 @@ func TestTiDBUpgradeToVer176(t *testing.T) { require.NoError(t, err) require.Equal(t, int64(ver175), ver) + do.Close() dom, err := BootstrapSession(store) require.NoError(t, err) ver, err = getBootstrapVersion(seV175) @@ -2063,7 +2080,7 @@ func TestTiDBUpgradeToVer176(t *testing.T) { } func TestTiDBUpgradeToVer177(t *testing.T) { - store, _ := CreateStoreAndBootstrap(t) + store, do := CreateStoreAndBootstrap(t) defer func() { require.NoError(t, store.Close()) }() @@ -2083,6 +2100,7 @@ func TestTiDBUpgradeToVer177(t *testing.T) { require.NoError(t, err) require.Equal(t, int64(ver176), ver) + do.Close() dom, err := BootstrapSession(store) require.NoError(t, err) ver, err = getBootstrapVersion(seV176) @@ -2117,7 +2135,7 @@ func TestWriteDDLTableVersionToMySQLTiDB(t *testing.T) { func TestWriteDDLTableVersionToMySQLTiDBWhenUpgradingTo178(t *testing.T) { ctx := context.Background() - store, _ := CreateStoreAndBootstrap(t) + store, dom := CreateStoreAndBootstrap(t) defer func() { require.NoError(t, store.Close()) }() txn, err := store.Begin() @@ -2142,6 +2160,7 @@ func TestWriteDDLTableVersionToMySQLTiDBWhenUpgradingTo178(t *testing.T) { require.Equal(t, int64(ver177), ver) // upgrade to current version + dom.Close() domCurVer, err := BootstrapSession(store) require.NoError(t, err) defer domCurVer.Close() @@ -2162,7 +2181,7 @@ func TestWriteDDLTableVersionToMySQLTiDBWhenUpgradingTo178(t *testing.T) { func TestTiDBUpgradeToVer179(t *testing.T) { ctx := context.Background() - store, _ := CreateStoreAndBootstrap(t) + store, do := CreateStoreAndBootstrap(t) defer func() { require.NoError(t, store.Close()) }() @@ -2182,6 +2201,7 @@ func TestTiDBUpgradeToVer179(t *testing.T) { require.NoError(t, err) require.Equal(t, int64(ver178), ver) + do.Close() dom, err := BootstrapSession(store) require.NoError(t, err) ver, err = getBootstrapVersion(seV178) @@ -2200,7 +2220,7 @@ func TestTiDBUpgradeToVer179(t *testing.T) { } func testTiDBUpgradeWithDistTask(t *testing.T, injectQuery string, fatal bool) { - store, _ := CreateStoreAndBootstrap(t) + store, do := CreateStoreAndBootstrap(t) defer func() { require.NoError(t, store.Close()) }() @@ -2229,8 +2249,7 @@ func testTiDBUpgradeWithDistTask(t *testing.T, injectQuery string, fatal bool) { rs() }() - var dom *domain.Domain - + do.Close() fatal2panic := false fc := func() { defer func() { @@ -2238,20 +2257,19 @@ func testTiDBUpgradeWithDistTask(t *testing.T, injectQuery string, fatal bool) { fatal2panic = true } }() - dom, _ = BootstrapSession(store) + _, _ = BootstrapSession(store) } fc() - - if fatal { - dom = domain.GetDomain(seV178) - } + var dom *domain.Domain + dom, err = domap.Get(store) + require.NoError(t, err) dom.Close() require.Equal(t, fatal, fatal2panic) } func TestTiDBUpgradeToVer209(t *testing.T) { ctx := context.Background() - store, _ := CreateStoreAndBootstrap(t) + store, dom := CreateStoreAndBootstrap(t) defer func() { require.NoError(t, store.Close()) }() // bootstrap as version198, version 199~208 is reserved for v8.1.x bugfix patch. @@ -2270,6 +2288,7 @@ func TestTiDBUpgradeToVer209(t *testing.T) { unsetStoreBootstrapped(store.UUID()) // upgrade to ver209 + dom.Close() domCurVer, err := BootstrapSession(store) require.NoError(t, err) defer domCurVer.Close() @@ -2324,7 +2343,7 @@ func TestTiDBUpgradeWithDistTaskRunning(t *testing.T) { func TestTiDBUpgradeToVer211(t *testing.T) { ctx := context.Background() - store, _ := CreateStoreAndBootstrap(t) + store, do := CreateStoreAndBootstrap(t) defer func() { require.NoError(t, store.Close()) }() @@ -2345,12 +2364,14 @@ func TestTiDBUpgradeToVer211(t *testing.T) { require.Equal(t, int64(ver210), ver) MustExec(t, seV210, "alter table mysql.tidb_background_subtask_history drop column summary;") + do.Close() dom, err := BootstrapSession(store) require.NoError(t, err) ver, err = getBootstrapVersion(seV210) require.NoError(t, err) require.Less(t, int64(ver210), ver) + domain.BindDomain(seV210, dom) r := MustExecToRecodeSet(t, seV210, "select count(summary) from mysql.tidb_background_subtask_history;") req := r.NewChunk(nil) err = r.Next(ctx, req) @@ -2379,7 +2400,7 @@ func TestTiDBHistoryTableConsistent(t *testing.T) { row := req.GetRow(0) require.Equal(t, int64(1), row.GetInt64(0)) - query = `select (select group_concat(column_name) from information_schema.columns where table_name='tidb_global_task' order by ordinal_position) + query = `select (select group_concat(column_name) from information_schema.columns where table_name='tidb_global_task' order by ordinal_position) = (select group_concat(column_name) from information_schema.columns where table_name='tidb_global_task_history' order by ordinal_position);` r = MustExecToRecodeSet(t, se, query) req = r.NewChunk(nil) diff --git a/pkg/session/bootstraptest/BUILD.bazel b/pkg/session/bootstraptest/BUILD.bazel index 890680fd28cb1..64612e6f8542c 100644 --- a/pkg/session/bootstraptest/BUILD.bazel +++ b/pkg/session/bootstraptest/BUILD.bazel @@ -8,15 +8,15 @@ go_test( "main_test.go", ], flaky = True, - shard_count = 11, + shard_count = 12, deps = [ "//pkg/config", "//pkg/ddl", - "//pkg/ddl/util/callback", "//pkg/kv", "//pkg/meta", "//pkg/parser/model", "//pkg/parser/terror", + "//pkg/planner/core", "//pkg/server/handler", "//pkg/session", #keep "//pkg/session/types", diff --git a/pkg/session/bootstraptest/bootstrap_upgrade_test.go b/pkg/session/bootstraptest/bootstrap_upgrade_test.go index ef5565fb97c56..28cf75f22a709 100644 --- a/pkg/session/bootstraptest/bootstrap_upgrade_test.go +++ b/pkg/session/bootstraptest/bootstrap_upgrade_test.go @@ -26,11 +26,11 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/ddl" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/meta" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/parser/terror" + plannercore "github.com/pingcap/tidb/pkg/planner/core" "github.com/pingcap/tidb/pkg/server/handler" "github.com/pingcap/tidb/pkg/session" sessiontypes "github.com/pingcap/tidb/pkg/session/types" @@ -257,8 +257,8 @@ func TestUpgradeVersionMockLatest(t *testing.T) { ver, err := session.GetBootstrapVersion(seV) require.NoError(t, err) require.Equal(t, session.CurrentBootstrapVersion-1, ver) - dom.Close() startUpgrade(store) + dom.Close() domLatestV, err := session.BootstrapSession(store) require.NoError(t, err) defer domLatestV.Close() @@ -322,7 +322,6 @@ func TestUpgradeVersionWithUpgradeHTTPOp(t *testing.T) { ver, err := session.GetBootstrapVersion(seV) require.NoError(t, err) require.Equal(t, session.SupportUpgradeHTTPOpVer, ver) - dom.Close() // Start the upgrade test. // Current cluster state is normal. @@ -331,6 +330,8 @@ func TestUpgradeVersionWithUpgradeHTTPOp(t *testing.T) { require.Equal(t, false, isUpgrading) upgradeHandler := handler.NewClusterUpgradeHandler(store) upgradeHandler.StartUpgrade() + + dom.Close() domLatestV, err := session.BootstrapSession(store) require.NoError(t, err) defer domLatestV.Close() @@ -419,24 +420,23 @@ func TestUpgradeVersionForPausedJob(t *testing.T) { session.MustExec(t, seV, "create table test.upgrade_tbl(a int)") ch := make(chan struct{}) var jobID int64 - hook := &callback.TestDDLCallback{} - hook.OnJobRunAfterExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunAfter", func(job *model.Job) { if job.SchemaState == model.StateWriteOnly { se := session.CreateSessionAndSetID(t, store) session.MustExec(t, se, fmt.Sprintf("admin pause ddl jobs %d", job.ID)) ch <- struct{}{} jobID = job.ID } - } - dom.DDL().SetHook(hook) + }) go func() { _, err = execute(context.Background(), seV, "alter table test.upgrade_tbl add index idx(a)") }() <-ch - dom.Close() // Make sure upgrade is successful. startUpgrade(store) + dom.Close() + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunAfter") domLatestV, err := session.BootstrapSession(store) require.NoError(t, err) defer domLatestV.Close() @@ -501,8 +501,7 @@ func TestUpgradeVersionForSystemPausedJob(t *testing.T) { session.MustExec(t, seV, "create table mysql.upgrade_tbl(a int)") ch := make(chan struct{}) var jobID int64 - hook := &callback.TestDDLCallback{} - hook.OnJobRunAfterExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunAfter", func(job *model.Job) { if job.SchemaState == model.StateDeleteOnly { se := session.CreateSessionAndSetID(t, store) session.MustExec(t, se, fmt.Sprintf("admin pause ddl jobs %d", job.ID)) @@ -512,8 +511,7 @@ func TestUpgradeVersionForSystemPausedJob(t *testing.T) { job.AdminOperator = model.AdminCommandBySystem jobID = job.ID } - } - dom.DDL().SetHook(hook) + }) var once sync.Once testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/afterDeliveryJob", func(job *model.Job) { if job != nil && job.ID == jobID { @@ -525,9 +523,10 @@ func TestUpgradeVersionForSystemPausedJob(t *testing.T) { }() <-ch - dom.Close() // Make sure upgrade is successful. startUpgrade(store) + dom.Close() + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunAfter") domLatestV, err := session.BootstrapSession(store) require.NoError(t, err) defer domLatestV.Close() @@ -587,9 +586,9 @@ func TestUpgradeVersionForResumeJob(t *testing.T) { }() <-ch - dom.Close() // Make sure upgrade is successful. startUpgrade(store) + dom.Close() domLatestV, err := session.BootstrapSession(store) require.NoError(t, err) defer domLatestV.Close() @@ -765,8 +764,8 @@ func TestUpgradeWithPauseDDL(t *testing.T) { ver, err := session.GetBootstrapVersion(seV) require.NoError(t, err) require.Equal(t, session.CurrentBootstrapVersion-1, ver) - dom.Close() startUpgrade(store) + dom.Close() domLatestV, err := session.BootstrapSession(store) require.NoError(t, err) defer domLatestV.Close() @@ -854,3 +853,19 @@ func TestUpgradeWithPauseDDL(t *testing.T) { " PARTITION `p3` VALUES LESS THAN (4096),\n" + " PARTITION `p4` VALUES LESS THAN (7096))")) } + +func TestUpgradeWithCrossJoinDisabled(t *testing.T) { + session.SupportUpgradeHTTPOpVer-- + ddl.SetWaitTimeWhenErrorOccurred(1 * time.Microsecond) + backup := plannercore.AllowCartesianProduct.Load() + t.Cleanup(func() { + plannercore.AllowCartesianProduct.Store(backup) + }) + plannercore.AllowCartesianProduct.Store(false) + + store, dom := session.CreateStoreAndBootstrap(t) + defer func() { + dom.Close() + require.NoError(t, store.Close()) + }() +} diff --git a/pkg/session/session.go b/pkg/session/session.go index 066dbc818910a..906b2dbc04e75 100644 --- a/pkg/session/session.go +++ b/pkg/session/session.go @@ -416,9 +416,8 @@ func (s *session) UpdateColStatsUsage(predicateColumns []model.TableItemID) { t := time.Now() colMap := make(map[model.TableItemID]time.Time, len(predicateColumns)) for _, col := range predicateColumns { - if col.IsIndex { - continue - } + // TODO: Remove this assertion once it has been confirmed to operate correctly over a period of time. + intest.Assert(!col.IsIndex, "predicate column should only be table column") colMap[col] = t } s.statsCollector.UpdateColStatsUsage(colMap) @@ -620,7 +619,7 @@ func (s *session) handleAssertionFailure(ctx context.Context, err error) error { if infoSchema, ok := s.sessionVars.TxnCtx.InfoSchema.(infoschema.InfoSchema); ok && infoSchema != nil && (tablecodec.IsRecordKey(key) || tablecodec.IsIndexKey(key)) { tableOrPartitionID := tablecodec.DecodeTableID(key) - tbl, ok := infoSchema.TableByID(tableOrPartitionID) + tbl, ok := infoSchema.TableByID(ctx, tableOrPartitionID) if !ok { tbl, _, _ = infoSchema.FindTableByPartitionID(tableOrPartitionID) } @@ -886,7 +885,7 @@ func addTableNameInTableIDField(tableIDField any, is infoschema.InfoSchema) (enh return "", false } var tableName string - tbl, ok := is.TableByID(tableID) + tbl, ok := is.TableByID(context.Background(), tableID) if !ok { tableName = "unknown" } else { @@ -1164,12 +1163,7 @@ func sqlForLog(sql string) string { return executor.QueryReplacer.Replace(sql) } -type sessionPool interface { - Get() (pools.Resource, error) - Put(pools.Resource) -} - -func (s *session) sysSessionPool() sessionPool { +func (s *session) sysSessionPool() util.SessionPool { return domain.GetDomain(s).SysSessionPool() } @@ -1438,6 +1432,7 @@ func (s *session) SetProcessInfo(sql string, t time.Time, command byte, maxExecu RefCountOfStmtCtx: &s.sessionVars.RefCountOfStmtCtx, MemTracker: s.sessionVars.MemTracker, DiskTracker: s.sessionVars.DiskTracker, + RunawayChecker: s.sessionVars.StmtCtx.RunawayChecker, StatsInfo: plannercore.GetStatsInfo, OOMAlarmVariablesInfo: s.getOomAlarmVariablesInfo(), TableIDs: s.sessionVars.StmtCtx.TableIDs, @@ -2384,6 +2379,10 @@ func (rs *execStmtResult) Close() error { } func (rs *execStmtResult) TryDetach() (sqlexec.RecordSet, bool, error) { + // If `TryDetach` is called, the connection must have set `mysql.ServerStatusCursorExists`, or + // the `StatementContext` will be re-used and cause data race. + intest.Assert(rs.se.GetSessionVars().HasStatusFlag(mysql.ServerStatusCursorExists)) + if !rs.sql.IsReadOnly(rs.se.GetSessionVars()) { return nil, false, nil } @@ -3222,12 +3221,7 @@ func InitDDLJobTables(store kv.Storage, targetVer meta.DDLTableVersion) error { targetTables = BackfillTables } return kv.RunInNewTxn(kv.WithInternalSourceType(context.Background(), kv.InternalTxnDDL), store, true, func(_ context.Context, txn kv.Transaction) error { - var t *meta.Meta - if variable.EnableFastCreateTable.Load() { - t = meta.NewMeta(txn, meta.WithUpdateTableName()) - } else { - t = meta.NewMeta(txn) - } + t := meta.NewMeta(txn) tableVer, err := t.CheckDDLTableVersion() if err != nil || tableVer >= targetVer { return errors.Trace(err) @@ -3262,7 +3256,7 @@ func createAndSplitTables(store kv.Storage, t *meta.Meta, dbID int64, tables []t tblInfo.State = model.StatePublic tblInfo.ID = tbl.id tblInfo.UpdateTS = t.StartTS - err = t.CreateTableOrView(dbID, "", tblInfo) + err = t.CreateTableOrView(dbID, tblInfo) if err != nil { return errors.Trace(err) } @@ -3273,12 +3267,7 @@ func createAndSplitTables(store kv.Storage, t *meta.Meta, dbID int64, tables []t // InitMDLTable is to create tidb_mdl_info, which is used for metadata lock. func InitMDLTable(store kv.Storage) error { return kv.RunInNewTxn(kv.WithInternalSourceType(context.Background(), kv.InternalTxnDDL), store, true, func(_ context.Context, txn kv.Transaction) error { - var t *meta.Meta - if variable.EnableFastCreateTable.Load() { - t = meta.NewMeta(txn, meta.WithUpdateTableName()) - } else { - t = meta.NewMeta(txn) - } + t := meta.NewMeta(txn) ver, err := t.CheckDDLTableVersion() if err != nil || ver >= meta.MDLTableVersion { return errors.Trace(err) @@ -3300,7 +3289,7 @@ func InitMDLTable(store kv.Storage) error { tblInfo.State = model.StatePublic tblInfo.ID = ddl.MDLTableID tblInfo.UpdateTS = t.StartTS - err = t.CreateTableOrView(dbID, "", tblInfo) + err = t.CreateTableOrView(dbID, tblInfo) if err != nil { return errors.Trace(err) } @@ -3405,6 +3394,18 @@ func BootstrapSession4DistExecution(store kv.Storage) (*domain.Domain, error) { return bootstrapSessionImpl(store, createSessions4DistExecution) } +// bootstrapSessionImpl bootstraps session and domain. +// the process works as follows: +// - if we haven't bootstrapped to the target version +// - create/init/start domain +// - bootstrap or upgrade, some variables will be initialized and stored to system +// table in the process, such as system time-zone +// - close domain +// +// - create/init another domain +// - initialization global variables from system table that's required to use sessionCtx, +// such as system time zone +// - start domain and other routines. func bootstrapSessionImpl(store kv.Storage, createSessionsImpl func(store kv.Storage, cnt int) ([]*session, error)) (*domain.Domain, error) { ctx := kv.WithInternalSourceType(context.Background(), kv.InternalTxnBootstrap) cfg := config.GetGlobalConfig() @@ -3459,7 +3460,6 @@ func bootstrapSessionImpl(store kv.Storage, createSessionsImpl func(store kv.Sto }, ) - analyzeConcurrencyQuota := int(config.GetGlobalConfig().Performance.AnalyzePartitionConcurrencyQuota) concurrency := config.GetGlobalConfig().Performance.StatsLoadConcurrency if concurrency == 0 { // if concurrency is 0, we will set the concurrency of sync load by CPU. @@ -3488,10 +3488,16 @@ func bootstrapSessionImpl(store kv.Storage, createSessionsImpl func(store kv.Sto return nil, err } collate.SetNewCollationEnabledForTest(newCollationEnabled) - // To deal with the location partition failure caused by inconsistent NewCollationEnabled values(see issue #32416). - rebuildAllPartitionValueMapAndSorted(ses[0]) + // only start the domain after we have initialized some global variables. dom := domain.GetDomain(ses[0]) + err = dom.Start() + if err != nil { + return nil, err + } + + // To deal with the location partition failure caused by inconsistent NewCollationEnabled values(see issue #32416). + rebuildAllPartitionValueMapAndSorted(ses[0]) // We should make the load bind-info loop before other loops which has internal SQL. // Because the internal SQL may access the global bind-info handler. As the result, the data race occurs here as the @@ -3603,8 +3609,7 @@ func bootstrapSessionImpl(store kv.Storage, createSessionsImpl func(store kv.Sto } // init the instance plan cache - // TODO: introduce 2 new variable to control these 2 mem limits. - dom.InitInstancePlanCache(1000000, 1000000) + dom.InitInstancePlanCache() // start TTL job manager after setup stats collector // because TTL could modify a lot of columns, and need to trigger auto analyze @@ -3622,15 +3627,6 @@ func bootstrapSessionImpl(store kv.Storage, createSessionsImpl func(store kv.Sto } dom.StartTTLJobManager() - analyzeCtxs, err := createSessions(store, analyzeConcurrencyQuota) - if err != nil { - return nil, err - } - subCtxs2 := make([]sessionctx.Context, analyzeConcurrencyQuota) - for i := 0; i < analyzeConcurrencyQuota; i++ { - subCtxs2[i] = analyzeCtxs[i] - } - dom.SetupAnalyzeExec(subCtxs2) dom.LoadSigningCertLoop(cfg.Security.SessionTokenSigningCert, cfg.Security.SessionTokenSigningKey) if raw, ok := store.(kv.EtcdBackend); ok { @@ -3668,6 +3664,13 @@ func runInBootstrapSession(store kv.Storage, bootstrap func(types.Session)) { // Bootstrap fail will cause program exit. logutil.BgLogger().Fatal("createSession error", zap.Error(err)) } + dom := domain.GetDomain(s) + err = dom.Start() + if err != nil { + // Bootstrap fail will cause program exit. + logutil.BgLogger().Fatal("start domain error", zap.Error(err)) + } + // For the bootstrap SQLs, the following variables should be compatible with old TiDB versions. s.sessionVars.EnableClusteredIndex = variable.ClusteredIndexDefModeIntOnly @@ -3676,7 +3679,6 @@ func runInBootstrapSession(store kv.Storage, bootstrap func(types.Session)) { finishBootstrap(store) s.ClearValue(sessionctx.Initing) - dom := domain.GetDomain(s) dom.Close() if intest.InTest { infosync.MockGlobalServerInfoManagerEntry.Close() @@ -4145,7 +4147,7 @@ func (s *session) checkPlacementPolicyBeforeCommit() error { tableName = tblInfo.Meta().Name.String() partitionName = partInfo.Name.String() } else { - tblInfo, _ := is.TableByID(physicalTableID) + tblInfo, _ := is.TableByID(s.currentCtx, physicalTableID) tableName = tblInfo.Meta().Name.String() } bundle, ok := is.PlacementBundleByPhysicalTableID(physicalTableID) diff --git a/pkg/session/sync_upgrade.go b/pkg/session/sync_upgrade.go index 52829793f6af7..6f7f7fcfa497a 100644 --- a/pkg/session/sync_upgrade.go +++ b/pkg/session/sync_upgrade.go @@ -21,7 +21,7 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/log" "github.com/pingcap/tidb/pkg/ddl" - "github.com/pingcap/tidb/pkg/ddl/syncer" + "github.com/pingcap/tidb/pkg/ddl/serverstate" dist_store "github.com/pingcap/tidb/pkg/disttask/framework/storage" "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/kv" @@ -47,10 +47,10 @@ func SyncUpgradeState(s sessionctx.Context, timeout time.Duration) error { ctx, cancelFunc := context.WithTimeout(context.Background(), timeout) defer cancelFunc() dom := domain.GetDomain(s) - err := dom.DDL().StateSyncer().UpdateGlobalState(ctx, syncer.NewStateInfo(syncer.StateUpgrading)) + err := dom.DDL().StateSyncer().UpdateGlobalState(ctx, serverstate.NewStateInfo(serverstate.StateUpgrading)) logger := logutil.BgLogger().With(zap.String("category", "upgrading")) if err != nil { - logger.Error("update global state failed", zap.String("state", syncer.StateUpgrading), zap.Error(err)) + logger.Error("update global state failed", zap.String("state", serverstate.StateUpgrading), zap.Error(err)) return err } @@ -74,7 +74,7 @@ func SyncUpgradeState(s sessionctx.Context, timeout time.Duration) error { time.Sleep(interval) } - logger.Info("update global state to upgrading", zap.String("state", syncer.StateUpgrading)) + logger.Info("update global state to upgrading", zap.String("state", serverstate.StateUpgrading)) return nil } @@ -85,7 +85,7 @@ func SyncNormalRunning(s sessionctx.Context) error { if val.(bool) { dom := domain.GetDomain(s) //nolint: errcheck - dom.DDL().StateSyncer().UpdateGlobalState(bgCtx, syncer.NewStateInfo(syncer.StateNormalRunning)) + dom.DDL().StateSyncer().UpdateGlobalState(bgCtx, serverstate.NewStateInfo(serverstate.StateNormalRunning)) failpoint.Return(nil) } }) @@ -110,7 +110,7 @@ func SyncNormalRunning(s sessionctx.Context) error { ctx, cancelFunc := context.WithTimeout(bgCtx, 3*time.Second) defer cancelFunc() dom := domain.GetDomain(s) - err = dom.DDL().StateSyncer().UpdateGlobalState(ctx, syncer.NewStateInfo(syncer.StateNormalRunning)) + err = dom.DDL().StateSyncer().UpdateGlobalState(ctx, serverstate.NewStateInfo(serverstate.StateNormalRunning)) if err != nil { logger.Error("update global state to normal failed", zap.Error(err)) return err @@ -129,7 +129,7 @@ func IsUpgradingClusterState(s sessionctx.Context) (bool, error) { return false, err } - return stateInfo.State == syncer.StateUpgrading, nil + return stateInfo.State == serverstate.StateUpgrading, nil } func printClusterState(s sessiontypes.Session, ver int64) { diff --git a/pkg/session/test/session_test.go b/pkg/session/test/session_test.go index 6280cd6be2d1a..87ae66cd46e51 100644 --- a/pkg/session/test/session_test.go +++ b/pkg/session/test/session_test.go @@ -152,7 +152,7 @@ func TestLoadSchemaFailed(t *testing.T) { }() require.Error(t, domain.GetDomain(tk.Session()).Reload()) - lease := domain.GetDomain(tk.Session()).DDL().GetLease() + lease := domain.GetDomain(tk.Session()).GetSchemaLease() time.Sleep(lease * 2) // Make sure executing insert statement is failed when server is invalid. diff --git a/pkg/session/test/variable/variable_test.go b/pkg/session/test/variable/variable_test.go index c4078af451fdb..957c880bcb48d 100644 --- a/pkg/session/test/variable/variable_test.go +++ b/pkg/session/test/variable/variable_test.go @@ -93,6 +93,11 @@ func TestCoprocessorOOMAction(t *testing.T) { sql: "select id from t5", }, } + + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/distsql/testRateLimitActionMockConsumeAndAssert", `return(true)`)) + defer func() { + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/distsql/testRateLimitActionMockConsumeAndAssert")) + }() require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/store/copr/testRateLimitActionMockConsumeAndAssert", `return(true)`)) defer func() { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/store/copr/testRateLimitActionMockConsumeAndAssert")) diff --git a/pkg/session/tidb.go b/pkg/session/tidb.go index 5e5fadbdcf3a8..913d8d2d50b06 100644 --- a/pkg/session/tidb.go +++ b/pkg/session/tidb.go @@ -56,6 +56,9 @@ type domainMap struct { domains map[string]*domain.Domain } +// Get or create the domain for store. +// TODO decouple domain create from it, it's more clear to create domain explicitly +// before any usage of it. func (dm *domainMap) Get(store kv.Storage) (d *domain.Domain, err error) { dm.mu.Lock() defer dm.mu.Unlock() @@ -91,7 +94,7 @@ func (dm *domainMap) Get(store kv.Storage) (d *domain.Domain, err error) { if injector, ok := store.(schematracker.StorageDDLInjector); ok { ddlInjector = injector.Injector } - err1 = d.Init(ddlLease, sysFactory, ddlInjector) + err1 = d.Init(sysFactory, ddlInjector) if err1 != nil { // If we don't clean it, there are some dirty data when retrying the function of Init. d.Close() @@ -125,12 +128,11 @@ var ( storeBootstrapped = make(map[string]bool) storeBootstrappedLock sync.Mutex - // schemaLease is the time for re-updating remote schema. - // In online DDL, we must wait 2 * SchemaLease time to guarantee - // all servers get the neweset schema. - // Default schema lease time is 1 second, you can change it with a proper time, - // but you must know that too little may cause badly performance degradation. - // For production, you should set a big schema lease, like 300s+. + // schemaLease is lease of info schema, we use this to check whether info schema + // is valid in SchemaChecker. we also use half of it as info schema reload interval. + // Default info schema lease 45s which is init at main, we set it to 1 second + // here for tests. you can change it with a proper time, but you must know that + // too little may cause badly performance degradation. schemaLease = int64(1 * time.Second) // statsLease is the time for reload stats table. diff --git a/pkg/session/tidb_test.go b/pkg/session/tidb_test.go index 8c1cf96be5fff..46760e9a9cf23 100644 --- a/pkg/session/tidb_test.go +++ b/pkg/session/tidb_test.go @@ -21,6 +21,7 @@ import ( "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/meta" "github.com/pingcap/tidb/pkg/parser/ast" + "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/store/mockstore" "github.com/pingcap/tidb/pkg/util" "github.com/stretchr/testify/require" @@ -86,7 +87,7 @@ func TestSchemaCacheSizeVar(t *testing.T) { m = meta.NewMeta(txn) size, isNull, err = m.GetSchemaCacheSize() require.NoError(t, err) - require.Equal(t, size, uint64(0)) + require.Equal(t, size, uint64(variable.DefTiDBSchemaCacheSize)) require.Equal(t, isNull, false) require.NoError(t, txn.Rollback()) } diff --git a/pkg/sessionctx/context.go b/pkg/sessionctx/context.go index c6ce3194aa9da..cb4810b303b5b 100644 --- a/pkg/sessionctx/context.go +++ b/pkg/sessionctx/context.go @@ -71,9 +71,15 @@ type InstancePlanCache interface { // Put puts the key and value into the cache. Put(key string, value, paramTypes any) (succ bool) // Evict evicts some cached values. - Evict() (evicted bool) + Evict() (detailInfo string, numEvicted int) + // Size returns the number of cached values. + Size() int64 // MemUsage returns the total memory usage of this plan cache. MemUsage() int64 + // GetLimits returns the soft and hard memory limits of this plan cache. + GetLimits() (softLimit, hardLimit int64) + // SetLimits sets the soft and hard memory limits of this plan cache. + SetLimits(softLimit, hardLimit int64) } // Context is an interface for transaction and executive args environment. diff --git a/pkg/sessionctx/stmtctx/stmtctx.go b/pkg/sessionctx/stmtctx/stmtctx.go index ffff683a5fca4..4cefdd7f33752 100644 --- a/pkg/sessionctx/stmtctx/stmtctx.go +++ b/pkg/sessionctx/stmtctx/stmtctx.go @@ -194,7 +194,6 @@ type StatementContext struct { contextutil.PlanCacheTracker contextutil.RangeFallbackHandler - BatchCheck bool IgnoreExplainIDSuffix bool MultiSchemaInfo *model.MultiSchemaInfo // If the select statement was like 'select * from t as of timestamp ...' or in a stale read transaction @@ -429,6 +428,11 @@ type StatementContext struct { // MDLRelatedTableIDs is used to store the table IDs that are related to the current MDL lock. MDLRelatedTableIDs map[int64]struct{} + + // ForShareLockEnabledByNoop indicates whether the current statement contains `for share` clause + // and the `for share` execution is enabled by `tidb_enable_noop_functions`, no locks should be + // acquired in this case. + ForShareLockEnabledByNoop bool } // DefaultStmtErrLevels is the default error levels for statement diff --git a/pkg/sessionctx/variable/BUILD.bazel b/pkg/sessionctx/variable/BUILD.bazel index 53ffdbff2d2b4..6b0ad94c47c8c 100644 --- a/pkg/sessionctx/variable/BUILD.bazel +++ b/pkg/sessionctx/variable/BUILD.bazel @@ -21,7 +21,6 @@ go_library( deps = [ "//pkg/config", "//pkg/domain/resourcegroup", - "//pkg/errctx", "//pkg/errno", "//pkg/keyspace", "//pkg/kv", @@ -73,6 +72,7 @@ go_library( "@com_github_docker_go_units//:go-units", "@com_github_pingcap_errors//:errors", "@com_github_pingcap_kvproto//pkg/kvrpcpb", + "@com_github_pingcap_tipb//go-tipb", "@com_github_tikv_client_go_v2//config", "@com_github_tikv_client_go_v2//kv", "@com_github_tikv_client_go_v2//oracle", diff --git a/pkg/sessionctx/variable/session.go b/pkg/sessionctx/variable/session.go index 30f89e6397b44..33196fa68778a 100644 --- a/pkg/sessionctx/variable/session.go +++ b/pkg/sessionctx/variable/session.go @@ -21,6 +21,7 @@ import ( "encoding/binary" "encoding/json" "fmt" + "maps" "math" "math/rand" "net" @@ -35,7 +36,6 @@ import ( "github.com/pingcap/kvproto/pkg/kvrpcpb" "github.com/pingcap/tidb/pkg/config" "github.com/pingcap/tidb/pkg/domain/resourcegroup" - "github.com/pingcap/tidb/pkg/errctx" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/metrics" "github.com/pingcap/tidb/pkg/parser" @@ -66,11 +66,11 @@ import ( "github.com/pingcap/tidb/pkg/util/tiflash" "github.com/pingcap/tidb/pkg/util/tiflashcompute" "github.com/pingcap/tidb/pkg/util/timeutil" + "github.com/pingcap/tipb/go-tipb" tikvstore "github.com/tikv/client-go/v2/kv" "github.com/tikv/client-go/v2/tikv" "github.com/twmb/murmur3" atomic2 "go.uber.org/atomic" - "golang.org/x/exp/maps" ) var ( @@ -462,16 +462,10 @@ func (tc *TransactionContext) GetCurrentSavepoint() TxnCtxNeedToRestore { for k, v := range tc.TableDeltaMap { tableDeltaMap[k] = v.Clone() } - pessimisticLockCache := make(map[string][]byte, len(tc.pessimisticLockCache)) - maps.Copy(pessimisticLockCache, tc.pessimisticLockCache) - CurrentStmtPessimisticLockCache := make(map[string][]byte, len(tc.CurrentStmtPessimisticLockCache)) - maps.Copy(CurrentStmtPessimisticLockCache, tc.CurrentStmtPessimisticLockCache) - cachedTables := make(map[int64]any, len(tc.CachedTables)) - maps.Copy(cachedTables, tc.CachedTables) return TxnCtxNeedToRestore{ TableDeltaMap: tableDeltaMap, - pessimisticLockCache: pessimisticLockCache, - CachedTables: cachedTables, + pessimisticLockCache: maps.Clone(tc.pessimisticLockCache), + CachedTables: maps.Clone(tc.CachedTables), InsertTTLRowsCount: tc.InsertTTLRowsCount, } } @@ -1265,9 +1259,6 @@ type SessionVars struct { // EnableGlobalIndex indicates whether we could create an global index on a partition table or not. EnableGlobalIndex bool - // PresumeKeyNotExists indicates lazy existence checking is enabled. - PresumeKeyNotExists bool - // EnableParallelApply indicates that whether to use parallel apply. EnableParallelApply bool @@ -1442,9 +1433,6 @@ type SessionVars struct { // PreparedPlanCacheSize controls the size of prepared plan cache. PreparedPlanCacheSize uint64 - // EnableInstancePlanCache indicates whether to enable instance plan cache. - EnableInstancePlanCache bool - // PreparedPlanCacheMonitor indicates whether to enable prepared plan cache monitor. EnablePreparedPlanCacheMemoryMonitor bool @@ -1658,8 +1646,15 @@ type SessionVars struct { // GroupConcatMaxLen represents the maximum length of the result of GROUP_CONCAT. GroupConcatMaxLen uint64 + // TiFlashPreAggMode indicates the policy of pre aggregation. + TiFlashPreAggMode string + // EnableLazyCursorFetch defines whether to enable the lazy cursor fetch. EnableLazyCursorFetch bool + + // SharedLockPromotion indicates whether the `select for lock` statements would be executed as the + // `select for update` statements which do acquire pessimsitic locks. + SharedLockPromotion bool } // GetOptimizerFixControlMap returns the specified value of the optimizer fix control. @@ -2761,14 +2756,11 @@ func (s *SessionVars) GetDivPrecisionIncrement() int { return s.DivPrecisionIncrement } -// LazyCheckKeyNotExists returns if we can lazy check key not exists. -func (s *SessionVars) LazyCheckKeyNotExists() bool { - return s.PresumeKeyNotExists || (s.TxnCtx != nil && s.TxnCtx.IsPessimistic && s.StmtCtx.ErrGroupLevel(errctx.ErrGroupDupKey) == errctx.LevelError) -} - // GetTemporaryTable returns a TempTable by tableInfo. func (s *SessionVars) GetTemporaryTable(tblInfo *model.TableInfo) tableutil.TempTable { if tblInfo.TempTableType != model.TempTableNone { + s.TxnCtxMu.Lock() + defer s.TxnCtxMu.Unlock() if s.TxnCtx.TemporaryTables == nil { s.TxnCtx.TemporaryTables = make(map[int64]tableutil.TempTable) } @@ -2880,12 +2872,10 @@ type TableDelta struct { // Clone returns a cloned TableDelta. func (td TableDelta) Clone() TableDelta { - colSize := make(map[int64]int64, len(td.ColSize)) - maps.Copy(colSize, td.ColSize) return TableDelta{ Delta: td.Delta, Count: td.Count, - ColSize: colSize, + ColSize: maps.Clone(td.ColSize), InitTime: td.InitTime, TableID: td.TableID, } @@ -3914,15 +3904,55 @@ func (s *SessionVars) GetOptObjective() string { return s.OptObjective } +// ForcePreAggStr means 1st hashagg will be pre aggregated. +// AutoStr means TiFlash will decide which policy for 1st hashagg. +// ForceStreamingStr means 1st hashagg will for pass through all blocks. +const ( + ForcePreAggStr = "force_preagg" + AutoStr = "auto" + ForceStreamingStr = "force_streaming" +) + +// ValidTiFlashPreAggMode returns all valid modes. +func ValidTiFlashPreAggMode() string { + return ForcePreAggStr + ", " + AutoStr + ", " + ForceStreamingStr +} + +// ToTiPBTiFlashPreAggMode return the corresponding tipb value of preaggregation mode. +func ToTiPBTiFlashPreAggMode(mode string) (tipb.TiFlashPreAggMode, bool) { + switch mode { + case ForcePreAggStr: + return tipb.TiFlashPreAggMode_ForcePreAgg, true + case ForceStreamingStr: + return tipb.TiFlashPreAggMode_ForceStreaming, true + case AutoStr: + return tipb.TiFlashPreAggMode_Auto, true + default: + return tipb.TiFlashPreAggMode_ForcePreAgg, false + } +} + // UseLowResolutionTSO indicates whether low resolution tso could be used for execution. +// After `tidb_low_resolution_tso` supports the global scope, this variable is expected to only affect +// user sessions and not impact internal background sessions and tasks. +// Currently, one of the problems is that the determination of whether a session is an internal task +// session within TiDB is quite inconsistent and chaotic, posing risks. Some internal sessions rely on +// upper-level users correctly using `ExecuteInternal` or `ExecuteRestrictedSQL` for assurance. +// Additionally, the BR code also contains some session-related encapsulation and usage. +// +// TODO: There needs to be a more comprehensive and unified entry point to ensure that all internal +// sessions and global user sessions/variables are isolated and do not affect each other. func (s *SessionVars) UseLowResolutionTSO() bool { - return !s.InRestrictedSQL && s.lowResolutionTSO + return !s.InRestrictedSQL && s.lowResolutionTSO && s.ConnectionID > 0 } // PessimisticLockEligible indicates whether pessimistic lock should not be ignored for the current // statement execution. There are cases the `for update` clause should not take effect, like autocommit // statements with “pessimistic-auto-commit disabled. func (s *SessionVars) PessimisticLockEligible() bool { + if s.StmtCtx.ForShareLockEnabledByNoop { + return false + } if !s.IsAutocommit() || s.InTxn() || (config.GetGlobalConfig(). PessimisticTxn.PessimisticAutoCommit.Load() && !s.BulkDMLEnabled) { return true diff --git a/pkg/sessionctx/variable/sysvar.go b/pkg/sessionctx/variable/sysvar.go index 4e79ab3ab2325..66a1d685da157 100644 --- a/pkg/sessionctx/variable/sysvar.go +++ b/pkg/sessionctx/variable/sysvar.go @@ -317,7 +317,7 @@ var defaultSysVars = []*SysVar{ s.WaitSplitRegionTimeout = uint64(tidbOptPositiveInt32(val, DefWaitSplitRegionTimeout)) return nil }}, - {Scope: ScopeSession, Name: TiDBLowResolutionTSO, Value: Off, Type: TypeBool, SetSession: func(s *SessionVars, val string) error { + {Scope: ScopeGlobal | ScopeSession, Name: TiDBLowResolutionTSO, Value: Off, Type: TypeBool, SetSession: func(s *SessionVars, val string) error { s.lowResolutionTSO = TiDBOptOn(val) return nil }}, @@ -758,11 +758,11 @@ var defaultSysVars = []*SysVar{ SetDDLFlashbackConcurrency(int32(tidbOptPositiveInt32(val, DefTiDBDDLFlashbackConcurrency))) return nil }}, - {Scope: ScopeGlobal, Name: TiDBDDLReorgWorkerCount, Value: strconv.Itoa(DefTiDBDDLReorgWorkerCount), Type: TypeUnsigned, MinValue: 1, MaxValue: MaxConfigurableConcurrency, SetGlobal: func(_ context.Context, s *SessionVars, val string) error { + {Scope: ScopeGlobal | ScopeSession, Name: TiDBDDLReorgWorkerCount, Value: strconv.Itoa(DefTiDBDDLReorgWorkerCount), Type: TypeUnsigned, MinValue: 1, MaxValue: MaxConfigurableConcurrency, SetGlobal: func(_ context.Context, s *SessionVars, val string) error { SetDDLReorgWorkerCounter(int32(tidbOptPositiveInt32(val, DefTiDBDDLReorgWorkerCount))) return nil }}, - {Scope: ScopeGlobal, Name: TiDBDDLReorgBatchSize, Value: strconv.Itoa(DefTiDBDDLReorgBatchSize), Type: TypeUnsigned, MinValue: int64(MinDDLReorgBatchSize), MaxValue: uint64(MaxDDLReorgBatchSize), SetGlobal: func(_ context.Context, s *SessionVars, val string) error { + {Scope: ScopeGlobal | ScopeSession, Name: TiDBDDLReorgBatchSize, Value: strconv.Itoa(DefTiDBDDLReorgBatchSize), Type: TypeUnsigned, MinValue: int64(MinDDLReorgBatchSize), MaxValue: uint64(MaxDDLReorgBatchSize), SetGlobal: func(_ context.Context, s *SessionVars, val string) error { SetDDLReorgBatchSize(int32(tidbOptPositiveInt32(val, DefTiDBDDLReorgBatchSize))) return nil }}, @@ -823,7 +823,11 @@ var defaultSysVars = []*SysVar{ on := TiDBOptOn(val) // For user initiated SET GLOBAL, also change the value of TiDBSuperReadOnly if on && s.StmtCtx.StmtType == "Set" { - err := s.GlobalVarsAccessor.SetGlobalSysVar(context.Background(), TiDBSuperReadOnly, "ON") + err := s.GlobalVarsAccessor.SetGlobalSysVarOnly(context.Background(), TiDBSuperReadOnly, "ON", false) + if err != nil { + return err + } + err = GetSysVar(TiDBSuperReadOnly).SetGlobal(context.Background(), s, "ON") if err != nil { return err } @@ -1336,6 +1340,44 @@ var defaultSysVars = []*SysVar{ } return err }}, + {Scope: ScopeGlobal, Name: TiDBEnableInstancePlanCache, Value: Off, Type: TypeBool, + GetGlobal: func(_ context.Context, s *SessionVars) (string, error) { + return BoolToOnOff(EnableInstancePlanCache.Load()), nil + }, + SetGlobal: func(_ context.Context, s *SessionVars, val string) error { + EnableInstancePlanCache.Store(TiDBOptOn(val)) + return nil + }}, + {Scope: ScopeGlobal, Name: TiDBInstancePlanCacheTargetMemSize, Value: strconv.Itoa(int(DefTiDBInstancePlanCacheTargetMemSize)), Type: TypeStr, + GetGlobal: func(_ context.Context, s *SessionVars) (string, error) { + return strconv.FormatInt(InstancePlanCacheTargetMemSize.Load(), 10), nil + }, + SetGlobal: func(_ context.Context, s *SessionVars, val string) error { + v, str := parseByteSize(val) + if str == "" { + v = uint64(TidbOptInt64(val, int64(DefTiDBInstancePlanCacheTargetMemSize))) + } + if v > uint64(InstancePlanCacheMaxMemSize.Load()) { + return errors.New("tidb_instance_plan_cache_target_mem_size must be less than tidb_instance_plan_cache_max_mem_size") + } + InstancePlanCacheTargetMemSize.Store(int64(v)) + return nil + }}, + {Scope: ScopeGlobal, Name: TiDBInstancePlanCacheMaxMemSize, Value: strconv.Itoa(int(DefTiDBInstancePlanCacheMaxMemSize)), Type: TypeStr, + GetGlobal: func(_ context.Context, s *SessionVars) (string, error) { + return strconv.FormatInt(InstancePlanCacheMaxMemSize.Load(), 10), nil + }, + SetGlobal: func(_ context.Context, s *SessionVars, val string) error { + v, str := parseByteSize(val) + if str == "" { + v = uint64(TidbOptInt64(val, int64(DefTiDBInstancePlanCacheTargetMemSize))) + } + if v < uint64(InstancePlanCacheTargetMemSize.Load()) { + return errors.New("tidb_instance_plan_cache_max_mem_size must be greater than tidb_instance_plan_cache_target_mem_size") + } + InstancePlanCacheMaxMemSize.Store(int64(v)) + return nil + }}, {Scope: ScopeGlobal, Name: TiDBMemOOMAction, Value: DefTiDBMemOOMAction, PossibleValues: []string{"CANCEL", "LOG"}, Type: TypeEnum, GetGlobal: func(_ context.Context, s *SessionVars) (string, error) { return OOMAction.Load(), nil @@ -1356,6 +1398,18 @@ var defaultSysVars = []*SysVar{ return err }, }, + {Scope: ScopeGlobal, Name: TiDBAutoAnalyzeConcurrency, Value: strconv.Itoa(DefTiDBAutoAnalyzeConcurrency), Type: TypeInt, MinValue: 0, MaxValue: math.MaxInt32, + GetGlobal: func(_ context.Context, s *SessionVars) (string, error) { + return string(AutoAnlayzeConcurrency.Load()), nil + }, + SetGlobal: func(_ context.Context, s *SessionVars, val string) error { + num, err := strconv.ParseInt(val, 10, 64) + if err == nil { + AutoAnlayzeConcurrency.Store(int32(num)) + } + return err + }, + }, {Scope: ScopeGlobal, Name: TiDBEnableMDL, Value: BoolToOnOff(DefTiDBEnableMDL), Type: TypeBool, SetGlobal: func(_ context.Context, vars *SessionVars, val string) error { if EnableMDL.Load() != TiDBOptOn(val) { err := SwitchMDL(TiDBOptOn(val)) @@ -1377,10 +1431,7 @@ var defaultSysVars = []*SysVar{ }}, {Scope: ScopeGlobal, Name: TiDBEnableFastCreateTable, Value: BoolToOnOff(DefTiDBEnableFastCreateTable), Type: TypeBool, SetGlobal: func(_ context.Context, s *SessionVars, val string) error { if EnableFastCreateTable.Load() != TiDBOptOn(val) { - err := SwitchFastCreateTable(TiDBOptOn(val)) - if err != nil { - return err - } + EnableFastCreateTable.Store(TiDBOptOn(val)) } return nil }, GetGlobal: func(_ context.Context, s *SessionVars) (string, error) { @@ -2593,11 +2644,17 @@ var defaultSysVars = []*SysVar{ s.OptimizerUseInvisibleIndexes = TiDBOptOn(val) return nil }}, - {Scope: ScopeGlobal | ScopeSession, Name: TiDBAnalyzePartitionConcurrency, Value: strconv.FormatInt(DefTiDBAnalyzePartitionConcurrency, 10), - MinValue: 1, MaxValue: uint64(config.GetGlobalConfig().Performance.AnalyzePartitionConcurrencyQuota), SetSession: func(s *SessionVars, val string) error { + {Scope: ScopeGlobal | ScopeSession, + Name: TiDBAnalyzePartitionConcurrency, + Value: strconv.FormatInt(DefTiDBAnalyzePartitionConcurrency, 10), + Type: TypeInt, + MinValue: 1, + MaxValue: 128, + SetSession: func(s *SessionVars, val string) error { s.AnalyzePartitionConcurrency = int(TidbOptInt64(val, DefTiDBAnalyzePartitionConcurrency)) return nil - }}, + }, + }, { Scope: ScopeGlobal | ScopeSession, Name: TiDBMergePartitionStatsConcurrency, Value: strconv.FormatInt(DefTiDBMergePartitionStatsConcurrency, 10), Type: TypeInt, MinValue: 1, MaxValue: MaxConfigurableConcurrency, SetSession: func(s *SessionVars, val string) error { @@ -3256,10 +3313,31 @@ var defaultSysVars = []*SysVar{ }, IsHintUpdatableVerified: true, }, + {Scope: ScopeGlobal | ScopeSession, Name: TiFlashHashAggPreAggMode, Value: DefTiFlashPreAggMode, Type: TypeStr, + Validation: func(_ *SessionVars, normalizedValue string, originalValue string, _ ScopeFlag) (string, error) { + if _, ok := ToTiPBTiFlashPreAggMode(normalizedValue); ok { + return normalizedValue, nil + } + errMsg := fmt.Sprintf("incorrect value: `%s`. %s options: %s", + originalValue, TiFlashHashAggPreAggMode, ValidTiFlashPreAggMode()) + return normalizedValue, errors.New(errMsg) + }, + SetSession: func(s *SessionVars, val string) error { + s.TiFlashPreAggMode = val + return nil + }, + }, {Scope: ScopeGlobal | ScopeSession, Name: TiDBEnableLazyCursorFetch, Value: BoolToOnOff(DefTiDBEnableLazyCursorFetch), Type: TypeBool, SetSession: func(s *SessionVars, val string) error { s.EnableLazyCursorFetch = TiDBOptOn(val) return nil }}, + {Scope: ScopeGlobal | ScopeSession, Name: TiDBEnableSharedLockPromotion, Value: BoolToOnOff(DefTiDBEnableSharedLockPromotion), Type: TypeBool, SetSession: func(s *SessionVars, val string) error { + if s.NoopFuncsMode != OffInt && TiDBOptOn(val) { + logutil.BgLogger().Warn("tidb_enable_shared_lock_promotion set to on would override tidb_enable_noop_functions on") + } + s.SharedLockPromotion = TiDBOptOn(val) + return nil + }}, } // GlobalSystemVariableInitialValue gets the default value for a system variable including ones that are dynamically set (e.g. based on the store) diff --git a/pkg/sessionctx/variable/tidb_vars.go b/pkg/sessionctx/variable/tidb_vars.go index 2dc5792824058..1f7518d9405ec 100644 --- a/pkg/sessionctx/variable/tidb_vars.go +++ b/pkg/sessionctx/variable/tidb_vars.go @@ -286,11 +286,15 @@ const ( // TiDB system variable names that both in session and global scope. const ( - // TiDBBuildStatsConcurrency is used to speed up the ANALYZE statement, when a table has multiple indices, - // those indices can be scanned concurrently, with the cost of higher system performance impact. + // TiDBBuildStatsConcurrency specifies the number of concurrent workers used for analyzing tables or partitions. + // When multiple tables or partitions are specified in the analyze statement, TiDB will process them concurrently. + // Additionally, this setting controls the concurrency for building NDV (Number of Distinct Values) for special indexes, + // such as generated columns composed indexes. TiDBBuildStatsConcurrency = "tidb_build_stats_concurrency" - // TiDBBuildSamplingStatsConcurrency is used to control the concurrency of build sampling stats task. + // TiDBBuildSamplingStatsConcurrency is used to control the concurrency of building stats using sampling. + // 1. The number of concurrent workers to merge FMSketches and Sample Data from different regions. + // 2. The number of concurrent workers to build TopN and Histogram concurrently. TiDBBuildSamplingStatsConcurrency = "tidb_build_sampling_stats_concurrency" // TiDBDistSQLScanConcurrency is used to set the concurrency of a distsql scan task. @@ -299,7 +303,8 @@ const ( // If the query has a LIMIT clause, high concurrency makes the system do much more work than needed. TiDBDistSQLScanConcurrency = "tidb_distsql_scan_concurrency" - // TiDBAnalyzeDistSQLScanConcurrency is used to set the concurrency of a distsql scan task for analyze statement. + // TiDBAnalyzeDistSQLScanConcurrency is the number of concurrent workers to scan regions to collect statistics (FMSketch, Samples). + // For auto analyze, the value is controlled by tidb_sysproc_scan_concurrency variable. TiDBAnalyzeDistSQLScanConcurrency = "tidb_analyze_distsql_scan_concurrency" // TiDBOptInSubqToJoinAndAgg is used to enable/disable the optimizer rule of rewriting IN subquery. @@ -839,6 +844,14 @@ const ( // TiDBSessionPlanCacheSize controls the size of session plan cache. TiDBSessionPlanCacheSize = "tidb_session_plan_cache_size" + // TiDBEnableInstancePlanCache indicates whether to enable instance plan cache. + // If this variable is false, session-level plan cache will be used. + TiDBEnableInstancePlanCache = "tidb_enable_instance_plan_cache" + // TiDBInstancePlanCacheTargetMemSize indicates the target memory size of instance plan cache. + TiDBInstancePlanCacheTargetMemSize = "tidb_instance_plan_cache_target_mem_size" + // TiDBInstancePlanCacheMaxMemSize indicates the maximum memory size of instance plan cache. + TiDBInstancePlanCacheMaxMemSize = "tidb_instance_plan_cache_max_mem_size" + // TiDBConstraintCheckInPlacePessimistic controls whether to skip certain kinds of pessimistic locks. TiDBConstraintCheckInPlacePessimistic = "tidb_constraint_check_in_place_pessimistic" @@ -855,7 +868,7 @@ const ( TiDBOptAdvancedJoinHint = "tidb_opt_advanced_join_hint" // TiDBOptUseInvisibleIndexes indicates whether to use invisible indexes. TiDBOptUseInvisibleIndexes = "tidb_opt_use_invisible_indexes" - // TiDBAnalyzePartitionConcurrency indicates concurrency for save/read partitions stats in Analyze + // TiDBAnalyzePartitionConcurrency is the number of concurrent workers to save statistics to the system tables. TiDBAnalyzePartitionConcurrency = "tidb_analyze_partition_concurrency" // TiDBMergePartitionStatsConcurrency indicates the concurrency when merge partition stats into global stats TiDBMergePartitionStatsConcurrency = "tidb_merge_partition_stats_concurrency" @@ -953,6 +966,10 @@ const ( // DivPrecisionIncrement indicates the number of digits by which to increase the scale of the result of // division operations performed with the / operator. DivPrecisionIncrement = "div_precision_increment" + + // TiDBEnableSharedLockPromotion indicates whether the `select for share` statement would be executed + // as `select for update` statements which do acquire pessimistic locks. + TiDBEnableSharedLockPromotion = "tidb_enable_shared_lock_promotion" ) // TiDB vars that have only global scope @@ -1017,6 +1034,8 @@ const ( // TiDBMaxAutoAnalyzeTime is the max time that auto analyze can run. If auto analyze runs longer than the value, it // will be killed. 0 indicates that there is no time limit. TiDBMaxAutoAnalyzeTime = "tidb_max_auto_analyze_time" + // TiDBAutoAnalyzeConcurrency is the concurrency of the auto analyze + TiDBAutoAnalyzeConcurrency = "tidb_auto_analyze_concurrency" // TiDBEnableDistTask indicates whether to enable the distributed execute background tasks(For example DDL, Import etc). TiDBEnableDistTask = "tidb_enable_dist_task" // TiDBEnableFastCreateTable indicates whether to enable the fast create table feature. @@ -1034,9 +1053,11 @@ const ( TiDBDDLDiskQuota = "tidb_ddl_disk_quota" // TiDBCloudStorageURI used to set a cloud storage uri for ddl add index and import into. TiDBCloudStorageURI = "tidb_cloud_storage_uri" - // TiDBAutoBuildStatsConcurrency is used to set the build concurrency of auto-analyze. + // TiDBAutoBuildStatsConcurrency is the number of concurrent workers to automatically analyze tables or partitions. + // It is very similar to the `tidb_build_stats_concurrency` variable, but it is used for the auto analyze feature. TiDBAutoBuildStatsConcurrency = "tidb_auto_build_stats_concurrency" // TiDBSysProcScanConcurrency is used to set the scan concurrency of for backend system processes, like auto-analyze. + // For now, it controls the number of concurrent workers to scan regions to collect statistics (FMSketch, Samples). TiDBSysProcScanConcurrency = "tidb_sysproc_scan_concurrency" // TiDBServerMemoryLimit indicates the memory limit of the tidb-server instance. TiDBServerMemoryLimit = "tidb_server_memory_limit" @@ -1171,6 +1192,8 @@ const ( // The value can be STANDARD, BULK. // Currently, the BULK mode only affects auto-committed DML. TiDBDMLType = "tidb_dml_type" + // TiFlashHashAggPreAggMode indicates the policy of 1st hashagg. + TiFlashHashAggPreAggMode = "tiflash_hashagg_preaggregation_mode" // TiDBEnableLazyCursorFetch defines whether to enable the lazy cursor fetch. If it's `OFF`, all results of // of a cursor will be stored in the tidb node in `EXECUTE` command. TiDBEnableLazyCursorFetch = "tidb_enable_lazy_cursor_fetch" @@ -1386,6 +1409,7 @@ const ( DefTiDBAnalyzeColumnOptions = "PREDICATE" DefTiDBMemOOMAction = "CANCEL" DefTiDBMaxAutoAnalyzeTime = 12 * 60 * 60 + DefTiDBAutoAnalyzeConcurrency = 2 DefTiDBEnablePrepPlanCache = true DefTiDBPrepPlanCacheSize = 100 DefTiDBSessionPlanCacheSize = 100 @@ -1415,6 +1439,8 @@ const ( DefTiDBEnableNonPreparedPlanCacheForDML = false DefTiDBNonPreparedPlanCacheSize = 100 DefTiDBPlanCacheMaxPlanSize = 2 * size.MB + DefTiDBInstancePlanCacheTargetMemSize = 100 * size.MB + DefTiDBInstancePlanCacheMaxMemSize = 120 * size.MB // MaxDDLReorgBatchSize is exported for testing. MaxDDLReorgBatchSize int32 = 10240 MinDDLReorgBatchSize int32 = 32 @@ -1500,14 +1526,16 @@ const ( DefTiDBSchemaVersionCacheLimit = 16 DefTiDBIdleTransactionTimeout = 0 DefTiDBTxnEntrySizeLimit = 0 - DefTiDBSchemaCacheSize = 0 + DefTiDBSchemaCacheSize = 512 * 1024 * 1024 DefTiDBLowResolutionTSOUpdateInterval = 2000 DefDivPrecisionIncrement = 4 DefTiDBDMLType = "STANDARD" DefGroupConcatMaxLen = uint64(1024) DefDefaultWeekFormat = "0" + DefTiFlashPreAggMode = ForcePreAggStr DefTiDBEnableLazyCursorFetch = false DefOptEnableProjectionPushDown = true + DefTiDBEnableSharedLockPromotion = false ) // Process global variables. @@ -1560,12 +1588,16 @@ var ( MaxAutoAnalyzeTime = atomic.NewInt64(DefTiDBMaxAutoAnalyzeTime) // variables for plan cache PreparedPlanCacheMemoryGuardRatio = atomic.NewFloat64(DefTiDBPrepPlanCacheMemoryGuardRatio) + EnableInstancePlanCache = atomic.NewBool(false) + InstancePlanCacheTargetMemSize = atomic.NewInt64(int64(DefTiDBInstancePlanCacheTargetMemSize)) + InstancePlanCacheMaxMemSize = atomic.NewInt64(int64(DefTiDBInstancePlanCacheMaxMemSize)) EnableDistTask = atomic.NewBool(DefTiDBEnableDistTask) EnableFastCreateTable = atomic.NewBool(DefTiDBEnableFastCreateTable) DDLForce2Queue = atomic.NewBool(false) EnableNoopVariables = atomic.NewBool(DefTiDBEnableNoopVariables) EnableMDL = atomic.NewBool(false) AutoAnalyzePartitionBatchSize = atomic.NewInt64(DefTiDBAutoAnalyzePartitionBatchSize) + AutoAnlayzeConcurrency = atomic.NewInt32(DefTiDBAutoAnalyzeConcurrency) // EnableFastReorg indicates whether to use lightning to enhance DDL reorg performance. EnableFastReorg = atomic.NewBool(DefTiDBEnableFastReorg) // DDLDiskQuota is the temporary variable for set disk quota for lightning diff --git a/pkg/sessionctx/variable/varsutil.go b/pkg/sessionctx/variable/varsutil.go index df239b5b9cf4a..0e3ae63162417 100644 --- a/pkg/sessionctx/variable/varsutil.go +++ b/pkg/sessionctx/variable/varsutil.go @@ -409,15 +409,27 @@ func parseByteSize(s string) (byteSize uint64, normalizedStr string) { if n, err := fmt.Sscanf(s, "%dKB%s", &byteSize, &endString); n == 1 && err == io.EOF { return byteSize << 10, fmt.Sprintf("%dKB", byteSize) } + if n, err := fmt.Sscanf(s, "%dKiB%s", &byteSize, &endString); n == 1 && err == io.EOF { + return byteSize << 10, fmt.Sprintf("%dKiB", byteSize) + } if n, err := fmt.Sscanf(s, "%dMB%s", &byteSize, &endString); n == 1 && err == io.EOF { return byteSize << 20, fmt.Sprintf("%dMB", byteSize) } + if n, err := fmt.Sscanf(s, "%dMiB%s", &byteSize, &endString); n == 1 && err == io.EOF { + return byteSize << 20, fmt.Sprintf("%dMiB", byteSize) + } if n, err := fmt.Sscanf(s, "%dGB%s", &byteSize, &endString); n == 1 && err == io.EOF { return byteSize << 30, fmt.Sprintf("%dGB", byteSize) } + if n, err := fmt.Sscanf(s, "%dGiB%s", &byteSize, &endString); n == 1 && err == io.EOF { + return byteSize << 30, fmt.Sprintf("%dGiB", byteSize) + } if n, err := fmt.Sscanf(s, "%dTB%s", &byteSize, &endString); n == 1 && err == io.EOF { return byteSize << 40, fmt.Sprintf("%dTB", byteSize) } + if n, err := fmt.Sscanf(s, "%dTiB%s", &byteSize, &endString); n == 1 && err == io.EOF { + return byteSize << 40, fmt.Sprintf("%dTiB", byteSize) + } return 0, "" } @@ -590,12 +602,21 @@ func ParseAnalyzeSkipColumnTypes(val string) map[string]struct{} { return skipTypes } +var ( + // SchemaCacheSizeLowerBound will adjust the schema cache size to this value if + // it is lower than this value. + SchemaCacheSizeLowerBound uint64 = 512 * units.MiB + // SchemaCacheSizeLowerBoundStr is the string representation of + // SchemaCacheSizeLowerBound. + SchemaCacheSizeLowerBoundStr = "512MB" +) + func parseSchemaCacheSize(s *SessionVars, normalizedValue string, originalValue string) (byteSize uint64, normalizedStr string, err error) { defer func() { - if err == nil && byteSize > 0 && byteSize < (512*units.MiB) { + if err == nil && byteSize > 0 && byteSize < SchemaCacheSizeLowerBound { s.StmtCtx.AppendWarning(ErrTruncatedWrongValue.FastGenByArgs(TiDBSchemaCacheSize, originalValue)) - byteSize = 512 * units.MiB - normalizedStr = "512MB" + byteSize = SchemaCacheSizeLowerBound + normalizedStr = SchemaCacheSizeLowerBoundStr } if err == nil && byteSize > math.MaxInt64 { s.StmtCtx.AppendWarning(ErrTruncatedWrongValue.FastGenByArgs(TiDBSchemaCacheSize, originalValue)) diff --git a/pkg/sessionctx/variable/varsutil_test.go b/pkg/sessionctx/variable/varsutil_test.go index 3ba450378d65b..0592907bd9752 100644 --- a/pkg/sessionctx/variable/varsutil_test.go +++ b/pkg/sessionctx/variable/varsutil_test.go @@ -251,9 +251,6 @@ func TestVarsutil(t *testing.T) { require.NoError(t, err) require.Equal(t, false, v.OptimizerEnableNewOnlyFullGroupByCheck) - err = v.SetSystemVar(TiDBDDLReorgWorkerCount, "4") // wrong scope global only - require.True(t, terror.ErrorEqual(err, errGlobalVariable)) - err = v.SetSystemVar(TiDBRetryLimit, "3") require.NoError(t, err) val, err = v.GetSessionOrGlobalSystemVar(context.Background(), TiDBRetryLimit) diff --git a/pkg/statistics/BUILD.bazel b/pkg/statistics/BUILD.bazel index 4e0941622d532..dc4fda20fe81f 100644 --- a/pkg/statistics/BUILD.bazel +++ b/pkg/statistics/BUILD.bazel @@ -89,7 +89,6 @@ go_test( "//pkg/parser/mysql", "//pkg/sessionctx", "//pkg/sessionctx/stmtctx", - "//pkg/statistics/handle/autoanalyze/exec", "//pkg/testkit", "//pkg/testkit/analyzehelper", "//pkg/testkit/testdata", diff --git a/pkg/statistics/analyze_jobs.go b/pkg/statistics/analyze_jobs.go index 7207fb62830e4..5802e8dccf926 100644 --- a/pkg/statistics/analyze_jobs.go +++ b/pkg/statistics/analyze_jobs.go @@ -31,6 +31,16 @@ const ( AnalyzeFailed = "failed" ) +// JobType is the type of the analyze job. +type JobType int + +const ( + // TableAnalysisJob means the job is to analyze a table or partition. + TableAnalysisJob JobType = iota + 1 + // GlobalStatsMergeJob means the job is to merge the global-level stats. + GlobalStatsMergeJob +) + const ( // maxDelta is the threshold of delta count. If the delta count reaches this threshold, it will be dumped into // mysql.analyze_jobs. diff --git a/pkg/statistics/handle/BUILD.bazel b/pkg/statistics/handle/BUILD.bazel index be127c465623e..59442c07e0c70 100644 --- a/pkg/statistics/handle/BUILD.bazel +++ b/pkg/statistics/handle/BUILD.bazel @@ -33,6 +33,7 @@ go_library( "//pkg/statistics/handle/usage", "//pkg/statistics/handle/util", "//pkg/types", + "//pkg/util", "//pkg/util/chunk", "//pkg/util/logutil", "//pkg/util/memory", diff --git a/pkg/statistics/handle/autoanalyze/BUILD.bazel b/pkg/statistics/handle/autoanalyze/BUILD.bazel index 34dabaa1ed867..9e508d61f20fa 100644 --- a/pkg/statistics/handle/autoanalyze/BUILD.bazel +++ b/pkg/statistics/handle/autoanalyze/BUILD.bazel @@ -46,7 +46,6 @@ go_test( "//pkg/sessionctx", "//pkg/sessionctx/variable", "//pkg/statistics", - "//pkg/statistics/handle/autoanalyze/exec", "//pkg/statistics/handle/util", "//pkg/statistics/handle/util/test", "//pkg/testkit", diff --git a/pkg/statistics/handle/autoanalyze/autoanalyze.go b/pkg/statistics/handle/autoanalyze/autoanalyze.go index f4f835bffabcf..0f36cc3740a5f 100644 --- a/pkg/statistics/handle/autoanalyze/autoanalyze.go +++ b/pkg/statistics/handle/autoanalyze/autoanalyze.go @@ -70,6 +70,36 @@ func (sa *statsAnalyze) InsertAnalyzeJob(job *statistics.AnalyzeJob, instance st }) } +func (sa *statsAnalyze) StartAnalyzeJob(job *statistics.AnalyzeJob) { + err := statsutil.CallWithSCtx(sa.statsHandle.SPool(), func(sctx sessionctx.Context) error { + startAnalyzeJob(sctx, job) + return nil + }) + if err != nil { + statslogutil.StatsLogger().Warn("failed to start analyze job", zap.Error(err)) + } +} + +func (sa *statsAnalyze) UpdateAnalyzeJobProgress(job *statistics.AnalyzeJob, rowCount int64) { + err := statsutil.CallWithSCtx(sa.statsHandle.SPool(), func(sctx sessionctx.Context) error { + updateAnalyzeJobProgress(sctx, job, rowCount) + return nil + }) + if err != nil { + statslogutil.StatsLogger().Warn("failed to update analyze job progress", zap.Error(err)) + } +} + +func (sa *statsAnalyze) FinishAnalyzeJob(job *statistics.AnalyzeJob, failReason error, analyzeType statistics.JobType) { + err := statsutil.CallWithSCtx(sa.statsHandle.SPool(), func(sctx sessionctx.Context) error { + finishAnalyzeJob(sctx, job, failReason, analyzeType) + return nil + }) + if err != nil { + statslogutil.StatsLogger().Warn("failed to finish analyze job", zap.Error(err)) + } +} + // DeleteAnalyzeJobs deletes the analyze jobs whose update time is earlier than updateTime. func (sa *statsAnalyze) DeleteAnalyzeJobs(updateTime time.Time) error { return statsutil.CallWithSCtx(sa.statsHandle.SPool(), func(sctx sessionctx.Context) error { @@ -288,21 +318,11 @@ func HandleAutoAnalyze( parameters := exec.GetAutoAnalyzeParameters(sctx) autoAnalyzeRatio := exec.ParseAutoAnalyzeRatio(parameters[variable.TiDBAutoAnalyzeRatio]) - // Determine the time window for auto-analysis and verify if the current time falls within this range. - start, end, err := exec.ParseAutoAnalysisWindow( - parameters[variable.TiDBAutoAnalyzeStartTime], - parameters[variable.TiDBAutoAnalyzeEndTime], - ) - if err != nil { - statslogutil.StatsLogger().Error( - "parse auto analyze period failed", - zap.Error(err), - ) - return false - } - if !timeutil.WithinDayTimePeriod(start, end, time.Now()) { + start, end, ok := checkAutoAnalyzeWindow(parameters) + if !ok { return false } + pruneMode := variable.PartitionPruneMode(sctx.GetSessionVars().PartitionPruneMode.Load()) return RandomPickOneTableAndTryAutoAnalyze( @@ -316,6 +336,32 @@ func HandleAutoAnalyze( ) } +// CheckAutoAnalyzeWindow determine the time window for auto-analysis and verify if the current time falls within this range. +// parameters is a map of auto analyze parameters. it is from GetAutoAnalyzeParameters. +func CheckAutoAnalyzeWindow(sctx sessionctx.Context) bool { + parameters := exec.GetAutoAnalyzeParameters(sctx) + _, _, ok := checkAutoAnalyzeWindow(parameters) + return ok +} + +func checkAutoAnalyzeWindow(parameters map[string]string) (time.Time, time.Time, bool) { + start, end, err := exec.ParseAutoAnalysisWindow( + parameters[variable.TiDBAutoAnalyzeStartTime], + parameters[variable.TiDBAutoAnalyzeEndTime], + ) + if err != nil { + statslogutil.StatsLogger().Error( + "parse auto analyze period failed", + zap.Error(err), + ) + return start, end, false + } + if !timeutil.WithinDayTimePeriod(start, end, time.Now()) { + return start, end, false + } + return start, end, true +} + // RandomPickOneTableAndTryAutoAnalyze randomly picks one table and tries to analyze it. // 1. If the table is not analyzed, analyze it. // 2. If the table is analyzed, analyze it when "tbl.ModifyCount/tbl.Count > autoAnalyzeRatio". @@ -461,7 +507,7 @@ func tryAutoAnalyzeTable( // Pseudo statistics can be created by the optimizer, so we need to double check it. // 2. If the table is too small, we don't want to waste time to analyze it. // Leave the opportunity to other bigger tables. - if statsTbl == nil || statsTbl.Pseudo || statsTbl.RealtimeCount < exec.AutoAnalyzeMinCnt { + if statsTbl == nil || statsTbl.Pseudo || statsTbl.RealtimeCount < statistics.AutoAnalyzeMinCnt { return false } @@ -558,7 +604,7 @@ func tryAutoAnalyzePartitionTableInDynamicMode( // Pseudo statistics can be created by the optimizer, so we need to double check it. // 2. If the table is too small, we don't want to waste time to analyze it. // Leave the opportunity to other bigger tables. - if partitionStats == nil || partitionStats.Pseudo || partitionStats.RealtimeCount < exec.AutoAnalyzeMinCnt { + if partitionStats == nil || partitionStats.Pseudo || partitionStats.RealtimeCount < statistics.AutoAnalyzeMinCnt { continue } if needAnalyze, reason := NeedAnalyzeTable( @@ -703,3 +749,111 @@ func insertAnalyzeJob(sctx sessionctx.Context, job *statistics.AnalyzeJob, insta }) return nil } + +// startAnalyzeJob marks the state of the analyze job as running and sets the start time. +func startAnalyzeJob(sctx sessionctx.Context, job *statistics.AnalyzeJob) { + if job == nil || job.ID == nil { + return + } + job.StartTime = time.Now() + job.Progress.SetLastDumpTime(job.StartTime) + const sql = "UPDATE mysql.analyze_jobs SET start_time = CONVERT_TZ(%?, '+00:00', @@TIME_ZONE), state = %? WHERE id = %?" + _, _, err := statsutil.ExecRows(sctx, sql, job.StartTime.UTC().Format(types.TimeFormat), statistics.AnalyzeRunning, *job.ID) + if err != nil { + statslogutil.StatsLogger().Warn("failed to update analyze job", zap.String("update", fmt.Sprintf("%s->%s", statistics.AnalyzePending, statistics.AnalyzeRunning)), zap.Error(err)) + } + failpoint.Inject("DebugAnalyzeJobOperations", func(val failpoint.Value) { + if val.(bool) { + logutil.BgLogger().Info("StartAnalyzeJob", + zap.Time("start_time", job.StartTime), + zap.Uint64("job id", *job.ID), + ) + } + }) +} + +// updateAnalyzeJobProgress updates count of the processed rows when increment reaches a threshold. +func updateAnalyzeJobProgress(sctx sessionctx.Context, job *statistics.AnalyzeJob, rowCount int64) { + if job == nil || job.ID == nil { + return + } + delta := job.Progress.Update(rowCount) + if delta == 0 { + return + } + const sql = "UPDATE mysql.analyze_jobs SET processed_rows = processed_rows + %? WHERE id = %?" + _, _, err := statsutil.ExecRows(sctx, sql, delta, *job.ID) + if err != nil { + statslogutil.StatsLogger().Warn("failed to update analyze job", zap.String("update", fmt.Sprintf("process %v rows", delta)), zap.Error(err)) + } + failpoint.Inject("DebugAnalyzeJobOperations", func(val failpoint.Value) { + if val.(bool) { + logutil.BgLogger().Info("UpdateAnalyzeJobProgress", + zap.Int64("increase processed_rows", delta), + zap.Uint64("job id", *job.ID), + ) + } + }) +} + +// finishAnalyzeJob finishes an analyze or merge job +func finishAnalyzeJob(sctx sessionctx.Context, job *statistics.AnalyzeJob, analyzeErr error, analyzeType statistics.JobType) { + if job == nil || job.ID == nil { + return + } + + job.EndTime = time.Now() + var sql string + var args []any + + // process_id is used to see which process is running the analyze job and kill the analyze job. After the analyze job + // is finished(or failed), process_id is useless and we set it to NULL to avoid `kill tidb process_id` wrongly. + if analyzeErr != nil { + failReason := analyzeErr.Error() + const textMaxLength = 65535 + if len(failReason) > textMaxLength { + failReason = failReason[:textMaxLength] + } + + if analyzeType == statistics.TableAnalysisJob { + sql = "UPDATE mysql.analyze_jobs SET processed_rows = processed_rows + %?, end_time = CONVERT_TZ(%?, '+00:00', @@TIME_ZONE), state = %?, fail_reason = %?, process_id = NULL WHERE id = %?" + args = []any{job.Progress.GetDeltaCount(), job.EndTime.UTC().Format(types.TimeFormat), statistics.AnalyzeFailed, failReason, *job.ID} + } else { + sql = "UPDATE mysql.analyze_jobs SET end_time = CONVERT_TZ(%?, '+00:00', @@TIME_ZONE), state = %?, fail_reason = %?, process_id = NULL WHERE id = %?" + args = []any{job.EndTime.UTC().Format(types.TimeFormat), statistics.AnalyzeFailed, failReason, *job.ID} + } + } else { + if analyzeType == statistics.TableAnalysisJob { + sql = "UPDATE mysql.analyze_jobs SET processed_rows = processed_rows + %?, end_time = CONVERT_TZ(%?, '+00:00', @@TIME_ZONE), state = %?, process_id = NULL WHERE id = %?" + args = []any{job.Progress.GetDeltaCount(), job.EndTime.UTC().Format(types.TimeFormat), statistics.AnalyzeFinished, *job.ID} + } else { + sql = "UPDATE mysql.analyze_jobs SET end_time = CONVERT_TZ(%?, '+00:00', @@TIME_ZONE), state = %?, process_id = NULL WHERE id = %?" + args = []any{job.EndTime.UTC().Format(types.TimeFormat), statistics.AnalyzeFinished, *job.ID} + } + } + + _, _, err := statsutil.ExecRows(sctx, sql, args...) + if err != nil { + state := statistics.AnalyzeFinished + if analyzeErr != nil { + state = statistics.AnalyzeFailed + } + logutil.BgLogger().Warn("failed to update analyze job", zap.String("update", fmt.Sprintf("%s->%s", statistics.AnalyzeRunning, state)), zap.Error(err)) + } + + failpoint.Inject("DebugAnalyzeJobOperations", func(val failpoint.Value) { + if val.(bool) { + logger := logutil.BgLogger().With( + zap.Time("end_time", job.EndTime), + zap.Uint64("job id", *job.ID), + ) + if analyzeType == statistics.TableAnalysisJob { + logger = logger.With(zap.Int64("increase processed_rows", job.Progress.GetDeltaCount())) + } + if analyzeErr != nil { + logger = logger.With(zap.Error(analyzeErr)) + } + logger.Info("FinishAnalyzeJob") + } + }) +} diff --git a/pkg/statistics/handle/autoanalyze/autoanalyze_test.go b/pkg/statistics/handle/autoanalyze/autoanalyze_test.go index 2ab081bbce604..efe5a3731b1b0 100644 --- a/pkg/statistics/handle/autoanalyze/autoanalyze_test.go +++ b/pkg/statistics/handle/autoanalyze/autoanalyze_test.go @@ -31,7 +31,6 @@ import ( "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/statistics" "github.com/pingcap/tidb/pkg/statistics/handle/autoanalyze" - "github.com/pingcap/tidb/pkg/statistics/handle/autoanalyze/exec" statsutil "github.com/pingcap/tidb/pkg/statistics/handle/util" "github.com/pingcap/tidb/pkg/statistics/handle/util/test" "github.com/pingcap/tidb/pkg/testkit" @@ -58,9 +57,9 @@ func TestEnableAutoAnalyzePriorityQueue(t *testing.T) { require.NoError(t, h.DumpStatsDeltaToKV(true)) is := dom.InfoSchema() require.NoError(t, h.Update(context.Background(), is)) - exec.AutoAnalyzeMinCnt = 0 + statistics.AutoAnalyzeMinCnt = 0 defer func() { - exec.AutoAnalyzeMinCnt = 1000 + statistics.AutoAnalyzeMinCnt = 1000 }() require.True(t, dom.StatsHandle().HandleAutoAnalyze()) } @@ -79,9 +78,9 @@ func TestAutoAnalyzeLockedTable(t *testing.T) { tk.MustExec("lock stats t") is := dom.InfoSchema() require.NoError(t, h.Update(context.Background(), is)) - exec.AutoAnalyzeMinCnt = 0 + statistics.AutoAnalyzeMinCnt = 0 defer func() { - exec.AutoAnalyzeMinCnt = 1000 + statistics.AutoAnalyzeMinCnt = 1000 }() // Try to analyze the locked table, it should not analyze the table. require.False(t, dom.StatsHandle().HandleAutoAnalyze()) @@ -107,9 +106,9 @@ func TestAutoAnalyzeWithPredicateColumns(t *testing.T) { require.NoError(t, h.DumpStatsDeltaToKV(true)) is := dom.InfoSchema() require.NoError(t, h.Update(context.Background(), is)) - exec.AutoAnalyzeMinCnt = 0 + statistics.AutoAnalyzeMinCnt = 0 defer func() { - exec.AutoAnalyzeMinCnt = 1000 + statistics.AutoAnalyzeMinCnt = 1000 }() // Check column_stats_usage. @@ -157,9 +156,9 @@ func disableAutoAnalyzeCase(t *testing.T, tk *testkit.TestKit, dom *domain.Domai require.NoError(t, h.Update(context.Background(), is)) tk.MustExec("set @@global.tidb_enable_auto_analyze = 0") - exec.AutoAnalyzeMinCnt = 0 + statistics.AutoAnalyzeMinCnt = 0 defer func() { - exec.AutoAnalyzeMinCnt = 1000 + statistics.AutoAnalyzeMinCnt = 1000 }() // Even auto analyze ratio is set to 0, we still need to analyze the unanalyzed tables. require.True(t, dom.StatsHandle().HandleAutoAnalyze()) @@ -182,9 +181,9 @@ func TestAutoAnalyzeOnChangeAnalyzeVer(t *testing.T) { tk.MustExec("insert into t values(1)") tk.MustExec("set @@global.tidb_analyze_version = 1") do := dom - exec.AutoAnalyzeMinCnt = 0 + statistics.AutoAnalyzeMinCnt = 0 defer func() { - exec.AutoAnalyzeMinCnt = 1000 + statistics.AutoAnalyzeMinCnt = 1000 }() h := do.StatsHandle() err := h.HandleDDLEvent(<-h.DDLEventCh()) @@ -352,10 +351,10 @@ func TestAutoAnalyzeSkipColumnTypes(t *testing.T) { require.NoError(t, h.DumpColStatsUsageToKV()) tk.MustExec("set @@global.tidb_analyze_skip_column_types = 'json,blob,mediumblob,text,mediumtext'") - originalVal := exec.AutoAnalyzeMinCnt - exec.AutoAnalyzeMinCnt = 0 + originalVal := statistics.AutoAnalyzeMinCnt + statistics.AutoAnalyzeMinCnt = 0 defer func() { - exec.AutoAnalyzeMinCnt = originalVal + statistics.AutoAnalyzeMinCnt = originalVal }() require.True(t, h.HandleAutoAnalyze()) tk.MustQuery("select job_info from mysql.analyze_jobs where job_info like '%auto analyze table%'").Check(testkit.Rows("auto analyze table all indexes, columns a, b, d with 256 buckets, 100 topn, 1 samplerate")) @@ -384,7 +383,7 @@ func TestAutoAnalyzeOnEmptyTable(t *testing.T) { // to pass the stats.Pseudo check in autoAnalyzeTable tk.MustExec("analyze table t") // to pass the AutoAnalyzeMinCnt check in autoAnalyzeTable - tk.MustExec("insert into t values (1)" + strings.Repeat(", (1)", int(exec.AutoAnalyzeMinCnt))) + tk.MustExec("insert into t values (1)" + strings.Repeat(", (1)", int(statistics.AutoAnalyzeMinCnt))) require.NoError(t, dom.StatsHandle().DumpStatsDeltaToKV(true)) require.NoError(t, dom.StatsHandle().Update(context.Background(), dom.InfoSchema())) @@ -419,7 +418,7 @@ func TestAutoAnalyzeOutOfSpecifiedTime(t *testing.T) { // to pass the stats.Pseudo check in autoAnalyzeTable tk.MustExec("analyze table t") // to pass the AutoAnalyzeMinCnt check in autoAnalyzeTable - tk.MustExec("insert into t values (1)" + strings.Repeat(", (1)", int(exec.AutoAnalyzeMinCnt))) + tk.MustExec("insert into t values (1)" + strings.Repeat(", (1)", int(statistics.AutoAnalyzeMinCnt))) require.NoError(t, dom.StatsHandle().DumpStatsDeltaToKV(true)) require.NoError(t, dom.StatsHandle().Update(context.Background(), dom.InfoSchema())) diff --git a/pkg/statistics/handle/autoanalyze/exec/BUILD.bazel b/pkg/statistics/handle/autoanalyze/exec/BUILD.bazel index 6be84d7da74a5..1ef6999f7006f 100644 --- a/pkg/statistics/handle/autoanalyze/exec/BUILD.bazel +++ b/pkg/statistics/handle/autoanalyze/exec/BUILD.bazel @@ -16,6 +16,7 @@ go_library( "//pkg/statistics/handle/types", "//pkg/statistics/handle/util", "//pkg/util/chunk", + "//pkg/util/logutil", "//pkg/util/sqlescape", "//pkg/util/sqlexec", "@com_github_pingcap_errors//:errors", @@ -33,6 +34,7 @@ go_test( "//pkg/parser/model", "//pkg/sessionctx", "//pkg/testkit", + "//pkg/util", "@com_github_stretchr_testify//require", ], ) diff --git a/pkg/statistics/handle/autoanalyze/exec/exec.go b/pkg/statistics/handle/autoanalyze/exec/exec.go index a69d5c11ee0b6..1430a1fc7fd2f 100644 --- a/pkg/statistics/handle/autoanalyze/exec/exec.go +++ b/pkg/statistics/handle/autoanalyze/exec/exec.go @@ -30,15 +30,12 @@ import ( statstypes "github.com/pingcap/tidb/pkg/statistics/handle/types" statsutil "github.com/pingcap/tidb/pkg/statistics/handle/util" "github.com/pingcap/tidb/pkg/util/chunk" + "github.com/pingcap/tidb/pkg/util/logutil" "github.com/pingcap/tidb/pkg/util/sqlescape" "github.com/pingcap/tidb/pkg/util/sqlexec" "go.uber.org/zap" ) -// AutoAnalyzeMinCnt means if the count of table is less than this value, we don't need to do auto analyze. -// Exported for testing. -var AutoAnalyzeMinCnt int64 = 1000 - var execOptionForAnalyze = map[int]sqlexec.OptionFuncAlias{ statistics.Version0: sqlexec.ExecOptionAnalyzeVer1, statistics.Version1: sqlexec.ExecOptionAnalyzeVer1, @@ -55,7 +52,7 @@ func AutoAnalyze( params ...any, ) { startTime := time.Now() - _, _, err := execAnalyzeStmt(sctx, statsHandle, sysProcTracker, statsVer, sql, params...) + _, _, err := RunAnalyzeStmt(sctx, statsHandle, sysProcTracker, statsVer, sql, params...) dur := time.Since(startTime) metrics.AutoAnalyzeHistogram.Observe(dur.Seconds()) if err != nil { @@ -75,7 +72,8 @@ func AutoAnalyze( } } -func execAnalyzeStmt( +// RunAnalyzeStmt executes the analyze statement. +func RunAnalyzeStmt( sctx sessionctx.Context, statsHandle statstypes.StatsHandle, sysProcTracker sysproctrack.Tracker, @@ -85,13 +83,21 @@ func execAnalyzeStmt( ) ([]chunk.Row, []*ast.ResultField, error) { pruneMode := sctx.GetSessionVars().PartitionPruneMode.Load() analyzeSnapshot := sctx.GetSessionVars().EnableAnalyzeSnapshot + autoAnalyzeTracker := statsutil.NewAutoAnalyzeTracker(sysProcTracker.Track, sysProcTracker.UnTrack) + autoAnalyzeProcID := statsHandle.AutoAnalyzeProcID() optFuncs := []sqlexec.OptionFuncAlias{ execOptionForAnalyze[statsVer], sqlexec.GetAnalyzeSnapshotOption(analyzeSnapshot), sqlexec.GetPartitionPruneModeOption(pruneMode), sqlexec.ExecOptionUseCurSession, - sqlexec.ExecOptionWithSysProcTrack(statsHandle.AutoAnalyzeProcID(), sysProcTracker.Track, sysProcTracker.UnTrack), + sqlexec.ExecOptionWithSysProcTrack(autoAnalyzeProcID, autoAnalyzeTracker.Track, autoAnalyzeTracker.UnTrack), } + defer func() { + if r := recover(); r != nil { + logutil.BgLogger().Warn("panic in execAnalyzeStmt", zap.Any("error", r), zap.Stack("stack")) + } + statsHandle.ReleaseAutoAnalyzeProcID(autoAnalyzeProcID) + }() return statsutil.ExecWithOpts(sctx, optFuncs, sql, params...) } diff --git a/pkg/statistics/handle/autoanalyze/exec/exec_test.go b/pkg/statistics/handle/autoanalyze/exec/exec_test.go index 8e5ea98e32256..55ce730ac8c11 100644 --- a/pkg/statistics/handle/autoanalyze/exec/exec_test.go +++ b/pkg/statistics/handle/autoanalyze/exec/exec_test.go @@ -16,12 +16,15 @@ package exec_test import ( "context" + "fmt" "testing" + "time" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/statistics/handle/autoanalyze/exec" "github.com/pingcap/tidb/pkg/testkit" + "github.com/pingcap/tidb/pkg/util" "github.com/stretchr/testify/require" ) @@ -51,3 +54,35 @@ func TestExecAutoAnalyzes(t *testing.T) { tblStats := handle.GetTableStats(tbl.Meta()) require.Equal(t, int64(3), tblStats.RealtimeCount) } + +func TestKillInWindows(t *testing.T) { + store, dom := testkit.CreateMockStoreAndDomain(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t1 (a int, b int, index idx(a)) partition by range (a) (partition p0 values less than (2), partition p1 values less than (14))") + tk.MustExec("insert into t1 values (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12), (13, 13)") + handle := dom.StatsHandle() + sysProcTracker := dom.SysProcTracker() + now := time.Now() + startTime := now.Add(1 * time.Hour).Format("15:04 -0700") + endTime := now.Add(2 * time.Hour).Format("15:04 -0700") + tk.MustExec(fmt.Sprintf("SET GLOBAL tidb_auto_analyze_start_time='%s'", startTime)) + tk.MustExec(fmt.Sprintf("SET GLOBAL tidb_auto_analyze_end_time='%s'", endTime)) + var wg util.WaitGroupWrapper + exitCh := make(chan struct{}) + wg.Run(func() { + for { + select { + case <-exitCh: + return + default: + dom.CheckAutoAnalyzeWindows() + } + } + }) + sctx := tk.Session() + _, _, err := exec.RunAnalyzeStmt(sctx, handle, sysProcTracker, 2, "analyze table %n", "t1") + require.ErrorContains(t, err, "[executor:1317]Query execution was interrupted") + close(exitCh) + wg.Wait() +} diff --git a/pkg/statistics/handle/autoanalyze/internal/heap/BUILD.bazel b/pkg/statistics/handle/autoanalyze/internal/heap/BUILD.bazel new file mode 100644 index 0000000000000..2f4ba1e9b6ae2 --- /dev/null +++ b/pkg/statistics/handle/autoanalyze/internal/heap/BUILD.bazel @@ -0,0 +1,19 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "heap", + srcs = ["heap.go"], + importpath = "github.com/pingcap/tidb/pkg/statistics/handle/autoanalyze/internal/heap", + visibility = ["//pkg/statistics/handle/autoanalyze:__subpackages__"], + deps = ["@com_github_pingcap_errors//:errors"], +) + +go_test( + name = "heap_test", + timeout = "short", + srcs = ["heap_test.go"], + embed = [":heap"], + flaky = True, + shard_count = 14, + deps = ["@com_github_stretchr_testify//require"], +) diff --git a/pkg/statistics/handle/autoanalyze/internal/heap/heap.go b/pkg/statistics/handle/autoanalyze/internal/heap/heap.go new file mode 100644 index 0000000000000..f3d677167814b --- /dev/null +++ b/pkg/statistics/handle/autoanalyze/internal/heap/heap.go @@ -0,0 +1,306 @@ +// Copyright 2017 The Kubernetes Authors. +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// Modifications: +// 1. Use the `errors` package from PingCAP. +// 2. Use generics to define the `heapData` struct. +// 3. Add a peak API. + +package heap + +import ( + "container/heap" + "sync" + + "github.com/pingcap/errors" +) + +const ( + closedMsg = "heap is closed" +) + +// LessFunc is used to compare two objects in the heap. +type LessFunc[T any] func(T, T) bool + +// KeyFunc is used to generate a key for an object. +type KeyFunc[T any, K comparable] func(T) (K, error) + +type heapItem[T any] struct { + obj T // The object which is stored in the heap. + index int // The index of the object's key in the Heap.queue. +} + +type itemKeyValue[T any, K comparable] struct { + obj T + key K +} + +// heapData is an internal struct that implements the standard heap interface +// and keeps the data stored in the heap. +type heapData[T any, K comparable] struct { + items map[K]*heapItem[T] + keyFunc KeyFunc[T, K] + lessFunc LessFunc[T] + queue []K +} + +var ( + _ = heap.Interface(&heapData[any, any]{}) // heapData is a standard heap +) + +// Less is a standard heap interface function. +func (h *heapData[T, K]) Less(i, j int) bool { + if i >= len(h.queue) || j >= len(h.queue) { + return false + } + itemi, ok := h.items[h.queue[i]] + if !ok { + return false + } + itemj, ok := h.items[h.queue[j]] + if !ok { + return false + } + return h.lessFunc(itemi.obj, itemj.obj) +} + +// Len is a standard heap interface function. +func (h *heapData[T, K]) Len() int { return len(h.queue) } + +// Swap is a standard heap interface function. +func (h *heapData[T, K]) Swap(i, j int) { + h.queue[i], h.queue[j] = h.queue[j], h.queue[i] + item := h.items[h.queue[i]] + item.index = i + item = h.items[h.queue[j]] + item.index = j +} + +// Push is a standard heap interface function. +func (h *heapData[T, K]) Push(kv any) { + keyValue := kv.(*itemKeyValue[T, K]) + n := len(h.queue) + h.items[keyValue.key] = &heapItem[T]{keyValue.obj, n} + h.queue = append(h.queue, keyValue.key) +} + +// Pop is a standard heap interface function. +func (h *heapData[T, K]) Pop() any { + key := h.queue[len(h.queue)-1] + h.queue = h.queue[:len(h.queue)-1] + item, ok := h.items[key] + if !ok { + return nil + } + delete(h.items, key) + return item.obj +} + +// Heap is a thread-safe producer/consumer queue that implements a heap data structure. +type Heap[T any, K comparable] struct { + data *heapData[T, K] + cond sync.Cond + lock sync.RWMutex + closed bool +} + +// Close closes the heap. +func (h *Heap[T, K]) Close() { + h.lock.Lock() + defer h.lock.Unlock() + h.closed = true + h.cond.Broadcast() +} + +// Add adds an object or updates it if it already exists. +func (h *Heap[T, K]) Add(obj T) error { + key, err := h.data.keyFunc(obj) + if err != nil { + return errors.Errorf("key error: %v", err) + } + h.lock.Lock() + defer h.lock.Unlock() + if h.closed { + return errors.New(closedMsg) + } + if _, exists := h.data.items[key]; exists { + h.data.items[key].obj = obj + heap.Fix(h.data, h.data.items[key].index) + } else { + h.addIfNotPresentLocked(key, obj) + } + h.cond.Broadcast() + return nil +} + +// BulkAdd adds a list of objects to the heap. +func (h *Heap[T, K]) BulkAdd(list []T) error { + h.lock.Lock() + defer h.lock.Unlock() + if h.closed { + return errors.New(closedMsg) + } + for _, obj := range list { + key, err := h.data.keyFunc(obj) + if err != nil { + return errors.Errorf("key error: %v", err) + } + if _, exists := h.data.items[key]; exists { + h.data.items[key].obj = obj + heap.Fix(h.data, h.data.items[key].index) + } else { + h.addIfNotPresentLocked(key, obj) + } + } + h.cond.Broadcast() + return nil +} + +// AddIfNotPresent adds an object if it does not already exist. +func (h *Heap[T, K]) AddIfNotPresent(obj T) error { + id, err := h.data.keyFunc(obj) + if err != nil { + return errors.Errorf("key error: %v", err) + } + h.lock.Lock() + defer h.lock.Unlock() + if h.closed { + return errors.New(closedMsg) + } + h.addIfNotPresentLocked(id, obj) + h.cond.Broadcast() + return nil +} + +func (h *Heap[T, K]) addIfNotPresentLocked(key K, obj T) { + if _, exists := h.data.items[key]; exists { + return + } + heap.Push(h.data, &itemKeyValue[T, K]{obj, key}) +} + +// Update is an alias for Add. +func (h *Heap[T, K]) Update(obj T) error { + return h.Add(obj) +} + +// Delete removes an object from the heap. +func (h *Heap[T, K]) Delete(obj T) error { + key, err := h.data.keyFunc(obj) + if err != nil { + return errors.Errorf("key error: %v", err) + } + h.lock.Lock() + defer h.lock.Unlock() + if item, ok := h.data.items[key]; ok { + heap.Remove(h.data, item.index) + return nil + } + return errors.New("object not found") +} + +// Peek returns the top object from the heap without removing it. +func (h *Heap[T, K]) Peek() (T, error) { + h.lock.RLock() + defer h.lock.RUnlock() + if len(h.data.queue) == 0 { + var zero T + return zero, errors.New("heap is empty") + } + return h.data.items[h.data.queue[0]].obj, nil +} + +// Pop removes the top object from the heap and returns it. +func (h *Heap[T, K]) Pop() (T, error) { + h.lock.Lock() + defer h.lock.Unlock() + for len(h.data.queue) == 0 { + if h.closed { + var zero T + return zero, errors.New("heap is closed") + } + h.cond.Wait() + } + obj := heap.Pop(h.data) + if obj == nil { + var zero T + return zero, errors.New("object was removed from heap data") + } + return obj.(T), nil +} + +// List returns a list of all objects in the heap. +func (h *Heap[T, K]) List() []T { + h.lock.RLock() + defer h.lock.RUnlock() + list := make([]T, 0, len(h.data.items)) + for _, item := range h.data.items { + list = append(list, item.obj) + } + return list +} + +// ListKeys returns a list of all keys in the heap. +func (h *Heap[T, K]) ListKeys() []K { + h.lock.RLock() + defer h.lock.RUnlock() + list := make([]K, 0, len(h.data.items)) + for key := range h.data.items { + list = append(list, key) + } + return list +} + +// Get returns an object from the heap. +func (h *Heap[T, K]) Get(obj T) (T, bool, error) { + key, err := h.data.keyFunc(obj) + if err != nil { + var zero T + return zero, false, errors.Errorf("key error: %v", err) + } + return h.GetByKey(key) +} + +// GetByKey returns an object from the heap by key. +func (h *Heap[T, K]) GetByKey(key K) (T, bool, error) { + h.lock.RLock() + defer h.lock.RUnlock() + item, exists := h.data.items[key] + if !exists { + var zero T + return zero, false, nil + } + return item.obj, true, nil +} + +// IsClosed returns true if the heap is closed. +func (h *Heap[T, K]) IsClosed() bool { + h.lock.RLock() + defer h.lock.RUnlock() + return h.closed +} + +// NewHeap returns a Heap which can be used to queue up items to process. +func NewHeap[T any, K comparable](keyFn KeyFunc[T, K], lessFn LessFunc[T]) *Heap[T, K] { + h := &Heap[T, K]{ + data: &heapData[T, K]{ + items: map[K]*heapItem[T]{}, + queue: []K{}, + keyFunc: keyFn, + lessFunc: lessFn, + }, + } + h.cond.L = &h.lock + return h +} diff --git a/pkg/statistics/handle/autoanalyze/internal/heap/heap_test.go b/pkg/statistics/handle/autoanalyze/internal/heap/heap_test.go new file mode 100644 index 0000000000000..5b119661be043 --- /dev/null +++ b/pkg/statistics/handle/autoanalyze/internal/heap/heap_test.go @@ -0,0 +1,347 @@ +// Copyright 2017 The Kubernetes Authors. +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// Modifications: +// 1. Use "github.com/stretchr/testify/require" to do assertions. +// 2. Test max heap instead of min heap. +// 3. Add a test for the peak API. + +package heap + +import ( + "sync" + "testing" + "time" + + "github.com/stretchr/testify/require" +) + +func testHeapObjectKeyFunc(obj testHeapObject) (string, error) { + return obj.name, nil +} + +type testHeapObject struct { + name string + val int +} + +func mkHeapObj(name string, val int) testHeapObject { + return testHeapObject{name: name, val: val} +} + +// max heap +func compareInts(val1 testHeapObject, val2 testHeapObject) bool { + return val1.val > val2.val +} + +func TestHeapBasic(t *testing.T) { + h := NewHeap(testHeapObjectKeyFunc, compareInts) + var wg sync.WaitGroup + wg.Add(2) + const amount = 500 + var i, u int + go func() { + for i = 1; i <= amount; i++ { + h.Add(mkHeapObj(string([]rune{'a', rune(i)}), i)) + } + wg.Done() + }() + go func() { + for u = amount; u > 0; u-- { + h.Add(mkHeapObj(string([]rune{'b', rune(u)}), u)) + } + wg.Done() + }() + wg.Wait() + + prevNum := 1000 + for i := 0; i < amount*2; i++ { + obj, err := h.Pop() + num := obj.val + require.NoError(t, err) + require.LessOrEqual(t, num, prevNum, "Items should be in descending order") + prevNum = num + } +} + +func TestHeap_Add(t *testing.T) { + h := NewHeap(testHeapObjectKeyFunc, compareInts) + h.Add(mkHeapObj("foo", 10)) + h.Add(mkHeapObj("bar", 1)) + h.Add(mkHeapObj("baz", 11)) + h.Add(mkHeapObj("zab", 30)) + h.Add(mkHeapObj("foo", 13)) // This updates "foo". + + item, err := h.Pop() + require.NoError(t, err) + require.Equal(t, 30, item.val) + + item, err = h.Pop() + require.NoError(t, err) + require.Equal(t, 13, item.val) + + h.Delete(mkHeapObj("baz", 11)) // Nothing is deleted. + h.Add(mkHeapObj("foo", 14)) // foo is updated. + + item, err = h.Pop() + require.NoError(t, err) + require.Equal(t, 14, item.val) + + item, err = h.Pop() + require.NoError(t, err) + require.Equal(t, 1, item.val) +} + +func TestHeap_BulkAdd(t *testing.T) { + h := NewHeap(testHeapObjectKeyFunc, compareInts) + const amount = 500 + go func() { + var l []testHeapObject + for i := 1; i <= amount; i++ { + l = append(l, mkHeapObj(string([]rune{'a', rune(i)}), i)) + } + h.BulkAdd(l) + }() + prevNum := 501 + for i := 0; i < amount; i++ { + obj, err := h.Pop() + require.NoError(t, err) + num := obj.val + require.Less(t, num, prevNum, "Items should be in descending order") + prevNum = num + } +} + +func TestHeapEmptyPop(t *testing.T) { + h := NewHeap(testHeapObjectKeyFunc, compareInts) + go func() { + time.Sleep(1 * time.Second) + h.Close() + }() + _, err := h.Pop() + require.EqualError(t, err, closedMsg) +} + +func TestHeap_AddIfNotPresent(t *testing.T) { + h := NewHeap(testHeapObjectKeyFunc, compareInts) + h.AddIfNotPresent(mkHeapObj("foo", 10)) + h.AddIfNotPresent(mkHeapObj("bar", 1)) + h.AddIfNotPresent(mkHeapObj("baz", 11)) + h.AddIfNotPresent(mkHeapObj("zab", 30)) + h.AddIfNotPresent(mkHeapObj("foo", 13)) // This is not added. + + require.Len(t, h.data.items, 4) + require.Equal(t, 10, h.data.items["foo"].obj.val) + + item, err := h.Pop() + require.NoError(t, err) + require.Equal(t, 30, item.val) + + item, err = h.Pop() + require.NoError(t, err) + require.Equal(t, 11, item.val) + + h.AddIfNotPresent(mkHeapObj("bar", 14)) + + item, err = h.Pop() + require.NoError(t, err) + require.Equal(t, 10, item.val) + + item, err = h.Pop() + require.NoError(t, err) + require.Equal(t, 1, item.val) +} + +func TestHeap_Delete(t *testing.T) { + h := NewHeap(testHeapObjectKeyFunc, compareInts) + h.Add(mkHeapObj("foo", 10)) + h.Add(mkHeapObj("bar", 1)) + h.Add(mkHeapObj("bal", 31)) + h.Add(mkHeapObj("baz", 11)) + + err := h.Delete(mkHeapObj("bal", 200)) + require.NoError(t, err) + + item, err := h.Pop() + require.NoError(t, err) + require.Equal(t, 11, item.val) + + h.Add(mkHeapObj("zab", 30)) + h.Add(mkHeapObj("faz", 30)) + l := h.data.Len() + + err = h.Delete(mkHeapObj("non-existent", 10)) + require.Error(t, err) + require.Equal(t, l, h.data.Len()) + + err = h.Delete(mkHeapObj("bar", 31)) + require.NoError(t, err) + + err = h.Delete(mkHeapObj("zab", 30)) + require.NoError(t, err) + + item, err = h.Pop() + require.NoError(t, err) + require.Equal(t, 30, item.val) + + item, err = h.Pop() + require.NoError(t, err) + require.Equal(t, 10, item.val) + + require.Equal(t, 0, h.data.Len()) +} + +func TestHeap_Update(t *testing.T) { + h := NewHeap(testHeapObjectKeyFunc, compareInts) + h.Add(mkHeapObj("foo", 10)) + h.Add(mkHeapObj("bar", 1)) + h.Add(mkHeapObj("bal", 31)) + h.Add(mkHeapObj("baz", 11)) + + h.Update(mkHeapObj("baz", 50)) + require.Equal(t, "baz", h.data.queue[0]) + require.Equal(t, 0, h.data.items["baz"].index) + + item, err := h.Pop() + require.NoError(t, err) + require.Equal(t, 50, item.val) + + h.Update(mkHeapObj("bar", 100)) + require.Equal(t, "bar", h.data.queue[0]) + require.Equal(t, 0, h.data.items["bar"].index) +} + +func TestHeap_Get(t *testing.T) { + h := NewHeap(testHeapObjectKeyFunc, compareInts) + h.Add(mkHeapObj("foo", 10)) + h.Add(mkHeapObj("bar", 1)) + h.Add(mkHeapObj("bal", 31)) + h.Add(mkHeapObj("baz", 11)) + + obj, exists, err := h.Get(mkHeapObj("baz", 0)) + require.NoError(t, err) + require.True(t, exists) + require.Equal(t, 11, obj.val) + + _, exists, err = h.Get(mkHeapObj("non-existing", 0)) + require.NoError(t, err) + require.False(t, exists) +} + +func TestHeap_GetByKey(t *testing.T) { + h := NewHeap(testHeapObjectKeyFunc, compareInts) + h.Add(mkHeapObj("foo", 10)) + h.Add(mkHeapObj("bar", 1)) + h.Add(mkHeapObj("bal", 31)) + h.Add(mkHeapObj("baz", 11)) + + obj, exists, err := h.GetByKey("baz") + require.NoError(t, err) + require.True(t, exists) + require.Equal(t, 11, obj.val) + + _, exists, err = h.GetByKey("non-existing") + require.NoError(t, err) + require.False(t, exists) +} + +func TestHeap_Close(t *testing.T) { + h := NewHeap(testHeapObjectKeyFunc, compareInts) + h.Add(mkHeapObj("foo", 10)) + h.Add(mkHeapObj("bar", 1)) + + require.False(t, h.IsClosed()) + h.Close() + require.True(t, h.IsClosed()) +} + +func TestHeap_List(t *testing.T) { + h := NewHeap(testHeapObjectKeyFunc, compareInts) + list := h.List() + require.Empty(t, list) + + items := map[string]int{ + "foo": 10, + "bar": 1, + "bal": 30, + "baz": 11, + "faz": 30, + } + for k, v := range items { + h.Add(mkHeapObj(k, v)) + } + list = h.List() + require.Len(t, list, len(items)) + for _, obj := range list { + heapObj := obj + v, ok := items[heapObj.name] + require.True(t, ok) + require.Equal(t, v, heapObj.val) + } +} + +func TestHeap_ListKeys(t *testing.T) { + h := NewHeap(testHeapObjectKeyFunc, compareInts) + list := h.ListKeys() + require.Empty(t, list) + + items := map[string]int{ + "foo": 10, + "bar": 1, + "bal": 30, + "baz": 11, + "faz": 30, + } + for k, v := range items { + h.Add(mkHeapObj(k, v)) + } + list = h.ListKeys() + require.Len(t, list, len(items)) + for _, key := range list { + _, ok := items[key] + require.True(t, ok) + } +} + +func TestHeap_Peek(t *testing.T) { + h := NewHeap(testHeapObjectKeyFunc, compareInts) + _, err := h.Peek() + require.EqualError(t, err, "heap is empty") + + h.Add(mkHeapObj("foo", 10)) + h.Add(mkHeapObj("bar", 1)) + h.Add(mkHeapObj("bal", 31)) + h.Add(mkHeapObj("baz", 11)) + + item, err := h.Peek() + require.NoError(t, err) + require.Equal(t, 31, item.val) + + item, err = h.Pop() + require.NoError(t, err) + require.Equal(t, 31, item.val) +} + +func TestHeapAddAfterClose(t *testing.T) { + h := NewHeap(testHeapObjectKeyFunc, compareInts) + h.Close() + err := h.Add(mkHeapObj("test", 1)) + require.EqualError(t, err, closedMsg) + + err = h.AddIfNotPresent(mkHeapObj("test", 1)) + require.EqualError(t, err, closedMsg) + + err = h.BulkAdd([]testHeapObject{mkHeapObj("test", 1)}) + require.EqualError(t, err, closedMsg) +} diff --git a/pkg/statistics/handle/autoanalyze/refresher/BUILD.bazel b/pkg/statistics/handle/autoanalyze/refresher/BUILD.bazel index 9b3388602fe81..a26587cd67d9b 100644 --- a/pkg/statistics/handle/autoanalyze/refresher/BUILD.bazel +++ b/pkg/statistics/handle/autoanalyze/refresher/BUILD.bazel @@ -35,7 +35,6 @@ go_test( ":refresher", "//pkg/parser/model", "//pkg/statistics", - "//pkg/statistics/handle/autoanalyze/exec", "//pkg/statistics/handle/autoanalyze/priorityqueue", "//pkg/testkit", "@com_github_stretchr_testify//require", diff --git a/pkg/statistics/handle/autoanalyze/refresher/refresher.go b/pkg/statistics/handle/autoanalyze/refresher/refresher.go index c563bf692d72e..b97b498fb220c 100644 --- a/pkg/statistics/handle/autoanalyze/refresher/refresher.go +++ b/pkg/statistics/handle/autoanalyze/refresher/refresher.go @@ -86,6 +86,9 @@ func (r *Refresher) PickOneTableAndAnalyzeByPriority() bool { } defer r.statsHandle.SPool().Put(se) sctx := se.(sessionctx.Context) + var wg util.WaitGroupWrapper + defer wg.Wait() + cnt := 0 // Pick the table with the highest weight. for r.Jobs.Len() > 0 { job := r.Jobs.Pop() @@ -103,18 +106,25 @@ func (r *Refresher) PickOneTableAndAnalyzeByPriority() bool { "Auto analyze triggered", zap.Stringer("job", job), ) - err = job.Analyze( - r.statsHandle, - r.sysProcTracker, - ) - if err != nil { - statslogutil.StatsLogger().Error( - "Execute auto analyze job failed", - zap.Stringer("job", job), - zap.Error(err), + wg.Run(func() { + err = job.Analyze( + r.statsHandle, + r.sysProcTracker, ) + if err != nil { + statslogutil.StatsLogger().Error( + "Execute auto analyze job failed", + zap.Stringer("job", job), + zap.Error(err), + ) + } + }) + cnt++ + if cnt >= int(variable.AutoAnlayzeConcurrency.Load()) { + break } - // Only analyze one table each time. + } + if cnt > 0 { return true } statslogutil.SingletonStatsSamplerLogger().Info( @@ -287,7 +297,7 @@ func CreateTableAnalysisJob( autoAnalyzeRatio float64, currentTs uint64, ) priorityqueue.AnalysisJob { - if !isEligibleForAnalysis(tblStats) { + if !tblStats.IsEligibleForAnalysis() { return nil } @@ -331,7 +341,7 @@ func CreateStaticPartitionAnalysisJob( autoAnalyzeRatio float64, currentTs uint64, ) priorityqueue.AnalysisJob { - if !isEligibleForAnalysis(partitionStats) { + if !partitionStats.IsEligibleForAnalysis() { return nil } @@ -465,7 +475,7 @@ func createTableAnalysisJobForPartitions( autoAnalyzeRatio float64, currentTs uint64, ) priorityqueue.AnalysisJob { - if !isEligibleForAnalysis(tblStats) { + if !tblStats.IsEligibleForAnalysis() { return nil } @@ -611,7 +621,7 @@ func getPartitionStats( for _, def := range defs { stats := statsHandle.GetPartitionStatsForAutoAnalyze(tblInfo, def.ID) // Ignore the partition if it's not ready to analyze. - if !isEligibleForAnalysis(stats) { + if !stats.IsEligibleForAnalysis() { continue } d := PartitionIDAndName{ @@ -624,20 +634,6 @@ func getPartitionStats( return partitionStats } -func isEligibleForAnalysis( - tblStats *statistics.Table, -) bool { - // 1. If the statistics are either not loaded or are classified as pseudo, there is no need for analyze. - // Pseudo statistics can be created by the optimizer, so we need to double check it. - // 2. If the table is too small, we don't want to waste time to analyze it. - // Leave the opportunity to other bigger tables. - if tblStats == nil || tblStats.Pseudo || tblStats.RealtimeCount < exec.AutoAnalyzeMinCnt { - return false - } - - return true -} - // autoAnalysisTimeWindow is a struct that contains the start and end time of the auto analyze time window. type autoAnalysisTimeWindow struct { start time.Time diff --git a/pkg/statistics/handle/autoanalyze/refresher/refresher_test.go b/pkg/statistics/handle/autoanalyze/refresher/refresher_test.go index 76ad5d278a9bb..dc03dcf3518c1 100644 --- a/pkg/statistics/handle/autoanalyze/refresher/refresher_test.go +++ b/pkg/statistics/handle/autoanalyze/refresher/refresher_test.go @@ -23,7 +23,6 @@ import ( "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/statistics" - "github.com/pingcap/tidb/pkg/statistics/handle/autoanalyze/exec" "github.com/pingcap/tidb/pkg/statistics/handle/autoanalyze/priorityqueue" "github.com/pingcap/tidb/pkg/statistics/handle/autoanalyze/refresher" "github.com/pingcap/tidb/pkg/testkit" @@ -32,9 +31,9 @@ import ( ) func TestSkipAnalyzeTableWhenAutoAnalyzeRatioIsZero(t *testing.T) { - exec.AutoAnalyzeMinCnt = 0 + statistics.AutoAnalyzeMinCnt = 0 defer func() { - exec.AutoAnalyzeMinCnt = 1000 + statistics.AutoAnalyzeMinCnt = 1000 }() store, dom := testkit.CreateMockStoreAndDomain(t) @@ -84,9 +83,9 @@ func TestSkipAnalyzeTableWhenAutoAnalyzeRatioIsZero(t *testing.T) { } func TestIgnoreNilOrPseudoStatsOfPartitionedTable(t *testing.T) { - exec.AutoAnalyzeMinCnt = 0 + statistics.AutoAnalyzeMinCnt = 0 defer func() { - exec.AutoAnalyzeMinCnt = 1000 + statistics.AutoAnalyzeMinCnt = 1000 }() store, dom := testkit.CreateMockStoreAndDomain(t) @@ -104,9 +103,9 @@ func TestIgnoreNilOrPseudoStatsOfPartitionedTable(t *testing.T) { } func TestIgnoreNilOrPseudoStatsOfNonPartitionedTable(t *testing.T) { - exec.AutoAnalyzeMinCnt = 0 + statistics.AutoAnalyzeMinCnt = 0 defer func() { - exec.AutoAnalyzeMinCnt = 1000 + statistics.AutoAnalyzeMinCnt = 1000 }() store, dom := testkit.CreateMockStoreAndDomain(t) @@ -124,9 +123,9 @@ func TestIgnoreNilOrPseudoStatsOfNonPartitionedTable(t *testing.T) { } func TestIgnoreTinyTable(t *testing.T) { - exec.AutoAnalyzeMinCnt = 10 + statistics.AutoAnalyzeMinCnt = 10 defer func() { - exec.AutoAnalyzeMinCnt = 1000 + statistics.AutoAnalyzeMinCnt = 1000 }() store, dom := testkit.CreateMockStoreAndDomain(t) @@ -168,14 +167,15 @@ func TestIgnoreTinyTable(t *testing.T) { } func TestPickOneTableAndAnalyzeByPriority(t *testing.T) { - exec.AutoAnalyzeMinCnt = 0 + statistics.AutoAnalyzeMinCnt = 0 defer func() { - exec.AutoAnalyzeMinCnt = 1000 + statistics.AutoAnalyzeMinCnt = 1000 }() store, dom := testkit.CreateMockStoreAndDomain(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") + tk.MustExec("set global tidb_auto_analyze_concurrency=1") tk.MustExec("create table t1 (a int, b int, index idx(a)) partition by range (a) (partition p0 values less than (2), partition p1 values less than (14))") tk.MustExec("create table t2 (a int, b int, index idx(a)) partition by range (a) (partition p0 values less than (2), partition p1 values less than (14))") tk.MustExec("insert into t1 values (1, 1), (2, 2), (3, 3)") @@ -227,7 +227,7 @@ func TestPickOneTableAndAnalyzeByPriorityWithFailedAnalysis(t *testing.T) { store, dom := testkit.CreateMockStoreAndDomain(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") - + tk.MustExec("set global tidb_auto_analyze_concurrency=1") tk.MustExec("create table t1 (a int, b int, index idx(a)) partition by range (a) (partition p0 values less than (2), partition p1 values less than (4))") tk.MustExec("create table t2 (a int, b int, index idx(a)) partition by range (a) (partition p0 values less than (2), partition p1 values less than (4))") tk.MustExec("insert into t1 values (1, 1), (2, 2), (3, 3)") @@ -322,11 +322,11 @@ func insertFailedJobForPartitionWithStartTime( } func TestRebuildTableAnalysisJobQueue(t *testing.T) { - old := exec.AutoAnalyzeMinCnt + old := statistics.AutoAnalyzeMinCnt defer func() { - exec.AutoAnalyzeMinCnt = old + statistics.AutoAnalyzeMinCnt = old }() - exec.AutoAnalyzeMinCnt = 0 + statistics.AutoAnalyzeMinCnt = 0 store, dom := testkit.CreateMockStoreAndDomain(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -399,7 +399,7 @@ func TestCalculateChangePercentage(t *testing.T) { { name: "Test Table not analyzed", tblStats: &statistics.Table{ - HistColl: *statistics.NewHistCollWithColsAndIdxs(0, false, exec.AutoAnalyzeMinCnt+1, 0, unanalyzedColumns, unanalyzedIndices), + HistColl: *statistics.NewHistCollWithColsAndIdxs(0, false, statistics.AutoAnalyzeMinCnt+1, 0, unanalyzedColumns, unanalyzedIndices), ColAndIdxExistenceMap: bothUnanalyzedMap, }, autoAnalyzeRatio: 0.5, @@ -408,7 +408,7 @@ func TestCalculateChangePercentage(t *testing.T) { { name: "Based on change percentage", tblStats: &statistics.Table{ - HistColl: *statistics.NewHistCollWithColsAndIdxs(0, false, exec.AutoAnalyzeMinCnt+1, (exec.AutoAnalyzeMinCnt+1)*2, analyzedColumns, analyzedIndices), + HistColl: *statistics.NewHistCollWithColsAndIdxs(0, false, statistics.AutoAnalyzeMinCnt+1, (statistics.AutoAnalyzeMinCnt+1)*2, analyzedColumns, analyzedIndices), ColAndIdxExistenceMap: bothAnalyzedMap, LastAnalyzeVersion: 1, }, @@ -568,7 +568,7 @@ func TestCalculateIndicatorsForPartitions(t *testing.T) { }: { HistColl: statistics.HistColl{ Pseudo: false, - RealtimeCount: exec.AutoAnalyzeMinCnt + 1, + RealtimeCount: statistics.AutoAnalyzeMinCnt + 1, }, ColAndIdxExistenceMap: unanalyzedMap, }, @@ -578,7 +578,7 @@ func TestCalculateIndicatorsForPartitions(t *testing.T) { }: { HistColl: statistics.HistColl{ Pseudo: false, - RealtimeCount: exec.AutoAnalyzeMinCnt + 1, + RealtimeCount: statistics.AutoAnalyzeMinCnt + 1, }, ColAndIdxExistenceMap: unanalyzedMap, }, @@ -624,7 +624,7 @@ func TestCalculateIndicatorsForPartitions(t *testing.T) { ID: 1, Name: "p0", }: { - HistColl: *statistics.NewHistCollWithColsAndIdxs(0, false, exec.AutoAnalyzeMinCnt+1, (exec.AutoAnalyzeMinCnt+1)*2, map[int64]*statistics.Column{ + HistColl: *statistics.NewHistCollWithColsAndIdxs(0, false, statistics.AutoAnalyzeMinCnt+1, (statistics.AutoAnalyzeMinCnt+1)*2, map[int64]*statistics.Column{ 1: { StatsVer: 2, Histogram: statistics.Histogram{ @@ -646,7 +646,7 @@ func TestCalculateIndicatorsForPartitions(t *testing.T) { ID: 2, Name: "p1", }: { - HistColl: *statistics.NewHistCollWithColsAndIdxs(0, false, exec.AutoAnalyzeMinCnt+1, 0, map[int64]*statistics.Column{ + HistColl: *statistics.NewHistCollWithColsAndIdxs(0, false, statistics.AutoAnalyzeMinCnt+1, 0, map[int64]*statistics.Column{ 1: { StatsVer: 2, Histogram: statistics.Histogram{ @@ -706,7 +706,7 @@ func TestCalculateIndicatorsForPartitions(t *testing.T) { ID: 1, Name: "p0", }: { - HistColl: *statistics.NewHistCollWithColsAndIdxs(0, false, exec.AutoAnalyzeMinCnt+1, 0, map[int64]*statistics.Column{ + HistColl: *statistics.NewHistCollWithColsAndIdxs(0, false, statistics.AutoAnalyzeMinCnt+1, 0, map[int64]*statistics.Column{ 1: { StatsVer: 2, Histogram: statistics.Histogram{ @@ -728,7 +728,7 @@ func TestCalculateIndicatorsForPartitions(t *testing.T) { ID: 2, Name: "p1", }: { - HistColl: *statistics.NewHistCollWithColsAndIdxs(0, false, exec.AutoAnalyzeMinCnt+1, 0, map[int64]*statistics.Column{ + HistColl: *statistics.NewHistCollWithColsAndIdxs(0, false, statistics.AutoAnalyzeMinCnt+1, 0, map[int64]*statistics.Column{ 1: { StatsVer: 2, Histogram: statistics.Histogram{ @@ -817,14 +817,14 @@ func TestCheckNewlyAddedIndexesNeedAnalyzeForPartitionedTable(t *testing.T) { ID: 1, Name: "p0", }: { - HistColl: *statistics.NewHistCollWithColsAndIdxs(0, false, exec.AutoAnalyzeMinCnt+1, 0, nil, map[int64]*statistics.Index{}), + HistColl: *statistics.NewHistCollWithColsAndIdxs(0, false, statistics.AutoAnalyzeMinCnt+1, 0, nil, map[int64]*statistics.Index{}), ColAndIdxExistenceMap: statistics.NewColAndIndexExistenceMap(0, 0), }, { ID: 2, Name: "p1", }: { - HistColl: *statistics.NewHistCollWithColsAndIdxs(0, false, exec.AutoAnalyzeMinCnt+1, 0, nil, map[int64]*statistics.Index{ + HistColl: *statistics.NewHistCollWithColsAndIdxs(0, false, statistics.AutoAnalyzeMinCnt+1, 0, nil, map[int64]*statistics.Index{ 2: { StatsVer: 2, }, diff --git a/pkg/statistics/handle/bootstrap.go b/pkg/statistics/handle/bootstrap.go index c2157f21eed39..936f4f34793a2 100644 --- a/pkg/statistics/handle/bootstrap.go +++ b/pkg/statistics/handle/bootstrap.go @@ -42,8 +42,12 @@ import ( "go.uber.org/zap" ) -// initStatsStep is the step to load stats by paging. -const initStatsStep = int64(500) +const ( + // initStatsStep is the step to load stats by paging. + initStatsStep = int64(500) + // initStatsPercentageInterval is the interval to print the percentage of loading stats. + initStatsPercentageInterval = float64(33) +) var maxTidRecord MaxTidRecord @@ -379,7 +383,7 @@ func (h *Handle) initStatsHistogramsConcurrency(is infoschema.InfoSchema, cache tid := int64(0) ls := initstats.NewRangeWorker("histogram", func(task initstats.Task) error { return h.initStatsHistogramsByPaging(is, cache, task, totalMemory) - }, uint64(maxTid), uint64(initStatsStep)) + }, uint64(maxTid), uint64(initStatsStep), initStatsPercentageInterval) ls.LoadStats() for tid <= maxTid { ls.SendTask(initstats.Task{ @@ -498,7 +502,7 @@ func (h *Handle) initStatsTopNConcurrency(cache statstypes.StatsCache, totalMemo return nil } return h.initStatsTopNByPaging(cache, task, totalMemory) - }, uint64(maxTid), uint64(initStatsStep)) + }, uint64(maxTid), uint64(initStatsStep), initStatsPercentageInterval) ls.LoadStats() for tid <= maxTid { if isFullCache(cache, totalMemory) { @@ -703,7 +707,7 @@ func (h *Handle) initStatsBucketsConcurrency(cache statstypes.StatsCache, totalM return nil } return h.initStatsBucketsByPaging(cache, task) - }, uint64(maxTid), uint64(initStatsStep)) + }, uint64(maxTid), uint64(initStatsStep), initStatsPercentageInterval) ls.LoadStats() for tid <= maxTid { ls.SendTask(initstats.Task{ @@ -775,6 +779,7 @@ func (h *Handle) InitStats(ctx context.Context, is infoschema.InfoSchema) (err e return errors.Trace(err) } statslogutil.StatsLogger().Info("complete to load the meta") + initstats.InitStatsPercentage.Store(initStatsPercentageInterval) if config.GetGlobalConfig().Performance.ConcurrentlyInitStats { err = h.initStatsHistogramsConcurrency(is, cache, totalMemory) } else { @@ -789,6 +794,7 @@ func (h *Handle) InitStats(ctx context.Context, is infoschema.InfoSchema) (err e } else { err = h.initStatsTopN(cache, totalMemory) } + initstats.InitStatsPercentage.Store(initStatsPercentageInterval * 2) statslogutil.StatsLogger().Info("complete to load the topn") if err != nil { return err diff --git a/pkg/statistics/handle/cache/statscache.go b/pkg/statistics/handle/cache/statscache.go index c42f2f02e6928..66444375ea6e9 100644 --- a/pkg/statistics/handle/cache/statscache.go +++ b/pkg/statistics/handle/cache/statscache.go @@ -258,7 +258,14 @@ func (s *StatsCacheImpl) SetStatsCacheCapacity(c int64) { // UpdateStatsHealthyMetrics updates stats healthy distribution metrics according to stats cache. func (s *StatsCacheImpl) UpdateStatsHealthyMetrics() { distribution := make([]int64, 5) + uneligibleAnalyze := 0 for _, tbl := range s.Values() { + distribution[4]++ // total table count + isEligibleForAnalysis := tbl.IsEligibleForAnalysis() + if !isEligibleForAnalysis { + uneligibleAnalyze++ + continue + } healthy, ok := tbl.GetStatsHealthy() if !ok { continue @@ -272,9 +279,9 @@ func (s *StatsCacheImpl) UpdateStatsHealthyMetrics() { } else { distribution[3]++ } - distribution[4]++ } for i, val := range distribution { handle_metrics.StatsHealthyGauges[i].Set(float64(val)) } + handle_metrics.StatsHealthyGauges[5].Set(float64(uneligibleAnalyze)) } diff --git a/pkg/statistics/handle/globalstats/global_stats_test.go b/pkg/statistics/handle/globalstats/global_stats_test.go index 3272e36e6cce2..828ff6e35b8d3 100644 --- a/pkg/statistics/handle/globalstats/global_stats_test.go +++ b/pkg/statistics/handle/globalstats/global_stats_test.go @@ -783,9 +783,9 @@ func TestGlobalStats(t *testing.T) { // Even if we have global-stats, we will not use it when the switch is set to `static`. tk.MustExec("set @@tidb_partition_prune_mode = 'static';") tk.MustQuery("explain format = 'brief' select a from t where a > 5").Check(testkit.Rows( - "PartitionUnion 4.00 root ", - "├─IndexReader 0.00 root index:IndexRangeScan", - "│ └─IndexRangeScan 0.00 cop[tikv] table:t, partition:p0, index:a(a) range:(5,+inf], keep order:false", + "PartitionUnion 5.00 root ", + "├─IndexReader 1.00 root index:IndexRangeScan", + "│ └─IndexRangeScan 1.00 cop[tikv] table:t, partition:p0, index:a(a) range:(5,+inf], keep order:false", "├─IndexReader 2.00 root index:IndexRangeScan", "│ └─IndexRangeScan 2.00 cop[tikv] table:t, partition:p1, index:a(a) range:(5,+inf], keep order:false", "└─IndexReader 2.00 root index:IndexRangeScan", @@ -879,7 +879,7 @@ func TestGlobalIndexStatistics(t *testing.T) { "PARTITION p3 VALUES LESS THAN (40))") require.Nil(t, h.HandleDDLEvent(<-h.DDLEventCh())) tk.MustExec("insert into t(a,b) values (1,1), (2,2), (3,3), (15,15), (25,25), (35,35)") - tk.MustExec("ALTER TABLE t ADD UNIQUE INDEX idx(b)") + tk.MustExec("ALTER TABLE t ADD UNIQUE INDEX idx(b) GLOBAL") require.Nil(t, h.DumpStatsDeltaToKV(true)) tk.MustExec("analyze table t") require.Nil(t, h.Update(context.Background(), dom.InfoSchema())) @@ -892,7 +892,7 @@ func TestGlobalIndexStatistics(t *testing.T) { // analyze table t index idx tk.MustExec("drop table if exists t") require.Nil(t, h.HandleDDLEvent(<-h.DDLEventCh())) - tk.MustExec("CREATE TABLE t ( a int, b int, c int default 0, primary key(b, a) clustered )" + + tk.MustExec("CREATE TABLE t ( a int, b int, c int default 0, primary key(b, a) clustered)" + "PARTITION BY RANGE (a) (" + "PARTITION p0 VALUES LESS THAN (10)," + "PARTITION p1 VALUES LESS THAN (20)," + @@ -900,7 +900,7 @@ func TestGlobalIndexStatistics(t *testing.T) { "PARTITION p3 VALUES LESS THAN (40));") require.Nil(t, h.HandleDDLEvent(<-h.DDLEventCh())) tk.MustExec("insert into t(a,b) values (1,1), (2,2), (3,3), (15,15), (25,25), (35,35)") - tk.MustExec("ALTER TABLE t ADD UNIQUE INDEX idx(b);") + tk.MustExec("ALTER TABLE t ADD UNIQUE INDEX idx(b) GLOBAL") require.Nil(t, h.DumpStatsDeltaToKV(true)) tk.MustExec("analyze table t index idx") require.Nil(t, h.Update(context.Background(), dom.InfoSchema())) @@ -918,7 +918,7 @@ func TestGlobalIndexStatistics(t *testing.T) { "PARTITION p3 VALUES LESS THAN (40));") require.Nil(t, h.HandleDDLEvent(<-h.DDLEventCh())) tk.MustExec("insert into t(a,b) values (1,1), (2,2), (3,3), (15,15), (25,25), (35,35)") - tk.MustExec("ALTER TABLE t ADD UNIQUE INDEX idx(b);") + tk.MustExec("ALTER TABLE t ADD UNIQUE INDEX idx(b) GLOBAL") require.Nil(t, h.DumpStatsDeltaToKV(true)) tk.MustExec("analyze table t index") require.Nil(t, h.Update(context.Background(), dom.InfoSchema())) diff --git a/pkg/statistics/handle/handle.go b/pkg/statistics/handle/handle.go index cc9d0e5e11071..9b62f8b789d1b 100644 --- a/pkg/statistics/handle/handle.go +++ b/pkg/statistics/handle/handle.go @@ -33,6 +33,7 @@ import ( "github.com/pingcap/tidb/pkg/statistics/handle/types" "github.com/pingcap/tidb/pkg/statistics/handle/usage" "github.com/pingcap/tidb/pkg/statistics/handle/util" + pkgutil "github.com/pingcap/tidb/pkg/util" "go.uber.org/zap" ) @@ -110,9 +111,10 @@ func NewHandle( _, /* ctx, keep it for feature usage */ initStatsCtx sessionctx.Context, lease time.Duration, - pool util.SessionPool, + pool pkgutil.SessionPool, tracker sysproctrack.Tracker, autoAnalyzeProcIDGetter func() uint64, + releaseAutoAnalyzeProcID func(uint64), ) (*Handle, error) { handle := &Handle{ InitStatsDone: make(chan struct{}), @@ -128,7 +130,7 @@ func NewHandle( return nil, err } handle.Pool = util.NewPool(pool) - handle.AutoAnalyzeProcIDGenerator = util.NewGenerator(autoAnalyzeProcIDGetter) + handle.AutoAnalyzeProcIDGenerator = util.NewGenerator(autoAnalyzeProcIDGetter, releaseAutoAnalyzeProcID) handle.LeaseGetter = util.NewLeaseGetter(lease) handle.StatsCache = statsCache handle.StatsHistory = history.NewStatsHistory(handle) diff --git a/pkg/statistics/handle/handletest/handle_test.go b/pkg/statistics/handle/handletest/handle_test.go index 506ad7052afc8..5c83c9e23a8c5 100644 --- a/pkg/statistics/handle/handletest/handle_test.go +++ b/pkg/statistics/handle/handletest/handle_test.go @@ -95,7 +95,7 @@ func TestColumnIDs(t *testing.T) { // At that time, we should get c2's stats instead of c1's. count, err = cardinality.GetRowCountByColumnRanges(sctx, &statsTbl.HistColl, tableInfo.Columns[0].ID, []*ranger.Range{ran}) require.NoError(t, err) - require.Equal(t, 0.0, count) + require.Equal(t, 1.0, count) } func TestDurationToTS(t *testing.T) { @@ -118,7 +118,7 @@ func TestVersion(t *testing.T) { tbl1, err := is.TableByName(context.Background(), model.NewCIStr("test"), model.NewCIStr("t1")) require.NoError(t, err) tableInfo1 := tbl1.Meta() - h, err := handle.NewHandle(testKit.Session(), testKit2.Session(), time.Millisecond, do.SysSessionPool(), do.SysProcTracker(), do.GetAutoAnalyzeProcID) + h, err := handle.NewHandle(testKit.Session(), testKit2.Session(), time.Millisecond, do.SysSessionPool(), do.SysProcTracker(), do.NextConnID, do.ReleaseConnID) defer func() { h.Close() }() diff --git a/pkg/statistics/handle/initstats/BUILD.bazel b/pkg/statistics/handle/initstats/BUILD.bazel index af81cfe96d408..c708dbdbed829 100644 --- a/pkg/statistics/handle/initstats/BUILD.bazel +++ b/pkg/statistics/handle/initstats/BUILD.bazel @@ -12,6 +12,7 @@ go_library( "//pkg/config", "//pkg/util", "//pkg/util/logutil", + "@org_uber_go_atomic//:atomic", "@org_uber_go_zap//:zap", ], ) diff --git a/pkg/statistics/handle/initstats/load_stats_page.go b/pkg/statistics/handle/initstats/load_stats_page.go index 5b4ff5260cb90..59caac8e18bf4 100644 --- a/pkg/statistics/handle/initstats/load_stats_page.go +++ b/pkg/statistics/handle/initstats/load_stats_page.go @@ -21,9 +21,13 @@ import ( "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/logutil" + atomicutil "go.uber.org/atomic" "go.uber.org/zap" ) +// InitStatsPercentage is the percentage of the table to load stats. +var InitStatsPercentage atomicutil.Float64 + var ( sampleLoggerFactory = logutil.SampleLoggerFactory(time.Minute, 1, zap.String(logutil.LogFieldCategory, "stats")) ) @@ -43,26 +47,30 @@ type Task struct { // RangeWorker is used to load stats concurrently by the range of table id. type RangeWorker struct { - dealFunc func(task Task) error - taskChan chan Task - logger *zap.Logger - taskName string - wg util.WaitGroupWrapper - taskCnt uint64 - completeTaskCnt atomic.Uint64 + dealFunc func(task Task) error + taskChan chan Task + logger *zap.Logger + taskName string + wg util.WaitGroupWrapper + taskCnt uint64 + completeTaskCnt atomic.Uint64 + totalPercentage float64 + totalPercentageStep float64 } // NewRangeWorker creates a new RangeWorker. -func NewRangeWorker(taskName string, dealFunc func(task Task) error, maxTid, initStatsStep uint64) *RangeWorker { +func NewRangeWorker(taskName string, dealFunc func(task Task) error, maxTid, initStatsStep uint64, totalPercentageStep float64) *RangeWorker { taskCnt := uint64(1) if maxTid > initStatsStep*2 { taskCnt = maxTid / initStatsStep } worker := &RangeWorker{ - taskName: taskName, - dealFunc: dealFunc, - taskChan: make(chan Task, 1), - taskCnt: taskCnt, + taskName: taskName, + dealFunc: dealFunc, + taskChan: make(chan Task, 1), + taskCnt: taskCnt, + totalPercentage: InitStatsPercentage.Load(), + totalPercentageStep: totalPercentageStep, } worker.logger = singletonStatsSamplerLogger() return worker @@ -85,6 +93,8 @@ func (ls *RangeWorker) loadStats() { } if ls.logger != nil { completeTaskCnt := ls.completeTaskCnt.Add(1) + taskPercentage := float64(completeTaskCnt)/float64(ls.taskCnt)*ls.totalPercentageStep + ls.totalPercentage + InitStatsPercentage.Store(taskPercentage) ls.logger.Info(fmt.Sprintf("load %s [%d/%d]", ls.taskName, completeTaskCnt, ls.taskCnt)) } } diff --git a/pkg/statistics/handle/lockstats/BUILD.bazel b/pkg/statistics/handle/lockstats/BUILD.bazel index 986c1c43e31e3..f125204962418 100644 --- a/pkg/statistics/handle/lockstats/BUILD.bazel +++ b/pkg/statistics/handle/lockstats/BUILD.bazel @@ -15,6 +15,7 @@ go_library( "//pkg/statistics/handle/logutil", "//pkg/statistics/handle/types", "//pkg/statistics/handle/util", + "//pkg/util", "//pkg/util/sqlexec", "@com_github_pingcap_errors//:errors", "@org_uber_go_zap//:zap", diff --git a/pkg/statistics/handle/lockstats/lock_stats.go b/pkg/statistics/handle/lockstats/lock_stats.go index bb4a04cd2600b..445dbd51f2087 100644 --- a/pkg/statistics/handle/lockstats/lock_stats.go +++ b/pkg/statistics/handle/lockstats/lock_stats.go @@ -23,6 +23,7 @@ import ( "github.com/pingcap/tidb/pkg/statistics/handle/logutil" "github.com/pingcap/tidb/pkg/statistics/handle/types" "github.com/pingcap/tidb/pkg/statistics/handle/util" + pkgutil "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/sqlexec" "go.uber.org/zap" ) @@ -38,11 +39,11 @@ const ( // statsLockImpl implements the util.StatsLock interface. type statsLockImpl struct { - pool util.SessionPool + pool pkgutil.SessionPool } // NewStatsLock creates a new StatsLock. -func NewStatsLock(pool util.SessionPool) types.StatsLock { +func NewStatsLock(pool pkgutil.SessionPool) types.StatsLock { return &statsLockImpl{pool: pool} } diff --git a/pkg/statistics/handle/metrics/metrics.go b/pkg/statistics/handle/metrics/metrics.go index 175fef6359df4..c4fd3a644546d 100644 --- a/pkg/statistics/handle/metrics/metrics.go +++ b/pkg/statistics/handle/metrics/metrics.go @@ -40,6 +40,7 @@ func InitMetricsVars() { metrics.StatsHealthyGauge.WithLabelValues("[100,100]"), // [0,100] should always be the last metrics.StatsHealthyGauge.WithLabelValues("[0,100]"), + metrics.StatsHealthyGauge.WithLabelValues("unneeded analyze"), } DumpHistoricalStatsSuccessCounter = metrics.HistoricalStatsCounter.WithLabelValues("dump", "success") diff --git a/pkg/statistics/handle/storage/gc.go b/pkg/statistics/handle/storage/gc.go index 51664008fd11a..0d12327857952 100644 --- a/pkg/statistics/handle/storage/gc.go +++ b/pkg/statistics/handle/storage/gc.go @@ -76,9 +76,12 @@ func (gc *statsGCImpl) DeleteTableStatsFromKV(statsIDs []int64) (err error) { // GCStats will garbage collect the useless stats' info. // For dropped tables, we will first update their version // so that other tidb could know that table is deleted. -func GCStats(sctx sessionctx.Context, +func GCStats( + sctx sessionctx.Context, statsHandle types.StatsHandle, - is infoschema.InfoSchema, ddlLease time.Duration) (err error) { + is infoschema.InfoSchema, + ddlLease time.Duration, +) (err error) { // To make sure that all the deleted tables' schema and stats info have been acknowledged to all tidb, // we only garbage collect version before 10 lease. lease := max(statsHandle.Lease(), ddlLease) @@ -109,7 +112,7 @@ func GCStats(sctx sessionctx.Context, if err := gcTableStats(sctx, statsHandle, is, row.GetInt64(0)); err != nil { return errors.Trace(err) } - _, existed := is.TableByID(row.GetInt64(0)) + _, existed := is.TableByID(context.Background(), row.GetInt64(0)) if !existed { if err := gcHistoryStatsFromKV(sctx, row.GetInt64(0)); err != nil { return errors.Trace(err) diff --git a/pkg/statistics/handle/storage/save.go b/pkg/statistics/handle/storage/save.go index 38c8ccefc5f59..5492de3d1f0d1 100644 --- a/pkg/statistics/handle/storage/save.go +++ b/pkg/statistics/handle/storage/save.go @@ -271,7 +271,7 @@ func SaveTableStatsToStorage(sctx sessionctx.Context, return 0, err } } - if _, err = util.Exec(sctx, "replace into mysql.stats_histograms (table_id, is_index, hist_id, distinct_count, version, null_count, cm_sketch, tot_col_size, stats_ver, flag, correlation) values (%?, %?, %?, %?, %?, %?, %?, %?, %?, %?, %?)", + if _, err = util.Exec(sctx, "replace into mysql.stats_histograms (table_id, is_index, hist_id, distinct_count, version, null_count, cm_sketch, tot_col_size, stats_ver, flag, correlation) values (%?, %?, %?, %?, %?, %?, %?, GREATEST(%?, 0), %?, %?, %?)", tableID, result.IsIndex, hg.ID, hg.NDV, version, hg.NullCount, cmSketch, hg.TotColSize, results.StatsVer, statistics.AnalyzeFlag, hg.Correlation); err != nil { return 0, err } @@ -371,7 +371,7 @@ func SaveStatsToStorage( if isAnalyzed == 1 { flag = statistics.AnalyzeFlag } - if _, err = util.Exec(sctx, "replace into mysql.stats_histograms (table_id, is_index, hist_id, distinct_count, version, null_count, cm_sketch, tot_col_size, stats_ver, flag, correlation) values (%?, %?, %?, %?, %?, %?, %?, %?, %?, %?, %?)", + if _, err = util.Exec(sctx, "replace into mysql.stats_histograms (table_id, is_index, hist_id, distinct_count, version, null_count, cm_sketch, tot_col_size, stats_ver, flag, correlation) values (%?, %?, %?, %?, %?, %?, %?, GREATEST(%?, 0), %?, %?, %?)", tableID, isIndex, hg.ID, hg.NDV, version, hg.NullCount, cmSketch, hg.TotColSize, statsVersion, flag, hg.Correlation); err != nil { return 0, err } diff --git a/pkg/statistics/handle/storage/stats_read_writer.go b/pkg/statistics/handle/storage/stats_read_writer.go index 60ed54de04393..7f9b1cd9553ee 100644 --- a/pkg/statistics/handle/storage/stats_read_writer.go +++ b/pkg/statistics/handle/storage/stats_read_writer.go @@ -100,7 +100,7 @@ func (s *statsReadWriter) InsertColStats2KV(physicalID int64, colInfos []*model. } } else { // If this stats exists, we insert histogram meta first, the distinct_count will always be one. - if _, err := util.Exec(sctx, "insert into mysql.stats_histograms (version, table_id, is_index, hist_id, distinct_count, tot_col_size) values (%?, %?, 0, %?, 1, %?)", startTS, physicalID, colInfo.ID, int64(len(value.GetBytes()))*count); err != nil { + if _, err := util.Exec(sctx, "insert into mysql.stats_histograms (version, table_id, is_index, hist_id, distinct_count, tot_col_size) values (%?, %?, 0, %?, 1, GREATEST(%?, 0))", startTS, physicalID, colInfo.ID, int64(len(value.GetBytes()))*count); err != nil { return err } value, err = value.ConvertTo(sctx.GetSessionVars().StmtCtx.TypeCtx(), types.NewFieldType(mysql.TypeBlob)) diff --git a/pkg/statistics/handle/storage/update.go b/pkg/statistics/handle/storage/update.go index 7ff82eade236b..f295faa4645ac 100644 --- a/pkg/statistics/handle/storage/update.go +++ b/pkg/statistics/handle/storage/update.go @@ -96,7 +96,7 @@ func DumpTableStatColSizeToKV(sctx sessionctx.Context, id int64, delta variable. return nil } sql := fmt.Sprintf("insert into mysql.stats_histograms (table_id, is_index, hist_id, distinct_count, tot_col_size) "+ - "values %s on duplicate key update tot_col_size = tot_col_size + values(tot_col_size)", strings.Join(values, ",")) + "values %s on duplicate key update tot_col_size = GREATEST(0, tot_col_size + values(tot_col_size))", strings.Join(values, ",")) _, _, err := statsutil.ExecRows(sctx, sql) return errors.Trace(err) } diff --git a/pkg/statistics/handle/types/interfaces.go b/pkg/statistics/handle/types/interfaces.go index 5fbb9b66bd5fc..20c724b25a578 100644 --- a/pkg/statistics/handle/types/interfaces.go +++ b/pkg/statistics/handle/types/interfaces.go @@ -121,6 +121,21 @@ type StatsAnalyze interface { // InsertAnalyzeJob inserts analyze job into mysql.analyze_jobs and gets job ID for further updating job. InsertAnalyzeJob(job *statistics.AnalyzeJob, instance string, procID uint64) error + // StartAnalyzeJob updates the job status to `running` and sets the start time. + // There is no guarantee that the job record will actually be updated. If the job fails to start, an error will be logged. + // It is OK because this won't affect the analysis job's success. + StartAnalyzeJob(job *statistics.AnalyzeJob) + + // UpdateAnalyzeJobProgress updates the current progress of the analyze job. + // There is no guarantee that the job record will actually be updated. If the job fails to update, an error will be logged. + // It is OK because this won't affect the analysis job's success. + UpdateAnalyzeJobProgress(job *statistics.AnalyzeJob, rowCount int64) + + // FinishAnalyzeJob updates the job status to `finished`, sets the end time, and updates the job info. + // There is no guarantee that the job record will actually be updated. If the job fails to finish, an error will be logged. + // It is OK because this won't affect the analysis job's success. + FinishAnalyzeJob(job *statistics.AnalyzeJob, failReason error, analyzeType statistics.JobType) + // DeleteAnalyzeJobs deletes the analyze jobs whose update time is earlier than updateTime. DeleteAnalyzeJobs(updateTime time.Time) error diff --git a/pkg/statistics/handle/updatetest/BUILD.bazel b/pkg/statistics/handle/updatetest/BUILD.bazel index 6dfe9f61ede3a..b204b0035b10b 100644 --- a/pkg/statistics/handle/updatetest/BUILD.bazel +++ b/pkg/statistics/handle/updatetest/BUILD.bazel @@ -17,7 +17,6 @@ go_test( "//pkg/sessionctx/stmtctx", "//pkg/sessionctx/variable", "//pkg/statistics", - "//pkg/statistics/handle/autoanalyze/exec", "//pkg/statistics/handle/usage", "//pkg/statistics/handle/util", "//pkg/testkit", diff --git a/pkg/statistics/handle/updatetest/update_test.go b/pkg/statistics/handle/updatetest/update_test.go index 218abfde66572..0e4ac3a82c7d8 100644 --- a/pkg/statistics/handle/updatetest/update_test.go +++ b/pkg/statistics/handle/updatetest/update_test.go @@ -30,7 +30,6 @@ import ( "github.com/pingcap/tidb/pkg/sessionctx/stmtctx" "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/statistics" - "github.com/pingcap/tidb/pkg/statistics/handle/autoanalyze/exec" "github.com/pingcap/tidb/pkg/statistics/handle/usage" "github.com/pingcap/tidb/pkg/statistics/handle/util" "github.com/pingcap/tidb/pkg/testkit" @@ -367,10 +366,10 @@ func TestAutoUpdate(t *testing.T) { testKit.MustExec("create table t (a varchar(20))") analyzehelper.TriggerPredicateColumnsCollection(t, testKit, store, "t", "a") - exec.AutoAnalyzeMinCnt = 0 + statistics.AutoAnalyzeMinCnt = 0 testKit.MustExec("set global tidb_auto_analyze_ratio = 0.2") defer func() { - exec.AutoAnalyzeMinCnt = 1000 + statistics.AutoAnalyzeMinCnt = 1000 testKit.MustExec("set global tidb_auto_analyze_ratio = 0.5") }() @@ -472,10 +471,10 @@ func TestAutoUpdatePartition(t *testing.T) { testKit.MustExec("create table t (a int, index idx(a)) PARTITION BY RANGE (a) (PARTITION p0 VALUES LESS THAN (6))") testKit.MustExec("analyze table t") - exec.AutoAnalyzeMinCnt = 0 + statistics.AutoAnalyzeMinCnt = 0 testKit.MustExec("set global tidb_auto_analyze_ratio = 0.6") defer func() { - exec.AutoAnalyzeMinCnt = 1000 + statistics.AutoAnalyzeMinCnt = 1000 testKit.MustExec("set global tidb_auto_analyze_ratio = 0.5") }() @@ -517,7 +516,7 @@ func TestIssue25700(t *testing.T) { tk.MustExec("drop table if exists t") tk.MustExec("CREATE TABLE `t` ( `ldecimal` decimal(32,4) DEFAULT NULL, `rdecimal` decimal(32,4) DEFAULT NULL, `gen_col` decimal(36,4) GENERATED ALWAYS AS (`ldecimal` + `rdecimal`) VIRTUAL, `col_timestamp` timestamp(3) NULL DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;") tk.MustExec("analyze table t") - tk.MustExec("INSERT INTO `t` (`ldecimal`, `rdecimal`, `col_timestamp`) VALUES (2265.2200, 9843.4100, '1999-12-31 16:00:00')" + strings.Repeat(", (2265.2200, 9843.4100, '1999-12-31 16:00:00')", int(exec.AutoAnalyzeMinCnt))) + tk.MustExec("INSERT INTO `t` (`ldecimal`, `rdecimal`, `col_timestamp`) VALUES (2265.2200, 9843.4100, '1999-12-31 16:00:00')" + strings.Repeat(", (2265.2200, 9843.4100, '1999-12-31 16:00:00')", int(statistics.AutoAnalyzeMinCnt))) require.NoError(t, dom.StatsHandle().DumpStatsDeltaToKV(true)) require.NoError(t, dom.StatsHandle().Update(context.Background(), dom.InfoSchema())) @@ -805,10 +804,10 @@ func TestAutoUpdatePartitionInDynamicOnlyMode(t *testing.T) { testKit.MustExec("set @@tidb_analyze_version = 2") testKit.MustExec("analyze table t") - exec.AutoAnalyzeMinCnt = 0 + statistics.AutoAnalyzeMinCnt = 0 testKit.MustExec("set global tidb_auto_analyze_ratio = 0.1") defer func() { - exec.AutoAnalyzeMinCnt = 1000 + statistics.AutoAnalyzeMinCnt = 1000 testKit.MustExec("set global tidb_auto_analyze_ratio = 0.5") }() @@ -851,9 +850,9 @@ func TestAutoAnalyzeRatio(t *testing.T) { oriStart := tk.MustQuery("select @@tidb_auto_analyze_start_time").Rows()[0][0].(string) oriEnd := tk.MustQuery("select @@tidb_auto_analyze_end_time").Rows()[0][0].(string) - exec.AutoAnalyzeMinCnt = 0 + statistics.AutoAnalyzeMinCnt = 0 defer func() { - exec.AutoAnalyzeMinCnt = 1000 + statistics.AutoAnalyzeMinCnt = 1000 tk.MustExec(fmt.Sprintf("set global tidb_auto_analyze_start_time='%v'", oriStart)) tk.MustExec(fmt.Sprintf("set global tidb_auto_analyze_end_time='%v'", oriEnd)) }() @@ -1053,9 +1052,9 @@ func TestStatsLockUnlockForAutoAnalyze(t *testing.T) { oriStart := tk.MustQuery("select @@tidb_auto_analyze_start_time").Rows()[0][0].(string) oriEnd := tk.MustQuery("select @@tidb_auto_analyze_end_time").Rows()[0][0].(string) - exec.AutoAnalyzeMinCnt = 0 + statistics.AutoAnalyzeMinCnt = 0 defer func() { - exec.AutoAnalyzeMinCnt = 1000 + statistics.AutoAnalyzeMinCnt = 1000 tk.MustExec(fmt.Sprintf("set global tidb_auto_analyze_start_time='%v'", oriStart)) tk.MustExec(fmt.Sprintf("set global tidb_auto_analyze_end_time='%v'", oriEnd)) }() @@ -1254,15 +1253,15 @@ func TestNotDumpSysTable(t *testing.T) { func TestAutoAnalyzePartitionTableAfterAddingIndex(t *testing.T) { store, dom := testkit.CreateMockStoreAndDomain(t) tk := testkit.NewTestKit(t, store) - oriMinCnt := exec.AutoAnalyzeMinCnt + oriMinCnt := statistics.AutoAnalyzeMinCnt oriStart := tk.MustQuery("select @@tidb_auto_analyze_start_time").Rows()[0][0].(string) oriEnd := tk.MustQuery("select @@tidb_auto_analyze_end_time").Rows()[0][0].(string) defer func() { - exec.AutoAnalyzeMinCnt = oriMinCnt + statistics.AutoAnalyzeMinCnt = oriMinCnt tk.MustExec(fmt.Sprintf("set global tidb_auto_analyze_start_time='%v'", oriStart)) tk.MustExec(fmt.Sprintf("set global tidb_auto_analyze_end_time='%v'", oriEnd)) }() - exec.AutoAnalyzeMinCnt = 0 + statistics.AutoAnalyzeMinCnt = 0 tk.MustExec("set global tidb_auto_analyze_start_time='00:00 +0000'") tk.MustExec("set global tidb_auto_analyze_end_time='23:59 +0000'") tk.MustExec("set global tidb_analyze_version = 2") diff --git a/pkg/statistics/handle/usage/BUILD.bazel b/pkg/statistics/handle/usage/BUILD.bazel index 092b379fe35ee..3ea0a7ed2e01d 100644 --- a/pkg/statistics/handle/usage/BUILD.bazel +++ b/pkg/statistics/handle/usage/BUILD.bazel @@ -39,7 +39,6 @@ go_test( flaky = True, shard_count = 10, deps = [ - "//pkg/infoschema", "//pkg/parser/model", "//pkg/statistics/handle/usage/indexusage", "//pkg/testkit", diff --git a/pkg/statistics/handle/usage/index_usage.go b/pkg/statistics/handle/usage/index_usage.go index ca747f09dab8e..c440d79b46daa 100644 --- a/pkg/statistics/handle/usage/index_usage.go +++ b/pkg/statistics/handle/usage/index_usage.go @@ -15,6 +15,8 @@ package usage import ( + "context" + "github.com/pingcap/tidb/pkg/infoschema" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/sessionctx" @@ -33,7 +35,7 @@ func (u *statsUsageImpl) GCIndexUsage() error { return util.CallWithSCtx(u.statsHandle.SPool(), func(sctx sessionctx.Context) error { schema := sctx.GetDomainInfoSchema().(infoschema.InfoSchema) u.idxUsageCollector.GCIndexUsage(func(id int64) (*model.TableInfo, bool) { - tbl, ok := schema.TableByID(id) + tbl, ok := schema.TableByID(context.Background(), id) if !ok { return nil, false } diff --git a/pkg/statistics/handle/usage/index_usage_integration_test.go b/pkg/statistics/handle/usage/index_usage_integration_test.go index 2d459ae1c05c6..7ab1f63c81eb3 100644 --- a/pkg/statistics/handle/usage/index_usage_integration_test.go +++ b/pkg/statistics/handle/usage/index_usage_integration_test.go @@ -15,10 +15,10 @@ package usage_test import ( + "context" "fmt" "testing" - "github.com/pingcap/tidb/pkg/infoschema" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/statistics/handle/usage/indexusage" "github.com/pingcap/tidb/pkg/testkit" @@ -50,9 +50,13 @@ func TestGCIndexUsage(t *testing.T) { } c := dom.StatsHandle().NewSessionIndexUsageCollector() - db, ok := tk.Session().GetDomainInfoSchema().(infoschema.InfoSchema).SchemaByName(model.NewCIStr("test")) + is := tk.Session().GetDomainInfoSchema() + db, ok := is.SchemaByName(model.NewCIStr("test")) require.True(t, ok) - for _, tbl := range db.Tables { + + tblInfos, err := is.SchemaTableInfos(context.Background(), db.Name) + require.NoError(t, err) + for _, tbl := range tblInfos { for _, idx := range tbl.Indices { c.Update(tbl.ID, idx.ID, indexusage.NewSample(1, 2, 3, 4)) } @@ -62,7 +66,7 @@ func TestGCIndexUsage(t *testing.T) { dom.StatsHandle().StatsUsage.Close() verify := func(exist func(tblPos int, tbl *model.TableInfo, idxPos int, idx *model.IndexInfo) bool) { - for tblPos, tbl := range db.Tables { + for tblPos, tbl := range tblInfos { for idxPos, idx := range tbl.Indices { info := dom.StatsHandle().GetIndexUsage(tbl.ID, idx.ID) if exist(tblPos, tbl, idxPos, idx) { @@ -83,7 +87,7 @@ func TestGCIndexUsage(t *testing.T) { }) // drop index whose ID is greater or equal than 5 - for _, tbl := range db.Tables { + for _, tbl := range tblInfos { for _, idx := range tbl.Indices { if idx.ID >= 5 { tk.MustExec(fmt.Sprintf("DROP INDEX %s ON %s", idx.Name.String(), tbl.Name.String())) @@ -96,7 +100,7 @@ func TestGCIndexUsage(t *testing.T) { }) // drop table whose tblPos is greater or equal than 5 - for tblPos, tbl := range db.Tables { + for tblPos, tbl := range tblInfos { if tblPos >= 5 { tk.MustExec(fmt.Sprintf("DROP TABLE %s", tbl.Name.String())) } diff --git a/pkg/statistics/handle/usage/predicatecolumn/predicate_column.go b/pkg/statistics/handle/usage/predicatecolumn/predicate_column.go index 89c02c2b73d71..7bc88e11bc884 100644 --- a/pkg/statistics/handle/usage/predicatecolumn/predicate_column.go +++ b/pkg/statistics/handle/usage/predicatecolumn/predicate_column.go @@ -15,6 +15,7 @@ package predicatecolumn import ( + "context" "encoding/json" "fmt" "time" @@ -109,7 +110,7 @@ func GetPredicateColumns(sctx sessionctx.Context, tableID int64) ([]int64, error // cleanupDroppedColumnStatsUsage deletes the column stats usage information whose column is dropped. func cleanupDroppedColumnStatsUsage(sctx sessionctx.Context, tableID int64) error { is := sctx.GetDomainInfoSchema().(infoschema.InfoSchema) - table, ok := is.TableByID(tableID) + table, ok := is.TableByID(context.Background(), tableID) if !ok { // Usually, it should not happen. // But if it happens, we can safely do nothing. diff --git a/pkg/statistics/handle/util/BUILD.bazel b/pkg/statistics/handle/util/BUILD.bazel index 51be207e062e5..0163464af1169 100644 --- a/pkg/statistics/handle/util/BUILD.bazel +++ b/pkg/statistics/handle/util/BUILD.bazel @@ -19,6 +19,7 @@ go_library( "//pkg/parser/model", "//pkg/parser/terror", "//pkg/sessionctx", + "//pkg/sessionctx/sysproctrack", "//pkg/sessionctx/variable", "//pkg/statistics/handle/logutil", "//pkg/table", @@ -27,11 +28,11 @@ go_library( "//pkg/util/intest", "//pkg/util/sqlexec", "//pkg/util/sqlexec/mock", - "@com_github_ngaut_pools//:pools", "@com_github_pingcap_errors//:errors", "@com_github_pingcap_tipb//go-tipb", "@com_github_tiancaiamao_gp//:gp", "@com_github_tikv_client_go_v2//oracle", + "@org_golang_x_exp//maps", "@org_uber_go_atomic//:atomic", "@org_uber_go_zap//:zap", ], diff --git a/pkg/statistics/handle/util/auto_analyze_proc_id_generator.go b/pkg/statistics/handle/util/auto_analyze_proc_id_generator.go index b65dca74d369a..8b1566715d811 100644 --- a/pkg/statistics/handle/util/auto_analyze_proc_id_generator.go +++ b/pkg/statistics/handle/util/auto_analyze_proc_id_generator.go @@ -14,23 +14,33 @@ package util +import ( + "sync" + + "github.com/pingcap/tidb/pkg/sessionctx/sysproctrack" + "golang.org/x/exp/maps" +) + // AutoAnalyzeProcIDGenerator is used to generate auto analyze proc ID. type AutoAnalyzeProcIDGenerator interface { // AutoAnalyzeProcID generates an analyze ID. AutoAnalyzeProcID() uint64 + ReleaseAutoAnalyzeProcID(uint64) } var _ AutoAnalyzeProcIDGenerator = (*generator)(nil) type generator struct { // autoAnalyzeProcIDGetter is used to generate auto analyze ID. - autoAnalyzeProcIDGetter func() uint64 + autoAnalyzeProcIDGetter func() uint64 + releaseAutoAnalyzeProcID func(uint64) } // NewGenerator creates a new Generator. -func NewGenerator(autoAnalyzeProcIDGetter func() uint64) AutoAnalyzeProcIDGenerator { +func NewGenerator(autoAnalyzeProcIDGetter func() uint64, releaseAutoAnalyzeProcID func(uint64)) AutoAnalyzeProcIDGenerator { return &generator{ - autoAnalyzeProcIDGetter: autoAnalyzeProcIDGetter, + autoAnalyzeProcIDGetter: autoAnalyzeProcIDGetter, + releaseAutoAnalyzeProcID: releaseAutoAnalyzeProcID, } } @@ -38,3 +48,77 @@ func NewGenerator(autoAnalyzeProcIDGetter func() uint64) AutoAnalyzeProcIDGenera func (g *generator) AutoAnalyzeProcID() uint64 { return g.autoAnalyzeProcIDGetter() } + +// ReleaseAutoAnalyzeProcID implements AutoAnalyzeProcIDGenerator. +func (g *generator) ReleaseAutoAnalyzeProcID(id uint64) { + g.releaseAutoAnalyzeProcID(id) +} + +// GlobalAutoAnalyzeProcessList is used to track the auto analyze process. +var GlobalAutoAnalyzeProcessList = newGlobalAutoAnalyzeProcessList() + +type globalAutoAnalyzeProcessList struct { + processes map[uint64]struct{} + mu sync.RWMutex +} + +func newGlobalAutoAnalyzeProcessList() *globalAutoAnalyzeProcessList { + return &globalAutoAnalyzeProcessList{ + processes: make(map[uint64]struct{}), + } +} + +// Tracker is used to track the auto analyze process. +func (g *globalAutoAnalyzeProcessList) Tracker(id uint64) { + g.mu.Lock() + defer g.mu.Unlock() + g.processes[id] = struct{}{} +} + +// Untracker is used to untrack the auto analyze process. +func (g *globalAutoAnalyzeProcessList) Untracker(id uint64) { + g.mu.Lock() + defer g.mu.Unlock() + delete(g.processes, id) +} + +// AutoAnalyzeTracker is used to track the auto analyze process. +type AutoAnalyzeTracker struct { + track func(id uint64, ctx sysproctrack.TrackProc) error + untrack func(id uint64) +} + +// All returns all the auto analyze process IDs. +func (g *globalAutoAnalyzeProcessList) All() []uint64 { + g.mu.RLock() + defer g.mu.RUnlock() + return maps.Keys(g.processes) +} + +// Contains checks whether the auto analyze process ID is in the list. +func (g *globalAutoAnalyzeProcessList) Contains(id uint64) bool { + g.mu.RLock() + defer g.mu.RUnlock() + _, ok := g.processes[id] + return ok +} + +// NewAutoAnalyzeTracker creates a new AutoAnalyzeTracker. +func NewAutoAnalyzeTracker(track func(id uint64, ctx sysproctrack.TrackProc) error, untrack func(id uint64)) *AutoAnalyzeTracker { + return &AutoAnalyzeTracker{ + track: track, + untrack: untrack, + } +} + +// Track is used to track the auto analyze process. +func (t *AutoAnalyzeTracker) Track(id uint64, ctx sysproctrack.TrackProc) error { + GlobalAutoAnalyzeProcessList.Tracker(id) + return t.track(id, ctx) +} + +// UnTrack is used to untrack the auto analyze process. +func (t *AutoAnalyzeTracker) UnTrack(id uint64) { + GlobalAutoAnalyzeProcessList.Untracker(id) + t.untrack(id) +} diff --git a/pkg/statistics/handle/util/pool.go b/pkg/statistics/handle/util/pool.go index 6f6a3633459c9..c1656849909cc 100644 --- a/pkg/statistics/handle/util/pool.go +++ b/pkg/statistics/handle/util/pool.go @@ -18,23 +18,17 @@ import ( "math" "time" - "github.com/ngaut/pools" + "github.com/pingcap/tidb/pkg/util" "github.com/tiancaiamao/gp" ) -// SessionPool is used to recycle sessionctx. -type SessionPool interface { - Get() (pools.Resource, error) - Put(pools.Resource) -} - // Pool is used to reuse goroutine and session. type Pool interface { // GPool returns the goroutine pool. GPool() *gp.Pool // SPool returns the session pool. - SPool() SessionPool + SPool() util.SessionPool // Close closes the goroutine pool. Close() @@ -45,11 +39,11 @@ var _ Pool = (*pool)(nil) type pool struct { // This gpool is used to reuse goroutine in the mergeGlobalStatsTopN. gpool *gp.Pool - pool SessionPool + pool util.SessionPool } // NewPool creates a new Pool. -func NewPool(p SessionPool) Pool { +func NewPool(p util.SessionPool) Pool { return &pool{ gpool: gp.New(math.MaxInt16, time.Minute), pool: p, @@ -62,7 +56,7 @@ func (p *pool) GPool() *gp.Pool { } // SPool returns the session pool. -func (p *pool) SPool() SessionPool { +func (p *pool) SPool() util.SessionPool { return p.pool } diff --git a/pkg/statistics/handle/util/table_info.go b/pkg/statistics/handle/util/table_info.go index a2120312b76d0..bd25ae382fa5f 100644 --- a/pkg/statistics/handle/util/table_info.go +++ b/pkg/statistics/handle/util/table_info.go @@ -15,6 +15,7 @@ package util import ( + "context" "sync" "github.com/pingcap/tidb/pkg/infoschema" @@ -53,9 +54,9 @@ func (c *tableInfoGetterImpl) TableInfoByID(is infoschema.InfoSchema, physicalID c.pid2tid = buildPartitionID2TableID(is) } if id, ok := c.pid2tid[physicalID]; ok { - return is.TableByID(id) + return is.TableByID(context.Background(), id) } - return is.TableByID(physicalID) + return is.TableByID(context.Background(), physicalID) } func buildPartitionID2TableID(is infoschema.InfoSchema) map[int64]int64 { diff --git a/pkg/statistics/handle/util/util.go b/pkg/statistics/handle/util/util.go index 3573a125f4973..0a1aa5db8279a 100644 --- a/pkg/statistics/handle/util/util.go +++ b/pkg/statistics/handle/util/util.go @@ -15,7 +15,9 @@ package util import ( + "cmp" "context" + "slices" "strconv" "time" @@ -25,6 +27,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/terror" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/sessionctx/variable" + "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/chunk" "github.com/pingcap/tidb/pkg/util/intest" "github.com/pingcap/tidb/pkg/util/sqlexec" @@ -74,7 +77,7 @@ var ( ) // CallWithSCtx allocates a sctx from the pool and call the f(). -func CallWithSCtx(pool SessionPool, f func(sctx sessionctx.Context) error, flags ...int) (err error) { +func CallWithSCtx(pool util.SessionPool, f func(sctx sessionctx.Context) error, flags ...int) (err error) { se, err := pool.Get() if err != nil { return err @@ -181,7 +184,7 @@ func UpdateSCtxVarsForStats(sctx sessionctx.Context) error { } // GetCurrentPruneMode returns the current latest partitioning table prune mode. -func GetCurrentPruneMode(pool SessionPool) (mode string, err error) { +func GetCurrentPruneMode(pool util.SessionPool) (mode string, err error) { err = CallWithSCtx(pool, func(sctx sessionctx.Context) error { mode = sctx.GetSessionVars().PartitionPruneMode.Load() return nil @@ -257,6 +260,13 @@ type JSONTable struct { IsHistoricalStats bool `json:"is_historical_stats"` } +// Sort is used to sort the object in the JSONTable. it is used for testing to avoid flaky test. +func (j *JSONTable) Sort() { + slices.SortFunc(j.PredicateColumns, func(a, b *JSONPredicateColumn) int { + return cmp.Compare(a.ID, b.ID) + }) +} + // JSONExtendedStats is used for dumping extended statistics. type JSONExtendedStats struct { StatsName string `json:"stats_name"` diff --git a/pkg/statistics/histogram.go b/pkg/statistics/histogram.go index 0db2e88a7ed5b..2b3f3225af8d1 100644 --- a/pkg/statistics/histogram.go +++ b/pkg/statistics/histogram.go @@ -422,37 +422,6 @@ func (hg *Histogram) StandardizeForV2AnalyzeIndex() { hg.Bounds = c } -// AddIdxVals adds the given values to the histogram. -func (hg *Histogram) AddIdxVals(idxValCntPairs []TopNMeta) { - totalAddCnt := int64(0) - slices.SortFunc(idxValCntPairs, func(i, j TopNMeta) int { - return bytes.Compare(i.Encoded, j.Encoded) - }) - for bktIdx, pairIdx := 0, 0; bktIdx < hg.Len(); bktIdx++ { - for pairIdx < len(idxValCntPairs) { - // If the current val smaller than current bucket's lower bound, skip it. - cmpResult := bytes.Compare(hg.Bounds.Column(0).GetBytes(bktIdx*2), idxValCntPairs[pairIdx].Encoded) - if cmpResult > 0 { - continue - } - // If the current val bigger than current bucket's upper bound, break. - cmpResult = bytes.Compare(hg.Bounds.Column(0).GetBytes(bktIdx*2+1), idxValCntPairs[pairIdx].Encoded) - if cmpResult < 0 { - break - } - totalAddCnt += int64(idxValCntPairs[pairIdx].Count) - hg.Buckets[bktIdx].NDV++ - if cmpResult == 0 { - hg.Buckets[bktIdx].Repeat = int64(idxValCntPairs[pairIdx].Count) - pairIdx++ - break - } - pairIdx++ - } - hg.Buckets[bktIdx].Count += totalAddCnt - } -} - // ToString gets the string representation for the histogram. func (hg *Histogram) ToString(idxCols int) string { strs := make([]string, 0, hg.Len()+1) diff --git a/pkg/statistics/integration_test.go b/pkg/statistics/integration_test.go index 9b2cdb535887b..434895e975c99 100644 --- a/pkg/statistics/integration_test.go +++ b/pkg/statistics/integration_test.go @@ -26,7 +26,6 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/statistics" - "github.com/pingcap/tidb/pkg/statistics/handle/autoanalyze/exec" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/testkit/analyzehelper" "github.com/pingcap/tidb/pkg/testkit/testdata" @@ -331,9 +330,9 @@ func TestOutdatedStatsCheck(t *testing.T) { oriStart := tk.MustQuery("select @@tidb_auto_analyze_start_time").Rows()[0][0].(string) oriEnd := tk.MustQuery("select @@tidb_auto_analyze_end_time").Rows()[0][0].(string) - exec.AutoAnalyzeMinCnt = 0 + statistics.AutoAnalyzeMinCnt = 0 defer func() { - exec.AutoAnalyzeMinCnt = 1000 + statistics.AutoAnalyzeMinCnt = 1000 tk.MustExec(fmt.Sprintf("set global tidb_auto_analyze_start_time='%v'", oriStart)) tk.MustExec(fmt.Sprintf("set global tidb_auto_analyze_end_time='%v'", oriEnd)) }() @@ -619,7 +618,7 @@ func TestGlobalIndexWithAnalyzeVersion1AndHistoricalStats(t *testing.T) { PARTITION p1 VALUES LESS THAN (20), PARTITION p2 VALUES LESS THAN (30), PARTITION p3 VALUES LESS THAN (40))`) - tk.MustExec("ALTER TABLE t ADD UNIQUE INDEX idx(b)") + tk.MustExec("ALTER TABLE t ADD UNIQUE INDEX idx(b) GLOBAL") tk.MustExec("INSERT INTO t(a, b) values(1, 1), (2, 2), (3, 3), (15, 15), (25, 25), (35, 35)") tblID := dom.MustGetTableID(t, "test", "t") diff --git a/pkg/statistics/statistics_test.go b/pkg/statistics/statistics_test.go index fe18ee80b0ee3..ca192db2f0d24 100644 --- a/pkg/statistics/statistics_test.go +++ b/pkg/statistics/statistics_test.go @@ -441,7 +441,7 @@ func SubTestIndexRanges() func(*testing.T) { ran[0].HighVal[0] = types.NewIntDatum(1000) count, err = GetRowCountByIndexRanges(ctx, &tbl.HistColl, 0, ran) require.NoError(t, err) - require.Equal(t, 0, int(count)) + require.Equal(t, 1, int(count)) } } diff --git a/pkg/statistics/table.go b/pkg/statistics/table.go index 45188c5ac81ab..237f48d407cf0 100644 --- a/pkg/statistics/table.go +++ b/pkg/statistics/table.go @@ -17,6 +17,7 @@ package statistics import ( "cmp" "fmt" + stdmaps "maps" "slices" "strings" @@ -41,6 +42,10 @@ const ( PseudoRowCount = 10000 ) +// AutoAnalyzeMinCnt means if the count of table is less than this value, we don't need to do auto analyze. +// Exported for testing. +var AutoAnalyzeMinCnt int64 = 1000 + var ( // Below functions are used to solve cycle import problem. // Note: all functions below will be removed after finishing moving all estimation functions into the cardinality package. @@ -165,10 +170,10 @@ func (m *ColAndIdxExistenceMap) IsEmpty() bool { // Clone deeply copies the map. func (m *ColAndIdxExistenceMap) Clone() *ColAndIdxExistenceMap { mm := NewColAndIndexExistenceMap(len(m.colInfoMap), len(m.idxInfoMap)) - mm.colInfoMap = maps.Clone(m.colInfoMap) - mm.colAnalyzed = maps.Clone(m.colAnalyzed) - mm.idxAnalyzed = maps.Clone(m.idxAnalyzed) - mm.idxInfoMap = maps.Clone(m.idxInfoMap) + mm.colInfoMap = stdmaps.Clone(m.colInfoMap) + mm.colAnalyzed = stdmaps.Clone(m.colAnalyzed) + mm.idxAnalyzed = stdmaps.Clone(m.idxAnalyzed) + mm.idxInfoMap = stdmaps.Clone(m.idxInfoMap) return mm } @@ -709,6 +714,19 @@ func (t *Table) IsAnalyzed() bool { return t.LastAnalyzeVersion > 0 } +// IsEligibleForAnalysis checks whether the table is eligible for analysis. +func (t *Table) IsEligibleForAnalysis() bool { + // 1. If the statistics are either not loaded or are classified as pseudo, there is no need for analyze. + // Pseudo statistics can be created by the optimizer, so we need to double check it. + // 2. If the table is too small, we don't want to waste time to analyze it. + // Leave the opportunity to other bigger tables. + if t == nil || t.Pseudo || t.RealtimeCount < AutoAnalyzeMinCnt { + return false + } + + return true +} + // GetAnalyzeRowCount tries to get the row count of a column or an index if possible. // This method is useful because this row count doesn't consider the modify count. func (coll *HistColl) GetAnalyzeRowCount() float64 { diff --git a/pkg/statistics/testdata/integration_suite_out.json b/pkg/statistics/testdata/integration_suite_out.json index e2706b96dd588..14cdc66e90ce0 100644 --- a/pkg/statistics/testdata/integration_suite_out.json +++ b/pkg/statistics/testdata/integration_suite_out.json @@ -26,8 +26,8 @@ "└─IndexRangeScan_5 1.36 cop[tikv] table:exp_backoff, index:idx(a, b, c, d) range:[1 1 1 3,1 1 1 5], keep order:false" ], [ - "IndexReader_6 0.00 root index:IndexRangeScan_5", - "└─IndexRangeScan_5 0.00 cop[tikv] table:exp_backoff, index:idx(a, b, c, d) range:[1 1 1 3,1 1 1 5], keep order:false" + "IndexReader_6 1.00 root index:IndexRangeScan_5", + "└─IndexRangeScan_5 1.00 cop[tikv] table:exp_backoff, index:idx(a, b, c, d) range:[1 1 1 3,1 1 1 5], keep order:false" ] ] }, diff --git a/pkg/store/copr/BUILD.bazel b/pkg/store/copr/BUILD.bazel index 69a0b376f8709..1ebcfbcff1251 100644 --- a/pkg/store/copr/BUILD.bazel +++ b/pkg/store/copr/BUILD.bazel @@ -49,6 +49,7 @@ go_library( "@com_github_pingcap_kvproto//pkg/kvrpcpb", "@com_github_pingcap_kvproto//pkg/metapb", "@com_github_pingcap_kvproto//pkg/mpp", + "@com_github_pingcap_kvproto//pkg/resource_manager", "@com_github_pingcap_log//:log", "@com_github_pingcap_tipb//go-tipb", "@com_github_tikv_client_go_v2//config", diff --git a/pkg/store/copr/batch_coprocessor.go b/pkg/store/copr/batch_coprocessor.go index 850204fb9b168..40eb5cb0d8ffa 100644 --- a/pkg/store/copr/batch_coprocessor.go +++ b/pkg/store/copr/batch_coprocessor.go @@ -1031,7 +1031,7 @@ func buildBatchCopTasksCore(bo *backoff.Backoffer, store *kvStore, rangesForEach regionIDErrMsg += fmt.Sprintf("%d, ", regionIDsInOtherZones[i]) } warningMsg += regionIDErrMsg + "etc" - appendWarning(errors.NewNoStackErrorf(warningMsg)) + appendWarning(errors.NewNoStackError(warningMsg)) } for _, task := range storeTaskMap { diff --git a/pkg/store/copr/copr_test/BUILD.bazel b/pkg/store/copr/copr_test/BUILD.bazel index 0c99139d846ff..10f2a807b2623 100644 --- a/pkg/store/copr/copr_test/BUILD.bazel +++ b/pkg/store/copr/copr_test/BUILD.bazel @@ -8,16 +8,22 @@ go_test( "main_test.go", ], flaky = True, + shard_count = 3, deps = [ "//pkg/config", + "//pkg/domain/resourcegroup", "//pkg/kv", "//pkg/store/copr", "//pkg/store/mockstore", "//pkg/testkit/testmain", "//pkg/testkit/testsetup", + "@com_github_pingcap_kvproto//pkg/meta_storagepb", + "@com_github_pingcap_kvproto//pkg/resource_manager", "@com_github_stretchr_testify//require", "@com_github_tikv_client_go_v2//testutils", "@com_github_tikv_client_go_v2//tikv", + "@com_github_tikv_pd_client//:client", + "@com_github_tikv_pd_client//resource_group/controller", "@org_uber_go_goleak//:goleak", ], ) diff --git a/pkg/store/copr/copr_test/coprocessor_test.go b/pkg/store/copr/copr_test/coprocessor_test.go index 72505d0c68357..3414bae8bd329 100644 --- a/pkg/store/copr/copr_test/coprocessor_test.go +++ b/pkg/store/copr/copr_test/coprocessor_test.go @@ -15,14 +15,23 @@ package copr_test import ( + "bytes" "context" + "encoding/json" + "errors" "testing" + "time" + "github.com/pingcap/kvproto/pkg/meta_storagepb" + rmpb "github.com/pingcap/kvproto/pkg/resource_manager" + "github.com/pingcap/tidb/pkg/domain/resourcegroup" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/store/copr" "github.com/pingcap/tidb/pkg/store/mockstore" "github.com/stretchr/testify/require" "github.com/tikv/client-go/v2/testutils" + pd "github.com/tikv/pd/client" + rmclient "github.com/tikv/pd/client/resource_group/controller" ) func TestBuildCopIteratorWithRowCountHint(t *testing.T) { @@ -182,3 +191,99 @@ func TestBuildCopIteratorWithBatchStoreCopr(t *testing.T) { require.Equal(t, len(tasks[0].ToPBBatchTasks()), 1) require.Equal(t, len(tasks[1].ToPBBatchTasks()), 0) } + +type mockResourceGroupProvider struct { + rmclient.ResourceGroupProvider + cfg rmclient.Config +} + +func (p *mockResourceGroupProvider) Get(ctx context.Context, key []byte, opts ...pd.OpOption) (*meta_storagepb.GetResponse, error) { + if !bytes.Equal(pd.ControllerConfigPathPrefixBytes, key) { + return nil, errors.New("unsupported configPath") + } + payload, _ := json.Marshal(&p.cfg) + return &meta_storagepb.GetResponse{ + Count: 1, + Kvs: []*meta_storagepb.KeyValue{ + { + Key: key, + Value: payload, + }, + }, + }, nil +} + +func (p *mockResourceGroupProvider) GetResourceGroup(ctx context.Context, name string, opts ...pd.GetResourceGroupOption) (*rmpb.ResourceGroup, error) { + group1 := "rg1" + if name == group1 { + return &rmpb.ResourceGroup{ + Name: group1, + Mode: rmpb.GroupMode_RUMode, + RUSettings: &rmpb.GroupRequestUnitSettings{ + RU: &rmpb.TokenBucket{ + Settings: &rmpb.TokenLimitSettings{ + FillRate: 2000, + BurstLimit: 2000, + }, + }, + }, + RunawaySettings: &rmpb.RunawaySettings{ + Rule: &rmpb.RunawayRule{ + ExecElapsedTimeMs: 1000, + }, + Action: rmpb.RunawayAction_DryRun, + }, + }, nil + } + return nil, errors.New("not found") +} + +func TestBuildCopIteratorWithRunawayChecker(t *testing.T) { + // nil --- 'g' --- 'n' --- 't' --- nil + // <- 0 -> <- 1 -> <- 2 -> <- 3 -> + store, err := mockstore.NewMockStore( + mockstore.WithClusterInspector(func(c testutils.Cluster) { + mockstore.BootstrapWithMultiRegions(c, []byte("g"), []byte("n"), []byte("t")) + }), + ) + require.NoError(t, err) + defer require.NoError(t, store.Close()) + copClient := store.GetClient().(*copr.CopClient) + ctx := context.Background() + killed := uint32(0) + vars := kv.NewVariables(&killed) + opt := &kv.ClientSendOption{} + mockPrivider := &mockResourceGroupProvider{ + cfg: *rmclient.DefaultConfig(), + } + + ranges := copr.BuildKeyRanges("a", "c", "d", "e", "h", "x", "y", "z") + resourceCtl, err := rmclient.NewResourceGroupController(context.Background(), 1, mockPrivider, nil) + require.NoError(t, err) + manager := resourcegroup.NewRunawayManager(resourceCtl, "mock://test") + defer manager.Stop() + + sql := "select * from t" + group1 := "rg1" + checker := manager.DeriveChecker(group1, sql, "", "", time.Now()) + manager.AddWatch(&resourcegroup.QuarantineRecord{ + ID: 1, + ResourceGroupName: group1, + Watch: rmpb.RunawayWatchType_Exact, + WatchText: sql, + Action: rmpb.RunawayAction_CoolDown, + }) + req := &kv.Request{ + Tp: kv.ReqTypeDAG, + KeyRanges: kv.NewNonParitionedKeyRangesWithHint(ranges, []int{1, 1, 3, 3}), + Concurrency: 15, + RunawayChecker: checker, + ResourceGroupName: group1, + } + checker.BeforeExecutor() + it, errRes := copClient.BuildCopIterator(ctx, req, vars, opt) + require.Nil(t, errRes) + concurrency, smallTaskConcurrency := it.GetConcurrency() + require.Equal(t, concurrency, 1) + require.Equal(t, smallTaskConcurrency, 0) +} diff --git a/pkg/store/copr/coprocessor.go b/pkg/store/copr/coprocessor.go index c23fa3ae763e8..16a75bf3f82a4 100644 --- a/pkg/store/copr/coprocessor.go +++ b/pkg/store/copr/coprocessor.go @@ -34,6 +34,7 @@ import ( "github.com/pingcap/kvproto/pkg/errorpb" "github.com/pingcap/kvproto/pkg/kvrpcpb" "github.com/pingcap/kvproto/pkg/metapb" + rmpb "github.com/pingcap/kvproto/pkg/resource_manager" "github.com/pingcap/tidb/pkg/config" "github.com/pingcap/tidb/pkg/domain/infosync" "github.com/pingcap/tidb/pkg/domain/resourcegroup" @@ -219,32 +220,13 @@ func (c *CopClient) BuildCopIterator(ctx context.Context, req *kv.Request, vars it.concurrency = 1 } - if it.req.KeepOrder { - // Don't set high concurrency for the keep order case. It wastes a lot of memory and gains nothing. - // TL;DR - // Because for a keep order coprocessor request, the cop tasks are handled one by one, if we set a - // higher concurrency, the data is just cached and not consumed for a while, this increase the memory usage. - // Set concurrency to 2 can reduce the memory usage and I've tested that it does not necessarily - // decrease the performance. - // For ReqTypeAnalyze, we keep its concurrency to avoid slow analyze(see https://github.com/pingcap/tidb/issues/40162 for details). - if it.concurrency > 2 && it.req.Tp != kv.ReqTypeAnalyze { - oldConcurrency := it.concurrency - partitionNum := req.KeyRanges.PartitionNum() - if partitionNum > it.concurrency { - partitionNum = it.concurrency - } - it.concurrency = 2 - if it.concurrency < partitionNum { - it.concurrency = partitionNum - } + // if the request is triggered cool down by the runaway checker, we need to adjust the concurrency, let the sql run slowly. + if req.RunawayChecker != nil && req.RunawayChecker.CheckAction() == rmpb.RunawayAction_CoolDown { + it.concurrency = 1 + it.smallTaskConcurrency = 0 + } - failpoint.Inject("testRateLimitActionMockConsumeAndAssert", func(val failpoint.Value) { - if val.(bool) { - // When the concurrency is too small, test case tests/realtikvtest/sessiontest.TestCoprocessorOOMAction can't trigger OOM condition - it.concurrency = oldConcurrency - } - }) - } + if it.req.KeepOrder { if it.smallTaskConcurrency > 20 { it.smallTaskConcurrency = 20 } @@ -1481,7 +1463,7 @@ func (worker *copIteratorWorker) handleCopResponse(bo *Backoffer, rpcCtx *tikv.R zap.ByteString("firstRangeStartKey", firstRangeStartKey), zap.ByteString("lastRangeEndKey", lastRangeEndKey), zap.String("storeAddr", task.storeAddr), - zap.Error(err)) + zap.String("error", otherErr)) if strings.Contains(err.Error(), "write conflict") { return nil, kv.ErrWriteConflict.FastGen("%s", otherErr) } diff --git a/pkg/store/driver/error/error.go b/pkg/store/driver/error/error.go index e2bd2c18cfd24..f1c2afcbb31a9 100644 --- a/pkg/store/driver/error/error.go +++ b/pkg/store/driver/error/error.go @@ -133,6 +133,9 @@ func ToTiDBErr(err error) error { // connection id is unknown in client, which should be logged or filled by upper layers return exeerrors.ErrMemoryExceedForInstance.GenWithStackByArgs(-1) } + if stderrs.Is(err, tikverr.ErrQueryInterruptedWithSignal{Signal: sqlkiller.RunawayQueryExceeded}) { + return exeerrors.ErrResourceGroupQueryRunawayInterrupted.GenWithStackByArgs() + } if stderrs.Is(err, tikverr.ErrTiKVServerBusy) { return ErrTiKVServerBusy diff --git a/pkg/store/gcworker/BUILD.bazel b/pkg/store/gcworker/BUILD.bazel index 9d434c74b72d5..d7ee3ca29e63f 100644 --- a/pkg/store/gcworker/BUILD.bazel +++ b/pkg/store/gcworker/BUILD.bazel @@ -20,6 +20,7 @@ go_library( "//pkg/session/types", "//pkg/sessionctx/variable", "//pkg/tablecodec", + "//pkg/util", "//pkg/util/codec", "//pkg/util/dbterror", "//pkg/util/logutil", @@ -50,8 +51,9 @@ go_test( embed = [":gcworker"], flaky = True, race = "on", - shard_count = 25, + shard_count = 27, deps = [ + "//pkg/config", "//pkg/ddl/placement", "//pkg/ddl/util", "//pkg/domain", diff --git a/pkg/store/gcworker/gc_worker.go b/pkg/store/gcworker/gc_worker.go index 3f5c1d3d166b3..593abbb9c4fde 100644 --- a/pkg/store/gcworker/gc_worker.go +++ b/pkg/store/gcworker/gc_worker.go @@ -46,6 +46,7 @@ import ( sessiontypes "github.com/pingcap/tidb/pkg/session/types" "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/tablecodec" + util2 "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/codec" "github.com/pingcap/tidb/pkg/util/dbterror" "github.com/pingcap/tidb/pkg/util/logutil" @@ -315,7 +316,7 @@ func (w *GCWorker) logIsGCSafePointTooEarly(ctx context.Context, safePoint uint6 return nil } -func (w *GCWorker) runKeyspaceDeleteRange(ctx context.Context, concurrency int) error { +func (w *GCWorker) runKeyspaceDeleteRange(ctx context.Context, concurrency gcConcurrency) error { // Get safe point from PD. // The GC safe point is updated only after the global GC have done resolveLocks phase globally. // So, in the following code, resolveLocks must have been done by the global GC on the ranges to be deleted, @@ -340,7 +341,7 @@ func (w *GCWorker) runKeyspaceDeleteRange(ctx context.Context, concurrency int) keyspaceID := w.store.GetCodec().GetKeyspaceID() logutil.Logger(ctx).Info("start keyspace delete range", zap.String("category", "gc worker"), zap.String("uuid", w.uuid), - zap.Int("concurrency", concurrency), + zap.Int("concurrency", concurrency.v), zap.Uint32("keyspaceID", uint32(keyspaceID)), zap.Uint64("GCSafepoint", safePoint)) @@ -415,14 +416,14 @@ func (w *GCWorker) leaderTick(ctx context.Context) error { logutil.Logger(ctx).Info("starts the whole job", zap.String("category", "gc worker"), zap.String("uuid", w.uuid), zap.Uint64("safePoint", safePoint), - zap.Int("concurrency", concurrency)) + zap.Int("concurrency", concurrency.v)) go func() { w.done <- w.runGCJob(ctx, safePoint, concurrency) }() return nil } -func (w *GCWorker) runKeyspaceGCJob(ctx context.Context, concurrency int) error { +func (w *GCWorker) runKeyspaceGCJob(ctx context.Context, concurrency gcConcurrency) error { // When the worker is just started, or an old GC job has just finished, // wait a while before starting a new job. if time.Since(w.lastFinish) < gcWaitTime { @@ -595,7 +596,12 @@ func (w *GCWorker) loadBooleanWithDefault(key string, defaultValue bool) (bool, return strings.EqualFold(str, booleanTrue), nil } -func (w *GCWorker) getGCConcurrency(ctx context.Context) (int, error) { +type gcConcurrency struct { + v int + isAuto bool +} + +func (w *GCWorker) getGCConcurrency(ctx context.Context) (gcConcurrency, error) { useAutoConcurrency, err := w.checkUseAutoConcurrency() if err != nil { logutil.Logger(ctx).Error("failed to load config gc_auto_concurrency. use default value.", zap.String("category", "gc worker"), @@ -604,7 +610,8 @@ func (w *GCWorker) getGCConcurrency(ctx context.Context) (int, error) { useAutoConcurrency = gcDefaultAutoConcurrency } if !useAutoConcurrency { - return w.loadGCConcurrencyWithDefault() + v, err := w.loadGCConcurrencyWithDefault() + return gcConcurrency{v, useAutoConcurrency}, err } stores, err := w.getStoresForGC(ctx) @@ -626,10 +633,10 @@ func (w *GCWorker) getGCConcurrency(ctx context.Context) (int, error) { if concurrency == 0 { logutil.Logger(ctx).Error("no store is up", zap.String("category", "gc worker"), zap.String("uuid", w.uuid)) - return 0, errors.New("[gc worker] no store is up") + return gcConcurrency{0, useAutoConcurrency}, errors.New("[gc worker] no store is up") } - return concurrency, nil + return gcConcurrency{concurrency, useAutoConcurrency}, nil } func (w *GCWorker) checkGCInterval(now time.Time) (bool, error) { @@ -733,13 +740,13 @@ func (w *GCWorker) setGCWorkerServiceSafePoint(ctx context.Context, safePoint ui return safePoint, nil } -func (w *GCWorker) runGCJob(ctx context.Context, safePoint uint64, concurrency int) error { +func (w *GCWorker) runGCJob(ctx context.Context, safePoint uint64, concurrency gcConcurrency) error { failpoint.Inject("mockRunGCJobFail", func() { failpoint.Return(errors.New("mock failure of runGCJoB")) }) metrics.GCWorkerCounter.WithLabelValues("run_job").Inc() - err := w.resolveLocks(ctx, safePoint, concurrency) + err := w.resolveLocks(ctx, safePoint, concurrency.v) if err != nil { logutil.Logger(ctx).Error("resolve locks returns an error", zap.String("category", "gc worker"), zap.String("uuid", w.uuid), @@ -787,7 +794,7 @@ func (w *GCWorker) runGCJob(ctx context.Context, safePoint uint64, concurrency i return errors.Trace(err) } } else { - err = w.doGC(ctx, safePoint, concurrency) + err = w.doGC(ctx, safePoint, concurrency.v) if err != nil { logutil.Logger(ctx).Error("do GC returns an error", zap.String("category", "gc worker"), zap.String("uuid", w.uuid), @@ -802,35 +809,50 @@ func (w *GCWorker) runGCJob(ctx context.Context, safePoint uint64, concurrency i // deleteRanges processes all delete range records whose ts < safePoint in table `gc_delete_range` // `concurrency` specifies the concurrency to send NotifyDeleteRange. -func (w *GCWorker) deleteRanges(ctx context.Context, safePoint uint64, concurrency int) error { +func (w *GCWorker) deleteRanges( + ctx context.Context, + safePoint uint64, + concurrency gcConcurrency, +) error { metrics.GCWorkerCounter.WithLabelValues("delete_range").Inc() - se := createSession(w.store) - defer se.Close() - ranges, err := util.LoadDeleteRanges(ctx, se, safePoint) + s := createSession(w.store) + defer s.Close() + ranges, err := util.LoadDeleteRanges(ctx, s, safePoint) if err != nil { return errors.Trace(err) } - v2, err := util.IsRaftKv2(ctx, se) + v2, err := util.IsRaftKv2(ctx, s) if err != nil { return errors.Trace(err) } // Cache table ids on which placement rules have been GC-ed, to avoid redundantly GC the same table id multiple times. - gcPlacementRuleCache := make(map[int64]any, len(ranges)) + var gcPlacementRuleCache sync.Map logutil.Logger(ctx).Info("start delete ranges", zap.String("category", "gc worker"), zap.String("uuid", w.uuid), zap.Int("ranges", len(ranges))) startTime := time.Now() - for _, r := range ranges { + + deleteRangeConcurrency := w.calcDeleteRangeConcurrency(concurrency, len(ranges)) + concurrencyLimiter := make(chan struct{}, deleteRangeConcurrency) + + f := func(r util.DelRangeTask) { + var err error + defer func() { + <-concurrencyLimiter + }() + se := createSession(w.store) + defer se.Close() + startKey, endKey := r.Range() if v2 { // In raftstore-v2, we use delete range instead to avoid deletion omission - task := rangetask.NewDeleteRangeTask(w.tikvStore, startKey, endKey, concurrency) + task := rangetask.NewDeleteRangeTask(w.tikvStore, startKey, endKey, deleteRangeConcurrency) err = task.Execute(ctx) } else { - err = w.doUnsafeDestroyRangeRequest(ctx, startKey, endKey, concurrency) + err = w.doUnsafeDestroyRangeRequest(ctx, startKey, endKey) } failpoint.Inject("ignoreDeleteRangeFailed", func() { err = nil @@ -842,24 +864,26 @@ func (w *GCWorker) deleteRanges(ctx context.Context, safePoint uint64, concurren zap.Stringer("startKey", startKey), zap.Stringer("endKey", endKey), zap.Error(err)) - continue + return } - if err := w.doGCPlacementRules(se, safePoint, r, gcPlacementRuleCache); err != nil { + err = doGCPlacementRules(se, safePoint, r, &gcPlacementRuleCache) + if err != nil { logutil.Logger(ctx).Error("gc placement rules failed on range", zap.String("category", "gc worker"), zap.String("uuid", w.uuid), zap.Int64("jobID", r.JobID), zap.Int64("elementID", r.ElementID), zap.Error(err)) - continue + return } + // We only delete rules, so concurrently updating rules should not return errors. if err := w.doGCLabelRules(r); err != nil { logutil.Logger(ctx).Error("gc label rules failed on range", zap.String("category", "gc worker"), zap.String("uuid", w.uuid), zap.Int64("jobID", r.JobID), zap.Int64("elementID", r.ElementID), zap.Error(err)) - continue + return } err = util.CompleteDeleteRange(se, r, !v2) @@ -872,6 +896,14 @@ func (w *GCWorker) deleteRanges(ctx context.Context, safePoint uint64, concurren metrics.GCUnsafeDestroyRangeFailuresCounterVec.WithLabelValues("save").Inc() } } + var wg util2.WaitGroupWrapper + for i := range ranges { + r := ranges[i] + concurrencyLimiter <- struct{}{} + wg.Run(func() { f(r) }) + } + wg.Wait() + logutil.Logger(ctx).Info("finish delete ranges", zap.String("category", "gc worker"), zap.String("uuid", w.uuid), zap.Int("num of ranges", len(ranges)), @@ -880,9 +912,36 @@ func (w *GCWorker) deleteRanges(ctx context.Context, safePoint uint64, concurren return nil } +const ( + // ConcurrencyDivisor reduces the input concurrency to avoid overwhelming the system + ConcurrencyDivisor = 4 + // RequestsPerThread is the number of requests handled by a single thread + RequestsPerThread = 100000 +) + +// calcDeleteRangeConcurrency calculates the concurrency of deleteRanges. +// +// There was only one concurrency for resolveLocks. When parallelizing deleteRanges, its concurrency is controlled by +// the same variable TiDBGCConcurrency. As requested by PM, the first priority is to ensure the stability of the system, +// so the concurrency of deleteRanges is reduced to avoid overwhelming the system. +// +// Assuming an average request takes 50ms: +// With ideal parallelism and sufficient concurrency, +// the maximum duration for a round of deleteRanges is 100,000 * 50ms = 5,000s. +// These values are conservatively chosen to minimize GC impact on foreground requests +func (w *GCWorker) calcDeleteRangeConcurrency(concurrency gcConcurrency, rangeNum int) int { + maxConcurrency := max(1, concurrency.v/ConcurrencyDivisor) + threadsBasedOnRequests := max(1, rangeNum/RequestsPerThread) + if concurrency.isAuto { + return min(maxConcurrency, threadsBasedOnRequests) + } + return maxConcurrency +} + // redoDeleteRanges checks all deleted ranges whose ts is at least `lifetime + 24h` ago. See TiKV RFC #2. // `concurrency` specifies the concurrency to send NotifyDeleteRange. -func (w *GCWorker) redoDeleteRanges(ctx context.Context, safePoint uint64, concurrency int) error { +func (w *GCWorker) redoDeleteRanges(ctx context.Context, safePoint uint64, + concurrency gcConcurrency) error { metrics.GCWorkerCounter.WithLabelValues("redo_delete_range").Inc() // We check delete range records that are deleted about 24 hours ago. @@ -899,21 +958,28 @@ func (w *GCWorker) redoDeleteRanges(ctx context.Context, safePoint uint64, concu zap.String("uuid", w.uuid), zap.Int("num of ranges", len(ranges))) startTime := time.Now() - for _, r := range ranges { + + deleteRangeConcurrency := w.calcDeleteRangeConcurrency(concurrency, len(ranges)) + concurrencyLimiter := make(chan struct{}, deleteRangeConcurrency) + + f := func(r util.DelRangeTask) { + defer func() { + <-concurrencyLimiter + }() + var err error startKey, endKey := r.Range() - err = w.doUnsafeDestroyRangeRequest(ctx, startKey, endKey, concurrency) + err = w.doUnsafeDestroyRangeRequest(ctx, startKey, endKey) if err != nil { logutil.Logger(ctx).Error("redo-delete range failed on range", zap.String("category", "gc worker"), zap.String("uuid", w.uuid), zap.Stringer("startKey", startKey), zap.Stringer("endKey", endKey), zap.Error(err)) - continue + return } - se := createSession(w.store) - err := util.DeleteDoneRecord(se, r) + err = util.DeleteDoneRecord(se, r) se.Close() if err != nil { logutil.Logger(ctx).Error("failed to remove delete_range_done record", zap.String("category", "gc worker"), @@ -924,6 +990,13 @@ func (w *GCWorker) redoDeleteRanges(ctx context.Context, safePoint uint64, concu metrics.GCUnsafeDestroyRangeFailuresCounterVec.WithLabelValues("save_redo").Inc() } } + var wg util2.WaitGroupWrapper + for i := range ranges { + r := ranges[i] + concurrencyLimiter <- struct{}{} + wg.Run(func() { f(r) }) + } + wg.Wait() logutil.Logger(ctx).Info("finish redo-delete ranges", zap.String("category", "gc worker"), zap.String("uuid", w.uuid), zap.Int("num of ranges", len(ranges)), @@ -932,7 +1005,9 @@ func (w *GCWorker) redoDeleteRanges(ctx context.Context, safePoint uint64, concu return nil } -func (w *GCWorker) doUnsafeDestroyRangeRequest(ctx context.Context, startKey []byte, endKey []byte, _ int) error { +func (w *GCWorker) doUnsafeDestroyRangeRequest( + ctx context.Context, startKey []byte, endKey []byte, +) error { // Get all stores every time deleting a region. So the store list is less probably to be stale. stores, err := w.getStoresForGC(ctx) if err != nil { @@ -1489,7 +1564,8 @@ func (w *GCWorker) saveValueToSysTable(key, value string) error { // GC placement rules when the partitions are removed by the GC worker. // Placement rules cannot be removed immediately after drop table / truncate table, // because the tables can be flashed back or recovered. -func (w *GCWorker) doGCPlacementRules(se sessiontypes.Session, _ uint64, dr util.DelRangeTask, gcPlacementRuleCache map[int64]any) (err error) { +func doGCPlacementRules(se sessiontypes.Session, _ uint64, + dr util.DelRangeTask, gcPlacementRuleCache *sync.Map) (err error) { // Get the job from the job history var historyJob *model.Job failpoint.Inject("mockHistoryJobForGC", func(v failpoint.Value) { @@ -1534,7 +1610,7 @@ func (w *GCWorker) doGCPlacementRules(se sessiontypes.Session, _ uint64, dr util // Skip table ids that's already successfully handled. tmp := physicalTableIDs[:0] for _, id := range physicalTableIDs { - if _, ok := gcPlacementRuleCache[id]; !ok { + if _, ok := gcPlacementRuleCache.Load(id); !ok { tmp = append(tmp, id) } } @@ -1558,7 +1634,7 @@ func (w *GCWorker) doGCPlacementRules(se sessiontypes.Session, _ uint64, dr util // Cache the table id if its related rule are deleted successfully. for _, id := range physicalTableIDs { - gcPlacementRuleCache[id] = struct{}{} + gcPlacementRuleCache.Store(id, struct{}{}) } return nil } @@ -1755,5 +1831,5 @@ func NewMockGCWorker(store kv.Storage) (*MockGCWorker, error) { func (w *MockGCWorker) DeleteRanges(ctx context.Context, safePoint uint64) error { logutil.Logger(ctx).Error("deleteRanges is called") ctx = kv.WithInternalSourceType(ctx, kv.InternalTxnGC) - return w.worker.deleteRanges(ctx, safePoint, 1) + return w.worker.deleteRanges(ctx, safePoint, gcConcurrency{1, false}) } diff --git a/pkg/store/gcworker/gc_worker_test.go b/pkg/store/gcworker/gc_worker_test.go index b7689191094fe..8d6aab291bc7c 100644 --- a/pkg/store/gcworker/gc_worker_test.go +++ b/pkg/store/gcworker/gc_worker_test.go @@ -21,6 +21,7 @@ import ( "math" "sort" "strconv" + "sync" "testing" "time" @@ -29,6 +30,7 @@ import ( "github.com/pingcap/kvproto/pkg/errorpb" "github.com/pingcap/kvproto/pkg/kvrpcpb" "github.com/pingcap/kvproto/pkg/metapb" + "github.com/pingcap/tidb/pkg/config" "github.com/pingcap/tidb/pkg/ddl/placement" "github.com/pingcap/tidb/pkg/ddl/util" "github.com/pingcap/tidb/pkg/domain" @@ -141,10 +143,10 @@ type mockGCWorkerSuite struct { } func createGCWorkerSuite(t *testing.T) (s *mockGCWorkerSuite) { - return createGCWorkerSuiteWithStoreType(t, mockstore.EmbedUnistore) + return createGCWorkerSuiteWithStoreType(t, mockstore.EmbedUnistore, config.DefSchemaLease) } -func createGCWorkerSuiteWithStoreType(t *testing.T, storeType mockstore.StoreType) (s *mockGCWorkerSuite) { +func createGCWorkerSuiteWithStoreType(t *testing.T, storeType mockstore.StoreType, schemaLease time.Duration) (s *mockGCWorkerSuite) { s = new(mockGCWorkerSuite) hijackClient := func(client tikv.Client) tikv.Client { s.client = &mockGCWorkerClient{Client: client} @@ -169,7 +171,7 @@ func createGCWorkerSuiteWithStoreType(t *testing.T, storeType mockstore.StoreTyp require.NoError(t, err) store.GetOracle().Close() store.(tikv.Storage).SetOracle(s.oracle) - dom := bootstrap(t, store, 0) + dom := bootstrap(t, store, schemaLease) s.store, s.dom = store, dom s.tikvStore = s.store.(tikv.Storage) @@ -338,7 +340,10 @@ func TestMinStartTS(t *testing.T) { } func TestPrepareGC(t *testing.T) { - s := createGCWorkerSuite(t) + // as we are adjusting the base TS, we need a larger schema lease to avoid + // the info schema outdated error. as we keep adding offset to time oracle, + // so we need set a very large lease. + s := createGCWorkerSuiteWithStoreType(t, mockstore.EmbedUnistore, 220*time.Minute) now, err := s.gcWorker.getOracleTime() require.NoError(t, err) @@ -536,13 +541,13 @@ func TestGetGCConcurrency(t *testing.T) { require.NoError(t, err) concurrency, err := s.gcWorker.getGCConcurrency(ctx) require.NoError(t, err) - require.Equal(t, concurrencyConfig, concurrency) + require.Equal(t, concurrencyConfig, concurrency.v) err = s.gcWorker.saveValueToSysTable(gcAutoConcurrencyKey, booleanTrue) require.NoError(t, err) concurrency, err = s.gcWorker.getGCConcurrency(ctx) require.NoError(t, err) - require.Len(t, s.cluster.GetAllStores(), concurrency) + require.Len(t, s.cluster.GetAllStores(), concurrency.v) } func TestDoGC(t *testing.T) { @@ -742,7 +747,7 @@ func TestDeleteRangesFailure(t *testing.T) { failKey = ranges[0].StartKey failStore = stores[0] - err = deleteRangeFunc(gcContext(), 20, 1) + err = deleteRangeFunc(gcContext(), 20, gcConcurrency{1, false}) require.NoError(t, err) s.checkDestroyRangeReq(t, sendReqCh, ranges, stores) @@ -758,7 +763,7 @@ func TestDeleteRangesFailure(t *testing.T) { failStore = nil // Delete the remaining range again. - err = deleteRangeFunc(gcContext(), 20, 1) + err = deleteRangeFunc(gcContext(), 20, gcConcurrency{1, false}) require.NoError(t, err) s.checkDestroyRangeReq(t, sendReqCh, ranges[:1], stores) @@ -777,6 +782,59 @@ func TestDeleteRangesFailure(t *testing.T) { } } +func TestConcurrentDeleteRanges(t *testing.T) { + // make sure the parallelization of deleteRanges works + + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/store/gcworker/mockHistoryJobForGC", "return(1)")) + require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/store/gcworker/mockHistoryJob", "return(\"schema/d1/t1\")")) + defer func() { + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/store/gcworker/mockHistoryJobForGC")) + require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/store/gcworker/mockHistoryJob")) + }() + + s := createGCWorkerSuite(t) + se := createSession(s.gcWorker.store) + defer se.Close() + _, err := se.Execute(gcContext(), `INSERT INTO mysql.gc_delete_range VALUES +("1", "2", "31", "32", "10"), +("3", "4", "33", "34", "10"), +("5", "6", "35", "36", "15"), +("7", "8", "37", "38", "15"), +("9", "10", "39", "40", "15") + `) + require.NoError(t, err) + + ranges, err := util.LoadDeleteRanges(gcContext(), se, 20) + require.NoError(t, err) + require.Len(t, ranges, 5) + + stores, err := s.gcWorker.getStoresForGC(context.Background()) + require.NoError(t, err) + require.Len(t, stores, 3) + sort.Slice(stores, func(i, j int) bool { return stores[i].Address < stores[j].Address }) + + sendReqCh := make(chan SentReq, 20) + s.client.unsafeDestroyRangeHandler = func(addr string, req *tikvrpc.Request) (*tikvrpc.Response, error) { + sendReqCh <- SentReq{req, addr} + resp := &tikvrpc.Response{ + Resp: &kvrpcpb.UnsafeDestroyRangeResponse{}, + } + return resp, nil + } + defer func() { s.client.unsafeDestroyRangeHandler = nil }() + + err = s.gcWorker.deleteRanges(gcContext(), 20, gcConcurrency{3, false}) + require.NoError(t, err) + + s.checkDestroyRangeReq(t, sendReqCh, ranges, stores) + + se = createSession(s.gcWorker.store) + remainingRanges, err := util.LoadDeleteRanges(gcContext(), se, 20) + se.Close() + require.NoError(t, err) + require.Len(t, remainingRanges, 0) +} + type SentReq struct { req *tikvrpc.Request addr string @@ -882,7 +940,7 @@ func TestUnsafeDestroyRangeForRaftkv2(t *testing.T) { } defer func() { s.client.deleteRangeHandler = nil }() - err = s.gcWorker.deleteRanges(gcContext(), 8, 1) + err = s.gcWorker.deleteRanges(gcContext(), 8, gcConcurrency{1, false}) require.NoError(t, err) s.checkDestroyRangeReqV2(t, sendReqCh, ranges[:1]) @@ -893,7 +951,7 @@ func TestUnsafeDestroyRangeForRaftkv2(t *testing.T) { require.NoError(t, err) require.Equal(t, ranges[1:], remainingRanges) - err = s.gcWorker.deleteRanges(gcContext(), 20, 1) + err = s.gcWorker.deleteRanges(gcContext(), 20, gcConcurrency{1, false}) require.NoError(t, err) s.checkDestroyRangeReqV2(t, sendReqCh, ranges[1:]) @@ -935,7 +993,9 @@ Loop: } func TestLeaderTick(t *testing.T) { - s := createGCWorkerSuite(t) + // as we are adjusting the base TS, we need a larger schema lease to avoid + // the info schema outdated error. + s := createGCWorkerSuiteWithStoreType(t, mockstore.EmbedUnistore, time.Hour) gcSafePointCacheInterval = 0 @@ -1126,7 +1186,7 @@ func TestResolveLockRangeMeetRegionEnlargeCausedByRegionMerge(t *testing.T) { defer func() { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/store/copr/DisablePaging")) }() - s := createGCWorkerSuiteWithStoreType(t, mockstore.MockTiKV) + s := createGCWorkerSuiteWithStoreType(t, mockstore.MockTiKV, config.DefSchemaLease) var ( firstAccess = true @@ -1229,7 +1289,7 @@ func TestRunGCJob(t *testing.T) { useDistributedGC := s.gcWorker.checkUseDistributedGC() require.True(t, useDistributedGC) safePoint := s.mustAllocTs(t) - err := s.gcWorker.runGCJob(gcContext(), safePoint, 1) + err := s.gcWorker.runGCJob(gcContext(), safePoint, gcConcurrency{1, false}) require.NoError(t, err) pdSafePoint := s.mustGetSafePointFromPd(t) @@ -1244,7 +1304,7 @@ func TestRunGCJob(t *testing.T) { require.Equal(t, safePoint, etcdSafePoint) // Test distributed mode with safePoint regressing (although this is impossible) - err = s.gcWorker.runGCJob(gcContext(), safePoint-1, 1) + err = s.gcWorker.runGCJob(gcContext(), safePoint-1, gcConcurrency{1, false}) require.Error(t, err) // Central mode is deprecated in v5.0, fallback to distributed mode if it's set. @@ -1255,7 +1315,7 @@ func TestRunGCJob(t *testing.T) { p := s.createGCProbe(t, "k1") safePoint = s.mustAllocTs(t) - err = s.gcWorker.runGCJob(gcContext(), safePoint, 1) + err = s.gcWorker.runGCJob(gcContext(), safePoint, gcConcurrency{1, false}) require.NoError(t, err) s.checkCollected(t, p) @@ -1392,7 +1452,7 @@ func TestGCPlacementRules(t *testing.T) { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/store/gcworker/mockHistoryJobForGC")) }() - gcPlacementRuleCache := make(map[int64]any) + var gcPlacementRuleCache sync.Map deletePlacementRuleCounter := 0 require.NoError(t, failpoint.EnableWith("github.com/pingcap/tidb/pkg/store/gcworker/gcDeletePlacementRuleCounter", "return", func() error { deletePlacementRuleCounter++ @@ -1419,9 +1479,11 @@ func TestGCPlacementRules(t *testing.T) { // do gc dr := util.DelRangeTask{JobID: 1, ElementID: 10} - err = s.gcWorker.doGCPlacementRules(createSession(s.store), 1, dr, gcPlacementRuleCache) + err = doGCPlacementRules(createSession(s.store), 1, dr, &gcPlacementRuleCache) require.NoError(t, err) - require.Equal(t, map[int64]any{10: struct{}{}}, gcPlacementRuleCache) + v, ok := gcPlacementRuleCache.Load(int64(10)) + require.True(t, ok) + require.Equal(t, struct{}{}, v) require.Equal(t, 1, deletePlacementRuleCounter) // check bundle deleted after gc @@ -1431,9 +1493,11 @@ func TestGCPlacementRules(t *testing.T) { require.True(t, got.IsEmpty()) // gc the same table id repeatedly - err = s.gcWorker.doGCPlacementRules(createSession(s.store), 1, dr, gcPlacementRuleCache) + err = doGCPlacementRules(createSession(s.store), 1, dr, &gcPlacementRuleCache) require.NoError(t, err) - require.Equal(t, map[int64]any{10: struct{}{}}, gcPlacementRuleCache) + v, ok = gcPlacementRuleCache.Load(int64(10)) + require.True(t, ok) + require.Equal(t, struct{}{}, v) require.Equal(t, 1, deletePlacementRuleCounter) } @@ -1451,7 +1515,7 @@ func TestGCLabelRules(t *testing.T) { } func TestGCWithPendingTxn(t *testing.T) { - s := createGCWorkerSuite(t) + s := createGCWorkerSuiteWithStoreType(t, mockstore.EmbedUnistore, 30*time.Minute) ctx := gcContext() gcSafePointCacheInterval = 0 @@ -1502,7 +1566,9 @@ func TestGCWithPendingTxn(t *testing.T) { } func TestGCWithPendingTxn2(t *testing.T) { - s := createGCWorkerSuite(t) + // as we are adjusting the base TS, we need a larger schema lease to avoid + // the info schema outdated error. + s := createGCWorkerSuiteWithStoreType(t, mockstore.EmbedUnistore, 10*time.Minute) ctx := gcContext() gcSafePointCacheInterval = 0 @@ -1572,7 +1638,9 @@ func TestGCWithPendingTxn2(t *testing.T) { } func TestSkipGCAndOnlyResolveLock(t *testing.T) { - s := createGCWorkerSuite(t) + // as we are adjusting the base TS, we need a larger schema lease to avoid + // the info schema outdated error. + s := createGCWorkerSuiteWithStoreType(t, mockstore.EmbedUnistore, 10*time.Minute) ctx := gcContext() gcSafePointCacheInterval = 0 @@ -1642,3 +1710,37 @@ func bootstrap(t testing.TB, store kv.Storage, lease time.Duration) *domain.Doma }) return dom } + +func TestCalcDeleteRangeConcurrency(t *testing.T) { + testCases := []struct { + name string + concurrency gcConcurrency + rangeNum int + expected int + }{ + {"Auto: Low concurrency, few ranges", gcConcurrency{16, true}, 50000, 1}, + {"Auto: High concurrency, many ranges", gcConcurrency{400, true}, 1000000, 10}, + {"Auto: High concurrency, few ranges", gcConcurrency{400, true}, 50000, 1}, + {"Auto: Low concurrency, many ranges", gcConcurrency{16, true}, 1000000, 4}, + {"Non-auto: Low concurrency", gcConcurrency{16, false}, 1000000, 4}, + {"Non-auto: High concurrency", gcConcurrency{400, false}, 50000, 100}, + {"Edge case: Zero concurrency", gcConcurrency{0, true}, 100000, 1}, + {"Edge case: Zero ranges", gcConcurrency{100, true}, 0, 1}, + {"Large range number", gcConcurrency{400, true}, 10000000, 100}, + {"Exact RequestsPerThread", gcConcurrency{400, true}, 200000, 2}, + } + + w := &GCWorker{} + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + result := w.calcDeleteRangeConcurrency(tc.concurrency, tc.rangeNum) + if result != tc.expected { + t.Errorf("Expected %d, but got %d", tc.expected, result) + } + if result < 1 { + t.Errorf("Result should never be less than 1, but got %d", result) + } + }) + } +} diff --git a/pkg/store/helper/BUILD.bazel b/pkg/store/helper/BUILD.bazel index 30acad79fb205..a65d2b88624ec 100644 --- a/pkg/store/helper/BUILD.bazel +++ b/pkg/store/helper/BUILD.bazel @@ -6,6 +6,7 @@ go_library( importpath = "github.com/pingcap/tidb/pkg/store/helper", visibility = ["//visibility:public"], deps = [ + "//pkg/infoschema/context", "//pkg/kv", "//pkg/parser/model", "//pkg/store/driver/error", @@ -36,6 +37,7 @@ go_test( flaky = True, shard_count = 6, deps = [ + "//pkg/infoschema/context", "//pkg/parser/model", "//pkg/store/mockstore", "//pkg/tablecodec", diff --git a/pkg/store/helper/helper.go b/pkg/store/helper/helper.go index 30eed39953e45..20d7ec3e472e8 100644 --- a/pkg/store/helper/helper.go +++ b/pkg/store/helper/helper.go @@ -30,6 +30,7 @@ import ( "github.com/pingcap/errors" deadlockpb "github.com/pingcap/kvproto/pkg/deadlock" "github.com/pingcap/kvproto/pkg/kvrpcpb" + infoschema "github.com/pingcap/tidb/pkg/infoschema/context" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/parser/model" derr "github.com/pingcap/tidb/pkg/store/driver/error" @@ -302,12 +303,12 @@ const ( ) // ScrapeHotInfo gets the needed hot region information by the url given. -func (h *Helper) ScrapeHotInfo(ctx context.Context, rw string, allSchemas []*model.DBInfo) ([]HotTableIndex, error) { +func (h *Helper) ScrapeHotInfo(ctx context.Context, rw string, is infoschema.SchemaAndTable, filter func([]*model.DBInfo) []*model.DBInfo) ([]HotTableIndex, error) { regionMetrics, err := h.FetchHotRegion(ctx, rw) if err != nil { return nil, err } - return h.FetchRegionTableIndex(regionMetrics, allSchemas) + return h.FetchRegionTableIndex(regionMetrics, is, filter) } // FetchHotRegion fetches the hot region information from PD's http api. @@ -379,7 +380,7 @@ type HotTableIndex struct { } // FetchRegionTableIndex constructs a map that maps a table to its hot region information by the given raw hot RegionMetric metrics. -func (h *Helper) FetchRegionTableIndex(metrics map[uint64]RegionMetric, allSchemas []*model.DBInfo) ([]HotTableIndex, error) { +func (h *Helper) FetchRegionTableIndex(metrics map[uint64]RegionMetric, is infoschema.SchemaAndTable, filter func([]*model.DBInfo) []*model.DBInfo) ([]HotTableIndex, error) { hotTables := make([]HotTableIndex, 0, len(metrics)) for regionID, regionMetric := range metrics { regionMetric := regionMetric @@ -394,7 +395,7 @@ func (h *Helper) FetchRegionTableIndex(metrics map[uint64]RegionMetric, allSchem if err != nil { return nil, err } - f := h.FindTableIndexOfRegion(allSchemas, hotRange) + f := h.FindTableIndexOfRegion(is, hotRange) if f != nil { t.DbName = f.DBName t.TableName = f.TableName @@ -409,10 +410,11 @@ func (h *Helper) FetchRegionTableIndex(metrics map[uint64]RegionMetric, allSchem } // FindTableIndexOfRegion finds what table is involved in this hot region. And constructs the new frame item for future use. -func (*Helper) FindTableIndexOfRegion(allSchemas []*model.DBInfo, hotRange *RegionFrameRange) *FrameItem { - for _, db := range allSchemas { - for _, tbl := range db.Tables { - if f := findRangeInTable(hotRange, db, tbl); f != nil { +func (*Helper) FindTableIndexOfRegion(is infoschema.SchemaAndTable, hotRange *RegionFrameRange) *FrameItem { + for _, dbInfo := range is.AllSchemas() { + tblInfos, _ := is.SchemaTableInfos(context.Background(), dbInfo.Name) + for _, tbl := range tblInfos { + if f := findRangeInTable(hotRange, dbInfo, tbl); f != nil { return f } } @@ -677,8 +679,8 @@ func (*Helper) FilterMemDBs(oldSchemas []*model.DBInfo) (schemas []*model.DBInfo // GetRegionsTableInfo returns a map maps region id to its tables or indices. // Assuming tables or indices key ranges never intersect. // Regions key ranges can intersect. -func (h *Helper) GetRegionsTableInfo(regionsInfo *pd.RegionsInfo, schemas []*model.DBInfo) map[int64][]TableInfo { - tables := h.GetTablesInfoWithKeyRange(schemas) +func (h *Helper) GetRegionsTableInfo(regionsInfo *pd.RegionsInfo, is infoschema.SchemaAndTable, filter func([]*model.DBInfo) []*model.DBInfo) map[int64][]TableInfo { + tables := h.GetTablesInfoWithKeyRange(is, filter) regions := make([]*pd.RegionInfo, 0, len(regionsInfo.Regions)) for i := 0; i < len(regionsInfo.Regions); i++ { @@ -717,10 +719,15 @@ func newTableInfoWithKeyRange(db *model.DBInfo, table *model.TableInfo, partitio } // GetTablesInfoWithKeyRange returns a slice containing tableInfos with key ranges of all tables in schemas. -func (*Helper) GetTablesInfoWithKeyRange(schemas []*model.DBInfo) []TableInfoWithKeyRange { +func (*Helper) GetTablesInfoWithKeyRange(is infoschema.SchemaAndTable, filter func([]*model.DBInfo) []*model.DBInfo) []TableInfoWithKeyRange { tables := []TableInfoWithKeyRange{} - for _, db := range schemas { - for _, table := range db.Tables { + dbInfos := is.AllSchemas() + if filter != nil { + dbInfos = filter(dbInfos) + } + for _, db := range dbInfos { + tableInfos, _ := is.SchemaTableInfos(context.Background(), db.Name) + for _, table := range tableInfos { if table.Partition != nil { for i := range table.Partition.Definitions { tables = append(tables, newTableInfoWithKeyRange(db, table, &table.Partition.Definitions[i], nil)) diff --git a/pkg/store/helper/helper_test.go b/pkg/store/helper/helper_test.go index 7f92a18db819a..b339ad5656744 100644 --- a/pkg/store/helper/helper_test.go +++ b/pkg/store/helper/helper_test.go @@ -28,6 +28,7 @@ import ( "github.com/gorilla/mux" "github.com/pingcap/log" + infoschema "github.com/pingcap/tidb/pkg/infoschema/context" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/store/helper" "github.com/pingcap/tidb/pkg/store/mockstore" @@ -69,7 +70,7 @@ func TestHotRegion(t *testing.T) { } require.NoError(t, err) - res, err := h.FetchRegionTableIndex(regionMetric, []*model.DBInfo{dbInfo}) + res, err := h.FetchRegionTableIndex(regionMetric, infoschema.DBInfoAsInfoSchema([]*model.DBInfo{dbInfo}), nil) require.NotEqual(t, res[0].RegionMetric, res[1].RegionMetric) require.NoError(t, err) } @@ -80,7 +81,7 @@ func TestGetRegionsTableInfo(t *testing.T) { h := helper.NewHelper(store) regionsInfo := getMockTiKVRegionsInfo() schemas := getMockRegionsTableInfoSchema() - tableInfos := h.GetRegionsTableInfo(regionsInfo, schemas) + tableInfos := h.GetRegionsTableInfo(regionsInfo, infoschema.DBInfoAsInfoSchema(schemas), nil) require.Equal(t, getRegionsTableInfoAns(schemas), tableInfos) } @@ -213,25 +214,23 @@ func mockHotRegionResponse(w http.ResponseWriter, _ *http.Request) { } func getMockRegionsTableInfoSchema() []*model.DBInfo { - return []*model.DBInfo{ + dbInfo := &model.DBInfo{Name: model.NewCIStr("test")} + dbInfo.Deprecated.Tables = []*model.TableInfo{ { - Name: model.NewCIStr("test"), - Tables: []*model.TableInfo{ - { - ID: 41, - Indices: []*model.IndexInfo{{ID: 1}}, - }, - { - ID: 63, - Indices: []*model.IndexInfo{{ID: 1}, {ID: 2}}, - }, - { - ID: 66, - Indices: []*model.IndexInfo{{ID: 1}, {ID: 2}, {ID: 3}}, - }, - }, + ID: 41, + Indices: []*model.IndexInfo{{ID: 1}}, + }, + { + ID: 63, + Indices: []*model.IndexInfo{{ID: 1}, {ID: 2}}, + }, + { + ID: 66, + Indices: []*model.IndexInfo{{ID: 1}, {ID: 2}, {ID: 3}}, }, } + + return []*model.DBInfo{dbInfo} } func getRegionsTableInfoAns(dbs []*model.DBInfo) map[int64][]helper.TableInfo { @@ -239,31 +238,31 @@ func getRegionsTableInfoAns(dbs []*model.DBInfo) map[int64][]helper.TableInfo { db := dbs[0] ans[1] = []helper.TableInfo{} ans[2] = []helper.TableInfo{ - {db, db.Tables[0], false, nil, true, db.Tables[0].Indices[0]}, - {db, db.Tables[0], false, nil, false, nil}, + {db, db.Deprecated.Tables[0], false, nil, true, db.Deprecated.Tables[0].Indices[0]}, + {db, db.Deprecated.Tables[0], false, nil, false, nil}, } ans[3] = []helper.TableInfo{ - {db, db.Tables[1], false, nil, true, db.Tables[1].Indices[0]}, - {db, db.Tables[1], false, nil, true, db.Tables[1].Indices[1]}, - {db, db.Tables[1], false, nil, false, nil}, + {db, db.Deprecated.Tables[1], false, nil, true, db.Deprecated.Tables[1].Indices[0]}, + {db, db.Deprecated.Tables[1], false, nil, true, db.Deprecated.Tables[1].Indices[1]}, + {db, db.Deprecated.Tables[1], false, nil, false, nil}, } ans[4] = []helper.TableInfo{ - {db, db.Tables[2], false, nil, false, nil}, + {db, db.Deprecated.Tables[2], false, nil, false, nil}, } ans[5] = []helper.TableInfo{ - {db, db.Tables[2], false, nil, true, db.Tables[2].Indices[2]}, - {db, db.Tables[2], false, nil, false, nil}, + {db, db.Deprecated.Tables[2], false, nil, true, db.Deprecated.Tables[2].Indices[2]}, + {db, db.Deprecated.Tables[2], false, nil, false, nil}, } ans[6] = []helper.TableInfo{ - {db, db.Tables[2], false, nil, true, db.Tables[2].Indices[0]}, + {db, db.Deprecated.Tables[2], false, nil, true, db.Deprecated.Tables[2].Indices[0]}, } ans[7] = []helper.TableInfo{ - {db, db.Tables[2], false, nil, true, db.Tables[2].Indices[1]}, + {db, db.Deprecated.Tables[2], false, nil, true, db.Deprecated.Tables[2].Indices[1]}, } ans[8] = []helper.TableInfo{ - {db, db.Tables[2], false, nil, true, db.Tables[2].Indices[1]}, - {db, db.Tables[2], false, nil, true, db.Tables[2].Indices[2]}, - {db, db.Tables[2], false, nil, false, nil}, + {db, db.Deprecated.Tables[2], false, nil, true, db.Deprecated.Tables[2].Indices[1]}, + {db, db.Deprecated.Tables[2], false, nil, true, db.Deprecated.Tables[2].Indices[2]}, + {db, db.Deprecated.Tables[2], false, nil, false, nil}, } return ans } diff --git a/pkg/store/mockstore/mockcopr/executor_test.go b/pkg/store/mockstore/mockcopr/executor_test.go index bce423e8eae1e..75a9f4a5abff9 100644 --- a/pkg/store/mockstore/mockcopr/executor_test.go +++ b/pkg/store/mockstore/mockcopr/executor_test.go @@ -58,7 +58,6 @@ func TestResolvedLargeTxnLocks(t *testing.T) { require.NoError(t, store.Close()) }() - session.SetSchemaLease(0) session.DisableStats4Test() dom, err := session.BootstrapSession(store) require.NoError(t, err) diff --git a/pkg/store/mockstore/unistore/cophandler/mpp.go b/pkg/store/mockstore/unistore/cophandler/mpp.go index 264dac20c5eca..6d37d152c3d80 100644 --- a/pkg/store/mockstore/unistore/cophandler/mpp.go +++ b/pkg/store/mockstore/unistore/cophandler/mpp.go @@ -562,7 +562,7 @@ func (b *mppExecBuilder) buildMPPExecutor(exec *tipb.Executor) (mppExec, error) case tipb.ExecType_TypeExpand: return b.buildExpand(exec.Expand) default: - return nil, errors.Errorf(ErrExecutorNotSupportedMsg + exec.Tp.String()) + return nil, errors.New(ErrExecutorNotSupportedMsg + exec.Tp.String()) } } @@ -624,7 +624,7 @@ func (h *MPPTaskHandler) HandleEstablishConn(_ context.Context, req *mpp.Establi return tunnel, nil } if err.Code == MPPErrMPPGatherIDMismatch { - return nil, errors.Errorf(err.Msg) + return nil, errors.New(err.Msg) } time.Sleep(time.Second) } diff --git a/pkg/table/BUILD.bazel b/pkg/table/BUILD.bazel index 33b766c024e52..90d494dd7ad75 100644 --- a/pkg/table/BUILD.bazel +++ b/pkg/table/BUILD.bazel @@ -53,7 +53,7 @@ go_test( embed = [":table"], flaky = True, race = "on", - shard_count = 9, + shard_count = 10, deps = [ "//pkg/errctx", "//pkg/errno", diff --git a/pkg/table/context/BUILD.bazel b/pkg/table/context/BUILD.bazel index 171fecb88de64..c49178bd63055 100644 --- a/pkg/table/context/BUILD.bazel +++ b/pkg/table/context/BUILD.bazel @@ -13,6 +13,7 @@ go_library( "//pkg/expression/context", "//pkg/infoschema/context", "//pkg/kv", + "//pkg/meta/autoid", "//pkg/parser/model", "//pkg/sessionctx/stmtctx", "//pkg/sessionctx/variable", diff --git a/pkg/table/context/table.go b/pkg/table/context/table.go index f286441782ae6..06c06359c2ef0 100644 --- a/pkg/table/context/table.go +++ b/pkg/table/context/table.go @@ -17,7 +17,7 @@ package context import ( exprctx "github.com/pingcap/tidb/pkg/expression/context" infoschema "github.com/pingcap/tidb/pkg/infoschema/context" - "github.com/pingcap/tidb/pkg/kv" + "github.com/pingcap/tidb/pkg/meta/autoid" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/sessionctx/stmtctx" "github.com/pingcap/tidb/pkg/sessionctx/variable" @@ -48,23 +48,73 @@ type StatisticsSupport interface { UpdatePhysicalTableDelta(physicalTableID int64, delta int64, count int64, cols variable.DeltaCols) } +// CachedTableSupport is used for cached table operations +type CachedTableSupport interface { + // AddCachedTableHandleToTxn adds a cached handle to the current transaction + // to handle cached table when committing txn. + // The handle argument should implement `table.CachedTable` interface, but here is `any` to avoid import cycle. + AddCachedTableHandleToTxn(tableID int64, handle any) +} + +// TemporaryTableHandler is used by `table.Table` to handle temporary table. +type TemporaryTableHandler struct { + tblInTxn tableutil.TempTable + data variable.TemporaryTableData +} + +// NewTemporaryTableHandler creates a new TemporaryTableHandler +func NewTemporaryTableHandler(tbl tableutil.TempTable, data variable.TemporaryTableData) TemporaryTableHandler { + return TemporaryTableHandler{ + tblInTxn: tbl, + data: data, + } +} + +// Meta returns the meta +func (h *TemporaryTableHandler) Meta() *model.TableInfo { + return h.tblInTxn.GetMeta() +} + +// GetDirtySize returns the size of dirty data in txn of the temporary table +func (h *TemporaryTableHandler) GetDirtySize() int64 { + return h.tblInTxn.GetSize() +} + +// GetCommittedSize returns the committed data size of the temporary table +func (h *TemporaryTableHandler) GetCommittedSize() int64 { + if h.data == nil { + return 0 + } + return h.data.GetTableSize(h.tblInTxn.GetMeta().ID) +} + +// UpdateTxnDeltaSize updates the size of dirty data statistics in txn of the temporary table +func (h *TemporaryTableHandler) UpdateTxnDeltaSize(delta int) { + h.tblInTxn.SetSize(h.tblInTxn.GetSize() + int64(delta)) +} + +// TemporaryTableSupport is used for temporary table operations +type TemporaryTableSupport interface { + // GetTemporaryTableSizeLimit returns the size limit of a temporary table. + GetTemporaryTableSizeLimit() int64 + // AddTemporaryTableToTxn adds a temporary table to txn to mark it is modified + // and txn will handle it when committing. + // It returns a `TemporaryTableHandler` object which provides some extra info for the temporary table. + AddTemporaryTableToTxn(tblInfo *model.TableInfo) (TemporaryTableHandler, bool) +} + +// ExchangePartitionDMLSupport is used for DML operations when the table exchanging a partition. +type ExchangePartitionDMLSupport interface { + // GetInfoSchemaToCheckExchangeConstraint is used by DML to get the exchanged table to check + // constraints when exchanging partition. + GetInfoSchemaToCheckExchangeConstraint() infoschema.MetaOnlyInfoSchema +} + // MutateContext is used to when mutating a table. type MutateContext interface { AllocatorContext // GetExprCtx returns the context to build or evaluate expressions GetExprCtx() exprctx.ExprContext - // GetSessionVars returns the session variables. - GetSessionVars() *variable.SessionVars - // Txn returns the current transaction which is created before executing a statement. - // The returned kv.Transaction is not nil, but it maybe pending or invalid. - // If the active parameter is true, call this function will wait for the pending txn - // to become valid. - Txn(active bool) (kv.Transaction, error) - // GetDomainInfoSchema returns the latest information schema in domain - GetDomainInfoSchema() infoschema.MetaOnlyInfoSchema - // TxnRecordTempTable record the temporary table to the current transaction. - // This method will be called when the temporary table is modified or should allocate id in the transaction. - TxnRecordTempTable(tbl *model.TableInfo) tableutil.TempTable // ConnectionID returns the id of the current connection. // If the current environment is not in a query from the client, the return value is 0. ConnectionID() uint64 @@ -90,11 +140,21 @@ type MutateContext interface { // GetStatisticsSupport returns a `StatisticsSupport` if the context supports it. // If the context does not support statistics update, the second return value will be false. GetStatisticsSupport() (StatisticsSupport, bool) + // GetCachedTableSupport returns a `CachedTableSupport` if the context supports it. + // If the context does not support cached table, the second return value will be false. + GetCachedTableSupport() (CachedTableSupport, bool) + // GetTemporaryTableSupport returns a `TemporaryTableSupport` if the context supports it. + // If the context does not support temporary table, the second return value will be false. + GetTemporaryTableSupport() (TemporaryTableSupport, bool) + // GetExchangePartitionDMLSupport returns a `ExchangePartitionDMLSupport` if the context supports it. + // ExchangePartitionDMLSupport is used by DMLs when the table is exchanging a partition. + GetExchangePartitionDMLSupport() (ExchangePartitionDMLSupport, bool) } // AllocatorContext is used to provide context for method `table.Allocators`. type AllocatorContext interface { - // TxnRecordTempTable record the temporary table to the current transaction. - // This method will be called when the temporary table is modified or should allocate id in the transaction. - TxnRecordTempTable(tbl *model.TableInfo) tableutil.TempTable + // AlternativeAllocators returns an alternative `autoid.Allocators` for the table. + // If the second return value is nil, it means there are no alternative allocators in the context. + // Currently, it provides alternative allocators for temporary tables to alloc IDs in session. + AlternativeAllocators(tbl *model.TableInfo) (autoid.Allocators, bool) } diff --git a/pkg/table/contextimpl/BUILD.bazel b/pkg/table/contextimpl/BUILD.bazel index 3ebf393aacf71..1f39291ead924 100644 --- a/pkg/table/contextimpl/BUILD.bazel +++ b/pkg/table/contextimpl/BUILD.bazel @@ -7,13 +7,14 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/expression/context", + "//pkg/infoschema/context", + "//pkg/meta/autoid", "//pkg/parser/model", "//pkg/sessionctx", "//pkg/sessionctx/stmtctx", "//pkg/sessionctx/variable", "//pkg/table/context", "//pkg/util/intest", - "//pkg/util/tableutil", "@com_github_pingcap_failpoint//:failpoint", "@com_github_pingcap_tipb//go-binlog", ], @@ -26,8 +27,10 @@ go_test( flaky = True, deps = [ ":contextimpl", + "//pkg/parser/model", "//pkg/sessionctx/binloginfo", "//pkg/sessionctx/variable", + "//pkg/table", "//pkg/testkit", "//pkg/util/mock", "@com_github_pingcap_tipb//go-binlog", diff --git a/pkg/table/contextimpl/table.go b/pkg/table/contextimpl/table.go index ed6c6ac7425e1..329bba43f60d0 100644 --- a/pkg/table/contextimpl/table.go +++ b/pkg/table/contextimpl/table.go @@ -17,13 +17,14 @@ package contextimpl import ( "github.com/pingcap/failpoint" exprctx "github.com/pingcap/tidb/pkg/expression/context" + infoschema "github.com/pingcap/tidb/pkg/infoschema/context" + "github.com/pingcap/tidb/pkg/meta/autoid" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/sessionctx/stmtctx" "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/table/context" "github.com/pingcap/tidb/pkg/util/intest" - "github.com/pingcap/tidb/pkg/util/tableutil" "github.com/pingcap/tipb/go-binlog" ) @@ -47,10 +48,18 @@ func NewTableContextImpl(sctx sessionctx.Context) *TableContextImpl { } } -// TxnRecordTempTable record the temporary table to the current transaction. -// This method will be called when the temporary table is modified in the transaction. -func (ctx *TableContextImpl) TxnRecordTempTable(tbl *model.TableInfo) tableutil.TempTable { - return ctx.vars().GetTemporaryTable(tbl) +// AlternativeAllocators implements the AllocatorContext interface +func (ctx *TableContextImpl) AlternativeAllocators(tbl *model.TableInfo) (allocators autoid.Allocators, ok bool) { + // Use an independent allocator for global temporary tables. + if tbl.TempTableType == model.TempTableGlobal { + if tempTbl := ctx.vars().GetTemporaryTable(tbl); tempTbl != nil { + if alloc := tempTbl.GetAutoIDAllocator(); alloc != nil { + return autoid.NewAllocators(false, alloc), true + } + } + // If the session is not in a txn, for example, in "show create table", use the original allocator. + } + return } // GetExprCtx returns the ExprContext @@ -145,6 +154,58 @@ func (ctx *TableContextImpl) UpdatePhysicalTableDelta( } } +// GetCachedTableSupport implements the MutateContext interface. +func (ctx *TableContextImpl) GetCachedTableSupport() (context.CachedTableSupport, bool) { + if ctx.vars().TxnCtx != nil { + return ctx, true + } + return nil, false +} + +// AddCachedTableHandleToTxn implements `CachedTableSupport` interface +func (ctx *TableContextImpl) AddCachedTableHandleToTxn(tableID int64, handle any) { + txnCtx := ctx.vars().TxnCtx + if txnCtx.CachedTables == nil { + txnCtx.CachedTables = make(map[int64]any) + } + if _, ok := txnCtx.CachedTables[tableID]; !ok { + txnCtx.CachedTables[tableID] = handle + } +} + +// GetTemporaryTableSupport implements the MutateContext interface. +func (ctx *TableContextImpl) GetTemporaryTableSupport() (context.TemporaryTableSupport, bool) { + if ctx.vars().TxnCtx == nil { + return nil, false + } + return ctx, true +} + +// GetInfoSchemaToCheckExchangeConstraint implements the ExchangePartitionDMLSupport interface. +func (ctx *TableContextImpl) GetInfoSchemaToCheckExchangeConstraint() infoschema.MetaOnlyInfoSchema { + return ctx.Context.GetDomainInfoSchema() +} + +// GetExchangePartitionDMLSupport implements the MutateContext interface. +func (ctx *TableContextImpl) GetExchangePartitionDMLSupport() (context.ExchangePartitionDMLSupport, bool) { + return ctx, true +} + +// GetTemporaryTableSizeLimit implements TemporaryTableSupport interface. +func (ctx *TableContextImpl) GetTemporaryTableSizeLimit() int64 { + return ctx.vars().TMPTableSize +} + +// AddTemporaryTableToTxn implements the TemporaryTableSupport interface. +func (ctx *TableContextImpl) AddTemporaryTableToTxn(tblInfo *model.TableInfo) (context.TemporaryTableHandler, bool) { + vars := ctx.vars() + if tbl := vars.GetTemporaryTable(tblInfo); tbl != nil { + tbl.SetModified(true) + return context.NewTemporaryTableHandler(tbl, vars.TemporaryTableData), true + } + return context.TemporaryTableHandler{}, false +} + func (ctx *TableContextImpl) vars() *variable.SessionVars { return ctx.Context.GetSessionVars() } diff --git a/pkg/table/contextimpl/table_test.go b/pkg/table/contextimpl/table_test.go index 7fea3d657fed5..a50ea689ed332 100644 --- a/pkg/table/contextimpl/table_test.go +++ b/pkg/table/contextimpl/table_test.go @@ -17,8 +17,10 @@ package contextimpl_test import ( "testing" + "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/sessionctx/binloginfo" "github.com/pingcap/tidb/pkg/sessionctx/variable" + "github.com/pingcap/tidb/pkg/table" "github.com/pingcap/tidb/pkg/table/contextimpl" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/util/mock" @@ -26,6 +28,15 @@ import ( "github.com/stretchr/testify/require" ) +type mockTemporaryData struct { + variable.TemporaryTableData + size int64 +} + +func (m *mockTemporaryData) GetTableSize(tableID int64) int64 { + return tableID*1000000 + m.size +} + func TestMutateContextImplFields(t *testing.T) { sctx := mock.NewContext() sctx.Mutations = make(map[int64]*binlog.TableMutation) @@ -114,4 +125,51 @@ func TestMutateContextImplFields(t *testing.T) { require.Equal(t, int64(1), deltaMap.Delta) require.Equal(t, int64(2), deltaMap.Count) require.Equal(t, map[int64]int64{3: 4, 5: 6}, deltaMap.ColSize) + // cached table support + sctx.GetSessionVars().TxnCtx = nil + cachedTableSupport, ok := ctx.GetCachedTableSupport() + require.False(t, ok) + require.Nil(t, cachedTableSupport) + sctx.GetSessionVars().TxnCtx = txnCtx + cachedTableSupport, ok = ctx.GetCachedTableSupport() + require.True(t, ok) + type mockCachedTable struct { + table.CachedTable + } + handle := &mockCachedTable{} + require.Nil(t, sctx.GetSessionVars().TxnCtx.CachedTables[123]) + cachedTableSupport.AddCachedTableHandleToTxn(123, handle) + cached := sctx.GetSessionVars().TxnCtx.CachedTables[123] + require.Same(t, handle, cached) + // temporary table support + sctx.GetSessionVars().TxnCtx = nil + tempTableSupport, ok := ctx.GetTemporaryTableSupport() + require.False(t, ok) + require.Nil(t, tempTableSupport) + sctx.GetSessionVars().TxnCtx = txnCtx + mockTempData := &mockTemporaryData{} + sctx.GetSessionVars().TemporaryTableData = mockTempData + tempTableSupport, ok = ctx.GetTemporaryTableSupport() + require.True(t, ok) + require.Nil(t, txnCtx.TemporaryTables[456]) + tmpTblHandler, ok := tempTableSupport.AddTemporaryTableToTxn(&model.TableInfo{ + ID: 456, + TempTableType: model.TempTableGlobal, + }) + require.True(t, ok) + require.NotNil(t, tmpTblHandler) + tmpTblTable := txnCtx.TemporaryTables[456] + require.NotNil(t, tmpTblTable) + require.True(t, tmpTblTable.GetModified()) + require.Equal(t, int64(456000000), tmpTblHandler.GetCommittedSize()) + mockTempData.size = 111 + require.Equal(t, int64(456000111), tmpTblHandler.GetCommittedSize()) + require.Equal(t, int64(0), tmpTblHandler.GetDirtySize()) + tmpTblHandler.UpdateTxnDeltaSize(333) + require.Equal(t, int64(333), tmpTblHandler.GetDirtySize()) + tmpTblHandler.UpdateTxnDeltaSize(-1) + require.Equal(t, int64(332), tmpTblHandler.GetDirtySize()) + exchange, ok := ctx.GetExchangePartitionDMLSupport() + require.True(t, ok) + require.Same(t, ctx.GetDomainInfoSchema(), exchange.GetInfoSchemaToCheckExchangeConstraint()) } diff --git a/pkg/table/index.go b/pkg/table/index.go index d451a22db1eca..10f9c2b1bffe3 100644 --- a/pkg/table/index.go +++ b/pkg/table/index.go @@ -15,7 +15,6 @@ package table import ( - "context" "time" "github.com/pingcap/tidb/pkg/errctx" @@ -32,42 +31,55 @@ type IndexIterator interface { // CreateIdxOpt contains the options will be used when creating an index. type CreateIdxOpt struct { - Ctx context.Context - Untouched bool // If true, the index key/value is no need to commit. - IgnoreAssertion bool - FromBackFill bool + commonMutateOpt + ignoreAssertion bool + fromBackFill bool } -// CreateIdxOptFunc is defined for the Create() method of Index interface. -// Here is a blog post about how to use this pattern: -// https://dave.cheney.net/2014/10/17/functional-options-for-friendly-apis -type CreateIdxOptFunc func(*CreateIdxOpt) +// NewCreateIdxOpt creates a new CreateIdxOpt. +func NewCreateIdxOpt(opts ...CreateIdxOption) *CreateIdxOpt { + opt := &CreateIdxOpt{} + for _, o := range opts { + o.applyCreateIdxOpt(opt) + } + return opt +} + +// IgnoreAssertion indicates whether to ignore assertion. +func (opt *CreateIdxOpt) IgnoreAssertion() bool { + return opt.ignoreAssertion +} -// IndexIsUntouched uses to indicate the index kv is untouched. -var IndexIsUntouched CreateIdxOptFunc = func(opt *CreateIdxOpt) { - opt.Untouched = true +// FromBackFill indicates whether the index is created by DDL backfill worker. +func (opt *CreateIdxOpt) FromBackFill() bool { + return opt.fromBackFill +} + +// CreateIdxOption is defined for the Create() method of the Index interface. +type CreateIdxOption interface { + applyCreateIdxOpt(*CreateIdxOpt) +} + +type withIgnoreAssertion struct{} + +func (withIgnoreAssertion) applyCreateIdxOpt(opt *CreateIdxOpt) { + opt.ignoreAssertion = true } // WithIgnoreAssertion uses to indicate the process can ignore assertion. -var WithIgnoreAssertion = func(opt *CreateIdxOpt) { - opt.IgnoreAssertion = true +var WithIgnoreAssertion CreateIdxOption = withIgnoreAssertion{} + +type fromBackfill struct{} + +func (fromBackfill) applyCreateIdxOpt(opt *CreateIdxOpt) { + opt.fromBackFill = true } // FromBackfill indicates that the index is created by DDL backfill worker. // In the backfill-merge process, the index KVs from DML will be redirected to // the temp index. On the other hand, the index KVs from DDL backfill worker should // never be redirected to the temp index. -var FromBackfill = func(opt *CreateIdxOpt) { - opt.FromBackFill = true -} - -// WithCtx returns a CreateIdxFunc. -// This option is used to pass context.Context. -func WithCtx(ctx context.Context) CreateIdxOptFunc { - return func(opt *CreateIdxOpt) { - opt.Ctx = ctx - } -} +var FromBackfill CreateIdxOption = fromBackfill{} // Index is the interface for index data on KV store. type Index interface { @@ -76,7 +88,7 @@ type Index interface { // TableMeta returns TableInfo TableMeta() *model.TableInfo // Create supports insert into statement. - Create(ctx MutateContext, txn kv.Transaction, indexedValues []types.Datum, h kv.Handle, handleRestoreData []types.Datum, opts ...CreateIdxOptFunc) (kv.Handle, error) + Create(ctx MutateContext, txn kv.Transaction, indexedValues []types.Datum, h kv.Handle, handleRestoreData []types.Datum, opts ...CreateIdxOption) (kv.Handle, error) // Delete supports delete from statement. Delete(ctx MutateContext, txn kv.Transaction, indexedValues []types.Datum, h kv.Handle) error // GenIndexKVIter generate index key and value for multi-valued index, use iterator to reduce the memory allocation. diff --git a/pkg/table/table.go b/pkg/table/table.go index 6e4eb24a26c92..a1736445a0867 100644 --- a/pkg/table/table.go +++ b/pkg/table/table.go @@ -119,30 +119,132 @@ var ( // RecordIterFunc is used for low-level record iteration. type RecordIterFunc func(h kv.Handle, rec []types.Datum, cols []*Column) (more bool, err error) +// commonMutateOpt is the common options for mutating a table. +type commonMutateOpt struct { + ctx context.Context + dupKeyCheck DupKeyCheckMode + pessimisticLazyDupKeyCheck PessimisticLazyDupKeyCheckMode +} + +// Ctx returns the go context in the option +func (opt *commonMutateOpt) Ctx() context.Context { + return opt.ctx +} + +// DupKeyCheck returns the DupKeyCheckMode in the option +func (opt *commonMutateOpt) DupKeyCheck() DupKeyCheckMode { + return opt.dupKeyCheck +} + +// PessimisticLazyDupKeyCheck returns the PessimisticLazyDupKeyCheckMode in the option +func (opt *commonMutateOpt) PessimisticLazyDupKeyCheck() PessimisticLazyDupKeyCheckMode { + return opt.pessimisticLazyDupKeyCheck +} + // AddRecordOpt contains the options will be used when adding a record. type AddRecordOpt struct { - CreateIdxOpt - IsUpdate bool - ReserveAutoID int + commonMutateOpt + isUpdate bool + reserveAutoID int +} + +// NewAddRecordOpt creates a new AddRecordOpt with options. +func NewAddRecordOpt(opts ...AddRecordOption) *AddRecordOpt { + opt := &AddRecordOpt{} + for _, o := range opts { + o.applyAddRecordOpt(opt) + } + return opt +} + +// IsUpdate indicates whether the `AddRecord` operation is in an update statement. +func (opt *AddRecordOpt) IsUpdate() bool { + return opt.isUpdate +} + +// ReserveAutoID indicates the auto id count that should be reserved. +func (opt *AddRecordOpt) ReserveAutoID() int { + return opt.reserveAutoID +} + +// GetCreateIdxOpt creates a CreateIdxOpt. +func (opt *AddRecordOpt) GetCreateIdxOpt() *CreateIdxOpt { + return &CreateIdxOpt{commonMutateOpt: opt.commonMutateOpt} } // AddRecordOption is defined for the AddRecord() method of the Table interface. type AddRecordOption interface { - ApplyOn(*AddRecordOpt) + applyAddRecordOpt(*AddRecordOpt) } -// WithReserveAutoIDHint tells the AddRecord operation to reserve a batch of auto ID in the stmtctx. -type WithReserveAutoIDHint int +// UpdateRecordOpt contains the options will be used when updating a record. +type UpdateRecordOpt struct { + commonMutateOpt + // skipWriteUntouchedIndices is an option to skip write untouched indices when updating a record. + skipWriteUntouchedIndices bool +} + +// NewUpdateRecordOpt creates a new UpdateRecordOpt with options. +func NewUpdateRecordOpt(opts ...UpdateRecordOption) *UpdateRecordOpt { + opt := &UpdateRecordOpt{} + for _, o := range opts { + o.applyUpdateRecordOpt(opt) + } + return opt +} + +// SkipWriteUntouchedIndices indicates whether to skip write untouched indices when updating a record. +func (opt *UpdateRecordOpt) SkipWriteUntouchedIndices() bool { + return opt.skipWriteUntouchedIndices +} + +// GetAddRecordOpt creates a AddRecordOpt. +func (opt *UpdateRecordOpt) GetAddRecordOpt() *AddRecordOpt { + return &AddRecordOpt{commonMutateOpt: opt.commonMutateOpt} +} + +// GetCreateIdxOpt creates a CreateIdxOpt. +func (opt *UpdateRecordOpt) GetCreateIdxOpt() *CreateIdxOpt { + return &CreateIdxOpt{commonMutateOpt: opt.commonMutateOpt} +} + +// UpdateRecordOption is defined for the UpdateRecord() method of the Table interface. +type UpdateRecordOption interface { + applyUpdateRecordOpt(*UpdateRecordOpt) +} + +// CommonMutateOptFunc is a function to provide common options for mutating a table. +type CommonMutateOptFunc func(*commonMutateOpt) + +// ApplyAddRecordOpt implements the AddRecordOption interface. +func (f CommonMutateOptFunc) applyAddRecordOpt(opt *AddRecordOpt) { + f(&opt.commonMutateOpt) +} + +// ApplyUpdateRecordOpt implements the UpdateRecordOption interface. +func (f CommonMutateOptFunc) applyUpdateRecordOpt(opt *UpdateRecordOpt) { + f(&opt.commonMutateOpt) +} -// ApplyOn implements the AddRecordOption interface. -func (n WithReserveAutoIDHint) ApplyOn(opt *AddRecordOpt) { - opt.ReserveAutoID = int(n) +// ApplyCreateIdxOpt implements the CreateIdxOption interface. +func (f CommonMutateOptFunc) applyCreateIdxOpt(opt *CreateIdxOpt) { + f(&opt.commonMutateOpt) } -// ApplyOn implements the AddRecordOption interface, so any CreateIdxOptFunc -// can be passed as the optional argument to the table.AddRecord method. -func (f CreateIdxOptFunc) ApplyOn(opt *AddRecordOpt) { - f(&opt.CreateIdxOpt) +// WithCtx returns a CommonMutateOptFunc. +// This option is used to pass context.Context. +func WithCtx(ctx context.Context) CommonMutateOptFunc { + return func(opt *commonMutateOpt) { + opt.ctx = ctx + } +} + +// WithReserveAutoIDHint tells the AddRecord operation to reserve a batch of auto ID in the stmtctx. +type WithReserveAutoIDHint int + +// ApplyAddRecordOpt implements the AddRecordOption interface. +func (n WithReserveAutoIDHint) applyAddRecordOpt(opt *AddRecordOpt) { + opt.reserveAutoID = int(n) } // IsUpdate is a defined value for AddRecordOptFunc. @@ -150,8 +252,83 @@ var IsUpdate AddRecordOption = isUpdate{} type isUpdate struct{} -func (i isUpdate) ApplyOn(opt *AddRecordOpt) { - opt.IsUpdate = true +func (i isUpdate) applyAddRecordOpt(opt *AddRecordOpt) { + opt.isUpdate = true +} + +// skipWriteUntouchedIndices implements UpdateRecordOption. +type skipWriteUntouchedIndices struct{} + +func (skipWriteUntouchedIndices) applyUpdateRecordOpt(opt *UpdateRecordOpt) { + opt.skipWriteUntouchedIndices = true +} + +// SkipWriteUntouchedIndices is an option to skip write untouched options when updating a record. +// If there are no later queries in the transaction that need to read the untouched indices, +// you can use this option to improve performance. +// However, it is not safe to use it in an explicit txn or the updated table has some foreign key constraints. +// Because the following read operations in the same txn may not get the correct data with the current implementation. +// See: +// - https://github.com/pingcap/tidb/pull/12609 +// - https://github.com/pingcap/tidb/issues/39419 +var SkipWriteUntouchedIndices UpdateRecordOption = skipWriteUntouchedIndices{} + +// DupKeyCheckMode indicates how to check the duplicated key when adding/updating a record/index. +type DupKeyCheckMode uint8 + +const ( + // DupKeyCheckInPlace indicates to check the duplicated key in place, both in the memory buffer and storage. + DupKeyCheckInPlace DupKeyCheckMode = iota + // DupKeyCheckLazy indicates to check the duplicated key lazily. + // It means only checking the duplicated key in the memory buffer and checking keys in storage will be postponed + // to the subsequence stage such as lock or commit phase. + DupKeyCheckLazy + // DupKeyCheckSkip indicates skipping the duplicated key check. + DupKeyCheckSkip +) + +// ApplyAddRecordOpt implements the AddRecordOption interface. +func (m DupKeyCheckMode) applyAddRecordOpt(opt *AddRecordOpt) { + opt.dupKeyCheck = m +} + +// ApplyUpdateRecordOpt implements the UpdateRecordOption interface. +func (m DupKeyCheckMode) applyUpdateRecordOpt(opt *UpdateRecordOpt) { + opt.dupKeyCheck = m +} + +// ApplyCreateIdxOpt implements the CreateIdxOption interface. +func (m DupKeyCheckMode) applyCreateIdxOpt(opt *CreateIdxOpt) { + opt.dupKeyCheck = m +} + +// PessimisticLazyDupKeyCheckMode only takes effect for pessimistic transaction +// when `DupKeyCheckMode` is set to `DupKeyCheckLazy`. +// It indicates how to check the duplicated key in store. +type PessimisticLazyDupKeyCheckMode uint8 + +const ( + // DupKeyCheckInAcquireLock indicates to check the duplicated key when acquiring the pessimistic lock. + DupKeyCheckInAcquireLock PessimisticLazyDupKeyCheckMode = iota + // DupKeyCheckInPrewrite indicates to check the duplicated key in the prewrite step when committing. + // Please notice that if it is used, the duplicated key error may not be returned immediately after each statement, + // because the duplicated key is not checked when acquiring the pessimistic lock. + DupKeyCheckInPrewrite +) + +// applyAddRecordOpt implements the AddRecordOption interface. +func (m PessimisticLazyDupKeyCheckMode) applyAddRecordOpt(opt *AddRecordOpt) { + opt.pessimisticLazyDupKeyCheck = m +} + +// applyUpdateRecordOpt implements the UpdateRecordOption interface. +func (m PessimisticLazyDupKeyCheckMode) applyUpdateRecordOpt(opt *UpdateRecordOpt) { + opt.pessimisticLazyDupKeyCheck = m +} + +// applyCreateIdxOpt implements the CreateIdxOption interface. +func (m PessimisticLazyDupKeyCheckMode) applyCreateIdxOpt(opt *CreateIdxOpt) { + opt.pessimisticLazyDupKeyCheck = m } type columnAPI interface { @@ -199,13 +376,13 @@ type Table interface { IndexPrefix() kv.Key // AddRecord inserts a row which should contain only public columns - AddRecord(ctx MutateContext, r []types.Datum, opts ...AddRecordOption) (recordID kv.Handle, err error) + AddRecord(ctx MutateContext, txn kv.Transaction, r []types.Datum, opts ...AddRecordOption) (recordID kv.Handle, err error) // UpdateRecord updates a row which should contain only writable columns. - UpdateRecord(gctx context.Context, ctx MutateContext, h kv.Handle, currData, newData []types.Datum, touched []bool) error + UpdateRecord(ctx MutateContext, txn kv.Transaction, h kv.Handle, currData, newData []types.Datum, touched []bool, opts ...UpdateRecordOption) error // RemoveRecord removes a row in the table. - RemoveRecord(ctx MutateContext, h kv.Handle, r []types.Datum) error + RemoveRecord(ctx MutateContext, txn kv.Transaction, h kv.Handle, r []types.Datum) error // Allocators returns all allocators. Allocators(ctx AllocatorContext) autoid.Allocators diff --git a/pkg/table/table_test.go b/pkg/table/table_test.go index cfdcdd8e3dafc..373fc3f49ff6e 100644 --- a/pkg/table/table_test.go +++ b/pkg/table/table_test.go @@ -15,6 +15,7 @@ package table import ( + "context" "testing" mysql "github.com/pingcap/tidb/pkg/errno" @@ -41,3 +42,39 @@ func TestErrorCode(t *testing.T) { require.Equal(t, mysql.ErrNoPartitionForGivenValue, int(terror.ToSQLError(ErrNoPartitionForGivenValue).Code)) require.Equal(t, mysql.ErrLockOrActiveTransaction, int(terror.ToSQLError(ErrLockOrActiveTransaction).Code)) } + +func TestOptions(t *testing.T) { + ctx := context.WithValue(context.Background(), "test", "test") + // NewAddRecordOpt without option + addOpt := NewAddRecordOpt() + require.Equal(t, AddRecordOpt{}, *addOpt) + require.Equal(t, CreateIdxOpt{}, *(addOpt.GetCreateIdxOpt())) + // NewAddRecordOpt with options + addOpt = NewAddRecordOpt(WithCtx(ctx), IsUpdate, WithReserveAutoIDHint(12)) + require.Equal(t, AddRecordOpt{ + commonMutateOpt: commonMutateOpt{ctx: ctx}, + isUpdate: true, + reserveAutoID: 12, + }, *addOpt) + require.Equal(t, CreateIdxOpt{commonMutateOpt: commonMutateOpt{ctx: ctx}}, *(addOpt.GetCreateIdxOpt())) + // NewUpdateRecordOpt without option + updateOpt := NewUpdateRecordOpt() + require.Equal(t, UpdateRecordOpt{}, *updateOpt) + require.Equal(t, AddRecordOpt{}, *(updateOpt.GetAddRecordOpt())) + require.Equal(t, CreateIdxOpt{}, *(updateOpt.GetCreateIdxOpt())) + // NewUpdateRecordOpt with options + updateOpt = NewUpdateRecordOpt(WithCtx(ctx)) + require.Equal(t, UpdateRecordOpt{commonMutateOpt: commonMutateOpt{ctx: ctx}}, *updateOpt) + require.Equal(t, AddRecordOpt{commonMutateOpt: commonMutateOpt{ctx: ctx}}, *(updateOpt.GetAddRecordOpt())) + require.Equal(t, CreateIdxOpt{commonMutateOpt: commonMutateOpt{ctx: ctx}}, *(updateOpt.GetCreateIdxOpt())) + // NewCreateIdxOpt without option + createIdxOpt := NewCreateIdxOpt() + require.Equal(t, CreateIdxOpt{}, *createIdxOpt) + // NewCreateIdxOpt with options + createIdxOpt = NewCreateIdxOpt(WithCtx(ctx), WithIgnoreAssertion, FromBackfill) + require.Equal(t, CreateIdxOpt{ + commonMutateOpt: commonMutateOpt{ctx: ctx}, + ignoreAssertion: true, + fromBackFill: true, + }, *createIdxOpt) +} diff --git a/pkg/table/tables/BUILD.bazel b/pkg/table/tables/BUILD.bazel index 2e653027c6c09..d292d9753072b 100644 --- a/pkg/table/tables/BUILD.bazel +++ b/pkg/table/tables/BUILD.bazel @@ -43,6 +43,7 @@ go_library( "//pkg/util/dbterror", "//pkg/util/generatedexpr", "//pkg/util/hack", + "//pkg/util/intest", "//pkg/util/logutil", "//pkg/util/ranger", "//pkg/util/rowcodec", @@ -76,10 +77,11 @@ go_test( ], embed = [":tables"], flaky = True, - shard_count = 31, + shard_count = 34, deps = [ "//pkg/ddl", "//pkg/domain", + "//pkg/errctx", "//pkg/infoschema", "//pkg/kv", "//pkg/lightning/backend/encode", diff --git a/pkg/table/tables/bench_test.go b/pkg/table/tables/bench_test.go index ad53128bcfd58..76580010dd062 100644 --- a/pkg/table/tables/bench_test.go +++ b/pkg/table/tables/bench_test.go @@ -23,6 +23,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/sessiontxn" + "github.com/pingcap/tidb/pkg/table" "github.com/pingcap/tidb/pkg/testkit" "github.com/pingcap/tidb/pkg/types" _ "github.com/pingcap/tidb/pkg/util/context" @@ -30,7 +31,7 @@ import ( "github.com/stretchr/testify/require" ) -const batchSize = 10000 +const batchSize = 5000 func BenchmarkAddRecordInPipelinedDML(b *testing.B) { logutil.InitLogger(&logutil.LogConfig{Config: log.Config{Level: "fatal"}}) @@ -70,7 +71,7 @@ func BenchmarkAddRecordInPipelinedDML(b *testing.B) { b.StartTimer() for j := 0; j < batchSize; j++ { - _, err := tb.AddRecord(ctx.GetTableCtx(), records[j]) + _, err := tb.AddRecord(ctx.GetTableCtx(), txn, records[j]) if err != nil { b.Fatal(err) } @@ -94,7 +95,7 @@ func BenchmarkRemoveRecordInPipelinedDML(b *testing.B) { // Create the table _, err := tk.Session().Execute( context.Background(), - "CREATE TABLE IF NOT EXISTS test.t (a int primary key auto_increment, b varchar(255))", + "CREATE TABLE IF NOT EXISTS test.t (a int primary key clustered, b varchar(255))", ) require.NoError(b, err) tb, err := dom.InfoSchema().TableByName(context.Background(), model.NewCIStr("test"), model.NewCIStr("t")) @@ -108,31 +109,29 @@ func BenchmarkRemoveRecordInPipelinedDML(b *testing.B) { records[j] = types.MakeDatums(j, "test") } + // Add initial records + se := tk.Session() + for j := 0; j < batchSize; j++ { + tk.MustExec("INSERT INTO test.t VALUES (?, ?)", j, "test") + } + + b.StopTimer() b.ResetTimer() for i := 0; i < b.N; i++ { // Reset environment for each batch - b.StopTimer() - - ctx := tk.Session() - vars := ctx.GetSessionVars() + vars := se.GetSessionVars() vars.BulkDMLEnabled = true vars.TxnCtx.EnableMDL = true vars.StmtCtx.InUpdateStmt = true require.Nil(b, sessiontxn.NewTxn(context.Background(), tk.Session())) - txn, _ := ctx.Txn(true) + txn, _ := se.Txn(true) require.True(b, txn.IsPipelined()) - // Add initial records - for j := 0; j < batchSize; j++ { - _, err := tb.AddRecord(ctx.GetTableCtx(), records[j]) - require.NoError(b, err) - } - b.StartTimer() for j := 0; j < batchSize; j++ { // Remove record handle := kv.IntHandle(j) - err := tb.RemoveRecord(ctx.GetTableCtx(), handle, records[j]) + err := tb.RemoveRecord(se.GetTableCtx(), txn, handle, records[j]) if err != nil { b.Fatal(err) } @@ -140,7 +139,7 @@ func BenchmarkRemoveRecordInPipelinedDML(b *testing.B) { b.StopTimer() // Rollback the transaction to avoid interference between batches - ctx.RollbackTxn(context.Background()) + se.RollbackTxn(context.Background()) require.NoError(b, err) } @@ -157,7 +156,7 @@ func BenchmarkUpdateRecordInPipelinedDML(b *testing.B) { // Create the table _, err := tk.Session().Execute( context.Background(), - "CREATE TABLE IF NOT EXISTS test.t (a int primary key auto_increment, b varchar(255))", + "CREATE TABLE IF NOT EXISTS test.t (a int primary key clustered, b varchar(255))", ) require.NoError(b, err) tb, err := dom.InfoSchema().TableByName(context.Background(), model.NewCIStr("test"), model.NewCIStr("t")) @@ -175,35 +174,32 @@ func BenchmarkUpdateRecordInPipelinedDML(b *testing.B) { newData[j] = types.MakeDatums(j, "updated") } + // Add initial records + se := tk.Session() + for j := 0; j < batchSize; j++ { + tk.MustExec("INSERT INTO test.t VALUES (?, ?)", j, "test") + } + + touched := make([]bool, len(tb.Meta().Columns)) + touched[1] = true + + b.StopTimer() b.ResetTimer() for i := 0; i < b.N; i++ { // Reset environment for each batch - b.StopTimer() - - ctx := tk.Session() - vars := ctx.GetSessionVars() + vars := se.GetSessionVars() vars.BulkDMLEnabled = true vars.TxnCtx.EnableMDL = true vars.StmtCtx.InUpdateStmt = true require.Nil(b, sessiontxn.NewTxn(context.Background(), tk.Session())) - - txn, _ := ctx.Txn(true) + txn, _ := se.Txn(true) require.True(b, txn.IsPipelined()) - // Add initial records - for j := 0; j < batchSize; j++ { - _, err := tb.AddRecord(ctx.GetTableCtx(), records[j]) - require.NoError(b, err) - } - - touched := make([]bool, len(tb.Meta().Columns)) - touched[1] = true - b.StartTimer() for j := 0; j < batchSize; j++ { // Update record handle := kv.IntHandle(j) - err := tb.UpdateRecord(context.TODO(), ctx.GetTableCtx(), handle, records[j], newData[j], touched) + err := tb.UpdateRecord(se.GetTableCtx(), txn, handle, records[j], newData[j], touched, table.WithCtx(context.TODO())) if err != nil { b.Fatal(err) } @@ -211,7 +207,7 @@ func BenchmarkUpdateRecordInPipelinedDML(b *testing.B) { b.StopTimer() // Rollback the transaction to avoid interference between batches - ctx.RollbackTxn(context.Background()) + se.RollbackTxn(context.Background()) require.NoError(b, err) } diff --git a/pkg/table/tables/cache.go b/pkg/table/tables/cache.go index eb15c0b11f7f6..29a1187791f1f 100644 --- a/pkg/table/tables/cache.go +++ b/pkg/table/tables/cache.go @@ -239,38 +239,34 @@ func (c *cachedTable) updateLockForRead(ctx context.Context, handle StateRemote, const cachedTableSizeLimit = 64 * (1 << 20) // AddRecord implements the AddRecord method for the table.Table interface. -func (c *cachedTable) AddRecord(sctx table.MutateContext, r []types.Datum, opts ...table.AddRecordOption) (recordID kv.Handle, err error) { +func (c *cachedTable) AddRecord(sctx table.MutateContext, txn kv.Transaction, r []types.Datum, opts ...table.AddRecordOption) (recordID kv.Handle, err error) { if atomic.LoadInt64(&c.totalSize) > cachedTableSizeLimit { return nil, table.ErrOptOnCacheTable.GenWithStackByArgs("table too large") } txnCtxAddCachedTable(sctx, c.Meta().ID, c) - return c.TableCommon.AddRecord(sctx, r, opts...) + return c.TableCommon.AddRecord(sctx, txn, r, opts...) } func txnCtxAddCachedTable(sctx table.MutateContext, tid int64, handle *cachedTable) { - txnCtx := sctx.GetSessionVars().TxnCtx - if txnCtx.CachedTables == nil { - txnCtx.CachedTables = make(map[int64]any) - } - if _, ok := txnCtx.CachedTables[tid]; !ok { - txnCtx.CachedTables[tid] = handle + if s, ok := sctx.GetCachedTableSupport(); ok { + s.AddCachedTableHandleToTxn(tid, handle) } } // UpdateRecord implements table.Table -func (c *cachedTable) UpdateRecord(ctx context.Context, sctx table.MutateContext, h kv.Handle, oldData, newData []types.Datum, touched []bool) error { +func (c *cachedTable) UpdateRecord(ctx table.MutateContext, txn kv.Transaction, h kv.Handle, oldData, newData []types.Datum, touched []bool, opts ...table.UpdateRecordOption) error { // Prevent furthur writing when the table is already too large. if atomic.LoadInt64(&c.totalSize) > cachedTableSizeLimit { return table.ErrOptOnCacheTable.GenWithStackByArgs("table too large") } - txnCtxAddCachedTable(sctx, c.Meta().ID, c) - return c.TableCommon.UpdateRecord(ctx, sctx, h, oldData, newData, touched) + txnCtxAddCachedTable(ctx, c.Meta().ID, c) + return c.TableCommon.UpdateRecord(ctx, txn, h, oldData, newData, touched, opts...) } // RemoveRecord implements table.Table RemoveRecord interface. -func (c *cachedTable) RemoveRecord(sctx table.MutateContext, h kv.Handle, r []types.Datum) error { +func (c *cachedTable) RemoveRecord(sctx table.MutateContext, txn kv.Transaction, h kv.Handle, r []types.Datum) error { txnCtxAddCachedTable(sctx, c.Meta().ID, c) - return c.TableCommon.RemoveRecord(sctx, h, r) + return c.TableCommon.RemoveRecord(sctx, txn, h, r) } // TestMockRenewLeaseABA2 is used by test function TestRenewLeaseABAFailPoint. diff --git a/pkg/table/tables/index.go b/pkg/table/tables/index.go index 0f9eaf6ebddc3..bb2c6626f85db 100644 --- a/pkg/table/tables/index.go +++ b/pkg/table/tables/index.go @@ -158,17 +158,17 @@ out: // Create creates a new entry in the kvIndex data. // If the index is unique and there is an existing entry with the same key, // Create will return the existing entry's handle as the first return value, ErrKeyExists as the second return value. -func (c *index) Create(sctx table.MutateContext, txn kv.Transaction, indexedValue []types.Datum, h kv.Handle, handleRestoreData []types.Datum, opts ...table.CreateIdxOptFunc) (kv.Handle, error) { +func (c *index) Create(sctx table.MutateContext, txn kv.Transaction, indexedValue []types.Datum, h kv.Handle, handleRestoreData []types.Datum, opts ...table.CreateIdxOption) (kv.Handle, error) { + opt := table.NewCreateIdxOpt(opts...) + return c.create(sctx, txn, indexedValue, h, handleRestoreData, false, opt) +} + +func (c *index) create(sctx table.MutateContext, txn kv.Transaction, indexedValue []types.Datum, h kv.Handle, handleRestoreData []types.Datum, untouched bool, opt *table.CreateIdxOpt) (kv.Handle, error) { if c.Meta().Unique { txn.CacheTableInfo(c.phyTblID, c.tblInfo) } - var opt table.CreateIdxOpt - for _, fn := range opts { - fn(&opt) - } - indexedValues := c.getIndexedValue(indexedValue) - ctx := opt.Ctx + ctx := opt.Ctx() if ctx != nil { var r tracing.Region r, ctx = tracing.StartRegionEx(ctx, "index.Create") @@ -176,9 +176,8 @@ func (c *index) Create(sctx table.MutateContext, txn kv.Transaction, indexedValu } else { ctx = context.TODO() } - vars := sctx.GetSessionVars() writeBufs := sctx.GetMutateBuffers().GetWriteStmtBufs() - skipCheck := vars.StmtCtx.BatchCheck + skipCheck := opt.DupKeyCheck() == table.DupKeyCheckSkip evalCtx := sctx.GetExprCtx().GetEvalCtx() loc, ec := evalCtx.Location(), evalCtx.ErrCtx() for _, value := range indexedValues { @@ -192,7 +191,7 @@ func (c *index) Create(sctx table.MutateContext, txn kv.Transaction, indexedValu keyVer byte keyIsTempIdxKey bool ) - if !opt.FromBackFill { + if !opt.FromBackFill() { key, tempKey, keyVer = GenTempIdxKeyByState(c.idxInfo, key) if keyVer == TempIndexKeyTypeBackfill || keyVer == TempIndexKeyTypeDelete { key, tempKey = tempKey, nil @@ -203,14 +202,10 @@ func (c *index) Create(sctx table.MutateContext, txn kv.Transaction, indexedValu if txn.IsPipelined() { // For pipelined DML, disable the untouched optimization to avoid extra RPCs for MemBuffer.Get(). // TODO: optimize this. - opt.Untouched = false + untouched = false } - if opt.Untouched { - txn, err1 := sctx.Txn(true) - if err1 != nil { - return nil, err1 - } + if untouched { // If the index kv was untouched(unchanged), and the key/value already exists in mem-buffer, // should not overwrite the key with un-commit flag. // So if the key exists, just do nothing and return. @@ -228,7 +223,7 @@ func (c *index) Create(sctx table.MutateContext, txn kv.Transaction, indexedValu return nil, err } if keyFlags.HasPresumeKeyNotExists() { - opt.Untouched = false + untouched = false } } } @@ -240,17 +235,17 @@ func (c *index) Create(sctx table.MutateContext, txn kv.Transaction, indexedValu c.needRestoredData = NeedRestoredData(c.idxInfo.Columns, c.tblInfo.Columns) }) idxVal, err := tablecodec.GenIndexValuePortal(loc, c.tblInfo, c.idxInfo, - c.needRestoredData, distinct, opt.Untouched, value, h, c.phyTblID, handleRestoreData, nil) + c.needRestoredData, distinct, untouched, value, h, c.phyTblID, handleRestoreData, nil) err = ec.HandleError(err) if err != nil { return nil, err } - opt.IgnoreAssertion = opt.IgnoreAssertion || c.idxInfo.State != model.StatePublic + ignoreAssertion := opt.IgnoreAssertion() || c.idxInfo.State != model.StatePublic - if !distinct || skipCheck || opt.Untouched { + if !distinct || skipCheck || untouched { val := idxVal - if opt.Untouched && (keyIsTempIdxKey || len(tempKey) > 0) { + if untouched && (keyIsTempIdxKey || len(tempKey) > 0) { // Untouched key-values never occur in the storage and the temp index is not public. // It is unnecessary to write the untouched temp index key-values. continue @@ -271,8 +266,8 @@ func (c *index) Create(sctx table.MutateContext, txn kv.Transaction, indexedValu return nil, err } } - if !opt.IgnoreAssertion && (!opt.Untouched) { - if sctx.GetSessionVars().LazyCheckKeyNotExists() && !txn.IsPessimistic() { + if !ignoreAssertion && !untouched { + if opt.DupKeyCheck() == table.DupKeyCheckLazy && !txn.IsPessimistic() { err = txn.SetAssertion(key, kv.SetAssertUnknown) } else { err = txn.SetAssertion(key, kv.SetAssertNotExist) @@ -288,7 +283,7 @@ func (c *index) Create(sctx table.MutateContext, txn kv.Transaction, indexedValu if c.tblInfo.TempTableType != model.TempTableNone { // Always check key for temporary table because it does not write to TiKV value, err = txn.Get(ctx, key) - } else if (txn.IsPipelined() || sctx.GetSessionVars().LazyCheckKeyNotExists()) && !keyIsTempIdxKey { + } else if opt.DupKeyCheck() == table.DupKeyCheckLazy && !keyIsTempIdxKey { // For temp index keys, we can't get the temp value from memory buffer, even if the lazy check is enabled. // Otherwise, it may cause the temp index value to be overwritten, leading to data inconsistency. value, err = txn.GetMemBuffer().GetLocal(ctx, key) @@ -308,7 +303,7 @@ func (c *index) Create(sctx table.MutateContext, txn kv.Transaction, indexedValu // The index key value is not found or deleted. if err != nil || len(value) == 0 || (!tempIdxVal.IsEmpty() && tempIdxVal.Current().Delete) { val := idxVal - lazyCheck := (txn.IsPipelined() || sctx.GetSessionVars().LazyCheckKeyNotExists()) && err != nil + lazyCheck := opt.DupKeyCheck() == table.DupKeyCheckLazy && err != nil if keyIsTempIdxKey { tempVal := tablecodec.TempIndexValueElem{Value: idxVal, KeyVer: keyVer, Distinct: true} val = tempVal.Encode(value) @@ -323,8 +318,7 @@ func (c *index) Create(sctx table.MutateContext, txn kv.Transaction, indexedValu if needPresumeNotExists { flags = []kv.FlagsOp{kv.SetPresumeKeyNotExists} } - if !vars.ConstraintCheckInPlacePessimistic && vars.TxnCtx.IsPessimistic && vars.InTxn() && - !vars.InRestrictedSQL && vars.ConnectionID > 0 { + if opt.PessimisticLazyDupKeyCheck() == table.DupKeyCheckInPrewrite && txn.IsPessimistic() { flags = append(flags, kv.SetNeedConstraintCheckInPrewrite) } err = txn.GetMemBuffer().SetWithFlags(key, val, flags...) @@ -346,7 +340,7 @@ func (c *index) Create(sctx table.MutateContext, txn kv.Transaction, indexedValu return nil, err } } - if opt.IgnoreAssertion { + if ignoreAssertion { continue } if lazyCheck && !txn.IsPessimistic() { diff --git a/pkg/table/tables/index_test.go b/pkg/table/tables/index_test.go index 6f52b1d025813..7819f6805dfa6 100644 --- a/pkg/table/tables/index_test.go +++ b/pkg/table/tables/index_test.go @@ -18,6 +18,7 @@ import ( "context" "strings" "testing" + "time" "github.com/pingcap/tidb/pkg/ddl" "github.com/pingcap/tidb/pkg/kv" @@ -189,7 +190,7 @@ func TestGenIndexValueFromIndex(t *testing.T) { SessionOptions: sessionOpts, }) require.NoError(t, err) - encoder.SessionCtx.GetSessionVars().RowEncoder.Enable = true + encoder.SessionCtx.GetTableCtx().GetRowEncodingConfig().RowEncoder.Enable = true data1 := []types.Datum{ types.NewIntDatum(1), @@ -281,3 +282,72 @@ func TestGenIndexValueWithLargePaddingSize(t *testing.T) { require.False(t, handle.IsInt()) require.Equal(t, commonHandle.Encoded(), handle.Encoded()) } + +// See issue: https://github.com/pingcap/tidb/issues/55313 +func TestTableOperationsInDDLDropIndexWriteOnly(t *testing.T) { + store, do := testkit.CreateMockStoreAndDomain(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t(a int, b int, key a(a), key(b))") + tk.MustExec("insert into t values(1, 1), (2, 2), (3, 3)") + // use MDL to block drop index DDL in `StateWriteOnly` + tk.MustExec("set @@global.tidb_enable_metadata_lock='ON'") + tk.MustExec("begin pessimistic") + tk.MustQuery("select * from t order by a asc").Check(testkit.Rows("1 1", "2 2", "3 3")) + tk2 := testkit.NewTestKit(t, store) + tk2.MustExec("use test") + + ch := make(chan struct{}) + go func() { + defer close(ch) + // run `DROP INDEX` in background, because a transaction is started, + // the DDL will hang in state `StateWriteOnly` until all transactions are committed or rollback. + tk3 := testkit.NewTestKit(t, store) + tk3.MustExec("use test") + tk3.MustExec("alter table t drop index a") + }() + + defer func() { + // after test case, clear transactions and wait background goroutine exit. + tk.MustExec("rollback") + tk2.MustExec("rollback") + select { + case <-ch: + case <-time.After(time.Minute): + require.FailNow(t, "timeout") + } + }() + + start := time.Now() + for { + time.Sleep(20 * time.Millisecond) + // wait the DDL state change to `StateWriteOnly` + tblInfo, err := do.InfoSchema().TableInfoByName(model.NewCIStr("test"), model.NewCIStr("t")) + require.NoError(t, err) + if state := tblInfo.Indices[0].State; state != model.StatePublic { + require.Equal(t, model.StateWriteOnly, state) + break + } + if time.Since(start) > time.Minute { + require.FailNow(t, "timeout") + } + } + + // tk2 is used to do some operations when DDL is in state `WriteOnly`. + // In this state, the dropping index is still written. + // We set `@@tidb_txn_assertion_level='STRICT'` to detect any inconsistency. + tk2.MustExec("set @@tidb_txn_assertion_level='STRICT'") + tk2.MustExec("begin pessimistic") + // insert new values. + tk2.MustExec("insert into t values(4, 4), (5, 5), (6, 6)") + // delete some rows: 1 in storage, 1 in memory buffer. + tk2.MustExec("delete from t where a in (1, 4)") + // update some rows: 1 in storage, 1 in memory buffer. + tk2.MustExec("update t set a = a + 10 where a in (2, 6)") + // should be tested in `StateWriteOnly` state. + tblInfo, err := tk2.Session().GetInfoSchema().TableInfoByName(model.NewCIStr("test"), model.NewCIStr("t")) + require.NoError(t, err) + require.Equal(t, model.StateWriteOnly, tblInfo.Indices[0].State) + // commit should success without any assertion fail. + tk2.MustExec("commit") +} diff --git a/pkg/table/tables/partition.go b/pkg/table/tables/partition.go index 3f94e2b9379ee..87a759d63d9eb 100644 --- a/pkg/table/tables/partition.go +++ b/pkg/table/tables/partition.go @@ -16,7 +16,7 @@ package tables import ( "bytes" - "context" + stdctx "context" stderr "errors" "fmt" "hash/crc32" @@ -1491,6 +1491,11 @@ func (t *partitionedTable) locateHashPartition(ctx expression.EvalContext, partE // GetPartition returns a Table, which is actually a partition. func (t *partitionedTable) GetPartition(pid int64) table.PhysicalTable { + return t.getPartition(pid) +} + +// getPartition returns a Table, which is actually a partition. +func (t *partitionedTable) getPartition(pid int64) *partition { // Attention, can't simply use `return t.partitions[pid]` here. // Because A nil of type *partition is a kind of `table.PhysicalTable` part, ok := t.partitions[pid] @@ -1563,24 +1568,31 @@ func (t *partitionTableWithGivenSets) GetPartitionByRow(ctx expression.EvalConte // checkConstraintForExchangePartition is only used for ExchangePartition by partitionTable during write only state. // It check if rowData inserted or updated violate checkConstraints of non-partitionTable. -func checkConstraintForExchangePartition(sctx table.MutateContext, row []types.Datum, partID, ntID int64) error { +func checkConstraintForExchangePartition(ctx table.MutateContext, row []types.Datum, partID, ntID int64) error { + support, ok := ctx.GetExchangePartitionDMLSupport() + if !ok { + return errors.New("ctx does not support operations when exchanging a partition") + } + type InfoSchema interface { - TableByID(id int64) (val table.Table, ok bool) + TableByID(ctx stdctx.Context, id int64) (val table.Table, ok bool) } - is, ok := sctx.GetDomainInfoSchema().(InfoSchema) + + is, ok := support.GetInfoSchemaToCheckExchangeConstraint().(InfoSchema) if !ok { return errors.Errorf("exchange partition process assert inforSchema failed") } - nt, tableFound := is.TableByID(ntID) + gCtx := stdctx.Background() + nt, tableFound := is.TableByID(gCtx, ntID) if !tableFound { // Now partID is nt tableID. - nt, tableFound = is.TableByID(partID) + nt, tableFound = is.TableByID(gCtx, partID) if !tableFound { return errors.Errorf("exchange partition process table by id failed") } } - evalCtx := sctx.GetExprCtx().GetEvalCtx() + evalCtx := ctx.GetExprCtx().GetEvalCtx() if err := table.CheckRowConstraintWithDatum(evalCtx, nt.WritableConstraint(), row); err != nil { // TODO: make error include ExchangePartition info. return err @@ -1589,11 +1601,12 @@ func checkConstraintForExchangePartition(sctx table.MutateContext, row []types.D } // AddRecord implements the AddRecord method for the table.Table interface. -func (t *partitionedTable) AddRecord(ctx table.MutateContext, r []types.Datum, opts ...table.AddRecordOption) (recordID kv.Handle, err error) { - return partitionedTableAddRecord(ctx, t, r, nil, opts) +func (t *partitionedTable) AddRecord(ctx table.MutateContext, txn kv.Transaction, r []types.Datum, opts ...table.AddRecordOption) (recordID kv.Handle, err error) { + return partitionedTableAddRecord(ctx, txn, t, r, nil, opts) } -func partitionedTableAddRecord(ctx table.MutateContext, t *partitionedTable, r []types.Datum, partitionSelection map[int64]struct{}, opts []table.AddRecordOption) (recordID kv.Handle, err error) { +func partitionedTableAddRecord(ctx table.MutateContext, txn kv.Transaction, t *partitionedTable, r []types.Datum, partitionSelection map[int64]struct{}, opts []table.AddRecordOption) (recordID kv.Handle, err error) { + opt := table.NewAddRecordOpt(opts...) pid, err := t.locatePartition(ctx.GetExprCtx().GetEvalCtx(), r) if err != nil { return nil, errors.Trace(err) @@ -1615,8 +1628,8 @@ func partitionedTableAddRecord(ctx table.MutateContext, t *partitionedTable, r [ return nil, errors.WithStack(err) } } - tbl := t.GetPartition(pid) - recordID, err = tbl.AddRecord(ctx, r, opts...) + tbl := t.getPartition(pid) + recordID, err = tbl.addRecord(ctx, txn, r, opt) if err != nil { return } @@ -1629,8 +1642,8 @@ func partitionedTableAddRecord(ctx table.MutateContext, t *partitionedTable, r [ if err != nil { return nil, errors.Trace(err) } - tbl = t.GetPartition(pid) - recordID, err = tbl.AddRecord(ctx, r, opts...) + tbl = t.getPartition(pid) + recordID, err = tbl.addRecord(ctx, txn, r, opt) if err != nil { return } @@ -1658,8 +1671,8 @@ func NewPartitionTableWithGivenSets(tbl table.PartitionedTable, partitions map[i } // AddRecord implements the AddRecord method for the table.Table interface. -func (t *partitionTableWithGivenSets) AddRecord(ctx table.MutateContext, r []types.Datum, opts ...table.AddRecordOption) (recordID kv.Handle, err error) { - return partitionedTableAddRecord(ctx, t.partitionedTable, r, t.givenSetPartitions, opts) +func (t *partitionTableWithGivenSets) AddRecord(ctx table.MutateContext, txn kv.Transaction, r []types.Datum, opts ...table.AddRecordOption) (recordID kv.Handle, err error) { + return partitionedTableAddRecord(ctx, txn, t.partitionedTable, r, t.givenSetPartitions, opts) } func (t *partitionTableWithGivenSets) GetAllPartitionIDs() []int64 { @@ -1671,7 +1684,7 @@ func (t *partitionTableWithGivenSets) GetAllPartitionIDs() []int64 { } // RemoveRecord implements table.Table RemoveRecord interface. -func (t *partitionedTable) RemoveRecord(ctx table.MutateContext, h kv.Handle, r []types.Datum) error { +func (t *partitionedTable) RemoveRecord(ctx table.MutateContext, txn kv.Transaction, h kv.Handle, r []types.Datum) error { ectx := ctx.GetExprCtx() pid, err := t.locatePartition(ectx.GetEvalCtx(), r) if err != nil { @@ -1679,7 +1692,7 @@ func (t *partitionedTable) RemoveRecord(ctx table.MutateContext, h kv.Handle, r } tbl := t.GetPartition(pid) - err = tbl.RemoveRecord(ctx, h, r) + err = tbl.RemoveRecord(ctx, txn, h, r) if err != nil { return errors.Trace(err) } @@ -1690,7 +1703,7 @@ func (t *partitionedTable) RemoveRecord(ctx table.MutateContext, h kv.Handle, r return errors.Trace(err) } tbl = t.GetPartition(pid) - err = tbl.RemoveRecord(ctx, h, r) + err = tbl.RemoveRecord(ctx, txn, h, r) if err != nil { return errors.Trace(err) } @@ -1712,15 +1725,16 @@ func (t *partitionedTable) GetAllPartitionIDs() []int64 { // UpdateRecord implements table.Table UpdateRecord interface. // `touched` means which columns are really modified, used for secondary indices. // Length of `oldData` and `newData` equals to length of `t.WritableCols()`. -func (t *partitionedTable) UpdateRecord(ctx context.Context, sctx table.MutateContext, h kv.Handle, currData, newData []types.Datum, touched []bool) error { - return partitionedTableUpdateRecord(ctx, sctx, t, h, currData, newData, touched, nil) +func (t *partitionedTable) UpdateRecord(ctx table.MutateContext, txn kv.Transaction, h kv.Handle, currData, newData []types.Datum, touched []bool, opts ...table.UpdateRecordOption) error { + return partitionedTableUpdateRecord(ctx, txn, t, h, currData, newData, touched, nil, opts...) } -func (t *partitionTableWithGivenSets) UpdateRecord(ctx context.Context, sctx table.MutateContext, h kv.Handle, currData, newData []types.Datum, touched []bool) error { - return partitionedTableUpdateRecord(ctx, sctx, t.partitionedTable, h, currData, newData, touched, t.givenSetPartitions) +func (t *partitionTableWithGivenSets) UpdateRecord(ctx table.MutateContext, txn kv.Transaction, h kv.Handle, currData, newData []types.Datum, touched []bool, opts ...table.UpdateRecordOption) error { + return partitionedTableUpdateRecord(ctx, txn, t.partitionedTable, h, currData, newData, touched, t.givenSetPartitions, opts...) } -func partitionedTableUpdateRecord(gctx context.Context, ctx table.MutateContext, t *partitionedTable, h kv.Handle, currData, newData []types.Datum, touched []bool, partitionSelection map[int64]struct{}) error { +func partitionedTableUpdateRecord(ctx table.MutateContext, txn kv.Transaction, t *partitionedTable, h kv.Handle, currData, newData []types.Datum, touched []bool, partitionSelection map[int64]struct{}, opts ...table.UpdateRecordOption) error { + opt := table.NewUpdateRecordOpt(opts...) ectx := ctx.GetExprCtx() from, err := t.locatePartition(ectx.GetEvalCtx(), currData) if err != nil { @@ -1751,10 +1765,6 @@ func partitionedTableUpdateRecord(gctx context.Context, ctx table.MutateContext, } } - txn, err := ctx.Txn(true) - if err != nil { - return errors.Trace(err) - } memBuffer := txn.GetMemBuffer() sh := memBuffer.Staging() defer memBuffer.Cleanup(sh) @@ -1762,12 +1772,12 @@ func partitionedTableUpdateRecord(gctx context.Context, ctx table.MutateContext, // The old and new data locate in different partitions. // Remove record from old partition and add record to new partition. if from != to { - err = t.GetPartition(from).RemoveRecord(ctx, h, currData) + err = t.GetPartition(from).RemoveRecord(ctx, txn, h, currData) if err != nil { return errors.Trace(err) } - _, err = t.GetPartition(to).AddRecord(ctx, newData) + _, err = t.getPartition(to).addRecord(ctx, txn, newData, opt.GetAddRecordOpt()) if err != nil { return errors.Trace(err) } @@ -1789,7 +1799,7 @@ func partitionedTableUpdateRecord(gctx context.Context, ctx table.MutateContext, } if newTo == newFrom && newTo != 0 { // Update needs to be done in StateDeleteOnly as well - err = t.GetPartition(newTo).UpdateRecord(gctx, ctx, h, currData, newData, touched) + err = t.getPartition(newTo).updateRecord(ctx, txn, h, currData, newData, touched, opt) if err != nil { return errors.Trace(err) } @@ -1798,14 +1808,14 @@ func partitionedTableUpdateRecord(gctx context.Context, ctx table.MutateContext, } if newFrom != 0 { - err = t.GetPartition(newFrom).RemoveRecord(ctx, h, currData) + err = t.getPartition(newFrom).RemoveRecord(ctx, txn, h, currData) // TODO: Can this happen? When the data is not yet backfilled? if err != nil { return errors.Trace(err) } } if newTo != 0 && t.Meta().GetPartitionInfo().DDLState != model.StateDeleteOnly { - _, err = t.GetPartition(newTo).AddRecord(ctx, newData) + _, err = t.getPartition(newTo).addRecord(ctx, txn, newData, opt.GetAddRecordOpt()) if err != nil { return errors.Trace(err) } @@ -1813,8 +1823,8 @@ func partitionedTableUpdateRecord(gctx context.Context, ctx table.MutateContext, memBuffer.Release(sh) return nil } - tbl := t.GetPartition(to) - err = tbl.UpdateRecord(gctx, ctx, h, currData, newData, touched) + tbl := t.getPartition(to) + err = tbl.updateRecord(ctx, txn, h, currData, newData, touched, opt) if err != nil { return errors.Trace(err) } @@ -1830,11 +1840,11 @@ func partitionedTableUpdateRecord(gctx context.Context, ctx table.MutateContext, return errors.Trace(err) } if newTo == newFrom { - tbl = t.GetPartition(newTo) + tbl = t.getPartition(newTo) if t.Meta().Partition.DDLState == model.StateDeleteOnly { - err = tbl.RemoveRecord(ctx, h, currData) + err = tbl.RemoveRecord(ctx, txn, h, currData) } else { - err = tbl.UpdateRecord(gctx, ctx, h, currData, newData, touched) + err = tbl.updateRecord(ctx, txn, h, currData, newData, touched, opt) } if err != nil { return errors.Trace(err) @@ -1842,14 +1852,14 @@ func partitionedTableUpdateRecord(gctx context.Context, ctx table.MutateContext, memBuffer.Release(sh) return nil } - tbl = t.GetPartition(newFrom) - err = tbl.RemoveRecord(ctx, h, currData) + tbl = t.getPartition(newFrom) + err = tbl.RemoveRecord(ctx, txn, h, currData) if err != nil { return errors.Trace(err) } if t.Meta().GetPartitionInfo().DDLState != model.StateDeleteOnly { - tbl = t.GetPartition(newTo) - _, err = tbl.AddRecord(ctx, newData) + tbl = t.getPartition(newTo) + _, err = tbl.addRecord(ctx, txn, newData, opt.GetAddRecordOpt()) if err != nil { return errors.Trace(err) } diff --git a/pkg/table/tables/tables.go b/pkg/table/tables/tables.go index fdb5ae7b413d8..623e7ef729b9f 100644 --- a/pkg/table/tables/tables.go +++ b/pkg/table/tables/tables.go @@ -49,6 +49,7 @@ import ( "github.com/pingcap/tidb/pkg/util/codec" "github.com/pingcap/tidb/pkg/util/collate" "github.com/pingcap/tidb/pkg/util/generatedexpr" + "github.com/pingcap/tidb/pkg/util/intest" "github.com/pingcap/tidb/pkg/util/logutil" "github.com/pingcap/tidb/pkg/util/stringutil" "github.com/pingcap/tidb/pkg/util/tableutil" @@ -272,11 +273,25 @@ func initTableIndices(t *TableCommon) error { // Use partition ID for index, because TableCommon may be table or partition. idx := NewIndex(t.physicalTableID, tblInfo, idxInfo) + intest.AssertFunc(func() bool { + // `TableCommon.indices` is type of `[]table.Index` to implement interface method `Table.Indices`. + // However, we have an assumption that the specific type of each element in it should always be `*index`. + // We have this assumption because some codes access the inner method of `*index`, + // and they use `asIndex` to cast `table.Index` to `*index`. + _, ok := idx.(*index) + intest.Assert(ok, "index should be type of `*index`") + return true + }) t.indices = append(t.indices, idx) } return nil } +// asIndex casts a table.Index to *index which is the actual type of index in TableCommon. +func asIndex(idx table.Index) *index { + return idx.(*index) +} + func initTableCommonWithIndices(t *TableCommon, tblInfo *model.TableInfo, physicalTableID int64, cols []*table.Column, allocs autoid.Allocators, constraints []*table.Constraint) error { initTableCommon(t, tblInfo, physicalTableID, cols, allocs, constraints) return initTableIndices(t) @@ -425,19 +440,19 @@ func (t *TableCommon) shouldAssert(level variable.AssertionLevel) bool { // UpdateRecord implements table.Table UpdateRecord interface. // `touched` means which columns are really modified, used for secondary indices. // Length of `oldData` and `newData` equals to length of `t.WritableCols()`. -func (t *TableCommon) UpdateRecord(ctx context.Context, sctx table.MutateContext, h kv.Handle, oldData, newData []types.Datum, touched []bool) error { - txn, err := sctx.Txn(true) - if err != nil { - return err - } +func (t *TableCommon) UpdateRecord(ctx table.MutateContext, txn kv.Transaction, h kv.Handle, oldData, newData []types.Datum, touched []bool, opts ...table.UpdateRecordOption) error { + opt := table.NewUpdateRecordOpt(opts...) + return t.updateRecord(ctx, txn, h, oldData, newData, touched, opt) +} +func (t *TableCommon) updateRecord(sctx table.MutateContext, txn kv.Transaction, h kv.Handle, oldData, newData []types.Datum, touched []bool, opt *table.UpdateRecordOpt) error { memBuffer := txn.GetMemBuffer() sh := memBuffer.Staging() defer memBuffer.Cleanup(sh) if m := t.Meta(); m.TempTableType != model.TempTableNone { - if tmpTable := addTemporaryTable(sctx, m); tmpTable != nil { - if err := checkTempTableSize(sctx, tmpTable, m); err != nil { + if tmpTable, sizeLimit, ok := addTemporaryTable(sctx, m); ok { + if err := checkTempTableSize(tmpTable, sizeLimit); err != nil { return err } defer handleTempTableSize(tmpTable, txn.Size(), txn) @@ -463,6 +478,7 @@ func (t *TableCommon) UpdateRecord(ctx context.Context, sctx table.MutateContext for _, col := range t.Columns { var value types.Datum + var err error if col.State == model.StateDeleteOnly || col.State == model.StateDeleteReorganization { if col.ChangeStateInfo != nil { // TODO: Check overflow or ignoreTruncate. @@ -498,7 +514,7 @@ func (t *TableCommon) UpdateRecord(ctx context.Context, sctx table.MutateContext encodeRowBuffer.AddColVal(col.ID, value) } checkRowBuffer.AddColVal(value) - if shouldWriteBinlog && !t.canSkipUpdateBinlog(col, value) { + if shouldWriteBinlog && !t.canSkipUpdateBinlog(col) { binlogColIDs = append(binlogColIDs, col.ID) binlogOldRow = append(binlogOldRow, oldData[col.Offset]) binlogNewRow = append(binlogNewRow, value) @@ -507,12 +523,12 @@ func (t *TableCommon) UpdateRecord(ctx context.Context, sctx table.MutateContext // check data constraint evalCtx := sctx.GetExprCtx().GetEvalCtx() if constraints := t.WritableConstraint(); len(constraints) > 0 { - if err = table.CheckRowConstraint(evalCtx, constraints, checkRowBuffer.GetRowToCheck()); err != nil { + if err := table.CheckRowConstraint(evalCtx, constraints, checkRowBuffer.GetRowToCheck()); err != nil { return err } } // rebuild index - err = t.rebuildIndices(sctx, txn, h, touched, oldData, newData, table.WithCtx(ctx)) + err := t.rebuildUpdateRecordIndices(sctx, txn, h, touched, oldData, newData, opt) if err != nil { return err } @@ -587,7 +603,11 @@ func (t *TableCommon) UpdateRecord(ctx context.Context, sctx table.MutateContext return nil } -func (t *TableCommon) rebuildIndices(ctx table.MutateContext, txn kv.Transaction, h kv.Handle, touched []bool, oldData []types.Datum, newData []types.Datum, opts ...table.CreateIdxOptFunc) error { +func (t *TableCommon) rebuildUpdateRecordIndices( + ctx table.MutateContext, txn kv.Transaction, + h kv.Handle, touched []bool, oldData []types.Datum, newData []types.Datum, + opt *table.UpdateRecordOpt, +) error { for _, idx := range t.deletableIndices() { if t.meta.IsCommonHandle && idx.Meta().Primary { continue @@ -600,12 +620,13 @@ func (t *TableCommon) rebuildIndices(ctx table.MutateContext, txn kv.Transaction if err != nil { return err } - if err = t.removeRowIndex(ctx, h, oldVs, idx, txn); err != nil { + if err = idx.Delete(ctx, txn, oldVs, h); err != nil { return err } break } } + createIdxOpt := opt.GetCreateIdxOpt() for _, idx := range t.Indices() { if !IsIndexWritable(idx) { continue @@ -621,20 +642,14 @@ func (t *TableCommon) rebuildIndices(ctx table.MutateContext, txn kv.Transaction untouched = false break } - // If txn is auto commit and index is untouched, no need to write index value. - // If InHandleForeignKeyTrigger or ForeignKeyTriggerCtx.HasFKCascades is true indicate we may have - // foreign key cascade need to handle later, then we still need to write index value, - // otherwise, the later foreign cascade executor may see data-index inconsistency in txn-mem-buffer. - sessVars := ctx.GetSessionVars() - if untouched && !sessVars.InTxn() && - !sessVars.StmtCtx.InHandleForeignKeyTrigger && !sessVars.StmtCtx.ForeignKeyTriggerCtx.HasFKCascades { + if untouched && opt.SkipWriteUntouchedIndices() { continue } newVs, err := idx.FetchValues(newData, nil) if err != nil { return err } - if err := t.buildIndexForRow(ctx, h, newVs, newData, idx, txn, untouched, opts...); err != nil { + if err := t.buildIndexForRow(ctx, h, newVs, newData, asIndex(idx), txn, untouched, createIdxOpt); err != nil { return err } } @@ -653,22 +668,6 @@ func FindPrimaryIndex(tblInfo *model.TableInfo) *model.IndexInfo { return pkIdx } -// CommonAddRecordCtx is used in `AddRecord` to avoid memory malloc for some temp slices. -// This is useful in lightning parse row data to key-values pairs. This can gain upto 5% performance -// improvement in lightning's local mode. -type CommonAddRecordCtx struct { - colIDs []int64 - row []types.Datum -} - -// commonAddRecordKey is used as key in `sessionctx.Context.Value(key)` -type commonAddRecordKey struct{} - -// String implement `stringer.String` for CommonAddRecordKey -func (c commonAddRecordKey) String() string { - return "_common_add_record_context_key" -} - // TryGetCommonPkColumnIds get the IDs of primary key column if the table has common handle. func TryGetCommonPkColumnIds(tbl *model.TableInfo) []int64 { if !tbl.IsCommonHandle { @@ -711,51 +710,38 @@ func TryGetCommonPkColumns(tbl table.Table) []*table.Column { return pkCols } -func addTemporaryTable(sctx table.MutateContext, tblInfo *model.TableInfo) tableutil.TempTable { - tempTable := sctx.TxnRecordTempTable(tblInfo) - tempTable.SetModified(true) - return tempTable +func addTemporaryTable(sctx table.MutateContext, tblInfo *model.TableInfo) (tbctx.TemporaryTableHandler, int64, bool) { + if s, ok := sctx.GetTemporaryTableSupport(); ok { + if h, ok := s.AddTemporaryTableToTxn(tblInfo); ok { + return h, s.GetTemporaryTableSizeLimit(), ok + } + } + return tbctx.TemporaryTableHandler{}, 0, false } // The size of a temporary table is calculated by accumulating the transaction size delta. -func handleTempTableSize(t tableutil.TempTable, txnSizeBefore int, txn kv.Transaction) { - txnSizeNow := txn.Size() - delta := txnSizeNow - txnSizeBefore - - oldSize := t.GetSize() - newSize := oldSize + int64(delta) - t.SetSize(newSize) +func handleTempTableSize(t tbctx.TemporaryTableHandler, txnSizeBefore int, txn kv.Transaction) { + t.UpdateTxnDeltaSize(txn.Size() - txnSizeBefore) } -func checkTempTableSize(ctx table.MutateContext, tmpTable tableutil.TempTable, tblInfo *model.TableInfo) error { - tmpTableSize := tmpTable.GetSize() - if tempTableData := ctx.GetSessionVars().TemporaryTableData; tempTableData != nil { - tmpTableSize += tempTableData.GetTableSize(tblInfo.ID) +func checkTempTableSize(tmpTable tbctx.TemporaryTableHandler, sizeLimit int64) error { + if tmpTable.GetCommittedSize()+tmpTable.GetDirtySize() > sizeLimit { + return table.ErrTempTableFull.GenWithStackByArgs(tmpTable.Meta().Name.O) } - - if tmpTableSize > ctx.GetSessionVars().TMPTableSize { - return table.ErrTempTableFull.GenWithStackByArgs(tblInfo.Name.O) - } - return nil } // AddRecord implements table.Table AddRecord interface. -func (t *TableCommon) AddRecord(sctx table.MutateContext, r []types.Datum, opts ...table.AddRecordOption) (recordID kv.Handle, err error) { - txn, err := sctx.Txn(true) - if err != nil { - return nil, err - } - +func (t *TableCommon) AddRecord(sctx table.MutateContext, txn kv.Transaction, r []types.Datum, opts ...table.AddRecordOption) (recordID kv.Handle, err error) { // TODO: optimize the allocation (and calculation) of opt. - var opt table.AddRecordOpt - for _, fn := range opts { - fn.ApplyOn(&opt) - } + opt := table.NewAddRecordOpt(opts...) + return t.addRecord(sctx, txn, r, opt) +} +func (t *TableCommon) addRecord(sctx table.MutateContext, txn kv.Transaction, r []types.Datum, opt *table.AddRecordOpt) (recordID kv.Handle, err error) { if m := t.Meta(); m.TempTableType != model.TempTableNone { - if tmpTable := addTemporaryTable(sctx, m); tmpTable != nil { - if err := checkTempTableSize(sctx, tmpTable, m); err != nil { + if tmpTable, sizeLimit, ok := addTemporaryTable(sctx, m); ok { + if err = checkTempTableSize(tmpTable, sizeLimit); err != nil { return nil, err } defer handleTempTableSize(tmpTable, txn.Size(), txn) @@ -763,8 +749,7 @@ func (t *TableCommon) AddRecord(sctx table.MutateContext, r []types.Datum, opts } var ctx context.Context - if opt.Ctx != nil { - ctx = opt.Ctx + if ctx = opt.Ctx(); ctx != nil { var r tracing.Region r, ctx = tracing.StartRegionEx(ctx, "table.AddRecord") defer r.End() @@ -780,7 +765,7 @@ func (t *TableCommon) AddRecord(sctx table.MutateContext, r []types.Datum, opts // opt.IsUpdate is a flag for update. // If handle ID is changed when update, update will remove the old record first, and then call `AddRecord` to add a new record. // Currently, only insert can set _tidb_rowid, update can not update _tidb_rowid. - if len(r) > len(cols) && !opt.IsUpdate { + if len(r) > len(cols) && !opt.IsUpdate() { // The last value is _tidb_rowid. recordID = kv.IntHandle(r[len(r)-1].GetInt64()) hasRecordID = true @@ -811,14 +796,14 @@ func (t *TableCommon) AddRecord(sctx table.MutateContext, r []types.Datum, opts } } if !hasRecordID { - if opt.ReserveAutoID > 0 { + if reserveAutoID := opt.ReserveAutoID(); reserveAutoID > 0 { // Reserve a batch of auto ID in the statement context. // The reserved ID could be used in the future within this statement, by the // following AddRecord() operation. // Make the IDs continuous benefit for the performance of TiKV. if reserved, ok := sctx.GetReservedRowIDAlloc(); ok { var baseRowID, maxRowID int64 - if baseRowID, maxRowID, err = AllocHandleIDs(ctx, sctx, t, uint64(opt.ReserveAutoID)); err != nil { + if baseRowID, maxRowID, err = AllocHandleIDs(ctx, sctx, t, uint64(reserveAutoID)); err != nil { return nil, err } reserved.Reset(baseRowID, maxRowID) @@ -840,7 +825,6 @@ func (t *TableCommon) AddRecord(sctx table.MutateContext, r []types.Datum, opts sh := memBuffer.Staging() defer memBuffer.Cleanup(sh) - sessVars := sctx.GetSessionVars() for _, col := range t.Columns { var value types.Datum if col.State == model.StateDeleteOnly || col.State == model.StateDeleteReorganization { @@ -869,7 +853,7 @@ func (t *TableCommon) AddRecord(sctx table.MutateContext, r []types.Datum, opts // because `col.State != model.StatePublic` is true here, if col.ChangeStateInfo is not nil, the col should // be handle by the previous if-block. - if opt.IsUpdate { + if opt.IsUpdate() { // If `AddRecord` is called by an update, the default value should be handled the update. value = r[col.Offset] } else { @@ -898,11 +882,11 @@ func (t *TableCommon) AddRecord(sctx table.MutateContext, r []types.Datum, opts } key := t.RecordKey(recordID) var setPresume bool - if !sctx.GetSessionVars().StmtCtx.BatchCheck { + if opt.DupKeyCheck() != table.DupKeyCheckSkip { if t.meta.TempTableType != model.TempTableNone { // Always check key for temporary table because it does not write to TiKV _, err = txn.Get(ctx, key) - } else if sctx.GetSessionVars().LazyCheckKeyNotExists() || txn.IsPipelined() { + } else if opt.DupKeyCheck() == table.DupKeyCheckLazy { var v []byte v, err = txn.GetMemBuffer().GetLocal(ctx, key) if err != nil { @@ -925,8 +909,7 @@ func (t *TableCommon) AddRecord(sctx table.MutateContext, r []types.Datum, opts var flags []kv.FlagsOp if setPresume { flags = []kv.FlagsOp{kv.SetPresumeKeyNotExists} - if !sessVars.ConstraintCheckInPlacePessimistic && sessVars.TxnCtx.IsPessimistic && sessVars.InTxn() && - !sctx.InRestrictedSQL() && sctx.ConnectionID() > 0 { + if opt.PessimisticLazyDupKeyCheck() == table.DupKeyCheckInPrewrite && txn.IsPessimistic() { flags = append(flags, kv.SetNeedConstraintCheckInPrewrite) } } @@ -956,17 +939,8 @@ func (t *TableCommon) AddRecord(sctx table.MutateContext, r []types.Datum, opts return nil, err } - var createIdxOpts []table.CreateIdxOptFunc - if len(opts) > 0 { - createIdxOpts = make([]table.CreateIdxOptFunc, 0, len(opts)) - for _, fn := range opts { - if raw, ok := fn.(table.CreateIdxOptFunc); ok { - createIdxOpts = append(createIdxOpts, raw) - } - } - } // Insert new entries into indices. - h, err := t.addIndices(sctx, recordID, r, txn, createIdxOpts) + h, err := t.addIndices(sctx, recordID, r, txn, opt.GetCreateIdxOpt()) if err != nil { return h, err } @@ -1024,10 +998,10 @@ func genIndexKeyStrs(colVals []types.Datum) ([]string, error) { } // addIndices adds data into indices. If any key is duplicated, returns the original handle. -func (t *TableCommon) addIndices(sctx table.MutateContext, recordID kv.Handle, r []types.Datum, txn kv.Transaction, opts []table.CreateIdxOptFunc) (kv.Handle, error) { +func (t *TableCommon) addIndices(sctx table.MutateContext, recordID kv.Handle, r []types.Datum, txn kv.Transaction, opt *table.CreateIdxOpt) (kv.Handle, error) { writeBufs := sctx.GetMutateBuffers().GetWriteStmtBufs() indexVals := writeBufs.IndexValsBuf - skipCheck := sctx.GetSessionVars().StmtCtx.BatchCheck + skipCheck := opt.DupKeyCheck() == table.DupKeyCheckSkip for _, v := range t.Indices() { if !IsIndexWritable(v) { continue @@ -1054,7 +1028,7 @@ func (t *TableCommon) addIndices(sctx table.MutateContext, recordID kv.Handle, r dupErr = kv.GenKeyExistsErr(colStrVals, fmt.Sprintf("%s.%s", v.TableMeta().Name.String(), v.Meta().Name.String())) } rsData := TryGetHandleRestoredDataWrapper(t.meta, r, nil, v.Meta()) - if dupHandle, err := v.Create(sctx, txn, indexVals, recordID, rsData, opts...); err != nil { + if dupHandle, err := asIndex(v).create(sctx, txn, indexVals, recordID, rsData, false, opt); err != nil { if kv.ErrKeyExists.Equal(err) { return dupHandle, dupErr } @@ -1078,7 +1052,7 @@ func RowWithCols(t table.Table, ctx sessionctx.Context, h kv.Handle, cols []*tab if err != nil { return nil, err } - v, _, err := DecodeRawRowData(ctx, t.Meta(), h, cols, value) + v, _, err := DecodeRawRowData(ctx.GetExprCtx(), t.Meta(), h, cols, value) if err != nil { return nil, err } @@ -1098,7 +1072,7 @@ func containFullColInHandle(meta *model.TableInfo, col *table.Column) (containFu } // DecodeRawRowData decodes raw row data into a datum slice and a (columnID:columnValue) map. -func DecodeRawRowData(ctx sessionctx.Context, meta *model.TableInfo, h kv.Handle, cols []*table.Column, +func DecodeRawRowData(ctx expression.BuildContext, meta *model.TableInfo, h kv.Handle, cols []*table.Column, value []byte) ([]types.Datum, map[int64]types.Datum, error) { v := make([]types.Datum, len(cols)) colTps := make(map[int64]*types.FieldType, len(cols)) @@ -1122,7 +1096,7 @@ func DecodeRawRowData(ctx sessionctx.Context, meta *model.TableInfo, h kv.Handle if err != nil { return nil, nil, err } - dt, err = tablecodec.Unflatten(dt, &col.FieldType, ctx.GetSessionVars().Location()) + dt, err = tablecodec.Unflatten(dt, &col.FieldType, ctx.GetEvalCtx().Location()) if err != nil { return nil, nil, err } @@ -1133,7 +1107,7 @@ func DecodeRawRowData(ctx sessionctx.Context, meta *model.TableInfo, h kv.Handle } colTps[col.ID] = &col.FieldType } - rowMap, err := tablecodec.DecodeRowToDatumMap(value, colTps, ctx.GetSessionVars().Location()) + rowMap, err := tablecodec.DecodeRowToDatumMap(value, colTps, ctx.GetEvalCtx().Location()) if err != nil { return nil, rowMap, err } @@ -1156,9 +1130,9 @@ func DecodeRawRowData(ctx sessionctx.Context, meta *model.TableInfo, h kv.Handle continue } if col.ChangeStateInfo != nil { - v[i], _, err = GetChangingColVal(ctx.GetExprCtx(), cols, col, rowMap, defaultVals) + v[i], _, err = GetChangingColVal(ctx, cols, col, rowMap, defaultVals) } else { - v[i], err = GetColDefaultValue(ctx.GetExprCtx(), col, defaultVals) + v[i], err = GetColDefaultValue(ctx, col, defaultVals) } if err != nil { return nil, rowMap, err @@ -1194,24 +1168,19 @@ func GetChangingColVal(ctx exprctx.BuildContext, cols []*table.Column, col *tabl } // RemoveRecord implements table.Table RemoveRecord interface. -func (t *TableCommon) RemoveRecord(ctx table.MutateContext, h kv.Handle, r []types.Datum) error { - txn, err := ctx.Txn(true) - if err != nil { - return err - } - +func (t *TableCommon) RemoveRecord(ctx table.MutateContext, txn kv.Transaction, h kv.Handle, r []types.Datum) error { memBuffer := txn.GetMemBuffer() sh := memBuffer.Staging() defer memBuffer.Cleanup(sh) - err = t.removeRowData(ctx, h) + err := t.removeRowData(ctx, txn, h) if err != nil { return err } if m := t.Meta(); m.TempTableType != model.TempTableNone { - if tmpTable := addTemporaryTable(ctx, m); tmpTable != nil { - if err := checkTempTableSize(ctx, tmpTable, m); err != nil { + if tmpTable, sizeLimit, ok := addTemporaryTable(ctx, m); ok { + if err = checkTempTableSize(tmpTable, sizeLimit); err != nil { return err } defer handleTempTableSize(tmpTable, txn.Size(), txn) @@ -1231,7 +1200,7 @@ func (t *TableCommon) RemoveRecord(ctx table.MutateContext, h kv.Handle, r []typ } r = append(r, value) } - err = t.removeRowIndices(ctx, h, r) + err = t.removeRowIndices(ctx, txn, h, r) if err != nil { return err } @@ -1371,13 +1340,8 @@ func writeSequenceUpdateValueBinlog(sctx sessionctx.Context, db, sequence string return err } -func (t *TableCommon) removeRowData(ctx table.MutateContext, h kv.Handle) error { +func (t *TableCommon) removeRowData(ctx table.MutateContext, txn kv.Transaction, h kv.Handle) (err error) { // Remove row data. - txn, err := ctx.Txn(true) - if err != nil { - return err - } - key := t.RecordKey(h) failpoint.Inject("removeRecordForceAssertNotExist", func() { // Assert the key doesn't exist while it actually exists. This is helpful to test if assertion takes effect. @@ -1402,11 +1366,7 @@ func (t *TableCommon) removeRowData(ctx table.MutateContext, h kv.Handle) error } // removeRowIndices removes all the indices of a row. -func (t *TableCommon) removeRowIndices(ctx table.MutateContext, h kv.Handle, rec []types.Datum) error { - txn, err := ctx.Txn(true) - if err != nil { - return err - } +func (t *TableCommon) removeRowIndices(ctx table.MutateContext, txn kv.Transaction, h kv.Handle, rec []types.Datum) error { for _, v := range t.deletableIndices() { if v.Meta().Primary && (t.Meta().IsCommonHandle || t.Meta().PKIsHandle) { continue @@ -1429,20 +1389,10 @@ func (t *TableCommon) removeRowIndices(ctx table.MutateContext, h kv.Handle, rec return nil } -// removeRowIndex implements table.Table RemoveRowIndex interface. -func (t *TableCommon) removeRowIndex(ctx table.MutateContext, h kv.Handle, vals []types.Datum, idx table.Index, txn kv.Transaction) error { - return idx.Delete(ctx, txn, vals, h) -} - // buildIndexForRow implements table.Table BuildIndexForRow interface. -func (t *TableCommon) buildIndexForRow(ctx table.MutateContext, h kv.Handle, vals []types.Datum, newData []types.Datum, idx table.Index, txn kv.Transaction, untouched bool, popts ...table.CreateIdxOptFunc) error { - var opts []table.CreateIdxOptFunc - opts = append(opts, popts...) - if untouched { - opts = append(opts, table.IndexIsUntouched) - } +func (t *TableCommon) buildIndexForRow(ctx table.MutateContext, h kv.Handle, vals []types.Datum, newData []types.Datum, idx *index, txn kv.Transaction, untouched bool, opt *table.CreateIdxOpt) error { rsData := TryGetHandleRestoredDataWrapper(t.meta, newData, nil, idx.Meta()) - if _, err := idx.Create(ctx, txn, vals, h, rsData, opts...); err != nil { + if _, err := idx.create(ctx, txn, vals, h, rsData, untouched, opt); err != nil { if kv.ErrKeyExists.Equal(err) { // Make error message consistent with MySQL. tablecodec.TruncateIndexValues(t.meta, idx.Meta(), vals) @@ -1636,16 +1586,8 @@ func (t *TableCommon) Allocators(ctx table.AllocatorContext) autoid.Allocators { if ctx == nil { return t.allocs } - - // Use an independent allocator for global temporary tables. - if t.meta.TempTableType == model.TempTableGlobal { - if tbl := ctx.TxnRecordTempTable(t.meta); tbl != nil { - if alloc := tbl.GetAutoIDAllocator(); alloc != nil { - return autoid.NewAllocators(false, alloc) - } - } - // If the session is not in a txn, for example, in "show create table", use the original allocator. - // Otherwise the would be a nil pointer dereference. + if alloc, ok := ctx.AlternativeAllocators(t.meta); ok { + return alloc } return t.allocs } @@ -1695,7 +1637,7 @@ func CanSkip(info *model.TableInfo, col *table.Column, value *types.Datum) bool } // canSkipUpdateBinlog checks whether the column can be skipped or not. -func (t *TableCommon) canSkipUpdateBinlog(col *table.Column, value types.Datum) bool { +func (t *TableCommon) canSkipUpdateBinlog(col *table.Column) bool { return col.IsVirtualGenerated() } @@ -2011,11 +1953,11 @@ func getSequenceAllocator(allocs autoid.Allocators) (autoid.Allocator, error) { } // BuildTableScanFromInfos build tipb.TableScan with *model.TableInfo and *model.ColumnInfo. -func BuildTableScanFromInfos(tableInfo *model.TableInfo, columnInfos []*model.ColumnInfo) *tipb.TableScan { +func BuildTableScanFromInfos(tableInfo *model.TableInfo, columnInfos []*model.ColumnInfo, isTiFlashStore bool) *tipb.TableScan { pkColIDs := TryGetCommonPkColumnIds(tableInfo) tsExec := &tipb.TableScan{ TableId: tableInfo.ID, - Columns: util.ColumnsToProto(columnInfos, tableInfo.PKIsHandle, false), + Columns: util.ColumnsToProto(columnInfos, tableInfo.PKIsHandle, false, isTiFlashStore), PrimaryColumnIds: pkColIDs, } if tableInfo.IsCommonHandle { @@ -2029,7 +1971,7 @@ func BuildPartitionTableScanFromInfos(tableInfo *model.TableInfo, columnInfos [] pkColIDs := TryGetCommonPkColumnIds(tableInfo) tsExec := &tipb.PartitionTableScan{ TableId: tableInfo.ID, - Columns: util.ColumnsToProto(columnInfos, tableInfo.PKIsHandle, false), + Columns: util.ColumnsToProto(columnInfos, tableInfo.PKIsHandle, false, false), PrimaryColumnIds: pkColIDs, IsFastScan: &fastScan, } diff --git a/pkg/table/tables/tables_test.go b/pkg/table/tables/tables_test.go index 78151ac9d3628..c0bfb70c8cfcd 100644 --- a/pkg/table/tables/tables_test.go +++ b/pkg/table/tables/tables_test.go @@ -24,6 +24,7 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/domain" + "github.com/pingcap/tidb/pkg/errctx" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/meta/autoid" "github.com/pingcap/tidb/pkg/parser/auth" @@ -77,6 +78,8 @@ func TestBasic(t *testing.T) { _, err := tk.Session().Execute(context.Background(), "CREATE TABLE test.t (a int primary key auto_increment, b varchar(255) unique)") require.NoError(t, err) require.Nil(t, sessiontxn.NewTxn(context.Background(), tk.Session())) + txn, err := tk.Session().Txn(true) + require.NoError(t, err) tb, err := dom.InfoSchema().TableByName(context.Background(), model.NewCIStr("test"), model.NewCIStr("t")) require.NoError(t, err) require.Greater(t, tb.Meta().ID, int64(0)) @@ -98,7 +101,7 @@ func TestBasic(t *testing.T) { require.Greater(t, handle.IntValue(), int64(0)) ctx := tk.Session() - rid, err := tb.AddRecord(ctx.GetTableCtx(), types.MakeDatums(1, "abc")) + rid, err := tb.AddRecord(ctx.GetTableCtx(), txn, types.MakeDatums(1, "abc")) require.NoError(t, err) require.Greater(t, rid.IntValue(), int64(0)) row, err := tables.RowWithCols(tb, ctx, rid, tb.Cols()) @@ -106,12 +109,12 @@ func TestBasic(t *testing.T) { require.Equal(t, 2, len(row)) require.Equal(t, int64(1), row[0].GetInt64()) - _, err = tb.AddRecord(ctx.GetTableCtx(), types.MakeDatums(1, "aba")) + _, err = tb.AddRecord(ctx.GetTableCtx(), txn, types.MakeDatums(1, "aba")) require.Error(t, err) - _, err = tb.AddRecord(ctx.GetTableCtx(), types.MakeDatums(2, "abc")) + _, err = tb.AddRecord(ctx.GetTableCtx(), txn, types.MakeDatums(2, "abc")) require.Error(t, err) - require.Nil(t, tb.UpdateRecord(context.Background(), ctx.GetTableCtx(), rid, types.MakeDatums(1, "abc"), types.MakeDatums(1, "cba"), []bool{false, true})) + require.Nil(t, tb.UpdateRecord(ctx.GetTableCtx(), txn, rid, types.MakeDatums(1, "abc"), types.MakeDatums(1, "cba"), []bool{false, true})) err = tables.IterRecords(tb, ctx, tb.Cols(), func(_ kv.Handle, data []types.Datum, cols []*table.Column) (bool, error) { return true, nil @@ -137,10 +140,10 @@ func TestBasic(t *testing.T) { // Make sure there is index data in the storage. require.Greater(t, indexCnt(), 0) - require.Nil(t, tb.RemoveRecord(ctx.GetTableCtx(), rid, types.MakeDatums(1, "cba"))) + require.Nil(t, tb.RemoveRecord(ctx.GetTableCtx(), txn, rid, types.MakeDatums(1, "cba"))) // Make sure index data is also removed after tb.RemoveRecord(). require.Equal(t, 0, indexCnt()) - _, err = tb.AddRecord(ctx.GetTableCtx(), types.MakeDatums(1, "abc")) + _, err = tb.AddRecord(ctx.GetTableCtx(), txn, types.MakeDatums(1, "abc")) require.NoError(t, err) require.Greater(t, indexCnt(), 0) handle, found, err := seek(tb.(table.PhysicalTable), ctx, kv.IntHandle(0)) @@ -252,11 +255,11 @@ func TestUniqueIndexMultipleNullEntries(t *testing.T) { sctx := tk.Session() require.Nil(t, sessiontxn.NewTxn(ctx, sctx)) - _, err = tb.AddRecord(sctx.GetTableCtx(), types.MakeDatums(1, nil)) + txn, err := sctx.Txn(true) require.NoError(t, err) - _, err = tb.AddRecord(sctx.GetTableCtx(), types.MakeDatums(2, nil)) + _, err = tb.AddRecord(sctx.GetTableCtx(), txn, types.MakeDatums(1, nil)) require.NoError(t, err) - txn, err := sctx.Txn(true) + _, err = tb.AddRecord(sctx.GetTableCtx(), txn, types.MakeDatums(2, nil)) require.NoError(t, err) require.Nil(t, txn.Rollback()) _, err = tk.Session().Execute(context.Background(), "drop table test.t") @@ -314,7 +317,9 @@ func TestUnsignedPK(t *testing.T) { tb, err := dom.InfoSchema().TableByName(context.Background(), model.NewCIStr("test"), model.NewCIStr("tPK")) require.NoError(t, err) require.Nil(t, sessiontxn.NewTxn(context.Background(), tk.Session())) - rid, err := tb.AddRecord(tk.Session().GetTableCtx(), types.MakeDatums(1, "abc")) + txn, err := tk.Session().Txn(true) + require.NoError(t, err) + rid, err := tb.AddRecord(tk.Session().GetTableCtx(), txn, types.MakeDatums(1, "abc")) require.NoError(t, err) pt := tb.(table.PhysicalTable) row, err := tables.RowWithCols(pt, tk.Session(), rid, tb.Cols()) @@ -322,8 +327,6 @@ func TestUnsignedPK(t *testing.T) { require.Equal(t, 2, len(row)) require.Equal(t, types.KindUint64, row[0].Kind()) tk.Session().StmtCommit(context.Background()) - txn, err := tk.Session().Txn(true) - require.NoError(t, err) require.Nil(t, txn.Commit(context.Background())) } @@ -337,6 +340,8 @@ func TestIterRecords(t *testing.T) { _, err = tk.Session().Execute(context.Background(), "INSERT test.tIter VALUES (-1, 2), (2, NULL)") require.NoError(t, err) require.Nil(t, sessiontxn.NewTxn(context.Background(), tk.Session())) + txn, err := tk.Session().Txn(true) + require.NoError(t, err) tb, err := dom.InfoSchema().TableByName(context.Background(), model.NewCIStr("test"), model.NewCIStr("tIter")) require.NoError(t, err) totalCount := 0 @@ -347,8 +352,6 @@ func TestIterRecords(t *testing.T) { }) require.NoError(t, err) require.Equal(t, 2, totalCount) - txn, err := tk.Session().Txn(true) - require.NoError(t, err) require.Nil(t, txn.Commit(context.Background())) } @@ -585,12 +588,12 @@ func TestAddRecordWithCtx(t *testing.T) { }() require.Nil(t, sessiontxn.NewTxn(context.Background(), tk.Session())) - _, err = tk.Session().Txn(true) + txn, err := tk.Session().Txn(true) require.NoError(t, err) records := [][]types.Datum{types.MakeDatums(uint64(1), "abc"), types.MakeDatums(uint64(2), "abcd")} for _, r := range records { - rid, err := tb.AddRecord(tk.Session().GetTableCtx(), r) + rid, err := tb.AddRecord(tk.Session().GetTableCtx(), txn, r) require.NoError(t, err) row, err := tables.RowWithCols(tb.(table.PhysicalTable), tk.Session(), rid, tb.Cols()) require.NoError(t, err) @@ -607,8 +610,6 @@ func TestAddRecordWithCtx(t *testing.T) { require.Equal(t, len(records), i) tk.Session().StmtCommit(context.Background()) - txn, err := tk.Session().Txn(true) - require.NoError(t, err) require.Nil(t, txn.Commit(context.Background())) } @@ -694,13 +695,13 @@ func TestViewColumns(t *testing.T) { tk.MustQuery("select column_name, table_name from information_schema.columns where table_name='v1'").Check( testkit.RowsWithSep("|", "col|v1")) tk.MustExec("drop table if exists t") - for _, testCase := range testCases { - require.Len(t, tk.MustQuery(testCase.query).Rows(), 0) - tk.MustQuery("show warnings").Sort().Check(testkit.RowsWithSep("|", - "Warning|1356|View 'test.v' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them", - "Warning|1356|View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them", - "Warning|1356|View 'test.va' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them")) - } + + require.Len(t, tk.MustQuery(testCases[0].query).Rows(), 0) + tk.MustQuery("show warnings").Sort().Check(testkit.RowsWithSep("|", + "Warning|1356|View 'test.v' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them")) + require.Len(t, tk.MustQuery(testCases[1].query).Rows(), 0) + tk.MustQuery("show warnings").Sort().Check(testkit.RowsWithSep("|", + "Warning|1356|View 'test.va' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them")) // For issue 43264 tk.MustExec(`CREATE TABLE User ( @@ -932,3 +933,351 @@ func TestTxnAssertion(t *testing.T) { testUntouchedIndexImpl("OFF", false) testUntouchedIndexImpl("OFF", true) } + +func TestSkipWriteUntouchedIndices(t *testing.T) { + store, dom := testkit.CreateMockStoreAndDomain(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("CREATE TABLE t (a int primary key, b int, c int, key idx_b(b), key idx_c(c))") + tk.MustExec("insert into t values(1, 2, 3)") + tk.MustExec("insert into t values(4, 5, 6)") + defer tk.MustExec("rollback") + + tbl, err := dom.InfoSchema().TableByName(context.Background(), model.NewCIStr("test"), model.NewCIStr("t")) + require.NoError(t, err) + ctx := tk.Session().GetTableCtx() + + for _, c := range []struct { + opts []table.UpdateRecordOption + isSkip bool + }{ + { + opts: nil, // by default, should not skip untouched indices + isSkip: false, + }, + { + opts: []table.UpdateRecordOption{table.SkipWriteUntouchedIndices}, + isSkip: true, + }, + } { + tk.MustExec("rollback") + tk.MustExec("begin") + txn, err := tk.Session().Txn(true) + require.NoError(t, err) + memBuffer := txn.GetMemBuffer() + oldLen := memBuffer.Len() + h := kv.IntHandle(1) + require.NoError(t, tbl.UpdateRecord(ctx, txn, h, types.MakeDatums(1, 2, 3), types.MakeDatums(1, 12, 3), []bool{false, true, false}, c.opts...)) + newLen := memBuffer.Len() + if c.isSkip { + // 1 row overridden. 1 index deleted and re-added. + require.Equal(t, oldLen+3, newLen) + } else { + // 1 row overridden. 1 index deleted and re-added, 1 index rewritten even if unchanged. + require.Equal(t, oldLen+4, newLen) + } + + checkIndexWrittenInMemBuf := func(idx int, val types.Datum, exists bool, isDel bool) { + ec := errctx.StrictNoWarningContext + key, distinct, err := tbl.Indices()[idx].GenIndexKey(ec, time.UTC, []types.Datum{val}, h, nil) + require.NoError(t, err) + require.False(t, distinct) + indexVal, err := memBuffer.Get(context.TODO(), key) + if !exists { + require.True(t, kv.ErrNotExist.Equal(err)) + return + } + require.NoError(t, err) + if isDel { + require.Equal(t, []byte{}, indexVal) + } + } + + checkIndexWrittenInMemBuf(0, types.NewIntDatum(2), true, true) + checkIndexWrittenInMemBuf(0, types.NewIntDatum(12), true, false) + checkIndexWrittenInMemBuf(1, types.NewIntDatum(3), !c.isSkip, false) + } +} + +func TestDupKeyCheckMode(t *testing.T) { + store, dom := testkit.CreateMockStoreAndDomain(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("CREATE TABLE t (a int primary key auto_increment, b int, c int, unique key idx_b(b), key idx_c(c))") + tk.MustExec("insert into t values(1, 2, 3)") + tk.MustExec("insert into t values(11, 12, 13)") + defer tk.MustExec("rollback") + + prepareTxn := func(txnMode string) kv.Transaction { + tk.MustExec("rollback") + tk.MustExec("begin " + txnMode) + tk.MustExec("insert into t values(21, 22, 23)") + tk.MustExec("insert into t values(31, 32, 33)") + txn, err := tk.Session().Txn(true) + require.NoError(t, err) + return txn + } + tbl, err := dom.InfoSchema().TableByName(context.Background(), model.NewCIStr("test"), model.NewCIStr("t")) + require.NoError(t, err) + ctx := tk.Session().GetTableCtx() + getHandleFlags := func(h kv.Handle, memBuffer kv.MemBuffer) kv.KeyFlags { + key := tablecodec.EncodeRecordKey(tbl.RecordPrefix(), h) + flags, err := memBuffer.GetFlags(key) + require.NoError(t, err) + return flags + } + + expectAddRecordDupKeyErr := func(row []types.Datum, opts ...table.AddRecordOption) { + txn, err := tk.Session().Txn(true) + require.NoError(t, err) + _, err = tbl.AddRecord(ctx, txn, row, opts...) + require.True(t, kv.ErrKeyExists.Equal(err)) + } + + expectAddRecordSucc := func(row []types.Datum, opts ...table.AddRecordOption) kv.Handle { + txn, err := tk.Session().Txn(true) + require.NoError(t, err) + h, err := tbl.AddRecord(ctx, txn, row, opts...) + require.NoError(t, err) + require.Equal(t, kv.IntHandle(row[0].GetInt64()), h) + return h + } + + expectUpdateRecordDupKeyErr := func(rows [][]types.Datum, touched []bool, opts ...table.UpdateRecordOption) { + txn, err := tk.Session().Txn(true) + require.NoError(t, err) + h := kv.IntHandle(rows[0][0].GetInt64()) + err = tbl.UpdateRecord(ctx, txn, h, rows[0], rows[1], touched, opts...) + require.True(t, kv.ErrKeyExists.Equal(err)) + } + + expectUpdateRecordSucc := func(rows [][]types.Datum, touched []bool, opts ...table.UpdateRecordOption) kv.Handle { + txn, err := tk.Session().Txn(true) + require.NoError(t, err) + h := kv.IntHandle(rows[0][0].GetInt64()) + err = tbl.UpdateRecord(ctx, txn, h, rows[0], rows[1], touched, opts...) + require.NoError(t, err) + return h + } + + getUniqueKeyFlags := func(h kv.Handle, val types.Datum, memBuffer kv.MemBuffer) kv.KeyFlags { + key, distinct, err := tbl.Indices()[0].GenIndexKey(errctx.StrictNoWarningContext, time.UTC, []types.Datum{val}, h, nil) + require.NoError(t, err) + require.True(t, distinct) + flags, err := memBuffer.GetFlags(key) + require.NoError(t, err) + return flags + } + + getNormalIndexFlags := func(h kv.Handle, val types.Datum, memBuffer kv.MemBuffer) kv.KeyFlags { + key, distinct, err := tbl.Indices()[1].GenIndexKey(errctx.StrictNoWarningContext, time.UTC, []types.Datum{val}, h, nil) + require.NoError(t, err) + require.False(t, distinct) + flags, err := memBuffer.GetFlags(key) + require.NoError(t, err) + return flags + } + + for _, txnMode := range []string{"optimistic", "pessimistic"} { + t.Run(txnMode+" DupKeyCheckInPlace", func(t *testing.T) { + defer tk.MustExec("rollback") + memBuffer := prepareTxn(txnMode).GetMemBuffer() + oldLen, oldSize := memBuffer.Len(), memBuffer.Size() + // AddRecord should check dup key in store and memory buffer + for _, row := range [][]types.Datum{ + types.MakeDatums(1, 5, 6), + types.MakeDatums(100, 2, 300), + types.MakeDatums(21, 31, 41), + types.MakeDatums(200, 22, 23), + } { + expectAddRecordDupKeyErr(row, table.DupKeyCheckInPlace) + // default mode should be DupKeyCheckInPlace + expectAddRecordDupKeyErr(row) + require.Equal(t, oldLen, memBuffer.Len()) + require.Equal(t, oldSize, memBuffer.Size()) + } + + // UpdateRecord should check dup key in store and memory buffer + for _, row := range [][][]types.Datum{ + {types.MakeDatums(1, 2, 3), types.MakeDatums(1, 12, 13)}, + } { + expectUpdateRecordDupKeyErr(row, []bool{false, true, false}, table.DupKeyCheckInPlace) + // default mode should be DupKeyCheckInPlace + expectUpdateRecordDupKeyErr(row, []bool{false, true, false}) + require.Equal(t, oldLen, memBuffer.Len()) + require.Equal(t, oldSize, memBuffer.Size()) + } + }) + + t.Run(txnMode+" DupKeyCheckLazy", func(t *testing.T) { + defer tk.MustExec("rollback") + memBuffer := prepareTxn(txnMode).GetMemBuffer() + oldLen, oldSize := memBuffer.Len(), memBuffer.Size() + // AddRecord should check dup key in memory buffer + for _, row := range [][]types.Datum{ + types.MakeDatums(21, 31, 41), + types.MakeDatums(200, 22, 23), + } { + expectAddRecordDupKeyErr(row, table.DupKeyCheckLazy) + require.Equal(t, oldLen, memBuffer.Len()) + require.Equal(t, oldSize, memBuffer.Size()) + } + + // UpdateRecord should check dup key in memory buffer + for _, row := range [][][]types.Datum{ + {types.MakeDatums(21, 22, 23), types.MakeDatums(21, 32, 35)}, + } { + expectUpdateRecordDupKeyErr(row, []bool{false, true, false}, table.DupKeyCheckLazy) + require.Equal(t, oldLen, memBuffer.Len()) + require.Equal(t, oldSize, memBuffer.Size()) + } + + // AddRecord should not check dup key in store + curLen := oldLen + for _, row := range [][]types.Datum{ + types.MakeDatums(1, 12, 13), + } { + h := expectAddRecordSucc(row, table.DupKeyCheckLazy) + // 1 row and 2 indices added + require.Equal(t, curLen+3, memBuffer.Len()) + curLen = memBuffer.Len() + // the new row should contain a flag to presume key not exists. + flags := getHandleFlags(h, memBuffer) + require.True(t, flags.HasPresumeKeyNotExists()) + // new unique key contain a flag to presume key not exists. + flags = getUniqueKeyFlags(h, row[1], memBuffer) + require.True(t, flags.HasPresumeKeyNotExists()) + // normal index should not contain a flag to presume key not exists. + flags = getNormalIndexFlags(h, row[2], memBuffer) + require.False(t, flags.HasPresumeKeyNotExists()) + } + + // UpdateRecord should not check dup key in store + for _, row := range [][][]types.Datum{ + {types.MakeDatums(11, 12, 13), types.MakeDatums(11, 2, 33)}, + } { + h := expectUpdateRecordSucc(row, []bool{false, true, true}, table.DupKeyCheckLazy) + // 1 row overridden. 2 indexes deleted and re-added. + require.Equal(t, curLen+4, memBuffer.Len()) + curLen = memBuffer.Len() + // the update row should not contain a flag to presume key not exists. + flags := getHandleFlags(h, memBuffer) + require.False(t, flags.HasPresumeKeyNotExists()) + // new unique key contain a flag to presume key not exists. + flags = getUniqueKeyFlags(h, row[1][1], memBuffer) + require.True(t, flags.HasPresumeKeyNotExists()) + // normal index should not contain a flag to presume key not exists. + flags = getNormalIndexFlags(h, row[1][2], memBuffer) + require.False(t, flags.HasPresumeKeyNotExists()) + } + }) + + t.Run(txnMode+" DupKeyCheckSkip", func(t *testing.T) { + defer tk.MustExec("rollback") + memBuffer := prepareTxn(txnMode).GetMemBuffer() + curLen := memBuffer.Len() + + // AddRecord should not check dup key in store and memory buffer + for _, row := range [][]types.Datum{ + types.MakeDatums(1, 2, 13), + } { + h := expectAddRecordSucc(row, table.DupKeyCheckSkip) + // 1 row and 2 indexes added + require.Equal(t, curLen+3, memBuffer.Len()) + curLen = memBuffer.Len() + // should not contain the flag to presume key not exists for `DupKeyCheckSkip` + flags := getHandleFlags(h, memBuffer) + require.False(t, flags.HasPresumeKeyNotExists()) + flags = getUniqueKeyFlags(h, row[1], memBuffer) + require.False(t, flags.HasPresumeKeyNotExists()) + flags = getNormalIndexFlags(h, row[2], memBuffer) + require.False(t, flags.HasPresumeKeyNotExists()) + } + + tk.MustExec("rollback") + memBuffer = prepareTxn(txnMode).GetMemBuffer() + curLen = memBuffer.Len() + for _, row := range [][][]types.Datum{ + {types.MakeDatums(1, 2, 3), types.MakeDatums(1, 12, 13)}, + } { + h := expectUpdateRecordSucc(row, []bool{false, true, true}, table.DupKeyCheckSkip) + // 1 row added. 2 indices old values overwritten as tombstone and new keys added. + require.Equal(t, curLen+5, memBuffer.Len()) + curLen = memBuffer.Len() + // should not contain the flag to presume key not exists for `DupKeyCheckSkip` + flags := getHandleFlags(h, memBuffer) + require.False(t, flags.HasPresumeKeyNotExists()) + flags = getUniqueKeyFlags(h, row[1][1], memBuffer) + require.False(t, flags.HasPresumeKeyNotExists()) + flags = getNormalIndexFlags(h, row[1][2], memBuffer) + require.False(t, flags.HasPresumeKeyNotExists()) + } + }) + } + + t.Run("PessimisticLazyMode", func(t *testing.T) { + defer tk.MustExec("rollback") + // DupKeyCheckInAcquireLock should not add flagNeedConstraintCheckInPrewrite + memBuffer := prepareTxn("pessimistic").GetMemBuffer() + h := expectAddRecordSucc(types.MakeDatums(1, 2, 3), table.DupKeyCheckLazy, table.DupKeyCheckInAcquireLock) + flags := getHandleFlags(h, memBuffer) + require.True(t, flags.HasPresumeKeyNotExists()) + require.False(t, flags.HasNeedConstraintCheckInPrewrite()) + flags = getUniqueKeyFlags(h, types.NewIntDatum(2), memBuffer) + require.True(t, flags.HasPresumeKeyNotExists()) + require.False(t, flags.HasNeedConstraintCheckInPrewrite()) + tk.MustExec("rollback") + + // DupKeyCheckInPrewrite should add flagNeedConstraintCheckInPrewrite + memBuffer = prepareTxn("pessimistic").GetMemBuffer() + h = expectAddRecordSucc(types.MakeDatums(11, 12, 13), table.DupKeyCheckLazy, table.DupKeyCheckInPrewrite) + flags = getHandleFlags(h, memBuffer) + require.True(t, flags.HasPresumeKeyNotExists()) + require.True(t, flags.HasNeedConstraintCheckInPrewrite()) + flags = getUniqueKeyFlags(h, types.NewIntDatum(12), memBuffer) + require.True(t, flags.HasPresumeKeyNotExists()) + require.True(t, flags.HasNeedConstraintCheckInPrewrite()) + tk.MustExec("rollback") + + // DupKeyCheckInPrewrite should not add flagNeedConstraintCheckInPrewrite for deleted rows + memBuffer = prepareTxn("pessimistic").GetMemBuffer() + tk.MustExec("delete from t where a=1") + h = expectAddRecordSucc(types.MakeDatums(1, 2, 3), table.DupKeyCheckLazy, table.DupKeyCheckInPrewrite) + flags = getHandleFlags(h, memBuffer) + require.False(t, flags.HasPresumeKeyNotExists()) + require.False(t, flags.HasNeedConstraintCheckInPrewrite()) + flags = getUniqueKeyFlags(h, types.NewIntDatum(2), memBuffer) + require.False(t, flags.HasPresumeKeyNotExists()) + require.False(t, flags.HasNeedConstraintCheckInPrewrite()) + tk.MustExec("rollback") + + // PessimisticLazyDupKeyCheckMode can only work with DupKeyCheckLazy + memBuffer = prepareTxn("pessimistic").GetMemBuffer() + h = expectAddRecordSucc(types.MakeDatums(101, 102, 103), table.DupKeyCheckSkip, table.DupKeyCheckInPrewrite) + flags = getHandleFlags(h, memBuffer) + require.False(t, flags.HasPresumeKeyNotExists()) + require.False(t, flags.HasNeedConstraintCheckInPrewrite()) + flags = getUniqueKeyFlags(h, types.NewIntDatum(102), memBuffer) + require.False(t, flags.HasPresumeKeyNotExists()) + require.False(t, flags.HasNeedConstraintCheckInPrewrite()) + h = expectAddRecordSucc(types.MakeDatums(201, 202, 203), table.DupKeyCheckInPlace, table.DupKeyCheckInPrewrite) + flags = getHandleFlags(h, memBuffer) + require.False(t, flags.HasPresumeKeyNotExists()) + require.False(t, flags.HasNeedConstraintCheckInPrewrite()) + flags = getUniqueKeyFlags(h, types.NewIntDatum(202), memBuffer) + require.False(t, flags.HasPresumeKeyNotExists()) + require.False(t, flags.HasNeedConstraintCheckInPrewrite()) + tk.MustExec("rollback") + + // optimistic mode should ignore PessimisticLazyDupKeyCheckMode + memBuffer = prepareTxn("optimistic").GetMemBuffer() + h = expectAddRecordSucc(types.MakeDatums(1, 2, 3), table.DupKeyCheckLazy, table.DupKeyCheckInPrewrite) + flags = getHandleFlags(h, memBuffer) + require.True(t, flags.HasPresumeKeyNotExists()) + require.False(t, flags.HasNeedConstraintCheckInPrewrite()) + flags = getUniqueKeyFlags(h, types.NewIntDatum(2), memBuffer) + require.True(t, flags.HasPresumeKeyNotExists()) + require.False(t, flags.HasNeedConstraintCheckInPrewrite()) + tk.MustExec("rollback") + }) +} diff --git a/pkg/table/tables/test/partition/BUILD.bazel b/pkg/table/tables/test/partition/BUILD.bazel index f493668f50f5e..527f7c26c443e 100644 --- a/pkg/table/tables/test/partition/BUILD.bazel +++ b/pkg/table/tables/test/partition/BUILD.bazel @@ -10,7 +10,6 @@ go_test( flaky = True, shard_count = 23, deps = [ - "//pkg/ddl", "//pkg/domain", "//pkg/kv", "//pkg/parser/model", @@ -18,6 +17,7 @@ go_test( "//pkg/table", "//pkg/table/tables", "//pkg/testkit", + "//pkg/testkit/testfailpoint", "//pkg/testkit/testsetup", "//pkg/types", "//pkg/util", diff --git a/pkg/table/tables/test/partition/partition_test.go b/pkg/table/tables/test/partition/partition_test.go index cfde4e544cbde..4aea56803e93e 100644 --- a/pkg/table/tables/test/partition/partition_test.go +++ b/pkg/table/tables/test/partition/partition_test.go @@ -24,7 +24,6 @@ import ( gotime "time" "github.com/pingcap/errors" - "github.com/pingcap/tidb/pkg/ddl" "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/parser/model" @@ -32,6 +31,7 @@ import ( "github.com/pingcap/tidb/pkg/table" "github.com/pingcap/tidb/pkg/table/tables" "github.com/pingcap/tidb/pkg/testkit" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/logutil" @@ -63,12 +63,12 @@ PARTITION BY RANGE ( id ) ( p0 := tbInfo.Partition.Definitions[0] require.Equal(t, model.NewCIStr("p0"), p0.Name) require.Nil(t, sessiontxn.NewTxn(ctx, tk.Session())) - rid, err := tb.AddRecord(tk.Session().GetTableCtx(), types.MakeDatums(1)) + txn, err := tk.Session().Txn(true) + require.NoError(t, err) + rid, err := tb.AddRecord(tk.Session().GetTableCtx(), txn, types.MakeDatums(1)) require.NoError(t, err) // Check that add record writes to the partition, rather than the table. - txn, err := tk.Session().Txn(true) - require.NoError(t, err) val, err := txn.Get(context.TODO(), tables.PartitionRecordKey(p0.ID, rid.IntValue())) require.NoError(t, err) require.Greater(t, len(val), 0) @@ -76,11 +76,11 @@ PARTITION BY RANGE ( id ) ( require.True(t, kv.ErrNotExist.Equal(err)) // Cover more code. - _, err = tb.AddRecord(tk.Session().GetTableCtx(), types.MakeDatums(7)) + _, err = tb.AddRecord(tk.Session().GetTableCtx(), txn, types.MakeDatums(7)) require.NoError(t, err) - _, err = tb.AddRecord(tk.Session().GetTableCtx(), types.MakeDatums(12)) + _, err = tb.AddRecord(tk.Session().GetTableCtx(), txn, types.MakeDatums(12)) require.NoError(t, err) - _, err = tb.AddRecord(tk.Session().GetTableCtx(), types.MakeDatums(16)) + _, err = tb.AddRecord(tk.Session().GetTableCtx(), txn, types.MakeDatums(16)) require.NoError(t, err) // Make the changes visible. @@ -93,7 +93,7 @@ PARTITION BY RANGE ( id ) ( tk.MustQuery("select count(*) from t1 use index(id) where id > 6").Check(testkit.Rows("3")) // Value must locates in one partition. - _, err = tb.AddRecord(tk.Session().GetTableCtx(), types.MakeDatums(22)) + _, err = tb.AddRecord(tk.Session().GetTableCtx(), txn, types.MakeDatums(22)) require.True(t, table.ErrNoPartitionForGivenValue.Equal(err)) _, err = tk.Session().Execute(context.Background(), "rollback") require.NoError(t, err) @@ -106,9 +106,11 @@ PARTITION BY RANGE ( id ) ( _, err = tk.Session().Execute(context.Background(), createTable2) require.NoError(t, err) require.Nil(t, sessiontxn.NewTxn(ctx, tk.Session())) + txn, err = tk.Session().Txn(true) + require.NoError(t, err) tb, err = dom.InfoSchema().TableByName(context.Background(), model.NewCIStr("test"), model.NewCIStr("t2")) require.NoError(t, err) - _, err = tb.AddRecord(tk.Session().GetTableCtx(), types.MakeDatums(22)) + _, err = tb.AddRecord(tk.Session().GetTableCtx(), txn, types.MakeDatums(22)) require.NoError(t, err) createTable3 := `create table test.t3 (id int) partition by range (id) @@ -118,13 +120,15 @@ PARTITION BY RANGE ( id ) ( _, err = tk.Session().Execute(context.Background(), createTable3) require.NoError(t, err) require.Nil(t, sessiontxn.NewTxn(ctx, tk.Session())) + txn, err = tk.Session().Txn(true) + require.NoError(t, err) tb, err = dom.InfoSchema().TableByName(context.Background(), model.NewCIStr("test"), model.NewCIStr("t3")) require.NoError(t, err) - _, err = tb.AddRecord(tk.Session().GetTableCtx(), types.MakeDatums(11)) + _, err = tb.AddRecord(tk.Session().GetTableCtx(), txn, types.MakeDatums(11)) require.True(t, table.ErrNoPartitionForGivenValue.Equal(err)) - _, err = tb.AddRecord(tk.Session().GetTableCtx(), types.MakeDatums(10)) + _, err = tb.AddRecord(tk.Session().GetTableCtx(), txn, types.MakeDatums(10)) require.True(t, table.ErrNoPartitionForGivenValue.Equal(err)) - _, err = tb.AddRecord(tk.Session().GetTableCtx(), types.MakeDatums(0)) + _, err = tb.AddRecord(tk.Session().GetTableCtx(), txn, types.MakeDatums(0)) require.NoError(t, err) createTable4 := `create table test.t4 (a int,b int) partition by range (a+b) @@ -134,9 +138,11 @@ PARTITION BY RANGE ( id ) ( _, err = tk.Session().Execute(context.Background(), createTable4) require.NoError(t, err) require.Nil(t, sessiontxn.NewTxn(ctx, tk.Session())) + txn, err = tk.Session().Txn(true) + require.NoError(t, err) tb, err = dom.InfoSchema().TableByName(context.Background(), model.NewCIStr("test"), model.NewCIStr("t4")) require.NoError(t, err) - _, err = tb.AddRecord(tk.Session().GetTableCtx(), types.MakeDatums(1, 11)) + _, err = tb.AddRecord(tk.Session().GetTableCtx(), txn, types.MakeDatums(1, 11)) require.True(t, table.ErrNoPartitionForGivenValue.Equal(err)) } @@ -156,12 +162,12 @@ func TestHashPartitionAddRecord(t *testing.T) { tbInfo := tb.Meta() p0 := tbInfo.Partition.Definitions[0] require.Nil(t, sessiontxn.NewTxn(context.Background(), tk.Session())) - rid, err := tb.AddRecord(tk.Session().GetTableCtx(), types.MakeDatums(8)) + txn, err := tk.Session().Txn(true) + require.NoError(t, err) + rid, err := tb.AddRecord(tk.Session().GetTableCtx(), txn, types.MakeDatums(8)) require.NoError(t, err) // Check that add record writes to the partition, rather than the table. - txn, err := tk.Session().Txn(true) - require.NoError(t, err) val, err := txn.Get(context.TODO(), tables.PartitionRecordKey(p0.ID, rid.IntValue())) require.NoError(t, err) require.Greater(t, len(val), 0) @@ -169,11 +175,11 @@ func TestHashPartitionAddRecord(t *testing.T) { require.True(t, kv.ErrNotExist.Equal(err)) // Cover more code. - _, err = tb.AddRecord(tk.Session().GetTableCtx(), types.MakeDatums(-1)) + _, err = tb.AddRecord(tk.Session().GetTableCtx(), txn, types.MakeDatums(-1)) require.NoError(t, err) - _, err = tb.AddRecord(tk.Session().GetTableCtx(), types.MakeDatums(3)) + _, err = tb.AddRecord(tk.Session().GetTableCtx(), txn, types.MakeDatums(3)) require.NoError(t, err) - _, err = tb.AddRecord(tk.Session().GetTableCtx(), types.MakeDatums(6)) + _, err = tb.AddRecord(tk.Session().GetTableCtx(), txn, types.MakeDatums(6)) require.NoError(t, err) // Make the changes visible. @@ -193,10 +199,10 @@ func TestHashPartitionAddRecord(t *testing.T) { tbInfo = tb.Meta() for i := 0; i < 11; i++ { require.Nil(t, sessiontxn.NewTxn(context.Background(), tk.Session())) - rid, err = tb.AddRecord(tk.Session().GetTableCtx(), types.MakeDatums(-i)) - require.NoError(t, err) txn, err = tk.Session().Txn(true) require.NoError(t, err) + rid, err = tb.AddRecord(tk.Session().GetTableCtx(), txn, types.MakeDatums(-i)) + require.NoError(t, err) val, err = txn.Get(context.TODO(), tables.PartitionRecordKey(tbInfo.Partition.Definitions[i].ID, rid.IntValue())) require.NoError(t, err) require.Greater(t, len(val), 0) @@ -2070,25 +2076,6 @@ func TestPruneModeWarningInfo(t *testing.T) { tk.MustQuery("show warnings").Check(testkit.Rows("Warning 1105 Please analyze all partition tables again for consistency between partition and global stats")) } -type testCallback struct { - ddl.Callback - OnJobRunBeforeExported func(job *model.Job) -} - -func newTestCallBack(t *testing.T, dom *domain.Domain) *testCallback { - defHookFactory, err := ddl.GetCustomizedHook("default_hook") - require.NoError(t, err) - return &testCallback{ - Callback: defHookFactory(dom), - } -} - -func (c *testCallback) OnJobRunBefore(job *model.Job) { - if c.OnJobRunBeforeExported != nil { - c.OnJobRunBeforeExported(job) - } -} - func TestPartitionByIntListExtensivePart(t *testing.T) { limitSizeOfTest := true store := testkit.CreateMockStore(t) @@ -2304,8 +2291,10 @@ func TestGlobalIndexPartitionByIntExtensivePart(t *testing.T) { tk2.MustExec(`set @@tidb_enable_global_index = ON`) tBase := `(a int unsigned not null, b varchar(255) collate utf8mb4_general_ci, c int, d datetime, e timestamp, f double, g text, unique key idx_a(a), unique key idx_b(b), key (c,b), unique key idx_dc(d,c), key(e))` + tBaseA := `(a int unsigned not null, b varchar(255) collate utf8mb4_general_ci, c int, d datetime, e timestamp, f double, g text, unique key idx_a(a), unique key idx_b(b) Global, key (c,b), unique key idx_dc(d,c) Global, key(e))` + tBaseB := `(a int unsigned not null, b varchar(255) collate utf8mb4_general_ci, c int, d datetime, e timestamp, f double, g text, unique key idx_a(a) Global, unique key idx_b(b), key (c,b), unique key idx_dc(d,c) Global, key(e))` t2Str := `create table t2 ` + tBase - tStr := `create table t ` + tBase + tStr := `create table t ` rows := 100 pkInserts := 20 @@ -2316,16 +2305,16 @@ func TestGlobalIndexPartitionByIntExtensivePart(t *testing.T) { twoThirdUintRangeStr := fmt.Sprintf("%d", 2*thirdUintRange) tStart := []string{ // Non partitioned - tStr, + tStr + tBase, // RANGE COLUMNS - tStr + ` partition by range (a) (partition pFirst values less than (` + thirdUintRangeStr + `),` + + tStr + tBaseA + ` partition by range (a) (partition pFirst values less than (` + thirdUintRangeStr + `),` + `partition pMid values less than (` + twoThirdUintRangeStr + `), partition pLast values less than (maxvalue))`, // KEY - tStr + ` partition by key(b) partitions 5`, + tStr + tBaseB + ` partition by key(b) partitions 5`, // HASH - tStr + ` partition by hash(a) partitions 5`, + tStr + tBaseA + ` partition by hash(a) partitions 5`, // HASH with function - tStr + ` partition by hash(a DIV 3) partitions 5`, + tStr + tBaseA + ` partition by hash(a DIV 3) partitions 5`, } if limitSizeOfTest { tStart = tStart[:2] @@ -2341,11 +2330,11 @@ func TestGlobalIndexPartitionByIntExtensivePart(t *testing.T) { `alter table t partition by range (a+2) (partition pFirst values less than (` + quarterUintRangeStr + `),` + `partition pLowMid values less than (` + halfUintRangeStr + `),` + `partition pHighMid values less than (` + threeQuarterUintRangeStr + `),` + - `partition pLast values less than (maxvalue))`, + `partition pLast values less than (maxvalue)) update indexes (idx_a local, idx_dc global, idx_b global)`, // KEY - `alter table t partition by key(b) partitions 3`, + `alter table t partition by key(b) partitions 3 update indexes(idx_a global, idx_b local, idx_dc global)`, // Hash - `alter table t partition by hash(a) partitions 7`, + `alter table t partition by hash(a) partitions 7 update indexes (idx_dc global, idx_a local, idx_b global)`, } if limitSizeOfTest { tAlter = tAlter[:2] @@ -2645,13 +2634,8 @@ func checkDMLInAllStates(t *testing.T, tk, tk2 *testkit.TestKit, schemaName, alt rows, pkInserts, pkUpdates, pkDeletes int, reorgRand *rand.Rand, getNewPK func(map[string]struct{}, string, *rand.Rand) string, - getValues func(string, bool, *rand.Rand) string) { - dom := domain.GetDomain(tk.Session()) - originHook := dom.DDL().GetHook() - defer dom.DDL().SetHook(originHook) - hook := newTestCallBack(t, dom) - dom.DDL().SetHook(hook) - + getValues func(string, bool, *rand.Rand) string, +) { pkMap := make(map[string]struct{}, rows) pkArray := make([]string, 0, len(pkMap)) // Generate a start set: @@ -2694,7 +2678,7 @@ func checkDMLInAllStates(t *testing.T, tk, tk2 *testkit.TestKit, schemaName, alt prevTbl, err := currSchema.TableByName(context.Background(), model.NewCIStr(schemaName), model.NewCIStr("t")) require.NoError(t, err) var hookErr error - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if hookErr != nil { // Enough to find a single error return @@ -3133,7 +3117,8 @@ func checkDMLInAllStates(t *testing.T, tk, tk2 *testkit.TestKit, schemaName, alt logutil.BgLogger().Info("State after ins/upd/del", zap.Int("transitions", transitions), zap.Int("rows", len(pkMap)), zap.Stringer("SchemaState", job.SchemaState)) } - } + }) + defer testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore") tk.MustExec(alterStr) require.NoError(t, hookErr) tk.MustExec(`admin check table t`) @@ -3267,8 +3252,8 @@ func TestPartitionCoverage(t *testing.T) { " └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo")) tk.MustExec(`analyze table t all columns`) tk.MustQuery(`explain format='brief' select * from t where a = 10`).Check(testkit.Rows(""+ - `TableReader 0.00 root partition:dual data:Selection`, - `└─Selection 0.00 cop[tikv] eq(test.t.a, 10)`, + `TableReader 1.00 root partition:dual data:Selection`, + `└─Selection 1.00 cop[tikv] eq(test.t.a, 10)`, ` └─TableFullScan 1.00 cop[tikv] table:t keep order:false`)) tk.MustQuery(`select * from t where a = 10`).Check(testkit.Rows()) diff --git a/pkg/table/temptable/interceptor.go b/pkg/table/temptable/interceptor.go index e4a3408db5d7d..ed741ceedd89a 100644 --- a/pkg/table/temptable/interceptor.go +++ b/pkg/table/temptable/interceptor.go @@ -183,7 +183,7 @@ func (i *TemporaryTableSnapshotInterceptor) iterTable(tblID int64, snap kv.Snaps } func (i *TemporaryTableSnapshotInterceptor) temporaryTableInfoByID(tblID int64) (*model.TableInfo, bool) { - if tbl, ok := i.is.TableByID(tblID); ok { + if tbl, ok := i.is.TableByID(context.Background(), tblID); ok { tblInfo := tbl.Meta() if tblInfo.TempTableType != model.TempTableNone { return tblInfo, true diff --git a/pkg/table/temptable/interceptor_test.go b/pkg/table/temptable/interceptor_test.go index 6a58ec77afd10..59c30a939fb75 100644 --- a/pkg/table/temptable/interceptor_test.go +++ b/pkg/table/temptable/interceptor_test.go @@ -265,13 +265,13 @@ func TestGetSessionTemporaryTableKey(t *testing.T) { AddTable(model.TempTableGlobal, 3). AddTable(model.TempTableLocal, 5) - normalTb, ok := is.TableByID(1) + normalTb, ok := is.TableByID(context.Background(), 1) require.True(t, ok) require.Equal(t, model.TempTableNone, normalTb.Meta().TempTableType) - globalTb, ok := is.TableByID(3) + globalTb, ok := is.TableByID(context.Background(), 3) require.True(t, ok) require.Equal(t, model.TempTableGlobal, globalTb.Meta().TempTableType) - localTb, ok := is.TableByID(5) + localTb, ok := is.TableByID(context.Background(), 5) require.True(t, ok) require.Equal(t, model.TempTableLocal, localTb.Meta().TempTableType) @@ -1283,7 +1283,7 @@ func TestIterTable(t *testing.T) { } require.Equal(t, c.result, result, i) - tbl, ok := is.TableByID(c.tblID) + tbl, ok := is.TableByID(context.Background(), c.tblID) if !ok || tbl.Meta().TempTableType == model.TempTableNone { require.Equal(t, 0, len(retriever.GetInvokes()), i) require.Equal(t, 1, len(snap.GetInvokes()), i) diff --git a/pkg/table/temptable/main_test.go b/pkg/table/temptable/main_test.go index ec3e5d9c1ee3c..dd5e5fdd26c58 100644 --- a/pkg/table/temptable/main_test.go +++ b/pkg/table/temptable/main_test.go @@ -67,7 +67,7 @@ func (is *mockedInfoSchema) AddTable(tempType model.TempTableType, id ...int64) return is } -func (is *mockedInfoSchema) TableByID(tblID int64) (table.Table, bool) { +func (is *mockedInfoSchema) TableByID(_ context.Context, tblID int64) (table.Table, bool) { tempType, ok := is.tables[tblID] if !ok { return nil, false diff --git a/pkg/testkit/mocksessionmanager.go b/pkg/testkit/mocksessionmanager.go index e11d96726aa4f..d1f2a41d64ba6 100644 --- a/pkg/testkit/mocksessionmanager.go +++ b/pkg/testkit/mocksessionmanager.go @@ -112,7 +112,7 @@ func (msm *MockSessionManager) GetConAttrs(user *auth.UserIdentity) map[uint64]m } // Kill implements the SessionManager.Kill interface. -func (*MockSessionManager) Kill(uint64, bool, bool) { +func (*MockSessionManager) Kill(uint64, bool, bool, bool) { } // KillAllConnections implements the SessionManager.KillAllConnections interface. @@ -128,11 +128,6 @@ func (msm *MockSessionManager) ServerID() uint64 { return msm.SerID } -// GetAutoAnalyzeProcID implement SessionManager interface. -func (msm *MockSessionManager) GetAutoAnalyzeProcID() uint64 { - return uint64(1) -} - // StoreInternalSession is to store internal session. func (msm *MockSessionManager) StoreInternalSession(s any) { msm.mu.Lock() @@ -183,12 +178,12 @@ func (msm *MockSessionManager) KillNonFlashbackClusterConn() { processInfo := se.ShowProcess() ddl, ok := processInfo.StmtCtx.GetPlan().(*core.DDL) if !ok { - msm.Kill(se.GetSessionVars().ConnectionID, false, false) + msm.Kill(se.GetSessionVars().ConnectionID, false, false, false) continue } _, ok = ddl.Statement.(*ast.FlashBackToTimestampStmt) if !ok { - msm.Kill(se.GetSessionVars().ConnectionID, false, false) + msm.Kill(se.GetSessionVars().ConnectionID, false, false, false) continue } } diff --git a/pkg/testkit/result.go b/pkg/testkit/result.go index d3de5364fe060..8fc477fda8a1c 100644 --- a/pkg/testkit/result.go +++ b/pkg/testkit/result.go @@ -160,10 +160,27 @@ func (res *Result) CheckContain(expected string) { res.require.Equal(true, false, comment) } +func (res *Result) String() string { + var result strings.Builder + for i, row := range res.rows { + if i > 0 { + result.WriteString("\n") + } + for j, colValue := range row { + if j > 0 { + result.WriteString(" ") + } + result.WriteString(colValue) + } + } + return result.String() +} + // MultiCheckContain checks whether the result contains strings in `expecteds` func (res *Result) MultiCheckContain(expecteds []string) { + result := res.String() for _, expected := range expecteds { - res.CheckContain(expected) + res.require.True(strings.Contains(result, expected), "the result doesn't contain the exepected %s\n%s", expected, result) } } @@ -181,7 +198,8 @@ func (res *Result) CheckNotContain(unexpected string) { // MultiCheckNotContain checks whether the result doesn't contain the strings in `expected` func (res *Result) MultiCheckNotContain(unexpecteds []string) { + result := res.String() for _, unexpected := range unexpecteds { - res.CheckNotContain(unexpected) + res.require.False(strings.Contains(result, unexpected), "the result contain the unexepected %s\n%s", unexpected, result) } } diff --git a/pkg/testkit/testkit.go b/pkg/testkit/testkit.go index 1517d7cb7f710..cd7a355550a66 100644 --- a/pkg/testkit/testkit.go +++ b/pkg/testkit/testkit.go @@ -23,6 +23,7 @@ import ( "net" "net/http" "net/http/pprof" + "slices" "strings" "sync" "testing" @@ -30,6 +31,7 @@ import ( "github.com/gorilla/mux" "github.com/pingcap/errors" + "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/expression" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/parser/ast" @@ -120,8 +122,8 @@ func (tk *TestKit) RefreshSession() { seed := uint64(time.Now().UnixNano()) tk.t.Logf("RefreshSession rand seed: %d", seed) rng := rand.New(rand.NewSource(int64(seed))) - if rng.Intn(10) >= 3 { // 70% chance to run infoschema v2 - tk.MustExec("set @@global.tidb_schema_cache_size = 1024 * 1024 * 1024") + if rng.Intn(10) < 3 { // 70% chance to run infoschema v2 + tk.MustExec("set @@global.tidb_schema_cache_size = 0") } } @@ -171,7 +173,43 @@ func (tk *TestKit) MustQuery(sql string, args ...any) *Result { tk.alloc.Reset() } }() - return tk.MustQueryWithContext(context.Background(), sql, args...) + rs1 := tk.MustQueryWithContext(context.Background(), sql, args...) + if !strings.Contains(sql, "information_schema") || + strings.Contains(sql, "trace") || + strings.Contains(sql, "statements_summary") || + strings.Contains(sql, "slow_query") || + strings.Contains(sql, "cluster_config") || + strings.Contains(sql, "CLUSTER_") || + strings.Contains(sql, "STATEMENTS_SUMMARY_EVICTED") || + strings.Contains(sql, "TIDB_TRX") { + return rs1 + } + err := failpoint.Enable("github.com/pingcap/tidb/pkg/planner/core/skipExtractor", "return(true)") + if err != nil { + panic(err) + } + rs2 := tk.MustQueryWithContext(context.Background(), sql, args...) + err = failpoint.Disable("github.com/pingcap/tidb/pkg/planner/core/skipExtractor") + if err != nil { + panic(err) + } + rs1Row := make([][]string, 0, len(rs1.rows)) + for _, row := range rs1.rows { + rs1SubRow := make([]string, 0, len(row)) + for _, col := range row { + rs1SubRow = append(rs1SubRow, strings.Clone(col)) + } + rs1Row = append(rs1Row, rs1SubRow) + } + slices.SortFunc(rs1.rows, func(a, b []string) int { + return slices.Compare(a, b) + }) + slices.SortFunc(rs2.rows, func(a, b []string) int { + return slices.Compare(a, b) + }) + rs2.Check(rs1.Rows()) + rs1.rows = rs1Row + return rs1 } // EventuallyMustQueryAndCheck query the statements and assert that @@ -491,7 +529,7 @@ func (tk *TestKit) MustGetDBError(sql string, dberr *terror.Error) { // MustContainErrMsg executes a sql statement and assert its error message containing errStr. func (tk *TestKit) MustContainErrMsg(sql string, errStr any) { err := tk.ExecToErr(sql) - tk.require.Error(err) + tk.require.Error(err, "sql: %s", sql) tk.require.Contains(err.Error(), errStr) } diff --git a/pkg/timer/runtime/cache_test.go b/pkg/timer/runtime/cache_test.go index 492e532bd389b..78ed37b5efb4c 100644 --- a/pkg/timer/runtime/cache_test.go +++ b/pkg/timer/runtime/cache_test.go @@ -30,7 +30,7 @@ func newTestTimer(id string, policyExpr string, watermark time.Time) *api.TimerR ID: id, TimerSpec: api.TimerSpec{ Namespace: "n1", - Key: fmt.Sprintf("key-" + id), + Key: "key-" + id, SchedPolicyType: api.SchedEventInterval, SchedPolicyExpr: policyExpr, HookClass: "hook1", diff --git a/pkg/timer/tablestore/BUILD.bazel b/pkg/timer/tablestore/BUILD.bazel index 9c400ad188133..1443720588261 100644 --- a/pkg/timer/tablestore/BUILD.bazel +++ b/pkg/timer/tablestore/BUILD.bazel @@ -15,12 +15,12 @@ go_library( "//pkg/sessionctx", "//pkg/sessionctx/variable", "//pkg/timer/api", + "//pkg/util", "//pkg/util/chunk", "//pkg/util/logutil", "//pkg/util/sqlexec", "//pkg/util/timeutil", "@com_github_google_uuid//:uuid", - "@com_github_ngaut_pools//:pools", "@com_github_pingcap_errors//:errors", "@com_github_tikv_client_go_v2//util", "@io_etcd_go_etcd_api_v3//mvccpb", diff --git a/pkg/timer/tablestore/sql_test.go b/pkg/timer/tablestore/sql_test.go index 46ec4d3a2d88d..f2f6db8aca255 100644 --- a/pkg/timer/tablestore/sql_test.go +++ b/pkg/timer/tablestore/sql_test.go @@ -575,6 +575,8 @@ func (p *mockSessionPool) Put(r pools.Resource) { p.Called(r) } +func (p *mockSessionPool) Close() {} + type mockSession struct { mock.Mock sessionctx.Context diff --git a/pkg/timer/tablestore/store.go b/pkg/timer/tablestore/store.go index 54cc4bc653a7d..bbc00f8646b70 100644 --- a/pkg/timer/tablestore/store.go +++ b/pkg/timer/tablestore/store.go @@ -22,35 +22,29 @@ import ( "strings" "time" - "github.com/ngaut/pools" "github.com/pingcap/errors" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/parser/terror" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/timer/api" + "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/chunk" "github.com/pingcap/tidb/pkg/util/sqlexec" "github.com/pingcap/tidb/pkg/util/timeutil" - "github.com/tikv/client-go/v2/util" + clitutil "github.com/tikv/client-go/v2/util" clientv3 "go.etcd.io/etcd/client/v3" ) -type sessionPool interface { - Get() (pools.Resource, error) - Put(pools.Resource) -} - type tableTimerStoreCore struct { - pool sessionPool + pool util.SessionPool dbName string tblName string - etcd *clientv3.Client notifier api.TimerWatchEventNotifier } // NewTableTimerStore create a new timer store based on table -func NewTableTimerStore(clusterID uint64, pool sessionPool, dbName, tblName string, etcd *clientv3.Client) *api.TimerStore { +func NewTableTimerStore(clusterID uint64, pool util.SessionPool, dbName, tblName string, etcd *clientv3.Client) *api.TimerStore { var notifier api.TimerWatchEventNotifier if etcd != nil { notifier = NewEtcdNotifier(clusterID, etcd) @@ -434,7 +428,7 @@ func checkUpdateConstraints(update *api.TimerUpdate, eventID string, version uin } func executeSQL(ctx context.Context, exec sqlexec.SQLExecutor, sql string, args ...any) ([]chunk.Row, error) { - ctx = util.WithInternalSourceType(ctx, kv.InternalTimer) + ctx = clitutil.WithInternalSourceType(ctx, kv.InternalTimer) rs, err := exec.ExecuteInternal(ctx, sql, args...) if err != nil { return nil, err diff --git a/pkg/ttl/cache/infoschema.go b/pkg/ttl/cache/infoschema.go index 3724be7738f39..c9ca50eeaa760 100644 --- a/pkg/ttl/cache/infoschema.go +++ b/pkg/ttl/cache/infoschema.go @@ -56,7 +56,7 @@ func (isc *InfoSchemaCache) Update(se session.Session) error { if tblInfo.TTLInfo == nil || !tblInfo.TTLInfo.Enable || tblInfo.State != model.StatePublic { continue } - dbName := model.NewCIStr(v.DBName) + dbName := v.DBName logger := logutil.BgLogger(). With(zap.String("schema", dbName.L), zap.Int64("tableID", tblInfo.ID), zap.String("tableName", tblInfo.Name.L)) diff --git a/pkg/ttl/cache/table.go b/pkg/ttl/cache/table.go index 31292e18c9f68..6a72a278d1568 100644 --- a/pkg/ttl/cache/table.go +++ b/pkg/ttl/cache/table.go @@ -111,7 +111,7 @@ type PhysicalTable struct { TimeColumn *model.ColumnInfo } -// NewBasePhysicalTable create a new PhysicalTable with specific timeColunm. +// NewBasePhysicalTable create a new PhysicalTable with specific timeColumn. func NewBasePhysicalTable(schema model.CIStr, tbl *model.TableInfo, partition model.CIStr, diff --git a/pkg/ttl/ttlworker/BUILD.bazel b/pkg/ttl/ttlworker/BUILD.bazel index 5d36b6a909a56..6b69d9a73fc10 100644 --- a/pkg/ttl/ttlworker/BUILD.bazel +++ b/pkg/ttl/ttlworker/BUILD.bazel @@ -40,7 +40,6 @@ go_library( "//pkg/util/logutil", "//pkg/util/sqlexec", "//pkg/util/timeutil", - "@com_github_ngaut_pools//:pools", "@com_github_pingcap_errors//:errors", "@com_github_pingcap_failpoint//:failpoint", "@com_github_tikv_client_go_v2//tikv", @@ -83,7 +82,7 @@ go_test( "//pkg/session", "//pkg/sessionctx", "//pkg/sessionctx/variable", - "//pkg/statistics/handle/autoanalyze/exec", + "//pkg/statistics", "//pkg/store/mockstore", "//pkg/testkit", "//pkg/timer/api", @@ -93,6 +92,7 @@ go_test( "//pkg/ttl/metrics", "//pkg/ttl/session", "//pkg/types", + "//pkg/util", "//pkg/util/chunk", "//pkg/util/logutil", "//pkg/util/mock", diff --git a/pkg/ttl/ttlworker/del.go b/pkg/ttl/ttlworker/del.go index c0f67b854beb3..d58e3e8ff622d 100644 --- a/pkg/ttl/ttlworker/del.go +++ b/pkg/ttl/ttlworker/del.go @@ -28,6 +28,7 @@ import ( "github.com/pingcap/tidb/pkg/ttl/session" "github.com/pingcap/tidb/pkg/ttl/sqlbuilder" "github.com/pingcap/tidb/pkg/types" + "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/logutil" "go.uber.org/zap" "golang.org/x/time/rate" @@ -240,11 +241,11 @@ func (b *ttlDelRetryBuffer) recordRetryItem(task *ttlDeleteTask, retryRows [][]t type ttlDeleteWorker struct { baseWorker delCh <-chan *ttlDeleteTask - sessionPool sessionPool + sessionPool util.SessionPool retryBuffer *ttlDelRetryBuffer } -func newDeleteWorker(delCh <-chan *ttlDeleteTask, sessPool sessionPool) *ttlDeleteWorker { +func newDeleteWorker(delCh <-chan *ttlDeleteTask, sessPool util.SessionPool) *ttlDeleteWorker { w := &ttlDeleteWorker{ delCh: delCh, sessionPool: sessPool, diff --git a/pkg/ttl/ttlworker/job_manager.go b/pkg/ttl/ttlworker/job_manager.go index 79e844fb9bc66..81b4f3a52e625 100644 --- a/pkg/ttl/ttlworker/job_manager.go +++ b/pkg/ttl/ttlworker/job_manager.go @@ -33,6 +33,7 @@ import ( "github.com/pingcap/tidb/pkg/ttl/client" "github.com/pingcap/tidb/pkg/ttl/metrics" "github.com/pingcap/tidb/pkg/ttl/session" + "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/intest" "github.com/pingcap/tidb/pkg/util/logutil" "github.com/pingcap/tidb/pkg/util/timeutil" @@ -97,7 +98,7 @@ type JobManager struct { // `scanWorkers` and `delWorkers` can be modified by setting variables at any time baseWorker - sessPool sessionPool + sessPool util.SessionPool // id is the ddl id of this instance id string @@ -125,7 +126,7 @@ type JobManager struct { } // NewJobManager creates a new ttl job manager -func NewJobManager(id string, sessPool sessionPool, store kv.Storage, etcdCli *clientv3.Client, leaderFunc func() bool) (manager *JobManager) { +func NewJobManager(id string, sessPool util.SessionPool, store kv.Storage, etcdCli *clientv3.Client, leaderFunc func() bool) (manager *JobManager) { manager = &JobManager{} manager.id = id manager.store = store @@ -572,12 +573,23 @@ func (m *JobManager) rescheduleJobs(se session.Session, now time.Time) { now = now.In(tz) } - if !variable.EnableTTLJob.Load() || !timeutil.WithinDayTimePeriod(variable.TTLJobScheduleWindowStartTime.Load(), variable.TTLJobScheduleWindowEndTime.Load(), now) { + cancelJobs := false + cancelReason := "" + switch { + case !variable.EnableTTLJob.Load(): + cancelJobs = true + cancelReason = "tidb_ttl_job_enable turned off" + case !timeutil.WithinDayTimePeriod(variable.TTLJobScheduleWindowStartTime.Load(), variable.TTLJobScheduleWindowEndTime.Load(), now): + cancelJobs = true + cancelReason = "out of TTL job schedule window" + } + + if cancelJobs { if len(m.runningJobs) > 0 { for _, job := range m.runningJobs { - logutil.Logger(m.ctx).Info("cancel job because tidb_ttl_job_enable turned off", zap.String("jobID", job.id)) + logutil.Logger(m.ctx).Info(fmt.Sprintf("cancel job because %s", cancelReason), zap.String("jobID", job.id)) - summary, err := summarizeErr(errors.New("ttl job is disabled")) + summary, err := summarizeErr(errors.New(cancelReason)) if err != nil { logutil.Logger(m.ctx).Info("fail to summarize job", zap.Error(err)) } @@ -1070,7 +1082,7 @@ GROUP BY if err != nil { logutil.Logger(ctx).Error("failed to get table's job interval", zap.Error(err), - zap.String("db", v.DBName), + zap.String("db", v.DBName.O), zap.String("table", tblInfo.Name.String()), ) interval = time.Hour @@ -1130,12 +1142,12 @@ type SubmitTTLManagerJobRequest struct { type managerJobAdapter struct { store kv.Storage - sessPool sessionPool + sessPool util.SessionPool requestCh chan<- *SubmitTTLManagerJobRequest } // NewManagerJobAdapter creates a managerJobAdapter -func NewManagerJobAdapter(store kv.Storage, sessPool sessionPool, requestCh chan<- *SubmitTTLManagerJobRequest) TTLJobAdapter { +func NewManagerJobAdapter(store kv.Storage, sessPool util.SessionPool, requestCh chan<- *SubmitTTLManagerJobRequest) TTLJobAdapter { return &managerJobAdapter{store: store, sessPool: sessPool, requestCh: requestCh} } @@ -1148,7 +1160,7 @@ func (a *managerJobAdapter) CanSubmitJob(tableID, physicalID int64) bool { defer se.Close() is := se.GetDomainInfoSchema().(infoschema.InfoSchema) - tbl, ok := is.TableByID(tableID) + tbl, ok := is.TableByID(context.Background(), tableID) if !ok { return false } diff --git a/pkg/ttl/ttlworker/job_manager_integration_test.go b/pkg/ttl/ttlworker/job_manager_integration_test.go index 1cfae74ba04b6..8458df879f146 100644 --- a/pkg/ttl/ttlworker/job_manager_integration_test.go +++ b/pkg/ttl/ttlworker/job_manager_integration_test.go @@ -33,7 +33,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/ast" "github.com/pingcap/tidb/pkg/parser/model" dbsession "github.com/pingcap/tidb/pkg/session" - "github.com/pingcap/tidb/pkg/statistics/handle/autoanalyze/exec" + "github.com/pingcap/tidb/pkg/statistics" "github.com/pingcap/tidb/pkg/testkit" timerapi "github.com/pingcap/tidb/pkg/timer/api" timertable "github.com/pingcap/tidb/pkg/timer/tablestore" @@ -218,10 +218,10 @@ func TestTTLAutoAnalyze(t *testing.T) { failpoint.Enable("github.com/pingcap/tidb/pkg/ttl/ttlworker/task-manager-loop-interval", fmt.Sprintf("return(%d)", time.Second)) defer failpoint.Disable("github.com/pingcap/tidb/pkg/ttl/ttlworker/task-manager-loop-interval") - originAutoAnalyzeMinCnt := exec.AutoAnalyzeMinCnt - exec.AutoAnalyzeMinCnt = 0 + originAutoAnalyzeMinCnt := statistics.AutoAnalyzeMinCnt + statistics.AutoAnalyzeMinCnt = 0 defer func() { - exec.AutoAnalyzeMinCnt = originAutoAnalyzeMinCnt + statistics.AutoAnalyzeMinCnt = originAutoAnalyzeMinCnt }() store, dom := testkit.CreateMockStoreAndDomain(t) @@ -404,10 +404,10 @@ func TestTTLJobDisable(t *testing.T) { failpoint.Enable("github.com/pingcap/tidb/pkg/ttl/ttlworker/resize-workers-interval", fmt.Sprintf("return(%d)", time.Second)) defer failpoint.Disable("github.com/pingcap/tidb/pkg/ttl/ttlworker/resize-workers-interval") - originAutoAnalyzeMinCnt := exec.AutoAnalyzeMinCnt - exec.AutoAnalyzeMinCnt = 0 + originAutoAnalyzeMinCnt := statistics.AutoAnalyzeMinCnt + statistics.AutoAnalyzeMinCnt = 0 defer func() { - exec.AutoAnalyzeMinCnt = originAutoAnalyzeMinCnt + statistics.AutoAnalyzeMinCnt = originAutoAnalyzeMinCnt }() store, dom := testkit.CreateMockStoreAndDomain(t) @@ -583,7 +583,7 @@ func TestRescheduleJobs(t *testing.T) { tk.MustExec("set global tidb_ttl_job_schedule_window_start_time='23:58'") tk.MustExec("set global tidb_ttl_job_schedule_window_end_time='23:59'") anotherManager.RescheduleJobs(se, time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, now.Nanosecond(), now.Location())) - tk.MustQuery("select last_job_summary->>'$.scan_task_err' from mysql.tidb_ttl_table_status").Check(testkit.Rows("ttl job is disabled")) + tk.MustQuery("select last_job_summary->>'$.scan_task_err' from mysql.tidb_ttl_table_status").Check(testkit.Rows("out of TTL job schedule window")) } func TestRescheduleJobsAfterTableDropped(t *testing.T) { diff --git a/pkg/ttl/ttlworker/job_manager_test.go b/pkg/ttl/ttlworker/job_manager_test.go index 61c74683602d9..775744f67672f 100644 --- a/pkg/ttl/ttlworker/job_manager_test.go +++ b/pkg/ttl/ttlworker/job_manager_test.go @@ -28,6 +28,7 @@ import ( "github.com/pingcap/tidb/pkg/ttl/cache" "github.com/pingcap/tidb/pkg/ttl/session" "github.com/pingcap/tidb/pkg/types" + "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/chunk" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -143,7 +144,7 @@ var updateStatusSQL = "SELECT LOW_PRIORITY table_id,parent_table_id,table_statis type TTLJob = ttlJob // GetSessionForTest is used for test -func GetSessionForTest(pool sessionPool) (session.Session, error) { +func GetSessionForTest(pool util.SessionPool) (session.Session, error) { return getSession(pool) } @@ -209,10 +210,6 @@ func (j *ttlJob) ID() string { return j.id } -func newMockTTLJob(tbl *cache.PhysicalTable, status cache.JobStatus) *ttlJob { - return &ttlJob{tbl: tbl, status: status} -} - func TestReadyForLockHBTimeoutJobTables(t *testing.T) { tbl := newMockTTLTbl(t, "t1") m := NewJobManager("test-id", nil, nil, nil, nil) diff --git a/pkg/ttl/ttlworker/scan.go b/pkg/ttl/ttlworker/scan.go index 2a28b2dc13bcc..2390ae83670f4 100644 --- a/pkg/ttl/ttlworker/scan.go +++ b/pkg/ttl/ttlworker/scan.go @@ -28,6 +28,7 @@ import ( "github.com/pingcap/tidb/pkg/ttl/metrics" "github.com/pingcap/tidb/pkg/ttl/sqlbuilder" "github.com/pingcap/tidb/pkg/types" + "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/chunk" "github.com/pingcap/tidb/pkg/util/logutil" "go.uber.org/zap" @@ -97,7 +98,7 @@ func (t *ttlScanTask) getDatumRows(rows []chunk.Row) [][]types.Datum { return datums } -func (t *ttlScanTask) doScan(ctx context.Context, delCh chan<- *ttlDeleteTask, sessPool sessionPool) *ttlScanTaskExecResult { +func (t *ttlScanTask) doScan(ctx context.Context, delCh chan<- *ttlDeleteTask, sessPool util.SessionPool) *ttlScanTaskExecResult { // TODO: merge the ctx and the taskCtx in ttl scan task, to allow both "cancel" and gracefully stop workers // now, the taskCtx is only check at the beginning of every loop taskCtx := t.ctx @@ -240,10 +241,10 @@ type ttlScanWorker struct { curTaskResult *ttlScanTaskExecResult delCh chan<- *ttlDeleteTask notifyStateCh chan<- any - sessionPool sessionPool + sessionPool util.SessionPool } -func newScanWorker(delCh chan<- *ttlDeleteTask, notifyStateCh chan<- any, sessPool sessionPool) *ttlScanWorker { +func newScanWorker(delCh chan<- *ttlDeleteTask, notifyStateCh chan<- any, sessPool util.SessionPool) *ttlScanWorker { w := &ttlScanWorker{ delCh: delCh, notifyStateCh: notifyStateCh, diff --git a/pkg/ttl/ttlworker/session.go b/pkg/ttl/ttlworker/session.go index 1c0e0e29cdc1e..b7b3e558d96ee 100644 --- a/pkg/ttl/ttlworker/session.go +++ b/pkg/ttl/ttlworker/session.go @@ -19,7 +19,6 @@ import ( "fmt" "time" - "github.com/ngaut/pools" "github.com/pingcap/errors" "github.com/pingcap/tidb/pkg/parser/terror" "github.com/pingcap/tidb/pkg/sessionctx" @@ -27,6 +26,7 @@ import ( "github.com/pingcap/tidb/pkg/ttl/cache" "github.com/pingcap/tidb/pkg/ttl/metrics" "github.com/pingcap/tidb/pkg/ttl/session" + "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/chunk" "github.com/pingcap/tidb/pkg/util/intest" "github.com/pingcap/tidb/pkg/util/logutil" @@ -55,12 +55,7 @@ var DetachStatsCollector = func(s sqlexec.SQLExecutor) sqlexec.SQLExecutor { return s } -type sessionPool interface { - Get() (pools.Resource, error) - Put(pools.Resource) -} - -func getSession(pool sessionPool) (session.Session, error) { +func getSession(pool util.SessionPool) (session.Session, error) { resource, err := pool.Get() if err != nil { return nil, err diff --git a/pkg/ttl/ttlworker/session_test.go b/pkg/ttl/ttlworker/session_test.go index 56c018005c6c0..8b7f79a83da1b 100644 --- a/pkg/ttl/ttlworker/session_test.go +++ b/pkg/ttl/ttlworker/session_test.go @@ -135,6 +135,8 @@ func (p *mockSessionPool) Get() (pools.Resource, error) { func (p *mockSessionPool) Put(pools.Resource) {} +func (p *mockSessionPool) Close() {} + func newMockSessionPool(t *testing.T, tbl ...*cache.PhysicalTable) *mockSessionPool { return &mockSessionPool{ se: newMockSession(t, tbl...), diff --git a/pkg/ttl/ttlworker/task_manager.go b/pkg/ttl/ttlworker/task_manager.go index 375a19c9e7836..952f4d6225c12 100644 --- a/pkg/ttl/ttlworker/task_manager.go +++ b/pkg/ttl/ttlworker/task_manager.go @@ -26,6 +26,7 @@ import ( "github.com/pingcap/tidb/pkg/ttl/cache" "github.com/pingcap/tidb/pkg/ttl/metrics" "github.com/pingcap/tidb/pkg/ttl/session" + "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/intest" "github.com/pingcap/tidb/pkg/util/logutil" "github.com/tikv/client-go/v2/tikv" @@ -80,7 +81,7 @@ var errTooManyRunningTasks = errors.New("there are too many running tasks") // taskManager schedules and manages the ttl tasks on this instance type taskManager struct { ctx context.Context - sessPool sessionPool + sessPool util.SessionPool id string @@ -96,7 +97,7 @@ type taskManager struct { notifyStateCh chan any } -func newTaskManager(ctx context.Context, sessPool sessionPool, infoSchemaCache *cache.InfoSchemaCache, id string, store kv.Storage) *taskManager { +func newTaskManager(ctx context.Context, sessPool util.SessionPool, infoSchemaCache *cache.InfoSchemaCache, id string, store kv.Storage) *taskManager { return &taskManager{ ctx: logutil.WithKeyValue(ctx, "ttl-worker", "task-manager"), sessPool: sessPool, diff --git a/pkg/ttl/ttlworker/timer_sync.go b/pkg/ttl/ttlworker/timer_sync.go index de07bb83f6cb5..bc18b94241d84 100644 --- a/pkg/ttl/ttlworker/timer_sync.go +++ b/pkg/ttl/ttlworker/timer_sync.go @@ -28,6 +28,7 @@ import ( timerapi "github.com/pingcap/tidb/pkg/timer/api" "github.com/pingcap/tidb/pkg/ttl/cache" "github.com/pingcap/tidb/pkg/ttl/session" + "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/logutil" "go.uber.org/zap" "golang.org/x/exp/maps" @@ -48,7 +49,7 @@ type TTLTimerData struct { // TTLTimersSyncer is used to sync timers for ttl type TTLTimersSyncer struct { - pool sessionPool + pool util.SessionPool cli timerapi.TimerClient key2Timers map[string]*timerapi.TimerRecord lastPullTimers time.Time @@ -59,7 +60,7 @@ type TTLTimersSyncer struct { } // NewTTLTimerSyncer creates a new TTLTimersSyncer -func NewTTLTimerSyncer(pool sessionPool, cli timerapi.TimerClient) *TTLTimersSyncer { +func NewTTLTimerSyncer(pool util.SessionPool, cli timerapi.TimerClient) *TTLTimersSyncer { return &TTLTimersSyncer{ pool: pool, cli: cli, @@ -187,7 +188,7 @@ func (g *TTLTimersSyncer) SyncTimers(ctx context.Context, is infoschema.InfoSche ch := is.ListTablesWithSpecialAttribute(infoschema.TTLAttribute) for _, v := range ch { for _, tblInfo := range v.TableInfos { - for _, key := range g.syncTimersForTable(ctx, se, model.NewCIStr(v.DBName), tblInfo) { + for _, key := range g.syncTimersForTable(ctx, se, v.DBName, tblInfo) { currentTimerKeys[key] = struct{}{} } } diff --git a/pkg/util/BUILD.bazel b/pkg/util/BUILD.bazel index 89f7fdfaaf8f9..c45eb7e1a5798 100644 --- a/pkg/util/BUILD.bazel +++ b/pkg/util/BUILD.bazel @@ -16,6 +16,7 @@ go_library( "rlimit_other.go", "rlimit_windows.go", "security.go", + "session_pool.go", "tokenlimiter.go", "urls.go", "util.go", @@ -26,6 +27,7 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/config", + "//pkg/domain/resourcegroup", "//pkg/infoschema/context", "//pkg/kv", "//pkg/metrics", @@ -43,6 +45,7 @@ go_library( "//pkg/util/logutil", "//pkg/util/memory", "//pkg/util/tls", + "@com_github_ngaut_pools//:pools", "@com_github_pingcap_errors//:errors", "@com_github_pingcap_failpoint//:failpoint", "@com_github_pingcap_log//:log", @@ -68,6 +71,7 @@ go_test( "prefix_helper_test.go", "processinfo_test.go", "security_test.go", + "session_pool_test.go", "urls_test.go", "util_test.go", "wait_group_wrapper_test.go", @@ -82,6 +86,7 @@ go_test( "//pkg/parser/model", "//pkg/parser/mysql", "//pkg/parser/terror", + "//pkg/sessionctx", "//pkg/sessionctx/stmtctx", "//pkg/store/mockstore", "//pkg/testkit/testsetup", @@ -89,6 +94,7 @@ go_test( "//pkg/util/fastrand", "//pkg/util/logutil", "//pkg/util/memory", + "@com_github_ngaut_pools//:pools", "@com_github_pingcap_errors//:errors", "@com_github_stretchr_testify//assert", "@com_github_stretchr_testify//require", diff --git a/pkg/util/codec/codec.go b/pkg/util/codec/codec.go index ae21910fca282..b5d937c453ee3 100644 --- a/pkg/util/codec/codec.go +++ b/pkg/util/codec/codec.go @@ -55,6 +55,8 @@ const IntHandleFlag = intFlag const ( sizeUint64 = unsafe.Sizeof(uint64(0)) + sizeUint8 = unsafe.Sizeof(uint8(0)) + sizeUint32 = unsafe.Sizeof(uint32(0)) sizeFloat64 = unsafe.Sizeof(float64(0)) ) @@ -415,9 +417,9 @@ const ( // the unsigned flag can be ignored, if the join key is or // the unsigned flag can not be ignored, if the unsigned flag can not be ignored, the key can not be inlined NeedSignFlag - // KeepStringLength when serialize string column, if the string column can use raw data as the key, then it can be inlined, - // in this case, the string length should be included in the serialized key - KeepStringLength + // KeepVarColumnLength when serialize var-length column, whether record the column length or not. If the join key only contains one var-length + // column, and the key is not inlined, then no need to record the column length, otherwise, always need to record the column length + KeepVarColumnLength ) // SerializeKeys is used in join @@ -429,6 +431,10 @@ func SerializeKeys(typeCtx types.Context, chk *chunk.Chunk, tp *types.FieldType, } return (filterVector != nil && !filterVector[index]) || (nullVector != nil && nullVector[index]) } + var jsonHashBuffer []byte + if tp.GetType() == mysql.TypeJSON { + jsonHashBuffer = make([]byte, 0) + } switch tp.GetType() { case mysql.TypeTiny, mysql.TypeShort, mysql.TypeInt24, mysql.TypeLong, mysql.TypeLonglong, mysql.TypeYear: i64s := column.Int64s() @@ -480,7 +486,7 @@ func SerializeKeys(typeCtx types.Context, chk *chunk.Chunk, tp *types.FieldType, } data := ConvertByCollation(column.GetBytes(physicalRowIndex), tp) size := uint64(len(data)) - if serializeMode == KeepStringLength { + if serializeMode == KeepVarColumnLength { serializedKeysVector[logicalRowIndex] = append(serializedKeysVector[logicalRowIndex], unsafe.Slice((*byte)(unsafe.Pointer(&size)), sizeUint64)...) } serializedKeysVector[logicalRowIndex] = append(serializedKeysVector[logicalRowIndex], data...) @@ -518,6 +524,11 @@ func SerializeKeys(typeCtx types.Context, chk *chunk.Chunk, tp *types.FieldType, if err != nil { return err } + if serializeMode == KeepVarColumnLength { + // for decimal, the size must be less than uint8.MAX, so use uint8 here + size := uint8(len(b)) + serializedKeysVector[logicalRowIndex] = append(serializedKeysVector[logicalRowIndex], unsafe.Slice((*byte)(unsafe.Pointer(&size)), sizeUint8)...) + } serializedKeysVector[logicalRowIndex] = append(serializedKeysVector[logicalRowIndex], b...) } case mysql.TypeEnum: @@ -537,7 +548,13 @@ func SerializeKeys(typeCtx types.Context, chk *chunk.Chunk, tp *types.FieldType, if enum, err := types.ParseEnumValue(tp.GetElems(), v); err == nil { str = enum.Name } - serializedKeysVector[logicalRowIndex] = append(serializedKeysVector[logicalRowIndex], ConvertByCollation(hack.Slice(str), tp)...) + b := ConvertByCollation(hack.Slice(str), tp) + if serializeMode == KeepVarColumnLength { + // for enum, the size must be less than uint32.MAX, so use uint32 here + size := uint32(len(b)) + serializedKeysVector[logicalRowIndex] = append(serializedKeysVector[logicalRowIndex], unsafe.Slice((*byte)(unsafe.Pointer(&size)), sizeUint32)...) + } + serializedKeysVector[logicalRowIndex] = append(serializedKeysVector[logicalRowIndex], b...) } } case mysql.TypeSet: @@ -549,7 +566,13 @@ func SerializeKeys(typeCtx types.Context, chk *chunk.Chunk, tp *types.FieldType, if err != nil { return err } - serializedKeysVector[logicalRowIndex] = append(serializedKeysVector[logicalRowIndex], ConvertByCollation(hack.Slice(s.Name), tp)...) + b := ConvertByCollation(hack.Slice(s.Name), tp) + if serializeMode == KeepVarColumnLength { + // for enum, the size must be less than uint32.MAX, so use uint32 here + size := uint32(len(b)) + serializedKeysVector[logicalRowIndex] = append(serializedKeysVector[logicalRowIndex], unsafe.Slice((*byte)(unsafe.Pointer(&size)), sizeUint32)...) + } + serializedKeysVector[logicalRowIndex] = append(serializedKeysVector[logicalRowIndex], b...) } case mysql.TypeBit: for logicalRowIndex, physicalRowindex := range usedRows { @@ -558,7 +581,7 @@ func SerializeKeys(typeCtx types.Context, chk *chunk.Chunk, tp *types.FieldType, } v, err1 := types.BinaryLiteral(column.GetBytes(physicalRowindex)).ToInt(typeCtx) terror.Log(errors.Trace(err1)) - // check serializeMode here because enum maybe compare to integer type directly + // check serializeMode here because bit maybe compare to integer type directly if serializeMode == NeedSignFlag { serializedKeysVector[logicalRowIndex] = append(serializedKeysVector[logicalRowIndex], uintFlag) } @@ -569,7 +592,13 @@ func SerializeKeys(typeCtx types.Context, chk *chunk.Chunk, tp *types.FieldType, if canSkip(physicalRowindex) { continue } - serializedKeysVector[logicalRowIndex] = column.GetJSON(physicalRowindex).HashValue(serializedKeysVector[logicalRowIndex]) + jsonHashBuffer = jsonHashBuffer[:0] + jsonHashBuffer = column.GetJSON(physicalRowindex).HashValue(jsonHashBuffer) + if serializeMode == KeepVarColumnLength { + size := uint64(len(jsonHashBuffer)) + serializedKeysVector[logicalRowIndex] = append(serializedKeysVector[logicalRowIndex], unsafe.Slice((*byte)(unsafe.Pointer(&size)), sizeUint64)...) + } + serializedKeysVector[logicalRowIndex] = append(serializedKeysVector[logicalRowIndex], jsonHashBuffer...) } case mysql.TypeNull: for _, physicalRowindex := range usedRows { diff --git a/pkg/util/collate/bin.go b/pkg/util/collate/bin.go index b7bea150c05d4..6eeb2fce84dda 100644 --- a/pkg/util/collate/bin.go +++ b/pkg/util/collate/bin.go @@ -44,6 +44,11 @@ func (*binCollator) Pattern() WildcardPattern { return &binPattern{} } +// Clone implements Collator interface. +func (*binCollator) Clone() Collator { + return new(binCollator) +} + type derivedBinCollator struct { binCollator } @@ -75,6 +80,11 @@ func (*binPaddingCollator) Pattern() WildcardPattern { return &derivedBinPattern{} } +// Clone implements Collator interface. +func (*binPaddingCollator) Clone() Collator { + return new(binPaddingCollator) +} + type derivedBinPattern struct { patChars []rune patTypes []byte diff --git a/pkg/util/collate/collate.go b/pkg/util/collate/collate.go index 1781c9150a7df..7afb4c6238d3b 100644 --- a/pkg/util/collate/collate.go +++ b/pkg/util/collate/collate.go @@ -72,6 +72,8 @@ type Collator interface { KeyWithoutTrimRightSpace(str string) []byte // Pattern get a collation-aware WildcardPattern. Pattern() WildcardPattern + // Clone returns a copy of the collator. + Clone() Collator } // WildcardPattern is the interface used for wildcard pattern match. diff --git a/pkg/util/collate/gbk_bin.go b/pkg/util/collate/gbk_bin.go index 57d33e5191813..66672ff7f5f16 100644 --- a/pkg/util/collate/gbk_bin.go +++ b/pkg/util/collate/gbk_bin.go @@ -17,6 +17,7 @@ package collate import ( "bytes" + "github.com/pingcap/tidb/pkg/parser/charset" "github.com/pingcap/tidb/pkg/util/hack" "golang.org/x/text/encoding" ) @@ -26,6 +27,11 @@ type gbkBinCollator struct { e *encoding.Encoder } +// Clone implements Collator interface. +func (*gbkBinCollator) Clone() Collator { + return &gbkBinCollator{charset.NewCustomGBKEncoder()} +} + // Compare implement Collator interface. func (g *gbkBinCollator) Compare(a, b string) int { a = truncateTailingSpace(a) diff --git a/pkg/util/collate/gbk_chinese_ci.go b/pkg/util/collate/gbk_chinese_ci.go index 4432748172e17..ab5c4b8557f80 100644 --- a/pkg/util/collate/gbk_chinese_ci.go +++ b/pkg/util/collate/gbk_chinese_ci.go @@ -64,6 +64,11 @@ func (*gbkChineseCICollator) Pattern() WildcardPattern { return &gbkChineseCIPattern{} } +// Clone implements Collator interface. +func (*gbkChineseCICollator) Clone() Collator { + return new(gbkChineseCICollator) +} + type gbkChineseCIPattern struct { patChars []rune patTypes []byte diff --git a/pkg/util/collate/general_ci.go b/pkg/util/collate/general_ci.go index 9a0a1e3ba0be3..f2e7082205afd 100644 --- a/pkg/util/collate/general_ci.go +++ b/pkg/util/collate/general_ci.go @@ -62,6 +62,11 @@ func (*generalCICollator) Pattern() WildcardPattern { return &ciPattern{} } +// Clone implements Collator interface. +func (*generalCICollator) Clone() Collator { + return new(generalCICollator) +} + type ciPattern struct { patChars []rune patTypes []byte diff --git a/pkg/util/collate/pinyin_tidb_as_cs.go b/pkg/util/collate/pinyin_tidb_as_cs.go index f995941f4a32b..2f1cc7dd5e8ca 100644 --- a/pkg/util/collate/pinyin_tidb_as_cs.go +++ b/pkg/util/collate/pinyin_tidb_as_cs.go @@ -37,3 +37,8 @@ func (*zhPinyinTiDBASCSCollator) KeyWithoutTrimRightSpace(_ string) []byte { func (*zhPinyinTiDBASCSCollator) Pattern() WildcardPattern { panic("implement me") } + +// Clone is not implemented. +func (*zhPinyinTiDBASCSCollator) Clone() Collator { + panic("implement me") +} diff --git a/pkg/util/collate/ucaimpl/unicode_ci.go.tpl b/pkg/util/collate/ucaimpl/unicode_ci.go.tpl index cbe606d2c5764..51917df9962b1 100644 --- a/pkg/util/collate/ucaimpl/unicode_ci.go.tpl +++ b/pkg/util/collate/ucaimpl/unicode_ci.go.tpl @@ -23,6 +23,11 @@ type {{.Name}} struct { impl {{.ImplName}} } +// Clone implements Collator interface. +func (uc *{{.Name}}) Clone() Collator { + return &{{.Name}}{impl: uc.impl.Clone()} +} + // Compare implements Collator interface. func (uc *{{.Name}}) Compare(a, b string) int { a = uc.impl.Preprocess(a) diff --git a/pkg/util/collate/unicode_0400_ci_generated.go b/pkg/util/collate/unicode_0400_ci_generated.go index a35d6810a89bf..c073d4c67aad7 100644 --- a/pkg/util/collate/unicode_0400_ci_generated.go +++ b/pkg/util/collate/unicode_0400_ci_generated.go @@ -23,6 +23,11 @@ type unicodeCICollator struct { impl unicode0400Impl } +// Clone implements Collator interface. +func (uc *unicodeCICollator) Clone() Collator { + return &unicodeCICollator{impl: uc.impl.Clone()} +} + // Compare implements Collator interface. func (uc *unicodeCICollator) Compare(a, b string) int { a = uc.impl.Preprocess(a) diff --git a/pkg/util/collate/unicode_0400_ci_impl.go b/pkg/util/collate/unicode_0400_ci_impl.go index 8bc7e30861ff2..16c5656f9fab3 100644 --- a/pkg/util/collate/unicode_0400_ci_impl.go +++ b/pkg/util/collate/unicode_0400_ci_impl.go @@ -29,6 +29,10 @@ const ( type unicode0400Impl struct { } +func (unicode0400Impl) Clone() unicode0400Impl { + return unicode0400Impl{} +} + func (unicode0400Impl) Preprocess(s string) string { return truncateTailingSpace(s) } diff --git a/pkg/util/collate/unicode_0900_ai_ci_generated.go b/pkg/util/collate/unicode_0900_ai_ci_generated.go index 739edc8067733..5e160c6182231 100644 --- a/pkg/util/collate/unicode_0900_ai_ci_generated.go +++ b/pkg/util/collate/unicode_0900_ai_ci_generated.go @@ -23,6 +23,11 @@ type unicode0900AICICollator struct { impl unicode0900Impl } +// Clone implements Collator interface. +func (uc *unicode0900AICICollator) Clone() Collator { + return &unicode0900AICICollator{impl: uc.impl.Clone()} +} + // Compare implements Collator interface. func (uc *unicode0900AICICollator) Compare(a, b string) int { a = uc.impl.Preprocess(a) diff --git a/pkg/util/collate/unicode_0900_ai_ci_impl.go b/pkg/util/collate/unicode_0900_ai_ci_impl.go index be493e71cf13e..46aab8822bf26 100644 --- a/pkg/util/collate/unicode_0900_ai_ci_impl.go +++ b/pkg/util/collate/unicode_0900_ai_ci_impl.go @@ -24,6 +24,10 @@ import ( type unicode0900Impl struct { } +func (unicode0900Impl) Clone() unicode0900Impl { + return unicode0900Impl{} +} + func (unicode0900Impl) Preprocess(s string) string { return s } diff --git a/pkg/util/dbterror/ddl_terror.go b/pkg/util/dbterror/ddl_terror.go index 35d41f308631b..bd483c4226672 100644 --- a/pkg/util/dbterror/ddl_terror.go +++ b/pkg/util/dbterror/ddl_terror.go @@ -495,6 +495,8 @@ var ( ErrUnsupportedDistTask = ClassDDL.NewStdErr(mysql.ErrUnsupportedDDLOperation, parser_mysql.Message(fmt.Sprintf(mysql.MySQLErrName[mysql.ErrUnsupportedDDLOperation].Raw, "tidb_enable_dist_task setting. To utilize distributed task execution, please enable tidb_ddl_enable_fast_reorg first."), nil)) + // ErrGlobalIndexNotExplicitlySet is for Global index when not explicitly said GLOBAL, including UPDATE INDEXES + ErrGlobalIndexNotExplicitlySet = ClassDDL.NewStd(mysql.ErrGlobalIndexNotExplicitlySet) ) // ReorgRetryableErrCodes is the error codes that are retryable for reorganization. diff --git a/pkg/util/disjointset/BUILD.bazel b/pkg/util/disjointset/BUILD.bazel index 941410ed9d54b..8578cbc54206b 100644 --- a/pkg/util/disjointset/BUILD.bazel +++ b/pkg/util/disjointset/BUILD.bazel @@ -2,7 +2,10 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") go_library( name = "disjointset", - srcs = ["int_set.go"], + srcs = [ + "int_set.go", + "set.go", + ], importpath = "github.com/pingcap/tidb/pkg/util/disjointset", visibility = ["//visibility:public"], ) @@ -13,6 +16,7 @@ go_test( srcs = [ "int_set_test.go", "main_test.go", + "set_test.go", ], embed = [":disjointset"], flaky = True, diff --git a/pkg/util/disjointset/int_set.go b/pkg/util/disjointset/int_set.go index 05846e3840850..93800992792fb 100644 --- a/pkg/util/disjointset/int_set.go +++ b/pkg/util/disjointset/int_set.go @@ -14,30 +14,33 @@ package disjointset -// IntSet is the int disjoint set. -type IntSet struct { +// SimpleIntSet is the int disjoint set. +// It's not designed for sparse case. You should use it when the elements are continuous. +// Time complexity: the union operation is inverse ackermann function, which is very close to O(1). +type SimpleIntSet struct { parent []int } // NewIntSet returns a new int disjoint set. -func NewIntSet(size int) *IntSet { +func NewIntSet(size int) *SimpleIntSet { p := make([]int, size) for i := range p { p[i] = i } - return &IntSet{parent: p} + return &SimpleIntSet{parent: p} } // Union unions two sets in int disjoint set. -func (m *IntSet) Union(a int, b int) { +func (m *SimpleIntSet) Union(a int, b int) { m.parent[m.FindRoot(a)] = m.FindRoot(b) } // FindRoot finds the representative element of the set that `a` belongs to. -func (m *IntSet) FindRoot(a int) int { +func (m *SimpleIntSet) FindRoot(a int) int { if a == m.parent[a] { return a } + // Path compression, which leads the time complexity to the inverse Ackermann function. m.parent[a] = m.FindRoot(m.parent[a]) return m.parent[a] } diff --git a/pkg/util/disjointset/set.go b/pkg/util/disjointset/set.go new file mode 100644 index 0000000000000..9e8eee37f7677 --- /dev/null +++ b/pkg/util/disjointset/set.go @@ -0,0 +1,85 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package disjointset + +// Set is the universal implementation of a disjoint set. +// It's designed for sparse cases or non-integer types. +// If you are dealing with continuous integers, you should use SimpleIntSet to avoid the cost of a hash map. +// We hash the original value to an integer index and then apply the core disjoint set algorithm. +// Time complexity: the union operation has an inverse Ackermann function time complexity, which is very close to O(1). +type Set[T comparable] struct { + parent []int + val2Idx map[T]int + idx2Val map[int]T + tailIdx int +} + +// NewSet creates a disjoint set. +func NewSet[T comparable](size int) *Set[T] { + return &Set[T]{ + parent: make([]int, 0, size), + val2Idx: make(map[T]int, size), + idx2Val: make(map[int]T, size), + tailIdx: 0, + } +} + +func (s *Set[T]) findRootOriginalVal(a T) int { + idx, ok := s.val2Idx[a] + if !ok { + s.parent = append(s.parent, s.tailIdx) + s.val2Idx[a] = s.tailIdx + s.tailIdx++ + s.idx2Val[s.tailIdx-1] = a + return s.tailIdx - 1 + } + return s.findRootInternal(idx) +} + +// findRoot is an internal implementation. Call it inside findRootOriginalVal. +func (s *Set[T]) findRootInternal(a int) int { + if s.parent[a] != a { + // Path compression, which leads the time complexity to the inverse Ackermann function. + s.parent[a] = s.findRootInternal(s.parent[a]) + } + return s.parent[a] +} + +// InSameGroup checks whether a and b are in the same group. +func (s *Set[T]) InSameGroup(a, b T) bool { + return s.findRootOriginalVal(a) == s.findRootOriginalVal(b) +} + +// Union joins two sets in the disjoint set. +func (s *Set[T]) Union(a, b T) { + rootA := s.findRootOriginalVal(a) + rootB := s.findRootOriginalVal(b) + // take b as successor, respect the rootA as the root of the new set. + if rootA != rootB { + s.parent[rootB] = rootA + } +} + +// FindRoot finds the root of the set that contains a. +func (s *Set[T]) FindRoot(a T) int { + // if a is not in the set, assign a new index to it. + return s.findRootOriginalVal(a) +} + +// FindVal finds the value of the set corresponding to the index. +func (s *Set[T]) FindVal(idx int) (T, bool) { + v, ok := s.idx2Val[s.findRootInternal(idx)] + return v, ok +} diff --git a/pkg/util/disjointset/set_test.go b/pkg/util/disjointset/set_test.go new file mode 100644 index 0000000000000..ae7cada175845 --- /dev/null +++ b/pkg/util/disjointset/set_test.go @@ -0,0 +1,49 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package disjointset + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestDisjointSet(t *testing.T) { + set := NewSet[string](10) + assert.False(t, set.InSameGroup("a", "b")) + assert.Len(t, set.parent, 2) + set.Union("a", "b") + assert.True(t, set.InSameGroup("a", "b")) + assert.False(t, set.InSameGroup("a", "c")) + assert.Len(t, set.parent, 3) + assert.False(t, set.InSameGroup("b", "c")) + assert.Len(t, set.parent, 3) + set.Union("b", "c") + assert.True(t, set.InSameGroup("a", "c")) + assert.True(t, set.InSameGroup("b", "c")) + set.Union("d", "e") + set.Union("e", "f") + set.Union("f", "g") + assert.Len(t, set.parent, 7) + assert.False(t, set.InSameGroup("a", "d")) + assert.True(t, set.InSameGroup("d", "g")) + assert.False(t, set.InSameGroup("c", "g")) + set.Union("a", "g") + assert.True(t, set.InSameGroup("a", "d")) + assert.True(t, set.InSameGroup("b", "g")) + assert.True(t, set.InSameGroup("c", "f")) + assert.True(t, set.InSameGroup("a", "e")) + assert.True(t, set.InSameGroup("b", "c")) +} diff --git a/pkg/util/domainutil/repair_vars.go b/pkg/util/domainutil/repair_vars.go index 1d735ddfbbde3..1bd3bc5ff4758 100644 --- a/pkg/util/domainutil/repair_vars.go +++ b/pkg/util/domainutil/repair_vars.go @@ -80,12 +80,12 @@ func (r *repairInfo) CheckAndFetchRepairedTable(di *model.DBInfo, tbl *model.Tab if isRepair { // Record the repaired table in Map. if repairedDB, ok := r.repairDBInfoMap[di.ID]; ok { - repairedDB.Tables = append(repairedDB.Tables, tbl) + repairedDB.Deprecated.Tables = append(repairedDB.Deprecated.Tables, tbl) } else { // Shallow copy the DBInfo. repairedDB := di.Copy() // Clean the tables and set repaired table. - repairedDB.Tables = []*model.TableInfo{tbl} + repairedDB.Deprecated.Tables = []*model.TableInfo{tbl} r.repairDBInfoMap[di.ID] = repairedDB } return true @@ -101,7 +101,7 @@ func (r *repairInfo) GetRepairedTableInfoByTableName(schemaLowerName, tableLower if db.Name.L != schemaLowerName { continue } - for _, t := range db.Tables { + for _, t := range db.Deprecated.Tables { if t.Name.L == tableLowerName { return t, db } @@ -126,13 +126,15 @@ func (r *repairInfo) RemoveFromRepairInfo(schemaLowerName, tableLowerName string // Remove from the repair map. for _, db := range r.repairDBInfoMap { if db.Name.L == schemaLowerName { - for j, t := range db.Tables { + tables := db.Deprecated.Tables + for j, t := range tables { if t.Name.L == tableLowerName { - db.Tables = append(db.Tables[:j], db.Tables[j+1:]...) + tables = append(tables[:j], tables[j+1:]...) break } } - if len(db.Tables) == 0 { + db.Deprecated.Tables = tables + if len(tables) == 0 { delete(r.repairDBInfoMap, db.ID) } break diff --git a/pkg/util/execdetails/execdetails.go b/pkg/util/execdetails/execdetails.go index 2de39a86ce620..e617a0d7abd37 100644 --- a/pkg/util/execdetails/execdetails.go +++ b/pkg/util/execdetails/execdetails.go @@ -1301,6 +1301,7 @@ func NewRuntimeStatsColl(reuse *RuntimeStatsColl) *RuntimeStatsColl { // RegisterStats register execStat for a executor. func (e *RuntimeStatsColl) RegisterStats(planID int, info RuntimeStats) { e.mu.Lock() + defer e.mu.Unlock() stats, ok := e.rootStats[planID] if !ok { stats = NewRootRuntimeStats() @@ -1318,7 +1319,6 @@ func (e *RuntimeStatsColl) RegisterStats(planID int, info RuntimeStats) { if !found { stats.groupRss = append(stats.groupRss, info.Clone()) } - e.mu.Unlock() } // GetBasicRuntimeStats gets basicRuntimeStats for a executor. diff --git a/pkg/util/expensivequery/BUILD.bazel b/pkg/util/expensivequery/BUILD.bazel index b3d8412e55421..bb3d26994a3de 100644 --- a/pkg/util/expensivequery/BUILD.bazel +++ b/pkg/util/expensivequery/BUILD.bazel @@ -8,6 +8,7 @@ go_library( deps = [ "//pkg/metrics", "//pkg/sessionctx/variable", + "//pkg/statistics/handle/util", "//pkg/util", "//pkg/util/logutil", "@com_github_pingcap_log//:log", diff --git a/pkg/util/expensivequery/expensivequery.go b/pkg/util/expensivequery/expensivequery.go index 9a65b1f002ada..a11c73251acfb 100644 --- a/pkg/util/expensivequery/expensivequery.go +++ b/pkg/util/expensivequery/expensivequery.go @@ -21,6 +21,7 @@ import ( "github.com/pingcap/log" "github.com/pingcap/tidb/pkg/metrics" "github.com/pingcap/tidb/pkg/sessionctx/variable" + statsutil "github.com/pingcap/tidb/pkg/statistics/handle/util" "github.com/pingcap/tidb/pkg/util" "github.com/pingcap/tidb/pkg/util/logutil" "go.uber.org/zap" @@ -95,16 +96,21 @@ func (eqh *Handle) Run() { if info.MaxExecutionTime > 0 && costTime > time.Duration(info.MaxExecutionTime)*time.Millisecond { logutil.BgLogger().Warn("execution timeout, kill it", zap.Duration("costTime", costTime), zap.Duration("maxExecutionTime", time.Duration(info.MaxExecutionTime)*time.Millisecond), zap.String("processInfo", info.String())) - sm.Kill(info.ID, true, true) + sm.Kill(info.ID, true, true, false) } - if info.ID == sm.GetAutoAnalyzeProcID() { + if statsutil.GlobalAutoAnalyzeProcessList.Contains(info.ID) { maxAutoAnalyzeTime := variable.MaxAutoAnalyzeTime.Load() if maxAutoAnalyzeTime > 0 && costTime > time.Duration(maxAutoAnalyzeTime)*time.Second { logutil.BgLogger().Warn("auto analyze timeout, kill it", zap.Duration("costTime", costTime), zap.Duration("maxAutoAnalyzeTime", time.Duration(maxAutoAnalyzeTime)*time.Second), zap.String("processInfo", info.String())) - sm.Kill(info.ID, true, false) + sm.Kill(info.ID, true, false, false) } } + if info.RunawayChecker != nil && info.RunawayChecker.CheckRuleKillAction() { + logutil.BgLogger().Warn("runaway query timeout", zap.Duration("costTime", costTime), zap.String("groupName", info.ResourceGroupName), + zap.String("rule", info.RunawayChecker.Rule()), zap.String("processInfo", info.String())) + sm.Kill(info.ID, true, false, true) + } } threshold = atomic.LoadUint64(&variable.ExpensiveQueryTimeThreshold) txnThreshold = atomic.LoadUint64(&variable.ExpensiveTxnTimeThreshold) diff --git a/pkg/util/filter/schema.go b/pkg/util/filter/schema.go index 224dbd83ec958..e8ffffd00c864 100644 --- a/pkg/util/filter/schema.go +++ b/pkg/util/filter/schema.go @@ -21,8 +21,6 @@ import ( var ( // DMHeartbeatSchema is the heartbeat schema name DMHeartbeatSchema = "DM_HEARTBEAT" - // DMHeartbeatTable is heartbeat table name - DMHeartbeatTable = "HEARTBEAT" // InformationSchemaName is the `INFORMATION_SCHEMA` database name. InformationSchemaName = "INFORMATION_SCHEMA" // PerformanceSchemaName is the `PERFORMANCE_SCHEMA` database name. diff --git a/pkg/util/hint/hint.go b/pkg/util/hint/hint.go index cbf454b518f55..b28e5c4dc1777 100644 --- a/pkg/util/hint/hint.go +++ b/pkg/util/hint/hint.go @@ -56,7 +56,7 @@ const ( HintINLJ = "inl_join" // HintINLHJ is hint enforce index nested loop hash join. HintINLHJ = "inl_hash_join" - // HintINLMJ is hint enforce index nested loop merge join. + // Deprecated: HintINLMJ is hint enforce index nested loop merge join. HintINLMJ = "inl_merge_join" // HintNoIndexJoin is the hint to enforce the query not to use index join. HintNoIndexJoin = "no_index_join" @@ -776,7 +776,10 @@ func ParsePlanHints(hints []*ast.TableOptimizerHint, case HintINLHJ: inlhjTables = append(inlhjTables, tableNames2HintTableInfo(currentDB, hint.HintName.L, hint.Tables, hintProcessor, currentLevel, warnHandler)...) case HintINLMJ: - inlmjTables = append(inlmjTables, tableNames2HintTableInfo(currentDB, hint.HintName.L, hint.Tables, hintProcessor, currentLevel, warnHandler)...) + if hint.Tables != nil { + warnHandler.SetHintWarning("The INDEX MERGE JOIN hint is deprecated for usage, try other hints.") + continue + } case TiDBHashJoin, HintHJ: hashJoinTables = append(hashJoinTables, tableNames2HintTableInfo(currentDB, hint.HintName.L, hint.Tables, hintProcessor, currentLevel, warnHandler)...) case HintNoHashJoin: diff --git a/pkg/util/intset/BUILD.bazel b/pkg/util/intset/BUILD.bazel index 2838f219d95cf..20bdb7c16a108 100644 --- a/pkg/util/intset/BUILD.bazel +++ b/pkg/util/intset/BUILD.bazel @@ -20,7 +20,6 @@ go_test( shard_count = 5, deps = [ "@com_github_stretchr_testify//require", - "@org_golang_x_exp//maps", "@org_golang_x_tools//container/intsets", ], ) diff --git a/pkg/util/intset/fast_int_set_test.go b/pkg/util/intset/fast_int_set_test.go index 85d8a818086d0..c041863409843 100644 --- a/pkg/util/intset/fast_int_set_test.go +++ b/pkg/util/intset/fast_int_set_test.go @@ -16,6 +16,7 @@ package intset import ( "fmt" + "maps" "math/rand" "reflect" "runtime" @@ -25,7 +26,6 @@ import ( "time" "github.com/stretchr/testify/require" - "golang.org/x/exp/maps" "golang.org/x/tools/container/intsets" ) @@ -95,8 +95,7 @@ func (is IntSet) Equals(target IntSet) bool { } func (is *IntSet) CopyFrom(target IntSet) { - *is = NewIntSetWithCap(len(target)) - maps.Copy(*is, target) + *is = maps.Clone(target) } func (is IntSet) SortedArray() []int { @@ -116,10 +115,6 @@ func NewIntSet() IntSet { return make(map[int]struct{}) } -func NewIntSetWithCap(c int) IntSet { - return make(map[int]struct{}, c) -} - func TestFastIntSetBasic(t *testing.T) { // Test Insert, Remove, Len, Has. fis := FastIntSet{} diff --git a/pkg/util/keydecoder/keydecoder.go b/pkg/util/keydecoder/keydecoder.go index a8e89ae1141df..115845c29f21f 100644 --- a/pkg/util/keydecoder/keydecoder.go +++ b/pkg/util/keydecoder/keydecoder.go @@ -15,6 +15,7 @@ package keydecoder import ( + "context" "fmt" "github.com/pingcap/errors" @@ -81,7 +82,7 @@ func DecodeKey(key []byte, is infoschema.InfoSchema) (DecodedKey, error) { } result.TableID = tableOrPartitionID - table, tableFound := is.TableByID(tableOrPartitionID) + table, tableFound := is.TableByID(context.Background(), tableOrPartitionID) // The schema may have changed since when the key is get. // Then we just omit the table name and show the table ID only. diff --git a/pkg/util/mathutil/BUILD.bazel b/pkg/util/mathutil/BUILD.bazel index b5776dfe4d411..dc2201dff350c 100644 --- a/pkg/util/mathutil/BUILD.bazel +++ b/pkg/util/mathutil/BUILD.bazel @@ -9,7 +9,10 @@ go_library( ], importpath = "github.com/pingcap/tidb/pkg/util/mathutil", visibility = ["//visibility:public"], - deps = ["@org_golang_x_exp//constraints"], + deps = [ + "//pkg/util/intest", + "@org_golang_x_exp//constraints", + ], ) go_test( diff --git a/pkg/util/mathutil/math.go b/pkg/util/mathutil/math.go index 96c0a4a79883a..db3987d07224d 100644 --- a/pkg/util/mathutil/math.go +++ b/pkg/util/mathutil/math.go @@ -17,6 +17,7 @@ package mathutil import ( "math" + "github.com/pingcap/tidb/pkg/util/intest" "golang.org/x/exp/constraints" ) @@ -111,3 +112,23 @@ func NextPowerOfTwo(i int64) int64 { } return i } + +// Divide2Batches divides 'total' into 'batches', and returns the size of each batch. +// Σ(batchSizes) = 'total'. if 'total' < 'batches', we return 'total' batches with size 1. +// 'total' is allowed to be 0. +func Divide2Batches(total, batches int) []int { + result := make([]int, 0, batches) + quotient := total / batches + remainder := total % batches + for total > 0 { + size := quotient + if remainder > 0 { + size++ + remainder-- + } + intest.Assert(size > 0, "size should be positive") + result = append(result, size) + total -= size + } + return result +} diff --git a/pkg/util/mathutil/math_test.go b/pkg/util/mathutil/math_test.go index 5c3276a30b2e3..6eae4b8e46b27 100644 --- a/pkg/util/mathutil/math_test.go +++ b/pkg/util/mathutil/math_test.go @@ -90,3 +90,16 @@ func TestNextPowerOfTwo(t *testing.T) { require.Equal(t, int64(1024), NextPowerOfTwo(1024)) require.Equal(t, int64(0x100000000), NextPowerOfTwo(0xabcd1234)) } + +func TestDivide2Batches(t *testing.T) { + require.EqualValues(t, []int{}, Divide2Batches(0, 1)) + require.EqualValues(t, []int{1}, Divide2Batches(1, 1)) + require.EqualValues(t, []int{1}, Divide2Batches(1, 3)) + require.EqualValues(t, []int{1, 1}, Divide2Batches(2, 2)) + require.EqualValues(t, []int{1, 1}, Divide2Batches(2, 10)) + require.EqualValues(t, []int{10}, Divide2Batches(10, 1)) + require.EqualValues(t, []int{5, 5}, Divide2Batches(10, 2)) + require.EqualValues(t, []int{4, 3, 3}, Divide2Batches(10, 3)) + require.EqualValues(t, []int{3, 3, 2, 2}, Divide2Batches(10, 4)) + require.EqualValues(t, []int{2, 2, 2, 2, 2}, Divide2Batches(10, 5)) +} diff --git a/pkg/util/misc.go b/pkg/util/misc.go index de912c7fd66ec..c36dc284f1c1a 100644 --- a/pkg/util/misc.go +++ b/pkg/util/misc.go @@ -394,10 +394,10 @@ func TLSCipher2String(n uint16) string { } // ColumnsToProto converts a slice of model.ColumnInfo to a slice of tipb.ColumnInfo. -func ColumnsToProto(columns []*model.ColumnInfo, pkIsHandle bool, forIndex bool) []*tipb.ColumnInfo { +func ColumnsToProto(columns []*model.ColumnInfo, pkIsHandle bool, forIndex bool, isTiFlashStore bool) []*tipb.ColumnInfo { cols := make([]*tipb.ColumnInfo, 0, len(columns)) for _, c := range columns { - col := ColumnToProto(c, forIndex) + col := ColumnToProto(c, forIndex, isTiFlashStore) // TODO: Here `PkHandle`'s meaning is changed, we will change it to `IsHandle` when tikv's old select logic // is abandoned. if (pkIsHandle && mysql.HasPriKeyFlag(c.GetFlag())) || c.ID == model.ExtraHandleID { @@ -411,7 +411,7 @@ func ColumnsToProto(columns []*model.ColumnInfo, pkIsHandle bool, forIndex bool) } // ColumnToProto converts model.ColumnInfo to tipb.ColumnInfo. -func ColumnToProto(c *model.ColumnInfo, forIndex bool) *tipb.ColumnInfo { +func ColumnToProto(c *model.ColumnInfo, forIndex bool, isTiFlashStore bool) *tipb.ColumnInfo { pc := &tipb.ColumnInfo{ ColumnId: c.ID, Collation: collate.RewriteNewCollationIDIfNeeded(int32(mysql.CollationNames[c.GetCollate()])), @@ -420,6 +420,9 @@ func ColumnToProto(c *model.ColumnInfo, forIndex bool) *tipb.ColumnInfo { Flag: int32(c.GetFlag()), Elems: c.GetElems(), } + if isTiFlashStore && c.IsVirtualGenerated() { + pc.Flag |= int32(mysql.GeneratedColumnFlag) + } if forIndex { // Use array type for read the multi-valued index. pc.Tp = int32(c.FieldType.ArrayType().GetType()) diff --git a/pkg/util/misc_test.go b/pkg/util/misc_test.go index c7f882ceb5530..27550fadfa8fa 100644 --- a/pkg/util/misc_test.go +++ b/pkg/util/misc_test.go @@ -17,7 +17,6 @@ package util import ( "bytes" "crypto/x509/pkix" - "fmt" "testing" "time" @@ -174,8 +173,8 @@ func TestToPB(t *testing.T) { } column2.SetCollate("utf8mb4_bin") - assert.Equal(t, "column_id:1 collation:-45 columnLen:-1 decimal:-1 ", ColumnToProto(column, false).String()) - assert.Equal(t, "column_id:1 collation:-45 columnLen:-1 decimal:-1 ", ColumnsToProto([]*model.ColumnInfo{column, column2}, false, false)[0].String()) + assert.Equal(t, "column_id:1 collation:-45 columnLen:-1 decimal:-1 ", ColumnToProto(column, false, false).String()) + assert.Equal(t, "column_id:1 collation:-45 columnLen:-1 decimal:-1 ", ColumnsToProto([]*model.ColumnInfo{column, column2}, false, false, false)[0].String()) } func TestComposeURL(t *testing.T) { @@ -187,29 +186,3 @@ func TestComposeURL(t *testing.T) { assert.Equal(t, ComposeURL("http://server.example.com", ""), "http://server.example.com") assert.Equal(t, ComposeURL("https://server.example.com", ""), "https://server.example.com") } - -func assertChannel[T any](t *testing.T, ch <-chan T, items ...T) { - for i, item := range items { - assert.Equal(t, <-ch, item, "the %d-th item doesn't match", i) - } - select { - case item, ok := <-ch: - assert.False(t, ok, "channel not closed: more item %v", item) - case <-time.After(50 * time.Microsecond): - t.Fatal("channel not closed: blocked") - } -} - -func TestChannelMap(t *testing.T) { - ch := make(chan int, 4) - ch <- 1 - ch <- 2 - ch <- 3 - - tableCh := ChanMap(ch, func(i int) string { - return fmt.Sprintf("table%d", i) - }) - close(ch) - - assertChannel(t, tableCh, "table1", "table2", "table3") -} diff --git a/pkg/util/partialjson/BUILD.bazel b/pkg/util/partialjson/BUILD.bazel new file mode 100644 index 0000000000000..651a114001938 --- /dev/null +++ b/pkg/util/partialjson/BUILD.bazel @@ -0,0 +1,31 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "fastjson", + srcs = ["extract.go"], + importpath = "github.com/pingcap/tidb/pkg/util/fastjson", + visibility = ["//visibility:public"], +) + +go_test( + name = "fastjson_test", + timeout = "short", + srcs = ["extract_test.go"], + embed = [":fastjson"], + flaky = True, + deps = ["@com_github_stretchr_testify//require"], +) + +go_library( + name = "partialjson", + srcs = ["extract.go"], + importpath = "github.com/pingcap/tidb/pkg/util/partialjson", + visibility = ["//visibility:public"], +) + +go_test( + name = "partialjson_test", + srcs = ["extract_test.go"], + embed = [":partialjson"], + deps = ["@com_github_stretchr_testify//require"], +) diff --git a/pkg/util/partialjson/extract.go b/pkg/util/partialjson/extract.go new file mode 100644 index 0000000000000..747c76ca6aa1c --- /dev/null +++ b/pkg/util/partialjson/extract.go @@ -0,0 +1,170 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package partialjson + +import ( + "bytes" + "encoding/json" + "fmt" + "io" +) + +type topLevelJSONTokenIter struct { + d *json.Decoder + level int +} + +func newTopLevelJSONTokenIter(content []byte) *topLevelJSONTokenIter { + d := json.NewDecoder(bytes.NewReader(content)) + d.UseNumber() + return &topLevelJSONTokenIter{ + d: d, + } +} + +func unexpectedEOF(err error) error { + if err == io.EOF { + return io.ErrUnexpectedEOF + } + return err +} + +// readName reads a name belongs to the top-level of JSON objects. Caller should +// call readOrDiscardValue to consume its value before calling next readName. +func (i *topLevelJSONTokenIter) readName() (string, error) { + ts, err := i.next(false) + if err != nil { + return "", err + } + if len(ts) != 1 { + return "", fmt.Errorf("unexpected JSON name, %v", ts) + } + name, ok := ts[0].(string) + if !ok { + // > An object is an unordered collection of zero or more name/value + // pairs, where a name is a string... + // https://datatracker.ietf.org/doc/html/rfc8259#section-1 + return "", fmt.Errorf("unexpected JSON name, %T %v", ts, ts) + } + return name, nil +} + +// readOrDiscardValue reads a value belongs to the top-level of JSON objects. It +// must be called after readName. If caller don't need the value, it can pass +// true to discard it. +func (i *topLevelJSONTokenIter) readOrDiscardValue(discard bool) ([]json.Token, error) { + return i.next(discard) +} + +// next is an internal method to iterate the JSON tokens. Callers should use +// readName / readOrDiscardValue instead. +func (i *topLevelJSONTokenIter) next(discard bool) ([]json.Token, error) { + if i.level == 0 { + t, err := i.d.Token() + if err != nil { + return nil, err + } + + if t != json.Delim('{') { + return nil, fmt.Errorf( + "expected '{' for topLevelJSONTokenIter, got %T %v", + t, t, + ) + } + i.level++ + } + + var longValue []json.Token + + if i.level == 1 { + t, err := i.d.Token() + if err != nil { + return nil, unexpectedEOF(err) + } + delim, ok := t.(json.Delim) + if !ok { + return []json.Token{t}, nil + } + + switch delim { + case '}', ']': + // we are at top level and now exit this level, which means the content is end. + i.level-- + return nil, io.EOF + case '{', '[': + i.level++ + // go to below loop to consume this level + if !discard { + longValue = make([]json.Token, 0, 16) + longValue = append(longValue, t) + } + } + } + + for i.level > 1 { + t, err := i.d.Token() + if err != nil { + return nil, unexpectedEOF(err) + } + if !discard { + longValue = append(longValue, t) + } + + delim, ok := t.(json.Delim) + if !ok { + continue + } + + switch delim { + case '{', '[': + i.level++ + case '}', ']': + i.level-- + } + } + return longValue, nil +} + +// ExtractTopLevelMembers extracts tokens of given top level members from a JSON +// text. It will stop parsing when all keys are found. +func ExtractTopLevelMembers(content []byte, names []string) (map[string][]json.Token, error) { + remainNames := make(map[string]struct{}, len(names)) + for _, k := range names { + remainNames[k] = struct{}{} + } + ret := make(map[string][]json.Token, len(names)) + iter := newTopLevelJSONTokenIter(content) + for len(remainNames) > 0 { + name, err := iter.readName() + if err != nil { + return nil, err + } + _, ok := remainNames[name] + if ok { + val, err2 := iter.readOrDiscardValue(false) + if err2 != nil { + return nil, err2 + } + ret[name] = val + delete(remainNames, name) + } else { + _, err2 := iter.readOrDiscardValue(true) + if err2 != nil { + return nil, err2 + } + } + } + return ret, nil +} diff --git a/pkg/util/partialjson/extract_test.go b/pkg/util/partialjson/extract_test.go new file mode 100644 index 0000000000000..f1f31a4f976bb --- /dev/null +++ b/pkg/util/partialjson/extract_test.go @@ -0,0 +1,76 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package partialjson + +import ( + "encoding/json" + "io" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestIter(t *testing.T) { + failCases := [][2]string{ + {"{", "unexpected EOF"}, + {"[]", "expected '{' for topLevelJSONTokenIter, got json.Delim ["}, + {"{a}", "invalid character 'a'"}, + {"{]", "invalid character ']'"}, + } + + for _, ca := range failCases { + i := newTopLevelJSONTokenIter([]byte(ca[0])) + _, err := i.next(false) + for err == nil { + _, err = i.next(false) + } + require.ErrorContains(t, err, ca[1], "content: %s", ca[0]) + } + + succCases := map[string][][]json.Token{ + "{}": nil, + `{"a": 1, "b": "val"}`: { + []json.Token{"a"}, []json.Token{json.Number("1")}, + []json.Token{"b"}, []json.Token{"val"}}, + `{"a": 1, "long1": {"skip": "skip"}, "b": "val", "long2": [0,0,{"skip":2}]}`: { + []json.Token{"a"}, []json.Token{json.Number("1")}, + []json.Token{"long1"}, []json.Token{ + json.Delim('{'), "skip", "skip", json.Delim('}'), + }, + []json.Token{"b"}, []json.Token{"val"}, + []json.Token{"long2"}, []json.Token{ + json.Delim('['), json.Number("0"), json.Number("0"), json.Delim('{'), "skip", json.Number("2"), json.Delim('}'), json.Delim(']'), + }, + }, + } + + for content, expected := range succCases { + i := newTopLevelJSONTokenIter([]byte(content)) + expectedIdx := 0 + for expectedIdx < len(expected) { + name, err := i.readName() + require.NoError(t, err, "content: %s", content) + require.Equal(t, expected[expectedIdx], []json.Token{name}, "content: %s", content) + expectedIdx++ + + tok, err := i.next(false) + require.NoError(t, err, "content: %s", content) + require.Equal(t, expected[expectedIdx], tok, "content: %s", content) + expectedIdx++ + } + _, err := i.next(false) + require.ErrorIs(t, err, io.EOF, "content: %s", content) + } +} diff --git a/pkg/util/processinfo.go b/pkg/util/processinfo.go index 998c457127664..6bbe066b0e6ba 100644 --- a/pkg/util/processinfo.go +++ b/pkg/util/processinfo.go @@ -21,6 +21,7 @@ import ( "strings" "time" + "github.com/pingcap/tidb/pkg/domain/resourcegroup" "github.com/pingcap/tidb/pkg/parser/auth" "github.com/pingcap/tidb/pkg/parser/mysql" "github.com/pingcap/tidb/pkg/session/cursor" @@ -51,6 +52,7 @@ type ProcessInfo struct { RefCountOfStmtCtx *stmtctx.ReferenceCount MemTracker *memory.Tracker DiskTracker *disk.Tracker + RunawayChecker *resourcegroup.RunawayChecker StatsInfo func(any) map[string]uint64 RuntimeStatsColl *execdetails.RuntimeStatsColl User string @@ -203,12 +205,10 @@ type SessionManager interface { ShowProcessList() map[uint64]*ProcessInfo ShowTxnList() []*txninfo.TxnInfo GetProcessInfo(id uint64) (*ProcessInfo, bool) - Kill(connectionID uint64, query bool, maxExecutionTime bool) + Kill(connectionID uint64, query bool, maxExecutionTime bool, runaway bool) KillAllConnections() UpdateTLSConfig(cfg *tls.Config) ServerID() uint64 - // GetAutoAnalyzeProcID returns processID for auto analyze - GetAutoAnalyzeProcID() uint64 // StoreInternalSession puts the internal session pointer to the map in the SessionManager. StoreInternalSession(se any) // DeleteInternalSession deletes the internal session pointer from the map in the SessionManager. diff --git a/pkg/util/ranger/BUILD.bazel b/pkg/util/ranger/BUILD.bazel index 9deb92f8f2b2b..22f01dba8c0d8 100644 --- a/pkg/util/ranger/BUILD.bazel +++ b/pkg/util/ranger/BUILD.bazel @@ -21,6 +21,7 @@ go_library( "//pkg/parser/model", "//pkg/parser/mysql", "//pkg/parser/terror", + "//pkg/planner/context", "//pkg/planner/util/fixcontrol", "//pkg/sessionctx/stmtctx", "//pkg/types", @@ -57,6 +58,7 @@ go_test( "//pkg/parser/mysql", "//pkg/planner/core", "//pkg/planner/core/base", + "//pkg/planner/core/operator/logicalop", "//pkg/session", "//pkg/sessionctx", "//pkg/testkit", diff --git a/pkg/util/ranger/bench_test.go b/pkg/util/ranger/bench_test.go index 7881aaf1e5def..69bba53273d29 100644 --- a/pkg/util/ranger/bench_test.go +++ b/pkg/util/ranger/bench_test.go @@ -21,6 +21,7 @@ import ( "github.com/pingcap/tidb/pkg/expression" plannercore "github.com/pingcap/tidb/pkg/planner/core" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/session" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/testkit" @@ -115,7 +116,7 @@ WHERE ctx := context.Background() p, err := plannercore.BuildLogicalPlanForTest(ctx, sctx, stmts[0], ret.InfoSchema) require.NoError(b, err) - selection := p.(base.LogicalPlan).Children()[0].(*plannercore.LogicalSelection) + selection := p.(base.LogicalPlan).Children()[0].(*logicalop.LogicalSelection) tbl := selection.Children()[0].(*plannercore.DataSource).TableInfo require.NotNil(b, selection) conds := make([]expression.Expression, len(selection.Conditions)) diff --git a/pkg/util/ranger/detacher.go b/pkg/util/ranger/detacher.go index c68181f25926b..38292d475d52f 100644 --- a/pkg/util/ranger/detacher.go +++ b/pkg/util/ranger/detacher.go @@ -755,6 +755,7 @@ func ExtractEqAndInCondition(sctx *rangerctx.RangerContext, conditions []express return nil, nil, nil, nil, true } else { // All Intervals are single points + accesses[i] = points2EqOrInCond(sctx.ExprCtx, points[i], cols[i]) newConditions = append(newConditions, accesses[i]) if f, ok := accesses[i].(*expression.ScalarFunction); ok && f.FuncName.L == ast.EQ { diff --git a/pkg/util/ranger/ranger.go b/pkg/util/ranger/ranger.go index d7cd582b9868f..c0e53b63ef338 100644 --- a/pkg/util/ranger/ranger.go +++ b/pkg/util/ranger/ranger.go @@ -735,18 +735,36 @@ func points2EqOrInCond(ctx expression.BuildContext, points []*point, col *expres retType := col.GetType(ctx.GetEvalCtx()) args := make([]expression.Expression, 0, len(points)/2) args = append(args, col) + orArgs := make([]expression.Expression, 0, 2) for i := 0; i < len(points); i = i + 2 { - value := &expression.Constant{ - Value: points[i].value, - RetType: retType, + if points[i].value.IsNull() { + orArgs = append(orArgs, expression.NewFunctionInternal(ctx, ast.IsNull, retType, col)) + } else { + value := &expression.Constant{ + Value: points[i].value, + RetType: retType, + } + args = append(args, value) + } + } + var result expression.Expression + if len(args) > 1 { + funcName := ast.EQ + if len(args) > 2 { + funcName = ast.In } - args = append(args, value) + result = expression.NewFunctionInternal(ctx, funcName, col.GetType(ctx.GetEvalCtx()), args...) + } + if len(orArgs) == 0 { + return result + } + if result != nil { + orArgs = append(orArgs, result) } - funcName := ast.EQ - if len(args) > 2 { - funcName = ast.In + if len(orArgs) == 1 { + return orArgs[0] } - return expression.NewFunctionInternal(ctx, funcName, col.GetType(ctx.GetEvalCtx()), args...) + return expression.NewFunctionInternal(ctx, ast.LogicOr, col.GetType(ctx.GetEvalCtx()), orArgs...) } // RangesToString print a list of Ranges into a string which can appear in an SQL as a condition. diff --git a/pkg/util/ranger/ranger_test.go b/pkg/util/ranger/ranger_test.go index 60c3d485eb721..ba8a6028ee13d 100644 --- a/pkg/util/ranger/ranger_test.go +++ b/pkg/util/ranger/ranger_test.go @@ -28,6 +28,7 @@ import ( "github.com/pingcap/tidb/pkg/parser/mysql" plannercore "github.com/pingcap/tidb/pkg/planner/core" "github.com/pingcap/tidb/pkg/planner/core/base" + "github.com/pingcap/tidb/pkg/planner/core/operator/logicalop" "github.com/pingcap/tidb/pkg/session" "github.com/pingcap/tidb/pkg/sessionctx" "github.com/pingcap/tidb/pkg/testkit" @@ -256,6 +257,18 @@ func TestTableRange(t *testing.T) { filterConds: "[]", resultStr: "[]", }, + { + exprStr: "isnull(a) or a in (1, 2, 3)", + accessConds: "[or(isnull(test.t.a), in(test.t.a, 1, 2, 3))]", + filterConds: "[]", + resultStr: "[[1,1] [2,2] [3,3]]", + }, + { + exprStr: "isnull(a) and a in (1, 2, 3)", + accessConds: "[isnull(test.t.a) in(test.t.a, 1, 2, 3)]", + filterConds: "[]", + resultStr: "[]", + }, } ctx := context.Background() @@ -273,7 +286,7 @@ func TestTableRange(t *testing.T) { require.NoError(t, err) p, err := plannercore.BuildLogicalPlanForTest(ctx, sctx, stmts[0], ret.InfoSchema) require.NoError(t, err) - selection := p.(base.LogicalPlan).Children()[0].(*plannercore.LogicalSelection) + selection := p.(base.LogicalPlan).Children()[0].(*logicalop.LogicalSelection) conds := make([]expression.Expression, len(selection.Conditions)) for i, cond := range selection.Conditions { conds[i] = expression.PushDownNot(sctx.GetExprCtx(), cond) @@ -472,7 +485,7 @@ create table t( require.NoError(t, err) p, err := plannercore.BuildLogicalPlanForTest(ctx, sctx, stmts[0], ret.InfoSchema) require.NoError(t, err) - selection := p.(base.LogicalPlan).Children()[0].(*plannercore.LogicalSelection) + selection := p.(base.LogicalPlan).Children()[0].(*logicalop.LogicalSelection) tbl := selection.Children()[0].(*plannercore.DataSource).TableInfo require.NotNil(t, selection) conds := make([]expression.Expression, len(selection.Conditions)) @@ -835,7 +848,7 @@ func TestColumnRange(t *testing.T) { require.NoError(t, err) p, err := plannercore.BuildLogicalPlanForTest(ctx, sctx, stmts[0], ret.InfoSchema) require.NoError(t, err) - sel := p.(base.LogicalPlan).Children()[0].(*plannercore.LogicalSelection) + sel := p.(base.LogicalPlan).Children()[0].(*logicalop.LogicalSelection) ds, ok := sel.Children()[0].(*plannercore.DataSource) require.True(t, ok) conds := make([]expression.Expression, len(sel.Conditions)) @@ -994,7 +1007,7 @@ func TestIndexRangeForYear(t *testing.T) { require.NoError(t, err) p, err := plannercore.BuildLogicalPlanForTest(ctx, sctx, stmts[0], ret.InfoSchema) require.NoError(t, err) - selection := p.(base.LogicalPlan).Children()[0].(*plannercore.LogicalSelection) + selection := p.(base.LogicalPlan).Children()[0].(*logicalop.LogicalSelection) tbl := selection.Children()[0].(*plannercore.DataSource).TableInfo require.NotNil(t, selection) conds := make([]expression.Expression, len(selection.Conditions)) @@ -1064,7 +1077,7 @@ func TestPrefixIndexRangeScan(t *testing.T) { require.NoError(t, err) p, err := plannercore.BuildLogicalPlanForTest(ctx, sctx, stmts[0], ret.InfoSchema) require.NoError(t, err) - selection := p.(base.LogicalPlan).Children()[0].(*plannercore.LogicalSelection) + selection := p.(base.LogicalPlan).Children()[0].(*logicalop.LogicalSelection) tbl := selection.Children()[0].(*plannercore.DataSource).TableInfo require.NotNil(t, selection) conds := make([]expression.Expression, len(selection.Conditions)) @@ -1412,7 +1425,7 @@ create table t( require.NoError(t, err) p, err := plannercore.BuildLogicalPlanForTest(ctx, sctx, stmts[0], ret.InfoSchema) require.NoError(t, err) - selection := p.(base.LogicalPlan).Children()[0].(*plannercore.LogicalSelection) + selection := p.(base.LogicalPlan).Children()[0].(*logicalop.LogicalSelection) tbl := selection.Children()[0].(*plannercore.DataSource).TableInfo require.NotNil(t, selection) conds := make([]expression.Expression, len(selection.Conditions)) @@ -1654,7 +1667,7 @@ func TestTableShardIndex(t *testing.T) { require.NoError(t, err) p, err := plannercore.BuildLogicalPlanForTest(ctx, sctx, stmts[0], ret.InfoSchema) require.NoError(t, err) - selection := p.(base.LogicalPlan).Children()[0].(*plannercore.LogicalSelection) + selection := p.(base.LogicalPlan).Children()[0].(*logicalop.LogicalSelection) conds := make([]expression.Expression, len(selection.Conditions)) for i, cond := range selection.Conditions { conds[i] = expression.PushDownNot(sctx.GetExprCtx(), cond) @@ -1836,7 +1849,7 @@ func TestShardIndexFuncSuites(t *testing.T) { } } -func getSelectionFromQuery(t *testing.T, sctx sessionctx.Context, sql string) *plannercore.LogicalSelection { +func getSelectionFromQuery(t *testing.T, sctx sessionctx.Context, sql string) *logicalop.LogicalSelection { ctx := context.Background() stmts, err := session.Parse(sctx, sql) require.NoError(t, err) @@ -1846,7 +1859,7 @@ func getSelectionFromQuery(t *testing.T, sctx sessionctx.Context, sql string) *p require.NoError(t, err) p, err := plannercore.BuildLogicalPlanForTest(ctx, sctx, stmts[0], ret.InfoSchema) require.NoError(t, err) - selection, isSelection := p.(base.LogicalPlan).Children()[0].(*plannercore.LogicalSelection) + selection, isSelection := p.(base.LogicalPlan).Children()[0].(*logicalop.LogicalSelection) require.True(t, isSelection) return selection } @@ -2231,6 +2244,20 @@ create table t( filterConds: "[]", resultStr: "[[NULL,NULL]]", }, + { + indexPos: 0, + exprStr: "isnull(a) or a in (1,2,3,4)", + accessConds: "[]", + filterConds: "[or(isnull(test.t.a), or(or(eq(cast(test.t.a, double BINARY), 1), eq(cast(test.t.a, double BINARY), 2)), or(eq(cast(test.t.a, double BINARY), 3), eq(cast(test.t.a, double BINARY), 4))))]", + resultStr: "[[NULL,+inf]]", + }, + { + indexPos: 0, + exprStr: "isnull(a) and a in (1,2,3,4)", + accessConds: "[isnull(test.t.a)]", + filterConds: "[or(or(eq(cast(test.t.a, double BINARY), 1), eq(cast(test.t.a, double BINARY), 2)), or(eq(cast(test.t.a, double BINARY), 3), eq(cast(test.t.a, double BINARY), 4)))]", + resultStr: "[[NULL,NULL]]", + }, { indexPos: 0, exprStr: "a is not null", @@ -2297,7 +2324,7 @@ create table t( require.NoError(t, err, fmt.Sprintf("error %v, for resolve name, expr %s", err, tt.exprStr)) p, err := plannercore.BuildLogicalPlanForTest(ctx, sctx, stmts[0], ret.InfoSchema) require.NoError(t, err, fmt.Sprintf("error %v, for build plan, expr %s", err, tt.exprStr)) - selection := p.(base.LogicalPlan).Children()[0].(*plannercore.LogicalSelection) + selection := p.(base.LogicalPlan).Children()[0].(*logicalop.LogicalSelection) tbl := selection.Children()[0].(*plannercore.DataSource).TableInfo require.NotNil(t, selection, fmt.Sprintf("expr:%v", tt.exprStr)) conds := make([]expression.Expression, len(selection.Conditions)) diff --git a/pkg/util/ranger/types.go b/pkg/util/ranger/types.go index 87940bf0711b8..8bd39b61b4cce 100644 --- a/pkg/util/ranger/types.go +++ b/pkg/util/ranger/types.go @@ -24,6 +24,7 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/tidb/pkg/errctx" "github.com/pingcap/tidb/pkg/kv" + "github.com/pingcap/tidb/pkg/planner/context" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/pkg/util/codec" "github.com/pingcap/tidb/pkg/util/collate" @@ -36,7 +37,9 @@ type MutableRanges interface { // Range returns the underlying range values. Range() Ranges // Rebuild rebuilds the underlying ranges again. - Rebuild() error + Rebuild(sctx context.PlanContext) error + // CloneForPlanCache clones the MutableRanges for plan cache. + CloneForPlanCache() MutableRanges } // Ranges implements the MutableRanges interface for range array. @@ -48,10 +51,22 @@ func (rs Ranges) Range() Ranges { } // Rebuild rebuilds this range. -func (Ranges) Rebuild() error { +func (Ranges) Rebuild(context.PlanContext) error { return nil } +// CloneForPlanCache clones the MutableRanges for plan cache. +func (rs Ranges) CloneForPlanCache() MutableRanges { + if rs == nil { + return nil + } + cloned := make([]*Range, 0, len(rs)) + for _, r := range rs { + cloned = append(cloned, r.Clone()) + } + return Ranges(cloned) +} + // MemUsage gets the memory usage of ranges. func (rs Ranges) MemUsage() (sum int64) { for _, ran := range rs { diff --git a/pkg/util/session_pool.go b/pkg/util/session_pool.go new file mode 100644 index 0000000000000..95f5dd9515b43 --- /dev/null +++ b/pkg/util/session_pool.go @@ -0,0 +1,113 @@ +// Copyright 2024 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package util + +import ( + "errors" + "sync" + + "github.com/ngaut/pools" + "github.com/pingcap/failpoint" +) + +// SessionPool is a recyclable resource pool for the session. +type SessionPool interface { + Get() (pools.Resource, error) + Put(pools.Resource) + Close() +} + +// resourceCallback is a helper function to be triggered after Get/Put call. +type resourceCallback func(pools.Resource) + +type pool struct { + resources chan pools.Resource + factory pools.Factory + mu struct { + sync.RWMutex + closed bool + } + getCallback resourceCallback + putCallback resourceCallback +} + +// NewSessionPool creates a new session pool with the given capacity and factory function. +func NewSessionPool(capacity int, factory pools.Factory, getCallback, putCallback resourceCallback) SessionPool { + return &pool{ + resources: make(chan pools.Resource, capacity), + factory: factory, + getCallback: getCallback, + putCallback: putCallback, + } +} + +// Get gets a session from the session pool. +func (p *pool) Get() (resource pools.Resource, err error) { + var ok bool + select { + case resource, ok = <-p.resources: + if !ok { + err = errors.New("session pool closed") + } + default: + resource, err = p.factory() + } + + // Put the internal session to the map of SessionManager + failpoint.Inject("mockSessionPoolReturnError", func() { + err = errors.New("mockSessionPoolReturnError") + }) + + if err == nil && p.getCallback != nil { + p.getCallback(resource) + } + + return +} + +// Put puts the session back to the pool. +func (p *pool) Put(resource pools.Resource) { + p.mu.RLock() + defer p.mu.RUnlock() + if p.putCallback != nil { + p.putCallback(resource) + } + if p.mu.closed { + resource.Close() + return + } + + select { + case p.resources <- resource: + default: + resource.Close() + } +} + +// Close closes the pool to release all resources. +func (p *pool) Close() { + p.mu.Lock() + if p.mu.closed { + p.mu.Unlock() + return + } + p.mu.closed = true + close(p.resources) + p.mu.Unlock() + + for r := range p.resources { + r.Close() + } +} diff --git a/pkg/domain/session_pool_test.go b/pkg/util/session_pool_test.go similarity index 61% rename from pkg/domain/session_pool_test.go rename to pkg/util/session_pool_test.go index 432acd8a77034..ad34daf6b14c9 100644 --- a/pkg/domain/session_pool_test.go +++ b/pkg/util/session_pool_test.go @@ -1,4 +1,4 @@ -// Copyright 2021 PingCAP, Inc. +// Copyright 2024 PingCAP, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,40 +12,55 @@ // See the License for the specific language governing permissions and // limitations under the License. -package domain +package util_test import ( "testing" "github.com/ngaut/pools" "github.com/pingcap/tidb/pkg/sessionctx" + "github.com/pingcap/tidb/pkg/util" "github.com/stretchr/testify/require" ) func TestSessionPool(t *testing.T) { + re := require.New(t) f := func() (pools.Resource, error) { return &testResource{}, nil } - pool := newSessionPool(1, f) + pool := util.NewSessionPool( + 1, f, + func(r pools.Resource) { + r.(*testResource).refCount++ + }, func(r pools.Resource) { + r.(*testResource).refCount-- + }, + ) tr, err := pool.Get() - require.NoError(t, err) + re.NoError(err) + re.Equal(1, tr.(*testResource).refCount) tr1, err := pool.Get() - require.NoError(t, err) + re.NoError(err) + re.Equal(1, tr1.(*testResource).refCount) pool.Put(tr) + re.Equal(0, tr.(*testResource).refCount) // Capacity is 1, so tr1 is closed. pool.Put(tr1) - require.Equal(t, 1, tr1.(*testResource).status) + re.Equal(0, tr1.(*testResource).refCount) + re.Equal(1, tr1.(*testResource).status) pool.Close() pool.Close() pool.Put(tr1) + re.Equal(-1, tr1.(*testResource).refCount) tr, err = pool.Get() - require.Error(t, err) - require.Equal(t, "session pool closed", err.Error()) - require.Nil(t, tr) + re.Error(err) + re.Equal("session pool closed", err.Error()) + re.Nil(tr) } type testResource struct { sessionctx.Context - status int + status int + refCount int } func (tr *testResource) Close() { tr.status = 1 } diff --git a/pkg/util/set/string_set.go b/pkg/util/set/string_set.go index 5a74790971070..e61f46182e390 100644 --- a/pkg/util/set/string_set.go +++ b/pkg/util/set/string_set.go @@ -85,3 +85,10 @@ func (s StringSet) Empty() bool { func (s StringSet) Clear() { maps.Clear(s) } + +// IterateWith iterate items in StringSet and pass it to `fn`. +func (s StringSet) IterateWith(fn func(string)) { + for k := range s { + fn(k) + } +} diff --git a/pkg/util/sqlkiller/sqlkiller.go b/pkg/util/sqlkiller/sqlkiller.go index 06782653a5d05..1abae2dd3cc24 100644 --- a/pkg/util/sqlkiller/sqlkiller.go +++ b/pkg/util/sqlkiller/sqlkiller.go @@ -34,6 +34,7 @@ const ( MaxExecTimeExceeded QueryMemoryExceeded ServerMemoryExceeded + RunawayQueryExceeded // When you add a new signal, you should also modify store/driver/error/ToTidbErr, // so that errors in client can be correctly converted to tidb errors. ) @@ -77,6 +78,9 @@ func (killer *SQLKiller) getKillError(status killSignal) error { return exeerrors.ErrMemoryExceedForQuery.GenWithStackByArgs(killer.ConnID) case ServerMemoryExceeded: return exeerrors.ErrMemoryExceedForInstance.GenWithStackByArgs(killer.ConnID) + case RunawayQueryExceeded: + return exeerrors.ErrResourceGroupQueryRunawayInterrupted.GenWithStackByArgs() + default: } return nil } diff --git a/pkg/util/stmtsummary/BUILD.bazel b/pkg/util/stmtsummary/BUILD.bazel index 7f1053c005822..0c57f7db72af9 100644 --- a/pkg/util/stmtsummary/BUILD.bazel +++ b/pkg/util/stmtsummary/BUILD.bazel @@ -24,7 +24,6 @@ go_library( "//pkg/util/set", "@com_github_pingcap_failpoint//:failpoint", "@com_github_tikv_client_go_v2//util", - "@org_golang_x_exp//maps", "@org_uber_go_atomic//:atomic", "@org_uber_go_zap//:zap", ], diff --git a/pkg/util/stmtsummary/statement_summary.go b/pkg/util/stmtsummary/statement_summary.go index e9dc133b1c46e..6113a069147bf 100644 --- a/pkg/util/stmtsummary/statement_summary.go +++ b/pkg/util/stmtsummary/statement_summary.go @@ -19,6 +19,7 @@ import ( "cmp" "container/list" "fmt" + "maps" "math" "slices" "strconv" @@ -36,7 +37,6 @@ import ( "github.com/pingcap/tidb/pkg/util/plancodec" "github.com/tikv/client-go/v2/util" atomic2 "go.uber.org/atomic" - "golang.org/x/exp/maps" ) // stmtSummaryByDigestKey defines key for stmtSummaryByDigestMap.summaryMap. @@ -421,9 +421,8 @@ func (ssMap *stmtSummaryByDigestMap) GetMoreThanCntBindableStmt(cnt int64) []*Bi PlanHint: ssElement.planHint, Charset: ssElement.charset, Collation: ssElement.collation, - Users: make(map[string]struct{}), + Users: maps.Clone(ssElement.authUsers), } - maps.Copy(stmt.Users, ssElement.authUsers) // If it is SQL command prepare / execute, the ssElement.sampleSQL is `execute ...`, we should get the original select query. // If it is binary protocol prepare / execute, ssbd.normalizedSQL should be same as ssElement.sampleSQL. if ssElement.prepared { diff --git a/pkg/util/stmtsummary/v2/stmtsummary.go b/pkg/util/stmtsummary/v2/stmtsummary.go index 0c8e99dfce45f..267f5cf66088f 100644 --- a/pkg/util/stmtsummary/v2/stmtsummary.go +++ b/pkg/util/stmtsummary/v2/stmtsummary.go @@ -359,9 +359,8 @@ func (s *StmtSummary) GetMoreThanCntBindableStmt(cnt int64) []*stmtsummary.Binda PlanHint: record.PlanHint, Charset: record.Charset, Collation: record.Collation, - Users: make(map[string]struct{}), + Users: maps.Clone(record.AuthUsers), } - maps.Copy(stmt.Users, record.AuthUsers) // If it is SQL command prepare / execute, the ssElement.sampleSQL // is `execute ...`, we should get the original select query. diff --git a/pkg/util/util.go b/pkg/util/util.go index fc0e17f4d7ad0..ea85c64be4dc9 100644 --- a/pkg/util/util.go +++ b/pkg/util/util.go @@ -84,21 +84,6 @@ func GetJSON(client *http.Client, url string, v any) error { return errors.Trace(json.NewDecoder(resp.Body).Decode(v)) } -// ChanMap creates a channel which applies the function over the input Channel. -// Hint of Resource Leakage: -// In golang, channel isn't an interface so we must create a goroutine for handling the inputs. -// Hence the input channel must be closed properly or this function may leak a goroutine. -func ChanMap[T, R any](c <-chan T, f func(T) R) <-chan R { - outCh := make(chan R) - go func() { - defer close(outCh) - for item := range c { - outCh <- f(item) - } - }() - return outCh -} - // Str2Int64Map converts a string to a map[int64]struct{}. func Str2Int64Map(str string) map[int64]struct{} { strs := strings.Split(str, ",") diff --git a/tests/globalkilltest/Dockerfile b/tests/globalkilltest/Dockerfile index 8d734ad741c0c..3c44b37a091c0 100644 --- a/tests/globalkilltest/Dockerfile +++ b/tests/globalkilltest/Dockerfile @@ -17,7 +17,7 @@ FROM rockylinux:9 RUN dnf update -y && dnf groupinstall 'Development Tools' -y RUN dnf install procps-ng mysql -y -ENV GOLANG_VERSION 1.21.12 +ENV GOLANG_VERSION 1.21.13 ENV ARCH amd64 ENV GOLANG_DOWNLOAD_URL https://dl.google.com/go/go$GOLANG_VERSION.linux-$ARCH.tar.gz ENV GOPATH /go diff --git a/tests/integrationtest/r/clustered_index.result b/tests/integrationtest/r/clustered_index.result index 89961526904df..8e666459932ad 100644 --- a/tests/integrationtest/r/clustered_index.result +++ b/tests/integrationtest/r/clustered_index.result @@ -1,4 +1,3 @@ -set tidb_cost_model_version=1; set @@tidb_enable_outer_join_reorder=true; drop database if exists with_cluster_index; create database with_cluster_index; @@ -6,38 +5,26 @@ drop database if exists wout_cluster_index; create database wout_cluster_index; use with_cluster_index; create table tbl_0 ( col_0 decimal not null , col_1 blob(207) , col_2 text , col_3 datetime default '1986-07-01' , col_4 bigint unsigned default 1504335725690712365 , primary key idx_0 ( col_3,col_2(1),col_1(6) ) clustered, key idx_1 ( col_3 ), unique key idx_2 ( col_3 ) , unique key idx_3 ( col_0 ) , key idx_4 ( col_1(1),col_2(1) ) , key idx_5 ( col_2(1) ) ) ; -create table tbl_1 ( col_5 char(135) , col_6 bit(17) default 50609 not null , col_7 char(202) default 'IoQWYoGdbbgBDlxpDHQ' , col_8 char(213) , col_9 time not null , primary key idx_6 ( col_6 ) clustered, unique key idx_7 ( col_5 ) ) ; create table tbl_2 ( col_10 datetime default '1976-05-11' , col_11 datetime , col_12 float , col_13 double(56,29) default 18.0118 , col_14 char not null , primary key idx_8 ( col_14,col_13,col_10 ) clustered, key idx_9 ( col_11 ) ) ; -create table tbl_3 ( col_15 tinyint default -91 not null , col_16 bit(61) default 990141831018971350 not null , col_17 double(244,22) default 3985 not null , col_18 binary(32) default 'kxMlWqvpxXNBlxoU' , col_19 text(401) , primary key idx_10 ( col_18,col_19(4) ) clustered, key idx_11 ( col_17,col_18,col_19(2),col_15,col_16 ) , unique key idx_12 ( col_17 ) ) ; -create table tbl_4 ( col_20 double(230,16) default 8.49 not null , col_21 int unsigned not null , col_22 enum('Alice','Bob','Charlie','David') not null , col_23 float default 3066.13040283622 , col_24 datetime default '1980-10-27' not null , primary key idx_13 ( col_22,col_24 ) clustered, key idx_14 ( col_23,col_20 ) , key idx_15 ( col_24 ) , key idx_16 ( col_20 ) , unique key idx_17 ( col_24 ) , key idx_18 ( col_21 ) ) ; load stats 's/with_cluster_index_tbl_0.json'; -load stats 's/with_cluster_index_tbl_1.json'; load stats 's/with_cluster_index_tbl_2.json'; -load stats 's/with_cluster_index_tbl_3.json'; -load stats 's/with_cluster_index_tbl_4.json'; use wout_cluster_index; create table tbl_0 ( col_0 decimal not null , col_1 blob(207) , col_2 text , col_3 datetime default '1986-07-01' , col_4 bigint unsigned default 1504335725690712365 , primary key idx_0 ( col_3,col_2(1),col_1(6) ) nonclustered, key idx_1 ( col_3 ) , unique key idx_2 ( col_3 ) , unique key idx_3 ( col_0 ) , key idx_4 ( col_1(1),col_2(1) ) , key idx_5 ( col_2(1) ) ) ; -create table tbl_1 ( col_5 char(135) , col_6 bit(17) default 50609 not null , col_7 char(202) default 'IoQWYoGdbbgBDlxpDHQ' , col_8 char(213) , col_9 time not null , primary key idx_6 ( col_6 ) nonclustered, unique key idx_7 ( col_5 ) ) ; create table tbl_2 ( col_10 datetime default '1976-05-11' , col_11 datetime , col_12 float , col_13 double(56,29) default 18.0118 , col_14 char not null , primary key idx_8 ( col_14,col_13,col_10 ) nonclustered, key idx_9 ( col_11 ) ) ; -create table tbl_3 ( col_15 tinyint default -91 not null , col_16 bit(61) default 990141831018971350 not null , col_17 double(244,22) default 3985 not null , col_18 binary(32) default 'kxMlWqvpxXNBlxoU' , col_19 text(401) , primary key idx_10 ( col_18,col_19(4) ) nonclustered, key idx_11 ( col_17,col_18,col_19(2),col_15,col_16 ) , unique key idx_12 ( col_17 ) ) ; -create table tbl_4 ( col_20 double(230,16) default 8.49 not null , col_21 int unsigned not null , col_22 enum('Alice','Bob','Charlie','David') not null , col_23 float default 3066.13040283622 , col_24 datetime default '1980-10-27' not null , primary key idx_13 ( col_22,col_24 ) nonclustered, key idx_14 ( col_23,col_20 ) , key idx_15 ( col_24 ) , key idx_16 ( col_20 ) , unique key idx_17 ( col_24 ) , key idx_18 ( col_21 ) ) ; load stats 's/wout_cluster_index_tbl_0.json'; -load stats 's/wout_cluster_index_tbl_1.json'; load stats 's/wout_cluster_index_tbl_2.json'; -load stats 's/wout_cluster_index_tbl_3.json'; -load stats 's/wout_cluster_index_tbl_4.json'; explain select count(*) from with_cluster_index.tbl_0 where col_0 < 5429 ; id estRows task access object operator info -StreamAgg_17 1.00 root funcs:count(Column#8)->Column#6 -└─IndexReader_18 1.00 root index:StreamAgg_9 - └─StreamAgg_9 1.00 cop[tikv] funcs:count(1)->Column#8 - └─IndexRangeScan_16 798.90 cop[tikv] table:tbl_0, index:idx_3(col_0) range:[-inf,5429), keep order:false +HashAgg_12 1.00 root funcs:count(Column#7)->Column#6 +└─IndexReader_13 1.00 root index:HashAgg_6 + └─HashAgg_6 1.00 cop[tikv] funcs:count(1)->Column#7 + └─IndexRangeScan_11 798.87 cop[tikv] table:tbl_0, index:idx_3(col_0) range:[-inf,5429), keep order:false explain select count(*) from wout_cluster_index.tbl_0 where col_0 < 5429 ; id estRows task access object operator info -StreamAgg_17 1.00 root funcs:count(Column#9)->Column#7 -└─IndexReader_18 1.00 root index:StreamAgg_9 - └─StreamAgg_9 1.00 cop[tikv] funcs:count(1)->Column#9 - └─IndexRangeScan_16 798.90 cop[tikv] table:tbl_0, index:idx_3(col_0) range:[-inf,5429), keep order:false +HashAgg_12 1.00 root funcs:count(Column#8)->Column#7 +└─IndexReader_13 1.00 root index:HashAgg_6 + └─HashAgg_6 1.00 cop[tikv] funcs:count(1)->Column#8 + └─IndexRangeScan_11 798.87 cop[tikv] table:tbl_0, index:idx_3(col_0) range:[-inf,5429), keep order:false explain select count(*) from with_cluster_index.tbl_0 where col_0 < 41 ; id estRows task access object operator info StreamAgg_17 1.00 root funcs:count(Column#8)->Column#6 @@ -63,17 +50,17 @@ TableReader_14 4509.00 root data:Projection_5 └─TableFullScan_12 4673.00 cop[tikv] table:tbl_2 keep order:false explain select sum( col_4 ) from with_cluster_index.tbl_0 where col_3 != '1993-12-02' ; id estRows task access object operator info -StreamAgg_17 1.00 root funcs:sum(Column#8)->Column#6 -└─TableReader_18 1.00 root data:StreamAgg_9 - └─StreamAgg_9 1.00 cop[tikv] funcs:sum(with_cluster_index.tbl_0.col_4)->Column#8 - └─TableRangeScan_16 2244.00 cop[tikv] table:tbl_0 range:[-inf,1993-12-02 00:00:00), (1993-12-02 00:00:00,+inf], keep order:false +HashAgg_12 1.00 root funcs:sum(Column#7)->Column#6 +└─TableReader_13 1.00 root data:HashAgg_6 + └─HashAgg_6 1.00 cop[tikv] funcs:sum(with_cluster_index.tbl_0.col_4)->Column#7 + └─TableRangeScan_11 2244.00 cop[tikv] table:tbl_0 range:[-inf,1993-12-02 00:00:00), (1993-12-02 00:00:00,+inf], keep order:false explain select sum( col_4 ) from wout_cluster_index.tbl_0 where col_3 != '1993-12-02' ; id estRows task access object operator info -StreamAgg_37 1.00 root funcs:sum(Column#20)->Column#7 -└─TableReader_38 1.00 root data:StreamAgg_9 - └─StreamAgg_9 1.00 cop[tikv] funcs:sum(wout_cluster_index.tbl_0.col_4)->Column#20 - └─Selection_36 2244.00 cop[tikv] ne(wout_cluster_index.tbl_0.col_3, 1993-12-02 00:00:00.000000) - └─TableFullScan_35 2244.00 cop[tikv] table:tbl_0 keep order:false +HashAgg_13 1.00 root funcs:sum(Column#8)->Column#7 +└─TableReader_14 1.00 root data:HashAgg_6 + └─HashAgg_6 1.00 cop[tikv] funcs:sum(wout_cluster_index.tbl_0.col_4)->Column#8 + └─Selection_12 2243.00 cop[tikv] ne(wout_cluster_index.tbl_0.col_3, 1993-12-02 00:00:00.000000) + └─TableFullScan_11 2244.00 cop[tikv] table:tbl_0 keep order:false explain select col_0 from with_cluster_index.tbl_0 where col_0 <= 0 ; id estRows task access object operator info IndexReader_6 1.00 root index:IndexRangeScan_5 @@ -84,12 +71,12 @@ IndexReader_6 1.00 root index:IndexRangeScan_5 └─IndexRangeScan_5 1.00 cop[tikv] table:tbl_0, index:idx_3(col_0) range:[-inf,0], keep order:false explain select col_3 from with_cluster_index.tbl_0 where col_3 >= '1981-09-15' ; id estRows task access object operator info -TableReader_6 1859.31 root data:TableRangeScan_5 -└─TableRangeScan_5 1859.31 cop[tikv] table:tbl_0 range:[1981-09-15 00:00:00,+inf], keep order:false +IndexReader_8 1860.39 root index:IndexRangeScan_7 +└─IndexRangeScan_7 1860.39 cop[tikv] table:tbl_0, index:idx_1(col_3) range:[1981-09-15 00:00:00,+inf], keep order:false explain select col_3 from wout_cluster_index.tbl_0 where col_3 >= '1981-09-15' ; id estRows task access object operator info -IndexReader_10 1859.31 root index:IndexRangeScan_9 -└─IndexRangeScan_9 1859.31 cop[tikv] table:tbl_0, index:idx_2(col_3) range:[1981-09-15 00:00:00,+inf], keep order:false +IndexReader_8 1860.39 root index:IndexRangeScan_7 +└─IndexRangeScan_7 1860.39 cop[tikv] table:tbl_0, index:idx_1(col_3) range:[1981-09-15 00:00:00,+inf], keep order:false explain select tbl_2.col_14 , tbl_0.col_1 from with_cluster_index.tbl_2 right join with_cluster_index.tbl_0 on col_3 = col_11 ; id estRows task access object operator info MergeJoin_7 2533.51 root right outer join, left key:with_cluster_index.tbl_2.col_11, right key:with_cluster_index.tbl_0.col_3 @@ -122,11 +109,11 @@ id estRows task access object operator info StreamAgg_17 1.00 root funcs:count(Column#8)->Column#6 └─IndexReader_18 1.00 root index:StreamAgg_9 └─StreamAgg_9 1.00 cop[tikv] funcs:count(1)->Column#8 - └─IndexRangeScan_16 109.70 cop[tikv] table:tbl_0, index:idx_3(col_0) range:[803163,+inf], keep order:false + └─IndexRangeScan_16 133.89 cop[tikv] table:tbl_0, index:idx_3(col_0) range:[803163,+inf], keep order:false explain select count(*) from wout_cluster_index.tbl_0 where col_0 >= 803163 ; id estRows task access object operator info StreamAgg_17 1.00 root funcs:count(Column#9)->Column#7 └─IndexReader_18 1.00 root index:StreamAgg_9 └─StreamAgg_9 1.00 cop[tikv] funcs:count(1)->Column#9 - └─IndexRangeScan_16 109.70 cop[tikv] table:tbl_0, index:idx_3(col_0) range:[803163,+inf], keep order:false + └─IndexRangeScan_16 133.89 cop[tikv] table:tbl_0, index:idx_3(col_0) range:[803163,+inf], keep order:false set @@tidb_enable_outer_join_reorder=false; diff --git a/tests/integrationtest/r/ddl/db_partition.result b/tests/integrationtest/r/ddl/db_partition.result index f730d7e634f11..f19709c39f179 100644 --- a/tests/integrationtest/r/ddl/db_partition.result +++ b/tests/integrationtest/r/ddl/db_partition.result @@ -3224,6 +3224,10 @@ create table pt15 (id int not null, unique index uk_id (id)) partition by hash(i create table nt15 (id int not null, index uk_id (id)); alter table pt15 exchange partition p0 with table nt15; Error 1736 (HY000): Tables have different definitions +create table pt15b (id int not null, a int, unique index uk_id (a) global) partition by hash(id) partitions 1; +create table nt15b (id int not null, a int, unique index uk_id (a)); +alter table pt15b exchange partition p0 with table nt15b; +Error 1731 (HY000): Non matching attribute 'global index: uk_id' between partition and table ## auto_increment create table pt16 (id int not null primary key auto_increment) partition by hash(id) partitions 1; create table nt16 (id int not null primary key); @@ -3304,7 +3308,7 @@ create temporary table nt34 (id int); alter table pt34 exchange partition p0 with table nt34; Error 1733 (HY000): Table to exchange with partition is temporary: 'nt34' ## global index -create table pt35 (a int, b int, unique index(b)) partition by hash(a) partitions 1; +create table pt35 (a int, b int, unique index(b) global) partition by hash(a) partitions 1; create table nt35 (a int, b int, unique index(b)); alter table pt35 exchange partition p0 with table nt35; Error 1731 (HY000): Non matching attribute 'global index: b' between partition and table diff --git a/tests/integrationtest/r/ddl/integration.result b/tests/integrationtest/r/ddl/integration.result index 894f75cee3256..c289824a881f0 100644 --- a/tests/integrationtest/r/ddl/integration.result +++ b/tests/integrationtest/r/ddl/integration.result @@ -104,20 +104,20 @@ drop table if exists t2; create table t2(a int not null, b int, primary key(a) nonclustered, unique idx_b(b)); drop table if exists t3; set tidb_enable_global_index=1; -create table t3(a int not null, b int, primary key(a) nonclustered, unique idx_b(b)) partition by hash(a) partitions 3; +create table t3(a int not null, b int, primary key(a) nonclustered, unique idx_b(b) global) partition by hash(a) partitions 3; drop table if exists t4; create table t4(a int not null, b int, primary key(a)) partition by hash(a) partitions 3; -alter table t partition by hash(a) partitions 3; +alter table t partition by hash(a) partitions 3 update indexes (idx_b global); alter table t remove partitioning; -alter table t partition by key() partitions 3; +alter table t partition by key() partitions 3 update indexes (idx_b global); alter table t remove partitioning; -alter table t partition by hash(b) partitions 3; +alter table t partition by hash(b) partitions 3 update indexes (`primary` global); Error 1503 (HY000): A CLUSTERED INDEX must include all columns in the table's partitioning function -alter table t2 partition by hash(b) partitions 3; +alter table t2 partition by hash(b) partitions 3 update indexes (`primary` global); alter table t2 remove partitioning; alter table t3 partition by key(a) partitions 3; alter table t3 remove partitioning; -alter table t4 partition by hash(b) partitions 3; +alter table t4 partition by hash(b) partitions 3 update indexes(`primary` global, idx_b local); Error 1503 (HY000): A CLUSTERED INDEX must include all columns in the table's partitioning function set tidb_enable_global_index=0; alter table t partition by hash(a) partitions 3; @@ -125,13 +125,13 @@ Error 1503 (HY000): A UNIQUE INDEX must include all columns in the table's parti alter table t partition by key() partitions 3; Error 1503 (HY000): A UNIQUE INDEX must include all columns in the table's partitioning function alter table t partition by hash(b) partitions 3; -Error 1503 (HY000): A PRIMARY KEY must include all columns in the table's partitioning function +Error 1503 (HY000): A CLUSTERED INDEX must include all columns in the table's partitioning function alter table t2 partition by hash(b) partitions 3; Error 1503 (HY000): A PRIMARY KEY must include all columns in the table's partitioning function alter table t3 partition by key(a) partitions 3; Error 1503 (HY000): A UNIQUE INDEX must include all columns in the table's partitioning function alter table t4 partition by hash(b) partitions 3; -Error 1503 (HY000): A PRIMARY KEY must include all columns in the table's partitioning function +Error 1503 (HY000): A CLUSTERED INDEX must include all columns in the table's partitioning function drop table t, t2, t3, t4; set tidb_enable_global_index=1; CREATE TABLE `members` ( @@ -140,7 +140,7 @@ CREATE TABLE `members` ( `lname` varchar(255) DEFAULT NULL, `dob` date DEFAULT NULL, `data` json DEFAULT NULL, -UNIQUE KEY `ui` (`id`) +UNIQUE KEY `ui` (`id`) GLOBAL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin PARTITION BY RANGE (YEAR(`dob`)) (PARTITION `pBefore1950` VALUES LESS THAN (1950), diff --git a/tests/integrationtest/r/ddl/partition.result b/tests/integrationtest/r/ddl/partition.result index 32d58b40f2a7d..4b3360abde4d7 100644 --- a/tests/integrationtest/r/ddl/partition.result +++ b/tests/integrationtest/r/ddl/partition.result @@ -378,3 +378,6 @@ create table t(a int, b datetime, c varchar(8)) PARTITION BY RANGE COLUMNS(`c`,` alter table t add partition (PARTITION `p20240521A` VALUES LESS THAN ('A','2024-05-21 00:00:00')); Error 1493 (HY000): VALUES LESS THAN value must be strictly increasing for each partition alter table t add partition (PARTITION `p20240521Z` VALUES LESS THAN ('Z','2024-05-21 00:00:00')); +CREATE TABLE employees (id int unsigned NOT NULL) PARTITION BY RANGE (id) INTERVAL (1) FIRST PARTITION LESS THAN (1) LAST PARTITION LESS THAN (8193); +Error 1499 (HY000): Too many partitions (including subpartitions) were defined +CREATE TABLE employees (id int unsigned NOT NULL) PARTITION BY RANGE (id) INTERVAL (1) FIRST PARTITION LESS THAN (1) LAST PARTITION LESS THAN (8192); diff --git a/tests/integrationtest/r/executor/expand.result b/tests/integrationtest/r/executor/expand.result index 6550a38812fbe..2ffba6bbcd3f0 100644 --- a/tests/integrationtest/r/executor/expand.result +++ b/tests/integrationtest/r/executor/expand.result @@ -258,3 +258,260 @@ Computer:2 2 1350.0000 Phone:3 2 10.0000 TV:1 2 133.3333 TV:2 2 100.0000 +SET @saved_sql_mode = @@session.sql_mode; +SET SESSION sql_mode= ''; + +SELECT UPPER(product) AS prod, +SUM(profit)/COUNT(*) +FROM t1 GROUP BY prod WITH ROLLUP HAVING prod='COMPUTER' ; +prod SUM(profit)/COUNT(*) +COMPUTER 1380.0000 +SET SESSION sql_mode= @saved_sql_mode; + +# Joins +SELECT product, country , year, SUM(profit) FROM t1,t2 WHERE +t1.country_id=t2.country_id GROUP BY product, country, year WITH ROLLUP; +product country year SUM(profit) +NULL NULL NULL 7785 +Calculator NULL NULL 275 +Calculator India NULL 150 +Calculator India 2000 150 +Calculator USA NULL 125 +Calculator USA 1999 50 +Calculator USA 2000 75 +Computer NULL NULL 6900 +Computer India NULL 2700 +Computer India 2000 2700 +Computer USA NULL 4200 +Computer USA 1999 2700 +Computer USA 2000 1500 +Phone NULL NULL 10 +Phone Finland NULL 10 +Phone Finland 2003 10 +TV NULL NULL 600 +TV India NULL 200 +TV India 2000 200 +TV USA NULL 400 +TV USA 1999 250 +TV USA 2000 150 + +SELECT product, `SUM` FROM (SELECT product, SUM(profit) AS 'sum' FROM t1 +GROUP BY product WITH ROLLUP) AS tmp +WHERE product is null; +product SUM +NULL 7785 + +SELECT product FROM t1 WHERE EXISTS +(SELECT product, country_id , SUM(profit) FROM t1 AS t2 +WHERE t1.product=t2.product GROUP BY product, country_id WITH ROLLUP +HAVING SUM(profit) > 6000); +product +Computer +Computer +Computer +Computer +Computer + +SELECT product, country_id , year, SUM(profit) FROM t1 +GROUP BY product, country_id, year HAVING country_id is NULL; +product country_id year SUM(profit) + +SELECT CONCAT(':',product,':'), SUM(profit), AVG(profit) FROM t1 +GROUP BY product WITH ROLLUP; +CONCAT(':',product,':') SUM(profit) AVG(profit) +NULL 7785 519.0000 +:Calculator: 275 68.7500 +:Computer: 6900 1380.0000 +:Phone: 10 10.0000 +:TV: 600 120.0000 + +drop table t1,t2; +CREATE TABLE t1 (i int); +INSERT INTO t1 VALUES(100); +CREATE TABLE t2 (i int); +INSERT INTO t2 VALUES (100),(200); + +SELECT i, COUNT(*) FROM t1 GROUP BY i WITH ROLLUP; +i COUNT(*) +NULL 1 +100 1 + +SELECT t1.i, t2.i, COUNT(*) FROM t1,t2 GROUP BY t1.i,t2.i WITH ROLLUP; +i i COUNT(*) +NULL NULL 2 +100 NULL 2 +100 100 1 +100 200 1 + +DROP TABLE t1,t2; +CREATE TABLE user_day( +user_id INT NOT NULL, +date DATE NOT NULL, +UNIQUE INDEX user_date (user_id, date) +); +INSERT INTO user_day VALUES +(1, '2004-06-06' ), +(1, '2004-06-07' ), +(2, '2004-06-06' ); + +SELECT +d.date AS day, +COUNT(d.user_id) as sample, +COUNT(next_day.user_id) AS not_cancelled +FROM user_day d +LEFT JOIN user_day next_day +ON next_day.user_id=d.user_id AND +next_day.date= DATE_ADD( d.date, interval 1 day ) +GROUP BY day; +day sample not_cancelled +2004-06-06 2 1 +2004-06-07 1 0 + +SELECT +d.date AS day, +COUNT(d.user_id) as sample, +COUNT(next_day.user_id) AS not_cancelled +FROM user_day d +LEFT JOIN user_day next_day +ON next_day.user_id=d.user_id AND +next_day.date= DATE_ADD( d.date, interval 1 day ) +GROUP BY day +WITH ROLLUP; +day sample not_cancelled +NULL 3 1 +2004-06-06 2 1 +2004-06-07 1 0 + +DROP TABLE user_day; +CREATE TABLE t1 (a int, b int); +INSERT INTO t1 VALUES +(1,4), +(2,2), (2,2), +(4,1), (4,1), (4,1), (4,1), +(2,1), (2,1); + +SELECT SUM(b) FROM t1 GROUP BY a WITH ROLLUP; +SUM(b) +14 +4 +4 +6 + +SELECT DISTINCT SUM(b) FROM t1 GROUP BY a WITH ROLLUP; +SUM(b) +14 +4 +6 + +SELECT SUM(b), COUNT(DISTINCT b) FROM t1 GROUP BY a WITH ROLLUP; +SUM(b) COUNT(DISTINCT b) +14 3 +4 1 +4 1 +6 2 + +SELECT DISTINCT SUM(b), COUNT(DISTINCT b) FROM t1 GROUP BY a WITH ROLLUP; +SUM(b) COUNT(DISTINCT b) +14 3 +4 1 +6 2 + +SELECT SUM(b), COUNT(*) FROM t1 GROUP BY a WITH ROLLUP; +SUM(b) COUNT(*) +14 9 +4 1 +4 4 +6 4 + +SELECT DISTINCT SUM(b), COUNT(*) FROM t1 GROUP BY a WITH ROLLUP; +SUM(b) COUNT(*) +14 9 +4 1 +4 4 +6 4 + +SELECT SUM(b), COUNT(DISTINCT b), COUNT(*) FROM t1 GROUP BY a WITH ROLLUP; +SUM(b) COUNT(DISTINCT b) COUNT(*) +14 3 9 +4 1 1 +4 1 4 +6 2 4 + +SELECT DISTINCT SUM(b), COUNT(DISTINCT b), COUNT(*) FROM t1 +GROUP BY a WITH ROLLUP; +SUM(b) COUNT(DISTINCT b) COUNT(*) +14 3 9 +4 1 1 +4 1 4 +6 2 4 + +SELECT a, SUM(b) FROM t1 GROUP BY a,b WITH ROLLUP; +a SUM(b) +NULL 14 +1 4 +1 4 +2 2 +2 4 +2 6 +4 4 +4 4 + +SELECT DISTINCT a, SUM(b) FROM t1 GROUP BY a,b WITH ROLLUP; +a SUM(b) +NULL 14 +1 4 +2 2 +2 4 +2 6 +4 4 + +SELECT b, a, SUM(b) FROM t1 GROUP BY a,b WITH ROLLUP; +b a SUM(b) +NULL NULL 14 +NULL 1 4 +NULL 2 6 +NULL 4 4 +1 2 2 +1 4 4 +2 2 4 +4 1 4 + +SELECT DISTINCT b,a, SUM(b) FROM t1 GROUP BY a,b WITH ROLLUP; +b a SUM(b) +NULL NULL 14 +NULL 1 4 +NULL 2 6 +NULL 4 4 +1 2 2 +1 4 4 +2 2 4 +4 1 4 + +ALTER TABLE t1 ADD COLUMN c INT; + +SELECT a,b,SUM(c) FROM t1 GROUP BY a,b,c WITH ROLLUP; +a b SUM(c) +NULL NULL NULL +1 NULL NULL +1 4 NULL +1 4 NULL +2 NULL NULL +2 1 NULL +2 1 NULL +2 2 NULL +2 2 NULL +4 NULL NULL +4 1 NULL +4 1 NULL + +SELECT distinct a,b,SUM(c) FROM t1 GROUP BY a,b,c WITH ROLLUP; +a b SUM(c) +NULL NULL NULL +1 NULL NULL +1 4 NULL +2 NULL NULL +2 1 NULL +2 2 NULL +4 NULL NULL +4 1 NULL +DROP TABLE t1; diff --git a/tests/integrationtest/r/executor/index_lookup_join.result b/tests/integrationtest/r/executor/index_lookup_join.result index 7a06d7ae1b11d..95c7edbf0967f 100644 --- a/tests/integrationtest/r/executor/index_lookup_join.result +++ b/tests/integrationtest/r/executor/index_lookup_join.result @@ -90,12 +90,12 @@ select /*+ INL_MERGE_JOIN(t1, t2) */ * from t1, t2; a b a b show warnings; Level Code Message -Warning 1815 Optimizer Hint /*+ INL_MERGE_JOIN(t1, t2) */ is inapplicable without column equal ON condition +Warning 1815 The INDEX MERGE JOIN hint is deprecated for usage, try other hints. select /*+ INL_MERGE_JOIN(t1, t2) */ * from t1 join t2 on t1.a=t2.a; a b a b show warnings; Level Code Message -Warning 1815 Optimizer Hint /*+ INL_MERGE_JOIN(t1, t2) */ is inapplicable +Warning 1815 The INDEX MERGE JOIN hint is deprecated for usage, try other hints. drop table if exists t1, t2; create table t1(a bigint, b bigint, index idx_a(a)); create table t2(a bigint, b bigint); @@ -123,12 +123,12 @@ select /*+ INL_MERGE_JOIN(t1) */ * from t1 left join t2 on t1.a=t2.a; a b a b show warnings; Level Code Message -Warning 1815 Optimizer Hint /*+ INL_MERGE_JOIN(t1) */ is inapplicable +Warning 1815 The INDEX MERGE JOIN hint is deprecated for usage, try other hints. select /*+ INL_MERGE_JOIN(t2) */ * from t1 right join t2 on t1.a=t2.a; a b a b show warnings; Level Code Message -Warning 1815 Optimizer Hint /*+ INL_MERGE_JOIN(t2) */ is inapplicable +Warning 1815 The INDEX MERGE JOIN hint is deprecated for usage, try other hints. drop table if exists t1, t2; create table t1 (a int, key(a)); create table t2 (a int, key(a)); diff --git a/tests/integrationtest/r/executor/index_lookup_merge_join.result b/tests/integrationtest/r/executor/index_lookup_merge_join.result index c682642cfa348..e54b5ebb6b14a 100644 --- a/tests/integrationtest/r/executor/index_lookup_merge_join.result +++ b/tests/integrationtest/r/executor/index_lookup_merge_join.result @@ -11,15 +11,14 @@ insert into t1 values(1,1,1,1),(2,2,2,2),(3,3,3,3); insert into t2 values(1,1,1,1),(2,2,2,2); explain format = 'brief' select /*+ inl_merge_join(t1,t2) */ * from t1 left join t2 on t1.a = t2.a and t1.c = t2.c and t1.b = t2.b order by t1.a desc; id estRows task access object operator info -IndexMergeJoin 100000000.00 root left outer join, inner:Projection, outer key:executor__index_lookup_merge_join.t1.a, executor__index_lookup_merge_join.t1.c, executor__index_lookup_merge_join.t1.b, inner key:executor__index_lookup_merge_join.t2.a, executor__index_lookup_merge_join.t2.c, executor__index_lookup_merge_join.t2.b +IndexJoin 100000000.00 root left outer join, inner:IndexLookUp, outer key:executor__index_lookup_merge_join.t1.a, executor__index_lookup_merge_join.t1.c, executor__index_lookup_merge_join.t1.b, inner key:executor__index_lookup_merge_join.t2.a, executor__index_lookup_merge_join.t2.c, executor__index_lookup_merge_join.t2.b, equal cond:eq(executor__index_lookup_merge_join.t1.a, executor__index_lookup_merge_join.t2.a), eq(executor__index_lookup_merge_join.t1.b, executor__index_lookup_merge_join.t2.b), eq(executor__index_lookup_merge_join.t1.c, executor__index_lookup_merge_join.t2.c) ├─Projection(Build) 10000.00 root executor__index_lookup_merge_join.t1.a, executor__index_lookup_merge_join.t1.b, executor__index_lookup_merge_join.t1.c, executor__index_lookup_merge_join.t1.d │ └─IndexLookUp 10000.00 root │ ├─IndexFullScan(Build) 10000.00 cop[tikv] table:t1, index:PRIMARY(a, b, c) keep order:true, desc, stats:pseudo │ └─TableRowIDScan(Probe) 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo -└─Projection(Probe) 10000.00 root executor__index_lookup_merge_join.t2.a, executor__index_lookup_merge_join.t2.b, executor__index_lookup_merge_join.t2.c, executor__index_lookup_merge_join.t2.d - └─IndexLookUp 10000.00 root - ├─IndexRangeScan(Build) 10000.00 cop[tikv] table:t2, index:PRIMARY(a, b, c) range: decided by [eq(executor__index_lookup_merge_join.t2.a, executor__index_lookup_merge_join.t1.a) eq(executor__index_lookup_merge_join.t2.b, executor__index_lookup_merge_join.t1.b) eq(executor__index_lookup_merge_join.t2.c, executor__index_lookup_merge_join.t1.c)], keep order:true, desc, stats:pseudo - └─TableRowIDScan(Probe) 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo +└─IndexLookUp(Probe) 10000.00 root + ├─IndexRangeScan(Build) 10000.00 cop[tikv] table:t2, index:PRIMARY(a, b, c) range: decided by [eq(executor__index_lookup_merge_join.t2.a, executor__index_lookup_merge_join.t1.a) eq(executor__index_lookup_merge_join.t2.b, executor__index_lookup_merge_join.t1.b) eq(executor__index_lookup_merge_join.t2.c, executor__index_lookup_merge_join.t1.c)], keep order:false, stats:pseudo + └─TableRowIDScan(Probe) 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo select /*+ inl_merge_join(t1,t2) */ * from t1 left join t2 on t1.a = t2.a and t1.c = t2.c and t1.b = t2.b order by t1.a desc; a b c d a b c d 3 3 3 3 NULL NULL NULL NULL @@ -75,20 +74,21 @@ c_int c_str c_int c_str 1 Alice 1 Bob explain format = 'brief' select /*+ INL_MERGE_JOIN(t1,t2) */ * from t1 join t2 partition(p0) on t1.c_int = t2.c_int and t1.c_str < t2.c_str; id estRows task access object operator info -HashJoin 1.25 root inner join, equal:[eq(executor__index_lookup_merge_join.t1.c_int, executor__index_lookup_merge_join.t2.c_int)], other cond:lt(executor__index_lookup_merge_join.t1.c_str, executor__index_lookup_merge_join.t2.c_str) -├─TableReader(Build) 1.00 root data:Selection -│ └─Selection 1.00 cop[tikv] not(isnull(executor__index_lookup_merge_join.t2.c_str)) -│ └─TableFullScan 1.00 cop[tikv] table:t2, partition:p0 keep order:false -└─PartitionUnion(Probe) 9991.00 root - ├─TableReader 1.00 root data:Selection - │ └─Selection 1.00 cop[tikv] not(isnull(executor__index_lookup_merge_join.t1.c_str)) - │ └─TableFullScan 1.00 cop[tikv] table:t1, partition:p0 keep order:false - └─TableReader 9990.00 root data:Selection - └─Selection 9990.00 cop[tikv] not(isnull(executor__index_lookup_merge_join.t1.c_str)) - └─TableFullScan 10000.00 cop[tikv] table:t1, partition:p1 keep order:false, stats:pseudo +Projection 1.25 root executor__index_lookup_merge_join.t1.c_int, executor__index_lookup_merge_join.t1.c_str, executor__index_lookup_merge_join.t2.c_int, executor__index_lookup_merge_join.t2.c_str +└─HashJoin 1.25 root inner join, equal:[eq(executor__index_lookup_merge_join.t2.c_int, executor__index_lookup_merge_join.t1.c_int)], other cond:lt(executor__index_lookup_merge_join.t1.c_str, executor__index_lookup_merge_join.t2.c_str) + ├─TableReader(Build) 1.00 root data:Selection + │ └─Selection 1.00 cop[tikv] not(isnull(executor__index_lookup_merge_join.t2.c_str)) + │ └─TableFullScan 1.00 cop[tikv] table:t2, partition:p0 keep order:false + └─PartitionUnion(Probe) 9991.00 root + ├─TableReader 1.00 root data:Selection + │ └─Selection 1.00 cop[tikv] not(isnull(executor__index_lookup_merge_join.t1.c_str)) + │ └─TableFullScan 1.00 cop[tikv] table:t1, partition:p0 keep order:false + └─TableReader 9990.00 root data:Selection + └─Selection 9990.00 cop[tikv] not(isnull(executor__index_lookup_merge_join.t1.c_str)) + └─TableFullScan 10000.00 cop[tikv] table:t1, partition:p1 keep order:false, stats:pseudo show warnings; Level Code Message -Warning 1815 Optimizer Hint /*+ INL_MERGE_JOIN(t1, t2) */ is inapplicable +Warning 1815 The INDEX MERGE JOIN hint is deprecated for usage, try other hints. select /*+ INL_HASH_JOIN(t1,t2) */ * from t1 join t2 partition(p0) on t1.c_int = t2.c_int and t1.c_str < t2.c_str; c_int c_str c_int c_str 1 Alice 1 Bob @@ -142,7 +142,7 @@ MergeJoin 1.00 root inner join, left key:executor__index_lookup_merge_join.t1.c └─TableFullScan 1.00 cop[tikv] table:t1 keep order:true show warnings; Level Code Message -Warning 1815 Optimizer Hint /*+ INL_MERGE_JOIN(t1, t2) */ is inapplicable +Warning 1815 The INDEX MERGE JOIN hint is deprecated for usage, try other hints. select /*+ INL_HASH_JOIN(t1,t2) */ * from t1 join t2 partition(p0) on t1.c_int = t2.c_int and t1.c_str < t2.c_str; c_int c_str c_int c_str 1 Alice 1 Bob diff --git a/tests/integrationtest/r/executor/infoschema_reader.result b/tests/integrationtest/r/executor/infoschema_reader.result index 2650467c5ff74..7a5be54f476a8 100644 --- a/tests/integrationtest/r/executor/infoschema_reader.result +++ b/tests/integrationtest/r/executor/infoschema_reader.result @@ -331,3 +331,94 @@ sleep(1) select table_rows, avg_row_length, data_length, index_length from information_schema.tables where table_name='t' AND TABLE_SCHEMA='executor__infoschema_reader'; table_rows avg_row_length data_length index_length 3 18 54 6 +drop table if exists test.t; +select * from information_schema.tidb_indexes where table_name = 't'; +TABLE_SCHEMA TABLE_NAME NON_UNIQUE KEY_NAME SEQ_IN_INDEX COLUMN_NAME SUB_PART INDEX_COMMENT Expression INDEX_ID IS_VISIBLE CLUSTERED IS_GLOBAL +executor__infoschema_reader t 0 PRIMARY 1 a NULL NULL 0 YES YES 0 +executor__infoschema_reader t 1 idx 1 c NULL NULL 1 YES NO 0 +select * from information_schema.tidb_indexes where table_schema = 'executor__infoschema_reader'; +TABLE_SCHEMA TABLE_NAME NON_UNIQUE KEY_NAME SEQ_IN_INDEX COLUMN_NAME SUB_PART INDEX_COMMENT Expression INDEX_ID IS_VISIBLE CLUSTERED IS_GLOBAL +executor__infoschema_reader t 0 PRIMARY 1 a NULL NULL 0 YES YES 0 +executor__infoschema_reader t 1 idx 1 c NULL NULL 1 YES NO 0 +executor__infoschema_reader t_common 0 PRIMARY 1 a NULL NULL 1 YES YES 0 +executor__infoschema_reader t_implicit 0 PRIMARY 1 a NULL NULL 1 YES NO 0 +executor__infoschema_reader t_int 0 PRIMARY 1 a NULL NULL 0 YES YES 0 +select * from information_schema.tidb_indexes where table_schema = 'executor__infoschema_reader' and table_name = 't'; +TABLE_SCHEMA TABLE_NAME NON_UNIQUE KEY_NAME SEQ_IN_INDEX COLUMN_NAME SUB_PART INDEX_COMMENT Expression INDEX_ID IS_VISIBLE CLUSTERED IS_GLOBAL +executor__infoschema_reader t 0 PRIMARY 1 a NULL NULL 0 YES YES 0 +executor__infoschema_reader t 1 idx 1 c NULL NULL 1 YES NO 0 +select * from information_schema.tidb_indexes where table_schema = 'executor__infoschema_reader' or table_name = 't'; +TABLE_SCHEMA TABLE_NAME NON_UNIQUE KEY_NAME SEQ_IN_INDEX COLUMN_NAME SUB_PART INDEX_COMMENT Expression INDEX_ID IS_VISIBLE CLUSTERED IS_GLOBAL +executor__infoschema_reader t 0 PRIMARY 1 a NULL NULL 0 YES YES 0 +executor__infoschema_reader t 1 idx 1 c NULL NULL 1 YES NO 0 +executor__infoschema_reader t_common 0 PRIMARY 1 a NULL NULL 1 YES YES 0 +executor__infoschema_reader t_implicit 0 PRIMARY 1 a NULL NULL 1 YES NO 0 +executor__infoschema_reader t_int 0 PRIMARY 1 a NULL NULL 0 YES YES 0 +select * from information_schema.tidb_indexes where table_schema = 'executor__infoschema_reader' and column_name = 'c'; +TABLE_SCHEMA TABLE_NAME NON_UNIQUE KEY_NAME SEQ_IN_INDEX COLUMN_NAME SUB_PART INDEX_COMMENT Expression INDEX_ID IS_VISIBLE CLUSTERED IS_GLOBAL +executor__infoschema_reader t 1 idx 1 c NULL NULL 1 YES NO 0 +select * from information_schema.tidb_indexes where table_schema = 'executor__infoschema_reader' and table_name = 'non_exist'; +TABLE_SCHEMA TABLE_NAME NON_UNIQUE KEY_NAME SEQ_IN_INDEX COLUMN_NAME SUB_PART INDEX_COMMENT Expression INDEX_ID IS_VISIBLE CLUSTERED IS_GLOBAL +select * from information_schema.views where table_name = 'v1'; +TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION +def executor__infoschema_reader v1 SELECT 1 AS `1` CASCADED NO root@localhost DEFINER utf8mb4 utf8mb4_general_ci +select * from information_schema.views where table_name = 'non_exist'; +TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION +select * from information_schema.views where table_schema = 'executor__infoschema_reader'; +TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION +def executor__infoschema_reader v1 SELECT 1 AS `1` CASCADED NO root@localhost DEFINER utf8mb4 utf8mb4_general_ci +def executor__infoschema_reader v_test SELECT NULL AS `type` FROM `executor__infoschema_reader`.`t` AS `f` CASCADED NO root@1.1.1.1 DEFINER utf8mb4 utf8mb4_general_ci +select * from information_schema.views where table_schema = 'non_exist'; +TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION +select * from information_schema.views where table_schema = 'executor__infoschema_reader' and table_name = 'v1'; +TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION +def executor__infoschema_reader v1 SELECT 1 AS `1` CASCADED NO root@localhost DEFINER utf8mb4 utf8mb4_general_ci +select * from information_schema.views where table_schema = 'executor__infoschema_reader' or table_name = 'v1'; +TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE CHARACTER_SET_CLIENT COLLATION_CONNECTION +def executor__infoschema_reader v1 SELECT 1 AS `1` CASCADED NO root@localhost DEFINER utf8mb4 utf8mb4_general_ci +def executor__infoschema_reader v_test SELECT NULL AS `type` FROM `executor__infoschema_reader`.`t` AS `f` CASCADED NO root@1.1.1.1 DEFINER utf8mb4 utf8mb4_general_ci +select * from information_schema.key_column_usage where table_name = 't'; +CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION POSITION_IN_UNIQUE_CONSTRAINT REFERENCED_TABLE_SCHEMA REFERENCED_TABLE_NAME REFERENCED_COLUMN_NAME +def executor__infoschema_reader PRIMARY def executor__infoschema_reader t a 1 1 NULL NULL NULL +select * from information_schema.key_column_usage where table_schema = 'executor__infoschema_reader'; +CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION POSITION_IN_UNIQUE_CONSTRAINT REFERENCED_TABLE_SCHEMA REFERENCED_TABLE_NAME REFERENCED_COLUMN_NAME +def executor__infoschema_reader PRIMARY def executor__infoschema_reader t a 1 1 NULL NULL NULL +def executor__infoschema_reader PRIMARY def executor__infoschema_reader t_common a 1 NULL NULL NULL NULL +def executor__infoschema_reader PRIMARY def executor__infoschema_reader t_implicit a 1 NULL NULL NULL NULL +def executor__infoschema_reader PRIMARY def executor__infoschema_reader t_int a 1 1 NULL NULL NULL +select * from information_schema.key_column_usage where table_schema = 'executor__infoschema_reader' and table_name = 't'; +CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION POSITION_IN_UNIQUE_CONSTRAINT REFERENCED_TABLE_SCHEMA REFERENCED_TABLE_NAME REFERENCED_COLUMN_NAME +def executor__infoschema_reader PRIMARY def executor__infoschema_reader t a 1 1 NULL NULL NULL +select * from information_schema.key_column_usage where table_schema = 'executor__infoschema_reader' or table_name = 't'; +CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION POSITION_IN_UNIQUE_CONSTRAINT REFERENCED_TABLE_SCHEMA REFERENCED_TABLE_NAME REFERENCED_COLUMN_NAME +def executor__infoschema_reader PRIMARY def executor__infoschema_reader t a 1 1 NULL NULL NULL +def executor__infoschema_reader PRIMARY def executor__infoschema_reader t_common a 1 NULL NULL NULL NULL +def executor__infoschema_reader PRIMARY def executor__infoschema_reader t_implicit a 1 NULL NULL NULL NULL +def executor__infoschema_reader PRIMARY def executor__infoschema_reader t_int a 1 1 NULL NULL NULL +select * from information_schema.key_column_usage where table_schema = 'executor__infoschema_reader' and column_name = 'c'; +CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION POSITION_IN_UNIQUE_CONSTRAINT REFERENCED_TABLE_SCHEMA REFERENCED_TABLE_NAME REFERENCED_COLUMN_NAME +select * from information_schema.key_column_usage where table_schema = 'executor__infoschema_reader' and column_name = 'non_exist'; +CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION POSITION_IN_UNIQUE_CONSTRAINT REFERENCED_TABLE_SCHEMA REFERENCED_TABLE_NAME REFERENCED_COLUMN_NAME +CREATE TABLE tc(a INT CHECK(a > 10) NOT ENFORCED, b INT, c INT, CONSTRAINT c1 CHECK (b > c)); +select * from information_schema.table_constraints where table_name = 'tc'; +CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_SCHEMA TABLE_NAME CONSTRAINT_TYPE +select * from information_schema.table_constraints where table_schema = 'executor__infoschema_reader'; +CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_SCHEMA TABLE_NAME CONSTRAINT_TYPE +def executor__infoschema_reader PRIMARY executor__infoschema_reader t PRIMARY KEY +def executor__infoschema_reader PRIMARY executor__infoschema_reader t_common PRIMARY KEY +def executor__infoschema_reader PRIMARY executor__infoschema_reader t_implicit PRIMARY KEY +def executor__infoschema_reader PRIMARY executor__infoschema_reader t_int PRIMARY KEY +select * from information_schema.table_constraints where table_schema = 'executor__infoschema_reader' and table_name = 'tc'; +CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_SCHEMA TABLE_NAME CONSTRAINT_TYPE +select * from information_schema.table_constraints where table_schema = 'executor__infoschema_reader' or table_name = 'tc'; +CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_SCHEMA TABLE_NAME CONSTRAINT_TYPE +def executor__infoschema_reader PRIMARY executor__infoschema_reader t PRIMARY KEY +def executor__infoschema_reader PRIMARY executor__infoschema_reader t_common PRIMARY KEY +def executor__infoschema_reader PRIMARY executor__infoschema_reader t_implicit PRIMARY KEY +def executor__infoschema_reader PRIMARY executor__infoschema_reader t_int PRIMARY KEY +select * from information_schema.table_constraints where table_schema = 'executor__infoschema_reader' and table_name = 'non_exist'; +CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_SCHEMA TABLE_NAME CONSTRAINT_TYPE +select * from information_schema.table_constraints where table_schema = 'executor__infoschema_reader' and CONSTRAINT_NAME = 'c1'; +CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_SCHEMA TABLE_NAME CONSTRAINT_TYPE +def executor__infoschema_reader PRIMARY executor__infoschema_reader t PRIMARY KEY +def executor__infoschema_reader PRIMARY executor__infoschema_reader t_int PRIMARY KEY diff --git a/tests/integrationtest/r/executor/issues.result b/tests/integrationtest/r/executor/issues.result index 8b8e310f27ac2..c9d9e476f65dc 100644 --- a/tests/integrationtest/r/executor/issues.result +++ b/tests/integrationtest/r/executor/issues.result @@ -868,3 +868,137 @@ set @@tidb_max_chunk_size = default; select tan(9021874879467600608071521900001091070693729763119983979); tan(9021874879467600608071521900001091070693729763119983979) 8.068627196084492 +drop table if exists t; +create table t (id int auto_increment, c char(120), primary key(id)); +create table pt (id int primary key auto_increment, val int) partition by range (id) +(PARTITION p1 VALUES LESS THAN (100), +PARTITION p2 VALUES LESS THAN (200), +PARTITION p3 VALUES LESS THAN (300), +PARTITION p4 VALUES LESS THAN (400), +PARTITION p5 VALUES LESS THAN (500), +PARTITION p6 VALUES LESS THAN (600), +PARTITION p7 VALUES LESS THAN (700)); +insert into t (c) values ('abc'), ('def'), ('ghi'), ('jkl'); +insert into t (c) select (c) from t; +insert into t (c) select (c) from t; +insert into t (c) select (c) from t; +insert into t (c) select (c) from t; +insert into t (c) select (c) from t; +insert into t (c) select (c) from t; +split table t between (0) and (40960) regions 30; +TOTAL_SPLIT_REGION SCATTER_FINISH_RATIO +29 1 +analyze table t; +insert into pt (val) values (123),(456),(789),(1112); +insert into pt (val) select (val) from pt; +insert into pt (val) select (val) from pt; +insert into pt (val) select (val) from pt; +insert into pt (val) select (val) from pt; +insert into pt (val) select (val) from pt; +insert into pt (val) select (val) from pt; +split table pt between (0) and (40960) regions 30; +TOTAL_SPLIT_REGION SCATTER_FINISH_RATIO +203 1 +analyze table pt; +set @@tidb_distsql_scan_concurrency = default; +explain analyze select * from t order by id; # expected distsql concurrency 2 +id estRows actRows task access object execution info operator info memory disk +TableReader_11 256.00 root NULL max_distsql_concurrency: 2 NULL +└─TableFullScan_10 256.00 cop[tikv] table:t NULL keep order:true +explain analyze select * from t limit 100; # expected distsql concurrency 1 +id estRows actRows task access object execution info operator info memory disk +Limit_7 100.00 root NULL NULL offset:0, count:100 +└─TableReader_11 100.00 root NULL max_distsql_concurrency: 1 NULL + └─Limit_10 100.00 cop[tikv] NULL NULL offset:0, count:100 + └─TableFullScan_9 100.00 cop[tikv] table:t NULL keep order:false +explain analyze select * from t limit 100000; # expected distsql concurrency 15 +id estRows actRows task access object execution info operator info memory disk +Limit_7 256.00 root NULL NULL offset:0, count:100000 +└─TableReader_11 256.00 root NULL max_distsql_concurrency: 15 NULL + └─Limit_10 256.00 cop[tikv] NULL NULL offset:0, count:100000 + └─TableFullScan_9 256.00 cop[tikv] table:t NULL keep order:false +explain analyze select * from t where c = 'abc' limit 100; # expected distsql concurrency 15 +id estRows actRows task access object execution info operator info memory disk +Limit_8 0.26 root NULL NULL offset:0, count:100 +└─TableReader_13 0.26 root NULL max_distsql_concurrency: 15 NULL + └─Limit_12 0.26 cop[tikv] NULL NULL offset:0, count:100 + └─Selection_11 0.26 cop[tikv] NULL NULL eq(executor__issues.t.c, "abc") + └─TableFullScan_10 256.00 cop[tikv] table:t NULL keep order:false, stats:partial[c:unInitialized] +explain analyze select * from t where c = 'abc' limit 100000; # expected distsql concurrency 15 +id estRows actRows task access object execution info operator info memory disk +Limit_8 0.26 root NULL NULL offset:0, count:100000 +└─TableReader_13 0.26 root NULL max_distsql_concurrency: 15 NULL + └─Limit_12 0.26 cop[tikv] NULL NULL offset:0, count:100000 + └─Selection_11 0.26 cop[tikv] NULL NULL eq(executor__issues.t.c, "abc") + └─TableFullScan_10 256.00 cop[tikv] table:t NULL keep order:false, stats:partial[c:unInitialized] +explain analyze select * from t order by id limit 100; # expected distsql concurrency 1 +id estRows actRows task access object execution info operator info memory disk +Limit_10 100.00 root NULL NULL offset:0, count:100 +└─TableReader_17 100.00 root NULL max_distsql_concurrency: 1 NULL + └─Limit_16 100.00 cop[tikv] NULL NULL offset:0, count:100 + └─TableFullScan_15 100.00 cop[tikv] table:t NULL keep order:true +explain analyze select * from t order by id limit 100000; # expected distsql concurrency 15 +id estRows actRows task access object execution info operator info memory disk +Limit_11 256.00 root NULL NULL offset:0, count:100000 +└─TableReader_21 256.00 root NULL max_distsql_concurrency: 15 NULL + └─Limit_20 256.00 cop[tikv] NULL NULL offset:0, count:100000 + └─TableFullScan_19 256.00 cop[tikv] table:t NULL keep order:true +explain analyze select * from t where c = 'abd' order by id limit 100; +id estRows actRows task access object execution info operator info memory disk +Limit_11 0.26 root NULL NULL offset:0, count:100 +└─TableReader_20 0.26 root NULL max_distsql_concurrency: 15 NULL + └─Limit_19 0.26 cop[tikv] NULL NULL offset:0, count:100 + └─Selection_18 0.26 cop[tikv] NULL NULL eq(executor__issues.t.c, "abd") + └─TableFullScan_17 256.00 cop[tikv] table:t NULL keep order:true, stats:partial[c:unInitialized] +select @@tidb_partition_prune_mode; +@@tidb_partition_prune_mode +dynamic +explain analyze select * from pt order by id; # expected distsql concurrency 2 +id estRows actRows task access object execution info operator info memory disk +TableReader_11 256.00 root partition:all max_distsql_concurrency: 2 NULL +└─TableFullScan_10 256.00 cop[tikv] table:pt NULL keep order:true +explain analyze select * from pt limit 100; # expected distsql concurrency 7 +id estRows actRows task access object execution info operator info memory disk +Limit_7 100.00 root NULL NULL offset:0, count:100 +└─TableReader_11 100.00 root partition:all max_distsql_concurrency: 7 NULL + └─Limit_10 100.00 cop[tikv] NULL NULL offset:0, count:100 + └─TableFullScan_9 100.00 cop[tikv] table:pt NULL keep order:false +explain analyze select * from pt limit 100000; # expected distsql concurrency 15 +id estRows actRows task access object execution info operator info memory disk +Limit_7 256.00 root NULL NULL offset:0, count:100000 +└─TableReader_11 256.00 root partition:all max_distsql_concurrency: 15 NULL + └─Limit_10 256.00 cop[tikv] NULL NULL offset:0, count:100000 + └─TableFullScan_9 256.00 cop[tikv] table:pt NULL keep order:false +explain analyze select * from pt where val = 125 limit 100; # expected distsql concurrency 15 +id estRows actRows task access object execution info operator info memory disk +Limit_8 100.00 root NULL NULL offset:0, count:100 +└─TableReader_13 100.00 root partition:all max_distsql_concurrency: 15 NULL + └─Limit_12 100.00 cop[tikv] NULL NULL offset:0, count:100 + └─Selection_11 100.00 cop[tikv] NULL NULL eq(executor__issues.pt.val, 125) + └─TableFullScan_10 125.00 cop[tikv] table:pt NULL keep order:false, stats:partial[val:missing] +explain analyze select * from pt where val = 125 limit 100000; # expected distsql concurrency 15 +id estRows actRows task access object execution info operator info memory disk +Limit_8 204.80 root NULL NULL offset:0, count:100000 +└─TableReader_13 204.80 root partition:all max_distsql_concurrency: 15 NULL + └─Limit_12 204.80 cop[tikv] NULL NULL offset:0, count:100000 + └─Selection_11 204.80 cop[tikv] NULL NULL eq(executor__issues.pt.val, 125) + └─TableFullScan_10 256.00 cop[tikv] table:pt NULL keep order:false, stats:partial[val:missing] +explain analyze select * from pt order by id limit 100; # expected distsql concurrency 7, but currently get 1, see issue #55190 +id estRows actRows task access object execution info operator info memory disk +Limit_10 100.00 root NULL NULL offset:0, count:100 +└─TableReader_17 100.00 root partition:all max_distsql_concurrency: 1 NULL + └─Limit_16 100.00 cop[tikv] NULL NULL offset:0, count:100 + └─TableFullScan_15 100.00 cop[tikv] table:pt NULL keep order:true +explain analyze select * from pt order by id limit 100000; # expected distsql concurrency 15 +id estRows actRows task access object execution info operator info memory disk +Limit_11 256.00 root NULL NULL offset:0, count:100000 +└─TableReader_21 256.00 root partition:all max_distsql_concurrency: 15 NULL + └─Limit_20 256.00 cop[tikv] NULL NULL offset:0, count:100000 + └─TableFullScan_19 256.00 cop[tikv] table:pt NULL keep order:true +explain analyze select * from pt where val = 126 order by id limit 100; # expected distsql concurrency 15 +id estRows actRows task access object execution info operator info memory disk +Limit_11 100.00 root NULL NULL offset:0, count:100 +└─TableReader_20 100.00 root partition:all max_distsql_concurrency: 15 NULL + └─Limit_19 100.00 cop[tikv] NULL NULL offset:0, count:100 + └─Selection_18 100.00 cop[tikv] NULL NULL eq(executor__issues.pt.val, 126) + └─TableFullScan_17 125.00 cop[tikv] table:pt NULL keep order:true, stats:partial[val:missing] diff --git a/tests/integrationtest/r/executor/jointest/hash_join.result b/tests/integrationtest/r/executor/jointest/hash_join.result index 876fe8c8c807f..649109899f085 100644 --- a/tests/integrationtest/r/executor/jointest/hash_join.result +++ b/tests/integrationtest/r/executor/jointest/hash_join.result @@ -252,13 +252,13 @@ count(*) desc format = 'brief' select /*+ INL_MERGE_JOIN(s) */ count(*) from t join s use index(idx) on s.a = t.a and s.b < t.b; id estRows task access object operator info HashAgg 1.00 root funcs:count(1)->Column#6 -└─IndexMergeJoin 64.00 root inner join, inner:IndexReader, outer key:executor__jointest__hash_join.t.a, inner key:executor__jointest__hash_join.s.a, other cond:lt(executor__jointest__hash_join.s.b, executor__jointest__hash_join.t.b) - ├─TableReader(Build) 64.00 root data:Selection - │ └─Selection 64.00 cop[tikv] not(isnull(executor__jointest__hash_join.t.b)) - │ └─TableFullScan 64.00 cop[tikv] table:t keep order:false - └─IndexReader(Probe) 64.00 root index:Selection - └─Selection 64.00 cop[tikv] not(isnull(executor__jointest__hash_join.s.a)), not(isnull(executor__jointest__hash_join.s.b)) - └─IndexRangeScan 64.00 cop[tikv] table:s, index:idx(a, b) range: decided by [eq(executor__jointest__hash_join.s.a, executor__jointest__hash_join.t.a) lt(executor__jointest__hash_join.s.b, executor__jointest__hash_join.t.b)], keep order:true +└─MergeJoin 64.00 root inner join, left key:executor__jointest__hash_join.t.a, right key:executor__jointest__hash_join.s.a, other cond:lt(executor__jointest__hash_join.s.b, executor__jointest__hash_join.t.b) + ├─IndexReader(Build) 64.00 root index:Selection + │ └─Selection 64.00 cop[tikv] not(isnull(executor__jointest__hash_join.s.b)) + │ └─IndexFullScan 64.00 cop[tikv] table:s, index:idx(a, b) keep order:true + └─TableReader(Probe) 64.00 root data:Selection + └─Selection 64.00 cop[tikv] not(isnull(executor__jointest__hash_join.t.b)) + └─TableFullScan 64.00 cop[tikv] table:t keep order:true select /*+ INL_MERGE_JOIN(s) */ count(*) from t join s use index(idx) on s.a = t.a and s.b < t.b; count(*) 64 diff --git a/tests/integrationtest/r/executor/partition/partition_boundaries.result b/tests/integrationtest/r/executor/partition/partition_boundaries.result index fbb2627e500ea..5148ee5e34696 100644 --- a/tests/integrationtest/r/executor/partition/partition_boundaries.result +++ b/tests/integrationtest/r/executor/partition/partition_boundaries.result @@ -125,29 +125,29 @@ a b 1000002 1000002 Filler ... explain format='brief' SELECT * FROM t WHERE a = 3000000; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] eq(executor__partition__partition_boundaries.t.a, 3000000) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] eq(executor__partition__partition_boundaries.t.a, 3000000) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a = 3000000; a b explain format='brief' SELECT * FROM t WHERE a IN (3000000); id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] eq(executor__partition__partition_boundaries.t.a, 3000000) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] eq(executor__partition__partition_boundaries.t.a, 3000000) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a IN (3000000); a b explain format='brief' SELECT * FROM t WHERE a = 3000001; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] eq(executor__partition__partition_boundaries.t.a, 3000001) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] eq(executor__partition__partition_boundaries.t.a, 3000001) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a = 3000001; a b explain format='brief' SELECT * FROM t WHERE a IN (3000001); id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] eq(executor__partition__partition_boundaries.t.a, 3000001) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] eq(executor__partition__partition_boundaries.t.a, 3000001) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a IN (3000001); a b @@ -161,8 +161,8 @@ a b -2147483648 MIN_INT filler... explain format='brief' SELECT * FROM t WHERE a IN (-2147483647, -2147483646); id estRows task access object operator info -TableReader 0.00 root partition:p0 data:Selection -└─Selection 0.00 cop[tikv] in(executor__partition__partition_boundaries.t.a, -2147483647, -2147483646) +TableReader 1.00 root partition:p0 data:Selection +└─Selection 1.00 cop[tikv] in(executor__partition__partition_boundaries.t.a, -2147483647, -2147483646) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a IN (-2147483647, -2147483646); a b @@ -272,8 +272,8 @@ a b 2999999 2999999 Filler ... explain format='brief' SELECT * FROM t WHERE a IN (3000000, 3000001, 3000002); id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] in(executor__partition__partition_boundaries.t.a, 3000000, 3000001, 3000002) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] in(executor__partition__partition_boundaries.t.a, 3000000, 3000001, 3000002) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a IN (3000000, 3000001, 3000002); a b @@ -342,8 +342,8 @@ a b 6 6 Filler... explain format='brief' SELECT * FROM t WHERE 1 = 0 OR a = -1; id estRows task access object operator info -TableReader 0.00 root partition:p0 data:Selection -└─Selection 0.00 cop[tikv] or(0, eq(executor__partition__partition_boundaries.t.a, -1)) +TableReader 1.00 root partition:p0 data:Selection +└─Selection 1.00 cop[tikv] or(0, eq(executor__partition__partition_boundaries.t.a, -1)) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE 1 = 0 OR a = -1; a b @@ -629,15 +629,15 @@ a b 5 5 Filler... explain format='brief' SELECT * FROM t WHERE 1 = 1 AND a != -1 AND a != 0 AND a != 1 AND a != 2 AND a != 3 AND a != 4 AND a != 5 AND a != 6; id estRows task access object operator info -TableReader 0.00 root partition:all data:Selection -└─Selection 0.00 cop[tikv] ne(executor__partition__partition_boundaries.t.a, -1), ne(executor__partition__partition_boundaries.t.a, 0), ne(executor__partition__partition_boundaries.t.a, 1), ne(executor__partition__partition_boundaries.t.a, 2), ne(executor__partition__partition_boundaries.t.a, 3), ne(executor__partition__partition_boundaries.t.a, 4), ne(executor__partition__partition_boundaries.t.a, 5), ne(executor__partition__partition_boundaries.t.a, 6) +TableReader 1.00 root partition:all data:Selection +└─Selection 1.00 cop[tikv] ne(executor__partition__partition_boundaries.t.a, -1), ne(executor__partition__partition_boundaries.t.a, 0), ne(executor__partition__partition_boundaries.t.a, 1), ne(executor__partition__partition_boundaries.t.a, 2), ne(executor__partition__partition_boundaries.t.a, 3), ne(executor__partition__partition_boundaries.t.a, 4), ne(executor__partition__partition_boundaries.t.a, 5), ne(executor__partition__partition_boundaries.t.a, 6) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE 1 = 1 AND a != -1 AND a != 0 AND a != 1 AND a != 2 AND a != 3 AND a != 4 AND a != 5 AND a != 6; a b explain format='brief' SELECT * FROM t WHERE a NOT IN (-2, -1, 0, 1, 2, 3, 4, 5, 6); id estRows task access object operator info -TableReader 0.00 root partition:all data:Selection -└─Selection 0.00 cop[tikv] not(in(executor__partition__partition_boundaries.t.a, -2, -1, 0, 1, 2, 3, 4, 5, 6)) +TableReader 1.00 root partition:all data:Selection +└─Selection 1.00 cop[tikv] not(in(executor__partition__partition_boundaries.t.a, -2, -1, 0, 1, 2, 3, 4, 5, 6)) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a NOT IN (-2, -1, 0, 1, 2, 3, 4, 5, 6); a b @@ -671,15 +671,15 @@ a b 6 6 Filler... explain format='brief' SELECT * FROM t WHERE 1 = 1 AND a != -1 AND a != 0 AND a != 1 AND a != 2 AND a != 3 AND a != 4 AND a != 5 AND a != 6 AND a != 7; id estRows task access object operator info -TableReader 0.00 root partition:all data:Selection -└─Selection 0.00 cop[tikv] ne(executor__partition__partition_boundaries.t.a, -1), ne(executor__partition__partition_boundaries.t.a, 0), ne(executor__partition__partition_boundaries.t.a, 1), ne(executor__partition__partition_boundaries.t.a, 2), ne(executor__partition__partition_boundaries.t.a, 3), ne(executor__partition__partition_boundaries.t.a, 4), ne(executor__partition__partition_boundaries.t.a, 5), ne(executor__partition__partition_boundaries.t.a, 6), ne(executor__partition__partition_boundaries.t.a, 7) +TableReader 1.00 root partition:all data:Selection +└─Selection 1.00 cop[tikv] ne(executor__partition__partition_boundaries.t.a, -1), ne(executor__partition__partition_boundaries.t.a, 0), ne(executor__partition__partition_boundaries.t.a, 1), ne(executor__partition__partition_boundaries.t.a, 2), ne(executor__partition__partition_boundaries.t.a, 3), ne(executor__partition__partition_boundaries.t.a, 4), ne(executor__partition__partition_boundaries.t.a, 5), ne(executor__partition__partition_boundaries.t.a, 6), ne(executor__partition__partition_boundaries.t.a, 7) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE 1 = 1 AND a != -1 AND a != 0 AND a != 1 AND a != 2 AND a != 3 AND a != 4 AND a != 5 AND a != 6 AND a != 7; a b explain format='brief' SELECT * FROM t WHERE a NOT IN (-2, -1, 0, 1, 2, 3, 4, 5, 6, 7); id estRows task access object operator info -TableReader 0.00 root partition:all data:Selection -└─Selection 0.00 cop[tikv] not(in(executor__partition__partition_boundaries.t.a, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7)) +TableReader 1.00 root partition:all data:Selection +└─Selection 1.00 cop[tikv] not(in(executor__partition__partition_boundaries.t.a, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7)) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a NOT IN (-2, -1, 0, 1, 2, 3, 4, 5, 6, 7); a b @@ -712,8 +712,8 @@ INSERT INTO t VALUES (-2147483648, 'MIN_INT filler...'), (0, '0 Filler...'); ANALYZE TABLE t all columns; explain format='brief' SELECT * FROM t WHERE a BETWEEN -2147483648 AND -2147483649; id estRows task access object operator info -TableReader 0.00 root partition:p0 data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, -2147483648), le(executor__partition__partition_boundaries.t.a, -2147483649) +TableReader 1.00 root partition:p0 data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, -2147483648), le(executor__partition__partition_boundaries.t.a, -2147483649) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN -2147483648 AND -2147483649; a b @@ -791,8 +791,8 @@ a b -2147483648 MIN_INT filler... explain format='brief' SELECT * FROM t WHERE a BETWEEN 0 AND -1; id estRows task access object operator info -TableReader 0.00 root partition:p0 data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 0), le(executor__partition__partition_boundaries.t.a, -1) +TableReader 1.00 root partition:p0 data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 0), le(executor__partition__partition_boundaries.t.a, -1) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 0 AND -1; a b @@ -885,8 +885,8 @@ a b 999999 999999 Filler ... explain format='brief' SELECT * FROM t WHERE a BETWEEN 999998 AND 999997; id estRows task access object operator info -TableReader 0.00 root partition:p0 data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 999998), le(executor__partition__partition_boundaries.t.a, 999997) +TableReader 1.00 root partition:p0 data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 999998), le(executor__partition__partition_boundaries.t.a, 999997) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 999998 AND 999997; a b @@ -997,8 +997,8 @@ a b 999999 999999 Filler ... explain format='brief' SELECT * FROM t WHERE a BETWEEN 999999 AND 999998; id estRows task access object operator info -TableReader 0.00 root partition:p0 data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 999999), le(executor__partition__partition_boundaries.t.a, 999998) +TableReader 1.00 root partition:p0 data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 999999), le(executor__partition__partition_boundaries.t.a, 999998) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 999999 AND 999998; a b @@ -1107,8 +1107,8 @@ a b 999999 999999 Filler ... explain format='brief' SELECT * FROM t WHERE a BETWEEN 1000000 AND 999999; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 1000000), le(executor__partition__partition_boundaries.t.a, 999999) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 1000000), le(executor__partition__partition_boundaries.t.a, 999999) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 1000000 AND 999999; a b @@ -1216,8 +1216,8 @@ a b 2000002 2000002 Filler ... explain format='brief' SELECT * FROM t WHERE a BETWEEN 1000001 AND 1000000; id estRows task access object operator info -TableReader 0.00 root partition:p1 data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 1000001), le(executor__partition__partition_boundaries.t.a, 1000000) +TableReader 1.00 root partition:p1 data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 1000001), le(executor__partition__partition_boundaries.t.a, 1000000) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 1000001 AND 1000000; a b @@ -1322,8 +1322,8 @@ a b 2000002 2000002 Filler ... explain format='brief' SELECT * FROM t WHERE a BETWEEN 1000002 AND 1000001; id estRows task access object operator info -TableReader 0.00 root partition:p1 data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 1000002), le(executor__partition__partition_boundaries.t.a, 1000001) +TableReader 1.00 root partition:p1 data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 1000002), le(executor__partition__partition_boundaries.t.a, 1000001) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 1000002 AND 1000001; a b @@ -1423,141 +1423,141 @@ a b 2000002 2000002 Filler ... explain format='brief' SELECT * FROM t WHERE a BETWEEN 3000000 AND 2999999; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000000), le(executor__partition__partition_boundaries.t.a, 2999999) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000000), le(executor__partition__partition_boundaries.t.a, 2999999) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 3000000 AND 2999999; a b explain format='brief' SELECT * FROM t WHERE a BETWEEN 3000000 AND 3000000; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000000), le(executor__partition__partition_boundaries.t.a, 3000000) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000000), le(executor__partition__partition_boundaries.t.a, 3000000) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 3000000 AND 3000000; a b explain format='brief' SELECT * FROM t WHERE a BETWEEN 3000000 AND 3000001; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000000), le(executor__partition__partition_boundaries.t.a, 3000001) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000000), le(executor__partition__partition_boundaries.t.a, 3000001) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 3000000 AND 3000001; a b explain format='brief' SELECT * FROM t WHERE a BETWEEN 3000000 AND 3000002; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000000), le(executor__partition__partition_boundaries.t.a, 3000002) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000000), le(executor__partition__partition_boundaries.t.a, 3000002) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 3000000 AND 3000002; a b explain format='brief' SELECT * FROM t WHERE a BETWEEN 3000000 AND 3000010; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000000), le(executor__partition__partition_boundaries.t.a, 3000010) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000000), le(executor__partition__partition_boundaries.t.a, 3000010) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 3000000 AND 3000010; a b explain format='brief' SELECT * FROM t WHERE a BETWEEN 3000000 AND 3999998; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000000), le(executor__partition__partition_boundaries.t.a, 3999998) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000000), le(executor__partition__partition_boundaries.t.a, 3999998) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 3000000 AND 3999998; a b explain format='brief' SELECT * FROM t WHERE a BETWEEN 3000000 AND 3999999; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000000), le(executor__partition__partition_boundaries.t.a, 3999999) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000000), le(executor__partition__partition_boundaries.t.a, 3999999) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 3000000 AND 3999999; a b explain format='brief' SELECT * FROM t WHERE a BETWEEN 3000000 AND 4000000; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000000), le(executor__partition__partition_boundaries.t.a, 4000000) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000000), le(executor__partition__partition_boundaries.t.a, 4000000) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 3000000 AND 4000000; a b explain format='brief' SELECT * FROM t WHERE a BETWEEN 3000000 AND 4000001; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000000), le(executor__partition__partition_boundaries.t.a, 4000001) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000000), le(executor__partition__partition_boundaries.t.a, 4000001) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 3000000 AND 4000001; a b explain format='brief' SELECT * FROM t WHERE a BETWEEN 3000000 AND 4000002; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000000), le(executor__partition__partition_boundaries.t.a, 4000002) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000000), le(executor__partition__partition_boundaries.t.a, 4000002) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 3000000 AND 4000002; a b explain format='brief' SELECT * FROM t WHERE a BETWEEN 3000001 AND 3000000; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000001), le(executor__partition__partition_boundaries.t.a, 3000000) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000001), le(executor__partition__partition_boundaries.t.a, 3000000) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 3000001 AND 3000000; a b explain format='brief' SELECT * FROM t WHERE a BETWEEN 3000001 AND 3000001; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000001), le(executor__partition__partition_boundaries.t.a, 3000001) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000001), le(executor__partition__partition_boundaries.t.a, 3000001) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 3000001 AND 3000001; a b explain format='brief' SELECT * FROM t WHERE a BETWEEN 3000001 AND 3000002; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000001), le(executor__partition__partition_boundaries.t.a, 3000002) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000001), le(executor__partition__partition_boundaries.t.a, 3000002) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 3000001 AND 3000002; a b explain format='brief' SELECT * FROM t WHERE a BETWEEN 3000001 AND 3000003; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000001), le(executor__partition__partition_boundaries.t.a, 3000003) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000001), le(executor__partition__partition_boundaries.t.a, 3000003) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 3000001 AND 3000003; a b explain format='brief' SELECT * FROM t WHERE a BETWEEN 3000001 AND 3000011; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000001), le(executor__partition__partition_boundaries.t.a, 3000011) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000001), le(executor__partition__partition_boundaries.t.a, 3000011) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 3000001 AND 3000011; a b explain format='brief' SELECT * FROM t WHERE a BETWEEN 3000001 AND 3999999; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000001), le(executor__partition__partition_boundaries.t.a, 3999999) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000001), le(executor__partition__partition_boundaries.t.a, 3999999) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 3000001 AND 3999999; a b explain format='brief' SELECT * FROM t WHERE a BETWEEN 3000001 AND 4000000; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000001), le(executor__partition__partition_boundaries.t.a, 4000000) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000001), le(executor__partition__partition_boundaries.t.a, 4000000) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 3000001 AND 4000000; a b explain format='brief' SELECT * FROM t WHERE a BETWEEN 3000001 AND 4000001; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000001), le(executor__partition__partition_boundaries.t.a, 4000001) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000001), le(executor__partition__partition_boundaries.t.a, 4000001) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 3000001 AND 4000001; a b explain format='brief' SELECT * FROM t WHERE a BETWEEN 3000001 AND 4000002; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000001), le(executor__partition__partition_boundaries.t.a, 4000002) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000001), le(executor__partition__partition_boundaries.t.a, 4000002) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 3000001 AND 4000002; a b explain format='brief' SELECT * FROM t WHERE a BETWEEN 3000001 AND 4000003; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000001), le(executor__partition__partition_boundaries.t.a, 4000003) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000001), le(executor__partition__partition_boundaries.t.a, 4000003) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 3000001 AND 4000003; a b @@ -1582,8 +1582,8 @@ INSERT INTO t VALUES (6, '6 Filler...'); ANALYZE TABLE t all columns; explain format='brief' SELECT * FROM t WHERE a BETWEEN 2 AND -1; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, -1) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, -1) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 2 AND -1; a b @@ -1601,8 +1601,8 @@ a b 4 4 Filler... explain format='brief' SELECT * FROM t WHERE a BETWEEN 2 AND 0; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, 0) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, 0) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 2 AND 0; a b @@ -1620,8 +1620,8 @@ a b 4 4 Filler... explain format='brief' SELECT * FROM t WHERE a BETWEEN 2 AND 1; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, 1) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, 1) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 2 AND 1; a b @@ -1703,8 +1703,8 @@ a b 5 5 Filler... explain format='brief' SELECT * FROM t WHERE a BETWEEN 5 AND 4; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 5), le(executor__partition__partition_boundaries.t.a, 4) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 5), le(executor__partition__partition_boundaries.t.a, 4) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 5 AND 4; a b @@ -1722,8 +1722,8 @@ a b 6 6 Filler... explain format='brief' SELECT * FROM t WHERE a BETWEEN 6 AND 4; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 6), le(executor__partition__partition_boundaries.t.a, 4) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 6), le(executor__partition__partition_boundaries.t.a, 4) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 6 AND 4; a b @@ -1741,8 +1741,8 @@ a b 6 6 Filler... explain format='brief' SELECT * FROM t WHERE a BETWEEN 7 AND 4; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 7), le(executor__partition__partition_boundaries.t.a, 4) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 7), le(executor__partition__partition_boundaries.t.a, 4) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a BETWEEN 7 AND 4; a b @@ -1761,8 +1761,8 @@ INSERT INTO t VALUES (-2147483648, 'MIN_INT filler...'), (0, '0 Filler...'); ANALYZE TABLE t all columns; explain format='brief' SELECT * FROM t WHERE a < -2147483648; id estRows task access object operator info -TableReader 0.00 root partition:p0 data:Selection -└─Selection 0.00 cop[tikv] lt(executor__partition__partition_boundaries.t.a, -2147483648) +TableReader 1.00 root partition:p0 data:Selection +└─Selection 1.00 cop[tikv] lt(executor__partition__partition_boundaries.t.a, -2147483648) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a < -2147483648; a b @@ -2174,8 +2174,8 @@ a b 999999 999999 Filler ... explain format='brief' SELECT * FROM t WHERE a > 3000000; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 3000000) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 3000000) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a > 3000000; a b @@ -2202,8 +2202,8 @@ a b 999999 999999 Filler ... explain format='brief' SELECT * FROM t WHERE a >= 3000000; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000000) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000000) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a >= 3000000; a b @@ -2230,8 +2230,8 @@ a b 999999 999999 Filler ... explain format='brief' SELECT * FROM t WHERE a > 3000001; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 3000001) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 3000001) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a > 3000001; a b @@ -2258,8 +2258,8 @@ a b 999999 999999 Filler ... explain format='brief' SELECT * FROM t WHERE a >= 3000001; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000001) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000001) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a >= 3000001; a b @@ -3199,8 +3199,8 @@ a b 999999 999999 Filler ... explain format='brief' SELECT * FROM t WHERE a > 2999999; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 2999999) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 2999999) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a > 2999999; a b @@ -3243,22 +3243,22 @@ a b 2999999 2999999 Filler ... explain format='brief' SELECT * FROM t WHERE a > 2999999 AND a <= 3000001; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 2999999), le(executor__partition__partition_boundaries.t.a, 3000001) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 2999999), le(executor__partition__partition_boundaries.t.a, 3000001) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a > 2999999 AND a <= 3000001; a b explain format='brief' SELECT * FROM t WHERE a > 2999999 AND a < 3000001; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 2999999), lt(executor__partition__partition_boundaries.t.a, 3000001) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 2999999), lt(executor__partition__partition_boundaries.t.a, 3000001) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a > 2999999 AND a < 3000001; a b explain format='brief' SELECT * FROM t WHERE a > 2999999 AND a <= 3000001; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 2999999), le(executor__partition__partition_boundaries.t.a, 3000001) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 2999999), le(executor__partition__partition_boundaries.t.a, 3000001) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a > 2999999 AND a <= 3000001; a b @@ -3285,8 +3285,8 @@ a b 999999 999999 Filler ... explain format='brief' SELECT * FROM t WHERE a > 3000000; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 3000000) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 3000000) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a > 3000000; a b @@ -3313,36 +3313,36 @@ a b 999999 999999 Filler ... explain format='brief' SELECT * FROM t WHERE a >= 3000000; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000000) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000000) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a >= 3000000; a b explain format='brief' SELECT * FROM t WHERE a >= 3000000 AND a <= 3000002; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000000), le(executor__partition__partition_boundaries.t.a, 3000002) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 3000000), le(executor__partition__partition_boundaries.t.a, 3000002) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a >= 3000000 AND a <= 3000002; a b explain format='brief' SELECT * FROM t WHERE a > 3000000 AND a <= 3000002; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 3000000), le(executor__partition__partition_boundaries.t.a, 3000002) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 3000000), le(executor__partition__partition_boundaries.t.a, 3000002) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a > 3000000 AND a <= 3000002; a b explain format='brief' SELECT * FROM t WHERE a > 3000000 AND a < 3000002; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 3000000), lt(executor__partition__partition_boundaries.t.a, 3000002) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 3000000), lt(executor__partition__partition_boundaries.t.a, 3000002) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a > 3000000 AND a < 3000002; a b explain format='brief' SELECT * FROM t WHERE a > 3000000 AND a <= 3000002; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 3000000), le(executor__partition__partition_boundaries.t.a, 3000002) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 3000000), le(executor__partition__partition_boundaries.t.a, 3000002) └─TableFullScan 14.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a > 3000000 AND a <= 3000002; a b @@ -3369,8 +3369,8 @@ INSERT INTO t VALUES (6, '6 Filler...'); ANALYZE TABLE t all columns; explain format='brief' SELECT * FROM t WHERE a < -1; id estRows task access object operator info -TableReader 0.00 root partition:p0 data:Selection -└─Selection 0.00 cop[tikv] lt(executor__partition__partition_boundaries.t.a, -1) +TableReader 1.00 root partition:p0 data:Selection +└─Selection 1.00 cop[tikv] lt(executor__partition__partition_boundaries.t.a, -1) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a < -1; a b @@ -3390,8 +3390,8 @@ a b 6 6 Filler... explain format='brief' SELECT * FROM t WHERE a <= -1; id estRows task access object operator info -TableReader 0.00 root partition:p0 data:Selection -└─Selection 0.00 cop[tikv] le(executor__partition__partition_boundaries.t.a, -1) +TableReader 1.00 root partition:p0 data:Selection +└─Selection 1.00 cop[tikv] le(executor__partition__partition_boundaries.t.a, -1) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a <= -1; a b @@ -3425,15 +3425,15 @@ a b 6 6 Filler... explain format='brief' SELECT * FROM t WHERE a > 2 AND a < -1; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, -1) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, -1) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a > 2 AND a < -1; a b explain format='brief' SELECT * FROM t WHERE NOT (a < 2 OR a > -1); id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] and(ge(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, -1)) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] and(ge(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, -1)) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE NOT (a < 2 OR a > -1); a b @@ -3467,15 +3467,15 @@ a b 6 6 Filler... explain format='brief' SELECT * FROM t WHERE a >= 2 AND a < -1; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, -1) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, -1) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a >= 2 AND a < -1; a b explain format='brief' SELECT * FROM t WHERE NOT (a < 2 OR a >= -1); id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] and(ge(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, -1)) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] and(ge(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, -1)) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE NOT (a < 2 OR a >= -1); a b @@ -3509,15 +3509,15 @@ a b 6 6 Filler... explain format='brief' SELECT * FROM t WHERE a > 2 AND a <= -1; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, -1) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, -1) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a > 2 AND a <= -1; a b explain format='brief' SELECT * FROM t WHERE NOT (a <= 2 OR a > -1); id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] and(gt(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, -1)) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] and(gt(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, -1)) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE NOT (a <= 2 OR a > -1); a b @@ -3551,15 +3551,15 @@ a b 6 6 Filler... explain format='brief' SELECT * FROM t WHERE a >= 2 AND a <= -1; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, -1) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, -1) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a >= 2 AND a <= -1; a b explain format='brief' SELECT * FROM t WHERE NOT (a <= 2 OR a >= -1); id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] and(gt(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, -1)) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] and(gt(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, -1)) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE NOT (a <= 2 OR a >= -1); a b @@ -3579,8 +3579,8 @@ a b 6 6 Filler... explain format='brief' SELECT * FROM t WHERE a < 0; id estRows task access object operator info -TableReader 0.00 root partition:p0 data:Selection -└─Selection 0.00 cop[tikv] lt(executor__partition__partition_boundaries.t.a, 0) +TableReader 1.00 root partition:p0 data:Selection +└─Selection 1.00 cop[tikv] lt(executor__partition__partition_boundaries.t.a, 0) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a < 0; a b @@ -3635,15 +3635,15 @@ a b 6 6 Filler... explain format='brief' SELECT * FROM t WHERE a > 2 AND a < 0; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 0) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 0) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a > 2 AND a < 0; a b explain format='brief' SELECT * FROM t WHERE NOT (a < 2 OR a > 0); id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] and(ge(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, 0)) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] and(ge(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, 0)) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE NOT (a < 2 OR a > 0); a b @@ -3677,15 +3677,15 @@ a b 6 6 Filler... explain format='brief' SELECT * FROM t WHERE a >= 2 AND a < 0; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 0) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 0) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a >= 2 AND a < 0; a b explain format='brief' SELECT * FROM t WHERE NOT (a < 2 OR a >= 0); id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] and(ge(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 0)) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] and(ge(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 0)) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE NOT (a < 2 OR a >= 0); a b @@ -3719,15 +3719,15 @@ a b 6 6 Filler... explain format='brief' SELECT * FROM t WHERE a > 2 AND a <= 0; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, 0) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, 0) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a > 2 AND a <= 0; a b explain format='brief' SELECT * FROM t WHERE NOT (a <= 2 OR a > 0); id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] and(gt(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, 0)) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] and(gt(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, 0)) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE NOT (a <= 2 OR a > 0); a b @@ -3761,15 +3761,15 @@ a b 6 6 Filler... explain format='brief' SELECT * FROM t WHERE a >= 2 AND a <= 0; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, 0) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, 0) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a >= 2 AND a <= 0; a b explain format='brief' SELECT * FROM t WHERE NOT (a <= 2 OR a >= 0); id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] and(gt(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 0)) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] and(gt(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 0)) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE NOT (a <= 2 OR a >= 0); a b @@ -3845,15 +3845,15 @@ a b 6 6 Filler... explain format='brief' SELECT * FROM t WHERE a > 2 AND a < 1; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 1) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 1) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a > 2 AND a < 1; a b explain format='brief' SELECT * FROM t WHERE NOT (a < 2 OR a > 1); id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] and(ge(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, 1)) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] and(ge(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, 1)) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE NOT (a < 2 OR a > 1); a b @@ -3887,15 +3887,15 @@ a b 6 6 Filler... explain format='brief' SELECT * FROM t WHERE a >= 2 AND a < 1; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 1) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 1) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a >= 2 AND a < 1; a b explain format='brief' SELECT * FROM t WHERE NOT (a < 2 OR a >= 1); id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] and(ge(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 1)) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] and(ge(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 1)) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE NOT (a < 2 OR a >= 1); a b @@ -3929,15 +3929,15 @@ a b 6 6 Filler... explain format='brief' SELECT * FROM t WHERE a > 2 AND a <= 1; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, 1) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, 1) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a > 2 AND a <= 1; a b explain format='brief' SELECT * FROM t WHERE NOT (a <= 2 OR a > 1); id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] and(gt(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, 1)) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] and(gt(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, 1)) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE NOT (a <= 2 OR a > 1); a b @@ -3971,15 +3971,15 @@ a b 6 6 Filler... explain format='brief' SELECT * FROM t WHERE a >= 2 AND a <= 1; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, 1) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, 1) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a >= 2 AND a <= 1; a b explain format='brief' SELECT * FROM t WHERE NOT (a <= 2 OR a >= 1); id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] and(gt(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 1)) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] and(gt(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 1)) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE NOT (a <= 2 OR a >= 1); a b @@ -4054,8 +4054,8 @@ a b 6 6 Filler... explain format='brief' SELECT * FROM t WHERE a > 2 AND a < 2; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 2) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 2) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a > 2 AND a < 2; a b @@ -4097,15 +4097,15 @@ a b 6 6 Filler... explain format='brief' SELECT * FROM t WHERE a >= 2 AND a < 2; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 2) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 2) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a >= 2 AND a < 2; a b explain format='brief' SELECT * FROM t WHERE NOT (a < 2 OR a >= 2); id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] and(ge(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 2)) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] and(ge(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 2)) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE NOT (a < 2 OR a >= 2); a b @@ -4139,15 +4139,15 @@ a b 6 6 Filler... explain format='brief' SELECT * FROM t WHERE a > 2 AND a <= 2; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, 2) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, 2) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a > 2 AND a <= 2; a b explain format='brief' SELECT * FROM t WHERE NOT (a <= 2 OR a > 2); id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] and(gt(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, 2)) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] and(gt(executor__partition__partition_boundaries.t.a, 2), le(executor__partition__partition_boundaries.t.a, 2)) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE NOT (a <= 2 OR a > 2); a b @@ -4189,8 +4189,8 @@ a b 2 2 Filler... explain format='brief' SELECT * FROM t WHERE NOT (a <= 2 OR a >= 2); id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] and(gt(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 2)) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] and(gt(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 2)) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE NOT (a <= 2 OR a >= 2); a b @@ -4263,8 +4263,8 @@ a b 6 6 Filler... explain format='brief' SELECT * FROM t WHERE a > 2 AND a < 3; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 3) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 3) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a > 2 AND a < 3; a b @@ -4400,8 +4400,8 @@ a b 3 3 Filler... explain format='brief' SELECT * FROM t WHERE NOT (a <= 2 OR a >= 3); id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] and(gt(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 3)) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] and(gt(executor__partition__partition_boundaries.t.a, 2), lt(executor__partition__partition_boundaries.t.a, 3)) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE NOT (a <= 2 OR a >= 3); a b @@ -4852,8 +4852,8 @@ a b 5 5 Filler... explain format='brief' SELECT * FROM t WHERE a > 6; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 6) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 6) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a > 6; a b @@ -5063,8 +5063,8 @@ a b 6 6 Filler... explain format='brief' SELECT * FROM t WHERE a > 7; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 7) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_boundaries.t.a, 7) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a > 7; a b @@ -5084,8 +5084,8 @@ a b 6 6 Filler... explain format='brief' SELECT * FROM t WHERE a >= 7; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 7) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] ge(executor__partition__partition_boundaries.t.a, 7) └─TableFullScan 7.00 cop[tikv] table:t keep order:false SELECT * FROM t WHERE a >= 7; a b diff --git a/tests/integrationtest/r/executor/partition/partition_with_expression.result b/tests/integrationtest/r/executor/partition/partition_with_expression.result index 9ba24d016ecd1..81c168a8d0bc1 100644 --- a/tests/integrationtest/r/executor/partition/partition_with_expression.result +++ b/tests/integrationtest/r/executor/partition/partition_with_expression.result @@ -184,8 +184,8 @@ analyze table tp all columns; analyze table t all columns; explain select * from tp where a < '10'; id estRows task access object operator info -TableReader_7 0.00 root partition:p0 data:Selection_6 -└─Selection_6 0.00 cop[tikv] lt(executor__partition__partition_with_expression.tp.a, "10") +TableReader_7 1.00 root partition:p0 data:Selection_6 +└─Selection_6 1.00 cop[tikv] lt(executor__partition__partition_with_expression.tp.a, "10") └─TableFullScan_5 6.00 cop[tikv] table:tp keep order:false select * from tp where a < '10'; a b @@ -274,15 +274,15 @@ SELECT * from t where a = -1; a b explain format='brief' select * from trange where a = -1; id estRows task access object operator info -TableReader 0.00 root partition:p0 data:Selection -└─Selection 0.00 cop[tikv] eq(executor__partition__partition_with_expression.trange.a, -1) +TableReader 1.00 root partition:p0 data:Selection +└─Selection 1.00 cop[tikv] eq(executor__partition__partition_with_expression.trange.a, -1) └─TableFullScan 13.00 cop[tikv] table:trange keep order:false SELECT * from trange where a = -1; a b explain format='brief' select * from thash where a = -1; id estRows task access object operator info -TableReader 0.00 root partition:p1 data:Selection -└─Selection 0.00 cop[tikv] eq(executor__partition__partition_with_expression.thash.a, -1) +TableReader 1.00 root partition:p1 data:Selection +└─Selection 1.00 cop[tikv] eq(executor__partition__partition_with_expression.thash.a, -1) └─TableFullScan 13.00 cop[tikv] table:thash keep order:false SELECT * from thash where a = -1; a b @@ -411,15 +411,15 @@ SELECT * from t where a > 10; a b explain format='brief' select * from trange where a > 10; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_with_expression.trange.a, 10) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_with_expression.trange.a, 10) └─TableFullScan 13.00 cop[tikv] table:trange keep order:false SELECT * from trange where a > 10; a b explain format='brief' select * from thash where a > 10; id estRows task access object operator info -TableReader 0.00 root partition:all data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_with_expression.thash.a, 10) +TableReader 1.00 root partition:all data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_with_expression.thash.a, 10) └─TableFullScan 13.00 cop[tikv] table:thash keep order:false SELECT * from thash where a > 10; a b @@ -1219,15 +1219,15 @@ SELECT * from t where a > '10'; a b explain format='brief' select * from trange where a > '10'; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_with_expression.trange.a, 10) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_with_expression.trange.a, 10) └─TableFullScan 13.00 cop[tikv] table:trange keep order:false SELECT * from trange where a > '10'; a b explain format='brief' select * from thash where a > '10'; id estRows task access object operator info -TableReader 0.00 root partition:all data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_with_expression.thash.a, 10) +TableReader 1.00 root partition:all data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_with_expression.thash.a, 10) └─TableFullScan 13.00 cop[tikv] table:thash keep order:false SELECT * from thash where a > '10'; a b @@ -1235,15 +1235,15 @@ SELECT * from t where a > '10ab'; a b explain format='brief' select * from trange where a > '10ab'; id estRows task access object operator info -TableReader 0.00 root partition:dual data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_with_expression.trange.a, 10) +TableReader 1.00 root partition:dual data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_with_expression.trange.a, 10) └─TableFullScan 13.00 cop[tikv] table:trange keep order:false SELECT * from trange where a > '10ab'; a b explain format='brief' select * from thash where a > '10ab'; id estRows task access object operator info -TableReader 0.00 root partition:all data:Selection -└─Selection 0.00 cop[tikv] gt(executor__partition__partition_with_expression.thash.a, 10) +TableReader 1.00 root partition:all data:Selection +└─Selection 1.00 cop[tikv] gt(executor__partition__partition_with_expression.thash.a, 10) └─TableFullScan 13.00 cop[tikv] table:thash keep order:false SELECT * from thash where a > '10ab'; a b diff --git a/tests/integrationtest/r/executor/show.result b/tests/integrationtest/r/executor/show.result index be1fe6fc7e470..b223cc3455cfb 100644 --- a/tests/integrationtest/r/executor/show.result +++ b/tests/integrationtest/r/executor/show.result @@ -396,6 +396,8 @@ t2 CREATE TABLE `t2` ( KEY `fk` (`b`), CONSTRAINT `fk` FOREIGN KEY (`b`) REFERENCES `test1`.`t1` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin +drop database if exists test1; +drop database if exists test2; drop table if exists t; create table t(a int, b char(10) as ('a')); show create table t; diff --git a/tests/integrationtest/r/executor/window.result b/tests/integrationtest/r/executor/window.result index 967ec034c8692..8cb1fc283efb4 100644 --- a/tests/integrationtest/r/executor/window.result +++ b/tests/integrationtest/r/executor/window.result @@ -34,3 +34,499 @@ c0 2 3 commit; +create table t_tjov ( +c_irfjyds3 int , +c_mzh text not null , +c_k4duc4l int , +c_tutmh1 double , +c_qk text , +c_kq8lwb tinyint not null unique , +primary key(c_irfjyds3) CLUSTERED) pre_split_regions=2; +update t_tjov set +c_mzh = t_tjov.c_qk, +c_k4duc4l = abs( +cast(t_tjov.c_irfjyds3 as signed)), +c_qk = t_tjov.c_qk +where ((t_tjov.c_k4duc4l between round( +cast(t_tjov.c_irfjyds3 as signed)) and t_tjov.c_k4duc4l)) +or ((t_tjov.c_mzh not like '_kjf2')); +insert into t_tjov (c_irfjyds3, c_mzh, c_k4duc4l, c_tutmh1, c_qk, c_kq8lwb) values +(-932054614, 'w37fcer', 153633688, 57.12, 'dlui', coalesce((NOT NOT(cast( (cast(74.85 as double) < cast(3076125 as signed)) as unsigned))), 40)), +(-1265832264, '_ob', 694248426, 32766.4, 'jute', coalesce(0<>0, -79)), +(1692830483, 'srvcmwp', 1682550193, 12.14, 'lbiakexz', coalesce(((NOT NOT(cast( (cast(-5614534075836329410 as signed) >= cast(cast(null as decimal) as decimal)) as unsigned)))) +or (((NOT NOT(cast( (cast(cast(null as char) as char) > cast(cast(null as char) as char)) as unsigned)))) +or ((1=1) +and (('y0avd3' like 'bprds%%')))), 102)), +(532891091, 'yre', -972462244, 49.4, 'mehsld7pb', coalesce((NOT NOT(cast( (cast(1659175363498062987 as signed) >= cast((NOT NOT(cast( (cast(53.10 as double) <> cast(cast(null as double) as double)) as unsigned))) as unsigned)) as unsigned))), 35)); +create index t_xs_idx_1 on t_tjov (c_irfjyds3, c_k4duc4l, c_tutmh1, c_kq8lwb); +create table t_db8a ( +c_t9 int not null , +c_d double unique , +c_jr2kq78hqt tinyint not null unique , +c_yh_3 int , +primary key(c_yh_3) CLUSTERED) pre_split_regions=7; +insert into t_db8a (c_t9, c_d, c_jr2kq78hqt, c_yh_3) values +(580177243, 48.77, coalesce((NOT NOT(cast( (cast(null as decimal) = -3250316) as unsigned))), -2), -1034163307), +(-885427247, 9223372036854775806.8, coalesce((586563100 not in ( +cast(cast(null as signed) as signed), cast(null as signed), 1650864735, 1618044220, -1403578365)), -119), 1512435574), +(1090731830, 50.8, coalesce((NOT NOT(cast( (82.52 || cast(null as signed)) as unsigned))), -14), -252993503), +(312093140, 2147483649.9, coalesce((-1838213491 between 1542236936 and 1889086007), -97), 2059252966); +update t_tjov set +c_irfjyds3 = case when (t_tjov.c_irfjyds3 between round( +cast(t_tjov.c_k4duc4l as signed)) and cast(nullif( +t_tjov.c_k4duc4l, +t_tjov.c_irfjyds3 +) as signed)) then cast(nullif( +t_tjov.c_k4duc4l, +484721586 +) as signed) else t_tjov.c_irfjyds3 end +, +c_k4duc4l = t_tjov.c_k4duc4l, +c_tutmh1 = t_tjov.c_tutmh1, +c_qk = t_tjov.c_qk +where (NOT NOT(cast( (cast(-10747 as signed) >= cast(cast( (cast(t_tjov.c_tutmh1 as double) * cast(0<>0 as unsigned)) as double) as double)) as unsigned))); +insert into t_tjov +select +abs( +cast(subq_0.c0 as signed)) as c0, +'j2' as c1, +abs( +cast(subq_0.c0 as signed)) as c2, +28.49 as c3, +'omrwa' as c4, +('ah' like 'm0u%k') as c5 +from +(select +is_ipv4( +cast('_zf8qf4qva' as char)) as c0 +from +t_db8a as ref_0 +where (((ref_0.c_d is NULL)) +or ((ref_0.c_yh_3 = ( +select +271345048 as c0 +from +t_db8a as ref_1 +where (EXISTS ( +select +ref_2.c_jr2kq78hqt as c0, +ref_2.c_d as c1, +ref_1.c_yh_3 as c2 +from +t_db8a as ref_2 +where 0<>0 +order by c0, c1, c2 desc +limit 83)) +order by c0 desc +limit 1)))) +or (0<>0)) as subq_0 +where ((subq_0.c0 is NULL)) +and ((NOT NOT(cast( (cast(9223372036854775807.6 as double) || cast(subq_0.c0 as signed)) as unsigned)))); +create index t_dcscox3_x_idx_1 on t_db8a (c_jr2kq78hqt); +create table t_n ( +c_tf_us39fv int not null , +c_pf6z4p int , +c_v13rl double , +c_fr3uo int not null , +c_v double , +c_mm8jnf tinyint , +c__57bl_eu6 double , +primary key(c_fr3uo) CLUSTERED) pre_split_regions=4; +delete from t_tjov +where +(NOT NOT(cast( (t_tjov.c_qk <> substring( +cast(substring( +cast(t_tjov.c_mzh as char), +cast(t_tjov.c_irfjyds3 as signed), +cast(abs( +cast(t_tjov.c_irfjyds3 as signed)) as signed)) as char), +cast(case when (NOT NOT(cast( (cast(t_tjov.c_k4duc4l as signed) XOR cast(t_tjov.c_tutmh1 as double)) as unsigned))) then cast(t_tjov.c_kq8lwb as signed) else cast(t_tjov.c_k4duc4l as signed) end +as signed), +cast((select c_jr2kq78hqt from t_db8a order by c_jr2kq78hqt limit 1 offset 2) +as signed))) as unsigned))); +insert into t_tjov (c_irfjyds3, c_mzh, c_k4duc4l, c_tutmh1, c_qk, c_kq8lwb) values +(190638753, 'tasm', 1056083104, 99.13, 'dwu82uofj', coalesce((((cast(cast(null as signed) as signed) not in ( +cast(cast(null as signed) as signed)))) +and ((NOT NOT(cast( (cast(54.24 as double) < cast(cast(null as signed) as signed)) as unsigned))))) +or ((0<>0) +or ((NOT NOT(cast( (cast(-2837358340031519753 as signed) > cast(cast(null as decimal) as decimal)) as unsigned))))), -23)), +(-209345204, 'r', -1251857596, 2147483649.6, 'h7', coalesce(((NOT NOT(cast( (cast(98.7 as double) <> cast(254.7 as double)) as unsigned)))) +and ((-16183390 not in ( +-2121949782, 1195710096, cast(null as signed)))), 84)), +(219747276, 'rkd', cast(cast(null as signed) as signed), 52.100, 'hj26dzinn', coalesce((NOT NOT(cast( (cast(null as decimal) && cast(null as decimal)) as unsigned))), -77)), +(336534805, 'im8f9c', -84222469, 32767.1, 'x61p6f90', coalesce((806574107 between -1449873070 and cast(null as signed)), 46)); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(112390679, 1418345021, 76.70, -1191314671, 85.65, (NOT NOT(cast( (cast(4294967294.3 as double) || cast(2.64 as double)) as unsigned))), cast(null as double)), +(722265176, 1467506038, 4294967294.5, -891772058, 84.76, (NOT NOT(cast( (cast(cast(null as char) as char) <> cast(cast(null as char) as char)) as unsigned))), cast(null as double)), +(123668208, -680585440, 32767.9, 1054800957, 81.21, (NOT NOT(cast( ((NOT NOT(cast( (cast(83.65 as double) > cast(1=1 as unsigned)) as unsigned))) && 11.84) as unsigned))), cast(null as double)), +(-1802080206, 1085070136, 77.68, -969300417, 92.17, (-1935693142 is not NULL), 21.5); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-1848902104, 1294552399, 32767.9, 1135018897, 20.78, 1=1, 65535.2), +(-541529106, -218416925, 65.37, 2136058070, cast(null as double), (NOT NOT(cast( (22308 >= 1466486665) as unsigned))), 126.0), +(224595330, 1141952663, cast(null as double), 2079807215, 27.86, (-1342622966 between 1682242404 and -575575418), 32769.0), +(1490886431, 1194092900, 38.63, -817657823, 4294967297.8, (NOT NOT(cast( (cast(-1492692245 as signed) || cast(-17070 as signed)) as unsigned))), cast(null as double)); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-1959205612, cast(cast(null as signed) as signed), 18446744073709551614.8, -1232522545, 40.31, (NOT NOT(cast( (15.51 || -703391789) as unsigned))), 74.9), +(-1657104660, -1088940385, 127.3, -1601191179, cast(null as double), (NOT NOT(cast( (cast(-8613730477530125431 as signed) != cast((NOT NOT(cast( (cast(cast(null as char) as char) = cast(cast(null as char) as char)) as unsigned))) as unsigned)) as unsigned))), 33.30), +(1157817674, 1790829591, 127.5, -836814231, 18446744073709551616.9, (NOT NOT(cast( (cast(1=1 as unsigned) = cast(cast(null as double) as double)) as unsigned))), 27.89), +(-1476540312, 1335915749, 73.9, 371657190, 87.26, (NOT NOT(cast( (cast(cast(null as signed) as signed) < cast(100.37 as double)) as unsigned))), 96.38); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-1501397682, cast(cast(null as signed) as signed), 70.13, -1636783123, 9223372036854775809.8, 0<>0, 13.74), +(524931015, 46980517, 4294967296.2, -966321169, 58.44, (1742823349 in ( +1295600076, 1177358812, 1239653717)), 4294967297.6), +(-1253049478, -997622599, 2147483648.3, 316816526, cast(null as double), (146566304 between -2010488977 and -603615163), 4294967295.0), +(-951699598, 1797233435, 43.52, 1001305632, 72.63, 0<>0, 11.23); +insert into t_tjov (c_irfjyds3, c_mzh, c_k4duc4l, c_tutmh1, c_qk, c_kq8lwb) values +(706311080, 'jk1xfmi', -332724902, 41.72, cast(null as char), coalesce((NOT NOT(cast( (cast(-1837821939 as signed) <> cast(cast(null as decimal) as decimal)) as unsigned))), 71)), +(121748290, 'ux1', -1754931754, cast(null as double), 'pmz2m1wofz', coalesce((NOT NOT(cast( (cast('f' as char) <= cast(cast(null as char) as char)) as unsigned))), 10)), +(-1824411284, 'qv40o', 265031365, 4294967296.1, 'tc1zj', coalesce((NOT NOT(cast( (cast(null as decimal) < 3084179) as unsigned))), 56)), +(784077105, 'vt8gz39m_f', 976086031, 2147483648.3, 'cfygszhw19', coalesce(((NOT NOT(cast( (cast(621597153 as signed) < cast(cast(null as decimal) as decimal)) as unsigned)))) +and (0<>0), -116)); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-1657186756, -1943262988, 14.22, 1752671759, 9223372036854775806.1, (-951966731 between -570851320 and 293875873), 55.83), +(1702807616, -1354393768, cast(null as double), -1891852624, 129.9, (0<>0) +or ((cast(cast(null as signed) as signed) not in ( +cast(null as signed), 1680530723, -625157436, -1945095305, -2042337070))), 1.96), +(1648323837, -1418887915, cast(null as double), -1090179229, 18446744073709551614.8, 1=1, 96.14), +(-118753376, 513952801, 43.36, 45233259, 65.2, (cast(cast(null as signed) as signed) not in ( +cast(cast(null as signed) as signed), 1027482432, 1778975274, 1485416494)), cast(null as double)); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-1964881785, -737997688, cast(null as double), -458669186, 69.91, ((NOT NOT(cast( (cast(-419738499 as signed) || cast(-926450890 as signed)) as unsigned)))) +or ((0<>0) +and ((NOT NOT(cast( (cast(9223372036854775807.9 as double) || cast(1710020851 as signed)) as unsigned))))), 84.49), +(-7216598, 1625616878, 100.85, -359244111, cast(null as double), 1=1, 84.7), +(2141928022, 1516962202, 80.93, 457293938, 46.11, (-1817543858 not in ( +-399531202, 404645547)), 15.88), +(278360302, cast(cast(null as signed) as signed), 87.2, 966828001, 56.66, 1=1, 4294967296.5); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-2127956293, -2123598908, 28.75, -1438902812, 2147483646.5, ((NOT NOT(cast( (4294967297.6 || 254.8) as unsigned)))) +and ((-1780407389 is not NULL)), 89.65), +(1017031325, 1836402582, 18446744073709551616.3, -499024646, cast(null as double), (('_' like 'pl%fj52')) +and (1=1), 69.85), +(-330778188, -200250878, 61.39, 1668164734, 129.3, 1=1, 65537.7), +(-774073358, -50414215, 33.11, 1883285447, 91.25, 1=1, 32767.2); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-1901609213, -397181908, 65537.9, 1206280609, 95.28, 1=1, 33.88), +(-329680759, 686879299, 31.94, 1240086422, 68.21, ('u4gd_3wrm1' not like 'j5mw_tg%'), cast(null as double)), +(-830355043, 1105494945, 9223372036854775808.6, -96406182, 4.61, (0<>0) +or (('a_wab' not like 'r_0g_zo7y')), 9223372036854775809.0), +(1612591161, 1502804180, 50.7, -1838996452, 256.0, (-767840678 between 1718697067 and -1126133856), 9223372036854775807.4); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-536128527, 478467901, 90.67, 1319292384, 14.2, (NOT NOT(cast( (4294967297.5 <= 1639076078) as unsigned))), 18446744073709551614.4), +(-1718668286, 1286809343, 256.5, -867569210, 9223372036854775808.6, ('l9z2yif' not like 'r%'), 9223372036854775809.0), +(770418292, 1460242744, 49.63, 290800698, 85.91, ((-815201180 between 2069884989 and 729078369)) +or ((cast(cast(null as signed) as signed) in ( +cast(null as signed)))), 254.5), +(1830023926, 1693578846, cast(null as double), 229007735, 81.56, ((-386926913 is NULL)) +or ((-1810166476 not in ( +-1508096653, 335322583))), cast(null as double)); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-1777121846, -1686283305, 28.60, -1474706297, 256.7, (NOT NOT(cast( (cast(null as char) = cast(null as char)) as unsigned))), 4294967296.2), +(375686697, cast(cast(null as signed) as signed), 28.56, 1964967686, 19.81, (900611573 between -1229701638 and cast(null as signed)), 4294967296.2), +(1152784122, 406471045, 69.63, -1403845980, 70.22, (NOT NOT(cast( (cast(77.29 as double) != cast(18446744073709551616.8 as double)) as unsigned))), 69.7), +(1868709479, -157543758, 31.56, -131659988, cast(null as double), ((1=1) +or ((NOT NOT(cast( (cast(26.96 as double) = cast(-5758175 as signed)) as unsigned))))) +and (('wlv2' not like 'b25h_0pfg%')), 24.49); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-96786893, -901765033, 93.56, -951591253, 82.86, ((1711066375 is not NULL)) +or ((NOT NOT(cast( (cast(null as double) != -382453) as unsigned)))), 4294967297.7), +(1807932979, 87189742, 65536.4, -237765504, 88.75, 1=1, 58.43), +(712617285, -665142399, 11.40, -1647795301, 2147483649.2, ('bfskte4' not like '%hm2hnj'), 33.52), +(1722139040, -943742783, 254.0, -2092333256, 93.42, (-79948555 in ( +1399937108, -189701760, 548532656)), 13.14); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-73721387, -811951597, 97.79, 1253657601, 18446744073709551614.4, (NOT NOT(cast( (cast((NOT NOT(cast( (cast(cast(null as char) as char) >= cast('ur9p592iv' as char)) as unsigned))) as unsigned) || cast(cast(null as decimal) as decimal)) as unsigned))), 38.48), +(-566163645, cast(cast(null as signed) as signed), 85.4, -549341830, 83.30, (-2028736036 not in ( +-1774928833, 1328799732, -2007387853)), 9223372036854775808.5), +(-423269318, 1419057699, 35.44, 1365255175, cast(null as double), (NOT NOT(cast( (-30674 <> 24.42) as unsigned))), 66.75), +(889363542, 252471764, 65.88, -1456313590, 46.74, (NOT NOT(cast( (cast(73.87 as double) XOR cast(cast(null as decimal) as decimal)) as unsigned))), 64.38); +update t_tjov set +c_qk = t_tjov.c_qk +where (NOT NOT(cast( (cast(2639729924291429211 as signed) XOR cast(t_tjov.c_tutmh1 as double)) as unsigned))); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(202050913, -726605015, 255.2, 1804529354, 89.92, (109864579 in ( +1699504108, 1823301414, 1666614637, cast(null as signed))), 39.44), +(-233439116, 534148198, 126.9, 1454711700, 12.22, ('xzkp3boqk' not like '_'), 12.36), +(940266790, 1041195633, 82.85, 1244674471, 44.61, (-735725205 between 1451527715 and -467319386), 7.68), +(-185738503, 592638241, 22.58, 1567818850, 72.41, (NOT NOT(cast( (cast(cast(null as signed) as signed) <> cast(cast(null as decimal) as decimal)) as unsigned))), 4294967295.2); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-1803191281, -144227139, 87.97, 957352707, 47.95, (1137303059 between 1933664261 and -1804384725), 2147483649.2), +(-775849790, -352812303, 4294967296.2, 225223865, 2147483648.100000, (0<>0) +and ((NOT NOT(cast( (cast(-4821602350037004045 as signed) <=> cast(cast(null as signed) as signed)) as unsigned)))), 10.86), +(1906971144, 988170817, 32769.1, -1032676254, 40.41, 1=1, cast(null as double)), +(2003344282, cast(cast(null as signed) as signed), cast(null as double), 193873491, 2.76, (NOT NOT(cast( (cast(-6473404898816589857 as signed) <=> cast(4294967295.8 as double)) as unsigned))), 97.42); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-1692803691, -458349128, 65.91, 1856171892, cast(null as double), ('g' not like '_5jh'), 47.25), +(775074025, 1861696041, 63.92, 1649823346, 2147483647.5, ((NOT NOT(cast( (cast('z' as char) <= cast(cast(null as char) as char)) as unsigned)))) +or ((NOT NOT(cast( (cast(cast(null as char) as char) <=> cast('w' as char)) as unsigned)))), 13.87), +(-573294454, 1941065015, 18446744073709551614.3, -103631690, 4294967294.5, ((-1573376596 in ( +755343497, 173859321, 1174973060, 2105143454))) +or ((-1369457710 is NULL)), 53.1), +(1766281922, 545687435, 41.35, 315120407, 32768.4, (-736503640 is NULL), 79.6); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-1307584847, 1924839372, 16.40, 584632197, 33.78, (-806624327 between -1988787273 and -1632394547), 42.75), +(-241357849, -1081529769, 18446744073709551614.2, -1874010932, cast(null as double), (NOT NOT(cast( (cast(cast(null as signed) as signed) <= cast(1941439660 as signed)) as unsigned))), cast(null as double)), +(-478046437, -1692389519, cast(null as double), -815358404, 96.74, 0<>0, 65534.4), +(-1420504095, 1668081802, 13.5, 1240609196, 2147483648.9, (719070679 between 1756710448 and 1552046174), 1.87); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-1138029400, 1592536149, 128.3, -684187603, 255.6, (NOT NOT(cast( (cast('kwtgp0783' as char) = cast(cast(null as char) as char)) as unsigned))), 91.100), +(118700020, cast(cast(null as signed) as signed), 10.72, -904194428, cast(null as double), ((NOT NOT(cast( (cast(-5367067 as signed) = cast(30.70 as double)) as unsigned)))) +and ((1=1) +and (((NOT NOT(cast( (cast(cast(null as char) as char) > cast(cast(null as char) as char)) as unsigned)))) +and ((81621497 is not NULL)))), 4294967296.8), +(1512307580, cast(null as signed), 65537.1, 878459201, 9223372036854775807.4, (NOT NOT(cast( (cast(null as char) = cast(null as char)) as unsigned))), 257.6), +(1487518285, 929907204, 65537.0, 400194872, 4294967295.9, (cast(cast(null as signed) as signed) is NULL), 9223372036854775806.8); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-803817803, 1203423501, 4294967296.9, -814946591, 22.32, (NOT NOT(cast( (cast(cast(null as char) as char) = cast(cast(null as char) as char)) as unsigned))), 13.98), +(2058525552, 362533945, 84.57, 716979833, 15.72, (NOT NOT(cast( (cast('s' as char) = cast('l79m' as char)) as unsigned))), 86.54), +(-1031056066, 1554678457, 4.66, -1733696013, 35.77, (NOT NOT(cast( (cast(-555361694 as signed) > cast(-1180219339 as signed)) as unsigned))), cast(null as double)), +(108401268, 1018082273, 46.6, 2125596133, cast(null as double), (NOT NOT(cast( (cast(cast(null as double) as double) XOR cast(-3181196 as signed)) as unsigned))), cast(null as double)); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(1485273469, 137539087, 62.75, 2143902306, 50.23, (-1447358059 in ( +1624080830, 1570987436, 1496364306, 1146812569, 994561233)), 4294967296.3), +(1471438314, 2015543479, 128.3, -1924337586, cast(null as double), 1=1, 59.85), +(912405565, -314069948, 2147483647.0, 2124191551, 32769.3, (950173842 is NULL), 71.19), +(-1949635883, 1151445603, 16.20, -1626375301, 44.88, (((NOT NOT(cast( (cast(cast(null as char) as char) < cast(cast(null as char) as char)) as unsigned)))) +or ((NOT NOT(cast( (cast(null as char) <> cast(null as char)) as unsigned))))) +or ((622370639 between -356532824 and -1414517943)), 4294967296.3); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(1190786766, 1632696882, cast(null as double), 1549903945, 9223372036854775809.8, (251471579 is not NULL), 21.57), +(-1407687295, 75720546, 2147483649.0, 1235746135, 54.23, (NOT NOT(cast( (cast(92.69 as double) <= cast(8.50 as double)) as unsigned))), 18446744073709551615.2), +(1003089517, -885341919, 39.44, -2117966830, 4294967294.1, (NOT NOT(cast( (cast(-6455799514409731514 as signed) <= cast(cast(null as double) as double)) as unsigned))), cast(null as double)), +(-1547030672, -980542284, 2147483648.5, 1067473087, 89.29, (-2107436461 is not NULL), 18.84); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-431005934, 968475532, 129.9, -485389668, 48.41, 0<>0, 2147483647.9), +(423089018, 1494781064, cast(null as double), -200859684, cast(null as double), (1745328374 is not NULL), cast(null as double)), +(-2024241046, -464180571, 50.20, 409892419, 52.43, (cast(cast(null as signed) as signed) not in ( +57862433, -2005897203, 1291492411)), 40.51), +(798899278, 1498585125, 129.0, 749554956, 65536.1, (616145844 not in ( +-845336641, 2078985180)), 93.56); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(992287662, 1059794604, 80.76, 1857204820, 67.8, 0<>0, 257.6), +(-251617407, 727141066, 17.57, -1377655526, 4294967296.3, (NOT NOT(cast( (cast(1=1 as unsigned) >= cast(562416848 as signed)) as unsigned))), cast(null as double)), +(508687428, -403797095, 18446744073709551614.6, -1788324927, 257.3, (NOT NOT(cast( (cast((-1351018205 between -1433002086 and -339025014) as unsigned) >= cast(cast(null as decimal) as decimal)) as unsigned))), 82.33), +(646685, cast(cast(null as signed) as signed), 92.73, 1582712324, 64.1, 0<>0, 86.8); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(926041444, 754454753, 57.65, -1540605176, cast(null as double), (NOT NOT(cast( (cast(cast(null as decimal) as decimal) && cast(-8727486372912603787 as signed)) as unsigned))), cast(null as double)), +(-671501037, -1518858944, 4294967296.5, -479179165, 256.1, (((2063836087 not in ( +2024517269, 841463459))) +and (0<>0)) +or (0<>0), cast(null as double)), +(-1958925741, 467095960, 77.85, 1554370390, 257.6, (-745989458 is NULL), 54.43), +(-1618290422, -161237102, 76.73, 538730362, 49.69, (NOT NOT(cast( (cast(-26949 as signed) <= cast(-19746 as signed)) as unsigned))), 18446744073709551615.7); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-1151099406, -1192802738, 4294967296.5, 1603456503, 60.29, (NOT NOT(cast( (cast(cast(null as signed) as signed) > cast(cast(null as double) as double)) as unsigned))), 65535.0), +(-214371658, 742855726, 61.16, 747648303, 13.91, (NOT NOT(cast( (cast(17532 as signed) XOR cast(-4832242 as signed)) as unsigned))), cast(null as double)), +(-1994399201, -2006592478, 39.70, -1065439627, 49.87, (1=1) +or ((NOT NOT(cast( (cast(2380367 as signed) <> cast(573778432 as signed)) as unsigned)))), 23.15), +(1747320149, -349629478, 19.100, -1058995736, cast(null as double), (NOT NOT(cast( (cast('_706' as char) = cast(cast(null as char) as char)) as unsigned))), 9223372036854775808.3); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-1918313801, -2089704247, 2147483648.7, 255098326, 95.19, 1=1, 87.28), +(1203077974, 2046007501, 99.34, 1943659813, 20.83, (NOT NOT(cast( (cast(cast(null as decimal) as decimal) >= cast(1599692914260222229 as signed)) as unsigned))), 32767.4), +(-1485389576, 970803212, 73.3, -14238819, 83.23, (2108803326 in ( +1895013965, 1748692117, -97375564, -723055050)), 69.18), +(-1382241502, -1820760164, 14.66, 1317534679, cast(null as double), (cast(cast(null as signed) as signed) in ( +1812842111, -869421286, -1502455336)), 9223372036854775809.5); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-184111223, 1821291922, cast(null as double), 1599748876, 18446744073709551617.9, 1=1, cast(null as double)), +(2074338509, 1925280049, 64.52, -1219834653, 85.26, (NOT NOT(cast( (cast(null as char) > 'fz44w') as unsigned))), 69.28), +(1870612334, 859376178, 78.3, 153528607, 53.92, (NOT NOT(cast( (cast(2646109 as signed) || cast(-2933195 as signed)) as unsigned))), 128.6), +(-1937972700, 989311399, 257.9, 484447030, 39.39, (cast(null as signed) between 784397685 and -231307066), cast(null as double)); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(1360259572, -1193211314, cast(null as double), 306282491, 18446744073709551614.5, (0<>0) +or (((NOT NOT(cast( (cast(1934455581 as signed) <> cast(cast(null as decimal) as decimal)) as unsigned)))) +or (((210206656 in ( +1341478870, -1355349433, 855730336, -958106715, 1768692034))) +and ((NOT NOT(cast( (cast(cast(null as char) as char) < cast('xljv5m' as char)) as unsigned)))))), 257.8), +(1388420306, 1997451829, 71.33, 305958992, 65.37, (1019910313 is not NULL), 77.26), +(1921097515, 213099308, 15.70, -68578669, 18446744073709551615.8, (NOT NOT(cast( (cast(-10849 as signed) > cast(79.83 as double)) as unsigned))), 2147483648.8), +(-311822909, -1915402390, 15.82, 602552786, 126.0, 0<>0, cast(null as double)); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(1912362299, 1539217190, 257.7, 1377596346, 257.6, (1272584007 is not NULL), 65535.0), +(-231266252, -1384233676, 94.41, -171911705, 2147483646.3, (NOT NOT(cast( (cast('c6ppl' as char) <> cast('x6m7oe' as char)) as unsigned))), 18446744073709551617.3), +(2040343667, 1814736751, 2147483649.4, 429804432, 40.27, 1=1, 65537.6), +(-1614590979, -1091616644, 47.7, 1519983939, 13.95, (1354396355 between -173345040 and -1046479757), 257.5); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(227428089, -963365259, 9223372036854775807.4, -1573070160, 29.94, 0<>0, 56.26), +(154206117, -964074657, 1.45, -1164301348, 2147483648.6, 0<>0, 55.31), +(-938881422, 894674592, 2147483646.8, 1786063491, 32768.5, (-2021384728 is not NULL), 257.2), +(88248029, -1381239637, 64.95, 80796726, 18446744073709551616.0, ((cast(null as char) not like '_jdy%lu')) +or (1=1), 32.70); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(12928834, 764622174, 5.62, 1829244914, 257.6, (NOT NOT(cast( (cast(-10034 as signed) = cast(96.80 as double)) as unsigned))), 2147483649.5), +(1281945509, -1125929854, 2.51, 1435017323, cast(null as double), 0<>0, 2147483646.7), +(-1487950767, -1292299233, 53.51, -1663229572, 9.35, (517192622 not in ( +-1296905114, 648632902, 667921084, 552236416, -770371962)), cast(null as double)), +(1397966469, 2108407994, 255.6, -713119010, 32766.7, (NOT NOT(cast( (cast((785564098 between cast(cast(null as signed) as signed) and 957643081) as unsigned) <> cast(0<>0 as unsigned)) as unsigned))), 83.10); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(1718799977, 2039618993, 24.52, 1826405959, 18446744073709551615.7, (NOT NOT(cast( (cast(8691659948650356945 as signed) = cast(279903385 as signed)) as unsigned))), 75.90), +(160545244, cast(cast(null as signed) as signed), 98.48, -477173245, 32.7, ('g2cx0m4' like 'c5%7'), 58.95), +(871368593, 90338238, 65.91, -1704037569, 2147483647.3, 0<>0, 89.93), +(-1742670408, -976096734, 5.43, 1363396633, cast(null as double), (NOT NOT(cast( (cast(cast(null as char) as char) <=> cast(cast(null as char) as char)) as unsigned))), 18446744073709551616.8); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-1443324965, -189346859, 5.59, 220348359, 78.83, (NOT NOT(cast( (-809604812 <=> -1034915368) as unsigned))), 27.51), +(44279714, -299969275, cast(null as double), -223322456, 71.31, (-749252651 is NULL), 30.96), +(195102797, -991940610, 21.58, 1877463950, 65534.6, (cast(null as signed) between -1174842201 and 543317174), 24.70), +(124415710, -864531240, 18446744073709551615.1, -1028661742, 4294967295.9, (NOT NOT(cast( (cast(cast(null as signed) as signed) && cast(1687754935 as signed)) as unsigned))), 33.78); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(1718449061, -1190306201, 10.81, -1377922257, 34.100, (NOT NOT(cast( (cast(cast(null as double) as double) || cast(-1456734899910041136 as signed)) as unsigned))), 62.78), +(-1844942092, 1015472427, 34.76, 811648467, 52.17, ('v' not like 's%'), 58.33), +(630716357, 1661169794, 2147483646.8, 666979662, 21.4, ('s6jbue' like 'x8%h'), 257.1), +(-1326097991, 990110829, cast(null as double), 1960737437, cast(null as double), 0<>0, 36.57); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(123643811, cast(cast(null as signed) as signed), 65.79, -1515896132, 26.16, (NOT NOT(cast( (cast(95.88 as double) != cast(-8160878 as signed)) as unsigned))), 255.0), +(-122799308, 867292784, 43.60, 403697588, 47.31, (NOT NOT(cast( (cast((-1590896948 not in ( +-266988998, 1722291799, 1322781646, 483821136)) as unsigned) <= cast(65535.9 as double)) as unsigned))), 9223372036854775806.1), +(1911753212, 1858679439, cast(null as double), 349892938, 49.72, ((1807401979 is not NULL)) +and (1=1), 4294967297.9), +(-799718023, 1151350996, cast(null as double), -566130061, cast(null as double), (-721310308 between -1387950267 and -1160102077), 65.47); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-764899021, 1091828652, 65536.9, -1586455862, 81.86, (NOT NOT(cast( (cast((NOT NOT(cast( (cast(-3150499 as signed) <=> cast(-394351557 as signed)) as unsigned))) as unsigned) || cast(256.3 as double)) as unsigned))), 50.34), +(-1293220127, -1234577591, 73.31, -1677016656, 73.3, (NOT NOT(cast( (cast(null as decimal) > -1789669491678009127) as unsigned))), 95.4), +(-331901868, -373377677, 2147483649.4, -743975899, 256.3, (NOT NOT(cast( (cast((NOT NOT(cast( (cast((NOT NOT(cast( (cast(cast(null as signed) as signed) <=> cast(0<>0 as unsigned)) as unsigned))) as unsigned) != cast(33.94 as double)) as unsigned))) as unsigned) <=> cast(29.94 as double)) as unsigned))), 62.28), +(-67671879, cast(null as signed), 2147483648.8, -1562897951, 82.9, ('y35fdxzwe' not like 'vo5v5_c6y'), 89.54); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-1942921419, 1903526740, 127.0, -645732449, 2147483648.100000, (NOT NOT(cast( (2783581 = 1395540343) as unsigned))), 54.63), +(109043109, -1191419029, 3.97, 1616351368, 254.2, (NOT NOT(cast( (cast(-3035743648056475883 as signed) > cast(85.75 as double)) as unsigned))), 97.38), +(-1302914361, 1678405890, 32767.8, 650365517, 44.1, (NOT NOT(cast( (cast(7576859 as signed) != cast(cast(null as double) as double)) as unsigned))), 32.84), +(384048774, 658253263, 9223372036854775809.6, 452481433, 18446744073709551615.2, (1525759257 between -1220071225 and 612122169), 32769.9); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-2009585616, 1832837680, 4294967297.5, 1317012644, 257.1, ((1=1) +and ((NOT NOT(cast( (cast(-4226 as signed) <= cast(1549047655 as signed)) as unsigned))))) +or (0<>0), 74.5), +(-1598162774, -435385558, 64.7, -261911833, 78.57, (-485999493 is NULL), 9223372036854775806.4), +(26199260, -504486874, 65534.8, -2009904172, cast(null as double), (-950469723 is NULL), cast(null as double)), +(-1077157880, -1293002688, 32768.1, -1289304617, 65537.5, (941803969 is not NULL), 70.70); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(121261295, 1096610403, 53.9, 1866267938, 13.98, (-145490517 between 1380150985 and -623945704), 254.8), +(635322050, -451877649, 9223372036854775807.4, -901709050, 93.92, ((NOT NOT(cast( (cast(647081267 as signed) > cast(6020731258952772445 as signed)) as unsigned)))) +and (0<>0), 9223372036854775806.8), +(-1540855777, cast(cast(null as signed) as signed), 4294967295.0, 2089549971, 4.27, (NOT NOT(cast( (cast(cast(null as char) as char) != cast('dm1v9kk3' as char)) as unsigned))), 4294967297.9), +(1746881744, 2098885378, 65.44, 657390556, 18446744073709551615.9, (574017262 not in ( +-611172942, 570085205, 1261699169, 359083418, 1975631810)), cast(null as double)); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-1575399441, cast(cast(null as signed) as signed), 63.88, -1668644664, 4294967296.9, (NOT NOT(cast( (cast(null as char) = 'mbcowijswu') as unsigned))), 4294967294.8), +(1934799426, 621753174, 60.78, -1536499200, 100.62, ((-1474140624 between cast(null as signed) and 1781836510)) +and ((782897875 is NULL)), 65535.5), +(-1648514586, -491983480, 31.13, 1269837708, 21.34, 0<>0, 1.18), +(-400813924, -101697773, 86.70, 1078411031, 93.21, (NOT NOT(cast( (97916628641457097 > cast(null as signed)) as unsigned))), 5.31); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(1060429117, 545828902, cast(null as double), -577565958, 90.19, (0<>0) +or ((NOT NOT(cast( (cast(cast(null as decimal) as decimal) <> cast(18.45 as double)) as unsigned)))), 4294967294.6), +(84752722, 437374131, 52.74, -213111549, 2147483648.100000, (NOT NOT(cast( (cast((NOT NOT(cast( (cast(cast(null as char) as char) = cast(cast(null as char) as char)) as unsigned))) as unsigned) <=> cast(cast(null as decimal) as decimal)) as unsigned))), 75.63), +(1862049279, 529130544, cast(null as double), -1478082073, 14.17, ('x' not like '_s'), 45.56), +(89754754, -2088687627, 20.52, 754635346, 2147483647.0, (-1527660898 in ( +-1321475518, 913437396, 561689209, cast(cast(null as signed) as signed), -758111435)), 65536.2); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(1443936095, -1108581874, 51.47, -1030187893, cast(null as double), (1827286981 between cast(cast(null as signed) as signed) and cast(cast(null as signed) as signed)), 4294967297.6), +(-1640232650, 989305695, 22.35, 1342094910, 4294967296.1, 0<>0, 24.16), +(-806337317, 464874669, 60.34, 1216153528, cast(null as double), 1=1, 127.5), +(1903673312, -696878308, 53.95, -1798150767, 128.8, 1=1, 97.96); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(743630552, cast(cast(null as signed) as signed), 41.57, 1562519081, 39.43, (NOT NOT(cast( (cast(cast(null as signed) as signed) <> cast(cast(null as double) as double)) as unsigned))), 9223372036854775807.5), +(-1639782322, 788796564, cast(null as double), 1313648896, 18446744073709551615.9, 1=1, cast(null as double)), +(-2091932532, -887734411, 32768.5, 1470788629, 61.81, (NOT NOT(cast( (-4220384 <=> 93.10) as unsigned))), 34.49), +(527627838, 1431752816, 97.24, -488642566, 32769.9, (NOT NOT(cast( (cast((NOT NOT(cast( (cast(52.69 as double) <> cast(-7197142 as signed)) as unsigned))) as unsigned) < cast((-1850976467 is not NULL) as unsigned)) as unsigned))), 41.18); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(888496908, 23082498, 100.51, -368021933, 2147483648.100000, ((NOT NOT(cast( (cast(null as char) != cast(null as char)) as unsigned)))) +or ((NOT NOT(cast( (cast(50.2 as double) XOR cast(0<>0 as unsigned)) as unsigned)))), 83.25), +(685334825, 1888311361, 60.31, -1486005305, 75.7, 1=1, 61.53), +(70790283, 1485235718, 34.38, 863162657, 85.94, ('u4' like 'htgt_jm_u'), 18446744073709551617.3), +(461406346, -209958457, 13.1, -1660657339, cast(null as double), (((1958955125 between 1655276802 and -917698760)) +or ((0<>0) +and (1=1))) +and (1=1), 126.9); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-74144591, -1333057672, 99.57, 2079966560, 18446744073709551615.6, 0<>0, 8.76), +(1605888148, 1006868149, 49.70, 1987277091, cast(null as double), ('ewf00dg6' like '%d'), 65.81), +(-180138602, -1084470684, 257.4, 522780636, 13.49, 0<>0, 37.15), +(464769937, -1065569253, 72.33, -1341213089, 32768.1, (532537575 is not NULL), 255.6); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-2093842006, 1855524268, 65535.9, 607165498, cast(null as double), 0<>0, 93.69), +(878984644, 356586414, 59.81, 330243850, 4294967297.0, (-997393251 between cast(cast(null as signed) as signed) and 915327063), cast(null as double)), +(591887315, -1305442840, cast(null as double), 1318319911, 59.92, (((((1493426241 is not NULL)) +and (((1816286068 between cast(cast(null as signed) as signed) and -618199640)) +and ((-1036501641 in ( +1398045688, -285769670, 1920125500, -1617424284, 130008360))))) +and ((NOT NOT(cast( (cast(89.85 as double) <= cast(-20980 as signed)) as unsigned))))) +and ((NOT NOT(cast( (cast(422821929 as signed) && cast(cast(null as decimal) as decimal)) as unsigned))))) +or (1=1), 3.50), +(-743324976, 1266511235, cast(null as double), -1795544518, 38.9, (NOT NOT(cast( (cast(null as double) > 4294967297.4) as unsigned))), 5.4); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(479084359, -304549960, 28.25, 2006643080, 29.35, (1=1) +or ((NOT NOT(cast( (cast(cast(null as double) as double) XOR cast(27.88 as double)) as unsigned)))), 64.6), +(2084750468, -417546511, 2147483648.6, -1687519456, 28.10, (NOT NOT(cast( (cast(-1863657748 as signed) && cast(85.54 as double)) as unsigned))), 257.4), +(742082846, cast(null as signed), 2147483648.8, 1678768507, 20.8, (('bobl9q' like 'r%ft')) +or ((NOT NOT(cast( (cast(3.90 as double) XOR cast(0<>0 as unsigned)) as unsigned)))), 18446744073709551617.7), +(876359199, 1219450090, 32766.6, 1903725608, 4294967295.0, (1989669317 in ( +-1985272252)), 54.79); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(1945403146, 1931546049, 44.16, 592372966, 29.95, 1=1, 127.0), +(938089746, cast(cast(null as signed) as signed), 65536.5, -232793978, 26.18, ('y4obshc3lg' like 'gkmq_47%_e'), cast(null as double)), +(529280007, 1240477841, 59.87, 1469314204, 93.44, (-946260498 between 688936592 and -1861828223), 18446744073709551615.3), +(-1863067392, -459618666, cast(null as double), -875893935, 53.7, (-202830405 in ( +371439569, cast(null as signed), 1191836680, cast(cast(null as signed) as signed))), 53.47); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(196222497, -1434771425, cast(null as double), 477650882, 18446744073709551615.2, 0<>0, 49.26), +(-1967706463, -1725993508, 10.29, -1421995071, cast(null as double), (NOT NOT(cast( (cast(21.53 as double) <= cast(cast(null as decimal) as decimal)) as unsigned))), 70.19), +(320910438, -960540616, cast(null as double), 423269172, 2147483649.6, 0<>0, 72.22), +(792012220, 274535206, 32767.6, -1821582304, 127.3, (NOT NOT(cast( (cast(-8696166282483600167 as signed) > cast(5435876 as signed)) as unsigned))), 9.100); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-182915937, -1271071898, 45.61, 29161648, 32768.5, 0<>0, 4294967296.3), +(1098651005, 1384289945, cast(null as double), -1974965488, 38.92, (NOT NOT(cast( (cast(-8364 as signed) > cast(6272383290166472133 as signed)) as unsigned))), 2147483646.0), +(-956265760, 698381127, 65.34, -1812305473, 16.12, ((NOT NOT(cast( (cast(2.12 as double) = cast(-2028715724 as signed)) as unsigned)))) +or (((-221996409 is NULL)) +and ((-1513528484 between -1938521186 and -1973584618))), 58.50), +(42311240, 826110128, 40.69, -1558559007, 36.33, 0<>0, 32769.8); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-35968772, 977741241, 78.93, -1003087598, 32766.3, ((NOT NOT(cast( (cast(1481793016 as signed) = cast(cast(null as signed) as signed)) as unsigned)))) +and (0<>0), 20.52), +(2054604066, 243313996, 4294967294.2, -1144215732, 87.46, (NOT NOT(cast( ((NOT NOT(cast( (cast(-8905 as signed) <> cast(3.90 as double)) as unsigned))) = 37.32) as unsigned))), 78.62), +(-285314380, 1846619768, 18446744073709551616.9, -711086531, 22.39, (cast(cast(null as signed) as signed) not in ( +122723593, -2101149290)), 129.8), +(-717648412, 1049674738, 9223372036854775809.8, 832839033, 9223372036854775809.0, (NOT NOT(cast( (cast(16164 as signed) <= cast(-876221 as signed)) as unsigned))), 2.44); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(249867644, 346336457, 17.74, 1601126266, 65537.9, (413595258 between cast(cast(null as signed) as signed) and -57605527), 127.8), +(-1571498583, -1458187285, 2147483648.100000, -394837749, 128.0, (NOT NOT(cast( (cast(55.70 as double) > cast(2072765100 as signed)) as unsigned))), 4294967296.6), +(71628432, 142545861, 13.82, 1506011334, cast(null as double), (-892550198 between 276592104 and 1156255734), 254.3), +(240843707, -360043520, cast(null as double), 1968304357, cast(null as double), ('edq' like 'mw%%ol'), 32768.8); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-243945718, 1767893978, 9223372036854775809.0, -627704665, 12.34, (NOT NOT(cast( (cast(null as char) <> cast(null as char)) as unsigned))), 61.80), +(54329340, 1577882927, 2147483647.6, -1495556917, 47.68, (cast(cast(null as signed) as signed) is not NULL), 59.78), +(-1783036065, 1868972559, 40.17, 1494835395, 96.87, 1=1, 66.52), +(-596050074, -705004751, 52.5, -1935846394, 65.12, (NOT NOT(cast( (cast((1819678558 is NULL) as unsigned) > cast(-298244956 as signed)) as unsigned))), 255.6); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(1577371525, cast(cast(null as signed) as signed), 255.0, 960164502, 2.57, ('wq9riws7l' like 'm_s'), 32766.4), +(-42826628, -934039402, 256.2, -1649513064, 50.32, (NOT NOT(cast( (cast(15997 as signed) <> cast(-345223499 as signed)) as unsigned))), 36.22), +(-1075109788, -1998961962, 29.98, 858739815, 129.2, (NOT NOT(cast( (cast(cast(null as char) as char) <> cast(cast(null as char) as char)) as unsigned))), 7.2), +(-175574897, -985496502, 69.70, 2040676550, 22.30, (NOT NOT(cast( (cast(-5096 as signed) XOR cast(('yp' like 'wx%1f') as unsigned)) as unsigned))), 9223372036854775809.0); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-1298173087, 1415054985, 70.18, -2127708504, 94.19, (NOT NOT(cast( (cast((NOT NOT(cast( ('mke' >= 'y9to9c2cqd') as unsigned))) as unsigned) < cast(1174522026688787663 as signed)) as unsigned))), 35.71), +(-432424485, -1947648254, cast(null as double), -1823955140, 67.99, (NOT NOT(cast( (cast(null as decimal) >= cast(null as signed)) as unsigned))), 5.22), +(-1411924254, 692974813, 65535.8, -984482506, 99.10, (NOT NOT(cast( (cast(null as double) != 37.28) as unsigned))), 3.24), +(-1450966821, 2091868372, cast(null as double), 2142289159, 26.1, 0<>0, 61.35); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(-890528460, -1565840720, 93.80, -391928446, 85.73, (((NOT NOT(cast( (cast(null as decimal) && (-2127363055 in ( +cast(null as signed), -1501501564, -447727069, 1161382083, -1615213659))) as unsigned)))) +and ((1=1) +or ((((-851853576 between -1418918613 and 611181520)) +or ((NOT NOT(cast( (cast(-2258617656466027229 as signed) <> cast(-729424338 as signed)) as unsigned))))) +and ((NOT NOT(cast( (cast(78.94 as double) < cast(41.52 as double)) as unsigned))))))) +or ((-756624972 is NULL)), 256.9), +(-1867285767, 2017325251, 93.16, -1548137915, 70.82, (NOT NOT(cast( (cast(4960443 as signed) > cast(671100674 as signed)) as unsigned))), 4294967295.5), +(1391557702, 1091143433, cast(null as double), 13816712, 29.95, (NOT NOT(cast( (cast(4066130327850566114 as signed) <> cast((1359107673 is not NULL) as unsigned)) as unsigned))), cast(null as double)), +(-521120810, 165548064, 9223372036854775808.4, -1893812499, 64.40, ('e' not like 'pik3_%'), 73.62); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values +(994077164, 1992568986, 84.25, 1255701141, 30.74, (1365814190 between 2000294788 and -1527327952), 39.30), +(468544671, 323039590, 74.83, -679847300, cast(null as double), (NOT NOT(cast( (cast('h' as char) <=> cast(cast(null as char) as char)) as unsigned))), 78.82), +(-969092588, -1447308137, 64.4, -910801889, cast(null as double), 0<>0, 2147483647.9), +(1922500440, -854043365, 97.30, -192800580, 254.5, 1=1, 44.93); +select 1 from t_tjov where ( select t_tjov.c_tutmh1 as c0 from ( select nth_value(t_n.c_tf_us39fv, 1) over (partition by t_db8a.c_jr2kq78hqt order by t_n.c_mm8jnf) as c5 from t_db8a join t_n ) as tbl limit 1 ); +1 +1 +1 +1 +1 +1 +1 +1 diff --git a/tests/integrationtest/r/executor/write.result b/tests/integrationtest/r/executor/write.result index 64356a3097d2a..2a827a5986736 100644 --- a/tests/integrationtest/r/executor/write.result +++ b/tests/integrationtest/r/executor/write.result @@ -1776,6 +1776,8 @@ a a b update /*+ INL_MERGE_JOIN(t) */ t, t1 set t.a='a' where t.a=t1.a; +Level Code Message +Warning 1815 The INDEX MERGE JOIN hint is deprecated for usage, try other hints. select * from t; a a diff --git a/tests/integrationtest/r/explain_easy.result b/tests/integrationtest/r/explain_easy.result index f5a81937ce990..c9e5771dfc0c6 100644 --- a/tests/integrationtest/r/explain_easy.result +++ b/tests/integrationtest/r/explain_easy.result @@ -739,8 +739,8 @@ insert into t values (1),(2),(2),(2),(9),(9),(9),(10); analyze table t all columns with 1 buckets; explain format = 'brief' select * from t where a >= 3 and a <= 8; id estRows task access object operator info -TableReader 0.00 root data:Selection -└─Selection 0.00 cop[tikv] ge(explain_easy.t.a, 3), le(explain_easy.t.a, 8) +TableReader 1.00 root data:Selection +└─Selection 1.00 cop[tikv] ge(explain_easy.t.a, 3), le(explain_easy.t.a, 8) └─TableFullScan 8.00 cop[tikv] table:t keep order:false drop table t; create table t(a int, b int, index idx_ab(a, b)); diff --git a/tests/integrationtest/r/explain_generate_column_substitute.result b/tests/integrationtest/r/explain_generate_column_substitute.result index 53a02de94d8d5..6732ab8473fa0 100644 --- a/tests/integrationtest/r/explain_generate_column_substitute.result +++ b/tests/integrationtest/r/explain_generate_column_substitute.result @@ -413,10 +413,10 @@ Projection 1.00 root explain_generate_column_substitute.t.a, explain_generate_c └─TableRowIDScan(Probe) 1.00 cop[tikv] table:t keep order:false desc format = 'brief' select * from t where not (lower(b) >= "a"); id estRows task access object operator info -Projection 0.00 root explain_generate_column_substitute.t.a, explain_generate_column_substitute.t.b -└─IndexLookUp 0.00 root - ├─IndexRangeScan(Build) 0.00 cop[tikv] table:t, index:expression_index(lower(`b`), `a` + 1) range:[-inf,"a"), keep order:false - └─TableRowIDScan(Probe) 0.00 cop[tikv] table:t keep order:false +Projection 1.00 root explain_generate_column_substitute.t.a, explain_generate_column_substitute.t.b +└─IndexLookUp 1.00 root + ├─IndexRangeScan(Build) 1.00 cop[tikv] table:t, index:expression_index(lower(`b`), `a` + 1) range:[-inf,"a"), keep order:false + └─TableRowIDScan(Probe) 1.00 cop[tikv] table:t keep order:false desc format = 'brief' select count(upper(b)) from t group by upper(b); id estRows task access object operator info StreamAgg 4.80 root group by:upper(explain_generate_column_substitute.t.b), funcs:count(upper(explain_generate_column_substitute.t.b))->Column#7 diff --git a/tests/integrationtest/r/expression/charset_and_collation.result b/tests/integrationtest/r/expression/charset_and_collation.result index 1691731f55522..fd81727b90694 100644 --- a/tests/integrationtest/r/expression/charset_and_collation.result +++ b/tests/integrationtest/r/expression/charset_and_collation.result @@ -821,7 +821,7 @@ select /*+ inl_merge_join(t2) */ t1.b, t2.b from t1 join t2 where t1.b=t2.b; b b a A Level Code Message -Warning 1815 Optimizer Hint /*+ INL_MERGE_JOIN(t2) */ is inapplicable +Warning 1815 The INDEX MERGE JOIN hint is deprecated for usage, try other hints. drop table if exists a, b; create table a(i int, k varbinary(40), v int, primary key(i, k) clustered); create table b(i int, k varchar(40), v int, primary key(i, k) clustered); diff --git a/tests/integrationtest/r/expression/issues.result b/tests/integrationtest/r/expression/issues.result index 36c11da79e1f0..4e883a109057c 100644 --- a/tests/integrationtest/r/expression/issues.result +++ b/tests/integrationtest/r/expression/issues.result @@ -531,15 +531,14 @@ insert into t2 value (1,2,date'2020-05-08'); explain format = 'brief' SELECT /*+ INL_MERGE_JOIN(t1,t2) */ COUNT(*) FROM t1 LEFT JOIN t2 ON t1.id = t2.order_id WHERE t1.ns = 'a' AND t1.org_id IN (1) AND t1.status IN (2,6,10) AND timestampdiff(month, t2.begin_time, date'2020-05-06') = 0; id estRows task access object operator info StreamAgg 1.00 root funcs:count(1)->Column#10 -└─IndexMergeJoin 0.03 root inner join, inner:Selection, outer key:expression__issues.t1.id, inner key:expression__issues.t2.order_id +└─IndexJoin 0.03 root inner join, inner:Selection, outer key:expression__issues.t1.id, inner key:expression__issues.t2.order_id, equal cond:eq(expression__issues.t1.id, expression__issues.t2.order_id) ├─TableReader(Build) 0.02 root data:Selection │ └─Selection 0.02 cop[tikv] eq(cast(expression__issues.t1.org_id, double BINARY), 1), eq(expression__issues.t1.ns, "a"), in(expression__issues.t1.status, 2, 6, 10) │ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo └─Selection(Probe) 0.03 root eq(timestampdiff("MONTH", expression__issues.t2.begin_time, 2020-05-06), 0) - └─Projection 0.04 root expression__issues.t2.order_id, expression__issues.t2.begin_time - └─IndexLookUp 0.04 root - ├─IndexRangeScan(Build) 0.04 cop[tikv] table:t2, index:idx_oid(order_id) range: decided by [eq(expression__issues.t2.order_id, expression__issues.t1.id)], keep order:true, stats:pseudo - └─TableRowIDScan(Probe) 0.04 cop[tikv] table:t2 keep order:false, stats:pseudo + └─IndexLookUp 0.04 root + ├─IndexRangeScan(Build) 0.04 cop[tikv] table:t2, index:idx_oid(order_id) range: decided by [eq(expression__issues.t2.order_id, expression__issues.t1.id)], keep order:false, stats:pseudo + └─TableRowIDScan(Probe) 0.04 cop[tikv] table:t2 keep order:false, stats:pseudo SELECT /*+ INL_MERGE_JOIN(t1,t2) */ COUNT(*) FROM t1 LEFT JOIN t2 ON t1.id = t2.order_id WHERE t1.ns = 'a' AND t1.org_id IN (1) AND t1.status IN (2,6,10) AND timestampdiff(month, t2.begin_time, date'2020-05-06') = 0; COUNT(*) 1 diff --git a/tests/integrationtest/r/globalindex/aggregate.result b/tests/integrationtest/r/globalindex/aggregate.result index 66516451de6af..1b79f8a52a810 100644 --- a/tests/integrationtest/r/globalindex/aggregate.result +++ b/tests/integrationtest/r/globalindex/aggregate.result @@ -1,6 +1,6 @@ set tidb_enable_global_index=true; drop table if exists p; -create table p (id int, c int, unique index idx(id)) partition by range (c) ( +create table p (id int, c int, unique index idx(id) global) partition by range (c) ( partition p0 values less than (4), partition p1 values less than (7), partition p2 values less than (10)); diff --git a/tests/integrationtest/r/globalindex/ddl.result b/tests/integrationtest/r/globalindex/ddl.result new file mode 100644 index 0000000000000..ca883939a509b --- /dev/null +++ b/tests/integrationtest/r/globalindex/ddl.result @@ -0,0 +1,82 @@ +set tidb_enable_global_index=OFF; +create table t (a int, b int, unique index idx(a) global); +Error 8200 (HY000): Unsupported Global Index on non-partitioned table +create table t (a int, b int, index idx(a) global); +Error 8200 (HY000): Unsupported Global Index on non-partitioned table +create table t (a int, b int, unique index idx(a) global) partition by hash(b) partitions 3; +Error 1503 (HY000): A UNIQUE INDEX must include all columns in the table's partitioning function +create table t (a int, b int, index idx(a) global) partition by hash(b) partitions 3; +Error 8200 (HY000): Unsupported GLOBAL IndexOption when tidb_enable_global_index is disabled +create table t3(a int not null, b int, primary key(a) nonclustered, unique idx_b(b) global) partition by hash(a) partitions 3; +Error 1503 (HY000): A UNIQUE INDEX must include all columns in the table's partitioning function +create table t (a int primary key nonclustered, b int) partition by hash(b) partitions 3; +Error 1503 (HY000): A PRIMARY KEY must include all columns in the table's partitioning function +create table t (a int, b int, unique key (a)) partition by hash(a) partitions 3; +alter table t partition by hash(b) partitions 3; +Error 1503 (HY000): A UNIQUE INDEX must include all columns in the table's partitioning function +alter table t partition by hash(b) partitions 3 update indexes (a global); +Error 1503 (HY000): A UNIQUE INDEX must include all columns in the table's partitioning function +alter table t add index idxErr (b) global; +Error 8200 (HY000): Unsupported Global IndexOption on non-unique index +alter table t add unique index idxErr (b) global; +Error 1503 (HY000): A UNIQUE INDEX must include all columns in the table's partitioning function +create index idxErr on t (b) global; +Error 8200 (HY000): Unsupported Global IndexOption on non-unique index +create unique index idxErr on t (b) global; +Error 1503 (HY000): A UNIQUE INDEX must include all columns in the table's partitioning function +alter table t remove partitioning; +alter table t add index idxErr (b) global; +Error 8200 (HY000): Unsupported Global Index on non-partitioned table +alter table t add unique index idxErr (b) global; +Error 8200 (HY000): Unsupported Global Index on non-partitioned table +create index idxErr on t (b) global; +Error 8200 (HY000): Unsupported Global Index on non-partitioned table +create unique index idxErr on t (b) global; +Error 8200 (HY000): Unsupported Global Index on non-partitioned table +drop table t; +set tidb_enable_global_index=ON; +create table t (a int, b int, unique index idx(a) global); +Error 8200 (HY000): Unsupported Global Index on non-partitioned table +create table t (a int, b int, index idx(a) global); +Error 8200 (HY000): Unsupported Global Index on non-partitioned table +create table t (a int, b int, index idx(a) global) partition by hash(b) partitions 3; +Error 8200 (HY000): Unsupported GLOBAL IndexOption on non-unique index +create table t (a int not null, b int, primary key(a) nonclustered, unique idx_b(b) global) partition by hash(a) partitions 3; +drop table t; +create table t (a int key global, b int) partition by hash(b) partitions 3; +Error 1503 (HY000): A CLUSTERED INDEX must include all columns in the table's partitioning function +create table t (a int unique, b int) partition by hash(b) partitions 3; +Error 8264 (HY000): Global Index is needed for index 'a', since the unique index is not including all partitioning columns, and GLOBAL is not given as IndexOption +create table t (a int unique key, b int) partition by hash(b) partitions 3; +Error 8264 (HY000): Global Index is needed for index 'a', since the unique index is not including all partitioning columns, and GLOBAL is not given as IndexOption +create table t (a int primary key nonclustered, b int) partition by hash(b) partitions 3; +Error 8264 (HY000): Global Index is needed for index 'PRIMARY', since the unique index is not including all partitioning columns, and GLOBAL is not given as IndexOption +CREATE TABLE `t` ( +`a` int(11) NOT NULL, +`b` int(11) DEFAULT NULL, +PRIMARY KEY (`a`) /*T![clustered_index] NONCLUSTERED */ /*T![global_index] GLOBAL */ +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin +PARTITION BY HASH (`b`) PARTITIONS 3; +show create table t; +Table Create Table +t CREATE TABLE `t` ( + `a` int(11) NOT NULL, + `b` int(11) DEFAULT NULL, + PRIMARY KEY (`a`) /*T![clustered_index] NONCLUSTERED */ /*T![global_index] GLOBAL */ +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin +PARTITION BY HASH (`b`) PARTITIONS 3 +drop table t; +create table t (a int, b int, unique key (a)) partition by hash(a) partitions 3; +alter table t partition by hash(b) partitions 3; +Error 8264 (HY000): Global Index is needed for index 'a', since the unique index is not including all partitioning columns, and GLOBAL is not given as IndexOption +alter table t partition by hash(b) partitions 3 UPDATE INDEXES (a GLOBAL); +alter table t add index idxErr (b) global; +Error 8200 (HY000): Unsupported Global IndexOption on non-unique index +alter table t add unique index idxOK (a) global; +alter table t add unique index idxErr (b) global; +Error 8200 (HY000): Unsupported Global IndexOption on index including all columns in the partitioning expression +create index idxErr on t (b) global; +Error 8200 (HY000): Unsupported Global IndexOption on non-unique index +create unique index idxOK2 on t (a) global; +create unique index idxErr on t (b) global; +Error 8200 (HY000): Unsupported Global IndexOption on index including all columns in the partitioning expression diff --git a/tests/integrationtest/r/globalindex/expression_index.result b/tests/integrationtest/r/globalindex/expression_index.result index 1af9c2559a723..5193ffbfb40f9 100644 --- a/tests/integrationtest/r/globalindex/expression_index.result +++ b/tests/integrationtest/r/globalindex/expression_index.result @@ -3,7 +3,7 @@ drop table if exists t; CREATE TABLE `t` ( `a` int(11) DEFAULT NULL, `b` char(11) DEFAULT NULL, -UNIQUE KEY `idx` ((lower(`b`))) +UNIQUE KEY `idx` ((lower(`b`))) global ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin PARTITION BY HASH (`a`) PARTITIONS 5; insert into t values (1, 'a'), (2, 'b'), (3, 'C'), (4, 'd'), (5, 'x'); diff --git a/tests/integrationtest/r/globalindex/index_join.result b/tests/integrationtest/r/globalindex/index_join.result index 337d8e9a72757..b094d03cdd16b 100644 --- a/tests/integrationtest/r/globalindex/index_join.result +++ b/tests/integrationtest/r/globalindex/index_join.result @@ -1,7 +1,7 @@ set tidb_enable_global_index=true; # Prepare data drop table if exists p; -create table p (id int, c int, unique index idx(id)) partition by range (c) ( +create table p (id int, c int, unique index idx(id) global) partition by range (c) ( partition p0 values less than (4), partition p1 values less than (7), partition p2 values less than (10)); @@ -67,7 +67,7 @@ select p.id from p partition(p1) inner join t on p.id = t.id; id # Prepare tables with clustered index drop table if exists p, t; -create table p (id int, c int, d int, e int, primary key(d, c) clustered, unique index idx(id)) partition by range (c) ( +create table p (id int, c int, d int, e int, primary key(d, c) clustered, unique index idx(id) global) partition by range (c) ( partition p0 values less than (4), partition p1 values less than (7), partition p2 values less than (10)); diff --git a/tests/integrationtest/r/globalindex/information_schema.result b/tests/integrationtest/r/globalindex/information_schema.result index 6f5cf29197df7..9ceba10579f38 100644 --- a/tests/integrationtest/r/globalindex/information_schema.result +++ b/tests/integrationtest/r/globalindex/information_schema.result @@ -3,7 +3,7 @@ drop table if exists t; CREATE TABLE `t` ( `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, -UNIQUE KEY `idx1` (`b`), +UNIQUE KEY `idx1` (`b`) global, KEY `idx` (`b`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin PARTITION BY HASH (`a`) PARTITIONS 5; diff --git a/tests/integrationtest/r/globalindex/insert.result b/tests/integrationtest/r/globalindex/insert.result index 0af2477c5799a..faca8754a5b3b 100644 --- a/tests/integrationtest/r/globalindex/insert.result +++ b/tests/integrationtest/r/globalindex/insert.result @@ -1,6 +1,6 @@ set tidb_enable_global_index = true; drop table if exists t; -create table t(a int, b int, unique index idx(a)) partition by hash(b) partitions 5; +create table t(a int, b int, unique index idx(a) global) partition by hash(b) partitions 5; insert into t values (1, 1), (1, 2) on duplicate key update a=1, b=3; select * from t use index (idx); a b diff --git a/tests/integrationtest/r/globalindex/mem_index_lookup.result b/tests/integrationtest/r/globalindex/mem_index_lookup.result index 4c1c9197521be..9a8ca73386569 100644 --- a/tests/integrationtest/r/globalindex/mem_index_lookup.result +++ b/tests/integrationtest/r/globalindex/mem_index_lookup.result @@ -4,7 +4,7 @@ drop table if exists t; CREATE TABLE `t` ( `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, -UNIQUE KEY `idx1` (`b`) +UNIQUE KEY `idx1` (`b`) GLOBAL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin PARTITION BY HASH (`a`) PARTITIONS 5; insert into t values (1, 2), (2, 3), (3, 4), (4, 5); @@ -63,7 +63,7 @@ CREATE TABLE `t` ( `a` year(4) primary key clustered, `b` int(11) DEFAULT NULL, `c` int(11) DEFAULT NULL, -UNIQUE KEY `idx1` (`b`) +UNIQUE KEY `idx1` (`b`) GLOBAL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin PARTITION BY HASH (`a`) PARTITIONS 5; insert into t(a, b) values (2001, 2), (2002, 3), (2003, 4), (2004, 5); diff --git a/tests/integrationtest/r/globalindex/mem_index_merge.result b/tests/integrationtest/r/globalindex/mem_index_merge.result index 310564a52d334..2b21403855900 100644 --- a/tests/integrationtest/r/globalindex/mem_index_merge.result +++ b/tests/integrationtest/r/globalindex/mem_index_merge.result @@ -6,7 +6,7 @@ CREATE TABLE `tpk2` ( `c` int(11) NOT NULL, `d` int(11) NOT NULL AUTO_INCREMENT, KEY `idx_bc` (`b`,`c`), -UNIQUE KEY `uidx_a` (`a`), +UNIQUE KEY `uidx_a` (`a`) GLOBAL, UNIQUE KEY `uidx_ac` (`a`, `c`), KEY `idx_c` (`c`) ) PARTITION BY HASH (`c`) PARTITIONS 5; @@ -84,8 +84,8 @@ CREATE TABLE `tpk2` ( `c` int(11) NOT NULL, `d` int(11) NOT NULL, KEY `idx_bc` (`b`,`c`), -UNIQUE KEY `uidx_a` (`a`), -UNIQUE KEY `uidx_ac` (`a`, `c`), +UNIQUE KEY `uidx_a` (`a`) GLOBAL, +UNIQUE KEY `uidx_ac` (`a`, `c`) GLOBAL, KEY `idx_c` (`c`), PRIMARY KEY(`d`, `c`) clustered ) PARTITION BY HASH (`d`) PARTITIONS 5; @@ -214,7 +214,7 @@ CREATE TABLE `tpk2` ( `c` int(11) NOT NULL, `d` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`b`), -UNIQUE KEY `uidx_a` (`a`) +UNIQUE KEY `uidx_a` (`a`) GLOBAL ) PARTITION BY HASH (`b`) PARTITIONS 5; insert into tpk2 values (1, 2, 1, 1), (3, 6, 3, 3); begin; diff --git a/tests/integrationtest/r/globalindex/mem_index_reader.result b/tests/integrationtest/r/globalindex/mem_index_reader.result index 3578fe78b3a2e..e8a3ac8d2ceed 100644 --- a/tests/integrationtest/r/globalindex/mem_index_reader.result +++ b/tests/integrationtest/r/globalindex/mem_index_reader.result @@ -4,7 +4,7 @@ drop table if exists t; CREATE TABLE `t` ( `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, -UNIQUE KEY `idx1` (`b`) +UNIQUE KEY `idx1` (`b`) GLOBAL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin PARTITION BY HASH (`a`) PARTITIONS 5; insert into t values (1, 2), (2, 3), (3, 4), (4, 5); @@ -48,7 +48,7 @@ drop table if exists t; CREATE TABLE `t` ( `a` year(4) primary key CLUSTERED, `b` int(11) DEFAULT NULL, -UNIQUE KEY `idx1` (`b`) +UNIQUE KEY `idx1` (`b`) GLOBAL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin PARTITION BY HASH (`a`) PARTITIONS 5; insert into t values (2001, 2), (2002, 3), (2003, 4), (2004, 5); diff --git a/tests/integrationtest/r/globalindex/misc.result b/tests/integrationtest/r/globalindex/misc.result index ddcf665b80d8f..16531b13f09ce 100644 --- a/tests/integrationtest/r/globalindex/misc.result +++ b/tests/integrationtest/r/globalindex/misc.result @@ -1,6 +1,6 @@ set tidb_enable_global_index=true; drop table if exists test_global; -create table test_global ( a int, b int, c int, unique key p_b(b)) +create table test_global ( a int, b int, c int, unique key p_b(b) global) partition by range( a ) ( partition p1 values less than (10), partition p2 values less than (20) @@ -14,21 +14,21 @@ Error 1062 (23000): Duplicate entry '2' for key 'test_global.p_b' insert into test_global(a,c) values (1,2); insert into test_global(a,c) values (11,2); drop table if exists test_global; -create table test_global ( a int, b int, c int, primary key p_b(b) /*T![clustered_index] CLUSTERED */) +create table test_global ( a int, b int, c int, primary key p_b(b) /*T![clustered_index] CLUSTERED */ GLOBAL) partition by range( a ) ( partition p1 values less than (10), partition p2 values less than (20) ); Error 1503 (HY000): A CLUSTERED INDEX must include all columns in the table's partitioning function drop table if exists test_global; -create table test_global ( a int, b int, c int, primary key p_b_c(b, c) /*T![clustered_index] CLUSTERED */) +create table test_global ( a int, b int, c int, primary key p_b_c(b, c) /*T![clustered_index] CLUSTERED */ GLOBAL) partition by range( a ) ( partition p1 values less than (10), partition p2 values less than (20) ); Error 1503 (HY000): A CLUSTERED INDEX must include all columns in the table's partitioning function drop table if exists test_global; -create table test_global ( a int, b int, c int, primary key (b) /*T![clustered_index] NONCLUSTERED */) +create table test_global ( a int, b int, c int, primary key (b) /*T![clustered_index] NONCLUSTERED */ GLOBAL) partition by range( a ) ( partition p1 values less than (10), partition p2 values less than (20) @@ -39,7 +39,7 @@ Error 1062 (23000): Duplicate entry '2' for key 'test_global.PRIMARY' insert into test_global values (11,2,2); Error 1062 (23000): Duplicate entry '2' for key 'test_global.PRIMARY' drop table if exists p; -create table p (a int, b int GENERATED ALWAYS AS (3*a-2*a) VIRTUAL, unique index idx(a)) partition by hash(b) partitions 2; +create table p (a int, b int GENERATED ALWAYS AS (3*a-2*a) VIRTUAL, unique index idx(a) global) partition by hash(b) partitions 2; insert into p (a) values (1),(2),(3); analyze table p; select * from p use index (idx); @@ -52,7 +52,7 @@ CREATE TABLE test_t1 ( a int(11) NOT NULL, b int(11) DEFAULT NULL, c int(11) DEFAULT NULL, -unique index p_a(a) +unique index p_a(a) global ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin PARTITION BY RANGE (c) ( PARTITION p0 VALUES LESS THAN (10), @@ -73,7 +73,7 @@ select * from test_t1 where a = 1; a b c 1 1 1 drop table if exists t; -create table t (a varchar(10), b varchar(1) GENERATED ALWAYS AS (substr(a,1,1)) VIRTUAL, unique index (a)) partition by list columns(b) (partition p0 values in ('a','c'), partition p1 values in ('b','d')); +create table t (a varchar(10), b varchar(1) GENERATED ALWAYS AS (substr(a,1,1)) VIRTUAL, unique index (a) global) partition by list columns(b) (partition p0 values in ('a','c'), partition p1 values in ('b','d')); insert into t (a) values ('aaa'),('abc'),('acd'); analyze table t; select a from t partition (p0) order by a; @@ -125,7 +125,7 @@ IndexReader 3.00 root partition:p1 index:Selection └─Selection 3.00 cop[tikv] NULL in(_tidb_tid, tid1) └─IndexFullScan 3.00 cop[tikv] table:t, index:a(a) keep order:true drop table if exists t; -create table t (a varchar(10), b varchar(1) GENERATED ALWAYS AS (substr(a,1,1)) STORED, unique index (a)) partition by list columns(b) (partition p0 values in ('a','c'), partition p1 values in ('b','d')); +create table t (a varchar(10), b varchar(1) GENERATED ALWAYS AS (substr(a,1,1)) STORED, unique index (a) global) partition by list columns(b) (partition p0 values in ('a','c'), partition p1 values in ('b','d')); insert into t (a) values ('aaa'),('abc'),('acd'); analyze table t; select a from t partition (p0) order by a; @@ -176,3 +176,66 @@ id estRows task access object operator info IndexReader 3.00 root partition:p1 index:Selection └─Selection 3.00 cop[tikv] NULL in(_tidb_tid, tid1) └─IndexFullScan 3.00 cop[tikv] table:t, index:a(a) keep order:true +drop table if exists t; +create table t (a int, b int, unique key idx_b (b)) partition by hash (a) partitions 3; +Error 8264 (HY000): Global Index is needed for index 'idx_b', since the unique index is not including all partitioning columns, and GLOBAL is not given as IndexOption +create table t (a int, b int, unique key idx_b (b) local) partition by hash (a) partitions 3; +Error 8264 (HY000): Global Index is needed for index 'idx_b', since the unique index is not including all partitioning columns, and GLOBAL is not given as IndexOption +create table t (a int, b int, unique key idx_b (b) global) partition by hash (a) partitions 3; +show create table t; +Table Create Table +t CREATE TABLE `t` ( + `a` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL, + UNIQUE KEY `idx_b` (`b`) /*T![global_index] GLOBAL */ +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin +PARTITION BY HASH (`a`) PARTITIONS 3 +drop table t; +CREATE TABLE `t` ( +`a` int(11) DEFAULT NULL, +`b` int(11) DEFAULT NULL, +UNIQUE KEY `idx_b` (`b`) /*T![global_index] GLOBAL */ +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin +PARTITION BY HASH (`a`) PARTITIONS 3; +show create table t; +Table Create Table +t CREATE TABLE `t` ( + `a` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL, + UNIQUE KEY `idx_b` (`b`) /*T![global_index] GLOBAL */ +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin +PARTITION BY HASH (`a`) PARTITIONS 3 +alter table t partition by key (b) partitions 3; +Error 8200 (HY000): DDL job rollback, error msg: Unsupported PARTITION BY, index 'idx_b' is unique and contains all partitioning columns, but has Global Index set +alter table t partition by hash (a) partitions 3 update indexes (idx_b LOCAL); +Error 8264 (HY000): Global Index is needed for index 'idx_b', since the unique index is not including all partitioning columns, and GLOBAL is not given as IndexOption +alter table t partition by hash (a) partitions 3 update indexes (idx_b GLOBAL); +show create table t; +Table Create Table +t CREATE TABLE `t` ( + `a` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL, + UNIQUE KEY `idx_b` (`b`) /*T![global_index] GLOBAL */ +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin +PARTITION BY HASH (`a`) PARTITIONS 3 +alter table t partition by hash (b) partitions 3 update indexes(idx_b global); +Error 8200 (HY000): DDL job rollback, error msg: Unsupported PARTITION BY, index 'idx_b' is unique and contains all partitioning columns, but has Global Index set +alter table t partition by hash (b) partitions 3 update indexes(idx_b local); +show create table t; +Table Create Table +t CREATE TABLE `t` ( + `a` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL, + UNIQUE KEY `idx_b` (`b`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin +PARTITION BY HASH (`b`) PARTITIONS 3 +alter table t partition by key (b) partitions 3; +show create table t; +Table Create Table +t CREATE TABLE `t` ( + `a` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL, + UNIQUE KEY `idx_b` (`b`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin +PARTITION BY KEY (`b`) PARTITIONS 3 +drop table t; diff --git a/tests/integrationtest/r/globalindex/multi_valued_index.result b/tests/integrationtest/r/globalindex/multi_valued_index.result index 00642564696a8..82e667d026555 100644 --- a/tests/integrationtest/r/globalindex/multi_valued_index.result +++ b/tests/integrationtest/r/globalindex/multi_valued_index.result @@ -4,7 +4,7 @@ CREATE TABLE `customers` ( `name` char(10) DEFAULT NULL, `custinfo` json DEFAULT NULL, KEY idx(`id`), -UNIQUE KEY `zips` ((cast(json_extract(`custinfo`, _utf8'$.zipcode') as unsigned array))) +UNIQUE KEY `zips` ((cast(json_extract(`custinfo`, _utf8'$.zipcode') as unsigned array))) GLOBAL ) PARTITION BY HASH (`id`) PARTITIONS 5; INSERT INTO customers VALUES (1, 'pingcap', '{"zipcode": [1,2]}'); INSERT INTO customers VALUES (2, 'pingcap', '{"zipcode": [2,3]}'); diff --git a/tests/integrationtest/r/globalindex/point_get.result b/tests/integrationtest/r/globalindex/point_get.result index d09e668a0076f..a634ed707653a 100644 --- a/tests/integrationtest/r/globalindex/point_get.result +++ b/tests/integrationtest/r/globalindex/point_get.result @@ -1,7 +1,7 @@ set tidb_enable_global_index=true; drop table if exists pt; # Non-clustered index table -create table pt (a int, b int, c int, d int default 0, primary key (a, b) nonclustered, unique key uidx(c)) +create table pt (a int, b int, c int, d int default 0, primary key (a, b) nonclustered, unique key uidx(c) global) partition by range(a) ( PARTITION p0 VALUES LESS THAN (3), PARTITION p1 VALUES LESS THAN (6), @@ -33,7 +33,7 @@ a b c d 3 3 3 0 drop table if exists pt; # Clustered index table -create table pt (a int, b int, c int, d int default 0, primary key (a, b) clustered, unique key uidx(c)) +create table pt (a int, b int, c int, d int default 0, primary key (a, b) clustered, unique key uidx(c) global) partition by range(a) ( PARTITION p0 VALUES LESS THAN (3), PARTITION p1 VALUES LESS THAN (6), diff --git a/tests/integrationtest/r/globalindex/update.result b/tests/integrationtest/r/globalindex/update.result index f475c84aefd2e..d5c5ffbf34ea4 100644 --- a/tests/integrationtest/r/globalindex/update.result +++ b/tests/integrationtest/r/globalindex/update.result @@ -5,7 +5,7 @@ CREATE TABLE `t` ( `b` int(11) DEFAULT NULL, `c` int(11) DEFAULT NULL, PRIMARY KEY (`a`) /*T![clustered_index] CLUSTERED */, -UNIQUE KEY `idx1` (`b`) +UNIQUE KEY `idx1` (`b`) GLOBAL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin PARTITION BY HASH (`a`) PARTITIONS 5; begin; @@ -14,7 +14,7 @@ insert into t values (2, 2, 3); Error 1062 (23000): Duplicate entry '2' for key 't.idx1' rollback; drop table if exists t; -create table t ( a int, b int, c int, unique key idx(b)) +create table t ( a int, b int, c int, unique key idx(b) global) partition by range( a ) ( partition p1 values less than (10), partition p2 values less than (20), @@ -41,7 +41,7 @@ a b c 8 8 8 13 12 12 drop table t; -create table t(a varchar(70), b mediumint(9), unique index idx_a(a), unique index idx_b(b)) partition by key(b) partitions 5; +create table t(a varchar(70), b mediumint(9), unique index idx_a(a) global, unique index idx_b(b)) partition by key(b) partitions 5; insert into t values ('',826534 ); replace into t values ('',826536 ); select * from t; diff --git a/tests/integrationtest/r/imdbload.result b/tests/integrationtest/r/imdbload.result index 7e5914344f1bf..2642b0837296c 100644 --- a/tests/integrationtest/r/imdbload.result +++ b/tests/integrationtest/r/imdbload.result @@ -286,48 +286,48 @@ IndexLookUp_7 1005030.94 root └─TableRowIDScan_6(Probe) 1005030.94 cop[tikv] table:char_name keep order:false trace plan target = 'estimation' select * from char_name where ((imdb_index = 'I') and (surname_pcode < 'E436')) or ((imdb_index = 'L') and (surname_pcode < 'E436')); CE_trace -[{"table_name":"char_name","type":"Column Stats-Point","expr":"((imdb_index = 'I'))","row_count":0},{"table_name":"char_name","type":"Column Stats-Point","expr":"((imdb_index = 'L'))","row_count":0},{"table_name":"char_name","type":"Column Stats-Range","expr":"((id >= -9223372036854775808 and id <= 9223372036854775807))","row_count":4314864},{"table_name":"char_name","type":"Column Stats-Range","expr":"((surname_pcode < 'E436'))","row_count":1005030},{"table_name":"char_name","type":"Index Stats-Range","expr":"((imdb_index = 'I') and (surname_pcode < 'E436')) or ((imdb_index = 'L') and (surname_pcode < 'E436'))","row_count":0},{"table_name":"char_name","type":"Index Stats-Range","expr":"((surname_pcode < 'E436'))","row_count":1005030},{"table_name":"char_name","type":"Table Stats-Expression-CNF","expr":"`or`(`and`(`eq`(imdbload.char_name.imdb_index, 'I'), `lt`(imdbload.char_name.surname_pcode, 'E436')), `and`(`eq`(imdbload.char_name.imdb_index, 'L'), `lt`(imdbload.char_name.surname_pcode, 'E436')))","row_count":804024}] +[{"table_name":"char_name","type":"Column Stats-Point","expr":"((imdb_index = 'I'))","row_count":1},{"table_name":"char_name","type":"Column Stats-Point","expr":"((imdb_index = 'L'))","row_count":1},{"table_name":"char_name","type":"Column Stats-Range","expr":"((id >= -9223372036854775808 and id <= 9223372036854775807))","row_count":4314864},{"table_name":"char_name","type":"Column Stats-Range","expr":"((surname_pcode < 'E436'))","row_count":1005030},{"table_name":"char_name","type":"Index Stats-Range","expr":"((imdb_index = 'I') and (surname_pcode < 'E436')) or ((imdb_index = 'L') and (surname_pcode < 'E436'))","row_count":2},{"table_name":"char_name","type":"Index Stats-Range","expr":"((surname_pcode < 'E436'))","row_count":1005030},{"table_name":"char_name","type":"Table Stats-Expression-CNF","expr":"`or`(`and`(`eq`(imdbload.char_name.imdb_index, 'I'), `lt`(imdbload.char_name.surname_pcode, 'E436')), `and`(`eq`(imdbload.char_name.imdb_index, 'L'), `lt`(imdbload.char_name.surname_pcode, 'E436')))","row_count":804024}] explain select * from char_name where ((imdb_index = 'V') and (surname_pcode < 'L3416')); id estRows task access object operator info -IndexLookUp_10 0.00 root -├─IndexRangeScan_8(Build) 0.00 cop[tikv] table:char_name, index:itest2(imdb_index, surname_pcode, name_pcode_nf) range:["V" -inf,"V" "L3416"), keep order:false -└─TableRowIDScan_9(Probe) 0.00 cop[tikv] table:char_name keep order:false +IndexLookUp_10 1.00 root +├─IndexRangeScan_8(Build) 1.00 cop[tikv] table:char_name, index:itest2(imdb_index, surname_pcode, name_pcode_nf) range:["V" -inf,"V" "L3416"), keep order:false +└─TableRowIDScan_9(Probe) 1.00 cop[tikv] table:char_name keep order:false explain select * from char_name where imdb_index > 'V'; id estRows task access object operator info -IndexLookUp_10 0.00 root -├─IndexRangeScan_8(Build) 0.00 cop[tikv] table:char_name, index:itest2(imdb_index, surname_pcode, name_pcode_nf) range:("V",+inf], keep order:false -└─TableRowIDScan_9(Probe) 0.00 cop[tikv] table:char_name keep order:false +IndexLookUp_10 1.00 root +├─IndexRangeScan_8(Build) 1.00 cop[tikv] table:char_name, index:itest2(imdb_index, surname_pcode, name_pcode_nf) range:("V",+inf], keep order:false +└─TableRowIDScan_9(Probe) 1.00 cop[tikv] table:char_name keep order:false trace plan target = 'estimation' select * from char_name where imdb_index > 'V'; CE_trace -[{"table_name":"char_name","type":"Column Stats-Range","expr":"((id >= -9223372036854775808 and id <= 9223372036854775807))","row_count":4314864},{"table_name":"char_name","type":"Column Stats-Range","expr":"((imdb_index > 'V' and true))","row_count":0},{"table_name":"char_name","type":"Index Stats-Range","expr":"((imdb_index > 'V' and true))","row_count":0},{"table_name":"char_name","type":"Table Stats-Expression-CNF","expr":"`gt`(imdbload.char_name.imdb_index, 'V')","row_count":0}] +[{"table_name":"char_name","type":"Column Stats-Range","expr":"((id >= -9223372036854775808 and id <= 9223372036854775807))","row_count":4314864},{"table_name":"char_name","type":"Column Stats-Range","expr":"((imdb_index > 'V' and true))","row_count":1},{"table_name":"char_name","type":"Index Stats-Range","expr":"((imdb_index > 'V' and true))","row_count":1},{"table_name":"char_name","type":"Table Stats-Expression-CNF","expr":"`gt`(imdbload.char_name.imdb_index, 'V')","row_count":1}] explain select * from movie_companies where company_type_id > 2; id estRows task access object operator info -IndexLookUp_10 0.00 root -├─IndexRangeScan_8(Build) 0.00 cop[tikv] table:movie_companies, index:movie_companies_idx_ctypeid(company_type_id) range:(2,+inf], keep order:false -└─TableRowIDScan_9(Probe) 0.00 cop[tikv] table:movie_companies keep order:false +IndexLookUp_10 1.00 root +├─IndexRangeScan_8(Build) 1.00 cop[tikv] table:movie_companies, index:movie_companies_idx_ctypeid(company_type_id) range:(2,+inf], keep order:false +└─TableRowIDScan_9(Probe) 1.00 cop[tikv] table:movie_companies keep order:false trace plan target = 'estimation' select * from movie_companies where company_type_id > 2; CE_trace -[{"table_name":"movie_companies","type":"Column Stats-Range","expr":"((company_type_id > 2 and true))","row_count":0},{"table_name":"movie_companies","type":"Column Stats-Range","expr":"((id >= -9223372036854775808 and id <= 9223372036854775807))","row_count":4958296},{"table_name":"movie_companies","type":"Index Stats-Range","expr":"((company_type_id > 2 and true))","row_count":0},{"table_name":"movie_companies","type":"Table Stats-Expression-CNF","expr":"`gt`(imdbload.movie_companies.company_type_id, 2)","row_count":0}] +[{"table_name":"movie_companies","type":"Column Stats-Range","expr":"((company_type_id > 2 and true))","row_count":1},{"table_name":"movie_companies","type":"Column Stats-Range","expr":"((id >= -9223372036854775808 and id <= 9223372036854775807))","row_count":4958296},{"table_name":"movie_companies","type":"Index Stats-Range","expr":"((company_type_id > 2 and true))","row_count":1},{"table_name":"movie_companies","type":"Table Stats-Expression-CNF","expr":"`gt`(imdbload.movie_companies.company_type_id, 2)","row_count":1}] explain select * from char_name where imdb_index > 'I' and imdb_index < 'II'; id estRows task access object operator info -IndexLookUp_10 0.00 root -├─IndexRangeScan_8(Build) 0.00 cop[tikv] table:char_name, index:itest2(imdb_index, surname_pcode, name_pcode_nf) range:("I","II"), keep order:false -└─TableRowIDScan_9(Probe) 0.00 cop[tikv] table:char_name keep order:false +IndexLookUp_10 1.00 root +├─IndexRangeScan_8(Build) 1.00 cop[tikv] table:char_name, index:itest2(imdb_index, surname_pcode, name_pcode_nf) range:("I","II"), keep order:false +└─TableRowIDScan_9(Probe) 1.00 cop[tikv] table:char_name keep order:false trace plan target = 'estimation' select * from char_name where imdb_index > 'I' and imdb_index < 'II'; CE_trace -[{"table_name":"char_name","type":"Column Stats-Range","expr":"((id >= -9223372036854775808 and id <= 9223372036854775807))","row_count":4314864},{"table_name":"char_name","type":"Column Stats-Range","expr":"((imdb_index > 'I' and imdb_index < 'II'))","row_count":0},{"table_name":"char_name","type":"Index Stats-Range","expr":"((imdb_index > 'I' and imdb_index < 'II'))","row_count":0},{"table_name":"char_name","type":"Table Stats-Expression-CNF","expr":"`and`(`gt`(imdbload.char_name.imdb_index, 'I'), `lt`(imdbload.char_name.imdb_index, 'II'))","row_count":0}] +[{"table_name":"char_name","type":"Column Stats-Range","expr":"((id >= -9223372036854775808 and id <= 9223372036854775807))","row_count":4314864},{"table_name":"char_name","type":"Column Stats-Range","expr":"((imdb_index > 'I' and imdb_index < 'II'))","row_count":1},{"table_name":"char_name","type":"Index Stats-Range","expr":"((imdb_index > 'I' and imdb_index < 'II'))","row_count":1},{"table_name":"char_name","type":"Table Stats-Expression-CNF","expr":"`and`(`gt`(imdbload.char_name.imdb_index, 'I'), `lt`(imdbload.char_name.imdb_index, 'II'))","row_count":1}] explain select * from char_name where imdb_index > 'I'; id estRows task access object operator info -IndexLookUp_10 0.00 root -├─IndexRangeScan_8(Build) 0.00 cop[tikv] table:char_name, index:itest2(imdb_index, surname_pcode, name_pcode_nf) range:("I",+inf], keep order:false -└─TableRowIDScan_9(Probe) 0.00 cop[tikv] table:char_name keep order:false +IndexLookUp_10 1.00 root +├─IndexRangeScan_8(Build) 1.00 cop[tikv] table:char_name, index:itest2(imdb_index, surname_pcode, name_pcode_nf) range:("I",+inf], keep order:false +└─TableRowIDScan_9(Probe) 1.00 cop[tikv] table:char_name keep order:false trace plan target = 'estimation' select * from char_name where imdb_index > 'I'; CE_trace -[{"table_name":"char_name","type":"Column Stats-Range","expr":"((id >= -9223372036854775808 and id <= 9223372036854775807))","row_count":4314864},{"table_name":"char_name","type":"Column Stats-Range","expr":"((imdb_index > 'I' and true))","row_count":0},{"table_name":"char_name","type":"Index Stats-Range","expr":"((imdb_index > 'I' and true))","row_count":0},{"table_name":"char_name","type":"Table Stats-Expression-CNF","expr":"`gt`(imdbload.char_name.imdb_index, 'I')","row_count":0}] +[{"table_name":"char_name","type":"Column Stats-Range","expr":"((id >= -9223372036854775808 and id <= 9223372036854775807))","row_count":4314864},{"table_name":"char_name","type":"Column Stats-Range","expr":"((imdb_index > 'I' and true))","row_count":1},{"table_name":"char_name","type":"Index Stats-Range","expr":"((imdb_index > 'I' and true))","row_count":1},{"table_name":"char_name","type":"Table Stats-Expression-CNF","expr":"`gt`(imdbload.char_name.imdb_index, 'I')","row_count":1}] explain select * from cast_info where nr_order < -2068070866; id estRows task access object operator info @@ -341,12 +341,12 @@ TableReader_7 34260.33 root data:Selection_6 └─TableFullScan_5 528337.00 cop[tikv] table:aka_title keep order:false explain select * from aka_title where kind_id > 7; id estRows task access object operator info -IndexLookUp_10 0.00 root -├─IndexRangeScan_8(Build) 0.00 cop[tikv] table:aka_title, index:aka_title_idx_kindid(kind_id) range:(7,+inf], keep order:false -└─TableRowIDScan_9(Probe) 0.00 cop[tikv] table:aka_title keep order:false +IndexLookUp_10 1.00 root +├─IndexRangeScan_8(Build) 1.00 cop[tikv] table:aka_title, index:aka_title_idx_kindid(kind_id) range:(7,+inf], keep order:false +└─TableRowIDScan_9(Probe) 1.00 cop[tikv] table:aka_title keep order:false trace plan target = 'estimation' select * from aka_title where kind_id > 7; CE_trace -[{"table_name":"aka_title","type":"Column Stats-Range","expr":"((id >= -9223372036854775808 and id <= 9223372036854775807))","row_count":528337},{"table_name":"aka_title","type":"Column Stats-Range","expr":"((kind_id > 7 and true))","row_count":0},{"table_name":"aka_title","type":"Index Stats-Range","expr":"((kind_id > 7 and true))","row_count":0},{"table_name":"aka_title","type":"Table Stats-Expression-CNF","expr":"`gt`(imdbload.aka_title.kind_id, 7)","row_count":0}] +[{"table_name":"aka_title","type":"Column Stats-Range","expr":"((id >= -9223372036854775808 and id <= 9223372036854775807))","row_count":528337},{"table_name":"aka_title","type":"Column Stats-Range","expr":"((kind_id > 7 and true))","row_count":1},{"table_name":"aka_title","type":"Index Stats-Range","expr":"((kind_id > 7 and true))","row_count":1},{"table_name":"aka_title","type":"Table Stats-Expression-CNF","expr":"`gt`(imdbload.aka_title.kind_id, 7)","row_count":1}] explain select * from keyword where ((phonetic_code = 'R1652') and (keyword > 'ecg-monitor' and keyword < 'killers')); id estRows task access object operator info diff --git a/tests/integrationtest/r/infoschema/infoschema.result b/tests/integrationtest/r/infoschema/infoschema.result index 63e7d48570d3d..1165bab6d0f6f 100644 --- a/tests/integrationtest/r/infoschema/infoschema.result +++ b/tests/integrationtest/r/infoschema/infoschema.result @@ -67,6 +67,7 @@ SELECT count(*) FROM information_schema.TABLES WHERE (TABLE_NAME = 't1' or TABLE count(*) 2 drop table mysql.t1, mysql.t2, mysql.t3; +drop table test.t1; create table infoschema__infoschema.t4(a int, INDEX i1 (a)); create table infoschema__infoschema.t5(a int, INDEX i1 (a)); insert into infoschema__infoschema.t4 values(1); @@ -115,6 +116,7 @@ Projection_4 8000.00 root Column#5, Column#10 └─MemTableScan_6 10000.00 root table:TABLES table_schema:["infoschema__infoschema"] select engine, DATA_LENGTH from information_schema.tables where lower(table_name) = 't5' and upper(table_schema) = 'INFOSCHEMA__INFOSCHEMA'; engine DATA_LENGTH +InnoDB 8 explain select engine, DATA_LENGTH from information_schema.tables where (table_name ='t4' or lower(table_name) = 't5') and upper(table_schema) = 'INFOSCHEMA__INFOSCHEMA'; id estRows task access object operator info Projection_4 8000.00 root Column#5, Column#10 @@ -130,3 +132,307 @@ MemTableScan_5 10000.00 root table:TABLES table_name:["T4","t4"], table_schema:[ select engine, DATA_LENGTH from information_schema.tables where table_name ='t4' and upper(table_name) ='T4' and table_schema = 'infoschema__infoschema'; engine DATA_LENGTH InnoDB 8 +drop table infoschema__infoschema.t4; +drop table infoschema__infoschema.t5; +create table pt1(a int primary key, b int) partition by hash(a) partitions 4; +create table pt2(a int primary key, b int) partition by hash(a) partitions 4; +select TABLE_NAME, PARTITION_NAME from information_schema.partitions where table_schema = 'infoschema__infoschema'; +TABLE_NAME PARTITION_NAME +pt1 p0 +pt1 p1 +pt1 p2 +pt1 p3 +pt2 p0 +pt2 p1 +pt2 p2 +pt2 p3 +select TABLE_NAME, PARTITION_NAME from information_schema.partitions where table_name = 'pt1' and table_schema = 'infoschema__infoschema'; +TABLE_NAME PARTITION_NAME +pt1 p0 +pt1 p1 +pt1 p2 +pt1 p3 +select TABLE_NAME, PARTITION_NAME from information_schema.partitions where table_name = 'pt2' and table_schema = 'infoschema__infoschema'; +TABLE_NAME PARTITION_NAME +pt2 p0 +pt2 p1 +pt2 p2 +pt2 p3 +select TABLE_NAME, PARTITION_NAME from information_schema.partitions where table_name = 'pt0' and table_schema = 'infoschema__infoschema'; +TABLE_NAME PARTITION_NAME +drop table pt1; +drop table pt2; +create database test1; +create database test2; +create table test1.t1(a int, b int, index idx(b)); +create table test2.t2(a int, b int, index idx(a)); +select TABLE_SCHEMA, TABLE_NAME, KEY_NAME from information_schema.tidb_indexes where table_schema = 'test1'; +TABLE_SCHEMA TABLE_NAME KEY_NAME +test1 t1 idx +select TABLE_SCHEMA, TABLE_NAME, KEY_NAME from information_schema.tidb_indexes where table_schema = 'test1' and table_name = 't1'; +TABLE_SCHEMA TABLE_NAME KEY_NAME +test1 t1 idx +select TABLE_SCHEMA, TABLE_NAME, KEY_NAME from information_schema.tidb_indexes where table_schema = 'test1' and table_name = 't2'; +TABLE_SCHEMA TABLE_NAME KEY_NAME +select TABLE_SCHEMA, TABLE_NAME, KEY_NAME from information_schema.tidb_indexes where table_name = 't2'; +TABLE_SCHEMA TABLE_NAME KEY_NAME +test2 t2 idx +drop table test1.t1, test2.t2; +set global tidb_enable_check_constraint = true; +create table test1.t1 (a int check(a > 10) not enforced, b int, constraint c1 check (a < b)); +create table test2.t2 (a int check(a < 10), b int, constraint c2 check (a = b)); +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.check_constraints; +CONSTRAINT_SCHEMA CONSTRAINT_NAME +test1 c1 +test1 t1_chk_1 +test2 c2 +test2 t2_chk_1 +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.check_constraints where constraint_schema = 'test1'; +CONSTRAINT_SCHEMA CONSTRAINT_NAME +test1 c1 +test1 t1_chk_1 +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.check_constraints where constraint_schema = 'test2'; +CONSTRAINT_SCHEMA CONSTRAINT_NAME +test2 c2 +test2 t2_chk_1 +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.check_constraints where constraint_schema = 'test2' and constraint_name = 'c2'; +CONSTRAINT_SCHEMA CONSTRAINT_NAME +test2 c2 +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.check_constraints where constraint_schema = 'test2' and constraint_name = 'c1'; +CONSTRAINT_SCHEMA CONSTRAINT_NAME +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.check_constraints; +CONSTRAINT_SCHEMA CONSTRAINT_NAME +test1 c1 +test1 t1_chk_1 +test2 c2 +test2 t2_chk_1 +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.tidb_check_constraints; +CONSTRAINT_SCHEMA CONSTRAINT_NAME +test1 c1 +test1 t1_chk_1 +test2 c2 +test2 t2_chk_1 +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.tidb_check_constraints where constraint_schema = 'test1'; +CONSTRAINT_SCHEMA CONSTRAINT_NAME +test1 c1 +test1 t1_chk_1 +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.tidb_check_constraints where constraint_schema = 'test2' and table_name = 't2'; +CONSTRAINT_SCHEMA CONSTRAINT_NAME +test2 c2 +test2 t2_chk_1 +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.tidb_check_constraints where constraint_schema = 'test1' and table_name = 't1' and constraint_name = 'c1'; +CONSTRAINT_SCHEMA CONSTRAINT_NAME +test1 c1 +drop table test1.t1, test2.t2; +CREATE TABLE test1.t11 (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (id)); +CREATE TABLE test1.t12 ( +id INT NOT NULL AUTO_INCREMENT, +name varchar(255) NOT NULL, +parent_id INT DEFAULT NULL, +PRIMARY KEY (id), +CONSTRAINT fk_parent FOREIGN KEY (parent_id) REFERENCES test1.t11 (id) ON UPDATE CASCADE ON DELETE RESTRICT +); +CREATE TABLE test2.t21 (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (id)); +CREATE TABLE test2.t22 ( +id INT NOT NULL AUTO_INCREMENT, +name varchar(255) NOT NULL, +parent_id INT DEFAULT NULL, +PRIMARY KEY (id), +CONSTRAINT fk_parent FOREIGN KEY (parent_id) REFERENCES test2.t21 (id) ON UPDATE CASCADE ON DELETE RESTRICT +); +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.referential_constraints; +CONSTRAINT_SCHEMA CONSTRAINT_NAME +test1 fk_parent +test2 fk_parent +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.referential_constraints where constraint_schema = 'test1'; +CONSTRAINT_SCHEMA CONSTRAINT_NAME +test1 fk_parent +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.referential_constraints where table_name = 't22'; +CONSTRAINT_SCHEMA CONSTRAINT_NAME +test2 fk_parent +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.referential_constraints where constraint_schema = 'test1' and table_name = 't12'; +CONSTRAINT_SCHEMA CONSTRAINT_NAME +test1 fk_parent +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.referential_constraints where constraint_schema = 'test1' and table_name = 't22'; +CONSTRAINT_SCHEMA CONSTRAINT_NAME +set global tidb_enable_check_constraint = default; +drop database test1; +drop database test2; +drop table if exists t1; +drop table if exists t2; +create table t1 (a bigint primary key clustered, b int, index idx(b)); +insert into t1 values (1, 1), (2, 2); +create database infoschema__infoschema_2; +use infoschema__infoschema_2; +create table t2 (a int, b char(255), index idx(b, a)); +insert into t2 values (1, 'aaa'); +select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.statistics where table_schema = 'infoschema__infoschema'; +TABLE_SCHEMA TABLE_NAME COLUMN_NAME +infoschema__infoschema t1 a +infoschema__infoschema t1 b +select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.statistics where table_name = 't1'; +TABLE_SCHEMA TABLE_NAME COLUMN_NAME +infoschema__infoschema t1 a +infoschema__infoschema t1 b +select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.statistics where table_name = 't2' and table_schema = 'infoschema__infoschema_2'; +TABLE_SCHEMA TABLE_NAME COLUMN_NAME +infoschema__infoschema_2 t2 a +infoschema__infoschema_2 t2 b +drop table infoschema__infoschema.t1; +drop table infoschema__infoschema_2.t2; +drop database if exists indexusage; +create database indexusage; +use indexusage; +create table idt1(col_1 int primary key, col_2 int, index idx_1(col_1), index idx_2(col_2), index idx_3(col_1, col_2)); +create table idt2(col_1 int primary key, col_2 int, index idx_1(col_1), index idx_2(col_2), index idx_4(col_2, col_1)); +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where TABLE_SCHEMA = 'indexusage'; +TABLE_SCHEMA TABLE_NAME INDEX_NAME +indexusage idt1 idx_1 +indexusage idt1 idx_2 +indexusage idt1 idx_3 +indexusage idt2 idx_1 +indexusage idt2 idx_2 +indexusage idt2 idx_4 +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where TABLE_NAME = 'idt1'; +TABLE_SCHEMA TABLE_NAME INDEX_NAME +indexusage idt1 idx_1 +indexusage idt1 idx_2 +indexusage idt1 idx_3 +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where INDEX_NAME = 'IDX_3'; +TABLE_SCHEMA TABLE_NAME INDEX_NAME +indexusage idt1 idx_3 +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where TABLE_SCHEMA = 'indexusage' and TABLE_NAME = 'idt1'; +TABLE_SCHEMA TABLE_NAME INDEX_NAME +indexusage idt1 idx_1 +indexusage idt1 idx_2 +indexusage idt1 idx_3 +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where TABLE_SCHEMA = 'indexusage' and INDEX_NAME = 'idx_2'; +TABLE_SCHEMA TABLE_NAME INDEX_NAME +indexusage idt1 idx_2 +indexusage idt2 idx_2 +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where TABLE_NAME = 'idt1' and INDEX_NAME = 'idx_1'; +TABLE_SCHEMA TABLE_NAME INDEX_NAME +indexusage idt1 idx_1 +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where TABLE_SCHEMA = 'indexusage' and TABLE_NAME = 'idt2' and INDEX_NAME = 'idx_4'; +TABLE_SCHEMA TABLE_NAME INDEX_NAME +indexusage idt2 idx_4 +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where TABLE_SCHEMA = 'indexusage1'; +TABLE_SCHEMA TABLE_NAME INDEX_NAME +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where TABLE_NAME = 'idt3'; +TABLE_SCHEMA TABLE_NAME INDEX_NAME +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where INDEX_NAME = 'IDX_5'; +TABLE_SCHEMA TABLE_NAME INDEX_NAME +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where TABLE_SCHEMA = 'indexusage' and TABLE_NAME = 'idt0'; +TABLE_SCHEMA TABLE_NAME INDEX_NAME +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where TABLE_SCHEMA = 'indexusage1' and INDEX_NAME = 'idx_2'; +TABLE_SCHEMA TABLE_NAME INDEX_NAME +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where TABLE_NAME = 'idt2' and INDEX_NAME = 'idx_3'; +TABLE_SCHEMA TABLE_NAME INDEX_NAME +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where TABLE_SCHEMA = 'indexusage' and TABLE_NAME = 'idt1' and INDEX_NAME = 'idx_4'; +TABLE_SCHEMA TABLE_NAME INDEX_NAME +drop database indexusage; +drop database if exists columnsinfo; +create database columnsinfo; +use columnsinfo; +create table tbl1(col_1 int primary key, col_2 int, col_4 int); +create table tbl2(col_1 int primary key, col_2 int, col_3 int); +create view view1 as select min(col_1), col_2, max(col_4) as max4 from tbl1 group by col_2; +select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.columns where TABLE_SCHEMA = "columnsinfo"; +TABLE_SCHEMA TABLE_NAME COLUMN_NAME +columnsinfo tbl1 col_1 +columnsinfo tbl1 col_2 +columnsinfo tbl1 col_4 +columnsinfo tbl2 col_1 +columnsinfo tbl2 col_2 +columnsinfo tbl2 col_3 +columnsinfo view1 col_2 +columnsinfo view1 max4 +columnsinfo view1 min(col_1) +select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.columns where TABLE_NAME = "view1" or TABLE_NAME = "tbl1"; +TABLE_SCHEMA TABLE_NAME COLUMN_NAME +columnsinfo tbl1 col_1 +columnsinfo tbl1 col_2 +columnsinfo tbl1 col_4 +columnsinfo view1 col_2 +columnsinfo view1 max4 +columnsinfo view1 min(col_1) +select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.columns where COLUMN_NAME = "col_2"; +TABLE_SCHEMA TABLE_NAME COLUMN_NAME +columnsinfo tbl1 col_2 +columnsinfo tbl2 col_2 +columnsinfo view1 col_2 +select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.columns where TABLE_SCHEMA = "columnsinfo" and TABLE_NAME = "tbl2"; +TABLE_SCHEMA TABLE_NAME COLUMN_NAME +columnsinfo tbl2 col_1 +columnsinfo tbl2 col_2 +columnsinfo tbl2 col_3 +select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.columns where TABLE_SCHEMA = "columnsinfo" and COLUMN_NAME = "col_4"; +TABLE_SCHEMA TABLE_NAME COLUMN_NAME +columnsinfo tbl1 col_4 +select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.columns where TABLE_NAME = "view1" and COLUMN_NAME like "m%"; +TABLE_SCHEMA TABLE_NAME COLUMN_NAME +columnsinfo view1 max4 +columnsinfo view1 min(col_1) +select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.columns where TABLE_SCHEMA = 'columnsinfo' and TABLE_NAME = 'tbl1' and COLUMN_NAME = 'col_2'; +TABLE_SCHEMA TABLE_NAME COLUMN_NAME +columnsinfo tbl1 col_2 +use infoschema__infoschema; +select SCHEMA_NAME from information_schema.schemata where schema_name = 'infoschema__infoschema_2'; +SCHEMA_NAME +infoschema__infoschema_2 +select SCHEMA_NAME from information_schema.schemata where schema_name = 'infoschema__infoschema'; +SCHEMA_NAME +infoschema__infoschema +drop database infoschema__infoschema_2; +create database if not exists db1; +create table db1.table1(id int not null primary key, cat_name varchar(255) not null, cat_description text); +create table db1.table2(id int not null, FOREIGN KEY fk(id) REFERENCES table1(id) ON UPDATE CASCADE ON DELETE RESTRICT); +create database if not exists db2; +create table db2.table1(id int not null primary key, cat_name varchar(255) not null, cat_description text); +create table db2.table2(id int not null, FOREIGN KEY fk(id) REFERENCES table1(id) ON UPDATE CASCADE ON DELETE RESTRICT); +select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE where table_schema = 'db1' order by TABLE_NAME; +CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION POSITION_IN_UNIQUE_CONSTRAINT REFERENCED_TABLE_SCHEMA REFERENCED_TABLE_NAME REFERENCED_COLUMN_NAME +def db1 PRIMARY def db1 table1 id 1 1 NULL NULL NULL +def db1 fk def db1 table2 id 1 1 db1 table1 id +drop database db1; +drop database db2; +create temporary table temp_table (a int, index idx(a)); +select count(1) from information_schema.tables where table_schema = 'infoschema__infoschema'; +count(1) +0 +select count(1) from information_schema.tables where table_name = 'temp_table'; +count(1) +0 +select count(1) from information_schema.statistics where table_name = 'temp_table'; +count(1) +0 +drop table temp_table; +create global temporary table temp_table(a int, index idx(a)) on commit delete rows; +select count(1) from information_schema.tables where table_schema = 'infoschema__infoschema'; +count(1) +1 +select count(1) from information_schema.tables where table_name = 'temp_table'; +count(1) +1 +select count(1) from information_schema.statistics where table_name = 'temp_table'; +count(1) +1 +drop table temp_table; +create database if not exists Db1; +create database if not exists dB2; +create sequence db1.s1; +create sequence db2.s2; +select sequence_schema, sequence_name from information_schema.sequences where sequence_schema = 'db1'; +sequence_schema sequence_name +Db1 s1 +select sequence_schema, sequence_name from information_schema.sequences where sequence_schema = 'db1' and sequence_name = 's1'; +sequence_schema sequence_name +Db1 s1 +select sequence_schema, sequence_name from information_schema.sequences where sequence_schema = 'db1' and sequence_name = 's2'; +sequence_schema sequence_name +select sequence_schema, sequence_name from information_schema.sequences; +sequence_schema sequence_name +Db1 s1 +dB2 s2 +drop database db1; +drop database db2; diff --git a/tests/integrationtest/r/planner/cardinality/selectivity.result b/tests/integrationtest/r/planner/cardinality/selectivity.result index 9ef9acfdcce63..89bcbb5ce9da3 100644 --- a/tests/integrationtest/r/planner/cardinality/selectivity.result +++ b/tests/integrationtest/r/planner/cardinality/selectivity.result @@ -1225,8 +1225,14 @@ insert into t values ('tw', 0); analyze table t all columns; explain select * from t where a = 'tw' and b < 0; id estRows task access object operator info +IndexReader_6 1.00 root index:IndexRangeScan_5 +└─IndexRangeScan_5 1.00 cop[tikv] table:t, index:idx(a, b) range:["tw" -inf,"tw" 0), keep order:false +set @@tidb_opt_fix_control = '47400:on'; +explain select * from t where a = 'tw' and b < 0; +id estRows task access object operator info IndexReader_6 0.00 root index:IndexRangeScan_5 └─IndexRangeScan_5 0.00 cop[tikv] table:t, index:idx(a, b) range:["tw" -inf,"tw" 0), keep order:false +set @@tidb_opt_fix_control = '47400:off'; drop table if exists t; create table t(id int auto_increment, kid int, pid int, primary key(id), key(kid, pid)); insert into t (kid, pid) values (1,2), (1,3), (1,4),(1, 11), (1, 12), (1, 13), (1, 14), (2, 2), (2, 3), (2, 4); diff --git a/tests/integrationtest/r/planner/core/casetest/hint/hint.result b/tests/integrationtest/r/planner/core/casetest/hint/hint.result index 1fd67eb399eed..0e8d0c1d264ed 100644 --- a/tests/integrationtest/r/planner/core/casetest/hint/hint.result +++ b/tests/integrationtest/r/planner/core/casetest/hint/hint.result @@ -1670,14 +1670,16 @@ Sort 12487.50 root planner__core__casetest__hint__hint.t.a └─TableRowIDScan(Probe) 12487.50 cop[tikv] table:t2 keep order:false, stats:pseudo desc format = 'brief' select /*+ INL_MERGE_JOIN(t2)*/ t1.a, t2.a from t t1, t t2 ,t t3 where t1.a = t2.a and t3.a=t2.a; id estRows task access object operator info -HashJoin 15625.00 root inner join, equal:[eq(planner__core__casetest__hint__hint.t.a, planner__core__casetest__hint__hint.t.a)] -├─IndexReader(Build) 10000.00 root index:IndexFullScan -│ └─IndexFullScan 10000.00 cop[tikv] table:t3, index:b(b) keep order:false, stats:pseudo -└─IndexMergeJoin(Probe) 12500.00 root inner join, inner:TableReader, outer key:planner__core__casetest__hint__hint.t.a, inner key:planner__core__casetest__hint__hint.t.a - ├─IndexReader(Build) 10000.00 root index:IndexFullScan - │ └─IndexFullScan 10000.00 cop[tikv] table:t1, index:b(b) keep order:false, stats:pseudo - └─TableReader(Probe) 10000.00 root data:TableRangeScan - └─TableRangeScan 10000.00 cop[tikv] table:t2 range: decided by [planner__core__casetest__hint__hint.t.a], keep order:true, stats:pseudo +MergeJoin 15625.00 root inner join, left key:planner__core__casetest__hint__hint.t.a, right key:planner__core__casetest__hint__hint.t.a +├─TableReader(Build) 10000.00 root data:TableFullScan +│ └─TableFullScan 10000.00 cop[tikv] table:t3 keep order:true, stats:pseudo +└─MergeJoin(Probe) 12500.00 root inner join, left key:planner__core__casetest__hint__hint.t.a, right key:planner__core__casetest__hint__hint.t.a + ├─TableReader(Build) 10000.00 root data:TableFullScan + │ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:true, stats:pseudo + └─TableReader(Probe) 10000.00 root data:TableFullScan + └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:true, stats:pseudo +Level Code Message +Warning 1815 The INDEX MERGE JOIN hint is deprecated for usage, try other hints. desc format = 'brief' select * from t t1, (select /*+ HASH_AGG() */ b, max(a) from t t2 group by b) t2 where t1.b = t2.b order by t1.b; id estRows task access object operator info Sort 9990.00 root planner__core__casetest__hint__hint.t.b diff --git a/tests/integrationtest/r/planner/core/casetest/index/index.result b/tests/integrationtest/r/planner/core/casetest/index/index.result index 4d9776effbefe..18ddb6d2571ff 100644 --- a/tests/integrationtest/r/planner/core/casetest/index/index.result +++ b/tests/integrationtest/r/planner/core/casetest/index/index.result @@ -277,11 +277,11 @@ a b c d a b c d 3 333 3.3000000000 13 3 333 3.3000000000 13 explain format = 'brief'select /*+ inl_merge_join(t1, t2) */ * from t t1 join t t2 on t1.a = t2.a; id estRows task access object operator info -IndexMergeJoin 3.00 root inner join, inner:TableReader, outer key:planner__core__casetest__index__index.t.a, inner key:planner__core__casetest__index__index.t.a +MergeJoin 3.00 root inner join, left key:planner__core__casetest__index__index.t.a, right key:planner__core__casetest__index__index.t.a ├─TableReader(Build) 3.00 root data:TableFullScan -│ └─TableFullScan 3.00 cop[tikv] table:t1 keep order:false -└─TableReader(Probe) 3.00 root data:TableRangeScan - └─TableRangeScan 3.00 cop[tikv] table:t2 range: decided by [eq(planner__core__casetest__index__index.t.a, planner__core__casetest__index__index.t.a)], keep order:true +│ └─TableFullScan 3.00 cop[tikv] table:t2 keep order:true +└─TableReader(Probe) 3.00 root data:TableFullScan + └─TableFullScan 3.00 cop[tikv] table:t1 keep order:true select /*+ inl_merge_join(t1, t2) */ * from t t1 join t t2 on t1.a = t2.a; a b c d a b c d 1 111 1.1000000000 11 1 111 1.1000000000 11 @@ -328,14 +328,12 @@ a b c d a b c d 3 333 3.3000000000 13 3 333 3.3000000000 13 explain format = 'brief'select /*+ inl_merge_join(t1,t2) */ t2.a, t2.c, t2.d from t t1 left join t t2 on t1.a = t2.c; id estRows task access object operator info -IndexMergeJoin 3.00 root left outer join, inner:Projection, outer key:Column#9, inner key:planner__core__casetest__index__index.t.c +HashJoin 3.00 root left outer join, equal:[eq(Column#9, planner__core__casetest__index__index.t.c)] ├─Projection(Build) 3.00 root cast(planner__core__casetest__index__index.t.a, decimal(10,0) BINARY)->Column#9 │ └─IndexReader 3.00 root index:IndexFullScan │ └─IndexFullScan 3.00 cop[tikv] table:t1, index:c(c) keep order:false -└─Projection(Probe) 3.00 root planner__core__casetest__index__index.t.a, planner__core__casetest__index__index.t.c, planner__core__casetest__index__index.t.d - └─IndexLookUp 3.00 root - ├─IndexRangeScan(Build) 3.00 cop[tikv] table:t2, index:c(c) range: decided by [eq(planner__core__casetest__index__index.t.c, Column#9)], keep order:true - └─TableRowIDScan(Probe) 3.00 cop[tikv] table:t2 keep order:false +└─TableReader(Probe) 3.00 root data:TableFullScan + └─TableFullScan 3.00 cop[tikv] table:t2 keep order:false select /*+ inl_merge_join(t1,t2) */ t2.a, t2.c, t2.d from t t1 left join t t2 on t1.a = t2.c; a c d NULL NULL NULL diff --git a/tests/integrationtest/r/planner/core/casetest/integration.result b/tests/integrationtest/r/planner/core/casetest/integration.result index 09c6bad54fd27..9946469915370 100644 --- a/tests/integrationtest/r/planner/core/casetest/integration.result +++ b/tests/integrationtest/r/planner/core/casetest/integration.result @@ -1154,17 +1154,17 @@ TableReader_7 3.00 130.42 root data:Selection_6 └─TableFullScan_5 5.00 1136.54 cop[tikv] table:t keep order:false explain format = 'verbose' select * from t where b = 6 order by a limit 1; id estRows estCost task access object operator info -Limit_11 0.00 98.74 root offset:0, count:1 -└─TableReader_24 0.00 98.74 root data:Limit_23 - └─Limit_23 0.00 1386.04 cop[tikv] offset:0, count:1 - └─Selection_22 0.00 1386.04 cop[tikv] eq(planner__core__casetest__integration.t.b, 6) +Limit_11 1.00 98.74 root offset:0, count:1 +└─TableReader_24 1.00 98.74 root data:Limit_23 + └─Limit_23 1.00 1386.04 cop[tikv] offset:0, count:1 + └─Selection_22 1.00 1386.04 cop[tikv] eq(planner__core__casetest__integration.t.b, 6) └─TableFullScan_21 5.00 1136.54 cop[tikv] table:t keep order:true explain format = 'verbose' select * from t where b = 6 limit 1; id estRows estCost task access object operator info -Limit_8 0.00 98.74 root offset:0, count:1 -└─TableReader_13 0.00 98.74 root data:Limit_12 - └─Limit_12 0.00 1386.04 cop[tikv] offset:0, count:1 - └─Selection_11 0.00 1386.04 cop[tikv] eq(planner__core__casetest__integration.t.b, 6) +Limit_8 1.00 98.74 root offset:0, count:1 +└─TableReader_13 1.00 98.74 root data:Limit_12 + └─Limit_12 1.00 1386.04 cop[tikv] offset:0, count:1 + └─Selection_11 1.00 1386.04 cop[tikv] eq(planner__core__casetest__integration.t.b, 6) └─TableFullScan_10 5.00 1136.54 cop[tikv] table:t keep order:false set tidb_opt_prefer_range_scan = 1; explain format = 'verbose' select * from t where b > 5; @@ -1176,19 +1176,19 @@ Level Code Message Note 1105 [idx_b] remain after pruning paths for t given Prop{SortItems: [], TaskTp: rootTask} explain format = 'verbose' select * from t where b = 6 order by a limit 1; id estRows estCost task access object operator info -TopN_9 0.00 1956.63 root planner__core__casetest__integration.t.a, offset:0, count:1 -└─IndexLookUp_16 0.00 1951.83 root - ├─TopN_15(Build) 0.00 206.70 cop[tikv] planner__core__casetest__integration.t.a, offset:0, count:1 - │ └─IndexRangeScan_13 0.00 203.50 cop[tikv] table:t, index:idx_b(b) range:[6,6], keep order:false - └─TableRowIDScan_14(Probe) 0.00 186.61 cop[tikv] table:t keep order:false +TopN_9 1.00 1956.63 root planner__core__casetest__integration.t.a, offset:0, count:1 +└─IndexLookUp_16 1.00 1951.83 root + ├─TopN_15(Build) 1.00 206.70 cop[tikv] planner__core__casetest__integration.t.a, offset:0, count:1 + │ └─IndexRangeScan_13 1.00 203.50 cop[tikv] table:t, index:idx_b(b) range:[6,6], keep order:false + └─TableRowIDScan_14(Probe) 1.00 186.61 cop[tikv] table:t keep order:false Level Code Message Note 1105 [idx_b] remain after pruning paths for t given Prop{SortItems: [], TaskTp: copMultiReadTask} explain format = 'verbose' select * from t where b = 6 limit 1; id estRows estCost task access object operator info -IndexLookUp_13 0.00 1170.97 root limit embedded(offset:0, count:1) -├─Limit_12(Build) 0.00 203.50 cop[tikv] offset:0, count:1 -│ └─IndexRangeScan_10 0.00 203.50 cop[tikv] table:t, index:idx_b(b) range:[6,6], keep order:false -└─TableRowIDScan_11(Probe) 0.00 186.61 cop[tikv] table:t keep order:false +IndexLookUp_13 1.00 1170.97 root limit embedded(offset:0, count:1) +├─Limit_12(Build) 1.00 203.50 cop[tikv] offset:0, count:1 +│ └─IndexRangeScan_10 1.00 203.50 cop[tikv] table:t, index:idx_b(b) range:[6,6], keep order:false +└─TableRowIDScan_11(Probe) 1.00 186.61 cop[tikv] table:t keep order:false Level Code Message Note 1105 [idx_b] remain after pruning paths for t given Prop{SortItems: [], TaskTp: copMultiReadTask} set @@tidb_enable_chunk_rpc = default; diff --git a/tests/integrationtest/r/planner/core/casetest/physicalplantest/physical_plan.result b/tests/integrationtest/r/planner/core/casetest/physicalplantest/physical_plan.result index 1d9230eeb143b..c1419b4c39e55 100644 --- a/tests/integrationtest/r/planner/core/casetest/physicalplantest/physical_plan.result +++ b/tests/integrationtest/r/planner/core/casetest/physicalplantest/physical_plan.result @@ -5,11 +5,11 @@ insert into t1 values(1,1),(2,2); insert into t2 values(1,1),(2,1); explain format = 'brief' select /*+ inl_merge_join(t2) */ t1.a, t2.a from t1 left join t2 on t1.a=t2.a and t1.b=t2.b; id estRows task access object operator info -IndexMergeJoin 12500.00 root left outer join, inner:TableReader, outer key:planner__core__casetest__physicalplantest__physical_plan.t1.a, inner key:planner__core__casetest__physicalplantest__physical_plan.t2.a, other cond:eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b) +HashJoin 12500.00 root left outer join, equal:[eq(planner__core__casetest__physicalplantest__physical_plan.t1.a, planner__core__casetest__physicalplantest__physical_plan.t2.a) eq(planner__core__casetest__physicalplantest__physical_plan.t1.b, planner__core__casetest__physicalplantest__physical_plan.t2.b)] ├─TableReader(Build) 10000.00 root data:TableFullScan -│ └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo -└─TableReader(Probe) 10000.00 root data:TableRangeScan - └─TableRangeScan 10000.00 cop[tikv] table:t2 range: decided by [planner__core__casetest__physicalplantest__physical_plan.t1.a], keep order:true, stats:pseudo +│ └─TableFullScan 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo +└─TableReader(Probe) 10000.00 root data:TableFullScan + └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo select /*+ inl_merge_join(t2) */ t1.a, t2.a from t1 left join t2 on t1.a=t2.a and t1.b=t2.b; a a 1 1 diff --git a/tests/integrationtest/r/planner/core/casetest/pushdown/push_down.result b/tests/integrationtest/r/planner/core/casetest/pushdown/push_down.result index 4256b07bae966..c84c78922dcdc 100644 --- a/tests/integrationtest/r/planner/core/casetest/pushdown/push_down.result +++ b/tests/integrationtest/r/planner/core/casetest/pushdown/push_down.result @@ -239,3 +239,31 @@ id estRows task access object operator info Projection 10000.00 root from_unixtime(cast(planner__core__casetest__pushdown__push_down.t.name, decimal(65,6) BINARY), %Y-%m-%d)->Column#13 └─TableReader 10000.00 root data:TableFullScan └─TableFullScan 10000.00 cop[tikv] table:t keep order:false, stats:pseudo +CREATE TABLE `t4a8656d1` ( +`col_73` json NOT NULL, +`col_74` date DEFAULT '1984-06-10', +KEY `idx_39` ((cast(`col_73` as double array)),`col_74`), +KEY `idx_40` ((cast(`col_73` as double array)),`col_74`), +UNIQUE KEY `idx_41` (`col_74`,(cast(`col_73` as double array))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; +CREATE TABLE `tld47bc815` ( +`col_1` text NOT NULL, +PRIMARY KEY (`col_1`(3)) /*T![clustered_index] NONCLUSTERED */, +KEY `idx_2` (`col_1`(5)), +UNIQUE KEY `idx_3` (`col_1`(5)), +KEY `idx_4` (`col_1`(4)) +) ENGINE=InnoDB DEFAULT CHARSET=gbk COLLATE=gbk_chinese_ci; +explain select 1, r0 as col_754 from ( select format(t4a8656d1.col_74, 1) as r0 from t4a8656d1 join tld47bc815 on t4a8656d1.col_74 = tld47bc815.col_1 where JSON_OVERLAPS(t4a8656d1.col_73, '[0.035131302371695955]') group by t4a8656d1.col_74, t4a8656d1.col_73 ) as subquery where IsNull(subquery.r0) +id estRows task access object operator info +Projection_14 6.40 root 1->Column#10, Column#9 +└─Projection_15 6.40 root format(cast(planner__core__casetest__pushdown__push_down.t4a8656d1.col_74, double BINARY), 1)->Column#9 + └─HashAgg_16 6.40 root group by:planner__core__casetest__pushdown__push_down.t4a8656d1.col_73, planner__core__casetest__pushdown__push_down.t4a8656d1.col_74, funcs:firstrow(planner__core__casetest__pushdown__push_down.t4a8656d1.col_74)->planner__core__casetest__pushdown__push_down.t4a8656d1.col_74 + └─HashJoin_19 10.00 root inner join, equal:[eq(planner__core__casetest__pushdown__push_down.t4a8656d1.col_74, Column#13)] + ├─Selection_20(Build) 8.00 root isnull(format(cast(planner__core__casetest__pushdown__push_down.t4a8656d1.col_74, double BINARY), 1)), json_overlaps(planner__core__casetest__pushdown__push_down.t4a8656d1.col_73, cast("[0.035131302371695955]", json BINARY)) + │ └─IndexMerge_27 10.00 root type: union + │ ├─Selection_25(Build) 0.00 cop[tikv] + │ │ └─IndexRangeScan_24 10.00 cop[tikv] table:t4a8656d1, index:idx_39(cast(`col_73` as double array), col_74) range:[0.035131302371695955,0.035131302371695955], keep order:false, stats:pseudo + │ └─TableRowIDScan_26(Probe) 10.00 cop[tikv] table:t4a8656d1 keep order:false, stats:pseudo + └─Projection_34(Probe) 10000.00 root cast(planner__core__casetest__pushdown__push_down.tld47bc815.col_1, datetime(6) BINARY)->Column#13 + └─TableReader_36 10000.00 root data:TableFullScan_35 + └─TableFullScan_35 10000.00 cop[tikv] table:tld47bc815 keep order:false, stats:pseudo diff --git a/tests/integrationtest/r/planner/core/casetest/rule/rule_join_reorder.result b/tests/integrationtest/r/planner/core/casetest/rule/rule_join_reorder.result index 0d381dc75e139..297bd172295fb 100644 --- a/tests/integrationtest/r/planner/core/casetest/rule/rule_join_reorder.result +++ b/tests/integrationtest/r/planner/core/casetest/rule/rule_join_reorder.result @@ -780,14 +780,13 @@ Level Code Message Warning 1815 Some INL_HASH_JOIN and NO_INDEX_HASH_JOIN hints conflict, NO_INDEX_HASH_JOIN may be ignored explain format = 'brief' select /*+ inl_merge_join(t1), no_index_merge_join(t1, t2) */ * from t1, t2 where t1.a=t2.a; id estRows task access object operator info -IndexMergeJoin 12487.50 root inner join, inner:IndexReader, outer key:planner__core__casetest__rule__rule_join_reorder.t2.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a +MergeJoin 12487.50 root inner join, left key:planner__core__casetest__rule__rule_join_reorder.t1.a, right key:planner__core__casetest__rule__rule_join_reorder.t2.a ├─IndexReader(Build) 9990.00 root index:IndexFullScan -│ └─IndexFullScan 9990.00 cop[tikv] table:t2, index:a(a) keep order:false, stats:pseudo -└─IndexReader(Probe) 12487.50 root index:Selection - └─Selection 12487.50 cop[tikv] not(isnull(planner__core__casetest__rule__rule_join_reorder.t1.a)) - └─IndexRangeScan 12500.00 cop[tikv] table:t1, index:a(a) range: decided by [eq(planner__core__casetest__rule__rule_join_reorder.t1.a, planner__core__casetest__rule__rule_join_reorder.t2.a)], keep order:true, stats:pseudo +│ └─IndexFullScan 9990.00 cop[tikv] table:t2, index:a(a) keep order:true, stats:pseudo +└─IndexReader(Probe) 9990.00 root index:IndexFullScan + └─IndexFullScan 9990.00 cop[tikv] table:t1, index:a(a) keep order:true, stats:pseudo Level Code Message -Warning 1815 Some INL_MERGE_JOIN and NO_INDEX_MERGE_JOIN hints conflict, NO_INDEX_MERGE_JOIN may be ignored +Warning 1815 The INDEX MERGE JOIN hint is deprecated for usage, try other hints. explain format = 'brief' select /*+ inl_join(t1), no_index_hash_join(t1) */ * from t1, t2 where t1.a=t2.a; id estRows task access object operator info IndexJoin 12487.50 root inner join, inner:IndexReader, outer key:planner__core__casetest__rule__rule_join_reorder.t2.a, inner key:planner__core__casetest__rule__rule_join_reorder.t1.a, equal cond:eq(planner__core__casetest__rule__rule_join_reorder.t2.a, planner__core__casetest__rule__rule_join_reorder.t1.a) diff --git a/tests/integrationtest/r/planner/core/indexmerge_path.result b/tests/integrationtest/r/planner/core/indexmerge_path.result index d5544c638378e..b94ced3f5ec3c 100644 --- a/tests/integrationtest/r/planner/core/indexmerge_path.result +++ b/tests/integrationtest/r/planner/core/indexmerge_path.result @@ -1081,3 +1081,127 @@ IndexMerge 0.05 root type: union └─Selection(Probe) 0.05 cop[tikv] eq(planner__core__indexmerge_path.t.a, 1) └─TableRowIDScan 49.94 cop[tikv] table:t keep order:false, stats:pseudo SET @@tidb_opt_fix_control = default; +drop table if exists t, t1; +create table t (a int, b varchar(30), c float, j json, pk int primary key, +key mvi1(c, (cast(j->'$.a' as unsigned array)), b), +key mvi2(a, (cast(j->'$.c' as unsigned array))), +key mvi3((cast(j->'$.d' as unsigned array)), c), +key idx(b, c) +); +insert into t values (1, 'test', 1, '{"a":[3,4,5], "c":[7,8,9], "d":[10,11,12]}', 1); +insert into t values (2, 'text', 1, '{"a":[4,5,6], "c":[10,11,12], "d":[13,14,15]}', 2); +insert into t values (1, 'abcd', 1, '{"a":[7,8,9], "c":[13,14,15], "d":[16,17,18]}', 3); +SELECT /*+ use_index_merge(t, mvi1) */ * from t where +c = 1 and +json_overlaps(j->'$.a', '[4,5,6]') and +b not like '%test%'; +a b c j pk +2 text 1 {"a": [4, 5, 6], "c": [10, 11, 12], "d": [13, 14, 15]} 2 +EXPLAIN format = brief SELECT /*+ use_index_merge(t, mvi1) */ * from t where +c = 1 and +json_overlaps(j->'$.a', '[4,5,6]') and +b not like '%test%'; +id estRows task access object operator info +Selection 0.24 root json_overlaps(json_extract(planner__core__indexmerge_path.t.j, "$.a"), cast("[4,5,6]", json BINARY)) +└─IndexMerge 0.30 root type: union + ├─Selection(Build) 0.00 cop[tikv] not(like(planner__core__indexmerge_path.t.b, "%test%", 92)) + │ └─IndexRangeScan 0.10 cop[tikv] table:t, index:mvi1(c, cast(json_extract(`j`, _utf8mb4'$.a') as unsigned array), b) range:[1 4,1 4], keep order:false, stats:pseudo + ├─Selection(Build) 0.00 cop[tikv] not(like(planner__core__indexmerge_path.t.b, "%test%", 92)) + │ └─IndexRangeScan 0.10 cop[tikv] table:t, index:mvi1(c, cast(json_extract(`j`, _utf8mb4'$.a') as unsigned array), b) range:[1 5,1 5], keep order:false, stats:pseudo + ├─Selection(Build) 0.00 cop[tikv] not(like(planner__core__indexmerge_path.t.b, "%test%", 92)) + │ └─IndexRangeScan 0.10 cop[tikv] table:t, index:mvi1(c, cast(json_extract(`j`, _utf8mb4'$.a') as unsigned array), b) range:[1 6,1 6], keep order:false, stats:pseudo + └─TableRowIDScan(Probe) 0.30 cop[tikv] table:t keep order:false, stats:pseudo +SELECT /*+ use_index_merge(t, mvi1) */ * from t where +c = 1 and +json_contains(j->'$.a', '[4,5]') and +b not like '%test%'; +a b c j pk +2 text 1 {"a": [4, 5, 6], "c": [10, 11, 12], "d": [13, 14, 15]} 2 +EXPLAIN format = brief SELECT /*+ use_index_merge(t, mvi1) */ * from t where +c = 1 and +json_contains(j->'$.a', '[4,5]') and +b not like '%test%'; +id estRows task access object operator info +IndexMerge 0.00 root type: intersection +├─Selection(Build) 0.00 cop[tikv] not(like(planner__core__indexmerge_path.t.b, "%test%", 92)) +│ └─IndexRangeScan 0.10 cop[tikv] table:t, index:mvi1(c, cast(json_extract(`j`, _utf8mb4'$.a') as unsigned array), b) range:[1 4,1 4], keep order:false, stats:pseudo +├─Selection(Build) 0.00 cop[tikv] not(like(planner__core__indexmerge_path.t.b, "%test%", 92)) +│ └─IndexRangeScan 0.10 cop[tikv] table:t, index:mvi1(c, cast(json_extract(`j`, _utf8mb4'$.a') as unsigned array), b) range:[1 5,1 5], keep order:false, stats:pseudo +└─TableRowIDScan(Probe) 0.00 cop[tikv] table:t keep order:false, stats:pseudo +SELECT /*+ use_index_merge(t, mvi1, mvi2, idx) */ * from t where +a = 1 and +b > 'abc' and +b not like '%test%' and +c = 10 and +3 member of (j->'$.a') and +3 member of (j->'$.c'); +a b c j pk +EXPLAIN format=brief SELECT /*+ use_index_merge(t, mvi1, mvi2, idx) */ * from t where +a = 1 and +b > 'abc' and +b not like '%test%' and +c = 10 and +3 member of (j->'$.a') and +3 member of (j->'$.c'); +id estRows task access object operator info +IndexMerge 0.00 root type: intersection +├─Selection(Build) 2.67 cop[tikv] eq(planner__core__indexmerge_path.t.c, 10), not(like(planner__core__indexmerge_path.t.b, "%test%", 92)), not(like(planner__core__indexmerge_path.t.b, "%test%", 92)) +│ └─IndexRangeScan 3333.33 cop[tikv] table:t, index:idx(b, c) range:("abc",+inf], keep order:false, stats:pseudo +├─Selection(Build) 0.00 cop[tikv] not(like(planner__core__indexmerge_path.t.b, "%test%", 92)) +│ └─IndexRangeScan 0.10 cop[tikv] table:t, index:mvi1(c, cast(json_extract(`j`, _utf8mb4'$.a') as unsigned array), b) range:[10 3,10 3], keep order:false, stats:pseudo +├─IndexRangeScan(Build) 0.10 cop[tikv] table:t, index:mvi2(a, cast(json_extract(`j`, _utf8mb4'$.c') as unsigned array)) range:[1 3,1 3], keep order:false, stats:pseudo +└─TableRowIDScan(Probe) 0.00 cop[tikv] table:t keep order:false, stats:pseudo +create table t1 ( +a int, +b varchar(30), +c float, +d tinytext, +j json, +key mvi1(b(3), (cast(j as unsigned array))), +key mvi2((cast(j as unsigned array)), b), +key mvi3((cast(j as unsigned array)), d(30)), +key mvi4((cast(j as unsigned array)), d(255)) +); +EXPLAIN format = brief SELECT /*+ use_index_merge(t1, mvi1) */ * from t1 where +c = 1 and +json_contains(j, '[4,5]') and +b = 'abcdefg'; +id estRows task access object operator info +TableReader 0.00 root data:Selection +└─Selection 0.00 cop[tikv] eq(planner__core__indexmerge_path.t1.b, "abcdefg"), eq(planner__core__indexmerge_path.t1.c, 1), json_contains(planner__core__indexmerge_path.t1.j, cast("[4,5]", json BINARY)) + └─TableFullScan 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo +EXPLAIN format = brief SELECT /*+ use_index_merge(t1, mvi2) */ * from t1 where +c = 1 and +json_contains(j, '[4,5]') and +b = 'abcdefg' and +b like '%test%'; +id estRows task access object operator info +IndexMerge 0.00 root type: intersection +├─Selection(Build) 0.00 cop[tikv] like(planner__core__indexmerge_path.t1.b, "%test%", 92) +│ └─IndexRangeScan 0.10 cop[tikv] table:t1, index:mvi2(cast(`j` as unsigned array), b) range:[4 "abcdefg",4 "abcdefg"], keep order:false, stats:pseudo +├─Selection(Build) 0.00 cop[tikv] like(planner__core__indexmerge_path.t1.b, "%test%", 92) +│ └─IndexRangeScan 0.10 cop[tikv] table:t1, index:mvi2(cast(`j` as unsigned array), b) range:[5 "abcdefg",5 "abcdefg"], keep order:false, stats:pseudo +└─Selection(Probe) 0.00 cop[tikv] eq(planner__core__indexmerge_path.t1.c, 1) + └─TableRowIDScan 0.00 cop[tikv] table:t1 keep order:false, stats:pseudo +EXPLAIN format = brief SELECT /*+ use_index_merge(t1, mvi3) */ * from t1 where +c = 1 and +json_contains(j, '[4,5]') and +d not like '%test%'; +id estRows task access object operator info +IndexMerge 0.01 root type: intersection +├─IndexRangeScan(Build) 10.00 cop[tikv] table:t1, index:mvi3(cast(`j` as unsigned array), d) range:[4,4], keep order:false, stats:pseudo +├─IndexRangeScan(Build) 10.00 cop[tikv] table:t1, index:mvi3(cast(`j` as unsigned array), d) range:[5,5], keep order:false, stats:pseudo +└─Selection(Probe) 0.01 cop[tikv] eq(planner__core__indexmerge_path.t1.c, 1), not(like(planner__core__indexmerge_path.t1.d, "%test%", 92)) + └─TableRowIDScan 0.01 cop[tikv] table:t1 keep order:false, stats:pseudo +EXPLAIN format = brief SELECT /*+ use_index_merge(t1, mvi4) */ * from t1 where +c = 1 and +json_contains(j, '[4,5]') and +d not like '%test%'; +id estRows task access object operator info +IndexMerge 0.01 root type: intersection +├─Selection(Build) 0.00 cop[tikv] not(like(planner__core__indexmerge_path.t1.d, "%test%", 92)) +│ └─IndexRangeScan 10.00 cop[tikv] table:t1, index:mvi4(cast(`j` as unsigned array), d) range:[4,4], keep order:false, stats:pseudo +├─Selection(Build) 0.00 cop[tikv] not(like(planner__core__indexmerge_path.t1.d, "%test%", 92)) +│ └─IndexRangeScan 10.00 cop[tikv] table:t1, index:mvi4(cast(`j` as unsigned array), d) range:[5,5], keep order:false, stats:pseudo +└─Selection(Probe) 0.01 cop[tikv] eq(planner__core__indexmerge_path.t1.c, 1) + └─TableRowIDScan 0.01 cop[tikv] table:t1 keep order:false, stats:pseudo diff --git a/tests/integrationtest/r/planner/core/integration.result b/tests/integrationtest/r/planner/core/integration.result index 2d2ff520f6326..5bff2a9f4ca71 100644 --- a/tests/integrationtest/r/planner/core/integration.result +++ b/tests/integrationtest/r/planner/core/integration.result @@ -2099,15 +2099,15 @@ insert into t values(1,1,1), (2,2,2), (3,3,3); insert into t2 values(1,2,3,4), (2,4,3,5), (1,3,1,1); select /*+ INL_MERGE_JOIN(t) */ * from t right outer join t2 on t.a=t2.c; a b c a b c d -1 1 1 1 3 1 1 3 3 3 1 2 3 4 +1 1 1 1 3 1 1 3 3 3 2 4 3 5 select /*+ INL_MERGE_JOIN(t2) */ * from t left outer join t2 on t.a=t2.c; a b c a b c d -1 1 1 1 3 1 1 -2 2 2 NULL NULL NULL NULL 3 3 3 1 2 3 4 +1 1 1 1 3 1 1 3 3 3 2 4 3 5 +2 2 2 NULL NULL NULL NULL set @@tidb_enable_clustered_index = DEFAULT; drop table if exists t; create table t (a int not null, b int not null, c int not null, primary key (a,c)) partition by range (c) (partition p0 values less than (5), partition p1 values less than (10)); diff --git a/tests/integrationtest/r/planner/core/issuetest/planner_issue.result b/tests/integrationtest/r/planner/core/issuetest/planner_issue.result index 24592c25f1d78..c7ca99fd96ec9 100644 --- a/tests/integrationtest/r/planner/core/issuetest/planner_issue.result +++ b/tests/integrationtest/r/planner/core/issuetest/planner_issue.result @@ -642,3 +642,33 @@ r0 1 1 1 +set autocommit=ON; +use test; +drop table if exists t1; +create table t1 (cc1 int,cc2 text); +insert into t1 values (1, 'aaaa'),(2, 'bbbb'),(3, 'cccc'); +drop table if exists t2; +create table t2 (cc1 int,cc2 text,primary key(cc1)); +insert into t2 values (2, '2'); +set tidb_executor_concurrency = 1; +set tidb_window_concurrency = 100; +explain select * from (SELECT DISTINCT cc2 as a, cc2 as b, cc1 as c FROM t2 UNION ALL SELECT count(1) over (partition by cc1), cc2, cc1 FROM t1) order by a,b,c; +id estRows task access object operator info +Sort_15 20000.00 root Column#8, Column#9, Column#10 +└─Union_18 20000.00 root + ├─Projection_20 10000.00 root test.t2.cc2->Column#8, test.t2.cc2->Column#9, test.t2.cc1->Column#10 + │ └─TableReader_22 10000.00 root data:TableFullScan_21 + │ └─TableFullScan_21 10000.00 cop[tikv] table:t2 keep order:false, stats:pseudo + └─Projection_23 10000.00 root cast(Column#7, text BINARY CHARACTER SET utf8mb4 COLLATE utf8mb4_bin)->Column#8, test.t1.cc2->Column#9, test.t1.cc1->Column#10 + └─Shuffle_28 10000.00 root execution info: concurrency:100, data sources:[TableReader_26] + └─Window_24 10000.00 root count(1)->Column#7 over(partition by test.t1.cc1) + └─Sort_27 10000.00 root test.t1.cc1 + └─ShuffleReceiver_30 10000.00 root + └─TableReader_26 10000.00 root data:TableFullScan_25 + └─TableFullScan_25 10000.00 cop[tikv] table:t1 keep order:false, stats:pseudo +select * from (SELECT DISTINCT cc2 as a, cc2 as b, cc1 as c FROM t2 UNION ALL SELECT count(1) over (partition by cc1), cc2, cc1 FROM t1) order by a,b,c; +a b c +1 aaaa 1 +1 bbbb 2 +1 cccc 3 +2 2 2 diff --git a/tests/integrationtest/r/planner/core/partition_pruner.result b/tests/integrationtest/r/planner/core/partition_pruner.result index 699eab20186e6..039d92a3891d8 100644 --- a/tests/integrationtest/r/planner/core/partition_pruner.result +++ b/tests/integrationtest/r/planner/core/partition_pruner.result @@ -3120,8 +3120,8 @@ IndexReader_10 2.00 root partition:all index:Selection_9 └─IndexFullScan_8 2.00 cop[tikv] table:test1, index:PRIMARY(ID, PARTITION_NO, CREATE_TIME) keep order:false explain select * from test1 where partition_no < 200000; id estRows task access object operator info -IndexReader_10 0.00 root partition:2023p1 index:Selection_9 -└─Selection_9 0.00 cop[tikv] lt(issue43459.test1.partition_no, 200000) +IndexReader_10 1.00 root partition:2023p1 index:Selection_9 +└─Selection_9 1.00 cop[tikv] lt(issue43459.test1.partition_no, 200000) └─IndexFullScan_8 2.00 cop[tikv] table:test1, index:PRIMARY(ID, PARTITION_NO, CREATE_TIME) keep order:false explain select * from test1 where partition_no <= 200000; id estRows task access object operator info @@ -3130,8 +3130,8 @@ IndexReader_10 2.00 root partition:all index:Selection_9 └─IndexFullScan_8 2.00 cop[tikv] table:test1, index:PRIMARY(ID, PARTITION_NO, CREATE_TIME) keep order:false explain select * from test1 where partition_no > 200000; id estRows task access object operator info -IndexReader_10 0.00 root partition:2023p2 index:Selection_9 -└─Selection_9 0.00 cop[tikv] gt(issue43459.test1.partition_no, 200000) +IndexReader_10 1.00 root partition:2023p2 index:Selection_9 +└─Selection_9 1.00 cop[tikv] gt(issue43459.test1.partition_no, 200000) └─IndexFullScan_8 2.00 cop[tikv] table:test1, index:PRIMARY(ID, PARTITION_NO, CREATE_TIME) keep order:false select * from test1 partition (2023p1); ID PARTITION_NO CREATE_TIME @@ -3179,8 +3179,8 @@ IndexReader_10 2.00 root partition:all index:Selection_9 └─IndexFullScan_8 2.00 cop[tikv] table:test1, index:PRIMARY(ID, PARTITION_NO, CREATE_TIME) keep order:false explain select * from test1 where partition_no < 200000; id estRows task access object operator info -IndexReader_10 0.00 root partition:2023p1 index:Selection_9 -└─Selection_9 0.00 cop[tikv] lt(issue43459.test1.partition_no, 200000) +IndexReader_10 1.00 root partition:2023p1 index:Selection_9 +└─Selection_9 1.00 cop[tikv] lt(issue43459.test1.partition_no, 200000) └─IndexFullScan_8 2.00 cop[tikv] table:test1, index:PRIMARY(ID, PARTITION_NO, CREATE_TIME) keep order:false explain select * from test1 where partition_no <= 200000; id estRows task access object operator info @@ -3189,8 +3189,8 @@ IndexReader_10 2.00 root partition:all index:Selection_9 └─IndexFullScan_8 2.00 cop[tikv] table:test1, index:PRIMARY(ID, PARTITION_NO, CREATE_TIME) keep order:false explain select * from test1 where partition_no > 200000; id estRows task access object operator info -IndexReader_10 0.00 root partition:2023p2 index:Selection_9 -└─Selection_9 0.00 cop[tikv] gt(issue43459.test1.partition_no, 200000) +IndexReader_10 1.00 root partition:2023p2 index:Selection_9 +└─Selection_9 1.00 cop[tikv] gt(issue43459.test1.partition_no, 200000) └─IndexFullScan_8 2.00 cop[tikv] table:test1, index:PRIMARY(ID, PARTITION_NO, CREATE_TIME) keep order:false select * from test1 partition (2023p1); ID PARTITION_NO CREATE_TIME diff --git a/tests/integrationtest/r/planner/core/physical_plan.result b/tests/integrationtest/r/planner/core/physical_plan.result index 5e7476f38c566..362fc85f0dd8c 100644 --- a/tests/integrationtest/r/planner/core/physical_plan.result +++ b/tests/integrationtest/r/planner/core/physical_plan.result @@ -2,10 +2,13 @@ drop table if exists t; create table t(a int, b int, c int, key(b), key(c)); explain format='hint' select /*+ inl_merge_join(t2) */ * from t t1 inner join t t2 on t1.b = t2.b and t1.c = 1; hint -inl_merge_join(@`sel_1` `planner__core__physical_plan`.`t2`), use_index(@`sel_1` `planner__core__physical_plan`.`t1` `c`), no_order_index(@`sel_1` `planner__core__physical_plan`.`t1` `c`), use_index(@`sel_1` `planner__core__physical_plan`.`t2` `b`), order_index(@`sel_1` `planner__core__physical_plan`.`t2` `b`), inl_merge_join(`t2`) +inl_hash_join(`planner__core__physical_plan`.`t2`), use_index(@`sel_1` `planner__core__physical_plan`.`t1` `c`), no_order_index(@`sel_1` `planner__core__physical_plan`.`t1` `c`), use_index(@`sel_1` `planner__core__physical_plan`.`t2` `b`), no_order_index(@`sel_1` `planner__core__physical_plan`.`t2` `b`), inl_merge_join(`t2`) +show warnings; +Level Code Message +Warning 1815 The INDEX MERGE JOIN hint is deprecated for usage, try other hints. explain format='hint' select /*+ inl_hash_join(t2) */ * from t t1 inner join t t2 on t1.b = t2.b and t1.c = 1; hint -inl_hash_join(@`sel_1` `planner__core__physical_plan`.`t2`), use_index(@`sel_1` `planner__core__physical_plan`.`t1` `c`), no_order_index(@`sel_1` `planner__core__physical_plan`.`t1` `c`), use_index(@`sel_1` `planner__core__physical_plan`.`t2` `b`), no_order_index(@`sel_1` `planner__core__physical_plan`.`t2` `b`), inl_hash_join(`t2`) +inl_hash_join(`planner__core__physical_plan`.`t2`), use_index(@`sel_1` `planner__core__physical_plan`.`t1` `c`), no_order_index(@`sel_1` `planner__core__physical_plan`.`t1` `c`), use_index(@`sel_1` `planner__core__physical_plan`.`t2` `b`), no_order_index(@`sel_1` `planner__core__physical_plan`.`t2` `b`), inl_hash_join(`t2`) drop table if exists t; create table t(a int, b int, c int, index idx_a(a)); select extract(day_hour from 'ziy') as res from t order by res limit 1; diff --git a/tests/integrationtest/r/statistics/integration.result b/tests/integrationtest/r/statistics/integration.result index aa9bb4ac163b9..4baea6abdeeb1 100644 --- a/tests/integrationtest/r/statistics/integration.result +++ b/tests/integrationtest/r/statistics/integration.result @@ -17,8 +17,8 @@ explain format = 'brief' select * from t1 left join t2 on t1.a=t2.a order by t1. id estRows task access object operator info Sort 4.00 root statistics__integration.t1.a, statistics__integration.t2.a └─HashJoin 4.00 root left outer join, equal:[eq(statistics__integration.t1.a, statistics__integration.t2.a)] - ├─TableReader(Build) 0.00 root data:Selection - │ └─Selection 0.00 cop[tikv] not(isnull(statistics__integration.t2.a)) + ├─TableReader(Build) 1.00 root data:Selection + │ └─Selection 1.00 cop[tikv] not(isnull(statistics__integration.t2.a)) │ └─TableFullScan 2.00 cop[tikv] table:t2 keep order:false └─TableReader(Probe) 4.00 root data:TableFullScan └─TableFullScan 4.00 cop[tikv] table:t1 keep order:false @@ -26,8 +26,8 @@ explain format = 'brief' select * from t2 left join t1 on t1.a=t2.a order by t1. id estRows task access object operator info Sort 2.00 root statistics__integration.t1.a, statistics__integration.t2.a └─HashJoin 2.00 root left outer join, equal:[eq(statistics__integration.t2.a, statistics__integration.t1.a)] - ├─TableReader(Build) 0.00 root data:Selection - │ └─Selection 0.00 cop[tikv] not(isnull(statistics__integration.t1.a)) + ├─TableReader(Build) 1.00 root data:Selection + │ └─Selection 1.00 cop[tikv] not(isnull(statistics__integration.t1.a)) │ └─TableFullScan 4.00 cop[tikv] table:t1 keep order:false └─TableReader(Probe) 2.00 root data:TableFullScan └─TableFullScan 2.00 cop[tikv] table:t2 keep order:false @@ -35,8 +35,8 @@ explain format = 'brief' select * from t1 right join t2 on t1.a=t2.a order by t1 id estRows task access object operator info Sort 2.00 root statistics__integration.t1.a, statistics__integration.t2.a └─HashJoin 2.00 root right outer join, equal:[eq(statistics__integration.t1.a, statistics__integration.t2.a)] - ├─TableReader(Build) 0.00 root data:Selection - │ └─Selection 0.00 cop[tikv] not(isnull(statistics__integration.t1.a)) + ├─TableReader(Build) 1.00 root data:Selection + │ └─Selection 1.00 cop[tikv] not(isnull(statistics__integration.t1.a)) │ └─TableFullScan 4.00 cop[tikv] table:t1 keep order:false └─TableReader(Probe) 2.00 root data:TableFullScan └─TableFullScan 2.00 cop[tikv] table:t2 keep order:false @@ -44,8 +44,8 @@ explain format = 'brief' select * from t2 right join t1 on t1.a=t2.a order by t1 id estRows task access object operator info Sort 4.00 root statistics__integration.t1.a, statistics__integration.t2.a └─HashJoin 4.00 root right outer join, equal:[eq(statistics__integration.t2.a, statistics__integration.t1.a)] - ├─TableReader(Build) 0.00 root data:Selection - │ └─Selection 0.00 cop[tikv] not(isnull(statistics__integration.t2.a)) + ├─TableReader(Build) 1.00 root data:Selection + │ └─Selection 1.00 cop[tikv] not(isnull(statistics__integration.t2.a)) │ └─TableFullScan 2.00 cop[tikv] table:t2 keep order:false └─TableReader(Probe) 4.00 root data:TableFullScan └─TableFullScan 4.00 cop[tikv] table:t1 keep order:false diff --git a/tests/integrationtest/r/tpch.result b/tests/integrationtest/r/tpch.result index cd2f96f31ce7c..bdb7c7f740c77 100644 --- a/tests/integrationtest/r/tpch.result +++ b/tests/integrationtest/r/tpch.result @@ -1292,10 +1292,10 @@ id estRows task access object operator info Sort 1.00 root Column#31 └─Projection 1.00 root Column#31, Column#32, Column#33 └─HashAgg 1.00 root group by:Column#36, funcs:count(1)->Column#32, funcs:sum(Column#35)->Column#33, funcs:firstrow(Column#36)->Column#31 - └─Projection 0.00 root tpch50.customer.c_acctbal->Column#35, substring(tpch50.customer.c_phone, 1, 2)->Column#36 - └─HashJoin 0.00 root anti semi join, equal:[eq(tpch50.customer.c_custkey, tpch50.orders.o_custkey)] + └─Projection 0.64 root tpch50.customer.c_acctbal->Column#35, substring(tpch50.customer.c_phone, 1, 2)->Column#36 + └─HashJoin 0.64 root anti semi join, equal:[eq(tpch50.customer.c_custkey, tpch50.orders.o_custkey)] ├─TableReader(Build) 75000000.00 root data:TableFullScan │ └─TableFullScan 75000000.00 cop[tikv] table:orders keep order:false - └─TableReader(Probe) 0.00 root data:Selection - └─Selection 0.00 cop[tikv] gt(tpch50.customer.c_acctbal, NULL), in(substring(tpch50.customer.c_phone, 1, 2), "20", "40", "22", "30", "39", "42", "21") + └─TableReader(Probe) 0.80 root data:Selection + └─Selection 0.80 cop[tikv] gt(tpch50.customer.c_acctbal, NULL), in(substring(tpch50.customer.c_phone, 1, 2), "20", "40", "22", "30", "39", "42", "21") └─TableFullScan 7500000.00 cop[tikv] table:customer keep order:false diff --git a/tests/integrationtest/r/util/ranger.result b/tests/integrationtest/r/util/ranger.result index 7acee71598f07..c6cfef64a3bc3 100644 --- a/tests/integrationtest/r/util/ranger.result +++ b/tests/integrationtest/r/util/ranger.result @@ -195,12 +195,12 @@ select * from t where a = 3; a b explain format='brief' select * from t where a < 1; id estRows task access object operator info -PartitionUnion 1.00 root +PartitionUnion 2.00 root ├─TableReader 1.00 root data:Selection │ └─Selection 1.00 cop[tikv] lt(util__ranger.t.a, 1) │ └─TableFullScan 1.00 cop[tikv] table:t, partition:p0 keep order:false -└─TableReader 0.00 root data:Selection - └─Selection 0.00 cop[tikv] lt(util__ranger.t.a, 1) +└─TableReader 1.00 root data:Selection + └─Selection 1.00 cop[tikv] lt(util__ranger.t.a, 1) └─TableFullScan 3.00 cop[tikv] table:t, partition:p1 keep order:false select * from t where a < 1; a b @@ -227,9 +227,9 @@ select * from t where a < -1; a b explain format='brief' select * from t where a > 0; id estRows task access object operator info -PartitionUnion 3.00 root -├─TableReader 0.00 root data:Selection -│ └─Selection 0.00 cop[tikv] gt(util__ranger.t.a, 0) +PartitionUnion 4.00 root +├─TableReader 1.00 root data:Selection +│ └─Selection 1.00 cop[tikv] gt(util__ranger.t.a, 0) │ └─TableFullScan 1.00 cop[tikv] table:t, partition:p0 keep order:false └─TableReader 3.00 root data:Selection └─Selection 3.00 cop[tikv] gt(util__ranger.t.a, 0) @@ -256,12 +256,12 @@ a b  3 explain format='brief' select * from t where a > 3; id estRows task access object operator info -PartitionUnion 0.00 root -├─TableReader 0.00 root data:Selection -│ └─Selection 0.00 cop[tikv] gt(util__ranger.t.a, 3) +PartitionUnion 2.00 root +├─TableReader 1.00 root data:Selection +│ └─Selection 1.00 cop[tikv] gt(util__ranger.t.a, 3) │ └─TableFullScan 1.00 cop[tikv] table:t, partition:p0 keep order:false -└─TableReader 0.00 root data:Selection - └─Selection 0.00 cop[tikv] gt(util__ranger.t.a, 3) +└─TableReader 1.00 root data:Selection + └─Selection 1.00 cop[tikv] gt(util__ranger.t.a, 3) └─TableFullScan 3.00 cop[tikv] table:t, partition:p1 keep order:false select * from t where a > 3; a b diff --git a/tests/integrationtest/run-tests.sh b/tests/integrationtest/run-tests.sh index 3595e18529cef..e47d53e9bdfea 100755 --- a/tests/integrationtest/run-tests.sh +++ b/tests/integrationtest/run-tests.sh @@ -88,7 +88,7 @@ function build_mysql_tester() { echo "building mysql-tester binary: $mysql_tester" rm -rf $mysql_tester - GOBIN=$PWD go install github.com/pingcap/mysql-tester/src@17b728effac3dd2f347bf508d4920657860ef719 + GOBIN=$PWD go install github.com/pingcap/mysql-tester/src@7750e728f5c2649b7cfa08d680bcf98cfbfcf148 mv src mysql_tester } diff --git a/tests/integrationtest/s.zip b/tests/integrationtest/s.zip index 308f50117d9fb..8d2f14165f4fe 100644 Binary files a/tests/integrationtest/s.zip and b/tests/integrationtest/s.zip differ diff --git a/tests/integrationtest/t/clustered_index.test b/tests/integrationtest/t/clustered_index.test index f809cf12104c0..7607a41a349d4 100644 --- a/tests/integrationtest/t/clustered_index.test +++ b/tests/integrationtest/t/clustered_index.test @@ -1,4 +1,3 @@ -set tidb_cost_model_version=1; set @@tidb_enable_outer_join_reorder=true; drop database if exists with_cluster_index; create database with_cluster_index; @@ -7,27 +6,15 @@ create database wout_cluster_index; use with_cluster_index; create table tbl_0 ( col_0 decimal not null , col_1 blob(207) , col_2 text , col_3 datetime default '1986-07-01' , col_4 bigint unsigned default 1504335725690712365 , primary key idx_0 ( col_3,col_2(1),col_1(6) ) clustered, key idx_1 ( col_3 ), unique key idx_2 ( col_3 ) , unique key idx_3 ( col_0 ) , key idx_4 ( col_1(1),col_2(1) ) , key idx_5 ( col_2(1) ) ) ; -create table tbl_1 ( col_5 char(135) , col_6 bit(17) default 50609 not null , col_7 char(202) default 'IoQWYoGdbbgBDlxpDHQ' , col_8 char(213) , col_9 time not null , primary key idx_6 ( col_6 ) clustered, unique key idx_7 ( col_5 ) ) ; create table tbl_2 ( col_10 datetime default '1976-05-11' , col_11 datetime , col_12 float , col_13 double(56,29) default 18.0118 , col_14 char not null , primary key idx_8 ( col_14,col_13,col_10 ) clustered, key idx_9 ( col_11 ) ) ; -create table tbl_3 ( col_15 tinyint default -91 not null , col_16 bit(61) default 990141831018971350 not null , col_17 double(244,22) default 3985 not null , col_18 binary(32) default 'kxMlWqvpxXNBlxoU' , col_19 text(401) , primary key idx_10 ( col_18,col_19(4) ) clustered, key idx_11 ( col_17,col_18,col_19(2),col_15,col_16 ) , unique key idx_12 ( col_17 ) ) ; -create table tbl_4 ( col_20 double(230,16) default 8.49 not null , col_21 int unsigned not null , col_22 enum('Alice','Bob','Charlie','David') not null , col_23 float default 3066.13040283622 , col_24 datetime default '1980-10-27' not null , primary key idx_13 ( col_22,col_24 ) clustered, key idx_14 ( col_23,col_20 ) , key idx_15 ( col_24 ) , key idx_16 ( col_20 ) , unique key idx_17 ( col_24 ) , key idx_18 ( col_21 ) ) ; load stats 's/with_cluster_index_tbl_0.json'; -load stats 's/with_cluster_index_tbl_1.json'; load stats 's/with_cluster_index_tbl_2.json'; -load stats 's/with_cluster_index_tbl_3.json'; -load stats 's/with_cluster_index_tbl_4.json'; use wout_cluster_index; create table tbl_0 ( col_0 decimal not null , col_1 blob(207) , col_2 text , col_3 datetime default '1986-07-01' , col_4 bigint unsigned default 1504335725690712365 , primary key idx_0 ( col_3,col_2(1),col_1(6) ) nonclustered, key idx_1 ( col_3 ) , unique key idx_2 ( col_3 ) , unique key idx_3 ( col_0 ) , key idx_4 ( col_1(1),col_2(1) ) , key idx_5 ( col_2(1) ) ) ; -create table tbl_1 ( col_5 char(135) , col_6 bit(17) default 50609 not null , col_7 char(202) default 'IoQWYoGdbbgBDlxpDHQ' , col_8 char(213) , col_9 time not null , primary key idx_6 ( col_6 ) nonclustered, unique key idx_7 ( col_5 ) ) ; create table tbl_2 ( col_10 datetime default '1976-05-11' , col_11 datetime , col_12 float , col_13 double(56,29) default 18.0118 , col_14 char not null , primary key idx_8 ( col_14,col_13,col_10 ) nonclustered, key idx_9 ( col_11 ) ) ; -create table tbl_3 ( col_15 tinyint default -91 not null , col_16 bit(61) default 990141831018971350 not null , col_17 double(244,22) default 3985 not null , col_18 binary(32) default 'kxMlWqvpxXNBlxoU' , col_19 text(401) , primary key idx_10 ( col_18,col_19(4) ) nonclustered, key idx_11 ( col_17,col_18,col_19(2),col_15,col_16 ) , unique key idx_12 ( col_17 ) ) ; -create table tbl_4 ( col_20 double(230,16) default 8.49 not null , col_21 int unsigned not null , col_22 enum('Alice','Bob','Charlie','David') not null , col_23 float default 3066.13040283622 , col_24 datetime default '1980-10-27' not null , primary key idx_13 ( col_22,col_24 ) nonclustered, key idx_14 ( col_23,col_20 ) , key idx_15 ( col_24 ) , key idx_16 ( col_20 ) , unique key idx_17 ( col_24 ) , key idx_18 ( col_21 ) ) ; load stats 's/wout_cluster_index_tbl_0.json'; -load stats 's/wout_cluster_index_tbl_1.json'; load stats 's/wout_cluster_index_tbl_2.json'; -load stats 's/wout_cluster_index_tbl_3.json'; -load stats 's/wout_cluster_index_tbl_4.json'; explain select count(*) from with_cluster_index.tbl_0 where col_0 < 5429 ; explain select count(*) from wout_cluster_index.tbl_0 where col_0 < 5429 ; diff --git a/tests/integrationtest/t/ddl/db_partition.test b/tests/integrationtest/t/ddl/db_partition.test index 9e520d9e30eeb..ee1d6ac3e4824 100644 --- a/tests/integrationtest/t/ddl/db_partition.test +++ b/tests/integrationtest/t/ddl/db_partition.test @@ -2172,6 +2172,10 @@ create table pt15 (id int not null, unique index uk_id (id)) partition by hash(i create table nt15 (id int not null, index uk_id (id)); -- error 1736 alter table pt15 exchange partition p0 with table nt15; +create table pt15b (id int not null, a int, unique index uk_id (a) global) partition by hash(id) partitions 1; +create table nt15b (id int not null, a int, unique index uk_id (a)); +-- error 1731 +alter table pt15b exchange partition p0 with table nt15b; --echo ## auto_increment create table pt16 (id int not null primary key auto_increment) partition by hash(id) partitions 1; @@ -2271,7 +2275,7 @@ create temporary table nt34 (id int); alter table pt34 exchange partition p0 with table nt34; --echo ## global index -create table pt35 (a int, b int, unique index(b)) partition by hash(a) partitions 1; +create table pt35 (a int, b int, unique index(b) global) partition by hash(a) partitions 1; create table nt35 (a int, b int, unique index(b)); -- error 1731 alter table pt35 exchange partition p0 with table nt35; diff --git a/tests/integrationtest/t/ddl/integration.test b/tests/integrationtest/t/ddl/integration.test index 9eaafe9b22670..28c2a06d60b7c 100644 --- a/tests/integrationtest/t/ddl/integration.test +++ b/tests/integrationtest/t/ddl/integration.test @@ -89,21 +89,21 @@ drop table if exists t2; create table t2(a int not null, b int, primary key(a) nonclustered, unique idx_b(b)); drop table if exists t3; set tidb_enable_global_index=1; -create table t3(a int not null, b int, primary key(a) nonclustered, unique idx_b(b)) partition by hash(a) partitions 3; +create table t3(a int not null, b int, primary key(a) nonclustered, unique idx_b(b) global) partition by hash(a) partitions 3; drop table if exists t4; create table t4(a int not null, b int, primary key(a)) partition by hash(a) partitions 3; -alter table t partition by hash(a) partitions 3; +alter table t partition by hash(a) partitions 3 update indexes (idx_b global); alter table t remove partitioning; -alter table t partition by key() partitions 3; +alter table t partition by key() partitions 3 update indexes (idx_b global); alter table t remove partitioning; ---error 1503 -alter table t partition by hash(b) partitions 3; -alter table t2 partition by hash(b) partitions 3; +-- error 1503 +alter table t partition by hash(b) partitions 3 update indexes (`primary` global); +alter table t2 partition by hash(b) partitions 3 update indexes (`primary` global); alter table t2 remove partitioning; alter table t3 partition by key(a) partitions 3; alter table t3 remove partitioning; ---error 1503 -alter table t4 partition by hash(b) partitions 3; +-- error 1503 +alter table t4 partition by hash(b) partitions 3 update indexes(`primary` global, idx_b local); set tidb_enable_global_index=0; -- error 1503 alter table t partition by hash(a) partitions 3; @@ -127,7 +127,7 @@ CREATE TABLE `members` ( `lname` varchar(255) DEFAULT NULL, `dob` date DEFAULT NULL, `data` json DEFAULT NULL, - UNIQUE KEY `ui` (`id`) + UNIQUE KEY `ui` (`id`) GLOBAL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin PARTITION BY RANGE (YEAR(`dob`)) (PARTITION `pBefore1950` VALUES LESS THAN (1950), diff --git a/tests/integrationtest/t/ddl/partition.test b/tests/integrationtest/t/ddl/partition.test index 49f259a62538f..9d3db3ee85f3f 100644 --- a/tests/integrationtest/t/ddl/partition.test +++ b/tests/integrationtest/t/ddl/partition.test @@ -184,3 +184,8 @@ create table t(a int, b datetime, c varchar(8)) PARTITION BY RANGE COLUMNS(`c`,` alter table t add partition (PARTITION `p20240521A` VALUES LESS THAN ('A','2024-05-21 00:00:00')); alter table t add partition (PARTITION `p20240521Z` VALUES LESS THAN ('Z','2024-05-21 00:00:00')); +# TestIntervalPartitionCreateTooManyPartitions +-- error 1499 +CREATE TABLE employees (id int unsigned NOT NULL) PARTITION BY RANGE (id) INTERVAL (1) FIRST PARTITION LESS THAN (1) LAST PARTITION LESS THAN (8193); +CREATE TABLE employees (id int unsigned NOT NULL) PARTITION BY RANGE (id) INTERVAL (1) FIRST PARTITION LESS THAN (1) LAST PARTITION LESS THAN (8192); + diff --git a/tests/integrationtest/t/executor/executor.test b/tests/integrationtest/t/executor/executor.test index de7ecf4bcf5dc..fdae1e87db9ff 100644 --- a/tests/integrationtest/t/executor/executor.test +++ b/tests/integrationtest/t/executor/executor.test @@ -2357,7 +2357,7 @@ drop table if exists t, t1; create table t(a int, b int, index idx(a)); create table t1(a int, c int, index idx(a)); set tidb_mem_quota_query=10; --- replace_regex /conn=[0-9]+/conn=/ +-- replace_regex /conn=[-0-9]+/conn=/ -- error 8175 select t.a, t1.a from t use index(idx), t1 use index(idx) where t.a = t1.a; set global tidb_mem_oom_action=default; @@ -2369,7 +2369,7 @@ create table t (a int primary key, b double); insert into t values (1,1); SET GLOBAL tidb_mem_oom_action='CANCEL'; set @@tidb_mem_quota_query=1; --- replace_regex /conn=[0-9]+/conn=/ +-- replace_regex /conn=[-0-9]+/conn=/ -- error 8175 select sum(b) from t group by a; @@ -2378,19 +2378,19 @@ drop table if exists t,t1; create table t (a bigint); create table t1 (a bigint); set @@tidb_mem_quota_query=200; --- replace_regex /conn=[0-9]+/conn=/ +-- replace_regex /conn=[-0-9]+/conn=/ -- error 8175 insert into t1 values (1),(2),(3),(4),(5); --- replace_regex /conn=[0-9]+/conn=/ +-- replace_regex /conn=[-0-9]+/conn=/ -- error 8175 replace into t1 values (1),(2),(3),(4),(5); set @@tidb_mem_quota_query=10000; insert into t1 values (1),(2),(3),(4),(5); set @@tidb_mem_quota_query=10; --- replace_regex /conn=[0-9]+/conn=/ +-- replace_regex /conn=[-0-9]+/conn=/ -- error 8175 insert into t select a from t1 order by a desc; --- replace_regex /conn=[0-9]+/conn=/ +-- replace_regex /conn=[-0-9]+/conn=/ -- error 8175 replace into t select a from t1 order by a desc; set @@tidb_mem_quota_query=10000; @@ -2398,7 +2398,7 @@ insert into t values (1),(2),(3),(4),(5); ## Set the memory quota to 244 to make this SQL panic during the DeleteExec ## instead of the TableReaderExec. set @@tidb_mem_quota_query=244; --- replace_regex /conn=[0-9]+/conn=/ +-- replace_regex /conn=[-0-9]+/conn=/ -- error 8175 delete from t; set @@tidb_mem_quota_query=10000; @@ -2406,7 +2406,7 @@ delete from t1; insert into t1 values(1); insert into t values (1),(2),(3),(4),(5); set @@tidb_mem_quota_query=244; --- replace_regex /conn=[0-9]+/conn=/ +-- replace_regex /conn=[-0-9]+/conn=/ -- error 8175 delete t, t1 from t join t1 on t.a = t1.a; set @@tidb_mem_quota_query=100000; @@ -2415,7 +2415,7 @@ insert into t values(1),(2),(3); ## set the memory to quota to make the SQL panic during UpdateExec instead ## of TableReader. set @@tidb_mem_quota_query=244; --- replace_regex /conn=[0-9]+/conn=/ +-- replace_regex /conn=[-0-9]+/conn=/ -- error 8175 update t set a = 4; @@ -2641,7 +2641,7 @@ create table t(a int, b int as(-a)); insert into t(a) values(1), (3), (7); SET GLOBAL tidb_mem_oom_action='CANCEL'; set @@tidb_mem_quota_query=1; ---replace_regex /conn=[0-9]+/conn=/ +--replace_regex /conn=[-0-9]+/conn=/ --error 8175 update t set t.a = t.a - 1 where t.a in (select a from t where a < 4); set @@tidb_mem_quota_query=1000000000; diff --git a/tests/integrationtest/t/executor/expand.test b/tests/integrationtest/t/executor/expand.test index 472ada799339c..4e25a1fc309bc 100644 --- a/tests/integrationtest/t/executor/expand.test +++ b/tests/integrationtest/t/executor/expand.test @@ -110,3 +110,163 @@ GROUP BY prod WITH ROLLUP; --sorted_result SELECT CONCAT(product,':',country_id), 1+1, SUM(profit)/COUNT(*) FROM t1 GROUP BY CONCAT(product,':',country_id) WITH ROLLUP; + +SET @saved_sql_mode = @@session.sql_mode; +SET SESSION sql_mode= ''; +--echo +--sorted_result +SELECT UPPER(product) AS prod, + SUM(profit)/COUNT(*) + FROM t1 GROUP BY prod WITH ROLLUP HAVING prod='COMPUTER' ; +SET SESSION sql_mode= @saved_sql_mode; + +--echo +--echo # Joins +--sorted_result +SELECT product, country , year, SUM(profit) FROM t1,t2 WHERE +t1.country_id=t2.country_id GROUP BY product, country, year WITH ROLLUP; + +--echo +--sorted_result +SELECT product, `SUM` FROM (SELECT product, SUM(profit) AS 'sum' FROM t1 + GROUP BY product WITH ROLLUP) AS tmp +WHERE product is null; + +--echo +--sorted_result +SELECT product FROM t1 WHERE EXISTS +(SELECT product, country_id , SUM(profit) FROM t1 AS t2 + WHERE t1.product=t2.product GROUP BY product, country_id WITH ROLLUP + HAVING SUM(profit) > 6000); + +--echo +--sorted_result +# The following does not return the expected answer, but this is a limitation +# in the implementation so we should just document it +SELECT product, country_id , year, SUM(profit) FROM t1 +GROUP BY product, country_id, year HAVING country_id is NULL; + +--echo +--sorted_result +SELECT CONCAT(':',product,':'), SUM(profit), AVG(profit) FROM t1 +GROUP BY product WITH ROLLUP; + +# +# Test bug with const tables +# +--echo +drop table t1,t2; +CREATE TABLE t1 (i int); +INSERT INTO t1 VALUES(100); +CREATE TABLE t2 (i int); +INSERT INTO t2 VALUES (100),(200); + +--echo +--sorted_result +SELECT i, COUNT(*) FROM t1 GROUP BY i WITH ROLLUP; + +--echo +--sorted_result +SELECT t1.i, t2.i, COUNT(*) FROM t1,t2 GROUP BY t1.i,t2.i WITH ROLLUP; + +#bug #4767: ROLLUP with LEFT JOIN +--echo +DROP TABLE t1,t2; +CREATE TABLE user_day( + user_id INT NOT NULL, + date DATE NOT NULL, + UNIQUE INDEX user_date (user_id, date) +); + +INSERT INTO user_day VALUES + (1, '2004-06-06' ), + (1, '2004-06-07' ), + (2, '2004-06-06' ); + +--echo +--sorted_result +SELECT + d.date AS day, + COUNT(d.user_id) as sample, + COUNT(next_day.user_id) AS not_cancelled + FROM user_day d + LEFT JOIN user_day next_day + ON next_day.user_id=d.user_id AND + next_day.date= DATE_ADD( d.date, interval 1 day ) + GROUP BY day; + +--echo +--sorted_result +SELECT + d.date AS day, + COUNT(d.user_id) as sample, + COUNT(next_day.user_id) AS not_cancelled + FROM user_day d + LEFT JOIN user_day next_day + ON next_day.user_id=d.user_id AND + next_day.date= DATE_ADD( d.date, interval 1 day ) + GROUP BY day + WITH ROLLUP; + +--echo +DROP TABLE user_day; + +# +# Tests for bugs #8616, #8615: distinct sum with rollup +# + +CREATE TABLE t1 (a int, b int); + +INSERT INTO t1 VALUES + (1,4), + (2,2), (2,2), + (4,1), (4,1), (4,1), (4,1), + (2,1), (2,1); + +--echo +--sorted_result +SELECT SUM(b) FROM t1 GROUP BY a WITH ROLLUP; +--echo +--sorted_result +SELECT DISTINCT SUM(b) FROM t1 GROUP BY a WITH ROLLUP; +--echo +--sorted_result +SELECT SUM(b), COUNT(DISTINCT b) FROM t1 GROUP BY a WITH ROLLUP; +--echo +--sorted_result +SELECT DISTINCT SUM(b), COUNT(DISTINCT b) FROM t1 GROUP BY a WITH ROLLUP; +--echo +--sorted_result +SELECT SUM(b), COUNT(*) FROM t1 GROUP BY a WITH ROLLUP; +--echo +--sorted_result +SELECT DISTINCT SUM(b), COUNT(*) FROM t1 GROUP BY a WITH ROLLUP; +--echo +--sorted_result +SELECT SUM(b), COUNT(DISTINCT b), COUNT(*) FROM t1 GROUP BY a WITH ROLLUP; +--echo +--sorted_result +SELECT DISTINCT SUM(b), COUNT(DISTINCT b), COUNT(*) FROM t1 + GROUP BY a WITH ROLLUP; +--echo +--sorted_result +SELECT a, SUM(b) FROM t1 GROUP BY a,b WITH ROLLUP; +--echo +--sorted_result +SELECT DISTINCT a, SUM(b) FROM t1 GROUP BY a,b WITH ROLLUP; +--echo +--sorted_result +SELECT b, a, SUM(b) FROM t1 GROUP BY a,b WITH ROLLUP; +--echo +--sorted_result +SELECT DISTINCT b,a, SUM(b) FROM t1 GROUP BY a,b WITH ROLLUP; +--echo +ALTER TABLE t1 ADD COLUMN c INT; +--echo +--sorted_result +SELECT a,b,SUM(c) FROM t1 GROUP BY a,b,c WITH ROLLUP; +--echo +--sorted_result +SELECT distinct a,b,SUM(c) FROM t1 GROUP BY a,b,c WITH ROLLUP; + +DROP TABLE t1; diff --git a/tests/integrationtest/t/executor/foreign_key.test b/tests/integrationtest/t/executor/foreign_key.test index 39a48a709dd67..f618197621782 100644 --- a/tests/integrationtest/t/executor/foreign_key.test +++ b/tests/integrationtest/t/executor/foreign_key.test @@ -333,7 +333,7 @@ alter table t1 add foreign key (pid) references t1 (id) on update cascade; select sum(id) from t1; SET GLOBAL tidb_mem_oom_action='CANCEL'; set @@tidb_mem_quota_query=81920; --- replace_regex /conn=[0-9]+/conn=/ +-- replace_regex /conn=[-0-9]+/conn=/ -- error 8175 update t1 set id=id+100000 where id=1; select id,pid from t1 where id = 1; diff --git a/tests/integrationtest/t/executor/index_merge_reader.test b/tests/integrationtest/t/executor/index_merge_reader.test index d68f4a77a3dd3..b91ef7fe1f13d 100644 --- a/tests/integrationtest/t/executor/index_merge_reader.test +++ b/tests/integrationtest/t/executor/index_merge_reader.test @@ -281,7 +281,7 @@ insert into t1 values('TXwuGSfZfrgVbTksgvQBilqiUXlNEXzyXNqWRTCidzXFbrkpGFJalRMdV explain format='brief' select /*+ use_index_merge(t1, primary, idx1, idx2) */ c1 from t1 where c1 < 1024 and c2 < 1024; set global tidb_mem_oom_action='CANCEL'; set @@tidb_mem_quota_query = 4000; --- replace_regex /conn=[0-9]+/conn=/ +-- replace_regex /conn=[-0-9]+/conn=/ -- error 8175 select /*+ use_index_merge(t1, primary, idx1, idx2) */ c1 from t1 where c1 < 1024 and c2 < 1024; set global tidb_mem_oom_action = DEFAULT; diff --git a/tests/integrationtest/t/executor/infoschema_reader.test b/tests/integrationtest/t/executor/infoschema_reader.test index 8d934c2610c48..4e8498e7f0ca0 100644 --- a/tests/integrationtest/t/executor/infoschema_reader.test +++ b/tests/integrationtest/t/executor/infoschema_reader.test @@ -264,3 +264,46 @@ insert into t(a, b, c) values(1, 2, 'c'), (7, 3, 'd'), (12, 4, 'e'); analyze table t; select sleep(1); select table_rows, avg_row_length, data_length, index_length from information_schema.tables where table_name='t' AND TABLE_SCHEMA='executor__infoschema_reader'; + + +# Cover reading from tables: Indexes, Views, KeyColumnUsage, TableConstraints +drop table if exists test.t; +select * from information_schema.tidb_indexes where table_name = 't'; +--sorted_result +select * from information_schema.tidb_indexes where table_schema = 'executor__infoschema_reader'; +--sorted_result +select * from information_schema.tidb_indexes where table_schema = 'executor__infoschema_reader' and table_name = 't'; +--sorted_result +select * from information_schema.tidb_indexes where table_schema = 'executor__infoschema_reader' or table_name = 't'; +select * from information_schema.tidb_indexes where table_schema = 'executor__infoschema_reader' and column_name = 'c'; +select * from information_schema.tidb_indexes where table_schema = 'executor__infoschema_reader' and table_name = 'non_exist'; + +select * from information_schema.views where table_name = 'v1'; +select * from information_schema.views where table_name = 'non_exist'; +--sorted_result +select * from information_schema.views where table_schema = 'executor__infoschema_reader'; +select * from information_schema.views where table_schema = 'non_exist'; +select * from information_schema.views where table_schema = 'executor__infoschema_reader' and table_name = 'v1'; +--sorted_result +select * from information_schema.views where table_schema = 'executor__infoschema_reader' or table_name = 'v1'; + +select * from information_schema.key_column_usage where table_name = 't'; +--sorted_result +select * from information_schema.key_column_usage where table_schema = 'executor__infoschema_reader'; +select * from information_schema.key_column_usage where table_schema = 'executor__infoschema_reader' and table_name = 't'; +--sorted_result +select * from information_schema.key_column_usage where table_schema = 'executor__infoschema_reader' or table_name = 't'; +select * from information_schema.key_column_usage where table_schema = 'executor__infoschema_reader' and column_name = 'c'; +select * from information_schema.key_column_usage where table_schema = 'executor__infoschema_reader' and column_name = 'non_exist'; + +CREATE TABLE tc(a INT CHECK(a > 10) NOT ENFORCED, b INT, c INT, CONSTRAINT c1 CHECK (b > c)); +--sorted_result +select * from information_schema.table_constraints where table_name = 'tc'; +--sorted_result +select * from information_schema.table_constraints where table_schema = 'executor__infoschema_reader'; +select * from information_schema.table_constraints where table_schema = 'executor__infoschema_reader' and table_name = 'tc'; +--sorted_result +select * from information_schema.table_constraints where table_schema = 'executor__infoschema_reader' or table_name = 'tc'; +select * from information_schema.table_constraints where table_schema = 'executor__infoschema_reader' and table_name = 'non_exist'; +--sorted_result +select * from information_schema.table_constraints where table_schema = 'executor__infoschema_reader' and CONSTRAINT_NAME = 'c1'; diff --git a/tests/integrationtest/t/executor/issues.test b/tests/integrationtest/t/executor/issues.test index 99cf608589270..9475e23e5562f 100644 --- a/tests/integrationtest/t/executor/issues.test +++ b/tests/integrationtest/t/executor/issues.test @@ -628,7 +628,7 @@ CREATE TABLE `partsupp` ( `PS_PARTKEY` bigint(20) NOT NULL,`PS_SUPPKEY` bigint( CREATE TABLE `supplier` (`S_SUPPKEY` bigint(20) NOT NULL,`S_NAME` char(25) NOT NULL,`S_ADDRESS` varchar(40) NOT NULL,`S_NATIONKEY` bigint(20) NOT NULL,`S_PHONE` char(15) NOT NULL,`S_ACCTBAL` decimal(15,2) NOT NULL,`S_COMMENT` varchar(101) NOT NULL,PRIMARY KEY (`S_SUPPKEY`) /*T![clustered_index] CLUSTERED */) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; CREATE TABLE `nation` (`N_NATIONKEY` bigint(20) NOT NULL,`N_NAME` char(25) NOT NULL,`N_REGIONKEY` bigint(20) NOT NULL,`N_COMMENT` varchar(152) DEFAULT NULL,PRIMARY KEY (`N_NATIONKEY`) /*T![clustered_index] CLUSTERED */) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; set @@tidb_mem_quota_query=128; --- replace_regex /conn=[0-9]+/conn=/ +-- replace_regex /conn=[-0-9]+/conn=/ -- error 8175 explain select ps_partkey, sum(ps_supplycost * ps_availqty) as value from partsupp, supplier, nation where ps_suppkey = s_suppkey and s_nationkey = n_nationkey and n_name = 'MOZAMBIQUE' group by ps_partkey having sum(ps_supplycost * ps_availqty) > ( select sum(ps_supplycost * ps_availqty) * 0.0001000000 from partsupp, supplier, nation where ps_suppkey = s_suppkey and s_nationkey = n_nationkey and n_name = 'MOZAMBIQUE' ) order by value desc; SET GLOBAL tidb_mem_oom_action = DEFAULT; @@ -663,3 +663,106 @@ set @@tidb_max_chunk_size = default; # TestIssue52672 select tan(9021874879467600608071521900001091070693729763119983979); + + +# TestIssue54969 +# For order by query, the distsql concurrency should be @@tidb_distsql_scan_concurrency. +# For simple limit N query and N < 10000, the distsql concurrency should be 1 (normal table) +# For this case nn partition table, concurrency should be partition number. +drop table if exists t; +create table t (id int auto_increment, c char(120), primary key(id)); +create table pt (id int primary key auto_increment, val int) partition by range (id) +(PARTITION p1 VALUES LESS THAN (100), + PARTITION p2 VALUES LESS THAN (200), + PARTITION p3 VALUES LESS THAN (300), + PARTITION p4 VALUES LESS THAN (400), + PARTITION p5 VALUES LESS THAN (500), + PARTITION p6 VALUES LESS THAN (600), + PARTITION p7 VALUES LESS THAN (700)); +insert into t (c) values ('abc'), ('def'), ('ghi'), ('jkl'); +insert into t (c) select (c) from t; +insert into t (c) select (c) from t; +insert into t (c) select (c) from t; +insert into t (c) select (c) from t; +insert into t (c) select (c) from t; +insert into t (c) select (c) from t; +split table t between (0) and (40960) regions 30; +analyze table t; + +insert into pt (val) values (123),(456),(789),(1112); +insert into pt (val) select (val) from pt; +insert into pt (val) select (val) from pt; +insert into pt (val) select (val) from pt; +insert into pt (val) select (val) from pt; +insert into pt (val) select (val) from pt; +insert into pt (val) select (val) from pt; +split table pt between (0) and (40960) regions 30; +analyze table pt; + +set @@tidb_distsql_scan_concurrency = default; +-- replace_column 8 9 3 +-- replace_regex /.*max_distsql_concurrency: (?P[0-9]+).*/max_distsql_concurrency: $num/ /tikv_task:.*// /time:.*// /data:.*// +explain analyze select * from t order by id; # expected distsql concurrency 2 + +-- replace_column 8 9 3 +-- replace_regex /.*max_distsql_concurrency: (?P[0-9]+).*/max_distsql_concurrency: $num/ /tikv_task:.*// /time:.*// /data:.*// +explain analyze select * from t limit 100; # expected distsql concurrency 1 + +-- replace_column 8 9 3 +-- replace_regex /.*max_distsql_concurrency: (?P[0-9]+).*/max_distsql_concurrency: $num/ /tikv_task:.*// /time:.*// /data:.*// +explain analyze select * from t limit 100000; # expected distsql concurrency 15 + +-- replace_column 8 9 3 +-- replace_regex /.*max_distsql_concurrency: (?P[0-9]+).*/max_distsql_concurrency: $num/ /tikv_task:.*// /time:.*// /data:.*// +explain analyze select * from t where c = 'abc' limit 100; # expected distsql concurrency 15 + +-- replace_column 8 9 3 +-- replace_regex /.*max_distsql_concurrency: (?P[0-9]+).*/max_distsql_concurrency: $num/ /tikv_task:.*// /time:.*// /data:.*// +explain analyze select * from t where c = 'abc' limit 100000; # expected distsql concurrency 15 + +-- replace_column 8 9 3 +-- replace_regex /.*max_distsql_concurrency: (?P[0-9]+).*/max_distsql_concurrency: $num/ /tikv_task:.*// /time:.*// /data:.*// +explain analyze select * from t order by id limit 100; # expected distsql concurrency 1 + +-- replace_column 8 9 3 +-- replace_regex /.*max_distsql_concurrency: (?P[0-9]+).*/max_distsql_concurrency: $num/ /tikv_task:.*// /time:.*// /data:.*// +explain analyze select * from t order by id limit 100000; # expected distsql concurrency 15 + +-- replace_column 8 9 3 +-- replace_regex /.*max_distsql_concurrency: (?P[0-9]+).*/max_distsql_concurrency: $num/ /tikv_task:.*// /time:.*// /data:.*// +explain analyze select * from t where c = 'abd' order by id limit 100; +select @@tidb_partition_prune_mode; + +-- replace_column 8 9 3 +-- replace_regex /.*max_distsql_concurrency: (?P[0-9]+).*/max_distsql_concurrency: $num/ /tikv_task:.*// /time:.*// /data:.*// +explain analyze select * from pt order by id; # expected distsql concurrency 2 + +-- replace_column 8 9 3 +-- replace_regex /.*max_distsql_concurrency: (?P[0-9]+).*/max_distsql_concurrency: $num/ /tikv_task:.*// /time:.*// /data:.*// +explain analyze select * from pt limit 100; # expected distsql concurrency 7 + +-- replace_column 8 9 3 +-- replace_regex /.*max_distsql_concurrency: (?P[0-9]+).*/max_distsql_concurrency: $num/ /tikv_task:.*// /time:.*// /data:.*// +explain analyze select * from pt limit 100000; # expected distsql concurrency 15 + +-- replace_column 8 9 3 +-- replace_regex /.*max_distsql_concurrency: (?P[0-9]+).*/max_distsql_concurrency: $num/ /tikv_task:.*// /time:.*// /data:.*// +explain analyze select * from pt where val = 125 limit 100; # expected distsql concurrency 15 + +-- replace_column 8 9 3 +-- replace_regex /.*max_distsql_concurrency: (?P[0-9]+).*/max_distsql_concurrency: $num/ /tikv_task:.*// /time:.*// /data:.*// +explain analyze select * from pt where val = 125 limit 100000; # expected distsql concurrency 15 + +-- replace_column 8 9 3 +-- replace_regex /.*max_distsql_concurrency: (?P[0-9]+).*/max_distsql_concurrency: $num/ /tikv_task:.*// /time:.*// /data:.*// +explain analyze select * from pt order by id limit 100; # expected distsql concurrency 7, but currently get 1, see issue #55190 + +-- replace_column 8 9 3 +-- replace_regex /.*max_distsql_concurrency: (?P[0-9]+).*/max_distsql_concurrency: $num/ /tikv_task:.*// /time:.*// /data:.*// +explain analyze select * from pt order by id limit 100000; # expected distsql concurrency 15 + +-- replace_column 8 9 3 +-- replace_regex /.*max_distsql_concurrency: (?P[0-9]+).*/max_distsql_concurrency: $num/ /tikv_task:.*// /time:.*// /data:.*// +explain analyze select * from pt where val = 126 order by id limit 100; # expected distsql concurrency 15 + + diff --git a/tests/integrationtest/t/executor/jointest/join.test b/tests/integrationtest/t/executor/jointest/join.test index 0ad704551ea92..48efbc46ac70a 100644 --- a/tests/integrationtest/t/executor/jointest/join.test +++ b/tests/integrationtest/t/executor/jointest/join.test @@ -1071,7 +1071,7 @@ insert into t select * from t; insert into t select * from t; insert into t select * from t; insert into t select * from t; --- replace_regex /conn=[0-9]+/conn=/ +-- replace_regex /conn=[-0-9]+/conn=/ -- error 8175 desc analyze select * from t t1, t t2, t t3, t t4, t t5, t t6; diff --git a/tests/integrationtest/t/executor/show.test b/tests/integrationtest/t/executor/show.test index b490834323beb..a440272816513 100644 --- a/tests/integrationtest/t/executor/show.test +++ b/tests/integrationtest/t/executor/show.test @@ -174,6 +174,9 @@ create database test2; create table test1.t1 (id int key, b int, index(b)); create table test2.t2 (id int key, b int, foreign key fk(b) references test1.t1(id)); show create table test2.t2; +drop database if exists test1; +drop database if exists test2; + drop table if exists t; create table t(a int, b char(10) as ('a')); show create table t; diff --git a/tests/integrationtest/t/executor/window.test b/tests/integrationtest/t/executor/window.test index 1d55cf76ed36f..d7ca3999d437c 100644 --- a/tests/integrationtest/t/executor/window.test +++ b/tests/integrationtest/t/executor/window.test @@ -23,3 +23,538 @@ begin; delete from t_tir89b where t_tir89b.c_3pcik >= t_tir89b.c_sroc_c; select * from (select count(*) over (partition by ref_0.c_0b6nxb order by ref_0.c_3pcik) as c0 from t_tir89b as ref_0) as subq_0 where subq_0.c0 <> 1; commit; + +# TestIssue53600 +create table t_tjov ( +c_irfjyds3 int , +c_mzh text not null , +c_k4duc4l int , +c_tutmh1 double , +c_qk text , +c_kq8lwb tinyint not null unique , +primary key(c_irfjyds3) CLUSTERED) pre_split_regions=2; + +update t_tjov set + c_mzh = t_tjov.c_qk, + c_k4duc4l = abs( + cast(t_tjov.c_irfjyds3 as signed)), + c_qk = t_tjov.c_qk +where ((t_tjov.c_k4duc4l between round( + cast(t_tjov.c_irfjyds3 as signed)) and t_tjov.c_k4duc4l)) + or ((t_tjov.c_mzh not like '_kjf2')); + +insert into t_tjov (c_irfjyds3, c_mzh, c_k4duc4l, c_tutmh1, c_qk, c_kq8lwb) values + (-932054614, 'w37fcer', 153633688, 57.12, 'dlui', coalesce((NOT NOT(cast( (cast(74.85 as double) < cast(3076125 as signed)) as unsigned))), 40)), + (-1265832264, '_ob', 694248426, 32766.4, 'jute', coalesce(0<>0, -79)), + (1692830483, 'srvcmwp', 1682550193, 12.14, 'lbiakexz', coalesce(((NOT NOT(cast( (cast(-5614534075836329410 as signed) >= cast(cast(null as decimal) as decimal)) as unsigned)))) + or (((NOT NOT(cast( (cast(cast(null as char) as char) > cast(cast(null as char) as char)) as unsigned)))) + or ((1=1) + and (('y0avd3' like 'bprds%%')))), 102)), + (532891091, 'yre', -972462244, 49.4, 'mehsld7pb', coalesce((NOT NOT(cast( (cast(1659175363498062987 as signed) >= cast((NOT NOT(cast( (cast(53.10 as double) <> cast(cast(null as double) as double)) as unsigned))) as unsigned)) as unsigned))), 35)); + +create index t_xs_idx_1 on t_tjov (c_irfjyds3, c_k4duc4l, c_tutmh1, c_kq8lwb); + +create table t_db8a ( +c_t9 int not null , +c_d double unique , +c_jr2kq78hqt tinyint not null unique , +c_yh_3 int , +primary key(c_yh_3) CLUSTERED) pre_split_regions=7; + +insert into t_db8a (c_t9, c_d, c_jr2kq78hqt, c_yh_3) values + (580177243, 48.77, coalesce((NOT NOT(cast( (cast(null as decimal) = -3250316) as unsigned))), -2), -1034163307), + (-885427247, 9223372036854775806.8, coalesce((586563100 not in ( + cast(cast(null as signed) as signed), cast(null as signed), 1650864735, 1618044220, -1403578365)), -119), 1512435574), + (1090731830, 50.8, coalesce((NOT NOT(cast( (82.52 || cast(null as signed)) as unsigned))), -14), -252993503), + (312093140, 2147483649.9, coalesce((-1838213491 between 1542236936 and 1889086007), -97), 2059252966); + +update t_tjov set + c_irfjyds3 = case when (t_tjov.c_irfjyds3 between round( + cast(t_tjov.c_k4duc4l as signed)) and cast(nullif( + t_tjov.c_k4duc4l, + t_tjov.c_irfjyds3 + ) as signed)) then cast(nullif( + t_tjov.c_k4duc4l, + 484721586 + ) as signed) else t_tjov.c_irfjyds3 end + , + c_k4duc4l = t_tjov.c_k4duc4l, + c_tutmh1 = t_tjov.c_tutmh1, + c_qk = t_tjov.c_qk +where (NOT NOT(cast( (cast(-10747 as signed) >= cast(cast( (cast(t_tjov.c_tutmh1 as double) * cast(0<>0 as unsigned)) as double) as double)) as unsigned))); + +insert into t_tjov +select + abs( + cast(subq_0.c0 as signed)) as c0, + 'j2' as c1, + abs( + cast(subq_0.c0 as signed)) as c2, + 28.49 as c3, + 'omrwa' as c4, + ('ah' like 'm0u%k') as c5 + from + (select + is_ipv4( + cast('_zf8qf4qva' as char)) as c0 + from + t_db8a as ref_0 + where (((ref_0.c_d is NULL)) + or ((ref_0.c_yh_3 = ( + select + 271345048 as c0 + from + t_db8a as ref_1 + where (EXISTS ( + select + ref_2.c_jr2kq78hqt as c0, + ref_2.c_d as c1, + ref_1.c_yh_3 as c2 + from + t_db8a as ref_2 + where 0<>0 + order by c0, c1, c2 desc + limit 83)) + order by c0 desc + limit 1)))) + or (0<>0)) as subq_0 + where ((subq_0.c0 is NULL)) + and ((NOT NOT(cast( (cast(9223372036854775807.6 as double) || cast(subq_0.c0 as signed)) as unsigned)))); + +create index t_dcscox3_x_idx_1 on t_db8a (c_jr2kq78hqt); + +create table t_n ( +c_tf_us39fv int not null , +c_pf6z4p int , +c_v13rl double , +c_fr3uo int not null , +c_v double , +c_mm8jnf tinyint , +c__57bl_eu6 double , +primary key(c_fr3uo) CLUSTERED) pre_split_regions=4; + +delete from t_tjov +where +(NOT NOT(cast( (t_tjov.c_qk <> substring( + cast(substring( + cast(t_tjov.c_mzh as char), + cast(t_tjov.c_irfjyds3 as signed), + cast(abs( + cast(t_tjov.c_irfjyds3 as signed)) as signed)) as char), + cast(case when (NOT NOT(cast( (cast(t_tjov.c_k4duc4l as signed) XOR cast(t_tjov.c_tutmh1 as double)) as unsigned))) then cast(t_tjov.c_kq8lwb as signed) else cast(t_tjov.c_k4duc4l as signed) end + as signed), + cast((select c_jr2kq78hqt from t_db8a order by c_jr2kq78hqt limit 1 offset 2) + as signed))) as unsigned))); + +insert into t_tjov (c_irfjyds3, c_mzh, c_k4duc4l, c_tutmh1, c_qk, c_kq8lwb) values + (190638753, 'tasm', 1056083104, 99.13, 'dwu82uofj', coalesce((((cast(cast(null as signed) as signed) not in ( + cast(cast(null as signed) as signed)))) + and ((NOT NOT(cast( (cast(54.24 as double) < cast(cast(null as signed) as signed)) as unsigned))))) + or ((0<>0) + or ((NOT NOT(cast( (cast(-2837358340031519753 as signed) > cast(cast(null as decimal) as decimal)) as unsigned))))), -23)), + (-209345204, 'r', -1251857596, 2147483649.6, 'h7', coalesce(((NOT NOT(cast( (cast(98.7 as double) <> cast(254.7 as double)) as unsigned)))) + and ((-16183390 not in ( + -2121949782, 1195710096, cast(null as signed)))), 84)), + (219747276, 'rkd', cast(cast(null as signed) as signed), 52.100, 'hj26dzinn', coalesce((NOT NOT(cast( (cast(null as decimal) && cast(null as decimal)) as unsigned))), -77)), + (336534805, 'im8f9c', -84222469, 32767.1, 'x61p6f90', coalesce((806574107 between -1449873070 and cast(null as signed)), 46)); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (112390679, 1418345021, 76.70, -1191314671, 85.65, (NOT NOT(cast( (cast(4294967294.3 as double) || cast(2.64 as double)) as unsigned))), cast(null as double)), + (722265176, 1467506038, 4294967294.5, -891772058, 84.76, (NOT NOT(cast( (cast(cast(null as char) as char) <> cast(cast(null as char) as char)) as unsigned))), cast(null as double)), + (123668208, -680585440, 32767.9, 1054800957, 81.21, (NOT NOT(cast( ((NOT NOT(cast( (cast(83.65 as double) > cast(1=1 as unsigned)) as unsigned))) && 11.84) as unsigned))), cast(null as double)), + (-1802080206, 1085070136, 77.68, -969300417, 92.17, (-1935693142 is not NULL), 21.5); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-1848902104, 1294552399, 32767.9, 1135018897, 20.78, 1=1, 65535.2), + (-541529106, -218416925, 65.37, 2136058070, cast(null as double), (NOT NOT(cast( (22308 >= 1466486665) as unsigned))), 126.0), + (224595330, 1141952663, cast(null as double), 2079807215, 27.86, (-1342622966 between 1682242404 and -575575418), 32769.0), + (1490886431, 1194092900, 38.63, -817657823, 4294967297.8, (NOT NOT(cast( (cast(-1492692245 as signed) || cast(-17070 as signed)) as unsigned))), cast(null as double)); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-1959205612, cast(cast(null as signed) as signed), 18446744073709551614.8, -1232522545, 40.31, (NOT NOT(cast( (15.51 || -703391789) as unsigned))), 74.9), + (-1657104660, -1088940385, 127.3, -1601191179, cast(null as double), (NOT NOT(cast( (cast(-8613730477530125431 as signed) != cast((NOT NOT(cast( (cast(cast(null as char) as char) = cast(cast(null as char) as char)) as unsigned))) as unsigned)) as unsigned))), 33.30), + (1157817674, 1790829591, 127.5, -836814231, 18446744073709551616.9, (NOT NOT(cast( (cast(1=1 as unsigned) = cast(cast(null as double) as double)) as unsigned))), 27.89), + (-1476540312, 1335915749, 73.9, 371657190, 87.26, (NOT NOT(cast( (cast(cast(null as signed) as signed) < cast(100.37 as double)) as unsigned))), 96.38); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-1501397682, cast(cast(null as signed) as signed), 70.13, -1636783123, 9223372036854775809.8, 0<>0, 13.74), + (524931015, 46980517, 4294967296.2, -966321169, 58.44, (1742823349 in ( + 1295600076, 1177358812, 1239653717)), 4294967297.6), + (-1253049478, -997622599, 2147483648.3, 316816526, cast(null as double), (146566304 between -2010488977 and -603615163), 4294967295.0), + (-951699598, 1797233435, 43.52, 1001305632, 72.63, 0<>0, 11.23); + +insert into t_tjov (c_irfjyds3, c_mzh, c_k4duc4l, c_tutmh1, c_qk, c_kq8lwb) values + (706311080, 'jk1xfmi', -332724902, 41.72, cast(null as char), coalesce((NOT NOT(cast( (cast(-1837821939 as signed) <> cast(cast(null as decimal) as decimal)) as unsigned))), 71)), + (121748290, 'ux1', -1754931754, cast(null as double), 'pmz2m1wofz', coalesce((NOT NOT(cast( (cast('f' as char) <= cast(cast(null as char) as char)) as unsigned))), 10)), + (-1824411284, 'qv40o', 265031365, 4294967296.1, 'tc1zj', coalesce((NOT NOT(cast( (cast(null as decimal) < 3084179) as unsigned))), 56)), + (784077105, 'vt8gz39m_f', 976086031, 2147483648.3, 'cfygszhw19', coalesce(((NOT NOT(cast( (cast(621597153 as signed) < cast(cast(null as decimal) as decimal)) as unsigned)))) + and (0<>0), -116)); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-1657186756, -1943262988, 14.22, 1752671759, 9223372036854775806.1, (-951966731 between -570851320 and 293875873), 55.83), + (1702807616, -1354393768, cast(null as double), -1891852624, 129.9, (0<>0) + or ((cast(cast(null as signed) as signed) not in ( + cast(null as signed), 1680530723, -625157436, -1945095305, -2042337070))), 1.96), + (1648323837, -1418887915, cast(null as double), -1090179229, 18446744073709551614.8, 1=1, 96.14), + (-118753376, 513952801, 43.36, 45233259, 65.2, (cast(cast(null as signed) as signed) not in ( + cast(cast(null as signed) as signed), 1027482432, 1778975274, 1485416494)), cast(null as double)); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-1964881785, -737997688, cast(null as double), -458669186, 69.91, ((NOT NOT(cast( (cast(-419738499 as signed) || cast(-926450890 as signed)) as unsigned)))) + or ((0<>0) + and ((NOT NOT(cast( (cast(9223372036854775807.9 as double) || cast(1710020851 as signed)) as unsigned))))), 84.49), + (-7216598, 1625616878, 100.85, -359244111, cast(null as double), 1=1, 84.7), + (2141928022, 1516962202, 80.93, 457293938, 46.11, (-1817543858 not in ( + -399531202, 404645547)), 15.88), + (278360302, cast(cast(null as signed) as signed), 87.2, 966828001, 56.66, 1=1, 4294967296.5); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-2127956293, -2123598908, 28.75, -1438902812, 2147483646.5, ((NOT NOT(cast( (4294967297.6 || 254.8) as unsigned)))) + and ((-1780407389 is not NULL)), 89.65), + (1017031325, 1836402582, 18446744073709551616.3, -499024646, cast(null as double), (('_' like 'pl%fj52')) + and (1=1), 69.85), + (-330778188, -200250878, 61.39, 1668164734, 129.3, 1=1, 65537.7), + (-774073358, -50414215, 33.11, 1883285447, 91.25, 1=1, 32767.2); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-1901609213, -397181908, 65537.9, 1206280609, 95.28, 1=1, 33.88), + (-329680759, 686879299, 31.94, 1240086422, 68.21, ('u4gd_3wrm1' not like 'j5mw_tg%'), cast(null as double)), + (-830355043, 1105494945, 9223372036854775808.6, -96406182, 4.61, (0<>0) + or (('a_wab' not like 'r_0g_zo7y')), 9223372036854775809.0), + (1612591161, 1502804180, 50.7, -1838996452, 256.0, (-767840678 between 1718697067 and -1126133856), 9223372036854775807.4); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-536128527, 478467901, 90.67, 1319292384, 14.2, (NOT NOT(cast( (4294967297.5 <= 1639076078) as unsigned))), 18446744073709551614.4), + (-1718668286, 1286809343, 256.5, -867569210, 9223372036854775808.6, ('l9z2yif' not like 'r%'), 9223372036854775809.0), + (770418292, 1460242744, 49.63, 290800698, 85.91, ((-815201180 between 2069884989 and 729078369)) + or ((cast(cast(null as signed) as signed) in ( + cast(null as signed)))), 254.5), + (1830023926, 1693578846, cast(null as double), 229007735, 81.56, ((-386926913 is NULL)) + or ((-1810166476 not in ( + -1508096653, 335322583))), cast(null as double)); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-1777121846, -1686283305, 28.60, -1474706297, 256.7, (NOT NOT(cast( (cast(null as char) = cast(null as char)) as unsigned))), 4294967296.2), + (375686697, cast(cast(null as signed) as signed), 28.56, 1964967686, 19.81, (900611573 between -1229701638 and cast(null as signed)), 4294967296.2), + (1152784122, 406471045, 69.63, -1403845980, 70.22, (NOT NOT(cast( (cast(77.29 as double) != cast(18446744073709551616.8 as double)) as unsigned))), 69.7), + (1868709479, -157543758, 31.56, -131659988, cast(null as double), ((1=1) + or ((NOT NOT(cast( (cast(26.96 as double) = cast(-5758175 as signed)) as unsigned))))) + and (('wlv2' not like 'b25h_0pfg%')), 24.49); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-96786893, -901765033, 93.56, -951591253, 82.86, ((1711066375 is not NULL)) + or ((NOT NOT(cast( (cast(null as double) != -382453) as unsigned)))), 4294967297.7), + (1807932979, 87189742, 65536.4, -237765504, 88.75, 1=1, 58.43), + (712617285, -665142399, 11.40, -1647795301, 2147483649.2, ('bfskte4' not like '%hm2hnj'), 33.52), + (1722139040, -943742783, 254.0, -2092333256, 93.42, (-79948555 in ( + 1399937108, -189701760, 548532656)), 13.14); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-73721387, -811951597, 97.79, 1253657601, 18446744073709551614.4, (NOT NOT(cast( (cast((NOT NOT(cast( (cast(cast(null as char) as char) >= cast('ur9p592iv' as char)) as unsigned))) as unsigned) || cast(cast(null as decimal) as decimal)) as unsigned))), 38.48), + (-566163645, cast(cast(null as signed) as signed), 85.4, -549341830, 83.30, (-2028736036 not in ( + -1774928833, 1328799732, -2007387853)), 9223372036854775808.5), + (-423269318, 1419057699, 35.44, 1365255175, cast(null as double), (NOT NOT(cast( (-30674 <> 24.42) as unsigned))), 66.75), + (889363542, 252471764, 65.88, -1456313590, 46.74, (NOT NOT(cast( (cast(73.87 as double) XOR cast(cast(null as decimal) as decimal)) as unsigned))), 64.38); + +update t_tjov set + c_qk = t_tjov.c_qk +where (NOT NOT(cast( (cast(2639729924291429211 as signed) XOR cast(t_tjov.c_tutmh1 as double)) as unsigned))); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (202050913, -726605015, 255.2, 1804529354, 89.92, (109864579 in ( + 1699504108, 1823301414, 1666614637, cast(null as signed))), 39.44), + (-233439116, 534148198, 126.9, 1454711700, 12.22, ('xzkp3boqk' not like '_'), 12.36), + (940266790, 1041195633, 82.85, 1244674471, 44.61, (-735725205 between 1451527715 and -467319386), 7.68), + (-185738503, 592638241, 22.58, 1567818850, 72.41, (NOT NOT(cast( (cast(cast(null as signed) as signed) <> cast(cast(null as decimal) as decimal)) as unsigned))), 4294967295.2); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-1803191281, -144227139, 87.97, 957352707, 47.95, (1137303059 between 1933664261 and -1804384725), 2147483649.2), + (-775849790, -352812303, 4294967296.2, 225223865, 2147483648.100000, (0<>0) + and ((NOT NOT(cast( (cast(-4821602350037004045 as signed) <=> cast(cast(null as signed) as signed)) as unsigned)))), 10.86), + (1906971144, 988170817, 32769.1, -1032676254, 40.41, 1=1, cast(null as double)), + (2003344282, cast(cast(null as signed) as signed), cast(null as double), 193873491, 2.76, (NOT NOT(cast( (cast(-6473404898816589857 as signed) <=> cast(4294967295.8 as double)) as unsigned))), 97.42); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-1692803691, -458349128, 65.91, 1856171892, cast(null as double), ('g' not like '_5jh'), 47.25), + (775074025, 1861696041, 63.92, 1649823346, 2147483647.5, ((NOT NOT(cast( (cast('z' as char) <= cast(cast(null as char) as char)) as unsigned)))) + or ((NOT NOT(cast( (cast(cast(null as char) as char) <=> cast('w' as char)) as unsigned)))), 13.87), + (-573294454, 1941065015, 18446744073709551614.3, -103631690, 4294967294.5, ((-1573376596 in ( + 755343497, 173859321, 1174973060, 2105143454))) + or ((-1369457710 is NULL)), 53.1), + (1766281922, 545687435, 41.35, 315120407, 32768.4, (-736503640 is NULL), 79.6); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-1307584847, 1924839372, 16.40, 584632197, 33.78, (-806624327 between -1988787273 and -1632394547), 42.75), + (-241357849, -1081529769, 18446744073709551614.2, -1874010932, cast(null as double), (NOT NOT(cast( (cast(cast(null as signed) as signed) <= cast(1941439660 as signed)) as unsigned))), cast(null as double)), + (-478046437, -1692389519, cast(null as double), -815358404, 96.74, 0<>0, 65534.4), + (-1420504095, 1668081802, 13.5, 1240609196, 2147483648.9, (719070679 between 1756710448 and 1552046174), 1.87); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-1138029400, 1592536149, 128.3, -684187603, 255.6, (NOT NOT(cast( (cast('kwtgp0783' as char) = cast(cast(null as char) as char)) as unsigned))), 91.100), + (118700020, cast(cast(null as signed) as signed), 10.72, -904194428, cast(null as double), ((NOT NOT(cast( (cast(-5367067 as signed) = cast(30.70 as double)) as unsigned)))) + and ((1=1) + and (((NOT NOT(cast( (cast(cast(null as char) as char) > cast(cast(null as char) as char)) as unsigned)))) + and ((81621497 is not NULL)))), 4294967296.8), + (1512307580, cast(null as signed), 65537.1, 878459201, 9223372036854775807.4, (NOT NOT(cast( (cast(null as char) = cast(null as char)) as unsigned))), 257.6), + (1487518285, 929907204, 65537.0, 400194872, 4294967295.9, (cast(cast(null as signed) as signed) is NULL), 9223372036854775806.8); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-803817803, 1203423501, 4294967296.9, -814946591, 22.32, (NOT NOT(cast( (cast(cast(null as char) as char) = cast(cast(null as char) as char)) as unsigned))), 13.98), + (2058525552, 362533945, 84.57, 716979833, 15.72, (NOT NOT(cast( (cast('s' as char) = cast('l79m' as char)) as unsigned))), 86.54), + (-1031056066, 1554678457, 4.66, -1733696013, 35.77, (NOT NOT(cast( (cast(-555361694 as signed) > cast(-1180219339 as signed)) as unsigned))), cast(null as double)), + (108401268, 1018082273, 46.6, 2125596133, cast(null as double), (NOT NOT(cast( (cast(cast(null as double) as double) XOR cast(-3181196 as signed)) as unsigned))), cast(null as double)); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (1485273469, 137539087, 62.75, 2143902306, 50.23, (-1447358059 in ( + 1624080830, 1570987436, 1496364306, 1146812569, 994561233)), 4294967296.3), + (1471438314, 2015543479, 128.3, -1924337586, cast(null as double), 1=1, 59.85), + (912405565, -314069948, 2147483647.0, 2124191551, 32769.3, (950173842 is NULL), 71.19), + (-1949635883, 1151445603, 16.20, -1626375301, 44.88, (((NOT NOT(cast( (cast(cast(null as char) as char) < cast(cast(null as char) as char)) as unsigned)))) + or ((NOT NOT(cast( (cast(null as char) <> cast(null as char)) as unsigned))))) + or ((622370639 between -356532824 and -1414517943)), 4294967296.3); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (1190786766, 1632696882, cast(null as double), 1549903945, 9223372036854775809.8, (251471579 is not NULL), 21.57), + (-1407687295, 75720546, 2147483649.0, 1235746135, 54.23, (NOT NOT(cast( (cast(92.69 as double) <= cast(8.50 as double)) as unsigned))), 18446744073709551615.2), + (1003089517, -885341919, 39.44, -2117966830, 4294967294.1, (NOT NOT(cast( (cast(-6455799514409731514 as signed) <= cast(cast(null as double) as double)) as unsigned))), cast(null as double)), + (-1547030672, -980542284, 2147483648.5, 1067473087, 89.29, (-2107436461 is not NULL), 18.84); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-431005934, 968475532, 129.9, -485389668, 48.41, 0<>0, 2147483647.9), + (423089018, 1494781064, cast(null as double), -200859684, cast(null as double), (1745328374 is not NULL), cast(null as double)), + (-2024241046, -464180571, 50.20, 409892419, 52.43, (cast(cast(null as signed) as signed) not in ( + 57862433, -2005897203, 1291492411)), 40.51), + (798899278, 1498585125, 129.0, 749554956, 65536.1, (616145844 not in ( + -845336641, 2078985180)), 93.56); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (992287662, 1059794604, 80.76, 1857204820, 67.8, 0<>0, 257.6), + (-251617407, 727141066, 17.57, -1377655526, 4294967296.3, (NOT NOT(cast( (cast(1=1 as unsigned) >= cast(562416848 as signed)) as unsigned))), cast(null as double)), + (508687428, -403797095, 18446744073709551614.6, -1788324927, 257.3, (NOT NOT(cast( (cast((-1351018205 between -1433002086 and -339025014) as unsigned) >= cast(cast(null as decimal) as decimal)) as unsigned))), 82.33), + (646685, cast(cast(null as signed) as signed), 92.73, 1582712324, 64.1, 0<>0, 86.8); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (926041444, 754454753, 57.65, -1540605176, cast(null as double), (NOT NOT(cast( (cast(cast(null as decimal) as decimal) && cast(-8727486372912603787 as signed)) as unsigned))), cast(null as double)), + (-671501037, -1518858944, 4294967296.5, -479179165, 256.1, (((2063836087 not in ( + 2024517269, 841463459))) + and (0<>0)) + or (0<>0), cast(null as double)), + (-1958925741, 467095960, 77.85, 1554370390, 257.6, (-745989458 is NULL), 54.43), + (-1618290422, -161237102, 76.73, 538730362, 49.69, (NOT NOT(cast( (cast(-26949 as signed) <= cast(-19746 as signed)) as unsigned))), 18446744073709551615.7); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-1151099406, -1192802738, 4294967296.5, 1603456503, 60.29, (NOT NOT(cast( (cast(cast(null as signed) as signed) > cast(cast(null as double) as double)) as unsigned))), 65535.0), + (-214371658, 742855726, 61.16, 747648303, 13.91, (NOT NOT(cast( (cast(17532 as signed) XOR cast(-4832242 as signed)) as unsigned))), cast(null as double)), + (-1994399201, -2006592478, 39.70, -1065439627, 49.87, (1=1) + or ((NOT NOT(cast( (cast(2380367 as signed) <> cast(573778432 as signed)) as unsigned)))), 23.15), + (1747320149, -349629478, 19.100, -1058995736, cast(null as double), (NOT NOT(cast( (cast('_706' as char) = cast(cast(null as char) as char)) as unsigned))), 9223372036854775808.3); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-1918313801, -2089704247, 2147483648.7, 255098326, 95.19, 1=1, 87.28), + (1203077974, 2046007501, 99.34, 1943659813, 20.83, (NOT NOT(cast( (cast(cast(null as decimal) as decimal) >= cast(1599692914260222229 as signed)) as unsigned))), 32767.4), + (-1485389576, 970803212, 73.3, -14238819, 83.23, (2108803326 in ( + 1895013965, 1748692117, -97375564, -723055050)), 69.18), + (-1382241502, -1820760164, 14.66, 1317534679, cast(null as double), (cast(cast(null as signed) as signed) in ( + 1812842111, -869421286, -1502455336)), 9223372036854775809.5); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-184111223, 1821291922, cast(null as double), 1599748876, 18446744073709551617.9, 1=1, cast(null as double)), + (2074338509, 1925280049, 64.52, -1219834653, 85.26, (NOT NOT(cast( (cast(null as char) > 'fz44w') as unsigned))), 69.28), + (1870612334, 859376178, 78.3, 153528607, 53.92, (NOT NOT(cast( (cast(2646109 as signed) || cast(-2933195 as signed)) as unsigned))), 128.6), + (-1937972700, 989311399, 257.9, 484447030, 39.39, (cast(null as signed) between 784397685 and -231307066), cast(null as double)); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (1360259572, -1193211314, cast(null as double), 306282491, 18446744073709551614.5, (0<>0) + or (((NOT NOT(cast( (cast(1934455581 as signed) <> cast(cast(null as decimal) as decimal)) as unsigned)))) + or (((210206656 in ( + 1341478870, -1355349433, 855730336, -958106715, 1768692034))) + and ((NOT NOT(cast( (cast(cast(null as char) as char) < cast('xljv5m' as char)) as unsigned)))))), 257.8), + (1388420306, 1997451829, 71.33, 305958992, 65.37, (1019910313 is not NULL), 77.26), + (1921097515, 213099308, 15.70, -68578669, 18446744073709551615.8, (NOT NOT(cast( (cast(-10849 as signed) > cast(79.83 as double)) as unsigned))), 2147483648.8), + (-311822909, -1915402390, 15.82, 602552786, 126.0, 0<>0, cast(null as double)); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (1912362299, 1539217190, 257.7, 1377596346, 257.6, (1272584007 is not NULL), 65535.0), + (-231266252, -1384233676, 94.41, -171911705, 2147483646.3, (NOT NOT(cast( (cast('c6ppl' as char) <> cast('x6m7oe' as char)) as unsigned))), 18446744073709551617.3), + (2040343667, 1814736751, 2147483649.4, 429804432, 40.27, 1=1, 65537.6), + (-1614590979, -1091616644, 47.7, 1519983939, 13.95, (1354396355 between -173345040 and -1046479757), 257.5); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (227428089, -963365259, 9223372036854775807.4, -1573070160, 29.94, 0<>0, 56.26), + (154206117, -964074657, 1.45, -1164301348, 2147483648.6, 0<>0, 55.31), + (-938881422, 894674592, 2147483646.8, 1786063491, 32768.5, (-2021384728 is not NULL), 257.2), + (88248029, -1381239637, 64.95, 80796726, 18446744073709551616.0, ((cast(null as char) not like '_jdy%lu')) + or (1=1), 32.70); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (12928834, 764622174, 5.62, 1829244914, 257.6, (NOT NOT(cast( (cast(-10034 as signed) = cast(96.80 as double)) as unsigned))), 2147483649.5), + (1281945509, -1125929854, 2.51, 1435017323, cast(null as double), 0<>0, 2147483646.7), + (-1487950767, -1292299233, 53.51, -1663229572, 9.35, (517192622 not in ( + -1296905114, 648632902, 667921084, 552236416, -770371962)), cast(null as double)), + (1397966469, 2108407994, 255.6, -713119010, 32766.7, (NOT NOT(cast( (cast((785564098 between cast(cast(null as signed) as signed) and 957643081) as unsigned) <> cast(0<>0 as unsigned)) as unsigned))), 83.10); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (1718799977, 2039618993, 24.52, 1826405959, 18446744073709551615.7, (NOT NOT(cast( (cast(8691659948650356945 as signed) = cast(279903385 as signed)) as unsigned))), 75.90), + (160545244, cast(cast(null as signed) as signed), 98.48, -477173245, 32.7, ('g2cx0m4' like 'c5%7'), 58.95), + (871368593, 90338238, 65.91, -1704037569, 2147483647.3, 0<>0, 89.93), + (-1742670408, -976096734, 5.43, 1363396633, cast(null as double), (NOT NOT(cast( (cast(cast(null as char) as char) <=> cast(cast(null as char) as char)) as unsigned))), 18446744073709551616.8); + +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-1443324965, -189346859, 5.59, 220348359, 78.83, (NOT NOT(cast( (-809604812 <=> -1034915368) as unsigned))), 27.51), + (44279714, -299969275, cast(null as double), -223322456, 71.31, (-749252651 is NULL), 30.96), + (195102797, -991940610, 21.58, 1877463950, 65534.6, (cast(null as signed) between -1174842201 and 543317174), 24.70), + (124415710, -864531240, 18446744073709551615.1, -1028661742, 4294967295.9, (NOT NOT(cast( (cast(cast(null as signed) as signed) && cast(1687754935 as signed)) as unsigned))), 33.78); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (1718449061, -1190306201, 10.81, -1377922257, 34.100, (NOT NOT(cast( (cast(cast(null as double) as double) || cast(-1456734899910041136 as signed)) as unsigned))), 62.78), + (-1844942092, 1015472427, 34.76, 811648467, 52.17, ('v' not like 's%'), 58.33), + (630716357, 1661169794, 2147483646.8, 666979662, 21.4, ('s6jbue' like 'x8%h'), 257.1), + (-1326097991, 990110829, cast(null as double), 1960737437, cast(null as double), 0<>0, 36.57); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (123643811, cast(cast(null as signed) as signed), 65.79, -1515896132, 26.16, (NOT NOT(cast( (cast(95.88 as double) != cast(-8160878 as signed)) as unsigned))), 255.0), + (-122799308, 867292784, 43.60, 403697588, 47.31, (NOT NOT(cast( (cast((-1590896948 not in ( + -266988998, 1722291799, 1322781646, 483821136)) as unsigned) <= cast(65535.9 as double)) as unsigned))), 9223372036854775806.1), + (1911753212, 1858679439, cast(null as double), 349892938, 49.72, ((1807401979 is not NULL)) + and (1=1), 4294967297.9), + (-799718023, 1151350996, cast(null as double), -566130061, cast(null as double), (-721310308 between -1387950267 and -1160102077), 65.47); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-764899021, 1091828652, 65536.9, -1586455862, 81.86, (NOT NOT(cast( (cast((NOT NOT(cast( (cast(-3150499 as signed) <=> cast(-394351557 as signed)) as unsigned))) as unsigned) || cast(256.3 as double)) as unsigned))), 50.34), + (-1293220127, -1234577591, 73.31, -1677016656, 73.3, (NOT NOT(cast( (cast(null as decimal) > -1789669491678009127) as unsigned))), 95.4), + (-331901868, -373377677, 2147483649.4, -743975899, 256.3, (NOT NOT(cast( (cast((NOT NOT(cast( (cast((NOT NOT(cast( (cast(cast(null as signed) as signed) <=> cast(0<>0 as unsigned)) as unsigned))) as unsigned) != cast(33.94 as double)) as unsigned))) as unsigned) <=> cast(29.94 as double)) as unsigned))), 62.28), + (-67671879, cast(null as signed), 2147483648.8, -1562897951, 82.9, ('y35fdxzwe' not like 'vo5v5_c6y'), 89.54); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-1942921419, 1903526740, 127.0, -645732449, 2147483648.100000, (NOT NOT(cast( (2783581 = 1395540343) as unsigned))), 54.63), + (109043109, -1191419029, 3.97, 1616351368, 254.2, (NOT NOT(cast( (cast(-3035743648056475883 as signed) > cast(85.75 as double)) as unsigned))), 97.38), + (-1302914361, 1678405890, 32767.8, 650365517, 44.1, (NOT NOT(cast( (cast(7576859 as signed) != cast(cast(null as double) as double)) as unsigned))), 32.84), + (384048774, 658253263, 9223372036854775809.6, 452481433, 18446744073709551615.2, (1525759257 between -1220071225 and 612122169), 32769.9); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-2009585616, 1832837680, 4294967297.5, 1317012644, 257.1, ((1=1) + and ((NOT NOT(cast( (cast(-4226 as signed) <= cast(1549047655 as signed)) as unsigned))))) + or (0<>0), 74.5), + (-1598162774, -435385558, 64.7, -261911833, 78.57, (-485999493 is NULL), 9223372036854775806.4), + (26199260, -504486874, 65534.8, -2009904172, cast(null as double), (-950469723 is NULL), cast(null as double)), + (-1077157880, -1293002688, 32768.1, -1289304617, 65537.5, (941803969 is not NULL), 70.70); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (121261295, 1096610403, 53.9, 1866267938, 13.98, (-145490517 between 1380150985 and -623945704), 254.8), + (635322050, -451877649, 9223372036854775807.4, -901709050, 93.92, ((NOT NOT(cast( (cast(647081267 as signed) > cast(6020731258952772445 as signed)) as unsigned)))) + and (0<>0), 9223372036854775806.8), + (-1540855777, cast(cast(null as signed) as signed), 4294967295.0, 2089549971, 4.27, (NOT NOT(cast( (cast(cast(null as char) as char) != cast('dm1v9kk3' as char)) as unsigned))), 4294967297.9), + (1746881744, 2098885378, 65.44, 657390556, 18446744073709551615.9, (574017262 not in ( + -611172942, 570085205, 1261699169, 359083418, 1975631810)), cast(null as double)); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-1575399441, cast(cast(null as signed) as signed), 63.88, -1668644664, 4294967296.9, (NOT NOT(cast( (cast(null as char) = 'mbcowijswu') as unsigned))), 4294967294.8), + (1934799426, 621753174, 60.78, -1536499200, 100.62, ((-1474140624 between cast(null as signed) and 1781836510)) + and ((782897875 is NULL)), 65535.5), + (-1648514586, -491983480, 31.13, 1269837708, 21.34, 0<>0, 1.18), + (-400813924, -101697773, 86.70, 1078411031, 93.21, (NOT NOT(cast( (97916628641457097 > cast(null as signed)) as unsigned))), 5.31); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (1060429117, 545828902, cast(null as double), -577565958, 90.19, (0<>0) + or ((NOT NOT(cast( (cast(cast(null as decimal) as decimal) <> cast(18.45 as double)) as unsigned)))), 4294967294.6), + (84752722, 437374131, 52.74, -213111549, 2147483648.100000, (NOT NOT(cast( (cast((NOT NOT(cast( (cast(cast(null as char) as char) = cast(cast(null as char) as char)) as unsigned))) as unsigned) <=> cast(cast(null as decimal) as decimal)) as unsigned))), 75.63), + (1862049279, 529130544, cast(null as double), -1478082073, 14.17, ('x' not like '_s'), 45.56), + (89754754, -2088687627, 20.52, 754635346, 2147483647.0, (-1527660898 in ( + -1321475518, 913437396, 561689209, cast(cast(null as signed) as signed), -758111435)), 65536.2); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (1443936095, -1108581874, 51.47, -1030187893, cast(null as double), (1827286981 between cast(cast(null as signed) as signed) and cast(cast(null as signed) as signed)), 4294967297.6), + (-1640232650, 989305695, 22.35, 1342094910, 4294967296.1, 0<>0, 24.16), + (-806337317, 464874669, 60.34, 1216153528, cast(null as double), 1=1, 127.5), + (1903673312, -696878308, 53.95, -1798150767, 128.8, 1=1, 97.96); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (743630552, cast(cast(null as signed) as signed), 41.57, 1562519081, 39.43, (NOT NOT(cast( (cast(cast(null as signed) as signed) <> cast(cast(null as double) as double)) as unsigned))), 9223372036854775807.5), + (-1639782322, 788796564, cast(null as double), 1313648896, 18446744073709551615.9, 1=1, cast(null as double)), + (-2091932532, -887734411, 32768.5, 1470788629, 61.81, (NOT NOT(cast( (-4220384 <=> 93.10) as unsigned))), 34.49), + (527627838, 1431752816, 97.24, -488642566, 32769.9, (NOT NOT(cast( (cast((NOT NOT(cast( (cast(52.69 as double) <> cast(-7197142 as signed)) as unsigned))) as unsigned) < cast((-1850976467 is not NULL) as unsigned)) as unsigned))), 41.18); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (888496908, 23082498, 100.51, -368021933, 2147483648.100000, ((NOT NOT(cast( (cast(null as char) != cast(null as char)) as unsigned)))) + or ((NOT NOT(cast( (cast(50.2 as double) XOR cast(0<>0 as unsigned)) as unsigned)))), 83.25), + (685334825, 1888311361, 60.31, -1486005305, 75.7, 1=1, 61.53), + (70790283, 1485235718, 34.38, 863162657, 85.94, ('u4' like 'htgt_jm_u'), 18446744073709551617.3), + (461406346, -209958457, 13.1, -1660657339, cast(null as double), (((1958955125 between 1655276802 and -917698760)) + or ((0<>0) + and (1=1))) + and (1=1), 126.9); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-74144591, -1333057672, 99.57, 2079966560, 18446744073709551615.6, 0<>0, 8.76), + (1605888148, 1006868149, 49.70, 1987277091, cast(null as double), ('ewf00dg6' like '%d'), 65.81), + (-180138602, -1084470684, 257.4, 522780636, 13.49, 0<>0, 37.15), + (464769937, -1065569253, 72.33, -1341213089, 32768.1, (532537575 is not NULL), 255.6); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-2093842006, 1855524268, 65535.9, 607165498, cast(null as double), 0<>0, 93.69), + (878984644, 356586414, 59.81, 330243850, 4294967297.0, (-997393251 between cast(cast(null as signed) as signed) and 915327063), cast(null as double)), + (591887315, -1305442840, cast(null as double), 1318319911, 59.92, (((((1493426241 is not NULL)) + and (((1816286068 between cast(cast(null as signed) as signed) and -618199640)) + and ((-1036501641 in ( + 1398045688, -285769670, 1920125500, -1617424284, 130008360))))) + and ((NOT NOT(cast( (cast(89.85 as double) <= cast(-20980 as signed)) as unsigned))))) + and ((NOT NOT(cast( (cast(422821929 as signed) && cast(cast(null as decimal) as decimal)) as unsigned))))) + or (1=1), 3.50), + (-743324976, 1266511235, cast(null as double), -1795544518, 38.9, (NOT NOT(cast( (cast(null as double) > 4294967297.4) as unsigned))), 5.4); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (479084359, -304549960, 28.25, 2006643080, 29.35, (1=1) + or ((NOT NOT(cast( (cast(cast(null as double) as double) XOR cast(27.88 as double)) as unsigned)))), 64.6), + (2084750468, -417546511, 2147483648.6, -1687519456, 28.10, (NOT NOT(cast( (cast(-1863657748 as signed) && cast(85.54 as double)) as unsigned))), 257.4), + (742082846, cast(null as signed), 2147483648.8, 1678768507, 20.8, (('bobl9q' like 'r%ft')) + or ((NOT NOT(cast( (cast(3.90 as double) XOR cast(0<>0 as unsigned)) as unsigned)))), 18446744073709551617.7), + (876359199, 1219450090, 32766.6, 1903725608, 4294967295.0, (1989669317 in ( + -1985272252)), 54.79); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (1945403146, 1931546049, 44.16, 592372966, 29.95, 1=1, 127.0), + (938089746, cast(cast(null as signed) as signed), 65536.5, -232793978, 26.18, ('y4obshc3lg' like 'gkmq_47%_e'), cast(null as double)), + (529280007, 1240477841, 59.87, 1469314204, 93.44, (-946260498 between 688936592 and -1861828223), 18446744073709551615.3), + (-1863067392, -459618666, cast(null as double), -875893935, 53.7, (-202830405 in ( + 371439569, cast(null as signed), 1191836680, cast(cast(null as signed) as signed))), 53.47); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (196222497, -1434771425, cast(null as double), 477650882, 18446744073709551615.2, 0<>0, 49.26), + (-1967706463, -1725993508, 10.29, -1421995071, cast(null as double), (NOT NOT(cast( (cast(21.53 as double) <= cast(cast(null as decimal) as decimal)) as unsigned))), 70.19), + (320910438, -960540616, cast(null as double), 423269172, 2147483649.6, 0<>0, 72.22), + (792012220, 274535206, 32767.6, -1821582304, 127.3, (NOT NOT(cast( (cast(-8696166282483600167 as signed) > cast(5435876 as signed)) as unsigned))), 9.100); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-182915937, -1271071898, 45.61, 29161648, 32768.5, 0<>0, 4294967296.3), + (1098651005, 1384289945, cast(null as double), -1974965488, 38.92, (NOT NOT(cast( (cast(-8364 as signed) > cast(6272383290166472133 as signed)) as unsigned))), 2147483646.0), + (-956265760, 698381127, 65.34, -1812305473, 16.12, ((NOT NOT(cast( (cast(2.12 as double) = cast(-2028715724 as signed)) as unsigned)))) + or (((-221996409 is NULL)) + and ((-1513528484 between -1938521186 and -1973584618))), 58.50), + (42311240, 826110128, 40.69, -1558559007, 36.33, 0<>0, 32769.8); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-35968772, 977741241, 78.93, -1003087598, 32766.3, ((NOT NOT(cast( (cast(1481793016 as signed) = cast(cast(null as signed) as signed)) as unsigned)))) + and (0<>0), 20.52), + (2054604066, 243313996, 4294967294.2, -1144215732, 87.46, (NOT NOT(cast( ((NOT NOT(cast( (cast(-8905 as signed) <> cast(3.90 as double)) as unsigned))) = 37.32) as unsigned))), 78.62), + (-285314380, 1846619768, 18446744073709551616.9, -711086531, 22.39, (cast(cast(null as signed) as signed) not in ( + 122723593, -2101149290)), 129.8), + (-717648412, 1049674738, 9223372036854775809.8, 832839033, 9223372036854775809.0, (NOT NOT(cast( (cast(16164 as signed) <= cast(-876221 as signed)) as unsigned))), 2.44); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (249867644, 346336457, 17.74, 1601126266, 65537.9, (413595258 between cast(cast(null as signed) as signed) and -57605527), 127.8), + (-1571498583, -1458187285, 2147483648.100000, -394837749, 128.0, (NOT NOT(cast( (cast(55.70 as double) > cast(2072765100 as signed)) as unsigned))), 4294967296.6), + (71628432, 142545861, 13.82, 1506011334, cast(null as double), (-892550198 between 276592104 and 1156255734), 254.3), + (240843707, -360043520, cast(null as double), 1968304357, cast(null as double), ('edq' like 'mw%%ol'), 32768.8); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-243945718, 1767893978, 9223372036854775809.0, -627704665, 12.34, (NOT NOT(cast( (cast(null as char) <> cast(null as char)) as unsigned))), 61.80), + (54329340, 1577882927, 2147483647.6, -1495556917, 47.68, (cast(cast(null as signed) as signed) is not NULL), 59.78), + (-1783036065, 1868972559, 40.17, 1494835395, 96.87, 1=1, 66.52), + (-596050074, -705004751, 52.5, -1935846394, 65.12, (NOT NOT(cast( (cast((1819678558 is NULL) as unsigned) > cast(-298244956 as signed)) as unsigned))), 255.6); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (1577371525, cast(cast(null as signed) as signed), 255.0, 960164502, 2.57, ('wq9riws7l' like 'm_s'), 32766.4), + (-42826628, -934039402, 256.2, -1649513064, 50.32, (NOT NOT(cast( (cast(15997 as signed) <> cast(-345223499 as signed)) as unsigned))), 36.22), + (-1075109788, -1998961962, 29.98, 858739815, 129.2, (NOT NOT(cast( (cast(cast(null as char) as char) <> cast(cast(null as char) as char)) as unsigned))), 7.2), + (-175574897, -985496502, 69.70, 2040676550, 22.30, (NOT NOT(cast( (cast(-5096 as signed) XOR cast(('yp' like 'wx%1f') as unsigned)) as unsigned))), 9223372036854775809.0); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-1298173087, 1415054985, 70.18, -2127708504, 94.19, (NOT NOT(cast( (cast((NOT NOT(cast( ('mke' >= 'y9to9c2cqd') as unsigned))) as unsigned) < cast(1174522026688787663 as signed)) as unsigned))), 35.71), + (-432424485, -1947648254, cast(null as double), -1823955140, 67.99, (NOT NOT(cast( (cast(null as decimal) >= cast(null as signed)) as unsigned))), 5.22), + (-1411924254, 692974813, 65535.8, -984482506, 99.10, (NOT NOT(cast( (cast(null as double) != 37.28) as unsigned))), 3.24), + (-1450966821, 2091868372, cast(null as double), 2142289159, 26.1, 0<>0, 61.35); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (-890528460, -1565840720, 93.80, -391928446, 85.73, (((NOT NOT(cast( (cast(null as decimal) && (-2127363055 in ( + cast(null as signed), -1501501564, -447727069, 1161382083, -1615213659))) as unsigned)))) + and ((1=1) + or ((((-851853576 between -1418918613 and 611181520)) + or ((NOT NOT(cast( (cast(-2258617656466027229 as signed) <> cast(-729424338 as signed)) as unsigned))))) + and ((NOT NOT(cast( (cast(78.94 as double) < cast(41.52 as double)) as unsigned))))))) + or ((-756624972 is NULL)), 256.9), + (-1867285767, 2017325251, 93.16, -1548137915, 70.82, (NOT NOT(cast( (cast(4960443 as signed) > cast(671100674 as signed)) as unsigned))), 4294967295.5), + (1391557702, 1091143433, cast(null as double), 13816712, 29.95, (NOT NOT(cast( (cast(4066130327850566114 as signed) <> cast((1359107673 is not NULL) as unsigned)) as unsigned))), cast(null as double)), + (-521120810, 165548064, 9223372036854775808.4, -1893812499, 64.40, ('e' not like 'pik3_%'), 73.62); +insert into t_n (c_tf_us39fv, c_pf6z4p, c_v13rl, c_fr3uo, c_v, c_mm8jnf, c__57bl_eu6) values + (994077164, 1992568986, 84.25, 1255701141, 30.74, (1365814190 between 2000294788 and -1527327952), 39.30), + (468544671, 323039590, 74.83, -679847300, cast(null as double), (NOT NOT(cast( (cast('h' as char) <=> cast(cast(null as char) as char)) as unsigned))), 78.82), + (-969092588, -1447308137, 64.4, -910801889, cast(null as double), 0<>0, 2147483647.9), + (1922500440, -854043365, 97.30, -192800580, 254.5, 1=1, 44.93); +select 1 from t_tjov where ( select t_tjov.c_tutmh1 as c0 from ( select nth_value(t_n.c_tf_us39fv, 1) over (partition by t_db8a.c_jr2kq78hqt order by t_n.c_mm8jnf) as c5 from t_db8a join t_n ) as tbl limit 1 ); diff --git a/tests/integrationtest/t/globalindex/aggregate.test b/tests/integrationtest/t/globalindex/aggregate.test index 02887af51847b..ba45cec50e43c 100644 --- a/tests/integrationtest/t/globalindex/aggregate.test +++ b/tests/integrationtest/t/globalindex/aggregate.test @@ -1,7 +1,7 @@ set tidb_enable_global_index=true; drop table if exists p; -create table p (id int, c int, unique index idx(id)) partition by range (c) ( +create table p (id int, c int, unique index idx(id) global) partition by range (c) ( partition p0 values less than (4), partition p1 values less than (7), partition p2 values less than (10)); diff --git a/tests/integrationtest/t/globalindex/ddl.test b/tests/integrationtest/t/globalindex/ddl.test new file mode 100644 index 0000000000000..0c3f27aa3237f --- /dev/null +++ b/tests/integrationtest/t/globalindex/ddl.test @@ -0,0 +1,76 @@ +set tidb_enable_global_index=OFF; +-- error 8200 +create table t (a int, b int, unique index idx(a) global); +-- error 8200 +create table t (a int, b int, index idx(a) global); +-- error 1503 +create table t (a int, b int, unique index idx(a) global) partition by hash(b) partitions 3; +-- error 8200 +create table t (a int, b int, index idx(a) global) partition by hash(b) partitions 3; +-- error 1503 +create table t3(a int not null, b int, primary key(a) nonclustered, unique idx_b(b) global) partition by hash(a) partitions 3; +-- error 1503 +create table t (a int primary key nonclustered, b int) partition by hash(b) partitions 3; +create table t (a int, b int, unique key (a)) partition by hash(a) partitions 3; +-- error 1503 +alter table t partition by hash(b) partitions 3; +-- error 1503 +alter table t partition by hash(b) partitions 3 update indexes (a global); +-- error 8200 +alter table t add index idxErr (b) global; +-- error 1503 +alter table t add unique index idxErr (b) global; +-- error 8200 +create index idxErr on t (b) global; +-- error 1503 +create unique index idxErr on t (b) global; +alter table t remove partitioning; +-- error 8200 +alter table t add index idxErr (b) global; +-- error 8200 +alter table t add unique index idxErr (b) global; +-- error 8200 +create index idxErr on t (b) global; +-- error 8200 +create unique index idxErr on t (b) global; +drop table t; + +set tidb_enable_global_index=ON; +-- error 8200 +create table t (a int, b int, unique index idx(a) global); +-- error 8200 +create table t (a int, b int, index idx(a) global); +-- error 8200 +create table t (a int, b int, index idx(a) global) partition by hash(b) partitions 3; +create table t (a int not null, b int, primary key(a) nonclustered, unique idx_b(b) global) partition by hash(a) partitions 3; +drop table t; +-- error 1503 +create table t (a int key global, b int) partition by hash(b) partitions 3; +-- error 8264 +create table t (a int unique, b int) partition by hash(b) partitions 3; +-- error 8264 +create table t (a int unique key, b int) partition by hash(b) partitions 3; +-- error 8264 +create table t (a int primary key nonclustered, b int) partition by hash(b) partitions 3; +CREATE TABLE `t` ( + `a` int(11) NOT NULL, + `b` int(11) DEFAULT NULL, + PRIMARY KEY (`a`) /*T![clustered_index] NONCLUSTERED */ /*T![global_index] GLOBAL */ +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin +PARTITION BY HASH (`b`) PARTITIONS 3; +show create table t; +drop table t; +create table t (a int, b int, unique key (a)) partition by hash(a) partitions 3; +-- error 8264 +alter table t partition by hash(b) partitions 3; +alter table t partition by hash(b) partitions 3 UPDATE INDEXES (a GLOBAL); +-- error 8200 +alter table t add index idxErr (b) global; +alter table t add unique index idxOK (a) global; +-- error 8200 +alter table t add unique index idxErr (b) global; +-- error 8200 +create index idxErr on t (b) global; +create unique index idxOK2 on t (a) global; +-- error 8200 +create unique index idxErr on t (b) global; diff --git a/tests/integrationtest/t/globalindex/expression_index.test b/tests/integrationtest/t/globalindex/expression_index.test index f3560b2d904f3..87a3cbf12cfcd 100644 --- a/tests/integrationtest/t/globalindex/expression_index.test +++ b/tests/integrationtest/t/globalindex/expression_index.test @@ -4,7 +4,7 @@ drop table if exists t; CREATE TABLE `t` ( `a` int(11) DEFAULT NULL, `b` char(11) DEFAULT NULL, - UNIQUE KEY `idx` ((lower(`b`))) + UNIQUE KEY `idx` ((lower(`b`))) global ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin PARTITION BY HASH (`a`) PARTITIONS 5; diff --git a/tests/integrationtest/t/globalindex/index_join.test b/tests/integrationtest/t/globalindex/index_join.test index 042b05f355c88..cef37364e8618 100644 --- a/tests/integrationtest/t/globalindex/index_join.test +++ b/tests/integrationtest/t/globalindex/index_join.test @@ -2,7 +2,7 @@ set tidb_enable_global_index=true; --echo # Prepare data drop table if exists p; -create table p (id int, c int, unique index idx(id)) partition by range (c) ( +create table p (id int, c int, unique index idx(id) global) partition by range (c) ( partition p0 values less than (4), partition p1 values less than (7), partition p2 values less than (10)); @@ -31,7 +31,7 @@ select p.id from p partition(p1) inner join t on p.id = t.id; --echo # Prepare tables with clustered index drop table if exists p, t; -create table p (id int, c int, d int, e int, primary key(d, c) clustered, unique index idx(id)) partition by range (c) ( +create table p (id int, c int, d int, e int, primary key(d, c) clustered, unique index idx(id) global) partition by range (c) ( partition p0 values less than (4), partition p1 values less than (7), partition p2 values less than (10)); diff --git a/tests/integrationtest/t/globalindex/information_schema.test b/tests/integrationtest/t/globalindex/information_schema.test index 1f63a1e27458f..5495176351455 100644 --- a/tests/integrationtest/t/globalindex/information_schema.test +++ b/tests/integrationtest/t/globalindex/information_schema.test @@ -4,7 +4,7 @@ drop table if exists t; CREATE TABLE `t` ( `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, - UNIQUE KEY `idx1` (`b`), + UNIQUE KEY `idx1` (`b`) global, KEY `idx` (`b`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin PARTITION BY HASH (`a`) PARTITIONS 5; diff --git a/tests/integrationtest/t/globalindex/insert.test b/tests/integrationtest/t/globalindex/insert.test index e98da452ce65c..bb72642361a85 100644 --- a/tests/integrationtest/t/globalindex/insert.test +++ b/tests/integrationtest/t/globalindex/insert.test @@ -1,7 +1,7 @@ set tidb_enable_global_index = true; drop table if exists t; -create table t(a int, b int, unique index idx(a)) partition by hash(b) partitions 5; +create table t(a int, b int, unique index idx(a) global) partition by hash(b) partitions 5; insert into t values (1, 1), (1, 2) on duplicate key update a=1, b=3; select * from t use index (idx); diff --git a/tests/integrationtest/t/globalindex/mem_index_lookup.test b/tests/integrationtest/t/globalindex/mem_index_lookup.test index aa7fa31d60348..35a6c1190299e 100644 --- a/tests/integrationtest/t/globalindex/mem_index_lookup.test +++ b/tests/integrationtest/t/globalindex/mem_index_lookup.test @@ -5,7 +5,7 @@ drop table if exists t; CREATE TABLE `t` ( `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, - UNIQUE KEY `idx1` (`b`) + UNIQUE KEY `idx1` (`b`) GLOBAL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin PARTITION BY HASH (`a`) PARTITIONS 5; @@ -40,7 +40,7 @@ CREATE TABLE `t` ( `a` year(4) primary key clustered, `b` int(11) DEFAULT NULL, `c` int(11) DEFAULT NULL, - UNIQUE KEY `idx1` (`b`) + UNIQUE KEY `idx1` (`b`) GLOBAL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin PARTITION BY HASH (`a`) PARTITIONS 5; diff --git a/tests/integrationtest/t/globalindex/mem_index_merge.test b/tests/integrationtest/t/globalindex/mem_index_merge.test index f172d8f7bcd1e..e9757f56f72c9 100644 --- a/tests/integrationtest/t/globalindex/mem_index_merge.test +++ b/tests/integrationtest/t/globalindex/mem_index_merge.test @@ -6,7 +6,7 @@ CREATE TABLE `tpk2` ( `c` int(11) NOT NULL, `d` int(11) NOT NULL AUTO_INCREMENT, KEY `idx_bc` (`b`,`c`), - UNIQUE KEY `uidx_a` (`a`), + UNIQUE KEY `uidx_a` (`a`) GLOBAL, UNIQUE KEY `uidx_ac` (`a`, `c`), KEY `idx_c` (`c`) ) PARTITION BY HASH (`c`) PARTITIONS 5; @@ -54,8 +54,8 @@ CREATE TABLE `tpk2` ( `c` int(11) NOT NULL, `d` int(11) NOT NULL, KEY `idx_bc` (`b`,`c`), - UNIQUE KEY `uidx_a` (`a`), - UNIQUE KEY `uidx_ac` (`a`, `c`), + UNIQUE KEY `uidx_a` (`a`) GLOBAL, + UNIQUE KEY `uidx_ac` (`a`, `c`) GLOBAL, KEY `idx_c` (`c`), PRIMARY KEY(`d`, `c`) clustered ) PARTITION BY HASH (`d`) PARTITIONS 5; @@ -115,7 +115,7 @@ CREATE TABLE `tpk2` ( `c` int(11) NOT NULL, `d` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`b`), - UNIQUE KEY `uidx_a` (`a`) + UNIQUE KEY `uidx_a` (`a`) GLOBAL ) PARTITION BY HASH (`b`) PARTITIONS 5; insert into tpk2 values (1, 2, 1, 1), (3, 6, 3, 3); diff --git a/tests/integrationtest/t/globalindex/mem_index_reader.test b/tests/integrationtest/t/globalindex/mem_index_reader.test index 83080f8a8f2d7..348121f12798d 100644 --- a/tests/integrationtest/t/globalindex/mem_index_reader.test +++ b/tests/integrationtest/t/globalindex/mem_index_reader.test @@ -5,7 +5,7 @@ drop table if exists t; CREATE TABLE `t` ( `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, - UNIQUE KEY `idx1` (`b`) + UNIQUE KEY `idx1` (`b`) GLOBAL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin PARTITION BY HASH (`a`) PARTITIONS 5; @@ -35,7 +35,7 @@ drop table if exists t; CREATE TABLE `t` ( `a` year(4) primary key CLUSTERED, `b` int(11) DEFAULT NULL, - UNIQUE KEY `idx1` (`b`) + UNIQUE KEY `idx1` (`b`) GLOBAL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin PARTITION BY HASH (`a`) PARTITIONS 5; diff --git a/tests/integrationtest/t/globalindex/misc.test b/tests/integrationtest/t/globalindex/misc.test index 015385a3c5ea9..34e3e7a06a701 100644 --- a/tests/integrationtest/t/globalindex/misc.test +++ b/tests/integrationtest/t/globalindex/misc.test @@ -2,7 +2,7 @@ set tidb_enable_global_index=true; # TestCreatePartitionTableWithGlobalIndex drop table if exists test_global; -create table test_global ( a int, b int, c int, unique key p_b(b)) +create table test_global ( a int, b int, c int, unique key p_b(b) global) partition by range( a ) ( partition p1 values less than (10), partition p2 values less than (20) @@ -19,7 +19,7 @@ insert into test_global(a,c) values (11,2); drop table if exists test_global; -- error 1503 -create table test_global ( a int, b int, c int, primary key p_b(b) /*T![clustered_index] CLUSTERED */) +create table test_global ( a int, b int, c int, primary key p_b(b) /*T![clustered_index] CLUSTERED */ GLOBAL) partition by range( a ) ( partition p1 values less than (10), partition p2 values less than (20) @@ -27,14 +27,14 @@ partition by range( a ) ( drop table if exists test_global; -- error 1503 -create table test_global ( a int, b int, c int, primary key p_b_c(b, c) /*T![clustered_index] CLUSTERED */) +create table test_global ( a int, b int, c int, primary key p_b_c(b, c) /*T![clustered_index] CLUSTERED */ GLOBAL) partition by range( a ) ( partition p1 values less than (10), partition p2 values less than (20) ); drop table if exists test_global; -create table test_global ( a int, b int, c int, primary key (b) /*T![clustered_index] NONCLUSTERED */) +create table test_global ( a int, b int, c int, primary key (b) /*T![clustered_index] NONCLUSTERED */ GLOBAL) partition by range( a ) ( partition p1 values less than (10), partition p2 values less than (20) @@ -48,7 +48,7 @@ insert into test_global values (11,2,2); # TestIssue21732 drop table if exists p; -create table p (a int, b int GENERATED ALWAYS AS (3*a-2*a) VIRTUAL, unique index idx(a)) partition by hash(b) partitions 2; +create table p (a int, b int GENERATED ALWAYS AS (3*a-2*a) VIRTUAL, unique index idx(a) global) partition by hash(b) partitions 2; insert into p (a) values (1),(2),(3); analyze table p; --sorted_result @@ -61,7 +61,7 @@ CREATE TABLE test_t1 ( a int(11) NOT NULL, b int(11) DEFAULT NULL, c int(11) DEFAULT NULL, - unique index p_a(a) + unique index p_a(a) global ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin PARTITION BY RANGE (c) ( PARTITION p0 VALUES LESS THAN (10), @@ -81,7 +81,7 @@ select * from test_t1 where a = 1; ## Test generated column with global index drop table if exists t; ## Test for virtual generated column with global index -create table t (a varchar(10), b varchar(1) GENERATED ALWAYS AS (substr(a,1,1)) VIRTUAL, unique index (a)) partition by list columns(b) (partition p0 values in ('a','c'), partition p1 values in ('b','d')); +create table t (a varchar(10), b varchar(1) GENERATED ALWAYS AS (substr(a,1,1)) VIRTUAL, unique index (a) global) partition by list columns(b) (partition p0 values in ('a','c'), partition p1 values in ('b','d')); insert into t (a) values ('aaa'),('abc'),('acd'); analyze table t; select a from t partition (p0) order by a; @@ -104,7 +104,7 @@ explain format = 'brief' select a from t partition (p1) order by a; drop table if exists t; ## Test for stored generated column with global index -create table t (a varchar(10), b varchar(1) GENERATED ALWAYS AS (substr(a,1,1)) STORED, unique index (a)) partition by list columns(b) (partition p0 values in ('a','c'), partition p1 values in ('b','d')); +create table t (a varchar(10), b varchar(1) GENERATED ALWAYS AS (substr(a,1,1)) STORED, unique index (a) global) partition by list columns(b) (partition p0 values in ('a','c'), partition p1 values in ('b','d')); insert into t (a) values ('aaa'),('abc'),('acd'); analyze table t; select a from t partition (p0) order by a; @@ -125,3 +125,32 @@ select a from t partition (p1) order by a; --replace_regex /in\(_tidb_tid, [0-9]+\)/in(_tidb_tid, tid1)/ explain format = 'brief' select a from t partition (p1) order by a; +## Test syntax +drop table if exists t; +--error 8264 +create table t (a int, b int, unique key idx_b (b)) partition by hash (a) partitions 3; +--error 8264 +create table t (a int, b int, unique key idx_b (b) local) partition by hash (a) partitions 3; +create table t (a int, b int, unique key idx_b (b) global) partition by hash (a) partitions 3; +show create table t; +drop table t; +CREATE TABLE `t` ( + `a` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL, + UNIQUE KEY `idx_b` (`b`) /*T![global_index] GLOBAL */ +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin +PARTITION BY HASH (`a`) PARTITIONS 3; +show create table t; +--error 8200 +alter table t partition by key (b) partitions 3; +--error 8264 +alter table t partition by hash (a) partitions 3 update indexes (idx_b LOCAL); +alter table t partition by hash (a) partitions 3 update indexes (idx_b GLOBAL); +show create table t; +--error 8200 +alter table t partition by hash (b) partitions 3 update indexes(idx_b global); +alter table t partition by hash (b) partitions 3 update indexes(idx_b local); +show create table t; +alter table t partition by key (b) partitions 3; +show create table t; +drop table t; diff --git a/tests/integrationtest/t/globalindex/multi_valued_index.test b/tests/integrationtest/t/globalindex/multi_valued_index.test index b40dfed73da69..c38ce96d3906c 100644 --- a/tests/integrationtest/t/globalindex/multi_valued_index.test +++ b/tests/integrationtest/t/globalindex/multi_valued_index.test @@ -4,7 +4,7 @@ CREATE TABLE `customers` ( `name` char(10) DEFAULT NULL, `custinfo` json DEFAULT NULL, KEY idx(`id`), - UNIQUE KEY `zips` ((cast(json_extract(`custinfo`, _utf8'$.zipcode') as unsigned array))) + UNIQUE KEY `zips` ((cast(json_extract(`custinfo`, _utf8'$.zipcode') as unsigned array))) GLOBAL ) PARTITION BY HASH (`id`) PARTITIONS 5; INSERT INTO customers VALUES (1, 'pingcap', '{"zipcode": [1,2]}'); diff --git a/tests/integrationtest/t/globalindex/point_get.test b/tests/integrationtest/t/globalindex/point_get.test index b7b0b57189f56..4a3a4355ea995 100644 --- a/tests/integrationtest/t/globalindex/point_get.test +++ b/tests/integrationtest/t/globalindex/point_get.test @@ -3,7 +3,7 @@ set tidb_enable_global_index=true; drop table if exists pt; --echo # Non-clustered index table -create table pt (a int, b int, c int, d int default 0, primary key (a, b) nonclustered, unique key uidx(c)) +create table pt (a int, b int, c int, d int default 0, primary key (a, b) nonclustered, unique key uidx(c) global) partition by range(a) ( PARTITION p0 VALUES LESS THAN (3), PARTITION p1 VALUES LESS THAN (6), @@ -28,7 +28,7 @@ select * from pt where c in (1,2,3); drop table if exists pt; --echo # Clustered index table -create table pt (a int, b int, c int, d int default 0, primary key (a, b) clustered, unique key uidx(c)) +create table pt (a int, b int, c int, d int default 0, primary key (a, b) clustered, unique key uidx(c) global) partition by range(a) ( PARTITION p0 VALUES LESS THAN (3), PARTITION p1 VALUES LESS THAN (6), diff --git a/tests/integrationtest/t/globalindex/update.test b/tests/integrationtest/t/globalindex/update.test index ccc14ffdd9b59..a0cc0d158e12a 100644 --- a/tests/integrationtest/t/globalindex/update.test +++ b/tests/integrationtest/t/globalindex/update.test @@ -5,7 +5,7 @@ CREATE TABLE `t` ( `b` int(11) DEFAULT NULL, `c` int(11) DEFAULT NULL, PRIMARY KEY (`a`) /*T![clustered_index] CLUSTERED */, - UNIQUE KEY `idx1` (`b`) + UNIQUE KEY `idx1` (`b`) GLOBAL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin PARTITION BY HASH (`a`) PARTITIONS 5; @@ -16,7 +16,7 @@ insert into t values (2, 2, 3); rollback; drop table if exists t; -create table t ( a int, b int, c int, unique key idx(b)) +create table t ( a int, b int, c int, unique key idx(b) global) partition by range( a ) ( partition p1 values less than (10), partition p2 values less than (20), @@ -36,7 +36,7 @@ select * from t use index(idx) order by a; # https://github.com/pingcap/tidb/issues/53750 drop table t; -create table t(a varchar(70), b mediumint(9), unique index idx_a(a), unique index idx_b(b)) partition by key(b) partitions 5; +create table t(a varchar(70), b mediumint(9), unique index idx_a(a) global, unique index idx_b(b)) partition by key(b) partitions 5; insert into t values ('',826534 ); replace into t values ('',826536 ); select * from t; diff --git a/tests/integrationtest/t/infoschema/infoschema.test b/tests/integrationtest/t/infoschema/infoschema.test index faad9b5573054..fe8d1cd50a099 100644 --- a/tests/integrationtest/t/infoschema/infoschema.test +++ b/tests/integrationtest/t/infoschema/infoschema.test @@ -33,6 +33,7 @@ desc format='brief' SELECT count(*) FROM information_schema.TABLES WHERE TABLE_S SELECT count(*) FROM information_schema.TABLES WHERE TABLE_NAME in ('t1', 't2') and TABLE_SCHEMA = 'mysql'; SELECT count(*) FROM information_schema.TABLES WHERE (TABLE_NAME = 't1' or TABLE_NAME = 't2') and TABLE_SCHEMA = 'mysql'; drop table mysql.t1, mysql.t2, mysql.t3; +drop table test.t1; # TestTablesColumn create table infoschema__infoschema.t4(a int, INDEX i1 (a)); @@ -57,4 +58,190 @@ explain select engine, DATA_LENGTH from information_schema.tables where (table_n select engine, DATA_LENGTH from information_schema.tables where (table_name ='t4' or table_name = 't5') and table_schema = 'infoschema__infoschema'; explain select engine, DATA_LENGTH from information_schema.tables where table_name ='t4' and upper(table_name) ='T4' and table_schema = 'infoschema__infoschema'; select engine, DATA_LENGTH from information_schema.tables where table_name ='t4' and upper(table_name) ='T4' and table_schema = 'infoschema__infoschema'; +drop table infoschema__infoschema.t4; +drop table infoschema__infoschema.t5; +# TestPartitionsColumn +create table pt1(a int primary key, b int) partition by hash(a) partitions 4; +create table pt2(a int primary key, b int) partition by hash(a) partitions 4; +-- sorted_result +select TABLE_NAME, PARTITION_NAME from information_schema.partitions where table_schema = 'infoschema__infoschema'; +-- sorted_result +select TABLE_NAME, PARTITION_NAME from information_schema.partitions where table_name = 'pt1' and table_schema = 'infoschema__infoschema'; +-- sorted_result +select TABLE_NAME, PARTITION_NAME from information_schema.partitions where table_name = 'pt2' and table_schema = 'infoschema__infoschema'; +-- sorted_result +select TABLE_NAME, PARTITION_NAME from information_schema.partitions where table_name = 'pt0' and table_schema = 'infoschema__infoschema'; +drop table pt1; +drop table pt2; + +# TestIndexesAndConstraintColumns +create database test1; +create database test2; +create table test1.t1(a int, b int, index idx(b)); +create table test2.t2(a int, b int, index idx(a)); +select TABLE_SCHEMA, TABLE_NAME, KEY_NAME from information_schema.tidb_indexes where table_schema = 'test1'; +select TABLE_SCHEMA, TABLE_NAME, KEY_NAME from information_schema.tidb_indexes where table_schema = 'test1' and table_name = 't1'; +select TABLE_SCHEMA, TABLE_NAME, KEY_NAME from information_schema.tidb_indexes where table_schema = 'test1' and table_name = 't2'; +select TABLE_SCHEMA, TABLE_NAME, KEY_NAME from information_schema.tidb_indexes where table_name = 't2'; +drop table test1.t1, test2.t2; + +set global tidb_enable_check_constraint = true; +create table test1.t1 (a int check(a > 10) not enforced, b int, constraint c1 check (a < b)); +create table test2.t2 (a int check(a < 10), b int, constraint c2 check (a = b)); +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.check_constraints; +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.check_constraints where constraint_schema = 'test1'; +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.check_constraints where constraint_schema = 'test2'; +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.check_constraints where constraint_schema = 'test2' and constraint_name = 'c2'; +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.check_constraints where constraint_schema = 'test2' and constraint_name = 'c1'; +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.check_constraints; +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.tidb_check_constraints; +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.tidb_check_constraints where constraint_schema = 'test1'; +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.tidb_check_constraints where constraint_schema = 'test2' and table_name = 't2'; +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.tidb_check_constraints where constraint_schema = 'test1' and table_name = 't1' and constraint_name = 'c1'; +drop table test1.t1, test2.t2; + +CREATE TABLE test1.t11 (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (id)); +CREATE TABLE test1.t12 ( + id INT NOT NULL AUTO_INCREMENT, + name varchar(255) NOT NULL, + parent_id INT DEFAULT NULL, + PRIMARY KEY (id), + CONSTRAINT fk_parent FOREIGN KEY (parent_id) REFERENCES test1.t11 (id) ON UPDATE CASCADE ON DELETE RESTRICT +); +CREATE TABLE test2.t21 (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (id)); +CREATE TABLE test2.t22 ( + id INT NOT NULL AUTO_INCREMENT, + name varchar(255) NOT NULL, + parent_id INT DEFAULT NULL, + PRIMARY KEY (id), + CONSTRAINT fk_parent FOREIGN KEY (parent_id) REFERENCES test2.t21 (id) ON UPDATE CASCADE ON DELETE RESTRICT +); +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.referential_constraints; +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.referential_constraints where constraint_schema = 'test1'; +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.referential_constraints where table_name = 't22'; +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.referential_constraints where constraint_schema = 'test1' and table_name = 't12'; +select CONSTRAINT_SCHEMA, CONSTRAINT_NAME from information_schema.referential_constraints where constraint_schema = 'test1' and table_name = 't22'; + +set global tidb_enable_check_constraint = default; +drop database test1; +drop database test2; + +# TestStatisticsColumns +drop table if exists t1; +drop table if exists t2; +create table t1 (a bigint primary key clustered, b int, index idx(b)); +insert into t1 values (1, 1), (2, 2); +create database infoschema__infoschema_2; +use infoschema__infoschema_2; +create table t2 (a int, b char(255), index idx(b, a)); +insert into t2 values (1, 'aaa'); +--sorted_result +select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.statistics where table_schema = 'infoschema__infoschema'; +--sorted_result +select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.statistics where table_name = 't1'; +--sorted_result +select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.statistics where table_name = 't2' and table_schema = 'infoschema__infoschema_2'; +drop table infoschema__infoschema.t1; +drop table infoschema__infoschema_2.t2; + +# TestIndexUsageColumns +drop database if exists indexusage; +create database indexusage; +use indexusage; +create table idt1(col_1 int primary key, col_2 int, index idx_1(col_1), index idx_2(col_2), index idx_3(col_1, col_2)); +create table idt2(col_1 int primary key, col_2 int, index idx_1(col_1), index idx_2(col_2), index idx_4(col_2, col_1)); +-- sorted_result +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where TABLE_SCHEMA = 'indexusage'; +-- sorted_result +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where TABLE_NAME = 'idt1'; +-- sorted_result +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where INDEX_NAME = 'IDX_3'; +-- sorted_result +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where TABLE_SCHEMA = 'indexusage' and TABLE_NAME = 'idt1'; +-- sorted_result +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where TABLE_SCHEMA = 'indexusage' and INDEX_NAME = 'idx_2'; +-- sorted_result +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where TABLE_NAME = 'idt1' and INDEX_NAME = 'idx_1'; +-- sorted_result +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where TABLE_SCHEMA = 'indexusage' and TABLE_NAME = 'idt2' and INDEX_NAME = 'idx_4'; + +# Empty query +-- sorted_result +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where TABLE_SCHEMA = 'indexusage1'; +-- sorted_result +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where TABLE_NAME = 'idt3'; +-- sorted_result +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where INDEX_NAME = 'IDX_5'; +-- sorted_result +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where TABLE_SCHEMA = 'indexusage' and TABLE_NAME = 'idt0'; +-- sorted_result +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where TABLE_SCHEMA = 'indexusage1' and INDEX_NAME = 'idx_2'; +-- sorted_result +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where TABLE_NAME = 'idt2' and INDEX_NAME = 'idx_3'; +-- sorted_result +select TABLE_SCHEMA, TABLE_NAME, INDEX_NAME from information_schema.tidb_index_usage where TABLE_SCHEMA = 'indexusage' and TABLE_NAME = 'idt1' and INDEX_NAME = 'idx_4'; +drop database indexusage; + +drop database if exists columnsinfo; +create database columnsinfo; +use columnsinfo; +create table tbl1(col_1 int primary key, col_2 int, col_4 int); +create table tbl2(col_1 int primary key, col_2 int, col_3 int); +create view view1 as select min(col_1), col_2, max(col_4) as max4 from tbl1 group by col_2; + +-- sorted_result +select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.columns where TABLE_SCHEMA = "columnsinfo"; +-- sorted_result +select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.columns where TABLE_NAME = "view1" or TABLE_NAME = "tbl1"; +-- sorted_result +select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.columns where COLUMN_NAME = "col_2"; +-- sorted_result +select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.columns where TABLE_SCHEMA = "columnsinfo" and TABLE_NAME = "tbl2"; +-- sorted_result +select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.columns where TABLE_SCHEMA = "columnsinfo" and COLUMN_NAME = "col_4"; +-- sorted_result +select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.columns where TABLE_NAME = "view1" and COLUMN_NAME like "m%"; +-- sorted_result +select TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME from information_schema.columns where TABLE_SCHEMA = 'columnsinfo' and TABLE_NAME = 'tbl1' and COLUMN_NAME = 'col_2'; + +# TestSchemataColumns +use infoschema__infoschema; +select SCHEMA_NAME from information_schema.schemata where schema_name = 'infoschema__infoschema_2'; +select SCHEMA_NAME from information_schema.schemata where schema_name = 'infoschema__infoschema'; +drop database infoschema__infoschema_2; + +# TestFilterKeyColumnUsageTable +create database if not exists db1; +create table db1.table1(id int not null primary key, cat_name varchar(255) not null, cat_description text); +create table db1.table2(id int not null, FOREIGN KEY fk(id) REFERENCES table1(id) ON UPDATE CASCADE ON DELETE RESTRICT); +create database if not exists db2; +create table db2.table1(id int not null primary key, cat_name varchar(255) not null, cat_description text); +create table db2.table2(id int not null, FOREIGN KEY fk(id) REFERENCES table1(id) ON UPDATE CASCADE ON DELETE RESTRICT); +select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE where table_schema = 'db1' order by TABLE_NAME; +drop database db1; +drop database db2; + +# TestLocalTemporaryTableShouldNotAppear +create temporary table temp_table (a int, index idx(a)); +select count(1) from information_schema.tables where table_schema = 'infoschema__infoschema'; +select count(1) from information_schema.tables where table_name = 'temp_table'; +select count(1) from information_schema.statistics where table_name = 'temp_table'; +drop table temp_table; +create global temporary table temp_table(a int, index idx(a)) on commit delete rows; +select count(1) from information_schema.tables where table_schema = 'infoschema__infoschema'; +select count(1) from information_schema.tables where table_name = 'temp_table'; +select count(1) from information_schema.statistics where table_name = 'temp_table'; +drop table temp_table; + +# TestSequenceColumns +create database if not exists Db1; +create database if not exists dB2; +create sequence db1.s1; +create sequence db2.s2; +select sequence_schema, sequence_name from information_schema.sequences where sequence_schema = 'db1'; +select sequence_schema, sequence_name from information_schema.sequences where sequence_schema = 'db1' and sequence_name = 's1'; +select sequence_schema, sequence_name from information_schema.sequences where sequence_schema = 'db1' and sequence_name = 's2'; +select sequence_schema, sequence_name from information_schema.sequences; +drop database db1; +drop database db2; diff --git a/tests/integrationtest/t/planner/cardinality/selectivity.test b/tests/integrationtest/t/planner/cardinality/selectivity.test index 37dff39b9ed26..b865738ef56bb 100644 --- a/tests/integrationtest/t/planner/cardinality/selectivity.test +++ b/tests/integrationtest/t/planner/cardinality/selectivity.test @@ -647,6 +647,9 @@ insert into t values ('tw', 0); insert into t values ('tw', 0); analyze table t all columns; explain select * from t where a = 'tw' and b < 0; +set @@tidb_opt_fix_control = '47400:on'; +explain select * from t where a = 'tw' and b < 0; +set @@tidb_opt_fix_control = '47400:off'; # TestSelectCombinedLowBound drop table if exists t; diff --git a/tests/integrationtest/t/planner/core/casetest/pushdown/push_down.test b/tests/integrationtest/t/planner/core/casetest/pushdown/push_down.test index 1404b758bdcc5..15be563f4d8c1 100644 --- a/tests/integrationtest/t/planner/core/casetest/pushdown/push_down.test +++ b/tests/integrationtest/t/planner/core/casetest/pushdown/push_down.test @@ -52,3 +52,20 @@ desc format = 'brief' select A.b, B.b from (select id-2 as b from t) B join (sel desc format = 'brief' select A.id from t as A where exists (select 1 from t where t.id=A.id); desc format = 'brief' select A.id from t as A where not exists (select 1 from t where t.id=A.id); desc format = 'brief' SELECT FROM_UNIXTIME(name,'%Y-%m-%d') FROM t; + +# TestIssue55012 +CREATE TABLE `t4a8656d1` ( + `col_73` json NOT NULL, + `col_74` date DEFAULT '1984-06-10', + KEY `idx_39` ((cast(`col_73` as double array)),`col_74`), + KEY `idx_40` ((cast(`col_73` as double array)),`col_74`), + UNIQUE KEY `idx_41` (`col_74`,(cast(`col_73` as double array))) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; +CREATE TABLE `tld47bc815` ( + `col_1` text NOT NULL, + PRIMARY KEY (`col_1`(3)) /*T![clustered_index] NONCLUSTERED */, + KEY `idx_2` (`col_1`(5)), + UNIQUE KEY `idx_3` (`col_1`(5)), + KEY `idx_4` (`col_1`(4)) +) ENGINE=InnoDB DEFAULT CHARSET=gbk COLLATE=gbk_chinese_ci; +explain select 1, r0 as col_754 from ( select format(t4a8656d1.col_74, 1) as r0 from t4a8656d1 join tld47bc815 on t4a8656d1.col_74 = tld47bc815.col_1 where JSON_OVERLAPS(t4a8656d1.col_73, '[0.035131302371695955]') group by t4a8656d1.col_74, t4a8656d1.col_73 ) as subquery where IsNull(subquery.r0) diff --git a/tests/integrationtest/t/planner/core/indexmerge_path.test b/tests/integrationtest/t/planner/core/indexmerge_path.test index 02d979b491971..06bf1256d07dd 100644 --- a/tests/integrationtest/t/planner/core/indexmerge_path.test +++ b/tests/integrationtest/t/planner/core/indexmerge_path.test @@ -425,3 +425,91 @@ EXPLAIN format = brief SELECT * FROM t WHERE a > 1 AND (b = '2' OR c = 3 OR b = EXPLAIN format = brief SELECT * FROM t WHERE a > 1 AND (b = '2' OR c = 3 OR b = '4' OR c = 5 OR b = '12' OR c = 13); EXPLAIN format = brief SELECT * FROM t WHERE a = 1 AND (c = 13 OR c = 15 OR c = 5 OR b = '12' OR c = 13 OR b = '11'); SET @@tidb_opt_fix_control = default; + +# Test deriving index filters for mv index paths +drop table if exists t, t1; +create table t (a int, b varchar(30), c float, j json, pk int primary key, +key mvi1(c, (cast(j->'$.a' as unsigned array)), b), +key mvi2(a, (cast(j->'$.c' as unsigned array))), +key mvi3((cast(j->'$.d' as unsigned array)), c), +key idx(b, c) +); + +insert into t values (1, 'test', 1, '{"a":[3,4,5], "c":[7,8,9], "d":[10,11,12]}', 1); +insert into t values (2, 'text', 1, '{"a":[4,5,6], "c":[10,11,12], "d":[13,14,15]}', 2); +insert into t values (1, 'abcd', 1, '{"a":[7,8,9], "c":[13,14,15], "d":[16,17,18]}', 3); + +# case 1: union type index merge on single mv index from single condition +SELECT /*+ use_index_merge(t, mvi1) */ * from t where +c = 1 and +json_overlaps(j->'$.a', '[4,5,6]') and +b not like '%test%'; + +EXPLAIN format = brief SELECT /*+ use_index_merge(t, mvi1) */ * from t where +c = 1 and +json_overlaps(j->'$.a', '[4,5,6]') and +b not like '%test%'; + +# case 2: intersection type index merge on single mv index from single condition +SELECT /*+ use_index_merge(t, mvi1) */ * from t where +c = 1 and +json_contains(j->'$.a', '[4,5]') and +b not like '%test%'; + +EXPLAIN format = brief SELECT /*+ use_index_merge(t, mvi1) */ * from t where +c = 1 and +json_contains(j->'$.a', '[4,5]') and +b not like '%test%'; + +# case 3: intersection type index merge on multiple indexes from different conditions +SELECT /*+ use_index_merge(t, mvi1, mvi2, idx) */ * from t where +a = 1 and +b > 'abc' and +b not like '%test%' and +c = 10 and +3 member of (j->'$.a') and +3 member of (j->'$.c'); + +EXPLAIN format=brief SELECT /*+ use_index_merge(t, mvi1, mvi2, idx) */ * from t where +a = 1 and +b > 'abc' and +b not like '%test%' and +c = 10 and +3 member of (j->'$.a') and +3 member of (j->'$.c'); + +# case 4: test prefix indexes +create table t1 ( +a int, +b varchar(30), +c float, +d tinytext, +j json, +key mvi1(b(3), (cast(j as unsigned array))), +key mvi2((cast(j as unsigned array)), b), +key mvi3((cast(j as unsigned array)), d(30)), +key mvi4((cast(j as unsigned array)), d(255)) +); + + +EXPLAIN format = brief SELECT /*+ use_index_merge(t1, mvi1) */ * from t1 where +c = 1 and +json_contains(j, '[4,5]') and +b = 'abcdefg'; + +EXPLAIN format = brief SELECT /*+ use_index_merge(t1, mvi2) */ * from t1 where +c = 1 and +json_contains(j, '[4,5]') and +b = 'abcdefg' and +b like '%test%'; + +EXPLAIN format = brief SELECT /*+ use_index_merge(t1, mvi3) */ * from t1 where +c = 1 and +json_contains(j, '[4,5]') and +d not like '%test%'; + +EXPLAIN format = brief SELECT /*+ use_index_merge(t1, mvi4) */ * from t1 where +c = 1 and +json_contains(j, '[4,5]') and +d not like '%test%'; + diff --git a/tests/integrationtest/t/planner/core/issuetest/planner_issue.test b/tests/integrationtest/t/planner/core/issuetest/planner_issue.test index a67c8323c2d98..278706725c00b 100644 --- a/tests/integrationtest/t/planner/core/issuetest/planner_issue.test +++ b/tests/integrationtest/t/planner/core/issuetest/planner_issue.test @@ -434,4 +434,20 @@ CREATE TABLE `tl45f49bec` ( INSERT INTO `tl45f49bec` VALUES('05:26:53','',6436.3984),('05:33:06','',2418.3447),('05:56:03','!34',5327.29),('11:11:13','$uX7jK=*(prX#fm',8447.91),('05:35:17','*Jqx7z%a9~1Xw',7480.8096),('22:48:06','-',4563.9565),('03:48:30','1*t@',282.95325),('19:34:18','1~4i@f8X&exNs+CG0x',1238.2216),('13:22:26','3c9iE',1337.3021),('11:30:51','4xyKNd7+tKbh',130.22589),('22:35:40','56vCiz^%#hcS',8593.311),('07:56:40','5W0p%FB$cMOcC_-37k',7798.0645),('23:17:09','6A!03oVaCmLM',6335.1514),('04:29:52','7N',8081.281),('04:14:22','7rW*b',2108.5618),('02:11:20','87O8gvnLG5',5109.0845),('11:43:02','=0vROyDng',9798.294),('06:21:18','@+0~@GdUE%+hSJg*#',7182.4136),('03:08:56','B1y^-u_v+l',2024.7775),('11:36:31','E#o%-MWl',3556.0056),('17:40:46','E1!qy4Qvw6s',8514.763),('13:40:54','IwMfmh$lfz',2577.1978),('00:55:17','J&eq%cQP+cx',1946.7703),('23:26:11','JJ0',9597.079),('19:16:32','K0VO3g(_nx%HMX',3434.9307),('14:35:00','LEJ9!B',1137.5157),('01:26:40','Sfuqtm',5829.2686),('11:58:06','XpqXa^b*%b!&I4ZnS',5890.494),('21:06:51','^',6630.6665),('03:22:56','^a',9613.8545),('04:30:59','_bmnB!IeDpljq',6335.3916),('08:29:45','b)=RH&R',5911.286),('18:56:18','h+5l9',1037.6467),('22:44:14','sZuxMLWUU',5482.626),('03:51:42','x-7',9611.379); -SELECT 1 AS `r0` FROM (`t31cdd702`) JOIN `tl45f49bec` WHERE `tl45f49bec`.`col_22` BETWEEN 'LEJ9!B' AND 'TV#~!yw' LIMIT 24622829; \ No newline at end of file +SELECT 1 AS `r0` FROM (`t31cdd702`) JOIN `tl45f49bec` WHERE `tl45f49bec`.`col_22` BETWEEN 'LEJ9!B' AND 'TV#~!yw' LIMIT 24622829; + +# Test Issue52985 +set autocommit=ON; +use test; +drop table if exists t1; +create table t1 (cc1 int,cc2 text); +insert into t1 values (1, 'aaaa'),(2, 'bbbb'),(3, 'cccc'); + +drop table if exists t2; +create table t2 (cc1 int,cc2 text,primary key(cc1)); +insert into t2 values (2, '2'); + +set tidb_executor_concurrency = 1; +set tidb_window_concurrency = 100; +explain select * from (SELECT DISTINCT cc2 as a, cc2 as b, cc1 as c FROM t2 UNION ALL SELECT count(1) over (partition by cc1), cc2, cc1 FROM t1) order by a,b,c; +select * from (SELECT DISTINCT cc2 as a, cc2 as b, cc1 as c FROM t2 UNION ALL SELECT count(1) over (partition by cc1), cc2, cc1 FROM t1) order by a,b,c; \ No newline at end of file diff --git a/tests/integrationtest/t/planner/core/physical_plan.test b/tests/integrationtest/t/planner/core/physical_plan.test index 5fc57fb9ce2a6..132940cfd8800 100644 --- a/tests/integrationtest/t/planner/core/physical_plan.test +++ b/tests/integrationtest/t/planner/core/physical_plan.test @@ -2,6 +2,7 @@ drop table if exists t; create table t(a int, b int, c int, key(b), key(c)); explain format='hint' select /*+ inl_merge_join(t2) */ * from t t1 inner join t t2 on t1.b = t2.b and t1.c = 1; +show warnings; explain format='hint' select /*+ inl_hash_join(t2) */ * from t t1 inner join t t2 on t1.b = t2.b and t1.c = 1; diff --git a/tests/realtikvtest/addindextest/BUILD.bazel b/tests/realtikvtest/addindextest/BUILD.bazel index 8a1266f520768..d1180149494c1 100644 --- a/tests/realtikvtest/addindextest/BUILD.bazel +++ b/tests/realtikvtest/addindextest/BUILD.bazel @@ -15,9 +15,9 @@ go_test( "//pkg/config", "//pkg/ddl", "//pkg/ddl/ingest", - "//pkg/ddl/util/callback", "//pkg/parser/model", "//pkg/testkit", + "//pkg/testkit/testfailpoint", "//tests/realtikvtest", "//tests/realtikvtest/addindextestutil", "@com_github_pingcap_failpoint//:failpoint", diff --git a/tests/realtikvtest/addindextest/add_index_test.go b/tests/realtikvtest/addindextest/add_index_test.go index 912a57bce2afe..86b6232f12b54 100644 --- a/tests/realtikvtest/addindextest/add_index_test.go +++ b/tests/realtikvtest/addindextest/add_index_test.go @@ -21,9 +21,9 @@ import ( "github.com/pingcap/tidb/pkg/config" "github.com/pingcap/tidb/pkg/ddl" "github.com/pingcap/tidb/pkg/ddl/ingest" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/testkit" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/tests/realtikvtest" "github.com/pingcap/tidb/tests/realtikvtest/addindextestutil" "github.com/stretchr/testify/assert" @@ -156,7 +156,7 @@ func TestAddUKWithSmallIntHandles(t *testing.T) { } func TestAddUniqueDuplicateIndexes(t *testing.T) { - store, dom := realtikvtest.CreateMockStoreAndDomainAndSetup(t) + store := realtikvtest.CreateMockStoreAndSetup(t) tk := testkit.NewTestKit(t, store) tk.MustExec("use test") @@ -167,14 +167,9 @@ func TestAddUniqueDuplicateIndexes(t *testing.T) { tk1 := testkit.NewTestKit(t, store) tk1.MustExec("use test") - d := dom.DDL() - originalCallback := d.GetHook() - defer d.SetHook(originalCallback) - callback := &callback.TestDDLCallback{} - tk1.Exec("INSERT INTO t VALUES (-18585,'duplicatevalue',0);") - onJobUpdatedExportedFunc := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { switch job.SchemaState { case model.StateDeleteOnly: _, err := tk1.Exec("delete from t where c = 0;") @@ -182,9 +177,7 @@ func TestAddUniqueDuplicateIndexes(t *testing.T) { _, err = tk1.Exec("insert INTO t VALUES (-18585,'duplicatevalue',1);") assert.NoError(t, err) } - } - callback.OnJobUpdatedExported.Store(&onJobUpdatedExportedFunc) - d.SetHook(callback) + }) tk3 := testkit.NewTestKit(t, store) tk3.MustExec("use test") diff --git a/tests/realtikvtest/addindextest1/BUILD.bazel b/tests/realtikvtest/addindextest1/BUILD.bazel index 0c3baac3f93ec..5560686d8c7fe 100644 --- a/tests/realtikvtest/addindextest1/BUILD.bazel +++ b/tests/realtikvtest/addindextest1/BUILD.bazel @@ -11,12 +11,12 @@ go_test( deps = [ "//pkg/config", "//pkg/ddl/ingest", - "//pkg/ddl/util/callback", "//pkg/disttask/framework/storage", "//pkg/errno", "//pkg/parser/model", "//pkg/sessionctx/variable", "//pkg/testkit", + "//pkg/testkit/testfailpoint", "//tests/realtikvtest", "@com_github_pingcap_failpoint//:failpoint", "@com_github_stretchr_testify//require", diff --git a/tests/realtikvtest/addindextest1/disttask_test.go b/tests/realtikvtest/addindextest1/disttask_test.go index 601867e9d44f7..170c2c2746420 100644 --- a/tests/realtikvtest/addindextest1/disttask_test.go +++ b/tests/realtikvtest/addindextest1/disttask_test.go @@ -24,12 +24,12 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/tidb/pkg/config" "github.com/pingcap/tidb/pkg/ddl/ingest" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/disttask/framework/storage" "github.com/pingcap/tidb/pkg/errno" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/testkit" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/tests/realtikvtest" "github.com/stretchr/testify/require" "github.com/tikv/client-go/v2/util" @@ -62,6 +62,7 @@ func TestAddIndexDistBasic(t *testing.T) { bak := variable.GetDDLReorgWorkerCounter() tk.MustExec("set global tidb_ddl_reorg_worker_cnt = 111") + tk.MustExec("set @@tidb_ddl_reorg_worker_cnt = 111") require.Equal(t, int32(111), variable.GetDDLReorgWorkerCounter()) tk.MustExec("create table t(a bigint auto_random primary key) partition by hash(a) partitions 20;") tk.MustExec("insert into t values (), (), (), (), (), ()") @@ -80,6 +81,7 @@ func TestAddIndexDistBasic(t *testing.T) { require.Equal(t, 1, task.Concurrency) tk.MustExec(fmt.Sprintf("set global tidb_ddl_reorg_worker_cnt = %d", bak)) + tk.MustExec(fmt.Sprintf("set @@tidb_ddl_reorg_worker_cnt = %d", bak)) require.Equal(t, bak, variable.GetDDLReorgWorkerCounter()) tk.MustExec("create table t1(a bigint auto_random primary key);") @@ -150,7 +152,7 @@ func TestAddIndexDistCancel(t *testing.T) { func TestAddIndexDistPauseAndResume(t *testing.T) { t.Skip("unstable") // TODO(tangenta): fix this unstable test - store, dom := realtikvtest.CreateMockStoreAndDomainAndSetup(t) + store := realtikvtest.CreateMockStoreAndSetup(t) if store.Name() != "TiKV" { t.Skip("TiKV store only") } @@ -198,17 +200,14 @@ func TestAddIndexDistPauseAndResume(t *testing.T) { require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/disttask/framework/scheduler/mockDMLExecutionOnPausedState")) // dist task succeed, job paused and resumed. - var hook = &callback.TestDDLCallback{Do: dom} - var resumeFunc = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if job.IsPaused() { row := tk1.MustQuery("select job_id from mysql.tidb_ddl_job").Rows() require.Equal(t, 1, len(row)) jobID := row[0][0].(string) tk1.MustExec("admin resume ddl jobs " + jobID) } - } - hook.OnJobUpdatedExported.Store(&resumeFunc) - dom.DDL().SetHook(hook.Clone()) + }) var once sync.Once require.NoError(t, failpoint.EnableCall("github.com/pingcap/tidb/pkg/ddl/pauseAfterDistTaskFinished", func() { diff --git a/tests/realtikvtest/addindextest2/BUILD.bazel b/tests/realtikvtest/addindextest2/BUILD.bazel index c0795fac6253a..d41d6dc3940cc 100644 --- a/tests/realtikvtest/addindextest2/BUILD.bazel +++ b/tests/realtikvtest/addindextest2/BUILD.bazel @@ -11,7 +11,6 @@ go_test( deps = [ "//br/pkg/storage", "//pkg/config", - "//pkg/ddl/util/callback", "//pkg/disttask/framework/scheduler", "//pkg/kv", "//pkg/lightning/backend/external", diff --git a/tests/realtikvtest/addindextest2/global_sort_test.go b/tests/realtikvtest/addindextest2/global_sort_test.go index 253fd3deee20c..f3d13be48cf4b 100644 --- a/tests/realtikvtest/addindextest2/global_sort_test.go +++ b/tests/realtikvtest/addindextest2/global_sort_test.go @@ -26,7 +26,6 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/tidb/br/pkg/storage" "github.com/pingcap/tidb/pkg/config" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/disttask/framework/scheduler" "github.com/pingcap/tidb/pkg/kv" "github.com/pingcap/tidb/pkg/lightning/backend/external" @@ -84,7 +83,7 @@ func TestGlobalSortBasic(t *testing.T) { require.NoError(t, err) server.CreateBucketWithOpts(fakestorage.CreateBucketOpts{Name: "sorted"}) - store, dom := realtikvtest.CreateMockStoreAndDomainAndSetup(t) + store := realtikvtest.CreateMockStoreAndSetup(t) tk := testkit.NewTestKit(t, store) testfailpoint.Enable(t, "github.com/pingcap/tidb/pkg/disttask/framework/scheduler/WaitCleanUpFinished", "return()") tk.MustExec("drop database if exists addindexlit;") @@ -112,13 +111,9 @@ func TestGlobalSortBasic(t *testing.T) { tk.MustExec(sb.String()) var jobID int64 - origin := dom.DDL().GetHook() - onJobUpdated := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { jobID = job.ID - } - hook := &callback.TestDDLCallback{} - hook.OnJobUpdatedExported.Store(&onJobUpdated) - dom.DDL().SetHook(hook) + }) tk.MustExec("alter table t add index idx(a);") tk.MustExec("admin check table t;") @@ -135,8 +130,6 @@ func TestGlobalSortBasic(t *testing.T) { tk.MustExec("admin check table t;") <-scheduler.WaitCleanUpFinished checkFileCleaned(t, jobID, cloudStorageURI) - - dom.DDL().SetHook(origin) } func TestGlobalSortMultiSchemaChange(t *testing.T) { @@ -302,18 +295,16 @@ func TestIngestUseGivenTS(t *testing.T) { store, dom := realtikvtest.CreateMockStoreAndDomainAndSetup(t) var tblInfo *model.TableInfo var idxInfo *model.IndexInfo - cb := &callback.TestDDLCallback{} - interceptFn := func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) { if idxInfo == nil { - tbl, _ := dom.InfoSchema().TableByID(job.TableID) + tbl, _ := dom.InfoSchema().TableByID(context.Background(), job.TableID) tblInfo = tbl.Meta() if len(tblInfo.Indices) == 0 { return } idxInfo = tblInfo.Indices[0] } - } - cb.OnJobUpdatedExported.Store(&interceptFn) + }) tk := testkit.NewTestKit(t, store) tk.MustExec("drop database if exists addindexlit;") @@ -333,7 +324,6 @@ func TestIngestUseGivenTS(t *testing.T) { tk.MustExec("create table t (a int);") tk.MustExec("insert into t values (1), (2), (3);") - dom.DDL().SetHook(cb) tk.MustExec("alter table t add index idx(a);") err = failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/mockTSForGlobalSort") diff --git a/tests/realtikvtest/addindextest3/BUILD.bazel b/tests/realtikvtest/addindextest3/BUILD.bazel index 66add4c8fa03c..ac0fcc528e572 100644 --- a/tests/realtikvtest/addindextest3/BUILD.bazel +++ b/tests/realtikvtest/addindextest3/BUILD.bazel @@ -16,7 +16,6 @@ go_test( "//pkg/ddl/copr", "//pkg/ddl/ingest", "//pkg/ddl/testutil", - "//pkg/ddl/util/callback", "//pkg/disttask/operator", "//pkg/domain", "//pkg/errno", @@ -37,6 +36,5 @@ go_test( "@com_github_stretchr_testify//require", "@com_github_tikv_client_go_v2//tikv", "@com_github_tikv_client_go_v2//util", - "@org_golang_x_sync//errgroup", ], ) diff --git a/tests/realtikvtest/addindextest3/functional_test.go b/tests/realtikvtest/addindextest3/functional_test.go index d70f21a0853d4..7a3e29a4d3206 100644 --- a/tests/realtikvtest/addindextest3/functional_test.go +++ b/tests/realtikvtest/addindextest3/functional_test.go @@ -83,7 +83,7 @@ func TestDDLTestEstimateTableRowSize(t *testing.T) { func TestBackendCtxConcurrentUnregister(t *testing.T) { store := realtikvtest.CreateMockStoreAndSetup(t) discovery := store.(tikv.Storage).GetRegionCache().PDClient().GetServiceDiscovery() - bCtx, err := ingest.LitBackCtxMgr.Register(context.Background(), 1, false, nil, discovery, "test") + bCtx, err := ingest.LitBackCtxMgr.Register(context.Background(), 1, false, nil, discovery, "test", 1) require.NoError(t, err) idxIDs := []int64{1, 2, 3, 4, 5, 6, 7} uniques := make([]bool, 0, len(idxIDs)) diff --git a/tests/realtikvtest/addindextest3/ingest_test.go b/tests/realtikvtest/addindextest3/ingest_test.go index 3d9313ed8a110..808b861cd8fb3 100644 --- a/tests/realtikvtest/addindextest3/ingest_test.go +++ b/tests/realtikvtest/addindextest3/ingest_test.go @@ -26,12 +26,12 @@ import ( "github.com/pingcap/tidb/pkg/ddl" "github.com/pingcap/tidb/pkg/ddl/ingest" "github.com/pingcap/tidb/pkg/ddl/testutil" - "github.com/pingcap/tidb/pkg/ddl/util/callback" "github.com/pingcap/tidb/pkg/errno" "github.com/pingcap/tidb/pkg/lightning/backend/local" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/sessionctx/variable" "github.com/pingcap/tidb/pkg/testkit" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/tests/realtikvtest" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -191,7 +191,7 @@ func TestAddIndexIngestAdjustBackfillWorker(t *testing.T) { tk.MustExec("create database addindexlit;") tk.MustExec("use addindexlit;") tk.MustExec(`set global tidb_ddl_enable_fast_reorg=on;`) - tk.MustExec("set @@global.tidb_ddl_reorg_worker_cnt = 1;") + tk.MustExec("set @@tidb_ddl_reorg_worker_cnt = 1;") tk.MustExec("create table t (a int primary key);") var sb strings.Builder sb.WriteString("insert into t values ") @@ -219,7 +219,7 @@ func TestAddIndexIngestAdjustBackfillWorker(t *testing.T) { running = false case wg := <-ddl.TestCheckWorkerNumCh: offset = (offset + 1) % 3 - tk.MustExec(fmt.Sprintf("set @@global.tidb_ddl_reorg_worker_cnt=%d", cnt[offset])) + tk.MustExec(fmt.Sprintf("set @@tidb_ddl_reorg_worker_cnt=%d", cnt[offset])) atomic.StoreInt32(&ddl.TestCheckWorkerNumber, int32(cnt[offset]/2+2)) wg.Done() } @@ -231,7 +231,6 @@ func TestAddIndexIngestAdjustBackfillWorker(t *testing.T) { require.Len(t, rows, 1) jobTp := rows[0][3].(string) require.True(t, strings.Contains(jobTp, "ingest"), jobTp) - tk.MustExec("set @@global.tidb_ddl_reorg_worker_cnt = 4;") } func TestAddIndexIngestAdjustBackfillWorkerCountFail(t *testing.T) { @@ -244,7 +243,7 @@ func TestAddIndexIngestAdjustBackfillWorkerCountFail(t *testing.T) { ingest.ImporterRangeConcurrencyForTest = &atomic.Int32{} ingest.ImporterRangeConcurrencyForTest.Store(2) - tk.MustExec("set @@global.tidb_ddl_reorg_worker_cnt = 20;") + tk.MustExec("set @@tidb_ddl_reorg_worker_cnt = 20;") tk.MustExec("create table t (a int primary key);") var sb strings.Builder @@ -262,7 +261,6 @@ func TestAddIndexIngestAdjustBackfillWorkerCountFail(t *testing.T) { require.Len(t, rows, 1) jobTp := rows[0][3].(string) require.True(t, strings.Contains(jobTp, "ingest"), jobTp) - tk.MustExec("set @@global.tidb_ddl_reorg_worker_cnt = 4;") ingest.ImporterRangeConcurrencyForTest = nil } @@ -350,10 +348,10 @@ func TestAddIndexSplitTableRanges(t *testing.T) { } tk.MustQuery("split table t between (0) and (80000) regions 7;").Check(testkit.Rows("6 1")) - ddl.SetBackfillTaskChanSizeForTest(4) + testfailpoint.Enable(t, "github.com/pingcap/tidb/pkg/ddl/setLimitForLoadTableRanges", "return(4)") tk.MustExec("alter table t add index idx(b);") tk.MustExec("admin check table t;") - ddl.SetBackfillTaskChanSizeForTest(7) + testfailpoint.Enable(t, "github.com/pingcap/tidb/pkg/ddl/setLimitForLoadTableRanges", "return(7)") tk.MustExec("alter table t add index idx_2(b);") tk.MustExec("admin check table t;") @@ -363,10 +361,37 @@ func TestAddIndexSplitTableRanges(t *testing.T) { tk.MustExec(fmt.Sprintf("insert into t values (%d, %d);", i*10000, i*10000)) } tk.MustQuery("split table t by (10000),(20000),(30000),(40000),(50000),(60000);").Check(testkit.Rows("6 1")) - ddl.SetBackfillTaskChanSizeForTest(4) + testfailpoint.Enable(t, "github.com/pingcap/tidb/pkg/ddl/setLimitForLoadTableRanges", "return(4)") + tk.MustExec("alter table t add unique index idx(b);") + tk.MustExec("admin check table t;") +} + +func TestAddIndexLoadTableRangeError(t *testing.T) { + store := realtikvtest.CreateMockStoreAndSetup(t) + tk := testkit.NewTestKit(t, store) + tk.MustExec("drop database if exists addindexlit;") + tk.MustExec("create database addindexlit;") + tk.MustExec("use addindexlit;") + tk.MustExec(`set global tidb_ddl_enable_fast_reorg=on;`) + tk.MustExec(`set global tidb_enable_dist_task=off;`) // Use checkpoint manager. + + tk.MustExec("create table t (a int primary key, b int);") + for i := 0; i < 8; i++ { + tk.MustExec(fmt.Sprintf("insert into t values (%d, %d);", i*10000, i*10000)) + } + tk.MustQuery("split table t by (10000),(20000),(30000),(40000),(50000),(60000);").Check(testkit.Rows("6 1")) + + testfailpoint.Enable(t, "github.com/pingcap/tidb/pkg/ddl/setLimitForLoadTableRanges", "return(3)") + var batchCnt int + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/beforeLoadRangeFromPD", func(mockErr *bool) { + batchCnt++ + if batchCnt == 2 { + *mockErr = true + } + }) + testfailpoint.Enable(t, "github.com/pingcap/tidb/pkg/ddl/ingest/forceSyncFlagForTest", "return") tk.MustExec("alter table t add unique index idx(b);") tk.MustExec("admin check table t;") - ddl.SetBackfillTaskChanSizeForTest(1024) } func TestAddIndexMockFlushError(t *testing.T) { @@ -399,8 +424,8 @@ func TestAddIndexRemoteDuplicateCheck(t *testing.T) { tk.MustExec("create database addindexlit;") tk.MustExec("use addindexlit;") tk.MustExec(`set global tidb_ddl_enable_fast_reorg=on;`) - tk.MustExec("set global tidb_ddl_reorg_worker_cnt=1;") - tk.MustExec("set global tidb_enable_dist_task = 0;") + tk.MustExec("set @@tidb_ddl_reorg_worker_cnt=1;") + tk.MustExec("set @@global.tidb_enable_dist_task = 0;") tk.MustExec("create table t(id int primary key, b int, k int);") tk.MustQuery("split table t by (30000);").Check(testkit.Rows("1 1")) @@ -410,12 +435,10 @@ func TestAddIndexRemoteDuplicateCheck(t *testing.T) { ingest.ForceSyncFlagForTest = true tk.MustGetErrMsg("alter table t add unique index idx(b);", "[kv:1062]Duplicate entry '1' for key 't.idx'") ingest.ForceSyncFlagForTest = false - - tk.MustExec("set global tidb_ddl_reorg_worker_cnt=4;") } func TestAddIndexBackfillLostUpdate(t *testing.T) { - store, dom := realtikvtest.CreateMockStoreAndDomainAndSetup(t) + store := realtikvtest.CreateMockStoreAndSetup(t) tk := testkit.NewTestKit(t, store) tk.MustExec("drop database if exists addindexlit;") tk.MustExec("create database addindexlit;") @@ -427,12 +450,8 @@ func TestAddIndexBackfillLostUpdate(t *testing.T) { tk1 := testkit.NewTestKit(t, store) tk1.MustExec("use addindexlit;") - d := dom.DDL() - originalCallback := d.GetHook() - defer d.SetHook(originalCallback) - hook := &callback.TestDDLCallback{} var runDML bool - hook.OnJobRunAfterExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunAfter", func(job *model.Job) { if t.Failed() || runDML { return } @@ -445,7 +464,7 @@ func TestAddIndexBackfillLostUpdate(t *testing.T) { // tmp: [1 -> h1] runDML = true } - } + }) ddl.MockDMLExecutionStateBeforeImport = func() { _, err := tk1.Exec("update t set b = 2 where id = 1;") assert.NoError(t, err) @@ -467,12 +486,10 @@ func TestAddIndexBackfillLostUpdate(t *testing.T) { _, err = tk1.Exec("commit;") assert.NoError(t, err) } - d.SetHook(hook) - require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/ddl/mockDMLExecutionStateBeforeImport", "1*return")) + testfailpoint.Enable(t, "github.com/pingcap/tidb/pkg/ddl/mockDMLExecutionStateBeforeImport", "1*return") tk.MustExec("alter table t add unique index idx(b);") tk.MustExec("admin check table t;") tk.MustQuery("select * from t;").Check(testkit.Rows("1 2 1")) - require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/mockDMLExecutionStateBeforeImport")) } func TestAddIndexIngestFailures(t *testing.T) { diff --git a/tests/realtikvtest/addindextest3/operator_test.go b/tests/realtikvtest/addindextest3/operator_test.go index 1b941850011d8..c8a805b693948 100644 --- a/tests/realtikvtest/addindextest3/operator_test.go +++ b/tests/realtikvtest/addindextest3/operator_test.go @@ -27,6 +27,7 @@ import ( "github.com/pingcap/tidb/pkg/ddl" "github.com/pingcap/tidb/pkg/ddl/copr" "github.com/pingcap/tidb/pkg/ddl/ingest" + "github.com/pingcap/tidb/pkg/ddl/testutil" "github.com/pingcap/tidb/pkg/disttask/operator" "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/kv" @@ -38,7 +39,6 @@ import ( "github.com/pingcap/tidb/pkg/util/chunk" "github.com/pingcap/tidb/tests/realtikvtest" "github.com/stretchr/testify/require" - "golang.org/x/sync/errgroup" ) func init() { @@ -61,7 +61,7 @@ func TestBackfillOperators(t *testing.T) { opCtx := ddl.NewDistTaskOperatorCtx(ctx, 1, 1) pTbl := tbl.(table.PhysicalTable) src := ddl.NewTableScanTaskSource(opCtx, store, pTbl, startKey, endKey, nil) - sink := newTestSink[ddl.TableScanTask]() + sink := testutil.NewOperatorTestSink[ddl.TableScanTask]() operator.Compose[ddl.TableScanTask](src, sink) @@ -71,7 +71,7 @@ func TestBackfillOperators(t *testing.T) { err = pipeline.Close() require.NoError(t, err) - tasks := sink.collect() + tasks := sink.Collect() require.Len(t, tasks, 10) require.Equal(t, 1, tasks[0].ID) require.Equal(t, startKey, tasks[0].Start) @@ -94,9 +94,9 @@ func TestBackfillOperators(t *testing.T) { ctx := context.Background() opCtx := ddl.NewDistTaskOperatorCtx(ctx, 1, 1) - src := newTestSource(opTasks...) - scanOp := ddl.NewTableScanOperator(opCtx, sessPool, copCtx, srcChkPool, 3, nil) - sink := newTestSink[ddl.IndexRecordChunk]() + src := testutil.NewOperatorTestSource(opTasks...) + scanOp := ddl.NewTableScanOperator(opCtx, sessPool, copCtx, srcChkPool, 3, nil, 0) + sink := testutil.NewOperatorTestSink[ddl.IndexRecordChunk]() operator.Compose[ddl.TableScanTask](src, scanOp) operator.Compose[ddl.IndexRecordChunk](scanOp, sink) @@ -107,7 +107,7 @@ func TestBackfillOperators(t *testing.T) { err = pipeline.Close() require.NoError(t, err) - results := sink.collect() + results := sink.Collect() cnt := 0 for _, rs := range results { require.NoError(t, rs.Err) @@ -140,12 +140,12 @@ func TestBackfillOperators(t *testing.T) { mockEngine := ingest.NewMockEngineInfo(nil) mockEngine.SetHook(onWrite) - src := newTestSource(chunkResults...) + src := testutil.NewOperatorTestSource(chunkResults...) reorgMeta := ddl.NewDDLReorgMeta(tk.Session()) ingestOp := ddl.NewIndexIngestOperator( opCtx, copCtx, mockBackendCtx, sessPool, pTbl, []table.Index{index}, []ingest.Engine{mockEngine}, srcChkPool, 3, reorgMeta, nil, &ddl.EmptyRowCntListener{}) - sink := newTestSink[ddl.IndexWriteResult]() + sink := testutil.NewOperatorTestSink[ddl.IndexWriteResult]() operator.Compose[ddl.IndexRecordChunk](src, ingestOp) operator.Compose[ddl.IndexWriteResult](ingestOp, sink) @@ -156,7 +156,7 @@ func TestBackfillOperators(t *testing.T) { err = pipeline.Close() require.NoError(t, err) - results := sink.collect() + results := sink.Collect() cnt := 0 for _, rs := range results { cnt += rs.Added @@ -368,77 +368,3 @@ func (p *sessPoolForTest) Get() (sessionctx.Context, error) { func (p *sessPoolForTest) Put(sctx sessionctx.Context) { p.pool.Put(sctx.(pools.Resource)) } - -type testSink[T any] struct { - errGroup errgroup.Group - ch chan T - collected []T -} - -func newTestSink[T any]() *testSink[T] { - return &testSink[T]{ - ch: make(chan T), - } -} - -func (s *testSink[T]) Open() error { - s.errGroup.Go(func() error { - for data := range s.ch { - s.collected = append(s.collected, data) - } - return nil - }) - return nil -} - -func (s *testSink[T]) Close() error { - return s.errGroup.Wait() -} - -func (s *testSink[T]) SetSource(dataCh operator.DataChannel[T]) { - s.ch = dataCh.Channel() -} - -func (s *testSink[T]) String() string { - return "testSink" -} - -func (s *testSink[T]) collect() []T { - return s.collected -} - -type testSource[T any] struct { - errGroup errgroup.Group - ch chan T - toBeSent []T -} - -func newTestSource[T any](toBeSent ...T) *testSource[T] { - return &testSource[T]{ - ch: make(chan T), - toBeSent: toBeSent, - } -} - -func (s *testSource[T]) SetSink(sink operator.DataChannel[T]) { - s.ch = sink.Channel() -} - -func (s *testSource[T]) Open() error { - s.errGroup.Go(func() error { - for _, data := range s.toBeSent { - s.ch <- data - } - close(s.ch) - return nil - }) - return nil -} - -func (s *testSource[T]) Close() error { - return s.errGroup.Wait() -} - -func (s *testSource[T]) String() string { - return "testSource" -} diff --git a/tests/realtikvtest/brietest/BUILD.bazel b/tests/realtikvtest/brietest/BUILD.bazel index f1a20bff34dff..70f784fb3d07e 100644 --- a/tests/realtikvtest/brietest/BUILD.bazel +++ b/tests/realtikvtest/brietest/BUILD.bazel @@ -18,6 +18,7 @@ go_test( "//pkg/config", "//pkg/executor", "//pkg/parser/mysql", + "//pkg/session", "//pkg/sessionctx/binloginfo", "//pkg/store/mockstore/mockcopr", "//pkg/testkit", diff --git a/tests/realtikvtest/brietest/brie_test.go b/tests/realtikvtest/brietest/brie_test.go index c72b164b66058..e1c5abd475a54 100644 --- a/tests/realtikvtest/brietest/brie_test.go +++ b/tests/realtikvtest/brietest/brie_test.go @@ -15,6 +15,7 @@ package brietest import ( + "context" "fmt" "os" "strings" @@ -24,6 +25,7 @@ import ( "github.com/pingcap/failpoint" "github.com/pingcap/log" "github.com/pingcap/tidb/pkg/executor" + "github.com/pingcap/tidb/pkg/session" "github.com/pingcap/tidb/pkg/testkit" "github.com/stretchr/testify/require" "go.uber.org/zap/zapcore" @@ -60,6 +62,7 @@ func TestShowBackupQuery(t *testing.T) { restoreQuery := fmt.Sprintf("RESTORE TABLE `test`.`foo` FROM 'local://%s'", sqlTmp) tk.MustQuery(restoreQuery) res = tk.MustQuery("show br job query 2;") + tk.MustExec("drop table foo;") res.CheckContain(restoreQuery) } @@ -68,6 +71,7 @@ func TestShowBackupQueryRedact(t *testing.T) { executor.ResetGlobalBRIEQueueForTest() failpoint.Enable("github.com/pingcap/tidb/pkg/executor/block-on-brie", "return") + defer failpoint.Disable("github.com/pingcap/tidb/pkg/executor/block-on-brie") ch := make(chan any) go func() { tk := testkit.NewTestKit(t, tk.Session().GetStore()) @@ -102,6 +106,7 @@ func TestCancel(t *testing.T) { executor.ResetGlobalBRIEQueueForTest() tk.MustExec("use test;") failpoint.Enable("github.com/pingcap/tidb/pkg/executor/block-on-brie", "return") + defer failpoint.Disable("github.com/pingcap/tidb/pkg/executor/block-on-brie") req := require.New(t) ch := make(chan struct{}) @@ -126,3 +131,49 @@ func TestCancel(t *testing.T) { req.FailNow("the backup job doesn't be canceled") } } + +func TestExistedTables(t *testing.T) { + tk := initTestKit(t) + tmp := makeTempDirForBackup(t) + sqlTmp := strings.ReplaceAll(tmp, "'", "''") + executor.ResetGlobalBRIEQueueForTest() + tk.MustExec("use test;") + for i := 0; i < 10; i++ { + tableName := fmt.Sprintf("foo%d", i) + tk.MustExec(fmt.Sprintf("create table %s(pk int primary key auto_increment, v varchar(255));", tableName)) + tk.MustExec(fmt.Sprintf("insert into %s(v) values %s;", tableName, strings.TrimSuffix(strings.Repeat("('hello, world'),", 100), ","))) + } + + done := make(chan struct{}) + go func() { + defer close(done) + backupQuery := fmt.Sprintf("BACKUP DATABASE * TO 'local://%s'", sqlTmp) + _ = tk.MustQuery(backupQuery) + }() + select { + case <-time.After(20 * time.Second): + t.Fatal("Backup operation exceeded") + case <-done: + } + + done = make(chan struct{}) + go func() { + defer close(done) + restoreQuery := fmt.Sprintf("RESTORE DATABASE * FROM 'local://%s'", sqlTmp) + res, err := tk.Exec(restoreQuery) + require.NoError(t, err) + + _, err = session.ResultSetToStringSlice(context.Background(), tk.Session(), res) + require.ErrorContains(t, err, "table already exists") + }() + select { + case <-time.After(20 * time.Second): + t.Fatal("Restore operation exceeded") + case <-done: + } + + for i := 0; i < 10; i++ { + tableName := fmt.Sprintf("foo%d", i) + tk.MustExec(fmt.Sprintf("drop table %s;", tableName)) + } +} diff --git a/tests/realtikvtest/flashbacktest/BUILD.bazel b/tests/realtikvtest/flashbacktest/BUILD.bazel index 0a5af8f14b605..71984d9fd78d8 100644 --- a/tests/realtikvtest/flashbacktest/BUILD.bazel +++ b/tests/realtikvtest/flashbacktest/BUILD.bazel @@ -10,13 +10,12 @@ go_test( flaky = True, race = "on", deps = [ - "//pkg/ddl", "//pkg/ddl/util", - "//pkg/domain", "//pkg/errno", "//pkg/meta", "//pkg/parser/model", "//pkg/testkit", + "//pkg/testkit/testfailpoint", "//pkg/testkit/testsetup", "//pkg/types", "//tests/realtikvtest", diff --git a/tests/realtikvtest/flashbacktest/flashback_test.go b/tests/realtikvtest/flashbacktest/flashback_test.go index 9b14612fdae92..871943eb1d0f2 100644 --- a/tests/realtikvtest/flashbacktest/flashback_test.go +++ b/tests/realtikvtest/flashbacktest/flashback_test.go @@ -22,13 +22,12 @@ import ( "time" "github.com/pingcap/failpoint" - "github.com/pingcap/tidb/pkg/ddl" ddlutil "github.com/pingcap/tidb/pkg/ddl/util" - "github.com/pingcap/tidb/pkg/domain" "github.com/pingcap/tidb/pkg/errno" "github.com/pingcap/tidb/pkg/meta" "github.com/pingcap/tidb/pkg/parser/model" "github.com/pingcap/tidb/pkg/testkit" + "github.com/pingcap/tidb/pkg/testkit/testfailpoint" "github.com/pingcap/tidb/pkg/types" "github.com/pingcap/tidb/tests/realtikvtest" "github.com/stretchr/testify/assert" @@ -534,9 +533,7 @@ func TestFlashbackTmpTable(t *testing.T) { func TestFlashbackInProcessErrorMsg(t *testing.T) { if *realtikvtest.WithRealTiKV { - store, dom := realtikvtest.CreateMockStoreAndDomainAndSetup(t) - - originHook := dom.DDL().GetHook() + store := realtikvtest.CreateMockStoreAndSetup(t) tk := testkit.NewTestKit(t, store) timeBeforeDrop, _, safePointSQL, resetGC := MockGC(tk) @@ -559,8 +556,7 @@ func TestFlashbackInProcessErrorMsg(t *testing.T) { require.NoError(t, failpoint.Enable("github.com/pingcap/tidb/pkg/ddl/injectSafeTS", fmt.Sprintf("return(%v)", injectSafeTS))) - hook := newTestCallBack(t, dom) - hook.OnJobRunBeforeExported = func(job *model.Job) { + testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore", func(job *model.Job) { if job.Type == model.ActionFlashbackCluster && job.SchemaState == model.StateWriteReorganization { txn, err := store.Begin() assert.NoError(t, err) @@ -572,30 +568,10 @@ func TestFlashbackInProcessErrorMsg(t *testing.T) { assert.NotEqual(t, slices[1], "0") txn.Rollback() } - } - dom.DDL().SetHook(hook) + }) tk.Exec(fmt.Sprintf("flashback cluster to timestamp '%s'", oracle.GetTimeFromTS(ts).Format(types.TimeFSPFormat))) - dom.DDL().SetHook(originHook) + testfailpoint.Disable(t, "github.com/pingcap/tidb/pkg/ddl/onJobRunBefore") require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/pkg/ddl/injectSafeTS")) } } - -type testCallback struct { - ddl.Callback - OnJobRunBeforeExported func(job *model.Job) -} - -func newTestCallBack(t *testing.T, dom *domain.Domain) *testCallback { - defHookFactory, err := ddl.GetCustomizedHook("default_hook") - require.NoError(t, err) - return &testCallback{ - Callback: defHookFactory(dom), - } -} - -func (c *testCallback) OnJobRunBefore(job *model.Job) { - if c.OnJobRunBeforeExported != nil { - c.OnJobRunBeforeExported(job) - } -} diff --git a/tests/realtikvtest/pessimistictest/pessimistic_test.go b/tests/realtikvtest/pessimistictest/pessimistic_test.go index 5772776981bd3..3fb4120d85079 100644 --- a/tests/realtikvtest/pessimistictest/pessimistic_test.go +++ b/tests/realtikvtest/pessimistictest/pessimistic_test.go @@ -3602,3 +3602,90 @@ func TestEndTxnOnLockExpire(t *testing.T) { }) } } + +func TestForShareWithPromotion(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + tk1 := testkit.NewTestKit(t, store) + tk1.MustExec("use test") + tk.MustExec("use test") + tk.MustExec("create table t(a int key, b int)") + tk.MustExec("insert into t values(1, 10)") + tk.MustExec("set innodb_lock_wait_timeout = 1") + + for _, tt := range []struct { + ForShareNoopEnable bool + ForShareUpgradeEnabled bool + }{ + {false, false}, + {false, true}, + {true, false}, + {true, true}, + } { + tk.MustExec(fmt.Sprintf("set @@tidb_enable_noop_functions = %v", tt.ForShareNoopEnable)) + tk.MustExec(fmt.Sprintf("set @@tidb_enable_shared_lock_promotion = %v", tt.ForShareUpgradeEnabled)) + + tk1.MustExec("begin") + tk1.MustQuery("select * from t for update").Check(testkit.Rows("1 10")) + + tk.MustExec("begin") + if tt.ForShareUpgradeEnabled { + _, err := tk.Exec("select * from t where a = 1 for share nowait") + require.True(t, strings.Contains(err.Error(), "could not be acquired immediately and NOWAIT is set")) + _, err = tk.Exec("select * from t for share nowait") + require.True(t, strings.Contains(err.Error(), "could not be acquired immediately and NOWAIT is set")) + _, err = tk.Exec("select * from t where a = 1 for share") + require.True(t, strings.Contains(err.Error(), "Lock wait timeout exceeded; try restarting transaction")) + _, err = tk.Exec("select * from t for share") + require.True(t, strings.Contains(err.Error(), "Lock wait timeout exceeded; try restarting transaction")) + } else if tt.ForShareNoopEnable { + tk.MustQuery("select * from t where a = 1 for share nowait").Check(testkit.Rows("1 10")) + tk.MustQuery("select * from t where a = 1 for share").Check(testkit.Rows("1 10")) + tk.MustQuery("select * from t for share").Check(testkit.Rows("1 10")) + tk.MustQuery("select * from t").Check(testkit.Rows("1 10")) + } else { + _, err := tk.Exec("select * from t where a = 1 for share nowait") + require.True(t, strings.Contains(err.Error(), "use tidb_enable_noop_functions to enable")) + _, err = tk.Exec("select * from t for share") + require.True(t, strings.Contains(err.Error(), "use tidb_enable_noop_functions to enable")) + _, err = tk.Exec("select * from t for share nowait") + require.True(t, strings.Contains(err.Error(), "use tidb_enable_noop_functions to enable")) + } + tk.MustExec("rollback") + tk1.MustExec("rollback") + } +} + +func TestForShareWithPromotionPlanCache(t *testing.T) { + store := testkit.CreateMockStore(t) + tk := testkit.NewTestKit(t, store) + tk1 := testkit.NewTestKit(t, store) + tk1.MustExec("use test") + tk.MustExec("use test") + tk.MustExec("create table t(a int key, b int)") + tk.MustExec("insert into t values(1, 10)") + tk.MustExec("set innodb_lock_wait_timeout = 1") + tk.MustExec(`set @pk=1`) + + tk.MustExec(fmt.Sprintf("set @@tidb_enable_noop_functions = %v", 1)) + tk.MustExec(`prepare st from 'select * from t where a=? for share'`) + + tk.MustExec(`execute st using @pk`) + tk.MustExec(`begin`) + tk.MustExec(`execute st using @pk`) + // can't reuse since it's in txn now. + tk.MustQuery(`select @@last_plan_from_cache`).Check(testkit.Rows("0")) + tk.MustExec(`rollback`) + + // can't reuse since the `tidb_enable_shared_lock_promotion` is changed. + tk.MustExec(`execute st using @pk`) + tk.MustExec(fmt.Sprintf("set @@tidb_enable_shared_lock_promotion = %v", 1)) + tk.MustExec(`execute st using @pk`) + tk.MustQuery(`select @@last_plan_from_cache`).Check(testkit.Rows("0")) + tk.MustExec(`execute st using @pk`) + tk.MustQuery(`select @@last_plan_from_cache`).Check(testkit.Rows("1")) + tk.MustExec(`begin`) + tk.MustExec(`execute st using @pk`) + tk.MustQuery(`select @@last_plan_from_cache`).Check(testkit.Rows("0")) + tk.MustExec(`rollback`) +} diff --git a/tools/check/check-gogenerate.sh b/tools/check/check-gogenerate.sh index e700d49a85927..9acbed85dcfcd 100755 --- a/tools/check/check-gogenerate.sh +++ b/tools/check/check-gogenerate.sh @@ -16,6 +16,7 @@ set -euo pipefail go generate ./... +pushd pkg/parser && make generate && popd set +e diffline=$(git status -s | awk '{print $2}' | xargs grep '^// Code generated .* DO NOT EDIT\.$' 2>/dev/null) set -e diff --git a/tools/check/ut.go b/tools/check/ut.go index 22f6efb98006a..295ab72be0302 100644 --- a/tools/check/ut.go +++ b/tools/check/ut.go @@ -26,7 +26,6 @@ import ( "math/rand" "os" "os/exec" - "path" "path/filepath" "regexp" "runtime" @@ -88,7 +87,7 @@ ut run --short` return true } -const modulePath = "github.com/pingcap/tidb" +var modulePath = filepath.Join("github.com", "pingcap", "tidb") type task struct { pkg string @@ -546,7 +545,7 @@ func collectCoverProfileFile() { } func collectOneCoverProfileFile(result map[string]*cover.Profile, file os.DirEntry) { - f, err := os.Open(path.Join(coverFileTempDir, file.Name())) + f, err := os.Open(filepath.Join(coverFileTempDir, file.Name())) if err != nil { fmt.Println("open temp cover file error:", err) os.Exit(-1) @@ -702,7 +701,8 @@ func filterTestCases(tasks []task, arg1 string) ([]task, error) { } func listPackages() ([]string, error) { - cmd := exec.Command("go", "list", "./...") + listPath := strings.Join([]string{".", "..."}, string(filepath.Separator)) + cmd := exec.Command("go", "list", listPath) ss, err := cmdToLines(cmd) if err != nil { return nil, withTrace(err) @@ -749,7 +749,7 @@ type testResult struct { func (n *numa) runTestCase(pkg string, fn string) testResult { res := testResult{ JUnitTestCase: JUnitTestCase{ - Classname: path.Join(modulePath, pkg), + Classname: filepath.Join(modulePath, pkg), Name: fn, }, } @@ -759,7 +759,7 @@ func (n *numa) runTestCase(pkg string, fn string) testResult { var start time.Time for i := 0; i < 3; i++ { cmd := n.testCommand(pkg, fn) - cmd.Dir = path.Join(workDir, pkg) + cmd.Dir = filepath.Join(workDir, pkg) // Combine the test case output, so the run result for failed cases can be displayed. cmd.Stdout = &buf cmd.Stderr = &buf @@ -846,10 +846,11 @@ func failureCases(input []JUnitTestCase) int { func (n *numa) testCommand(pkg string, fn string) *exec.Cmd { args := make([]string, 0, 10) - exe := "./" + testFileName(pkg) + exe := strings.Join([]string{".", testFileName(pkg)}, string(filepath.Separator)) + if coverprofile != "" { - fileName := strings.ReplaceAll(pkg, "/", "_") + "." + fn - tmpFile := path.Join(coverFileTempDir, fileName) + fileName := strings.ReplaceAll(pkg, string(filepath.Separator), "_") + "." + fn + tmpFile := filepath.Join(coverFileTempDir, fileName) args = append(args, "-test.coverprofile", tmpFile) } args = append(args, "-test.cpu", "1") @@ -867,7 +868,8 @@ func (n *numa) testCommand(pkg string, fn string) *exec.Cmd { } func skipDIR(pkg string) bool { - skipDir := []string{"br", "lightning", "pkg/lightning", "cmd", "dumpling", "tests", "tools/check", "build"} + skipDir := []string{"br", "lightning", filepath.Join("pkg", "lightning"), + "cmd", "dumpling", "tests", filepath.Join("tools", "check"), "build"} for _, ignore := range skipDir { if strings.HasPrefix(pkg, ignore) { return true @@ -888,7 +890,7 @@ func buildTestBinary(pkg string) error { if short { cmd.Args = append(cmd.Args, "--test.short") } - cmd.Dir = path.Join(workDir, pkg) + cmd.Dir = filepath.Join(workDir, pkg) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { @@ -900,9 +902,9 @@ func buildTestBinary(pkg string) error { func generateBuildCache() error { // cd cmd/tidb-server && go test -tags intest -exec true -vet off -toolexec=go-compile-without-link cmd := exec.Command("go", "test", "-tags=intest", "-exec=true", "-vet=off") - goCompileWithoutLink := fmt.Sprintf("-toolexec=%s/tools/check/go-compile-without-link.sh", workDir) + goCompileWithoutLink := fmt.Sprintf("-toolexec=%s", filepath.Join(workDir, "tools", "check", "go-compile-without-link.sh")) cmd.Args = append(cmd.Args, goCompileWithoutLink) - cmd.Dir = path.Join(workDir, "cmd/tidb-server") + cmd.Dir = filepath.Join(workDir, "cmd", "tidb-server") if err := cmd.Run(); err != nil { return withTrace(err) } @@ -918,10 +920,10 @@ func buildTestBinaryMulti(pkgs []string) error { } // go test --exec=xprog -cover -vet=off --count=0 $(pkgs) - xprogPath := path.Join(workDir, "tools/bin/xprog") + xprogPath := filepath.Join(workDir, "tools", "bin", "xprog") packages := make([]string, 0, len(pkgs)) for _, pkg := range pkgs { - packages = append(packages, path.Join(modulePath, pkg)) + packages = append(packages, filepath.Join(modulePath, pkg)) } var cmd *exec.Cmd @@ -957,20 +959,20 @@ func testBinaryExist(pkg string) (bool, error) { } func testFileName(pkg string) string { - _, file := path.Split(pkg) + _, file := filepath.Split(pkg) return file + ".test.bin" } func testFileFullPath(pkg string) string { - return path.Join(workDir, pkg, testFileName(pkg)) + return filepath.Join(workDir, pkg, testFileName(pkg)) } func listNewTestCases(pkg string) ([]string, error) { - exe := "./" + testFileName(pkg) + exe := strings.Join([]string{".", testFileName(pkg)}, string(filepath.Separator)) // session.test -test.list Test cmd := exec.Command(exe, "-test.list", "Test") - cmd.Dir = path.Join(workDir, pkg) + cmd.Dir = filepath.Join(workDir, pkg) var buf bytes.Buffer cmd.Stdout = &buf err := cmd.Run() diff --git a/tools/check/xprog.go b/tools/check/xprog.go index 0be841cca51b8..1185df462f9a6 100644 --- a/tools/check/xprog.go +++ b/tools/check/xprog.go @@ -35,7 +35,7 @@ func main() { // Extract the current work directory cwd := os.Args[0] - cwd = cwd[:len(cwd)-len("tools/bin/xprog")] + cwd = cwd[:len(cwd)-len(filepath.Join("tools", "bin", "xprog"))] testBinaryPath := filepath.Clean(os.Args[1]) dir, _ := filepath.Split(testBinaryPath) @@ -43,7 +43,7 @@ func main() { // Extract the package info from /tmp/go-build2662369829/b1382/importcfg.link pkg := getPackageInfo(dir) - const prefix = "github.com/pingcap/tidb/" + var prefix = filepath.Join("github.com", "pingcap", "tidb") if !strings.HasPrefix(pkg, prefix) { os.Exit(-3) }